所有文章

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

2,5187 分鐘閱讀
資料科學python
資料科學第五週-樞紐分析、表資料視覺化長條圖

繼續資料視覺化的過程吧,來試試看同樣查看分佈的長條圖,並介紹Seaborn。

Seaborn 是建立在 Matplotlib 基礎上,提供了更高級、更美觀的繪圖功能。

查看分佈-以桃園的廟為例

先讀取桃園區有登記的廟宇:

python
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()
Image

樞紐分析表Pivot()

主要把兩篇分開,也是想介紹Pandas中也有像Excel樞紐分析表的功能,非常強!重點參數如下:

  • index: 用於指定作為索引的列。這將成為新 DataFrame 的行標籤。
  • columns: 用於指定作為列的列。這將成為新 DataFrame 的列標籤。
  • values: 用於指定要聚合的列。如果未指定,將使用所有剩餘的列。
  • aggfunc: 用於指定聚合函數。默認為 numpy.mean。可以是函數名稱或函數列表。

在這我好奇「每個神有沒有隸屬的宗教?」,我就可以使用樞紐分析表,同時也秀一下Excel的版本,方便視覺化了解index, columns, value, 和aggfunc

python
df.to_excel('df.xlsx')
Image
python
pivot_table = pd.pivot_table(df, index='教別',columns='主祀神祇',values='寺廟名稱', aggfunc='count')
pivot_table
Image

挑選福德正神來作為各教別的呈現資料

python
god = pivot_table['福德正神']
god
Image

長條圖

為了教學唬爛一下,加入一種神明

python
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 軸位置。

繪圖

python
plt.title('福德正神各宗教分布')
plt.bar(x=god.index, height=god['福德正神'],color='#05A6A6')
Image

同時兩個神明做比較

同時兩種資料進行比較時,較簡單的做法可以使用pandas內建的bar chart,但缺點就是不能調整細節。

python
god.plot(kind='bar') 
Image

使用matplotlib可以對顏色、文字等進行修改,但要注意寬度可能重疊,要做調整,個人覺得顏色還是圖的靈魂啊!

python
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)
Image

顏色的挑選

在挑選顏色時可以參考幾個網站,我個人推薦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的圖,做個簡單用法比較

Image

作業-Youbike各站資料呈現

示範利用AI的力量如何更快速產生結果

python
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()
Image

資料轉型與排序

python
df_youbike['tot'] = df_youbike['tot'].astype('int')
df_youbike['sbi'] = df_youbike['sbi'].astype('int')
python
df_youbike.sort_values(by='tot',ascending=False).head(10)
Image

詢問AI

python
各站可借數量,label之間寬一點
python
# 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()
Image

版權聲明

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

文章作者:阿盧老師

文章連結:https://codinglu.tw/blog/pivot-table-and-bar-chart

授權條款:本文採用 CC BY-NC 4.0 授權。轉載請標明出處。