上一篇學(xué)習(xí)了基于單變量的基礎(chǔ)圖表的應(yīng)用秫舌,這篇繼續(xù)學(xué)習(xí)使用雙變量作圖嘉栓。
變量之間沒有關(guān)系的數(shù)據(jù)在數(shù)據(jù)科學(xué)上相當(dāng)于空白畫布抗碰。為了繪制出有用的圖表伏伐,我們需要理解兩個變量之間是如何相互作用的宽涌。 是否同時增減椿息,是否存在線性關(guān)系鸿捧,為了更好的繪制圖表最好的方式是使用能夠?qū)崿F(xiàn)這些可能性的數(shù)據(jù)點泻轰。
數(shù)據(jù)源同上一篇文章铡恕。
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
reviews = pd.read_csv("kaggle/winemag-data_first150k.csv", index_col=0)
head = reviews.head(3)
Scatter plot 散點圖
散點圖是以一個變量為橫坐標(biāo)琢感,另一個變量為縱坐標(biāo),利用散點(坐標(biāo)點)的分布形態(tài)反映變量關(guān)系的一種圖形探熔。
下面查看一下葡萄酒價格和評分之間的關(guān)系:
reviews[reviews['price'] < 200].plot.scatter(x='price', y='points')
看到圖中全是點驹针,基本看不出來葡萄酒價格和評分之間的關(guān)系。由于散點圖不能有效的處理映射相同位置的點诀艰,為了更好的表示兩者之間的關(guān)系柬甥,我們需要對數(shù)據(jù)進行抽樣,抽取100個點重新進行展示:
reviews[reviews['price'] < 200].sample(100).plot.scatter(x='price', y='points')
從上圖可以看出價格更高的葡萄酒在評論時會獲得更高的評分其垄。由此可見散點圖對于相對較小的數(shù)據(jù)集和具有大量惟一值的變量最有效苛蒲。
處理多重復(fù)數(shù)據(jù)點導(dǎo)致的覆蓋繪制,除了抽樣數(shù)據(jù)绿满,還可以使用Hexplot臂外。
Hexplot 六邊形圖
六邊形圖將空間中的點聚合成六邊形,然后根據(jù)六邊形內(nèi)部的值為這些六邊形上色喇颁。
reviews[reviews['price'] < 100].plot.hexbin(x='price', y='points', gridsize=15)
有測試price<200 的情況漏健,發(fā)現(xiàn)圖形集中在0-100價格區(qū)間(此處未展示圖片),故調(diào)整過濾條件為price<100。
從上圖中橘霎,看到了散點圖未告知的信息蔫浆,我們可以看到葡萄酒雜志上評論的葡萄酒的價格集中在87.5分左右,在20美元左右姐叁。
Stacked plots
堆積圖是一種把變量一個放在另一個上面的圖表瓦盛。
回顧一下上一篇文章中的單變量柱形圖,這里可以簡單使用一個stacked 參數(shù),達(dá)到多個柱形的疊加外潜。
原文是引入新的數(shù)據(jù)集原环,這里我們在源數(shù)據(jù)上進行一下處理,獲得top5葡萄酒不同評價分?jǐn)?shù)的次數(shù)數(shù)據(jù):
# top5酒廠
winery = reviews['winery'].value_counts().head(5)
wine_counts = pd.DataFrame({'points': range(80, 101)})
for name in winery.index:
winery_grouped = reviews[reviews['winery'] == name]
points_series = winery_grouped['points'].value_counts().sort_index()
df = pd.DataFrame({'points': points_series.index, name: list(points_series)})
wine_counts = wine_counts.merge(df, on='points',how='left').fillna(0)
wine_counts.set_index('points', inplace=True)
wine_counts.plot.bar(stacked=True)
堆積條形圖具有單變量條形圖的優(yōu)點和缺點处窥。它們最適用于定類數(shù)據(jù)或少量定序數(shù)據(jù)嘱吗。
另一個簡單的例子是堆積面積圖。
wine_counts.plot.area()
與單變量面積圖一樣碧库,多變量面積適用于展示定類數(shù)據(jù)或區(qū)間數(shù)據(jù)柜与。
堆積圖在視覺上非常漂亮。但是它們有兩個主要局限性嵌灰。
第一個局限性: 堆積圖的第二個變量必須是一個可能值數(shù)量非常有限的變量弄匕。8有時被稱為建議的上限。有許多數(shù)據(jù)集字段不符合這個準(zhǔn)則沽瞭,需要進一步進行數(shù)據(jù)處理迁匠。
第二個局限性:可讀性差,難以區(qū)分具體的值驹溃。例如城丧,看上面的圖,你能告訴我在得分值為87.5的時候豌鹤,哪一種葡萄酒得分更高:Testarossa(橙色)亡哄,williams(藍(lán)色),還是DFJ(綠色)? 這真的很難講!
Bivariate line chart 多變量折線圖
wine_counts.plot.line()
這種方式使用折線圖彌補了堆積圖可讀性的局限布疙。在這個圖表中蚊惯,我們可以很容易地回答上一個例子中的問題:分值為87.5的時候,哪一種葡萄酒得分更高灵临?我們可以看到Columbia Crest最高截型。
總結(jié)
Scatter Plot | Hex Plot | Stacked Bar Chart | Bivariate Line Chart |
---|---|---|---|
df.plot.scatter(x, y) | df.plot.hexbin(x, y,gridsize) | df.plot.bar(stacked=True) | df.plot.line() |
適用于區(qū)間數(shù)據(jù)和少量定類數(shù)據(jù)。 | 適用于區(qū)間數(shù)據(jù)和少量定類數(shù)據(jù) | 適用于定類數(shù)據(jù)和有序數(shù)據(jù) | 適用于有序數(shù)據(jù)和區(qū)間數(shù)據(jù) |
參考資料
https://www.kaggle.com/residentmario/bivariate-plotting-with-pandas