python可視化案例

一卜范、熱力圖(heatmap)
熱力圖可以看出兩個(gè)屬性之間的相關(guān)系數(shù)。

  • 舉例一,以Titanic數(shù)據(jù)為例:紅色(正相關(guān))或者藍(lán)色(負(fù)相關(guān))顏色越深說(shuō)明相關(guān)性越強(qiáng)迁匠。
plt.figure(figsize=(12,10))
foo = sns.heatmap(train.drop('PassengerId',axis=1).corr(), vmax=0.6, square=True, annot=True)
熱力圖1
  • 舉例二:網(wǎng)上找的示例
import matplotlib.pyplot as plt  
import seaborn as sns  
data = pd.read_csv("../input/car_crashes.csv")  
data = data.corr()  
sns.heatmap(data)  
plt.show()

熱力圖2

二、矩陣圖pairplot
當(dāng)數(shù)據(jù)的特征維度大于2時(shí)驹溃,無(wú)法在平面上表征這些維度城丧,seaborn提供了pairplot。兩兩組成pair看數(shù)據(jù)在2個(gè)維度平面上的分布情況豌鹤。
圖中點(diǎn)的顏色按照結(jié)果種類(lèi)(class=0\1\2...)區(qū)分亡哄。對(duì)角線(xiàn)位置是直方圖,其它位置是散點(diǎn)圖布疙。pairplot更適合大量散點(diǎn)的場(chǎng)景蚊惯,更容易看出變量間的相關(guān)性愿卸。

  • 舉例一:Titanic數(shù)據(jù),nosurv_col未獲救截型,紅色趴荸,surv_col獲救,藍(lán)色宦焦。這是一個(gè)典型不適合的場(chǎng)景发钝,基本上看不出相關(guān)性。vars選擇的是整個(gè)cols
cols = ['Survived','Pclass','Age','SibSp','Parch','Fare']
g = sns.pairplot(data=train.dropna(), vars=cols, size=1.5, 
                 hue='Survived', palette=[nosurv_col,surv_col])
g.set(xticklabels=[])
pairplot圖形1
  • 舉例二:網(wǎng)上找的案例波闹,TV\Radio\Newpaper和sales間的關(guān)系,x_vars=['TV','Radio','Newspaper'],y_vars='Sales'
import seaborn as sns
sns.pairplot(data,x_vars=['TV','Radio','Newspaper'],y_vars='Sales',size=7,aspect=0.8)
pairplot圖形2

seaborn的pairplot函數(shù)繪制X的每一維度和對(duì)應(yīng)Y的散點(diǎn)圖酝豪。通過(guò)設(shè)置size和aspect參數(shù)來(lái)調(diào)節(jié)顯示的大小和比例【椋可以從圖中看出孵淘,TV特征和銷(xiāo)量是有比較強(qiáng)的線(xiàn)性關(guān)系的,而Radio和Sales線(xiàn)性關(guān)系弱一些锄码,Newspaper和Sales線(xiàn)性關(guān)系更弱夺英。通過(guò)加入一個(gè)參數(shù)kind=’reg’,seaborn可以添加一條最佳擬合直線(xiàn)和95%的置信帶滋捶。

sns.pairplot(data, x_vars=['TV','Radio','Newspaper'], y_vars='Sales', size=7, aspect=0.8, kind='reg')
pairplot圖形3

舉例三:來(lái)自大牛寒小陽(yáng)的博客

import matplotlib.pyplot as plt
import seaborn as sns
#使用pairplot看不同特征維度pair下數(shù)據(jù)的空間分布狀況
_=sns.pairplot(df[:50],vars=[8,11,12,14,19],hue="class",size=1.5)
plt.show()

pairplot圖形4

解讀:從柱狀圖看痛悯,第11維和第14維看起來(lái)是近似線(xiàn)性可分的;從散列圖看重窟,第12和19維之間呈現(xiàn)出很高的負(fù)相關(guān)性载萌。
接著用Seaborn的corrplot

import matplotlib.pyplot as plt
plt.figure(figsize=(12,10))
_=sns.corrplot(df,annot=False)
plt.show()

各維度間的相關(guān)性

解讀:最后一行是最終的類(lèi)別(class=0/1/2..)。
從最后一行看巡扇,第11維的特征和類(lèi)別間有極強(qiáng)的相關(guān)性扭仁,同理第14維。從交叉各行看厅翔,第11維特征和第14維特征之間也有極高的相關(guān)性乖坠;第12維特征和第19維特征間有極強(qiáng)的負(fù)相關(guān)性。強(qiáng)相關(guān)的特征其實(shí)包含了一些冗余的特征刀闷,而除掉上圖中顏色較深的特征熊泵,其余特征包含的信息量就沒(méi)有這么大了,它們和最后的類(lèi)別相關(guān)度不高甸昏,甚至各自之間也沒(méi)什么先慣性顽分。插一句,這里的維度只有20施蜜,所以這個(gè)相關(guān)度計(jì)算并不費(fèi)太大力氣卒蘸,然而實(shí)際情形中,你完全有可能有遠(yuǎn)高于這個(gè)數(shù)字的特征維度翻默,同時(shí)樣本量也可能多很多缸沃,那種情形下我們可能要先做一些處理恰起,再來(lái)實(shí)現(xiàn)可視化了。
三和泌、直方圖distplot
distplot(seaborn)是加強(qiáng)版的hist(pandas)村缸,都是做直方圖

  • 舉例一:Titanic數(shù)據(jù),直方圖自動(dòng)得出[0,1),[1,2)...范圍內(nèi)獲救/未獲救的人數(shù)武氓,并畫(huà)出圖形。
