Seaborn概論
Seaborn為Matplotlib提供了一個(gè)高級(jí)接口蜡塌,它是一個(gè)功能強(qiáng)大但有時(shí)笨拙的Python可視化庫(kù)银锻。
在Seaborn的官方網(wǎng)站上身辨,他們聲明:
如果matplotlib“試圖讓簡(jiǎn)單的事情變得容易屋群,讓困難的事情變得可能”褂删,那么Seaborn試圖使一系列明確的困難事物也容易。
我們發(fā)現(xiàn)這是對(duì)Seaborn強(qiáng)項(xiàng)的一個(gè)很好的總結(jié)膀跌。在實(shí)踐中遭商,“一系列明確的困難事物”包括:
—使用美學(xué)上令人愉悅的默認(rèn)主題。
—設(shè)置自定義調(diào)色板捅伤。
—制作有吸引力的統(tǒng)計(jì)圖劫流。
—簡(jiǎn)易且靈活地顯示分布。
—從矩陣和數(shù)據(jù)幀可視化信息丛忆。
最后三點(diǎn)是為什么Seaborn是我們探索性分析的首選工具祠汇。它使你很容易快速而有效地“了解”你的數(shù)據(jù)。
然而蘸际,Seaborn是Matplotlib的補(bǔ)充座哩,而不是替代品。有些調(diào)整仍然需要Matplotlib粮彤,我們還將討論如何做到這一點(diǎn)根穷。
如何學(xué)習(xí)Seaborn—主動(dòng)模式:
Seaborn在Python中簡(jiǎn)化了數(shù)據(jù)可視化,但仍有許多特點(diǎn)导坟。因此屿良,學(xué)習(xí)Seaborn的最好方法就是做中學(xué)。
這個(gè)過程會(huì)讓你直覺了解你能用Seaborn做什么惫周,留下文檔作為進(jìn)一步的指導(dǎo)尘惧。這是從零到熟練的最快的方法。
在我們開始之前給一個(gè)提示:
我們?cè)噲D使本教程盡可能精簡(jiǎn)递递,這意味著我們不會(huì)太多的細(xì)節(jié)喷橙,任何一個(gè)主題。如果你想了解更多關(guān)于一個(gè)特性的信息登舞,可以打開Seaborn文檔贰逾。
Seaborn教程內(nèi)容
我們將介紹Seaborn庫(kù)最重要的范例,而不是僅僅向您展示如何制作一堆繪圖菠秒。此外疙剑,我們將舉例說明每個(gè)概念。
以下是我們將在本教程中介紹的步驟:
——安裝Seaborn
——導(dǎo)入庫(kù)和數(shù)據(jù)集
——Seaborn的繪圖功能
散點(diǎn)圖
——用Matplotlib定制
——Pandas的角色
箱形圖
——Seaborn主題
小提琴圖表
——調(diào)色板践叠。
群體圖
——疊加圖
——把它們放在一起
——Pokédex(迷你畫廊)言缤。
熱圖
直方圖
條形圖
因子圖
密度圖
聯(lián)合分布圖
第1步:安裝Seaborn
首先,第一件事:加油禁灼,打氣管挟,安裝起來吧!
接下來弄捕,確保您的計(jì)算機(jī)上安裝了以下內(nèi)容:
——Python 2.7 + 或 Python 3
——Pandas
——Matplotlib
——Seaborn
——Jupyter Notebook(可選僻孝,但推薦)
我們強(qiáng)烈建議安裝Anaconda分發(fā)拳芙,其中包含所有這些擴(kuò)展包。只需按照下載頁(yè)面上的說明操作即可皮璧。
安裝了Anaconda之后,只需啟動(dòng)Jupyter(通過命令行或Navigator應(yīng)用程序)并打開一個(gè)新notebook:
步驟2:導(dǎo)入庫(kù)和數(shù)據(jù)集
讓我們開始導(dǎo)入Pandas分飞,它是管理關(guān)系(即表格式)數(shù)據(jù)集的一個(gè)很好的庫(kù):
現(xiàn)在我們準(zhǔn)備導(dǎo)入數(shù)據(jù)集悴务。
提示:我們給每個(gè)導(dǎo)入的庫(kù)一個(gè)別名。然后譬猫,我們可以用
調(diào)用Pandas讯檐,用
調(diào)用Matplotlib,用
調(diào)用Seaborn染服。
今天别洪,我們將使用一個(gè)很酷的Pokémon數(shù)據(jù)集(第一代)。這里是免費(fèi)下載:
一旦下載了CSV文件柳刮,就可以將它與Pandas一起導(dǎo)入挖垛。
提示:參數(shù)索引? index_col=0
僅僅意味著我們將數(shù)據(jù)集的第一列作為ID列。
正如你所看到的秉颗,我們有原始數(shù)據(jù)151(A.K.best151)Pokémon痢毒。
第3步:Seaborn的繪圖功能
繪圖功能的多樣性是Seaborn最大的優(yōu)點(diǎn)之一。例如蚕甥,散點(diǎn)圖只是使用lmplot()函數(shù)的一行代碼哪替。
有兩種方法可以做到這一點(diǎn)。
—第一種方法(推薦)是將DataFrame傳遞給data=參數(shù)菇怀,同時(shí)將列名傳遞給axes參數(shù)凭舶,x=和y=。
—第二種方法是直接將數(shù)據(jù)序列傳遞給軸參數(shù)爱沟。
例如帅霜,讓我們比較一下我們的Pokémon的攻擊和防御狀態(tài):
看起來更好,但是我們可以進(jìn)一步改進(jìn)這個(gè)散點(diǎn)圖钥顽。例如义屏,我們所有的Pokémon都有正面攻擊和防御值,但是我們的軸限制在零度以下蜂大。讓我們看看我們?cè)鯓硬拍芙鉀Q這個(gè)問題…
步驟4:用Matplotlib定制
記住闽铐,Seaborn是Matplotlib的高級(jí)接口。從我們的經(jīng)驗(yàn)來看奶浦,大部分情況下會(huì)使用Seaborn兄墅,但有時(shí)你需要帶上Matplotlib。
設(shè)置軸限制是其中之一澳叉,但過程很簡(jiǎn)單:
首先隙咸,調(diào)用您的海運(yùn)繪圖功能為正常沐悦。
然后,調(diào)用Matplotlib的定制函數(shù)五督。在這種情況下藏否,我們將使用它的 ylim()
和? xlim()? 函數(shù)。
這里是我們的新的散點(diǎn)圖與敏感軸限制:
有關(guān)MaMattLIB定制功能的更多信息充包,請(qǐng)查看其文檔副签。
第5步:Pandas的角色
盡管這是一個(gè)Seaborn教程,Pandas實(shí)際上扮演著非常重要的角色基矮。你看淆储,Seaborn的繪圖功能是從一個(gè)合理格式化的基本數(shù)據(jù)框中受益。
例如家浇,假設(shè)我們想為我們的Pokémon的戰(zhàn)斗狀態(tài)做一個(gè)方塊圖:
這是一個(gè)合理的開始本砰,但是有些欄目我們可能想刪除:
1.我們可以刪除總數(shù),因?yàn)槲覀冇袉为?dú)的統(tǒng)計(jì)數(shù)據(jù)钢悲。
2.我們可以刪除舞臺(tái)和傳奇欄目点额,因?yàn)樗鼈儾皇菓?zhàn)斗統(tǒng)計(jì)。
事實(shí)證明譬巫,這并不容易在Seaborn單獨(dú)進(jìn)行咖楣。相反,對(duì)數(shù)據(jù)文件進(jìn)行預(yù)格式化要簡(jiǎn)單得多芦昔。
讓我們創(chuàng)建一個(gè)新的數(shù)據(jù)名為? stats_df 诱贿,它只保留統(tǒng)計(jì)列:
在本教程的范圍之外,潛入大熊貓咕缎,但這里有一個(gè)方便的作弊表珠十。
第6步:Seaborn主題
Seaborn的另一個(gè)優(yōu)點(diǎn)是它帶有正派風(fēng)格的主題。默認(rèn)主題稱為“暗網(wǎng)格”凭豪。
接下來焙蹭,我們將把主題改為“白色網(wǎng)格”,同時(shí)制作小提琴繪圖嫂伞。
1.小提琴繪圖在替代方框圖方面非常有用孔厉。
2.他們顯示的分布(通過小提琴的厚度),而不是僅匯總統(tǒng)計(jì)帖努。
例如撰豺,我們可以通過Pokémon的主要類型來可視化攻擊的分布:
正如你所看到的,龍型往往具有比幽靈類型更高的攻擊統(tǒng)計(jì)拼余,但它們也有較大的差異污桦。
現(xiàn)在,Pok -艾蒙的粉絲們可能會(huì)發(fā)現(xiàn)一些關(guān)于這個(gè)情節(jié)的不和諧的東西:顏色是荒謬的匙监。為什么草型是彩色粉色還是水彩型橙色凡橱?我們必須解決這個(gè)問題小作!
步驟7:調(diào)色板
幸運(yùn)的是,Seabn允許我們?cè)O(shè)置定制的調(diào)色板稼钩。我們可以簡(jiǎn)單地創(chuàng)建一個(gè)有序的Python顏色十六進(jìn)制值列表顾稀。
讓我們使用BulPaula來幫助我們創(chuàng)建一個(gè)新的調(diào)色板:
完美,現(xiàn)在我們可以簡(jiǎn)單地使用? ?palette=? ?參數(shù)來重新調(diào)整我們的圖表坝撑。
好多了础拨!
小提琴圖是偉大的可視化分布。但是绍载,由于我們的數(shù)據(jù)集中只有151個(gè)PoEKMON,所以我們可以簡(jiǎn)單地顯示每個(gè)點(diǎn)滔蝉。
這就是群集陰謀發(fā)生的地方击儡。這個(gè)可視化將顯示每個(gè)點(diǎn),而“堆疊”具有相似值的那些:
這很方便蝠引,但是我們不能把我們的群體圖和小提琴圖結(jié)合起來嗎阳谍?畢竟,它們顯示相似的信息螃概,對(duì)吧矫夯?
步驟8:疊加圖
答案是肯定的。
使用Seaborn覆蓋繪圖非常簡(jiǎn)單吊洼,它與Matplotlib的工作方式相同训貌。這就是我們要做的:
首先,我們將使用Matplotlib使我們的圖形更大冒窍。
然后递沪,我們將繪制小提琴圖。然而综液,我們將設(shè)置? inner=Non??沒有刪除小提琴內(nèi)的條形款慨。
接下來,我們將繪制群體圖谬莹。這一次檩奠,我們將使點(diǎn)黑色,所以他們彈出更多附帽。
最后埠戳,我們將使用Matplotllib設(shè)置標(biāo)題。
真棒士葫,現(xiàn)在我們有一個(gè)漂亮的圖表告訴我們攻擊值是如何分布在不同的Pokémon類型乞而。但我們還想看到其他所有的統(tǒng)計(jì)數(shù)據(jù)呢?
第9步:把它們放在一起
當(dāng)然慢显,我們可以為每個(gè)狀態(tài)重復(fù)圖表爪模,但是我們也可以把這些信息組合成一個(gè)圖表欠啤。我們只需要事先做一些與熊貓爭(zhēng)吵的數(shù)據(jù)。
首先屋灌,這是一個(gè)提醒我們的數(shù)據(jù)格式:
正如你所看到的洁段,我們所有的統(tǒng)計(jì)數(shù)據(jù)都在不同的列中。相反共郭,我們想把它們“融化”成一列祠丝。
要做到這一點(diǎn),我們將使用熊貓的? melt()??函數(shù)除嘹。它需要3個(gè)參數(shù):
首先写半,數(shù)據(jù)框要融化。
第二尉咕,保持變量(Pandas將融化所有其他)叠蝇。
最后,命名為新的熔化變量年缎。
以下是輸出:
所有6個(gè)屬性列都被“融化”為一個(gè)悔捶,新的屬性列指示原始屬性(HP、攻擊单芜、防御蜕该、Sp.攻擊、Sp.防御或速度)洲鸠。例如堂淡,這里很難看到,但是Balbasuro現(xiàn)在有6行數(shù)據(jù)扒腕。
事實(shí)上淤齐,如果你打印這兩個(gè)數(shù)據(jù)框的形狀…
最后,讓我們?yōu)橐粋€(gè)更可讀的圖表做一些最后的調(diào)整:
1.擴(kuò)大情節(jié)袜匿。
2.使用 split()=True
3.使用我們自定義的Pokemon調(diào)色板更啄。
4.調(diào)整Y軸限制在0結(jié)束。
5.把圖例放在右邊居灯。
最終群體圖
搞定
第10步: Pokédex(迷你圖庫(kù))
我們將以一些快速數(shù)據(jù)可視化來結(jié)束本教程祭务,只是為了讓您了解Seaborn的可能。
10.1 -熱圖
HealMaPS幫助你可視化矩陣式數(shù)據(jù)怪嫌。
10.2 - Histogram
直方圖允許您繪制數(shù)值變量的分布义锥。
10.3 條形圖
條形圖幫助您可視化分類變量的分布。
10.4因素圖
因子圖可以很容易地通過分類類來劃分情節(jié)岩灭。
10.5密度圖
密度圖顯示了兩個(gè)變量之間的分布拌倍。
提示:考慮用散點(diǎn)圖覆蓋這個(gè)。
10.6結(jié)合分布圖
聯(lián)合分布圖結(jié)合了來自散布圖和直方圖的信息,為您提供了雙變量分布的詳細(xì)信息柱恤。
到這里你已經(jīng)完成了這個(gè)Python Seaborn教程数初!
我們剛剛結(jié)束了一個(gè)重要的Seaborn范例,并向你們展示了很多例子梗顺。隨意使用這一頁(yè)連同官方Seaborn圖庫(kù)作為您的項(xiàng)目前進(jìn)的參考泡孩。免費(fèi)視頻教程:www.mlxs.top
作者:徐大白? ?來源:終極Python Seaborn教程