10個實用的Python資料視覺化圖表總結

數據分析那些事
13 min readJan 9, 2023

--

視覺化是一種方便的觀察資料的方式 📊,可以一目瞭然地瞭解資料塊,我們通常使用的視覺化圖表有柱狀圖、直方圖、餅圖、箱圖、熱圖、散點圖、線狀圖等。

這些典型的圖對於資料視覺化是必不可少的,但是除了這些被廣泛使用的圖表外,還有許多很好的卻很少被使用的視覺化方法,這些圖表幫助我們更好地呈現資料、完成工作,下面我們將詳細瞭解一下這10種視覺化圖表。

1、平行座標圖(Parallel Coordinate)

我們最多可以視覺化 3 維資料,但是我們有時需要視覺化超過 3 維的資料才能獲得更多的資訊。我們經常使用 PCA 或 t-SNE 來降維並繪製它,但是在降維的情況下,可能會丟失大量資訊。在某些情況下,我們需要考慮所有特徵, 而平行座標圖可以幫助我們達成這一點。

上面的圖片中,橫線(平行軸)表示鳶尾花的特徵(花瓣長、萼片長、萼片寬、花瓣寬),分類是Setosa, Versicolor和Virginica。上圖將該物種編碼為Setosa→1,Versicolor→2,Virginica→3。每個平行軸包含最小值到最大值(例如,花瓣長度從1到6.9,萼片長度從4.3到7.9,等等)。例如,考慮花瓣長度軸,這表明與其他兩種植物相比,瀨蝶屬植物的花瓣長度較小,其中Virginica屬植物的花瓣長度最高。

有了這個圖,我們可以很容易地獲得資料集的總體資訊。那麼資料集是什麼樣子的?讓我們來看看。

讓我們用Plotly Express庫視覺化資料,Plotly庫提供了一個互動式繪圖工具。

 import plotly.express as px
df = px.data.iris()
fig = px.parallel_coordinates(df, color="species_id", labels={"species_id": "Species",
"sepal_width": "Sepal Width", "sepal_length": "Sepal Length",
"petal_width": "Petal Width", "petal_length": "Petal Length", },
color_continuous_scale=px.colors.diverging.Tealrose,
color_continuous_midpoint=2)
fig.show()

除了上圖以外我們還可以使用其他庫,如pandas、scikit-learn和matplotlib來繪製並行座標。

2、六邊形分箱圖 (Hexagonal Binning)

六邊形分箱圖是一種用六邊形直觀表示二維數值資料點密度的方法。

 ax = df.plot.hexbin(x='sepal_width', y='sepal_length', gridsize=20,color='#BDE320')

同樣使用上一節的資料集來繪製上面的六邊形分箱圖。Pandas 允許我們繪製六邊形 binning,上圖展示了用於查詢 sepal_width 和 sepal_length 列的密度的圖。

如果仔細觀察圖表,我們會發現總面積被分成了無數個六邊形,每個六邊形覆蓋特定區域。我們注意到六邊形有顏色變化,六邊形有的沒有顏色,有的是淡綠色,有的顏色很深。根據圖右側顯示的色標,顏色密度隨密度變化。比例表示具有顏色變化的資料點的數量。如果六邊形沒有填充顏色,這意味著該區域沒有資料點。

其他庫,如 matplotlib、seaborn、bokeh(互動式繪圖)也可用於繪製六邊形分箱圖。

3、等高線密度圖(Contour )

二維等高線密度圖是視覺化特定區域內資料點密度的另一種方法。這是為了找到兩個數值變數的密度。例如,下面的圖顯示了在每個陰影區域有多少資料點。

 import plotly.express as px
fig = px.density_contour(df, x="sepal_width", y="sepal_length")
fig.update_traces(contours_coloring="fill", contours_showlabels = True)
fig.show()

為了生成上面的圖表,這裡使用了plotly庫,它可以方便地繪製互動式的圖表。在這裡繪製了兩個變數 sepal_width 和 sepal_length 的密度。

當然,也可以使用其他庫,如seaborn、matplotlib等。

4、QQ-plot

QQ plot是另一個有趣的視覺化圖表,QQ是Quantile — Quantile plot的縮寫(Quantile/percentile是一個範圍,在這個範圍內資料下降了指定百分比。例如,第10個quantile/percentile表示在該範圍下,找到了10%的資料,90% 超出範圍)。這是一種直觀地檢查數值變數是否服從正態分佈的方法,首先解釋一下它是如何工作的。

圖(a)是樣本分佈;(b) 是標準正態分佈。對於樣本分佈,資料範圍從 10 到 100(100% 資料在 10 到 100 之間)。但對於標準正態分佈,100% 的資料在 -3 到 3(z 分數)的範圍內。在 QQ 圖中,兩個 x 軸值均分為 100 個相等的部分(稱為分位數)。如果我們針對 x 和 y 軸繪製這兩個值,我們將得到一個散點圖。

散點圖位於對角線上。這意味著樣本分佈是正態分佈。如果散點圖位於左邊或右邊而不是對角線,這意味著樣本不是正態分佈的。

匯入必要的庫

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

生成正態分佈資料

 np.random.seed(10)
# Generate Univariate Observations
gauss_data = 5 * np.random.randn(100) + 50

繪製資料點的分佈

 sns.histplot(data=gauss_data, kde=True)

該圖顯示資料是正態分佈的,我們用資料點做QQ-plot來檢驗它是否正態分佈。

 import statsmodels.api as sm
# q-q plot
sm.qqplot(gauss_data, line='s')
plt.show()

該圖顯示散點位於對角線上,所以它是正態分佈的。

5、小提琴圖(Violin Plot)

