全國多地病例0新增,教你用Python畫出當下最火的疫情直觀圖
- 2020 年 3 月 17 日
- 筆記

【導語】:今天我們教你用Python畫出當下最火的疫情直觀圖,Python技術部分可以直接看第四部分。
近日,新冠肺炎防控成果的好消息不斷。
Show me data,用數據說話
今天我們聊聊 驚艷的疫情直觀圖
點擊下方影片,先睹為快:https://v.qq.com/x/page/i0933k361gl.html
據國家衛健委數據統計, 截止至3月10日24時,31省區市累計治癒出院病歷超6萬,達到61475例。

3月10日,隨著江夏方艙醫院和武昌方艙醫院「休艙大吉」,武漢14家方艙醫院全部休艙。

截止到3月12日24時,全國13地連續16天及以上無新增新冠肺炎確診病例。
看來春天真的是來了,疫情好轉的勢頭已經愈發明顯。想必許多小夥伴也一樣,越來越期待摘下口罩的那天,出門玩耍,出遊踏青,吃起火鍋唱起歌。
不過C君在這裡也要提醒大家,多地病歷0新增不代表零風險,一定要繃住,不要過早的鬆懈!繼續戴好口罩,做好個人防護,避免人群聚集,相信摘下口罩的那天也就不遠啦!
01
這道彩虹真贊!
疫情直觀圖火了
與此同時,最近刷遍微博的這個疫情直觀圖火了!來自央視新聞官微的這個圖一經發出就令人驚艷,彩虹的配色,直觀的展現出目前全國多地病例0新增的數據。

一時間#這道彩虹真贊#的話題在微博上閱讀達到2.6億,討論3.4萬。大家在欣喜疫情好轉的同時,都在問這個圖叫什麼呀?真太驚艷了。

微博上也出現了各種解答,有的說是餅圖,扇形圖,甚至還有的說是蝸牛圖,漩渦圖的…其實準確的來說,這個圖叫做南丁格爾玫瑰圖。
02
享譽全球的白衣天使
佛羅倫斯‧南丁格爾
南丁格爾玫瑰圖(Nightingale rose diagram)又名雞冠花圖、極坐標區域圖。統計學家和醫學改革家佛羅倫斯‧南丁格爾 (Florence Nightingale) 曾在克里米亞戰爭期間使用這種圖表傳達士兵身亡情況,故得名。
說起南丁格爾玫瑰圖,就不得不聊一聊它的發明者,世界上第一個真正的女護士——弗羅倫斯·南丁格爾。

弗羅倫斯·南丁格爾是著名的英國護士和統計學家,於1820年5月12日出生於義大利一個來自英國上流社會的家庭。南丁格爾在德國學習護理後,曾往倫敦的醫院工作。於1853年成為倫敦慈善醫院的護士長。
19世紀50年代,英國、法國、土耳其和俄國進行了克里米亞戰爭,當時英國戰士的死亡率高達42%。南丁格爾主動申請,她和38名女性志願者護士的工作人員,前往戰地醫院服務。
到達戰地醫院後,南丁格爾克服種種困難,改善醫院後勤服務和環境衛生,建立醫院管理制度,提高護理品質,使傷病員死亡率從42%,急劇下降到2%。同時南丁格爾不僅表現出非凡的組織才能,而且對傷病員的關懷愛護感人至深。因此她也被稱為被稱為「克里米亞的天使」;南丁格爾經常在黑夜中提燈巡視病房,又被譽為「提燈女士」(The Lady with the Lamp)。

由於南丁格爾的貢獻,讓昔日地位低微的護士,社會地位與形象都大為提高,成為崇高的象徵。「南丁格爾」也成為護士精神的代名詞。
03
數據可視化先驅
南丁格爾玫瑰圖
除了出色的醫護才能,南丁格爾也有很強的數學天分,這也讓她在之後成為視覺表現和統計圖形的先驅。
在克里米亞的戰地醫院工作時,她分析過堆積如山的軍事檔案,發現在克里米亞戰役中,英軍死亡的原因是在戰場外感染疾病,及在戰場上受傷後缺乏適當護理而傷重致死,真正死在戰場上的人反而不多。
由於當時資料統計的結果往往不受人重視,她發展出一種色彩繽紛的圖表形式——南丁格爾玫瑰圖,讓數據能夠更加讓人印象深刻。她用這個圖標來表達軍醫院季節性的死亡率,向不會閱讀統計報告的國會議員,報告克里米亞戰爭的醫療條件。

左下說明簡譯
- 各色塊圓餅區均由圓心往外的面積來表現數字
- 藍色區域:死於原本可避免的感染的士兵數
- 紅色區域:因受傷過重而死亡的士兵數
- 黑色區域:死於其它原因的士兵數
- 1854年10月、1855年4月的紅黑區域恰好相等
- 1856年1月與2月的藍、黑區域恰好相等
- 1854年11月紅色區域中的黑線指出該月的黑色區域大小
正是這種清晰易懂的數據展現形式,改變了當時包括維多利亞女王在內的高層人士的認知,導致他們做出醫事改革的決策。
普通柱形圖的坐標系是直角坐標系,而南丁格爾玫瑰圖的坐標系是極坐標系,使用圓弧的半徑長短表示數據的大小。比起一般的柱狀圖,它要更有衝擊性,是非常一目了然的統計圖。
用例
那南丁格爾玫瑰圖都有哪些用例呢?
除了對比不同分類的大小,如各國製造指數的對比:

圖源:https://antv-2018.alipay.com/zh-cn/vis/chart/rose.html
Facebook 和 Twitter的用戶對比:

圖源:http://thenextweb.com/socialmedia/2010/12/20/facebook-vs-twitter-by-the-numbers-infographic/
還可以用於表示披頭士歌曲的音調。

圖源:http://ritholtz.com/2012/02/the-beatles-song-keys/
還有最近火了的全國各地0新增彩虹圖。

04
教你用Python畫出
南丁格爾玫瑰圖
那麼你想知道,怎麼才能做出如此驚艷的南丁格爾玫瑰圖嗎?
常見的方法有用Excel,然而做起來過程繁瑣還還原度低。

要知道,萬物皆可Python。
除了用Excel,今天C君就來教教你,怎麼用Python做南丁格爾玫瑰圖,保證高還原度:
左圖是原圖,右圖是用pyechart做的。

具體步驟如下:
我們使用pyecharts包進行南丁格爾玫瑰圖的繪製,如果你沒有安裝pyecharts,可以使用以下程式碼進行pip安裝。
pip install pyecharts
南丁格爾玫瑰圖和餅圖類似,算是餅圖的一種變形,用法也一樣,主要用在需要查看佔比的場景中。
首先需要導入我們需要使用的包,其中pandas用於數據整理,pyecharts用於繪圖。
import pandas as pd from pyecharts.charts import Pie from pyecharts import options as opts
然後準備需要的數據,所用資訊來自於國家衛健委官方網站,整理之後的數據使用列表的形式進行存儲,其中provinces存儲省份名稱,num存儲確診病例連續多日零新增的數字,color_series列表存儲顏色用於後續的繪圖使用。
provinces = ['北京','上海','黑龍江','吉林','遼寧','內蒙古','新疆','西藏','青海','四川','雲南','陝西','重慶', '貴州','廣西','海南','澳門','湖南','江西','福建','安徽','浙江','江蘇','寧夏','山西','河北','天津'] num = [1,1,1,17,9,22,23,42,35,7,20,21,16,24,16,21,37,12,13,14,13,7,22,8,16,13,13] color_series = ['#FAE927','#E9E416','#C9DA36','#9ECB3C','#6DBC49', '#37B44E','#3DBA78','#14ADCF','#209AC9','#1E91CA', '#2C6BA0','#2B55A1','#2D3D8E','#44388E','#6A368B' '#7D3990','#A63F98','#C31C88','#D52178','#D5225B', '#D02C2A','#D44C2D','#F57A34','#FA8F2F','#D99D21', '#CF7B25','#CF7B25','#CF7B25']
接下來使用pandas對數據進行降序排列以方便後續的繪圖,並提取數據。
# 創建數據框 df = pd.DataFrame({'provinces': provinces, 'num': num}) # 降序排序 df.sort_values(by='num', ascending=False, inplace=True) # 提取數據 v = df['provinces'].values.tolist() d = df['num'].values.tolist()
最後使用Pyecharts庫中的Pie類進行圖形的繪製,程式碼說明如下,其中的配置項可以在pyecharts官網 https://pyecharts.org
進行查看。圖形生成在本地的html網頁中。
# 實例化Pie類 pie1 = Pie(init_opts=opts.InitOpts(width='1350px', height='750px')) # 設置顏色 pie1.set_colors(color_series) # 添加數據,設置餅圖的半徑,是否展示成南丁格爾圖 pie1.add("", [list(z) for z in zip(v, d)], radius=["30%", "135%"], center=["50%", "65%"], rosetype="area" ) # 設置全局配置項 pie1.set_global_opts(title_opts=opts.TitleOpts(title='玫瑰圖示例'), legend_opts=opts.LegendOpts(is_show=False), toolbox_opts=opts.ToolboxOpts()) # 設置系列配置項 pie1.set_series_opts(label_opts=opts.LabelOpts(is_show=True, position="inside", font_size=12, formatter="{b}:{c}天", font_style="italic", font_weight="bold", font_family="Microsoft YaHei" ), ) # 生成html文檔 pie1.render('南丁格爾玫瑰圖.html')
生成的圖如下:

最後,再自己加一下中間的字就大功告成,對比一下原圖,是不是還原度很高呢?

結語:
怎麼樣,用Python作玫瑰圖你學會了嗎?
最後C君還是要提醒大家一下,雖然目前疫情轉好,但大家一定不能掉以輕心!堅持做好防護哦,奧利給!
參考資料:
弗洛倫斯·南丁格爾 | 維基百科介紹
https://zh.wikipedia.org/wiki/%E5%BC%97%E7%BE%85%E5%80%AB%E6%96%AF%C2%B7%E5%8D%97%E4%B8%81%E6%A0%BC%E7%88%BE
南丁格爾玫瑰圖——為敬畏生命而生
https://mp.weixin.qq.com/s/UJhgZ0YXyrcvw9m0nyrVGQ
非常驚艷的南丁格爾玫瑰圖
https://mp.weixin.qq.com/s/AswdxDN6-mk0NYzsvqAPRw
https://understandinguncertainty.org/coxcombs
作者:Mika
數據:真達 後期:澤龍
設計:一凡
本文由CDA數據分析師(ID: cdacdacda)出品