訂閱
糾錯
加入自媒體

Seaborn入門指南:最簡單的學(xué)習(xí)方法

介紹seaborn和matplotlib一樣,試圖使一組定義明確的且困難的事情變得容易。Seaborn的優(yōu)勢:Seaborn最大的優(yōu)勢在于其繪圖功能的多樣性,它甚至允許我們只在一行代碼中就繪制復(fù)雜的繪圖!在本教程中,我們使用三個庫來制作漂亮的圖表——Matplotlib、Seaborn和Pandas。如果你是Python的初學(xué)者,我建議你先熟悉Matplotlib和Pandas。如果你嚴格遵循本教程,你可以使用這三個庫制作出漂亮的圖表,同時可以將我的代碼用作將來任何可視化任務(wù)的模板。讓我們從著名的口袋妖怪數(shù)據(jù)集開始。在開始之前,我強烈建議你為每個圖形編寫自己的基礎(chǔ)代碼,并嘗試使用圖形。你可以在Kaggle上找到Pokemon數(shù)據(jù)集,為了讓你的學(xué)習(xí)更輕松,我縮短并清理了這個版本的數(shù)據(jù)集。你可以在此處下載數(shù)據(jù)集:https://github.com/shelvi31/Seaborn-Experiments幫助資料:https://python-graph-gallery.com/.我們現(xiàn)在開始繪制圖表:首先導(dǎo)入必要的庫:#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’)
通過 read_csv() 命令定義不同的編解碼來避免utf8的編解碼錯誤。我們的數(shù)據(jù)看起來像這樣…data.head()
輸出:

列的名稱并沒有清楚地簡化其用途。在實際使用數(shù)據(jù)集之前了解它是很重要的。以下是數(shù)據(jù)集的簡化描述。該數(shù)據(jù)集包括150個與神奇寶貝游戲有關(guān)的神奇寶貝(不是口袋妖怪卡片或口袋妖怪圍棋)。在這個數(shù)據(jù)集中,我們有150行和13列。列說明:#*ID*:每個口袋妖怪的ID
#Name:每個口袋妖怪的名字
#Type1:每個口袋妖怪都有一個類型,這決定了它攻擊的弱點/抵抗力
#Type2:一些口袋妖怪是雙重類型,有2個類型
#Total:所有統(tǒng)計數(shù)據(jù)的總和,關(guān)于口袋妖怪有多強的一般指南
#HP:生命值定義了口袋妖怪在暈倒前能承受的傷害
#Attack:普通攻擊的基礎(chǔ)修飾語(如刮痕,重擊)
#Defense:抵抗普通攻擊的基礎(chǔ)傷害
#SP Atk,特殊攻擊的基礎(chǔ)修飾語(如火焰爆炸,氣泡束)
#*SP Def*: 防御特殊攻擊的基礎(chǔ)傷害
#Speed:決定哪只口袋妖怪每輪先攻擊
#Stage:Stage數(shù)
#Legendary:傳奇的口袋妖怪是真的,不是假的
我已經(jīng)重新命名了這些列名,以使我們的策劃更有意義,使我們的思路更加清晰。雖然這是可選的,但我強烈建議你這樣做,以消除任何可能的混亂。data.rename(columns = {“#”:”No.”,”Type 1":”Pokemon_Type”,”Type 2":”PokemonType2",’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()
輸出:

接下來讓我們從簡單的分布圖開始可視化。分布圖:分布圖顯示根據(jù)標注繪制的一組數(shù)值的分布和范圍。直方圖允許你繪制數(shù)值變量的分布。我本可以用“data.hist(figsize=(12,10),bins=20)”,但由于并非此數(shù)據(jù)庫中的所有列都有數(shù)值,因此,我必須繪制單獨的分布圖。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ù)用密度曲線繪制直方圖,我們可以使用選項 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因此,對于許多繪制分布的方法,所有函數(shù)如pyplot.hist, seaborn.CooutCountPlot以及seaborn.dispot充當(dāng)了 matplotlib 條形圖的包裝器,如果認為手動繪制此類條形圖太麻煩,則可以使用。對于離散變量,seaborn.countplot更方便。對于連續(xù)變量:則使用pyplot.hist或者seaborn.distplot。聯(lián)合分布圖:聯(lián)合分布圖結(jié)合了散點圖和直方圖的信息,給出了二元分布的詳細信息。sns.jointplot(x=data[“Sum of Attack”],y=data[“Defensive Strength”],color=”Red”);

密度圖:密度圖顯示兩個變量之間的分布。sns.kdeplot(x=data[“Sum of Attack”],y=data[“Defensive Strength”])
plt.show()

條形圖條形圖有助于我們可視化分類變量的分布:Countplot是條形圖的一種類型。plt.figure(figsize=(10,6));
sns.countplot(x=data.Pokemon_Type,palette=pkmn_type_colors);
plt.show()

熱圖熱圖有助于我們以熱點和冷點的形式將類似矩陣的數(shù)據(jù)進行可視化,暖色表示游客互動度最高的區(qū)域。plt.figure(figsize=(8,6));
sns.heatmap(data.corr());# Rotate x-labels with the help of matplotlib
plt.xticks(rotation=-45);

散點圖:散點圖(也稱散點圖,scatter graph)使用點來表示兩個不同數(shù)值變量的值,水平軸和垂直軸上每個點的位置表示單個數(shù)據(jù)點的值。散點圖用于觀察變量之間的關(guān)系。我用散點圖比較了神奇寶貝的攻防數(shù)據(jù)。

Seaborn沒有專用的散點圖函數(shù),這就是為什么我們在這里默認看到一條對角線(回歸線)。但seaborn幫助我們調(diào)整了圖像:fit_reg=False 用于刪除回歸線hue='Stage' 用于通過第三個變量值為點上色,因此,允許我們用顏色來表達信息的第三維度。這里我把神奇寶貝的進化階段作為第三個變量!#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的點更多,我在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)在可以看到一個更集中和更好的圖表!

箱形圖箱形圖用于通過四分位數(shù)描述數(shù)值數(shù)據(jù)組。箱形圖也可能有從箱子延伸出來的線,表示上下四分位數(shù)之外的變化,因此術(shù)語為盒須圖以及須盒圖我們可以刪除“Sum of Attack(攻擊總和)”列,因為我們有個人統(tǒng)計。我們也可以刪除“Generation(世代)”和“Legendary(傳奇)”列,因為它們不是戰(zhàn)斗統(tǒng)計。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)在我們來畫小提琴圖。小提琴圖是盒子圖的替代品,它顯示的是分布(通過小提琴的厚度),而不僅僅是摘要統(tǒng)計。這里我展示了神奇寶貝的主要攻擊類型的分布plt.figure(figsize=(15,7));
sns.violinplot(x=data.Pokemon_Type, y = data[“Attack Strength”]);

