Seaborn入門(mén)指南:最簡(jiǎn)單的學(xué)習(xí)方法
介紹seaborn和matplotlib一樣,試圖使一組定義明確的且困難的事情變得容易。Seaborn的優(yōu)勢(shì):Seaborn最大的優(yōu)勢(shì)在于其繪圖功能的多樣性,它甚至允許我們只在一行代碼中就繪制復(fù)雜的繪圖!在本教程中,我們使用三個(gè)庫(kù)來(lái)制作漂亮的圖表——Matplotlib、Seaborn和Pandas。如果你是Python的初學(xué)者,我建議你先熟悉Matplotlib和Pandas。如果你嚴(yán)格遵循本教程,你可以使用這三個(gè)庫(kù)制作出漂亮的圖表,同時(shí)可以將我的代碼用作將來(lái)任何可視化任務(wù)的模板。讓我們從著名的口袋妖怪?jǐn)?shù)據(jù)集開(kāi)始。在開(kāi)始之前,我強(qiáng)烈建議你為每個(gè)圖形編寫(xiě)自己的基礎(chǔ)代碼,并嘗試使用圖形。你可以在Kaggle上找到Pokemon數(shù)據(jù)集,為了讓你的學(xué)習(xí)更輕松,我縮短并清理了這個(gè)版本的數(shù)據(jù)集。你可以在此處下載數(shù)據(jù)集:https://github.com/shelvi31/Seaborn-Experiments幫助資料:https://python-graph-gallery.com/.我們現(xiàn)在開(kāi)始繪制圖表:首先導(dǎo)入必要的庫(kù):#importing libraries
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
讀取CSV文件data = pd.read_csv(“Pokemon.csv”,encoding= ‘unicode_escape’)
通過(guò) read_csv() 命令定義不同的編解碼來(lái)避免utf8的編解碼錯(cuò)誤。我們的數(shù)據(jù)看起來(lái)像這樣…data.head()
輸出:
列的名稱(chēng)并沒(méi)有清楚地簡(jiǎn)化其用途。在實(shí)際使用數(shù)據(jù)集之前了解它是很重要的。以下是數(shù)據(jù)集的簡(jiǎn)化描述。該數(shù)據(jù)集包括150個(gè)與神奇寶貝游戲有關(guān)的神奇寶貝(不是口袋妖怪卡片或口袋妖怪圍棋)。在這個(gè)數(shù)據(jù)集中,我們有150行和13列。列說(shuō)明:#*ID*:每個(gè)口袋妖怪的ID
#Name:每個(gè)口袋妖怪的名字
#Type1:每個(gè)口袋妖怪都有一個(gè)類(lèi)型,這決定了它攻擊的弱點(diǎn)/抵抗力
#Type2:一些口袋妖怪是雙重類(lèi)型,有2個(gè)類(lèi)型
#Total:所有統(tǒng)計(jì)數(shù)據(jù)的總和,關(guān)于口袋妖怪有多強(qiáng)的一般指南
#HP:生命值定義了口袋妖怪在暈倒前能承受的傷害
#Attack:普通攻擊的基礎(chǔ)修飾語(yǔ)(如刮痕,重?fù)?
#Defense:抵抗普通攻擊的基礎(chǔ)傷害
#SP Atk,特殊攻擊的基礎(chǔ)修飾語(yǔ)(如火焰爆炸,氣泡束)
#*SP Def*: 防御特殊攻擊的基礎(chǔ)傷害
#Speed:決定哪只口袋妖怪每輪先攻擊
#Stage:Stage數(shù)
#Legendary:傳奇的口袋妖怪是真的,不是假的
我已經(jīng)重新命名了這些列名,以使我們的策劃更有意義,使我們的思路更加清晰。雖然這是可選的,但我強(qiáng)烈建議你這樣做,以消除任何可能的混亂。data.rename(columns = {“#”:”No.”,”Type 1":”P(pán)okemon_Type”,”Type 2":”P(pán)okemonType2",’Total’:’Sum of Attack’,”HP”:”Hit Points”,”Attack” : “Attack Strength”, “Defense”:”Defensive Strength”,”Sp. Atk”:”Special Attack Stenth”,”Sp. Def”:”Special Defense Strength”,”Stage”:”Generation”}, inplace = True)data.head()
輸出:
接下來(lái)讓我們從簡(jiǎn)單的分布圖開(kāi)始可視化。分布圖:分布圖顯示根據(jù)標(biāo)注繪制的一組數(shù)值的分布和范圍。直方圖允許你繪制數(shù)值變量的分布。我本可以用“data.hist(figsize=(12,10),bins=20)”,但由于并非此數(shù)據(jù)庫(kù)中的所有列都有數(shù)值,因此,我必須繪制單獨(dú)的分布圖。plt.figure(figsize=(4,3))
sns.distplot(x=data[“Sum of Attack”],color=”O(jiān)range”,kde=True,rug=True);
plt.show()
分布圖輸出:口袋妖怪攻擊的總和seaborn的顯示函數(shù)用密度曲線繪制直方圖,我們可以使用選項(xiàng) kde=“False” 去除密度,使用rug=“True”控制rug的存在。在python中繪制直方圖有許多替代方法:plt.figure(figsize=(3,3))
sns.histplot(x=data[“Sum of Attack”],color=”Green”);
plt.show()
輸出:口袋妖怪攻擊總數(shù)另一種方法是:使用plt.hist()plt.figure(figsize=(3,3))
plt.hist(x=data["Sum of Attack"],color="Red",bins=20);
plt.show()
輸出:直方圖,Matplotlib因此,對(duì)于許多繪制分布的方法,所有函數(shù)如pyplot.hist, seaborn.CooutCountPlot以及seaborn.dispot充當(dāng)了 matplotlib 條形圖的包裝器,如果認(rèn)為手動(dòng)繪制此類(lèi)條形圖太麻煩,則可以使用。對(duì)于離散變量,seaborn.countplot更方便。對(duì)于連續(xù)變量:則使用pyplot.hist或者seaborn.distplot。聯(lián)合分布圖:聯(lián)合分布圖結(jié)合了散點(diǎn)圖和直方圖的信息,給出了二元分布的詳細(xì)信息。sns.jointplot(x=data[“Sum of Attack”],y=data[“Defensive Strength”],color=”Red”);
密度圖:密度圖顯示兩個(gè)變量之間的分布。sns.kdeplot(x=data[“Sum of Attack”],y=data[“Defensive Strength”])
plt.show()
條形圖條形圖有助于我們可視化分類(lèi)變量的分布:Countplot是條形圖的一種類(lèi)型。plt.figure(figsize=(10,6));
sns.countplot(x=data.Pokemon_Type,palette=pkmn_type_colors);
plt.show()
熱圖熱圖有助于我們以熱點(diǎn)和冷點(diǎn)的形式將類(lèi)似矩陣的數(shù)據(jù)進(jìn)行可視化,暖色表示游客互動(dòng)度最高的區(qū)域。plt.figure(figsize=(8,6));
sns.heatmap(data.corr());# Rotate x-labels with the help of matplotlib
plt.xticks(rotation=-45);
散點(diǎn)圖:散點(diǎn)圖(也稱(chēng)散點(diǎn)圖,scatter graph)使用點(diǎn)來(lái)表示兩個(gè)不同數(shù)值變量的值,水平軸和垂直軸上每個(gè)點(diǎn)的位置表示單個(gè)數(shù)據(jù)點(diǎn)的值。散點(diǎn)圖用于觀察變量之間的關(guān)系。我用散點(diǎn)圖比較了神奇寶貝的攻防數(shù)據(jù)。
Seaborn沒(méi)有專(zhuān)用的散點(diǎn)圖函數(shù),這就是為什么我們?cè)谶@里默認(rèn)看到一條對(duì)角線(回歸線)。但seaborn幫助我們調(diào)整了圖像:fit_reg=False 用于刪除回歸線hue='Stage' 用于通過(guò)第三個(gè)變量值為點(diǎn)上色,因此,允許我們用顏色來(lái)表達(dá)信息的第三維度。這里我把神奇寶貝的進(jìn)化階段作為第三個(gè)變量!#Tweaking with scatter plotsns.lmplot(x=’Attack Strength’, y=’Defensive Strength’, data=data,
fit_reg = False, #Deleting regression line
hue=”Generation”); #Separating as per pokemon generation
落在40–120的點(diǎn)更多,我在matplotlib的幫助下更改軸的限制:sns.lmplot(x=’Attack Strength’, y=’Defensive Strength’, data=data,
fit_reg = False, #Deleting regression line
hue=”Generation”); #Separating as per pokemon generationplt.ylim(20,130);
plt.xlim(25,125);
我們現(xiàn)在可以看到一個(gè)更集中和更好的圖表!
箱形圖箱形圖用于通過(guò)四分位數(shù)描述數(shù)值數(shù)據(jù)組。箱形圖也可能有從箱子延伸出來(lái)的線,表示上下四分位數(shù)之外的變化,因此術(shù)語(yǔ)為盒須圖以及須盒圖我們可以刪除“Sum of Attack(攻擊總和)”列,因?yàn)槲覀冇袀(gè)人統(tǒng)計(jì)。我們也可以刪除“Generation(世代)”和“Legendary(傳奇)”列,因?yàn)樗鼈儾皇菓?zhàn)斗統(tǒng)計(jì)。plt.figure(figsize=(15,7));# Pre-format DataFrame
stats_data = data.drop([‘Sum of Attack’, ‘Generation’, ‘Legendary’], axis=1);
# New boxplot using stats_df
sns.boxplot(data=stats_data,
showfliers=False); #Removing outlierssns.set_style(“whitegrid”)
在繪制圖表之前,記得保持 figsize。小提琴圖現(xiàn)在我們來(lái)畫(huà)小提琴圖。小提琴圖是盒子圖的替代品,它顯示的是分布(通過(guò)小提琴的厚度),而不僅僅是摘要統(tǒng)計(jì)。這里我展示了神奇寶貝的主要攻擊類(lèi)型的分布plt.figure(figsize=(15,7));
sns.violinplot(x=data.Pokemon_Type, y = data[“Attack Strength”]);
正如你所看到的,龍型的攻擊屬性往往比鬼魂型高,但它們也有更大的差異。現(xiàn)在,神奇寶貝的粉絲們可能會(huì)發(fā)現(xiàn)這個(gè)圖表有些不和諧,因?yàn)轭伾遣缓线m的,為什么草型的顏色是粉紅色,水型的顏色是橙色?我們必須馬上解決這個(gè)問(wèn)題!幸運(yùn)的是,Seaborn允許我們?cè)O(shè)置自定義調(diào)色板,我們可以簡(jiǎn)單地創(chuàng)建一個(gè)有序的Python顏色十六進(jìn)制值列表。我用Bulbapedia創(chuàng)建了一個(gè)新的調(diào)色板。# using Bulbapedia to create a new color palette:#Bulbapedia : https://bulbapedia.bulbagarden.net/wiki/Category:Type_color_templatspkmn_type_colors = [‘#78C850’, # Grass
‘#F08030’, # Fire
‘#6890F0’, # Water
‘#A8B820’, # Bug
‘#A8A878’, # Normal
‘#A040A0’, # Poison
‘#F8D030’, # Electric
‘#E0C068’, # Ground
‘#EE99AC’, # Fairy
‘#C03028’, # Fighting
‘#F85888’, # Psychic
‘#B8A038’, # Rock
‘#705898’, # Ghost
‘#98D8D8’, # Ice
‘#7038F8’, # Dragon
]
根據(jù)口袋妖怪類(lèi)型的顏色修改小提琴圖:plt.figure(figsize=(15,7));
sns.violinplot(x=data.Pokemon_Type,
y = data[“Attack Strength”],
palette = pkmn_type_colors);
分簇散點(diǎn)圖如你所見(jiàn),小提琴圖非常適合可視化分布。然而,由于我們的數(shù)據(jù)集中只有150個(gè)神奇寶貝,我們有時(shí)可能想簡(jiǎn)單地顯示每個(gè)點(diǎn),這時(shí)就用到了分簇散點(diǎn)圖,它可以顯示每個(gè)點(diǎn),同時(shí)“疊加”具有相似值的點(diǎn)。plt.figure(figsize=(12,5));
sns.swarmplot(x=data.Pokemon_Type,y=data[“Attack Strength”],palette=pkmn_type_colors);
這看起來(lái)不錯(cuò),但是為了獲得更好的視覺(jué)效果,我們可以將兩者結(jié)合起來(lái)!畢竟,它們顯示相同的信息。疊加圖plt.figure(figsize=(10,10))sns.violinplot(x=data.Pokemon_Type, y = data[“Attack Strength”],
inner=None,
palette = pkmn_type_colors);sns.swarmplot(x=”P(pán)okemon_Type”,
y=”Attack Strength”,
data=data,
color=’black’, #making points black
alpha=0.5);plt.title(“Attacking Strength as per Pokemon’s Type”);
注意事項(xiàng):*inner = None:*移除小提琴內(nèi)部的橫條*alpha = 0.5:*使點(diǎn)稍微透明:記住alpha值必須為浮點(diǎn),不要保留在“”中你可以在這里找到seaborn 關(guān)于顏色設(shè)置的參考資料:https://python-graph-gallery.com/100-calling-a-color-with-seaborn/因子圖因子圖使按分類(lèi)劃分圖變得容易。plt.figure(figsize=(5,15))
factplot= sns.factorplot(x="Pokemon_Type",y="Attack Strength",data=data,hue="Generation",col="Generation",kind="swarm");factplot.set_xticklabels(rotation=-45)
plt.show()
簡(jiǎn)要說(shuō)明:plt.xticks(rotation = -45):不起作用,因?yàn)樗恍D(zhuǎn)最后一個(gè)繪圖需要使用:set_xticklabels你只需更改變量名并運(yùn)行相同的代碼行,就可以像上面那樣進(jìn)行更多的可視化。我把它作為一個(gè)練習(xí)留給你去做,以便更好地掌握Python的可視化技能。
本文到此為止!希望這個(gè)教程對(duì)你來(lái)說(shuō)有幫助,祝你的數(shù)據(jù)科學(xué)之旅學(xué)習(xí)愉快!
發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
最新活動(dòng)更多
-
11月20日火熱報(bào)名中>> 2024 智能家居出海論壇
-
11月28日立即報(bào)名>>> 2024工程師系列—工業(yè)電子技術(shù)在線會(huì)議
-
12月19日立即報(bào)名>> 【線下會(huì)議】OFweek 2024(第九屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
-
即日-12.26火熱報(bào)名中>> OFweek2024中國(guó)智造CIO在線峰會(huì)
-
即日-2025.8.1立即下載>> 《2024智能制造產(chǎn)業(yè)高端化、智能化、綠色化發(fā)展藍(lán)皮書(shū)》
-
精彩回顧立即查看>> 【在線會(huì)議】多物理場(chǎng)仿真助跑新能源汽車(chē)
推薦專(zhuān)題
- 1 腦機(jī)接口芯片,華為出了新專(zhuān)利!
- 2 今年諾獎(jiǎng)對(duì)人工智能的重視,給我們的基礎(chǔ)教育提了個(gè)醒
- 3 銀行業(yè)AI大模型,從入局到求變
- 4 巨頭搶布局,VC狂撒錢(qián),為了能讓「AI讀心」這些公司卷瘋了
- 5 阿斯麥ASML:“骨折級(jí)”洋相,又成AI第一殺手?
- 6 蘋(píng)果市值創(chuàng)新高,iPhone 16能否助力突破4萬(wàn)億美元大關(guān)?
- 7 一場(chǎng)“載入史冊(cè)”的發(fā)布會(huì),讓馬斯克失去了4700億
- 8 百度谷歌比較研究2024:中美“遠(yuǎn)古AI龍頭”的現(xiàn)狀與趨勢(shì)
- 9 洞見(jiàn)AI風(fēng)潮 第二屆vivo藍(lán)河操作系統(tǒng)創(chuàng)新賽開(kāi)啟招募
- 10 地平線開(kāi)啟配售,阿里百度各砸5000萬(wàn)美金,市值最高超500億
- 高級(jí)軟件工程師 廣東省/深圳市
- 自動(dòng)化高級(jí)工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷(xiāo)售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級(jí)銷(xiāo)售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術(shù)專(zhuān)家 廣東省/江門(mén)市
- 封裝工程師 北京市/海淀區(qū)
- 結(jié)構(gòu)工程師 廣東省/深圳市