python数据科学-多变量数据分析
總第87篇
01|寫在前面:
在前面我們研究了單列(變量)數(shù)據(jù)情況,現(xiàn)實中的案例大多都是多列(變量)的,即影響一件事情的因素有多個,我們除了要看單列數(shù)據(jù)以外還需要看看這不同列之間是否存在某些聯(lián)系。常見的關(guān)系有四種:無關(guān)聯(lián)、強關(guān)聯(lián)、簡單關(guān)聯(lián)和多元(非簡單)關(guān)聯(lián)。接下來具體看看具體如何借助可視化對多變量數(shù)據(jù)進行分析。
你可以看:python數(shù)據(jù)科學-單變量數(shù)據(jù)分析
02|數(shù)據(jù)導入:
本次的數(shù)據(jù)是用的sklearn庫自帶的iris數(shù)據(jù)集,那么iris數(shù)據(jù)集是什么呢?
Iris數(shù)據(jù)集是機器學習中常用的分類實驗數(shù)據(jù)集,也是一個多變量分析的數(shù)據(jù)集,數(shù)據(jù)集共包含150個數(shù)據(jù)集,3個分類,每50個數(shù)據(jù)集是一類,每個數(shù)據(jù)包含4個屬性(也可以理解成是特征值)。
源數(shù)據(jù)集部分這里的前四列就是四個屬性值,第五列是數(shù)據(jù)集所屬的分類。數(shù)據(jù)的分類有Iris-setosa,Iris-versicolor,Iris-virginica三種,為了便于后續(xù)的進一步分析,把這三種分類分別用0,1,2代替。
#加載相關(guān)庫 from sklearn.datasets import load_iris from sklearn.preprocessing import scale import numpy as np import matplotlib.pyplot as plt import itertools %matplotlib inline plt.style.use("bmh")在導入相關(guān)庫以后就可以加載對應的數(shù)據(jù)集進來啦。
#加載Iris數(shù)據(jù)集 data=load_iris() x=data["data"]#將屬性值賦值給x y=data["target"]#將對象/分類值賦值給y col_names=data["feature_names"]#列名 print("col_names:{}".format(np.unique(col_names)))#將列名打印 print("target:{}".format(np.unique(y)))#將分類打印確認一下導入的列名和分類數(shù)據(jù)是否正常。
#iris數(shù)據(jù)集的列名,分別表示花萼長度、花萼寬度、花瓣長度、花瓣寬度 col_names:['petal length (cm)' 'petal width (cm)' 'sepal length (cm)' 'sepal width (cm)'] #數(shù)據(jù)集的分類 target:[0 1 2]#分別用0,1,2代替03|數(shù)據(jù)可視化:
3.1多變量數(shù)據(jù)概覽:
當數(shù)據(jù)集有多個變量時,我們先看看這些變量的一個整體分布情況,比較有效的表達方式就是箱型圖。
#繪制圖表 fig=plt.figure(1) ax=fig.add_subplot(111) ax.boxplot(x) ax.set_xticklabels(data["feature_names"]) 各屬性值的箱型圖通過上圖我們可以看出,petal width的中位數(shù)值最小,speal length的最大;speal width有異常值,而其他屬性沒有;speal length中的最大值時四個屬性值中的最大值,petal width最小值是四個屬性值中的最小值。
3.2變量間關(guān)系分析
我們一般分析兩個變量之間的關(guān)系時,最簡單粗暴的一種方法就是繪制這兩個變量的直線,然后觀察這兩條直線的走勢,兩條直線越接近(也可以用兩者的夾角大小去衡量),說明相關(guān)性越強,比如下面這兩個圖。
data=range(1101,1113) sales_A=range(200,2600,200) sales_B=range(1950,150,-150) fig=plt.figure() ax1=fig.add_subplot(111) ax1.plot(data,sales_A,label="sales_A") ax2=ax1.twinx() ax2.plot(data,sales_B,c="r",label="sales_B") ax1.legend(loc="upper center") ax2.legend(loc="lower center") AB兩種產(chǎn)品銷量隨時間變化該圖反映了兩種產(chǎn)品隨著時間的推移成負相關(guān)關(guān)系,在日常業(yè)務中新產(chǎn)品上市時,新舊產(chǎn)品之間會出現(xiàn)這種關(guān)系,比如你把A產(chǎn)品當作iphone8,B產(chǎn)品當作iphone7,7銷量開始下降的時候正是8上市的時候。
data=range(1101,1113) sales_A=range(200,2600,200) sales_B=range(150,1950,150) plt.subplot() plt.plot(data,sales_A,label="sales_A") plt.plot(data,sales_B,label="sales_B") plt.legend(loc="best") AB兩種產(chǎn)品銷量隨時間變化通過這個圖可以看出AB兩產(chǎn)品的銷量是呈比較強的相關(guān)性,在業(yè)務中很典型的一個例子就是啤酒和尿布之間的關(guān)系。
當然了,如同第一節(jié)中提到的,可視化圖表只是讓我們對整體的數(shù)據(jù)有一個大概的認識,不太具體。關(guān)于衡量兩個變量具體的相關(guān)性大小可以用相關(guān)性系數(shù)來衡量。這里先不涉及。
上面的相關(guān)性分析常用于變量是“時序數(shù)據(jù)”的情景下,用來表示隨著時間的推移,兩個變量呈現(xiàn)一個什么樣的關(guān)系。那么“非時序數(shù)據(jù)”我們該怎么破呢?
這里用散點圖去進行分析,之所以用散點圖是因散點圖是以點的形式表示,可以通過看不同變量的分布情況來分析不同變量之間的關(guān)系。
#將多變量數(shù)據(jù)進行可視化 #繪出6個子圖形,包括以下幾列:花萼長度、花萼寬度、花瓣長度、花瓣寬度(四個屬性值兩兩組合) plt.close("all") plt.figure(1) #繪制一個3行2列的圖 subplot_start=321 col_numbers=range(0,4) #給圖形添加標簽 col_pairs=itertools.combinations(col_numbers,2) plt.subplots_adjust(left=0.2,right=1.2,top=2.0,bottom=0.6,hspace=0.5) for col_pair in col_pairs:plt.subplot(subplot_start)plt.scatter(x[:,col_pair[0]],x[:,col_pair[1]],c=y)plt.xlabel(col_names[col_pair[0]])plt.ylabel(col_names[col_pair[1]])subplot_start+=1 不同屬性值兩兩組合后的散點圖上圖中三種顏色代表三個不同的分類,通過圖表可以看出petal length和petal width對類的分類效果最好(當petal length<2,petal width<1時,屬于“0”類,當兩者繼續(xù)往大時屬于“1”類,達到最大時,屬于“2”類),而speal legenth和speal width對類的分類效果最差。
小小的總結(jié)一下:如果是要看兩個變量隨著時間推移呈現(xiàn)出什么樣的關(guān)系時,可以繪制折線圖參考;而如果要看兩個變量與所屬類別之間關(guān)系時,可以繪制散點圖進行參考。
04|涉及到的知識點:
同一個坐標中繪制兩條或多條折線(啤酒和尿布的例子)。
同一個坐標中繪制兩條Y軸(iphone8和iphone7的例子)。
箱型圖怎么看(多變量數(shù)據(jù)概覽)。
關(guān)于每篇中涉及到的知識點說明:
近期的文章,我會在每篇文章的末尾加上涉及到的知識點這一項,該項內(nèi)容為我個人覺是一些比較新的點,或者是我覺得有必要提的點,僅此而已。
總結(jié)
以上是生活随笔為你收集整理的python数据科学-多变量数据分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 快手直播怎么定位到别的城市(快手短视频A
- 下一篇: python数据科学-数据预处理