疫情数据可视化讨论,作为数据分析师的我真是太“南”了!(附代码)
關(guān)于可視化選擇的討論?
1.前言
近日,有朋友在群里拋出了一個話題【關(guān)于丁香園、騰訊和百度畫的國內(nèi)疫情趨勢圖,哪個更好?】。居士萬萬沒想到這個話題能引起如此大量的討論,以至于幾個數(shù)據(jù)分析的交流群里面都討論炸鍋了。居士關(guān)于該話題的朋友圈,下面也有幾十條評論,此話題的威力,恐怖如斯!
正如居士在群里所說:“你來討論幾句這個話題,居士還一篇千字以上的文章給你~“,因此,居士將會對該話題進(jìn)行一定的總結(jié)和分析,并給出居士的個人建議。
同時,為了讓大家感受最原汁原味的討論內(nèi)容,居士會從這么多觀點中抽出6個觀點,展示給大家,每個觀點居士都留言評論了。
2.騰訊、丁香園?vs 百度
關(guān)于騰訊和百度畫的國內(nèi)疫情趨勢圖哪個更好,居士通過對比兩個圖,加上這次討論,統(tǒng)一整理了一下。
主要從三個視角來討論,分別從用戶視角、數(shù)據(jù)分析視角以及業(yè)務(wù)視角進(jìn)行分析。
以下是丁香園、騰訊的國內(nèi)疫情趨勢圖,采用直接畫圖法,即數(shù)據(jù)未經(jīng)過處理,直接畫成折線圖。
騰訊畫圖.png用戶視角:該方法直接展示真實數(shù)據(jù)的分布趨勢,便于用戶直觀了解真實情況。
數(shù)據(jù)分析視角:由于存在一個離散點,使得折線圖其他部分的視覺上波動不明顯,不易于發(fā)現(xiàn)數(shù)據(jù)規(guī)律。但是由于面向?qū)ο笫瞧胀ù蟊?#xff0c;這種展示方式比較符合大眾思路,而且由于是疫情信息,每多做一種變換處理,都有可能帶了不確定的政策風(fēng)險,這種思路比較穩(wěn)妥。
業(yè)務(wù)視角:雖然離散點對其他數(shù)據(jù)的影響較大,但是該方法展示真實數(shù)據(jù)的分布趨勢,比較推薦。
以下是百度的國內(nèi)疫情趨勢圖,采用不等距畫圖法,即數(shù)據(jù)經(jīng)過映射處理,再畫成折線圖。
百度畫圖.png用戶視角:該畫圖方法通過改變原始數(shù)據(jù),不易于用戶直觀了解數(shù)據(jù)之間的差異和真實的情況。
數(shù)據(jù)分析視角:該方法可消除離散點對其他數(shù)據(jù)的影響,容易看出數(shù)據(jù)趨勢的規(guī)律。
業(yè)務(wù)視角:該方法雖然改變部分?jǐn)?shù)據(jù)的映射,從用戶角度看,存在一定視覺欺騙性,但是易于大眾發(fā)現(xiàn)國內(nèi)疫情趨勢的變化規(guī)律,好處和缺點都比較明顯。
3.有沒有更好的可視化方法?
首先,居士想說明的是,這里沒有絕對好的可視化方法,只有適合數(shù)據(jù)的可視化方法。
接著分享其他三種展示國內(nèi)疫情趨勢的可視化方法。
3.1 取對數(shù)畫圖法
顧明思議,該方法便是將原始的數(shù)據(jù)取對數(shù),再進(jìn)行可視化。
以下代碼是將數(shù)據(jù)取對數(shù)。
#將數(shù)據(jù)取對數(shù) def data_to_log(data):a=[]for i in data:if i>0:a.append(log(i))else:a.append(i)return a接著將數(shù)據(jù)進(jìn)行可視化。
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)圖表展示。
取對數(shù)法.png用戶視角:該畫圖方法將數(shù)值數(shù)據(jù)取對數(shù),不易于用戶直觀了解數(shù)據(jù)之間的分布和真實情況。
數(shù)據(jù)分析視角:該方法可消除離散點對其他數(shù)據(jù)的影響,易于發(fā)現(xiàn)數(shù)據(jù)的規(guī)律。
業(yè)務(wù)視角: 雖然可通過該方法發(fā)現(xiàn)數(shù)據(jù)規(guī)律,但是原始數(shù)據(jù)被改變,普遍大眾很難將對數(shù)進(jìn)行轉(zhuǎn)化,使得大眾不了解真實的數(shù)據(jù)值,該方法不推薦使用。
3.2 滑動時間軸法
簡單來說,使用該方法繪制圖形,用戶可通過選擇相應(yīng)的時間進(jìn)行可視化。
以下是可視化代碼。
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用戶視角:通過時間的選擇,觀看局部的數(shù)據(jù),研究局部數(shù)據(jù)的規(guī)律;選擇全部數(shù)據(jù),觀看整體數(shù)據(jù)的分布趨勢。
數(shù)據(jù)分析視角:通過截取部分時間,可消除離散點對局部數(shù)據(jù)變化趨勢的影響,易于發(fā)現(xiàn)局部數(shù)據(jù)的規(guī)律
業(yè)務(wù)視角: ?即可直接展示真實數(shù)據(jù)的分布趨勢,又可通過選取局部數(shù)據(jù)來觀察局部數(shù)據(jù)的規(guī)律,比較推薦。不過由于需要交互插件,報告中就不好使用了
3.3 截斷離散點畫圖法
直白的說,該方法便是將離散點從原始數(shù)據(jù)拿出,再分別進(jìn)行畫圖。
以下是可視化代碼。
p=plt.figure(figsize=[20,14]) ax1= p.add_subplot(212) # 繪制兩個子圖 plt.subplots_adjust(wspace=0,hspace=0.1) # 設(shè)置子圖間距 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()) # 刪除坐標(biāo)軸的刻度顯示 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) # 設(shè)置縱坐標(biāo)范圍 ax1.set_ylim(0, 6000) # 設(shè)置縱坐標(biāo)范圍ax.grid(axis='both',linestyle='-.') # 打開網(wǎng)格線 ax1.grid(axis='y',linestyle='-.') # 打開網(wǎng)格線ax.legend(fontsize=20) # 讓圖例生效 #plt.xlabel("日期") #X軸標(biāo)簽 #plt.ylabel("疫情數(shù)據(jù)") #Y軸標(biāo)簽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用戶視角:該圖將離散點單獨繪制,依然能直觀地了解真實數(shù)據(jù)和數(shù)據(jù)的分布趨勢。
數(shù)據(jù)分析視角:通過將離散點截出,可消除離散點對整體數(shù)據(jù)規(guī)律的影響,便于挖掘數(shù)據(jù)規(guī)律。
業(yè)務(wù)視角: 該方法即讓大眾了解原始數(shù)據(jù),又易于挖掘數(shù)據(jù)的規(guī)律,推薦。不過從習(xí)慣上與平時略有差異。
4.大家的觀點
大家的觀點很多,從這里列出6點,居士也都做了評論,歡迎留言認(rèn)領(lǐng)~
觀點1
不太建議取對數(shù)畫圖,感覺會麻痹一些人的認(rèn)識。
很認(rèn)同該觀點,取對數(shù)畫圖,將數(shù)據(jù)大大改變了。
觀點2
默認(rèn)展示過去7天的然后時間可調(diào)整,或者坐標(biāo)軸做成可調(diào)整的。
該觀點類似于滑動時間軸法。
觀點3
圖是要直觀展示數(shù)據(jù)的,我覺得大多數(shù)人還是習(xí)慣于圖里的刻度是均勻的,這樣曲線的形狀才有確定的數(shù)值高低的含義。
該觀點與騰訊的作圖思路不謀而合啊。
觀點4
說實話,該國內(nèi)疫情趨勢圖很好體現(xiàn)數(shù)據(jù)分析師的難處。這個圖,數(shù)據(jù)分析從業(yè)角度,很多人有各種意見,很難讓人心服口服。而且即使有一個人有天才的思路解決了,我覺得普通人或者boss,也不會覺得有多厲害。
很贊成該觀點,確實是沒有最正確的可視化方法,只有合適數(shù)據(jù)的可視化方法。
觀點5
圖形可視化是為了告訴大家某個事實。但如果你用的可視化表現(xiàn)形式不是大家能理解的,最后也肯定不能達(dá)到讓大家知道這個事實的效果。
對的,可視化就是為了讓大家更方便的了解數(shù)據(jù)的真實情況和分布趨勢。
觀點6
關(guān)于指標(biāo)體系的標(biāo)準(zhǔn),用戶的信息獲取效率必須作為最核心的標(biāo)準(zhǔn),進(jìn)而細(xì)化為指標(biāo)管理規(guī)范、開發(fā)規(guī)范、可視化標(biāo)準(zhǔn)等等,單純追求全面、圖表炫酷壓根不是企業(yè)實踐的需要!
同意,用戶的信息獲取效率確實是可視化最終目標(biāo)。不過這句話就是老生常談了,大家都想做,但是都知道不容易。
最后如果你覺得內(nèi)容還不錯,歡迎安利給你的各個小伙伴~
往期精彩回顧適合初學(xué)者入門人工智能的路線及資料下載機器學(xué)習(xí)在線手冊深度學(xué)習(xí)在線手冊AI基礎(chǔ)下載(pdf更新到25集)本站qq群1003271085,加入微信群請回復(fù)“加群”獲取一折本站知識星球優(yōu)惠券,請回復(fù)“知識星球”喜歡文章,點個在看 與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖
總結(jié)
以上是生活随笔為你收集整理的疫情数据可视化讨论,作为数据分析师的我真是太“南”了!(附代码)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据可视化实战,画个新冠肺炎地图
- 下一篇: 注册不到两年半Github标星39k+,