小提琴圖與箱線圖相關,我們能從小提琴圖中獲得的另一個資訊是密度分佈,簡單來說就是一個結合了密度分佈的箱線圖。我們將其與箱線圖進行比較。

在小提琴圖中,小提琴中間的白點表示中點,實心框表示四分位數間距 (IQR),上下相鄰值是異常值的圍欄,超出範圍,一切都是異常值。下圖顯示了比較。

讓我們看看小提琴圖的視覺化

 import seaborn as sns
sns.violinplot(data=df, y="sepal_width")

我們還可以透過傳遞名稱來繪製不同物種的小提琴圖。

 import seaborn as sns
sns.violinplot(data=df,x='species', y="sepal_width")

還可以使用其他庫,如plotly、matplotlib等來繪製小提琴圖。

6、箱線圖的改進版(Boxen plot)

Boxenplot 是 seaborn 庫引入的一種新型箱線圖。對於箱線圖,框是在四分位數上建立的;但在 Boxenplot 中,資料被分成更多的分位數,它提供了對資料的更多記憶體。

鳶尾花資料集的 Boxenplot 顯示了 sepal_width 的資料分佈。

 sns.boxenplot(x=df["sepal_width"])

上圖顯示了比箱線圖更多的盒,這是因為每個框代表一個特定的分位數。

 sns.boxenplot(data=df, x="species",y='sepal_width')

不同物種sepal_width的Boxenplot圖。

7、點圖

下圖中有一些名為誤差線的垂直線和其他一些連線這些垂直線的線,首先讓我們看看它的確切含義。

點圖是一種透過上圖中顯示的點的位置來表示數值變數集中趨勢的方法,誤差條表示變數的不確定性(置信區間)。繪製線圖是為了比較不同分類值的數值變數的變異性 。

我們繼續使用 seaborn 庫和 iris 資料集(在平行座標部分中提到)。

 import seaborn as sns
sns.pointplot(data=df,x="species", y="sepal_width")

該圖表顯示了不同花的萼片寬度的變異性。我們還可以繪製多個點圖。

8、分簇散點圖(Swarm plot)

Swarm plot 是另一個受“beeswarm”啟發的有趣圖表,透過此圖我們可以輕鬆瞭解不同的分類值如何沿數值軸分佈,它在不重疊資料點的情況下繪製資料,但它不適用於大型資料集。

 import seaborn as sns
sns.swarmplot(data=df,x="species", y="sepal_width")

9、旭日圖(Sunburst Chart)

它是圓環圖或餅圖的定製版本,可以將一些額外的層次資訊整合到圖中。

整個圖表被分成幾個環(從內到外)。它儲存層次結構資訊,其中內環位於層次結構的頂部,外環位於較低的階。

 import plotly.express as px
df = px.data.tips()

繪製旭日圖

 fig = px.sunburst(df, path=['sex', 'day', 'time'], values='total_bill', color='time')
fig.show()

sunburst類的path屬性提供了層次結構,其中性別位於層次結構的頂部,然後是日期和時間。

10、詞雲(Word Cloud)

詞雲圖的想法非常簡單,假設我們有一組文字文件,單詞有很多,有些是經常出現的,有些是很少出現的。在詞雲圖中,所有單詞都被繪製在特定的區域中,頻繁出現的單詞被高亮顯示(用較大的字型顯示)。有了這個詞雲,我們可以很容易地找到重要的客戶反饋,熱門的政治議程話題等。

 import pandas as pd
data=pd.read_csv('/work/android-games.csv')
data.head()

統計每個類別的資料數量

 data.category.value_counts()

進行視覺化

 #importing the module from wordcloud library
from wordcloud import WordCloud
import matplotlib.pyplot as plt

#creating a text from the category column by taking only the 2nd part of the category.
text = " ".join(cat.split()[1] for cat in data.category)

#generating the cloud
word_cloud = WordCloud(collocations = False, background_color = 'black').generate(text)
plt.imshow(word_cloud, interpolation='bilinear')
plt.axis("off")
plt.show()

該圖表顯示了頻率最高的所有類別,我們也可以用這個圖從文字中找到經常出現的單詞。

總結

資料視覺化是資料科學中不可缺少的一部分,在資料科學中,我們與資料打交道。手工分析少量資料是可以的,但當我們處理數千個數據時它就變得非常麻煩。如果我們不能發現數據集的趨勢和洞察力,我們可能無法使用這些資料。希望上面介紹的的圖可以幫助你深入瞭解資料。

文章來源:deephub
文章連結:https://blog.csdn.net/deephub/article/details/128076922

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

我是「數據分析那些事」。常年分享數據分析乾貨,不定期分享好用的職場技能工具。各位也可以關注我的Facebook,按讚我的臉書並私訊「10」,送你十週入門數據分析電子書唷!期待你與我互動起來~

文章推薦

餅圖變形記,肝了3000字,收藏就是學會!

MySQL必須掌握4種語言!

太實用了!4種方法教你輕鬆製作互動式儀表板!

跟資料打交道的人都得會的這8種資料模型,滿足工作中95%的需求

妙呀!一行Python程式碼

回顧十週入門數據分析系列文:

關注數據君的臉書:

我是「數據分析那些事」。常年分享數據分析乾貨,不定期分享好用的職場技能工具。按贊我的臉書,會有豐富資料包贈送唷!

--

--

數據分析那些事

這是一個專注於數據分析職場的內容部落格,聚焦一批數據分析愛好者,在這裡,我會分享數據分析相關知識點推送、(工具/書籍)等推薦、職場心得、熱點資訊剖析以及資源大盤點,希望同樣熱愛數據的我們一同進步! 臉書會有更多互動喔:https://www.facebook.com/shujvfenxi/