正如你所看到的,龍型的攻擊屬性往往比鬼魂型高,但它們也有更大的差異,F(xiàn)在,神奇寶貝的粉絲們可能會發(fā)現(xiàn)這個圖表有些不和諧,因為顏色是不合適的,為什么草型的顏色是粉紅色,水型的顏色是橙色?我們必須馬上解決這個問題!幸運的是,Seaborn允許我們設(shè)置自定義調(diào)色板,我們可以簡單地創(chuàng)建一個有序的Python顏色十六進制值列表。我用Bulbapedia創(chuàng)建了一個新的調(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ù)口袋妖怪類型的顏色修改小提琴圖:plt.figure(figsize=(15,7));
sns.violinplot(x=data.Pokemon_Type,
y = data[“Attack Strength”],
palette = pkmn_type_colors);

分簇散點圖如你所見,小提琴圖非常適合可視化分布。然而,由于我們的數(shù)據(jù)集中只有150個神奇寶貝,我們有時可能想簡單地顯示每個點,這時就用到了分簇散點圖,它可以顯示每個點,同時“疊加”具有相似值的點。plt.figure(figsize=(12,5));
sns.swarmplot(x=data.Pokemon_Type,y=data[“Attack Strength”],palette=pkmn_type_colors);

這看起來不錯,但是為了獲得更好的視覺效果,我們可以將兩者結(jié)合起來!畢竟,它們顯示相同的信息。疊加圖plt.figure(figsize=(10,10))sns.violinplot(x=data.Pokemon_Type, y = data[“Attack Strength”],
inner=None,
palette = pkmn_type_colors);sns.swarmplot(x=”Pokemon_Type”,
y=”Attack Strength”,
data=data,
color=’black’, #making points black
alpha=0.5);plt.title(“Attacking Strength as per Pokemon’s Type”);

注意事項:*inner = None:*移除小提琴內(nèi)部的橫條*alpha = 0.5:*使點稍微透明:記住alpha值必須為浮點,不要保留在“”中你可以在這里找到seaborn 關(guān)于顏色設(shè)置的參考資料:https://python-graph-gallery.com/100-calling-a-color-with-seaborn/因子圖因子圖使按分類劃分圖變得容易。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()
簡要說明:plt.xticks(rotation = -45):不起作用,因為它只旋轉(zhuǎn)最后一個繪圖需要使用:set_xticklabels你只需更改變量名并運行相同的代碼行,就可以像上面那樣進行更多的可視化。我把它作為一個練習(xí)留給你去做,以便更好地掌握Python的可視化技能。

本文到此為止!希望這個教程對你來說有幫助,祝你的數(shù)據(jù)科學(xué)之旅學(xué)習(xí)愉快!

聲明: 本文由入駐維科號的作者撰寫,觀點僅代表作者本人,不代表OFweek立場。如有侵權(quán)或其他問題,請聯(lián)系舉報。

發(fā)表評論

0條評論,0人參與

請輸入評論內(nèi)容...

請輸入評論/評論長度6~500個字

您提交的評論過于頻繁,請輸入驗證碼繼續(xù)

暫無評論

暫無評論

    掃碼關(guān)注公眾號
    OFweek人工智能網(wǎng)
    獲取更多精彩內(nèi)容
    文章糾錯
    x
    *文字標題:
    *糾錯內(nèi)容:
    聯(lián)系郵箱:
    *驗 證 碼:

    粵公網(wǎng)安備 44030502002758號