(十八)Seaborn知識(shí)學(xué)習(xí)5-python數(shù)據(jù)分析與機(jī)器學(xué)習(xí)實(shí)戰(zhàn)(學(xué)習(xí)筆記)

文章原創(chuàng),最近更新:2018-05-12

1.繪制線(xiàn)性回歸模型的函數(shù)
2.不同類(lèi)型的模型擬合(參考學(xué)習(xí))
3.調(diào)節(jié)其他變量(參考學(xué)習(xí))
4.控制繪制的大小和形狀(參考學(xué)習(xí))

課程來(lái)源: python數(shù)據(jù)分析與機(jī)器學(xué)習(xí)實(shí)戰(zhàn)-唐宇迪

學(xué)習(xí)參考鏈接:
1芍殖、Seaborn(sns)官方文檔學(xué)習(xí)筆記(第四章 線(xiàn)性關(guān)系的可視化))
2擂红、Seaborn官方0.8.1版本

1.繪制線(xiàn)性回歸模型的函數(shù)

使用Seaborn中的兩個(gè)主要功能可視化通過(guò)回歸確定的線(xiàn)性關(guān)系。這些函數(shù)regplot()和lmplot()是密切相關(guān)的围小,并且共享了大部分的核心功能。然而树碱,了解他們不同的方式很重要肯适,以便您可以快速為特定工作選擇正確的工具。

在最簡(jiǎn)單的調(diào)用中成榜,兩個(gè)函數(shù)繪制了兩個(gè)變量x和y的散點(diǎn)圖框舔,然后擬合回歸模型y?x并繪制了該回歸線(xiàn)的結(jié)果回歸線(xiàn)和95%置信區(qū)間:

sns.load_dataset("tips")中的tips是seaborn庫(kù)自帶的一個(gè)數(shù)據(jù)集.

import seaborn as sns
import numpy as np

sns.set(color_codes=True)
np.random.seed(sum(map(ord, "regression")))
tips = sns.load_dataset("tips")
print(tips.head())

輸出的結(jié)果如下:

   total_bill   tip     sex smoker  day    time  size
0       16.99  1.01  Female     No  Sun  Dinner     2
1       10.34  1.66    Male     No  Sun  Dinner     3
2       21.01  3.50    Male     No  Sun  Dinner     3
3       23.68  3.31    Male     No  Sun  Dinner     2
4       24.59  3.61  Female     No  Sun  Dinner     4

通過(guò)輸出的結(jié)果可以看出,以上數(shù)據(jù)包含幾個(gè)關(guān)鍵信息,主要講的是一個(gè)顧客去飯店消費(fèi)的表,第一列講的是總的消費(fèi)費(fèi)用,第二列講的是小費(fèi),第三列當(dāng)前顧客的性別,第四列顧客是否抽煙,第五列講的是周幾,第五列講的是吃中午飯還是晚飯?size指的是用餐人數(shù).

regplot()和lmplot()都可以繪制回歸關(guān)系,推薦regplot(),因?yàn)閞egplot()比lmplot()的參數(shù)支持的類(lèi)型更多一些.

怎么利用上面的數(shù)據(jù)畫(huà)回歸關(guān)系呢?

首先將regplot()函數(shù)調(diào)出來(lái),必須指定的參數(shù)有x軸是哪個(gè)指標(biāo),y軸是個(gè)指標(biāo).比如x軸的指標(biāo)是total_bill 的總的消費(fèi)費(fèi)用,y軸的指標(biāo)是tip消費(fèi),這里的回歸指的是total_bill 與tip之間的關(guān)系.這里的data指的是當(dāng)前的dataframe傳進(jìn)去.這里指的是tips這個(gè)dataframe.

如下代碼:

import seaborn as sns
import numpy as np

sns.set(color_codes=True)
np.random.seed(sum(map(ord, "regression")))
tips = sns.load_dataset("tips")
sns.regplot(x="total_bill",y="tip",data=tips)

輸出的結(jié)果如下:



從輸出的結(jié)果可以很清晰的看到一條擬合直線(xiàn)擬合當(dāng)前的數(shù)據(jù).我們就可以把這樣的直線(xiàn)畫(huà)出來(lái)了.通過(guò)結(jié)果可以分析total_bill與tip之間的關(guān)系,以及數(shù)據(jù)的大致分步情況.

