散點圖
散點圖也叫 X-Y 圖,它将所有的資料以點的形式展現在直角坐标系上,以顯示變量之間的互相影響程度,點的位置由變量的數值決定。
通過觀察散點圖上資料點的分布情況,我們可以推斷出變量間的相關性。如果變量之間不存在互相關系,那麼在散點圖上就會表現為随機分布的離散的點,如果存在某種相關性,那麼大部分的資料點就會相對密集并以某種趨勢呈現。資料的相關關系主要分為:正相關(兩個變量值同時增長)、負相關(一個變量值增加另一個變量值下降)、不相關、線性相關、指數相關等,表現在散點圖上的大緻分布如下圖所示。那些離點叢集較遠的點我們稱為離群點或者異常點。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SZkBzYyQTOjV2NycTY4I2NwUmZhZGN4MGN1QTZkNWY18CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
示例圖如下:
繪制散點圖:
散點圖的繪制,使用的是
plt.scatter
方法,這個方法有以下參數:
-
:分别是x軸和y軸的資料集。兩者的資料長度必須一緻。x,y
-
:點的尺寸。如果是一個具體的數字,那麼散點圖的所有點都是一樣大小,如果是一個序列,那麼這個序列的長度應該和x軸資料量一緻,序列中的每個元素代表每個點的尺寸。s
-
:點的顔色。可以為具體的顔色,也可以為一個序列或者是一個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])
效果圖如下: