手把手教你完成一個資料科學小專案(4):評論數變化情況

古柳_Deserts_X發表於2018-08-17

前言

本系列將全面涉及本專案從爬蟲、資料提取與準備、資料異常發現與清洗、分析與視覺化等細節,並將程式碼統一開源在GitHub:DesertsX/gulius-projects ,感興趣的朋友可以先行 star 哈。

請先閱讀“中國年輕人正帶領國家走向危機”,這鍋背是不背? 一文,以對“手把手教你完成一個資料科學小專案”系列有個全域性性的瞭解。

《踏莎行》

我知道好幾個朋友按照前幾篇文章的內容已經開始執行程式碼了,也知道一些人遇到了我碰到的 BUG,雖然更鼓勵自行根據報錯資訊網上搜尋解決方案,但也不介意加 Python
交友娛樂會所群(QQ群:613176398,娛樂會所沒有嫩模)來詢問,力所能及處也會幫忙新手小白看看為何出錯,可愛友善的群友也同樣會幫忙的。

而如果你正被 BUG 折騰的“心力交瘁”,這裡送上一首葉嘉瑩先生的《踏莎行》,希望你能元氣滿滿哈。(如何評價葉嘉瑩? - Deserts X

—世多艱,寸心如水。也曾局囿深杯裡。炎天流火劫燒餘,藐姑初識真仙子。
谷內青松,蒼然若此。歷盡冰霜偏未死。一朝鯤化欲鵬飛,天風吹動狂波起。

評論數變化情況

資料讀取

但不管什麼說,截至目前已經完成了資料爬取資料提取與IP查詢資料異常與清洗,拿到手的資料終於可以用來分析和視覺化了,也是件值得欣慰的事。

那麼,閒言少敘,先來看看評論數隨時間的變化情況吧,雖然上一篇文章:資料異常與清洗裡涉及過,但由於側重點在資料異常,所以未做展開,現在重新擴充套件下。

import pandas as pd
df = pd.read_csv('Sina_Finance_Comments_All_20180811_Cleaned.csv',encoding='utf-8')
df.head()
複製程式碼

請無視前面幾列多出來的:

先來看看評論數隨時間戳變化情況:

import matplotlib.pyplot as plt
%matplotlib inline
plt.plot(df.stamp, df.cmntcount);
複製程式碼

時間戳不太好識別,所以還是用常規的日期,並使用 pyechartspyecharts 配置文件 )繪製每日評論數的變化折線圖:

df_ymdcount = df.groupby('time_ymd')['cmntcount'].count()
from pyecharts import Line
line = Line("每日評論數變化情況")
line.add("日期", df_ymdcount.index, df_ymdcount.values,line_type='dotted')
line
複製程式碼

按天來看,這篇文章的大部分評論都是產生於在8月8號,即2008年北京奧運會十週年的當日,當然可能並不相關。

df_mdhcount = df.groupby('time_mdh')['cmntcount'].count()
from pyecharts import Line
line = Line("每小時評論數")
line.add("小時", df_mdhcount.index, df_mdhcount.values,line_opacity=1,line_type='dotted')
line
複製程式碼

細分到每個小時上,評論的峰值發生在8號的9點,高達658條,數值大小在本文的圖裡看不出來,但 jupyter notebook 程式碼裡的 pyecharts 圖表都是互動式的,每個點的數值和時間均可檢視。需注意的是需要執行過過程式碼才能看到,Github上點開是空白的。

然後是看起來更為立體的每小時評論數柱形圖:

from pyecharts import Bar
bar = Bar("每小時評論數")
bar.add("小時", df_mdhcount.index, df_mdhcount.values,is_label_show=True,xaxis_interval=0,xaxis_rotate=-90)
bar
複製程式碼

該新浪財經這篇《中國年輕人正帶領國家走向危機》文章,有著極其“聳人聽聞”的標題,但同樣逃不過“速朽”的命運,在一兩天內就趨於平淡了。

組合圖 overlap

評論數隨時間的變化情況大概就是這樣了,其實沒太多可說的,如果把後面提取地理位置(area 列)中的省份和城市資料,並呼叫百度地圖API拿到所有位置的經緯度,並用BDP繪製動態熱力圖的實現過程先在這裡一起講的話,可能更有的可說,不過內容所限還是後續再講哈。感興趣的朋友可以按照這裡的思路自行嘗試繪製出下面的動態圖哈。

4-heat-map-BDP-2h-8FPS.gif
4-heat-map-BDP-2h-8FPS.gif

仍值得一說的是在作圖和視覺化的過程中,對評論數相關圖表還是不滿意,於是想把每小時評論數的柱形圖和總評論數變化的曲線圖組合到一起,就像當初爬取張佳瑋138w+知乎關注者:資料視覺化完成專案時,在完全不懂 ECharts3裡的程式碼和配置項的情況下,硬著頭皮坑 JavaScript 程式碼,搞了個知乎第一大V“張公子”張佳瑋的138萬關注中自身有100+關注的人群的性別人數和比例圖,今日看來,依舊兼具美感和創意,不像別處看到的視覺化圖一般“醜陋”(逃…);

也在簡書=雞湯?爬取簡書今日看點:1916篇熱門文章視覺化專案裡繪製了簡書熱門文章釋出時間的年月分佈圖,審美槓槓的(逃…):

當然這裡不必像上述二者那樣需要去啃 ECharts3 的 JavaScript 程式碼(相關實現:圖表太醜怎麼破,ECharts神器帶你飛!),直接在 pyecharts 配置文件 裡有組合圖多種示例,輕鬆實現下圖:

df_mdhmax = df.groupby('time_mdh')['cmntcount'].max()
df_mdhcount = df.groupby('time_mdh')['cmntcount'].count()
from pyecharts import Bar, Line, Overlap
bar = Bar("每小時評論數")
bar.add("小時", df_mdhcount.index, df_mdhcount.values,is_label_show=True,xaxis_interval=-90,
        xaxis_rotate=-90, yaxis_interval=200,yaxis_max=800)
line = Line("每小時評論數")
line.add("小時", df_mdhmax.index, df_mdhmax.values,line_opacity=1,
         line_type='dotted', yaxis_interval=1000,yaxis_max=4000)

overlap = Overlap()
overlap.add(bar)
overlap.add(line, is_add_yaxis=True, yaxis_index=1)
#overlap.render() # 使用 render() 渲染生成 .html 檔案
overlap
複製程式碼

便捷的代價就是配色上沒有太多選擇的餘地:

小結

pyecharts( 圖表詳情) 提供的圖表選擇還是蠻多的,大家可以自行選擇想呈現的效果。後面地圖視覺化也會用到。而且,用起來很簡單的,套用示例,改成自己的資料就行。

本系列將全面涉及本專案從爬蟲、資料提取與準備、資料異常發現與清洗、分析與視覺化等細節,並將程式碼統一開源在GitHub:DesertsX/gulius-projects ,感興趣的朋友可以先行 star 哈。

本系列文章:
“中國年輕人正帶領國家走向危機”,這鍋背是不背?
手把手教你完成一個資料科學小專案(1):資料爬取
手把手教你完成一個資料科學小專案(2):資料提取、IP 查詢
手把手教你完成一個資料科學小專案(3):資料異常與清洗


相關文章