這里同樣也可以用lmplot()函數(shù)畫(huà)回歸關(guān)系.

代碼如下:

import seaborn as sns
import numpy as np

sns.set(color_codes=True)
np.random.seed(sum(map(ord, "regression")))
tips = sns.load_dataset("tips")
sns.lmplot(x="total_bill",y="tip",data=tips)

輸出結(jié)果如下:



regplot()函數(shù)與lmplot()函數(shù),很顯然,所得到的的圖的結(jié)果是相同的,除了圖形形狀略有些不同刘绣,這里會(huì)簡(jiǎn)短的解釋樱溉。

regplot()函數(shù)與regplot()函數(shù)之間有什么區(qū)別呢?

  • 主要區(qū)別是regplot()以各種格式接受x和y變量,包括numpy數(shù)組纬凤、Pandas的Series列或DataFrame對(duì)象的變量引用.
  • 不一樣的是福贞,lmplot()將數(shù)據(jù)集作為一個(gè)必需的參數(shù),而x和y變量必須指定為字符串停士。這種數(shù)據(jù)格式稱(chēng)為“長(zhǎng)格式”或“整潔”數(shù)據(jù)挖帘。
  • 除了這種輸入靈活性,regplot()可以看做是擁有l(wèi)mplot()特征的子集恋技,所以后面將使用后者進(jìn)行演示拇舀。

當(dāng)其中一個(gè)變量取值為離散型的時(shí)候,可以擬合一個(gè)線(xiàn)性回歸蜻底。然而骄崩,這種數(shù)據(jù)集生成的簡(jiǎn)單散點(diǎn)圖通常不是最優(yōu)的:

相看一下"size"與"tip"之間的關(guān)系,可以通過(guò)regplot()函數(shù)畫(huà)出這樣的圖.

案例代碼如下:

import seaborn as sns
import numpy as np

sns.set(color_codes=True)
np.random.seed(sum(map(ord, "regression")))
tips = sns.load_dataset("tips")
sns.regplot(x="size",y="tip",data=tips)

輸出的結(jié)果如下:



當(dāng)前的size是1,2,3,4,5不是一些連續(xù)的值,所以說(shuō)不太時(shí)候去做這樣的回歸分析,如果數(shù)據(jù)不太滿(mǎn)足的情況下,一個(gè)常用的方法是為離散值添加一些隨機(jī)噪聲的“抖動(dòng)”(jitter),使得這些值的分布更加明晰薄辅。

值得注意的是要拂,抖動(dòng)僅適用于散點(diǎn)圖數(shù)據(jù),且不會(huì)影響擬合的回歸線(xiàn)本身.

size是類(lèi)別數(shù)據(jù),要么是1,2,3,4,不可能發(fā)生小數(shù)值,但是不適合建立一個(gè)回歸模型.

這里的抖動(dòng)在sns.regplot()函數(shù)中加x_jitte這個(gè)參數(shù).x_jitte這個(gè)參數(shù)的意思是在原有的數(shù)據(jù)的點(diǎn)上加上一個(gè)小范圍的浮動(dòng),這個(gè)浮動(dòng)的范圍可以自己定義.

案例代碼如下:

import seaborn as sns
import numpy as np

sns.set(color_codes=True)
np.random.seed(sum(map(ord, "regression")))
tips = sns.load_dataset("tips")
sns.regplot(x="size",y="tip",data=tips,x_jitter=.05)

輸出的結(jié)果如下:


從數(shù)據(jù)的結(jié)果來(lái)看,數(shù)據(jù)都有發(fā)生一點(diǎn)偏移,要么往左點(diǎn)要么往右點(diǎn),對(duì)原始的點(diǎn)進(jìn)行了一些隨機(jī)改變.可以使離散點(diǎn)變得稍微有那么一丁丁點(diǎn)連續(xù).,使回歸模型建立起來(lái)更加準(zhǔn)確一些.

對(duì)于類(lèi)別的問(wèn)題,比如這里的size問(wèn)題,建模的時(shí)候,可以考慮增加regplot()參數(shù)中增加x_jitter這個(gè)參數(shù),相當(dāng)于增加了一個(gè)小范圍的浮動(dòng)操作.

