首頁 > 軟體

Python疫情資料視覺化分析

2022-07-11 22:00:58

前言

本專案主要通過python的matplotlib pandas pyecharts等庫對疫情資料進行視覺化分析

資料來源:

  • 本資料集來源於kaggle競賽的開源資料集,資料集地址
  • 本資料集主要涉及到全球疫情統計,包括確診、治癒、死亡、時間、國家、地區等資訊

功能函數

讀取檔案

df = pd.read_csv(r'C:UsersHaseeDesktop/covid_19_data.csv')
df.head()

更換列名,便於檢視

cols= ['序號','日期','省/州','國家','最近更新','確診','死亡','治癒']
df.columns = cols
df.日期 = pd.to_datetime(df.日期)
df

## 利用groupby按照日期統計確診死亡治癒病例的總和

#合併同一天同國家日期
global_confirm = df.groupby('日期')[['確診', '死亡', '治癒']].sum()
global_confirm

全球疫情趨勢

ax = global_confirm.plot(figsize = (12,10), title = '全球疫情趨勢圖')

篩選出中國的資料

利用groupby按照日期統計確診死亡治癒病例的總和

global_china = df[df['國家'] == 'Mainland China'].reset_index()
global_china_confirm  =  global_china.groupby('日期')[['確診', '死亡', '治癒']].sum().reset_index()

畫圖,三條線組合到一個圖

利用groupby按照省統計確診死亡治癒病例的總和

global_china = df[df['國家'] == 'Mainland China'].reset_index()
global_china_province_confirm  =  global_china.groupby('省/州')[['確診', '死亡', '治癒']].sum().reset_index()

recovercent = 100.*global_china_province_confirm['治癒'] / global_china_province_confirm['治癒'].sum()
labels = ['{0}-{1:1.2f}%-{2}'.format(i,j,k) for i,j,k in zip(list(global_china_province_confirm['省/州']), recovercent, list(global_china_province_confirm['治癒']))]
plt.figure(figsize=(10,10))
plt.pie(global_china_province_confirm['治癒'],radius = 0.3)

確診人數排名前15的國家

plt.figure(figsize=(16,16))
plt.barh(list(global_country_confirm_rank.國家)[::-1], list(global_country_confirm_rank.確診)[::-1])
plt.title('確診人數排名前15的國家')
plt.xlabel('人數(千萬)')
plt.ylabel('國家')

這裡用pyecharts庫畫圖,繪製的玫瑰圖,rosetype

set_global_opts是設定格式:

中國確診人數前十的省

china_confirm = df[df['國家'] == "Mainland China"]
china_latest = china_confirm[china_confirm['日期'] == max(china_confirm['日期'])]

words = WordCloud()
words.add('確診人數', [tuple(dic) for dic in zip(list(china_latest['省/州']),list(china_latest['確診']))], word_size_range=[20,100])

區域圖

china_death = df[df['國家'] == "Mainland China"]
china_death_latest = china_death[china_death['日期'] == max(china_death['日期'])]
china_death_latest = china_death_latest.groupby('省/州')[['確診', '死亡']].max().reset_index()

geo = Map()

geo.add("中國死亡病例分佈", [list(z) for z in zip(china_death_prodic,list(china_death_latest['死亡']))], "china")
geo.set_global_opts(title_opts=opts.TitleOpts(title="全國各省死亡病例資料分佈"),visualmap_opts=opts.VisualMapOpts(is_piecewise=True,
                    pieces=[
                    {"min": 1500, "label": '>10000人', "color": "#6F171F"}, 
                    {"min": 500, "max": 15000, "label": '500-1000人', "color": "#C92C34"},
                    {"min": 100, "max": 499, "label": '100-499人', "color": "#E35B52"},
                    {"min": 10, "max": 99, "label": '10-99人', "color": "#F39E86"},
                    {"min": 1, "max": 9, "label": '1-9人', "color": "#FDEBD0"}]))
geo.render_notebook()

熱力圖

geo = Geo()
geo.add_schema(maptype="china")

geo.add("中國死亡病例分佈", [list(dic) for dic in zip(china_death_prodic,list(china_death_latest['死亡']))],type_=GeoType.EFFECT_SCATTER)
geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(),title_opts=opts.TitleOpts(title="全國各省死亡病例資料分佈"))
geo.render_notebook()

全球死亡人數地理分佈情況

map = Map()
map.set_global_opts(title_opts=opts.TitleOpts(title="全球死亡人數地理分佈情況"),visualmap_opts=opts.VisualMapOpts(is_piecewise=True,
                    pieces=[
                    {"min": 100001, "label": '>100001人', "color": "#6F171F"}, 
                    {"min": 10001, "max": 100000, "label": '10001-100000人', "color": "#C92C34"},
                    {"min": 1001, "max": 10000, "label": '1001-10000人', "color": "#E35B52"},
                    {"min": 101, "max": 10000, "label": '101-10000人', "color": "#F39E86"},
                    {"min": 1, "max": 100, "label": '1-100人', "color": "#FDEBD0"}]))
map.add("全球死亡人數地理分佈情況", [list(z) for z in zip(global_death_n,list(global_death['死亡']))], "world")
map.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
map.render_notebook()

全球疫情頻率直方圖

global_confirm.plot.hist(alpha=0.5)
plt.xlabel('人數(千萬)')
plt.ylabel('出現頻率')
plt.title('全球疫情頻率直方圖')

其他圖

陝西確診病例餅圖

陝西省確診病例資料分佈

中國治癒病例玫瑰圖

到此這篇關於Python疫情資料視覺化分析的文章就介紹到這了,更多相關Python視覺化內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com