fig, ax = plt.subplots()
sns.distplot(surv['Age'].dropna().values, bins=range(0, 81, 1), ax=ax, kde=False, color="blue")
sns.distplot(nosurv['Age'].dropna().values, bins=range(0, 81, 1), ax=ax, kde=False, color="red")
ax.set_xlim([0, 82])
print("Median age survivors: %.1f, Median age non-survivers: %.1f"\
      %(np.median(surv['Age'].dropna()), np.median(nosurv['Age'].dropna())))
直方圖1

圖中仇箱,藍(lán)色是獲救的县恕,紅色是未獲救的。既有獲救又有未獲救是圖中紫色部分剂桥。從圖中可以看出10歲以下獲救概率高忠烛,18-30之間很少獲救。

  • 舉例二:網(wǎng)上的數(shù)據(jù)权逗,對(duì)比hist()和distplot()的區(qū)別
import matplotlib.pyplot as plt
import seaborn as sns #要注意的是一旦導(dǎo)入了seaborn美尸,matplotlib的默認(rèn)作圖風(fēng)格就會(huì)被覆蓋成seaborn的格式
%matplotlib inline  # 為了在jupyter notebook里作圖,需要用到這個(gè)命令
sns.distplot(births['prglngth'])
sns.plt.show()
直方圖2

可以看出distplot()與hist()的最大區(qū)別是有一條密度曲線(xiàn)(KDE),可以設(shè)置參數(shù)去掉這條默認(rèn)的曲線(xiàn)斟薇。

sns.distplot(births['prglngth'], kde=False)
sns.plt.show()

直方圖3

四师坎、直方圖hist

  • 舉例:以Titanic為例,考量fare與survive之間的關(guān)系
#fare有等于0的堪滨,所以要+1
dummy = plt.hist(np.log10(surv['Fare'].values+ 1), color="orange", normed=True)
dummy = plt.hist(np.log10(nosurv['Fare'].values+ 1), histtype='step', color="blue", normed=True)
直方圖

五胯陋、堆積直方圖
在作圖之前,先理解crosstab

df = DataFrame({'key1':['a','a','b','b','a'],'key2':['one','two','one','two','one'],'data1':np.random.randn(5),'data2':np.random.randn(5)})  
df  
#[Out]#       data1     data2 key1 key2  
#[Out]# 0  0.439801  1.582861    a  one  
#[Out]# 1 -1.388267 -0.603653    a  two  
#[Out]# 2 -0.514400 -0.826736    b  one  
#[Out]# 3 -1.487224 -0.192404    b  two  
#[Out]# 4  2.169966  0.074715    a  one  
pd.crosstab(df.key1,df.key2, margins=True)  
#[Out]# key2  one  two  All  
#[Out]# key1                 
#[Out]# a       2    1    3  
#[Out]# b       1    1    2  
#[Out]# All     3    2    5  

參考1
類(lèi)似crosstab做分類(lèi)的袱箱,還有:groupby\pivot_table,
參考2
對(duì)于分類(lèi)型的特征遏乔,用累積直方圖還是很合適的。

  • 舉例:Titanic
    tab.sum(1)发笔,每個(gè)class的總和盟萨,注意縱軸是percentage
tab = pd.crosstab(train['Pclass'], train['Survived'])
print(tab)
dummy = tab.div(tab.sum(1).astype(float), axis=0).plot(kind="bar", stacked=True)
dummy = plt.xlabel('Pclass')
dummy = plt.ylabel('Percentage')

綠色是survived,可以看出1st class獲救率更高了讨。


累積直方圖1

如果dummpy改為

dummy = tab.div(tab.sum(1).astype(float), axis=0).plot(kind="bar")
對(duì)比直方圖

同理捻激,性別屬性也可以用累積直方圖

sex = pd.crosstab(train['Sex'], train['Survived'])
print(sex)
dummy = sex.div(sex.sum(1).astype(float), axis=0).plot(kind="bar", stacked=True)
dummy = plt.xlabel('Sex')
dummy = plt.ylabel('Percentage')
累積直方圖2
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市量蕊,隨后出現(xiàn)的幾起案子铺罢,更是在濱河造成了極大的恐慌,老刑警劉巖残炮,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件韭赘,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡势就,警方通過(guò)查閱死者的電腦和手機(jī)泉瞻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)脉漏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)劲赠,“玉大人手形,你說(shuō)我怎么就攤上這事∏啵” “怎么了鞭达?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵司忱,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我畴蹭,道長(zhǎng)坦仍,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任叨襟,我火速辦了婚禮繁扎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘糊闽。我一直安慰自己梳玫,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布右犹。 她就那樣靜靜地躺著提澎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪傀履。 梳的紋絲不亂的頭發(fā)上虱朵,一...
    開(kāi)封第一講書(shū)人閱讀 52,696評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音钓账,去河邊找鬼碴犬。 笑死,一個(gè)胖子當(dāng)著我的面吹牛梆暮,可吹牛的內(nèi)容都是我干的服协。 我是一名探鬼主播,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼啦粹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼偿荷!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起唠椭,我...
    開(kāi)封第一講書(shū)人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤跳纳,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后贪嫂,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體寺庄,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了斗塘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赢织。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖馍盟,靈堂內(nèi)的尸體忽然破棺而出于置,到底是詐尸還是另有隱情,我是刑警寧澤贞岭,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布八毯,位于F島的核電站,受9級(jí)特大地震影響瞄桨,放射性物質(zhì)發(fā)生泄漏宪彩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一讲婚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧俊柔,春花似錦筹麸、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至留晚,卻和暖如春酵紫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背错维。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工奖地, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赋焕。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓参歹,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親隆判。 傳聞我的和親對(duì)象是個(gè)殘疾皇子犬庇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容