2.不同類(lèi)型的模型擬合(參考學(xué)習(xí))

上面使用的簡(jiǎn)單線(xiàn)性回歸模型非常簡(jiǎn)單长搀,但是宇弛,它不適用于某些種類(lèi)的數(shù)據(jù)集。 Anscombe's quartet數(shù)據(jù)集顯示了一些簡(jiǎn)單線(xiàn)性回歸提供了簡(jiǎn)單目視檢查清楚顯示差異的關(guān)系估計(jì)的例子源请。 例如枪芒,在第一種情況下,線(xiàn)性回歸是一個(gè)很好的模型:

對(duì)于類(lèi)別值比如

import seaborn as sns
import numpy as np

sns.set(color_codes=True)
np.random.seed(sum(map(ord, "regression")))
anscombe = sns.load_dataset("anscombe")
sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'I'"),
           ci=None, scatter_kws={"s": 80});

輸出結(jié)果如下:



第二個(gè)數(shù)據(jù)集中的線(xiàn)性關(guān)系是一樣的谁尸,但是基本清楚地表明這不是一個(gè)好的模型:
代碼如下:

import seaborn as sns
import numpy as np

sns.set(color_codes=True)
np.random.seed(sum(map(ord, "regression")))
anscombe = sns.load_dataset("anscombe")
sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'II'"),
           ci=None, scatter_kws={"s": 80})

輸出的結(jié)果如下:


在存在這些高階關(guān)系的情況下舅踪,lmplot()和regplot()可以擬合多項(xiàng)式回歸模型來(lái)擬合數(shù)據(jù)集中的簡(jiǎn)單類(lèi)型的非線(xiàn)性趨勢(shì):
代碼如下:

import seaborn as sns
import numpy as np

sns.set(color_codes=True)
np.random.seed(sum(map(ord, "regression")))
anscombe = sns.load_dataset("anscombe")
sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'II'"),
           order=2, ci=None, scatter_kws={"s": 80});

輸出的結(jié)果如下:


3.調(diào)節(jié)其他變量(參考學(xué)習(xí))

上面的圖表顯示了許多方法來(lái)探索一對(duì)變量之間的關(guān)系。然而良蛮,通常抽碌,一個(gè)更有趣的問(wèn)題是“這兩個(gè)變量之間的關(guān)系如何作為第三個(gè)變量的函數(shù)而變化?”這是regplot()和lmplot()之間的區(qū)別决瞳。 雖然regplot()總是顯示單個(gè)關(guān)系货徙,lmplot()將regplot()與FacetGrid結(jié)合在一起,提供了一個(gè)簡(jiǎn)單的界面皮胡,可以在“faceted”圖上顯示線(xiàn)性回歸痴颊,從而允許您探索與多達(dá)三個(gè)其他類(lèi)別變量的交互。

分類(lèi)關(guān)系的最佳方式是繪制相同軸上的兩個(gè)級(jí)別屡贺,并使用顏色來(lái)區(qū)分它們:
代碼如下:

import seaborn as sns
import numpy as np

sns.set(color_codes=True)
np.random.seed(sum(map(ord, "regression")))
tips = sns.load_dataset("tips")
sns.lmplot(x="total_bill", y="tip", hue="smoker", data=tips)

輸出的結(jié)果如下:


除了顏色之外蠢棱,還可以使用不同的散點(diǎn)圖標(biāo)記來(lái)使黑色和白色的圖像更好地繪制锌杀。 您還可以完全控制所用的顏色.

import seaborn as sns
import numpy as np

sns.set(color_codes=True)
np.random.seed(sum(map(ord, "regression")))
tips = sns.load_dataset("tips")
sns.lmplot(x="total_bill", y="tip", hue="smoker", data=tips,
           markers=["o", "x"], palette="Set1")

輸出的結(jié)果如下:


要添加另一個(gè)變量,您可以繪制多個(gè)“facet”泻仙,每個(gè)級(jí)別的變量出現(xiàn)在網(wǎng)格的行或列中:
代碼如下:

import seaborn as sns
import numpy as np

sns.set(color_codes=True)
np.random.seed(sum(map(ord, "regression")))
tips = sns.load_dataset("tips")
sns.lmplot(x="total_bill", y="tip", hue="smoker", col="time", data=tips)

