1. 讀取資料
原始資料 data
import plotly.express as px
import pandas as pd
import os
print("資料擷取,AI 運算中.....")
import time
tStart = time.time() #計時開始
#從WHO官網讀取'WHO-vaccine.csv'資料檔
data = pd.read_csv('vaccineBrand.csv')
data = data.drop('ID',1) #將ID欄位捨棄
#因為原始數據中,累計接種人次的資料形態是字串str,因此難以用來計算或繪圖
data = data.applymap(lambda x: x.replace(',','')) #將原始資料中,數字中間的千分位逗號去除(以將資料形態從字串轉換成int)
data["第一劑累計接種人次"] = data["第一劑累計接種人次"].astype('int') #轉換資料形態
data["第二劑累計接種人次"] = data["第二劑累計接種人次"].astype('int') #轉換資料形態
data["第三劑累計接種人次"] = data["第三劑累計接種人次"].astype('int') #轉換資料形態
data["總共累計接種人次"] = data["總共累計接種人次"].astype('int') #轉換資料形態
print("完成", end='')
tEnd = time.time() #計時結束
print(f'{len(data):.0f} 筆資料,{(tEnd - tStart):.2f}秒') #數字顯示規格設定
data.head()
不同時段的累計接種人次 data_ALL
#僅留存疫苗廠牌為ALL的,以探究12/1到12/10總施打人口的變化
#疫苗廠牌欄位的值為ALL表示在那個時間,所有施打人數總合
data_ALL = data[data.疫苗廠牌 == 'ALL']
print(f'{len(data_ALL):.0f} 筆資料,{(tEnd - tStart):.2f}秒')
data_ALL.head()
各疫苗廠牌的累計接種人次 data_brand
#把疫苗廠牌為ALL的去掉
data_brand = data[data.疫苗廠牌 != 'ALL']
print(f'{len(data_brand):.0f} 筆資料,{(tEnd - tStart):.2f}秒')
data_brand.head()
將統計日期為2021-12-10的資料單獨叫出來
data_date = data_brand.groupby('統計日期')
date_1210 = data_date.get_group("2021-12-10")
date_1210.head()
2. 資料視覺化
2-1. 截止2021/12/10台灣各類疫苗廠牌總施打累積比例
fig = px.pie(date_1210,names='疫苗廠牌',values='總共累計接種人次',title='2021/12/10台灣各類疫苗廠牌總施打累積比例')
fig.show()
data_sort = date_1210.sort_values(by=['總共累計接種人次'],ascending=False).head(5)
fig = px.bar(data_sort, y='總共累計接種人次', x='疫苗廠牌', text='總共累計接種人次', title='2021/12/10台灣各類疫苗廠牌總施打累積比例')
fig.update_traces(texttemplate='%{text:.2s}', textposition='outside')
fig.update_layout(uniformtext_minsize=10, uniformtext_mode='hide')
fig.show()
2-2. 截止2021-12-10臺灣針對各疫苗廠牌接種的人數對比
import plotly.graph_objects as go
brands = date_1210['疫苗廠牌']
fig = go.Figure(data=[
go.Bar(name='第一劑累計接種人次', x=brands , y=date_1210['第一劑累計接種人次'],text=date_1210['第一劑累計接種人次']),
go.Bar(name='第二劑累計接種人次', x=brands , y=date_1210['第二劑累計接種人次'],text=date_1210['第二劑累計接種人次']),
# go.Bar(name='第三劑累計接種人次', x=brands , y=date_1210['第三劑累計接種人次']),
])
# Change the bar mode
fig.update_layout(barmode='group')
# 在圖表上顯現數字
fig.update_traces(texttemplate='%{text:.2s}', textposition='outside')
fig.update_layout(uniformtext_minsize=10, uniformtext_mode='hide')
fig.show()
2-3. 總共累計施打人數隨時間的變化
fig = px.line(data_ALL,x = '統計日期',y=data_ALL.columns[3:7],title='總共累計施打人數隨時間的變化')
fig.show()
2-4. 不同疫苗廠牌隨時間變化的總接種人次
fig = px.line(data_brand,x = '統計日期',y='總共累計接種人次',color='疫苗廠牌',title='不同疫苗廠牌隨時間變化的總接種人次')
fig.show()