資料科學第五週-樞紐分析、表資料視覺化長條圖

繼續資料視覺化的過程吧,來試試看同樣查看分佈的長條圖,並介紹Seaborn。
Seaborn 是建立在 Matplotlib 基礎上,提供了更高級、更美觀的繪圖功能。
查看分佈-以桃園的廟為例
先讀取桃園區有登記的廟宇:
import pandas as pd
data = pd.read_json('http://data.tycg.gov.tw/api/v1/rest/datastore/b2247404-3d92-4829-9855-0cd5e71b92b3?format=json&limit=500')
df = pd.DataFrame(data['result']['records'])
df.head()
樞紐分析表Pivot()
主要把兩篇分開,也是想介紹Pandas中也有像Excel樞紐分析表的功能,非常強!重點參數如下:
- index: 用於指定作為索引的列。這將成為新 DataFrame 的行標籤。
- columns: 用於指定作為列的列。這將成為新 DataFrame 的列標籤。
- values: 用於指定要聚合的列。如果未指定,將使用所有剩餘的列。
- aggfunc: 用於指定聚合函數。默認為 numpy.mean。可以是函數名稱或函數列表。
在這我好奇「每個神有沒有隸屬的宗教?」,我就可以使用樞紐分析表,同時也秀一下Excel的版本,方便視覺化了解index, columns, value, 和aggfunc
df.to_excel('df.xlsx')
pivot_table = pd.pivot_table(df, index='教別',columns='主祀神祇',values='寺廟名稱', aggfunc='count')
pivot_table
挑選福德正神來作為各教別的呈現資料
god = pivot_table['福德正神']
god
長條圖
為了教學唬爛一下,加入一種神明
god = pd.DataFrame(god)
god['盧盧大神'] = [10, 20, 30, 40]
god長條圖的參數
x:X 軸的標籤,通常是一組類別數據或索引。
height:Y 軸的數據,對應於每個 X 軸標籤的高度。
width:條形的寬度,默認為0.8。可以調整寬度使長條圖更加緊湊或分散。
bottom:條形的基準線,默認為0。如果要實現堆疊長條圖,可以設置為另一組數據的高度。
align:條形的位置對齊方式,有兩個選項:'center'(默認):條形的中心對齊 X 軸位置。
'edge':條形的左邊緣對齊 X 軸位置。
繪圖
plt.title('福德正神各宗教分布')
plt.bar(x=god.index, height=god['福德正神'],color='#05A6A6')
同時兩個神明做比較
同時兩種資料進行比較時,較簡單的做法可以使用pandas內建的bar chart,但缺點就是不能調整細節。
god.plot(kind='bar') 
使用matplotlib可以對顏色、文字等進行修改,但要注意寬度可能重疊,要做調整,個人覺得顏色還是圖的靈魂啊!
plt.title('福德正神各宗教分布')
plt.bar(x=god.index, height=god['福德正神'],width=0.3,align='edge',color='#658BFC')
plt.bar(x=god.index, height=god['盧盧大神'],width=0.2,color='#B9CAFC')
plt.legend(god.columns)
顏色的挑選
在挑選顏色時可以參考幾個網站,我個人推薦Adobe Color,其他也都可以嘗試看看:
Adobe Color
https://color.adobe.com/zh/create/color-wheel
Nippon Colors
https://nipponcolors.com/#higosusutake
預設顏色表
https://www.practicalpythonfordatascience.com/ap_seaborn_palette
Pandas, Matplotlib, Seaborn用法差異
最後,引用NTUDAC的圖,做個簡單用法比較

作業-Youbike各站資料呈現
示範利用AI的力量如何更快速產生結果
import pandas as pd
url = 'http://data.tycg.gov.tw/api/v1/rest/datastore/a1b4714b-3b75-4ff8-a8f2-cc377e4eaa0f?format=json&limit=500'
youbike_data = pd.read_json(url)
df_youbike = pd.DataFrame(youbike_data['result']['records'])
df_youbike.head()
資料轉型與排序
df_youbike['tot'] = df_youbike['tot'].astype('int')
df_youbike['sbi'] = df_youbike['sbi'].astype('int')df_youbike.sort_values(by='tot',ascending=False).head(10)
詢問AI
各站可借數量,label之間寬一點# prompt: 各站可借數量,label之間寬一點
import matplotlib.pyplot as plt
plt.figure(figsize=(20, 6))
plt.title('Youbike 各站可借數量')
plt.bar(x=df_youbike['sna'], height=df_youbike['sbi'], width=1) # 使用 width 調整柱狀圖寬度
plt.xticks(rotation=90) # 旋轉 x 軸標籤,避免重疊
plt.tight_layout() # 調整佈局,避免標籤超出圖表範圍
plt.show()
版權聲明
文章標題:資料科學第五週-樞紐分析、表資料視覺化長條圖
文章作者:阿盧老師
文章連結:https://codinglu.tw/blog/pivot-table-and-bar-chart
授權條款:本文採用 CC BY-NC 4.0 授權。轉載請標明出處。