輸出的結(jié)果如下:


代碼如下:

import seaborn as sns
import numpy as np

sns.set(color_codes=True)
np.random.seed(sum(map(ord, "regression")))
tips = sns.load_dataset("tips")
sns.lmplot(x="total_bill", y="tip", hue="smoker",
           col="time", row="sex", data=tips)

輸出的結(jié)果如下:


4.控制繪制的大小和形狀(參考學(xué)習(xí))

在我們注意到由regplot()和lmplot()創(chuàng)建的默認(rèn)繪圖看起來(lái)是一樣的糕再,但在軸上卻具有不同大小和形狀。 這是因?yàn)閒unc:regplot是一個(gè)“軸級(jí)”功能繪制到特定的軸上玉转。 這意味著您可以自己制作多面板圖形突想,并精確控制回歸圖的位置。 如果沒(méi)有提供軸冤吨,它只需使用“當(dāng)前活動(dòng)的”軸蒿柳,這就是為什么默認(rèn)繪圖與大多數(shù)其他matplotlib函數(shù)具有相同的大小和形狀的原因。要控制大小漩蟆,您需要自己創(chuàng)建一個(gè)圖形對(duì)象垒探。

代碼如下:

import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt

sns.set(color_codes=True)
np.random.seed(sum(map(ord, "regression")))
tips = sns.load_dataset("tips")
f, ax = plt.subplots(figsize=(5, 6))
sns.regplot(x="total_bill", y="tip", data=tips, ax=ax)

輸出的結(jié)果如下:


相反,lmplot()圖的大小和形狀通過(guò)FacetGrid界面使用size和aspect參數(shù)進(jìn)行控制怠李,這些參數(shù)適用于每個(gè)圖中的設(shè)置圾叼,而不是整體圖形:

代碼如下:

import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt

sns.set(color_codes=True)
np.random.seed(sum(map(ord, "regression")))
tips = sns.load_dataset("tips")
f, ax = plt.subplots(figsize=(5, 6))
sns.lmplot(x="total_bill", y="tip", col="day", data=tips,
           col_wrap=2, size=3)

輸出的結(jié)果如下:


代碼如下:

import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt

sns.set(color_codes=True)
np.random.seed(sum(map(ord, "regression")))
tips = sns.load_dataset("tips")
f, ax = plt.subplots(figsize=(5, 6))
sns.lmplot(x="total_bill", y="tip", col="day", data=tips,
           aspect=.5)

輸出的結(jié)果如下:


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市捺癞,隨后出現(xiàn)的幾起案子夷蚊,更是在濱河造成了極大的恐慌,老刑警劉巖髓介,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惕鼓,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡唐础,警方通過(guò)查閱死者的電腦和手機(jī)箱歧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)一膨,“玉大人呀邢,你說(shuō)我怎么就攤上這事”鳎” “怎么了价淌?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)瞒津。 經(jīng)常有香客問(wèn)我蝉衣,道長(zhǎng),這世上最難降的妖魔是什么巷蚪? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任买乃,我火速辦了婚禮,結(jié)果婚禮上钓辆,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好前联,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布功戚。 她就那樣靜靜地躺著,像睡著了一般似嗤。 火紅的嫁衣襯著肌膚如雪啸臀。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,482評(píng)論 1 302
  • 那天烁落,我揣著相機(jī)與錄音乘粒,去河邊找鬼。 笑死伤塌,一個(gè)胖子當(dāng)著我的面吹牛灯萍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播每聪,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼旦棉,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了药薯?” 一聲冷哼從身側(cè)響起绑洛,我...
    開(kāi)封第一講書(shū)人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎童本,沒(méi)想到半個(gè)月后真屯,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡穷娱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年绑蔫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鄙煤。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡晾匠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出梯刚,到底是詐尸還是另有隱情凉馆,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布亡资,位于F島的核電站澜共,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏锥腻。R本人自食惡果不足惜嗦董,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瘦黑。 院中可真熱鬧京革,春花似錦奇唤、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至廊勃,卻和暖如春懈贺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背坡垫。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工梭灿, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人冰悠。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓堡妒,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親屿脐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子涕蚤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

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