首頁  >  文章  >  後端開發  >  Python資料視覺化的四種方法介紹(附範例)

Python資料視覺化的四種方法介紹(附範例)

不言
不言轉載
2018-11-27 15:33:354120瀏覽

本篇文章帶給大家的內容是關於Python資料視覺化的四種方法介紹(附範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

摘要:本文講述了熱圖、二維密度圖、蜘蛛圖、樹狀圖這四種Python資料視覺化方法。

資料視覺化是任何資料科學或機器學習專案的一個重要組成部分。人們常常會從探索數據分析(EDA)開始,來深入了解數據,並且創建視覺化確實有助於讓問題更清晰和更容易理解,尤其是對於那些較大的高維度數據集。在專案結束的時候,能夠以清晰的、簡潔的和令人信服的方式呈現最終結果,這是非常重要的,讓你的使用者能夠理解和理解。

你可能已經看過我之前的文章《5種快速且簡單的Python資料視覺化方法(含程式碼)》(5 Quick and Easy Data Visualizations in Python with Code) ,其中介紹了5種基本視覺化方法:散點圖、線圖、長條圖、長條圖和箱形圖。這五個是簡單而強大的視覺化方法,你絕對可以透過這些方法從資料集中得到巨大的收穫。在本文中,將介紹另外4個資料視覺化方法,但稍微複雜一些,你可以在看完上一篇文章介紹的基本方法之後再用。

熱圖(Heat Map)

熱圖是資料的矩陣表示方式,其中每個矩陣的值以一種顏色來表示。不同的顏色代表不同的級別,矩陣指數將兩個對比的列或特徵連接在一起。熱圖可以很好地顯示出多個特徵變數之間的關係,因為可以直接把一個層次看成一種顏色。也可以透過觀察熱圖中的一些點來查看每個關係是如何與資料集中的其它關係進行比較的。這些顏色的確提供了簡單的表示方式,因為這是非常直觀的。

Python資料視覺化的四種方法介紹(附範例)

現在來看程式碼:與matplotlib函式庫相比,seaborn函式庫可用於更高階的圖表,通常也需要更多的元件,如更多的顏色、圖形或變數。 Matplotlib庫用於顯示圖表,numpy用於生成數據,而pandas用於控制。繪圖只是呼叫一個簡單的seaborn函數,如果你發現了一些在視覺上很特別的東西,透過這個函數,還可以設定顏色映射。

# Importing libs
importseaborn as sns
import pandas aspd
importnumpyasnp
importmatplotlib.pyplotasplt

# Create a random dataset
data=pd.DataFrame(np.random.random((10,6)), columns=["Iron Man","CaptainAmerica","BlackWidow","Thor","Hulk", "Hawkeye"])

print(data)

# Plot the heatmap
heatmap_plot=sns.heatmap(data, center=0, cmap='gist_ncar')

plt.show()

二維密度圖(2D Density Plot)

二維密度圖是一維版本的簡單擴展,能夠看到關於2個變數的機率分佈。讓我們看看下面的二維密度圖,右邊的刻度用顏色表示每一點的機率。最高的機率,看下資料集,似乎大約是0.5的大小和1.4-ish的速度。如你所看到的,二維密度圖對於快速確定資料對於兩個變數最集中的區域非常地顯著,而不是像一維密度圖那樣只集中一個變數。當你有兩個對輸出結果非常重要的變量,並且希望了解它們如何一起對輸出結果分佈起作用的時候,二維密度圖尤其適合。

Python資料視覺化的四種方法介紹(附範例)

Seaborn的程式碼超級簡單,我們將透過建立一個偏態分佈來介紹它。如果你發現某些顏色和陰影在視覺上更特別,那麼大多數的可選參數都是為了看起來更清晰。

蜘蛛圖(Spider Plot)

蜘蛛圖是顯示一對多關係最好的方法之一。也就是說,你可以繪製並查看區別於單一變數或類別的多個變數的值。在蜘蛛圖中,一個變數相對於另一個變數的特性是顯而易見的,因為面積和長度在一些方向上變化了。如果你希望了解幾個類別關於這些變數是如何疊加起來的,可以並排繪製一下。在下圖中,很容易比較三個電影角色的不同屬性,並了解他們的優勢所在! 

Python資料視覺化的四種方法介紹(附範例)

這次我們將能夠直接使用matplotlib來建立視覺化,而不是用seaborn。需要計算每個屬性所在的角度,因為我們希望它們沿著圓週被平均地分隔開。我們將在每個計算的角度放置標籤,然後把值繪製成一個點,該點到中心的距離取決於它的值或是等級。最後,為了清晰起見,我們將使用半透明的顏色填滿連接各屬性點的線所包含的區域。

# Import libs
import pandas aspd
importseabornassns
importnumpyasnp
importmatplotlib.pyplotasplt

# Get the data
df=pd.read_csv("avengers_data.csv")
print(df)

"""
   #             Name  Attack  Defense  Speed  Range  Health
0  1         Iron Man      83       80     75     70      70
1  2  Captain America      60       62     63     80      80
2  3             Thor      80       82     83    100     100
3  3             Hulk      80      100     67     44      92
4  4      Black Widow      52       43     60     50      65
5  5          Hawkeye      58       64     58     80      65

"""

# Get the data for Iron Man
labels=np.array(["Attack","Defense","Speed","Range","Health"])
stats=df.loc[0,labels].values

# Make some calculations for the plot
angles=np.linspace(0, 2*np.pi, len(labels), endpoint=False)
stats=np.concatenate((stats,[stats[0]]))
angles=np.concatenate((angles,[angles[0]]))

# Plot stuff
fig=plt.figure()
ax=fig.add_subplot(111, polar=True)
ax.plot(angles, stats, 'o-', linewidth=2)
ax.fill(angles, stats, alpha=0.25)
ax.set_thetagrids(angles *180/np.pi, labels)
ax.set_title([df.loc[0,"Name"]])
ax.grid(True)

plt.show()

樹形圖(Tree Diagram)

我們從小學就開始使用樹形圖了,樹狀圖既自然又直觀,還易於解釋。直接連接的節點關係密切,而與有多個連接的節點差異很大。在下圖中,我已經根據統計繪製了一小部分來自Kaggle的Pokemon with stats資料集:

#HP、攻擊、防禦、特殊攻擊、特殊防禦、速度

因此,与stats wise最匹配的Pokemon将紧密连接在一起。例如,我们看到,在顶部,Arbok和Fearow是直接连接的,而且,如果我们查看数据,Arbok总共有438个,而Fearow有442个,非常接近。但是一旦我们移动到Raticate,我们得到的总数是413,这与Arbok和Fearow的差别很大,这就是它们被分开的原因。当我们移动树的时候,基于相似性,Pokemon被分的组越来越多。在绿色组中的Pokemon相互之间比红色组中的更相似,即使没有直接的绿色连接。

Python資料視覺化的四種方法介紹(附範例)

对于树形图,我们实际上要使用Scipy的。在查看了数据集之后,我们将去掉字符串类型的列。我们这么做只是为了要得到正确的可视化结果,但在实践中,最好是把这些字符串转换成分类变量,为了得到更好的结果和进行比较,我们还设置了数据帧索引,以便能够适当地用它作为引用每个节点的列。最后,在Scipy中计算和绘制树形图是非常简单的事了。

# Import libs
import pandas aspd
frommatplotlibimportpyplotasplt
fromscipy.clusterimport hierarchy
importnumpyasnp
# Read in the dataset
# Drop any fields that are strings
# Only get the first 40 because this dataset is big
df=pd.read_csv('Pokemon.csv')
df=df.set_index('Name')
del df.index.name
df=df.drop(["Type 1", "Type 2", "Legendary"], axis=1)
df=df.head(n=40)
# Calculate the distance between each sample
Z =hierarchy.linkage(df, 'ward')
# Orientation our tree
hierarchy.dendrogram(Z, orientation="left", labels=df.index)
plt.show()


以上是Python資料視覺化的四種方法介紹(附範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除