散點圖
散點圖也叫 X-Y 圖,它將所有的數據以點的形式展現在直角坐標系上,以顯示變量之間的相互影響程度,點的位置由變量的數值決定。
通過觀察散點圖上數據點的分布情況,我們可以推斷出變量間的相關性。如果變量之間不存在相互關系,那么在散點圖上就會表現為隨機分布的離散的點,如果存在某種相關性,那么大部分的數據點就會相對密集並以某種趨勢呈現。數據的相關關系主要分為:正相關(兩個變量值同時增長)、負相關(一個變量值增加另一個變量值下降)、不相關、線性相關、指數相關等,表現在散點圖上的大致分布如下圖所示。那些離點集群較遠的點我們稱為離群點或者異常點。

示例圖如下:

繪制散點圖:
散點圖的繪制,使用的是plt.scatter
方法,這個方法有以下參數:
x,y
:分別是x軸和y軸的數據集。兩者的數據長度必須一致。s
:點的尺寸。如果是一個具體的數字,那么散點圖的所有點都是一樣大小,如果是一個序列,那么這個序列的長度應該和x軸數據量一致,序列中的每個元素代表每個點的尺寸。c
:點的顏色。可以為具體的顏色,也可以為一個序列或者是一個cmap
對象。marker
:標記點,默認是圓點,也可以換成其他的。- 其他參數:
https://matplotlib.org/api/_as_gen/matplotlib.pyplot.scatter.html#matplotlib.pyplot.scatter
。
比如有一組運動員身高和體重以及年齡的數據,那么可以通過以下代碼來繪制散點圖:
male_athletes = athletes[athletes['Sex'] == 'M'] female_athletes = athletes[athletes['Sex'] == 'F'] male_mean_height = male_athletes['Height'].mean() female_mean_height = female_athletes['Height'].mean() male_mean_weight = male_athletes['Weight'].mean() female_mean_weight = female_athletes['Weight'].mean() plt.figure(figsize=(10,5)) plt.scatter(male_athletes['Height'],male_athletes['Weight'],s=male_athletes['Age'],marker='^',color='g',label='男性',alpha=0.5) plt.scatter(female_athletes['Height'],female_athletes['Weight'],color='r',alpha=0.5,s=female_athletes['Age'],label='女性') plt.axvline(male_mean_height,color="g",linewidth=1) plt.axhline(male_mean_weight,color="g",linewidth=1) plt.axvline(female_mean_height,color="r",linewidth=1) plt.axhline(female_mean_weight,color="r",linewidth=1) plt.xticks(np.arange(140,220,5)) plt.yticks(np.arange(30,150,10)) plt.legend(prop=font) plt.xlabel("身高(cm)",fontproperties=font) plt.ylabel("體重(kg)",fontproperties=font) plt.title("運動員身高和體重散點圖",fontproperties=font) plt.grid() plt.show()
效果圖如下:

繪制回歸曲線:
有一組數據后,我們可以對這組數據進行回歸分析,回歸分析可以幫助我們了解這組數據的大體走向。回歸分析按照涉及的變量的多少,分為一元回歸和多元回歸分析;按照自變量的多少,可分為簡單回歸分析和多重回歸分析;按照自變量和因變量之間的關系類型,可分為線性回歸分析和非線性回歸分析。如果在回歸分析中,只包括一個自變量和一個因變量,且二者的關系可用一條直線近似表示,這種回歸分析稱為一元線性回歸分析。如果回歸分析中包括兩個或兩個以上的自變量,且自變量之間存在線性相關,則稱為多重線性回歸分析。

通過以上運動員散點圖的分析,我們總體上可以看出來是滿足線性回歸的,因此可以在圖上繪制一個線性回歸的線條。想要繪制線性回歸的線條,需要先按照之前的數據計算出線性方程,假如x是自變量,y是因變量,那么線性回歸的方程可以用以下幾個來表示:
y = 截距+斜率*x+誤差
只要把這個方程計算出來了,那么后續我們就可以根據x的值,大概的估計出y的取值范圍,也就是預測。如果我們針對以上運動員的身高和體重的關系,只要有身高,那么就可以大概的估計出體重的值。回歸方程的繪制我們需要借助scikit-learn庫,這個庫是專門做機器學習用的,我們需要使用里面的線性回歸類sklearn.liear_regression.LinearRegression。
示例代碼如下:
from sklearn.linear_model import LinearRegression male_athletes = athletes[athletes['Sex'] == 'M'].dropna() female_athletes = athletes[athletes['Sex'] == 'F'].dropna() xtrain = male_athletes['Height'] ytrain = male_athletes['Weight'] # 生成線性回歸對象 model = LinearRegression() # 喂訓練數據進去,但是需要把因變量轉換成1列多行的數據 model.fit(xtrain[:,np.newaxis],ytrain) # 打印斜率 print(model.coef_) # 打印截距 print(model.intercept_) line_xticks = xtrain # 根據回歸方程計算出的y軸坐標 line_yticks = model.predict(xtrain[:,np.newaxis])
效果圖如下:
