疫情数据可视化讨论,作为数据分析师的我真是太“南”了!(附代码)
關于可視化選擇的討論?
1.前言
近日,有朋友在群里拋出了一個話題【關于丁香園、騰訊和百度畫的國內疫情趨勢圖,哪個更好?】。居士萬萬沒想到這個話題能引起如此大量的討論,以至于幾個數據分析的交流群里面都討論炸鍋了。居士關于該話題的朋友圈,下面也有幾十條評論,此話題的威力,恐怖如斯!
正如居士在群里所說:“你來討論幾句這個話題,居士還一篇千字以上的文章給你~“,因此,居士將會對該話題進行一定的總結和分析,并給出居士的個人建議。
同時,為了讓大家感受最原汁原味的討論內容,居士會從這么多觀點中抽出6個觀點,展示給大家,每個觀點居士都留言評論了。
2.騰訊、丁香園?vs 百度
關于騰訊和百度畫的國內疫情趨勢圖哪個更好,居士通過對比兩個圖,加上這次討論,統一整理了一下。
主要從三個視角來討論,分別從用戶視角、數據分析視角以及業務視角進行分析。
以下是丁香園、騰訊的國內疫情趨勢圖,采用直接畫圖法,即數據未經過處理,直接畫成折線圖。
騰訊畫圖.png用戶視角:該方法直接展示真實數據的分布趨勢,便于用戶直觀了解真實情況。
數據分析視角:由于存在一個離散點,使得折線圖其他部分的視覺上波動不明顯,不易于發現數據規律。但是由于面向對象是普通大眾,這種展示方式比較符合大眾思路,而且由于是疫情信息,每多做一種變換處理,都有可能帶了不確定的政策風險,這種思路比較穩妥。
業務視角:雖然離散點對其他數據的影響較大,但是該方法展示真實數據的分布趨勢,比較推薦。
以下是百度的國內疫情趨勢圖,采用不等距畫圖法,即數據經過映射處理,再畫成折線圖。
百度畫圖.png用戶視角:該畫圖方法通過改變原始數據,不易于用戶直觀了解數據之間的差異和真實的情況。
數據分析視角:該方法可消除離散點對其他數據的影響,容易看出數據趨勢的規律。
業務視角:該方法雖然改變部分數據的映射,從用戶角度看,存在一定視覺欺騙性,但是易于大眾發現國內疫情趨勢的變化規律,好處和缺點都比較明顯。
3.有沒有更好的可視化方法?
首先,居士想說明的是,這里沒有絕對好的可視化方法,只有適合數據的可視化方法。
接著分享其他三種展示國內疫情趨勢的可視化方法。
3.1 取對數畫圖法
顧明思議,該方法便是將原始的數據取對數,再進行可視化。
以下代碼是將數據取對數。
#將數據取對數 def data_to_log(data):a=[]for i in data:if i>0:a.append(log(i))else:a.append(i)return a接著將數據進行可視化。
f=plt.figure(figsize=[20,12]) ax=f.subplots(1,1) a=[log(i) for i in day_add_pd['everyday_addconfirm']] b=[log(i) for i in day_add_pd['everyday_addsuspect']] c=data_to_log(day_add_pd['everyday_adddead']) d=data_to_log(day_add_pd['everyday_addheal']) ax.plot(day_add_pd['date_addlist'],a,color='#E54646',marker='o', linestyle='solid',label='新增確診') ax.plot(day_add_pd['date_addlist'],b,color='#F1AF00',marker='o', linestyle='solid',label='新增疑似') ax.plot(day_add_pd['date_addlist'],c,color='#707070',marker='o', linestyle='solid',label='新增死亡') ax.plot(day_add_pd['date_addlist'],d,color='#00B2BF',marker='o', linestyle='solid',label='新增治愈') plt.xticks(day_add_pd['date_addlist'], rotation=45,fontsize=12) # 刻度值 plt.legend(fontsize=20) plt.yticks(fontsize=20)圖表展示。
取對數法.png用戶視角:該畫圖方法將數值數據取對數,不易于用戶直觀了解數據之間的分布和真實情況。
數據分析視角:該方法可消除離散點對其他數據的影響,易于發現數據的規律。
業務視角: 雖然可通過該方法發現數據規律,但是原始數據被改變,普遍大眾很難將對數進行轉化,使得大眾不了解真實的數據值,該方法不推薦使用。
3.2 滑動時間軸法
簡單來說,使用該方法繪制圖形,用戶可通過選擇相應的時間進行可視化。
以下是可視化代碼。
import pyecharts.options as opts from pyecharts.charts import Line def line_smooth(data) -> Line:c = (Line().add_xaxis(["2020/{}/{}".format(int(data['date_addlist'][i][0:2]),int(data['date_addlist'][i][3:5])) for i in range(len(data['date_addlist']))]).add_yaxis("新增確診", data['everyday_addconfirm'], is_smooth=True,itemstyle_opts=opts.ItemStyleOpts(color="#E54646"),markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max")]),).add_yaxis("新增疑似", data['everyday_addsuspect'], is_smooth=True,itemstyle_opts=opts.ItemStyleOpts(color="#F1AF00"),markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max")]),).add_yaxis("新增死亡", data['everyday_adddead'], is_smooth=True,itemstyle_opts=opts.ItemStyleOpts(color="#707070"),markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max")]),).add_yaxis("新增治愈", data['everyday_addheal'], is_smooth=True,itemstyle_opts=opts.ItemStyleOpts(color="#00B2BF"),markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max")]),).set_global_opts(title_opts=opts.TitleOpts(title="Line-smooth")).set_global_opts(datazoom_opts=[opts.DataZoomOpts()]).set_series_opts(label_opts=opts.LabelOpts(is_show=False),linestyle_opts=opts.LineStyleOpts(width = 2,type_='solid'),))return c line_smooth(day_add_pd).render()圖表展示。
滑動時間軸.png用戶視角:通過時間的選擇,觀看局部的數據,研究局部數據的規律;選擇全部數據,觀看整體數據的分布趨勢。
數據分析視角:通過截取部分時間,可消除離散點對局部數據變化趨勢的影響,易于發現局部數據的規律
業務視角: ?即可直接展示真實數據的分布趨勢,又可通過選取局部數據來觀察局部數據的規律,比較推薦。不過由于需要交互插件,報告中就不好使用了
3.3 截斷離散點畫圖法
直白的說,該方法便是將離散點從原始數據拿出,再分別進行畫圖。
以下是可視化代碼。
p=plt.figure(figsize=[20,14]) ax1= p.add_subplot(212) # 繪制兩個子圖 plt.subplots_adjust(wspace=0,hspace=0.1) # 設置子圖間距 plt.plot(day_add_pd['date_addlist'],day_add_pd['everyday_addconfirm'],color='#E54646',marker='o', linestyle='solid',label='新增確診') plt.plot(day_add_pd['date_addlist'],day_add_pd['everyday_addsuspect'], color='#F1AF00', marker='o',label='新增疑似') # 繪制折線 plt.plot(day_add_pd['date_addlist'],day_add_pd['everyday_adddead'],color='#707070',marker='o', linestyle='solid',label='新增死亡') plt.plot(day_add_pd['date_addlist'],day_add_pd['everyday_addheal'],color='#00B2BF',marker='o', linestyle='solid',label='新增治愈') plt.xticks(rotation=45,fontsize=12) # 刻度值 plt.yticks(fontsize=20)ax= p.add_subplot(211) # 繪制兩個子圖 ax.xaxis.set_major_locator(plt.NullLocator()) # 刪除坐標軸的刻度顯示 plt.plot(day_add_pd['date_addlist'],day_add_pd['everyday_addsuspect'], color='#F1AF00', marker='o',label='新增疑似') # 繪制折線 plt.plot(day_add_pd['date_addlist'],day_add_pd['everyday_adddead'],color='#707070',marker='o', linestyle='solid',label='新增死亡') plt.plot(day_add_pd['date_addlist'],day_add_pd['everyday_addheal'],color='#00B2BF',marker='o', linestyle='solid',label='新增治愈') plt.plot(day_add_pd['date_addlist'],day_add_pd['everyday_addconfirm'],color='#E54646',marker='o', linestyle='solid',label='新增確診') plt.xticks(rotation=45,fontsize=12) # 刻度值 plt.yticks(fontsize=20) ax.set_ylim(6000, 20000) # 設置縱坐標范圍 ax1.set_ylim(0, 6000) # 設置縱坐標范圍ax.grid(axis='both',linestyle='-.') # 打開網格線 ax1.grid(axis='y',linestyle='-.') # 打開網格線ax.legend(fontsize=20) # 讓圖例生效 #plt.xlabel("日期") #X軸標簽 #plt.ylabel("疫情數據") #Y軸標簽ax1.spines['top'].set_visible(False) # 邊框控制 ax1.spines['bottom'].set_visible(True) # 邊框控制 ax1.spines['right'].set_visible(False) # 邊框控制ax.spines['top'].set_visible(False) # 邊框控制 ax.spines['bottom'].set_visible(False) # 邊框控制 ax.spines['right'].set_visible(False) # 邊框控制ax1.tick_params(labeltop='off')# 繪制斷層線 d = 0.02 # 斷層線的大小 kwargs = dict(transform=ax.transAxes, color='k', clip_on=False) ax.plot((-d, +d), (-d, +d), **kwargs) # top-left diagonalkwargs.update(transform=ax1.transAxes, color='k') # switch to the bottom ax1es ax1.plot((-d, +d), (1 - d, 1 + d), **kwargs) # bottom-left diagonalplt.show()圖表展示。
截斷畫圖法.png用戶視角:該圖將離散點單獨繪制,依然能直觀地了解真實數據和數據的分布趨勢。
數據分析視角:通過將離散點截出,可消除離散點對整體數據規律的影響,便于挖掘數據規律。
業務視角: 該方法即讓大眾了解原始數據,又易于挖掘數據的規律,推薦。不過從習慣上與平時略有差異。
4.大家的觀點
大家的觀點很多,從這里列出6點,居士也都做了評論,歡迎留言認領~
觀點1
不太建議取對數畫圖,感覺會麻痹一些人的認識。
很認同該觀點,取對數畫圖,將數據大大改變了。
觀點2
默認展示過去7天的然后時間可調整,或者坐標軸做成可調整的。
該觀點類似于滑動時間軸法。
觀點3
圖是要直觀展示數據的,我覺得大多數人還是習慣于圖里的刻度是均勻的,這樣曲線的形狀才有確定的數值高低的含義。
該觀點與騰訊的作圖思路不謀而合啊。
觀點4
說實話,該國內疫情趨勢圖很好體現數據分析師的難處。這個圖,數據分析從業角度,很多人有各種意見,很難讓人心服口服。而且即使有一個人有天才的思路解決了,我覺得普通人或者boss,也不會覺得有多厲害。
很贊成該觀點,確實是沒有最正確的可視化方法,只有合適數據的可視化方法。
觀點5
圖形可視化是為了告訴大家某個事實。但如果你用的可視化表現形式不是大家能理解的,最后也肯定不能達到讓大家知道這個事實的效果。
對的,可視化就是為了讓大家更方便的了解數據的真實情況和分布趨勢。
觀點6
關于指標體系的標準,用戶的信息獲取效率必須作為最核心的標準,進而細化為指標管理規范、開發規范、可視化標準等等,單純追求全面、圖表炫酷壓根不是企業實踐的需要!
同意,用戶的信息獲取效率確實是可視化最終目標。不過這句話就是老生常談了,大家都想做,但是都知道不容易。
最后如果你覺得內容還不錯,歡迎安利給你的各個小伙伴~
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習在線手冊深度學習在線手冊AI基礎下載(pdf更新到25集)本站qq群1003271085,加入微信群請回復“加群”獲取一折本站知識星球優惠券,請回復“知識星球”喜歡文章,點個在看 與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的疫情数据可视化讨论,作为数据分析师的我真是太“南”了!(附代码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据可视化实战,画个新冠肺炎地图
- 下一篇: 注册不到两年半Github标星39k+,