python數據科學-多變數數據分析

01|寫在前面:

在前面我們研究了單列(變數)數據情況,現實中的案例大多都是多列(變數)的,即影響一件事情的因素有多個,我們除了要看單列數據以外還需要看看這不同列之間是否存在某些聯繫。常見的關係有四種:無關聯、強關聯、簡單關聯和多元(非簡單)關聯。接下來具體看看具體如何藉助可視化對多變數數據進行分析。

02|數據導入:

本次的數據是用的sklearn庫自帶的iris數據集,那麼iris數據集是什麼呢?

Iris數據集是機器學習中常用的分類實驗數據集,也是一個多變數分析的數據集,數據集共包含150個數據集,3個分類,每50個數據集是一類,每個數據包含4個屬性(也可以理解成是特徵值)。

源數據集部分

這裡的前四列就是四個屬性值,第五列是數據集所屬的分類。數據的分類有Iris-setosa,Iris-versicolor,Iris-virginica三種,為了便於後續的進一步分析,把這三種分類分別用0,1,2代替。

#載入相關庫nfrom sklearn.datasets import load_irisnfrom sklearn.preprocessing import scalenimport numpy as npnimport matplotlib.pyplot as pltnimport itertoolsn%matplotlib inlinenplt.style.use("bmh")n

在導入相關庫以後就可以載入對應的數據集進來啦。

#載入Iris數據集ndata=load_iris()nx=data["data"]#將屬性值賦值給xny=data["target"]#將對象/分類值賦值給yncol_names=data["feature_names"]#列名nprint("col_names:{}".format(np.unique(col_names)))nprint("target:{}".format(np.unique(y)))n

部分數據預覽,確認一下導入的數據是否正常。

#iris數據集的列名,分別表示花萼長度、花萼寬度、花瓣長度、花瓣寬度ncol_names:[petal length (cm) petal width (cm) sepal length (cm) sepal width (cm)]n#數據集的分類ntarget:[0 1 2]#分別用0,1,2代替n

03|數據可視化:

3.1多變數數據概覽:

當數據集有多個變數時,我們先看看這些變數的一個整體分布情況,比較有效的表達方式就是箱型圖。

#繪製圖表nfig=plt.figure(1)nax=fig.add_subplot(111)nax.boxplot(x)nax.set_xticklabels(data["feature_names"])n

各屬性值的箱型圖

通過上圖我們可以看出,petal width的中位數值最小,speal length的最大;speal width有異常值,而其他屬性沒有;speal length中的最大值時四個屬性值中的最大值,petal width最小值是四個屬性值中的最小值。

3.2變數間關係分析

我們一般分析兩個變數之間的關係時,最簡單粗暴的一種方法就是繪製這兩個變數的直線,然後觀察這兩條直線的走勢,兩條直線越接近(也可以用兩者的夾角大小去衡量),說明相關性越強,比如下面這兩個圖。

data=range(1101,1113)nsales_A=range(200,2600,200)nsales_B=range(1950,150,-150)nfig=plt.figure()nax1=fig.add_subplot(111)nax1.plot(data,sales_A,label="sales_A")nax2=ax1.twinx()nax2.plot(data,sales_B,c="r",label="sales_B")nax1.legend(loc="upper center")nax2.legend(loc="lower center")n

AB兩種產品銷量隨時間變化

該圖反映了兩種產品隨著時間的推移成負相關關係,在日常業務中新產品上市時,新舊產品之間會出現這種關係,比如你把A產品當作iphone8,B產品當作iphone7,7銷量開始下降的時候正是8上市的時候。

data=range(1101,1113)nsales_A=range(200,2600,200)nsales_B=range(150,1950,150)nplt.subplot()nplt.plot(data,sales_A,label="sales_A")nplt.plot(data,sales_B,label="sales_B")nplt.legend(loc="best")n

AB兩種產品銷量隨時間變化

通過這個圖可以看出AB兩產品的銷量是呈比較強的相關性,在業務中很典型的一個例子就是啤酒和尿布之間的關係。

當然了,如同第一節中提到的,可視化圖表只是讓我們對整體的數據有一個大概的認識,不太具體。關於衡量兩個變數具體的相關性大小可以用相關性係數來衡量。這裡先不涉及。

上面的相關性分析常用於變數是「時序數據」的情景下,用來表示隨著時間的推移,兩個變數呈現一個什麼樣的關係。那麼「非時序數據」我們該怎麼破呢?

這裡用散點圖去進行分析,之所以用散點圖是因散點圖是以點的形式表示,可以通過看不同變數的分布情況來分析不同變數之間的關係。

#將多變數數據進行可視化n#繪出6個子圖形,包括以下幾列:花萼長度、花萼寬度、花瓣長度、花瓣寬度(四個屬性值兩兩組合)nplt.close("all")nplt.figure(1)nn#繪製一個3行2列的圖nsubplot_start=321ncol_numbers=range(0,4)nn#給圖形添加標籤ncol_pairs=itertools.combinations(col_numbers,2)nplt.subplots_adjust(left=0.2,right=1.2,top=2.0,bottom=0.6,hspace=0.5)nnfor col_pair in col_pairs:n plt.subplot(subplot_start)n plt.scatter(x[:,col_pair[0]],x[:,col_pair[1]],c=y)n plt.xlabel(col_names[col_pair[0]])n plt.ylabel(col_names[col_pair[1]])n subplot_start+=1n

不同屬性值兩兩組合後的散點圖

上圖中三種顏色代表三個不同的分類,通過圖表可以看出petal length和petal width對類的分類效果最好(當petal length<2,petal width<1時,屬於「0」類,當兩者繼續往大時屬於「1」類,達到最大時,屬於「2」類),而speal legenth和speal width對類的分類效果最差。

小小的總結一下:如果是要看兩個變數隨著時間推移呈現出什麼樣的關係時,可以繪製折線圖參考;而如果要看兩個變數與所屬類別之間關係時,可以繪製散點圖進行參考。

04|涉及到的知識點:

  • 同一個坐標中繪製兩條或多條折線(iphone8和iphone7的例子)。
  • 同一個坐標中繪製次兩條Y軸(啤酒和尿布的例子)。
  • 箱型圖怎麼看(多變數數據概覽)。

推薦閱讀:

怎麼寫一個拿得出手的項目?
Python黑帽編程 3.1 ARP欺騙
python anaconda 怎麼安裝?
Scala程序能不能像處理數據一樣,優雅地處理Scala代碼?

TAG:Python | 数据分析 | 机器学习 |