Python數據可視化探索實例分享

一、數據可視化與探索圖

數據可視化是指用圖形或表格的方式來呈現數據。圖表能夠清楚地呈現數據性質, 以及數據間或屬性間的關系,可以輕易地讓人看圖釋義。用戶通過探索圖(Exploratory Graph)可以瞭解數據的特性、尋找數據的趨勢、降低數據的理解門檻。

二、常見的圖表實例

本章主要采用 Pandas 的方式來畫圖,而不是使用 Matplotlib 模塊。其實 Pandas 已經把 Matplotlib 的畫圖方法整合到 DataFrame 中,因此在實際應用中,用戶不需要直接引用 Matplotlib 也可以完成畫圖的工作。

1.折線圖

折線圖(line chart)是最基本的圖表,可以用來呈現不同欄位連續數據之間的關系。繪制折線圖使用的是 plot.line() 的方法,可以設置顏色、形狀等參數。在使用上,拆線圖繪制方法完全繼承瞭 Matplotlib 的用法,所以程序最後也必須調用 plt.show() 產生圖,如圖8.4 所示。

df_iris[['sepal length (cm)']].plot.line()
plt.show()
ax = df[['sepal length (cm)']].plot.line(color='green',title="Demo",style='--')
ax.set(xlabel="index", ylabel="length")
plt.show()

2.散佈圖

散佈圖(Scatter Chart)用於檢視不同欄位離散數據之間的關系。繪制散佈圖使用的是 df.plot.scatter(),如圖8.5所示。

df = df_iris
df.plot.scatter(x='sepal length (cm)', y='sepal width (cm)')
from matplotlib import cm
cmap = cm.get_cmap('Spectral')
df.plot.scatter(x='sepal length (cm)',
          y='sepal width (cm)',
          s=df[['petal length (cm)']]*20,
          c=df['target'],
          cmap=cmap,
          title='different circle size by petal length (cm)')

3.直方圖、長條圖

直方圖(Histogram Chart)通常用於同一欄位,呈現連續數據的分佈狀況,與直方圖類似的另一種圖是長條圖(Bar Chart),用於檢視同一欄位,如圖 8.6 所示。

df[['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)','petal width (cm)']].plot.hist()
2 df.target.value_counts().plot.bar()

4. 圓餅圖、箱形圖

圓餅圖(Pie Chart)可以用於檢視同一欄位各類別所占的比例,而箱形圖(Box Chart)則用於檢視同一欄位或比較不同欄位數據的分佈差異,如圖 8.7 所示。

df.target.value_counts().plot.pie(legend=True)
df.boxplot(column=['target'],figsize=(10,5))

數據探索實戰分享:

本節利用兩個真實的數據集實際展示數據探索的幾種手法。

三、社區調查

在美國社區調查(American Community Survey)中,每年約有 350 萬個傢庭被問到關於他們是誰及他們如何生活的詳細問題。調查的內容涵蓋瞭許多主題,包括祖先、教育、工作、交通、互聯網使用和居住。

數據名稱:2013 American Community Survey。

先觀察數據的樣子與特性,以及每個欄位代表的意義、種類和范圍。

# 讀取數據
df = pd.read_csv("./ss13husa.csv")
# 欄位種類數量
df.shape
# (756065,231)
# 欄位數值范圍
df.describe()

先將兩個 ss13pusa.csv 串連起來,這份數據總共包含 30 萬筆數據,3 個欄位:SCHL ( 學歷,School Level)、 PINCP ( 收入,Income) 和 ESR ( 工作狀態,Work Status)。

pusa = pd.read_csv("ss13pusa.csv") pusb = pd.read_csv("ss13pusb.csv")
# 串接兩份數據
col = ['SCHL','PINCP','ESR']
df['ac_survey'] = pd.concat([pusa[col],pusb[col],axis=0)

依據學歷對數據進行分群,觀察不同學歷的數量比例,接著計算他們的平均收入。

group = df['ac_survey'].groupby(by=['SCHL']) print('學歷分佈:' + group.size())
group = ac_survey.groupby(by=['SCHL']) print('平均收入:' +group.mean())

四、波士頓房屋數據集

波士頓房屋數據集(Boston House Price Dataset)包含有關波士頓地區的房屋信息, 包 506 個數據樣本和 13 個特征維度。

數據名稱:Boston House Price Dataset。

先觀察數據的樣子與特性,以及每個欄位代表的意義、種類和范圍。

可以用直方圖的方式畫出房價(MEDV)的分佈,如圖 8.8 所示。

df = pd.read_csv("./housing.data")
# 欄位種類數量
df.shape
# (506, 14)
#欄位數值范圍df.describe()
import matplotlib.pyplot as plt
df[['MEDV']].plot.hist()
plt.show()

註:圖中英文對應筆者在代碼中或數據中指定的名字,實踐中讀者可將它們替換成自己需要的文字。

接下來需要知道的是哪些維度與“房價”關系明顯。先用散佈圖的方式來觀察,如圖8.9所示。

# draw scatter chart
df.plot.scatter(x='MEDV', y='RM') .
plt.show()

最後,計算相關系數並用聚類熱圖(Heatmap)來進行視覺呈現,如圖 8.10 所示。

# compute pearson correlation
corr = df.corr()
# draw  heatmap
import seaborn as sns
corr = df.corr()
sns.heatmap(corr)
plt.show()

顏色為紅色,表示正向關系;顏色為藍色,表示負向關系;顏色為白色,表示沒有關系。RM 與房價關聯度偏向紅色,為正向關系;LSTAT、PTRATIO 與房價關聯度偏向深藍, 為負向關系;CRIM、RAD、AGE 與房價關聯度偏向白色,為沒有關系。

到此這篇關於Python數據可視化探索實例分享的文章就介紹到這瞭,更多相關Python數據可視化內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: