前言
本系列將全面涉及本項(xiàng)目從爬蟲(chóng)畔勤、數(shù)據(jù)提取與準(zhǔn)備、數(shù)據(jù)異常發(fā)現(xiàn)與清洗彤灶、分析與可視化等細(xì)節(jié),并將代碼統(tǒng)一開(kāi)源在GitHub:DesertsX/gulius-projects 倔监,感興趣的朋友可以先行 star 哈。
請(qǐng)先閱讀“中國(guó)年輕人正帶領(lǐng)國(guó)家走向危機(jī)”荡短,這鍋背是不背丐枉? 一文,以對(duì)“手把手教你完成一個(gè)數(shù)據(jù)科學(xué)小項(xiàng)目”系列有個(gè)全局性的了解掘托。
《踏莎行》
我知道好幾個(gè)朋友按照前幾篇文章的內(nèi)容已經(jīng)開(kāi)始運(yùn)行代碼了瘦锹,也知道一些人遇到了我碰到的 BUG,雖然更鼓勵(lì)自行根據(jù)報(bào)錯(cuò)信息網(wǎng)上搜索解決方案闪盔,但也不介意加 Python
交友娛樂(lè)會(huì)所群(QQ群:613176398弯院,娛樂(lè)會(huì)所沒(méi)有嫩模)來(lái)詢(xún)問(wèn),力所能及處也會(huì)幫忙新手小白看看為何出錯(cuò)泪掀,可愛(ài)友善的群友也同樣會(huì)幫忙的听绳。
而如果你正被 BUG 折騰的“心力交瘁”,這里送上一首葉嘉瑩先生的《踏莎行》异赫,希望你能元?dú)鉂M滿哈椅挣。(如何評(píng)價(jià)葉嘉瑩? - Deserts X)
—世多艱塔拳,寸心如水鼠证。也曾局囿深杯里。炎天流火劫燒余靠抑,藐姑初識(shí)真仙子量九。
谷內(nèi)青松,蒼然若此颂碧。歷盡冰霜偏未死荠列。一朝鯤化欲鵬飛,天風(fēng)吹動(dòng)狂波起载城。
評(píng)論數(shù)變化情況
數(shù)據(jù)讀取
但不管什么說(shuō)肌似,截至目前已經(jīng)完成了數(shù)據(jù)爬取、數(shù)據(jù)提取與IP查詢(xún)个曙、數(shù)據(jù)異常與清洗锈嫩,拿到手的數(shù)據(jù)終于可以用來(lái)分析和可視化了,也是件值得欣慰的事垦搬。
那么呼寸,閑言少敘,先來(lái)看看評(píng)論數(shù)隨時(shí)間的變化情況吧猴贰,雖然上一篇文章:數(shù)據(jù)異常與清洗里涉及過(guò)对雪,但由于側(cè)重點(diǎn)在數(shù)據(jù)異常,所以未做展開(kāi)米绕,現(xiàn)在重新擴(kuò)展下瑟捣。
import pandas as pd
df = pd.read_csv('Sina_Finance_Comments_All_20180811_Cleaned.csv',encoding='utf-8')
df.head()
請(qǐng)無(wú)視前面幾列多出來(lái)的:
先來(lái)看看評(píng)論數(shù)隨時(shí)間戳變化情況:
import matplotlib.pyplot as plt
%matplotlib inline
plt.plot(df.stamp, df.cmntcount);
時(shí)間戳不太好識(shí)別馋艺,所以還是用常規(guī)的日期,并使用
pyecharts
(pyecharts 配置文檔 )繪制每日評(píng)論數(shù)的變化折線圖:
df_ymdcount = df.groupby('time_ymd')['cmntcount'].count()
from pyecharts import Line
line = Line("每日評(píng)論數(shù)變化情況")
line.add("日期", df_ymdcount.index, df_ymdcount.values,line_type='dotted')
line
按天來(lái)看迈套,這篇文章的大部分評(píng)論都是產(chǎn)生于在8月8號(hào)捐祠,即2008年北京奧運(yùn)會(huì)十周年的當(dāng)日,當(dāng)然可能并不相關(guān)桑李。
df_mdhcount = df.groupby('time_mdh')['cmntcount'].count()
from pyecharts import Line
line = Line("每小時(shí)評(píng)論數(shù)")
line.add("小時(shí)", df_mdhcount.index, df_mdhcount.values,line_opacity=1,line_type='dotted')
line
細(xì)分到每個(gè)小時(shí)上踱蛀,評(píng)論的峰值發(fā)生在8號(hào)的9點(diǎn),高達(dá)658條贵白,數(shù)值大小在本文的圖里看不出來(lái)率拒,但 jupyter notebook 代碼里的 pyecharts 圖表都是交互式的,每個(gè)點(diǎn)的數(shù)值和時(shí)間均可查看禁荒。需注意的是需要運(yùn)行過(guò)過(guò)代碼才能看到猬膨,Github上點(diǎn)開(kāi)是空白的。
然后是看起來(lái)更為立體的每小時(shí)評(píng)論數(shù)柱形圖:
from pyecharts import Bar
bar = Bar("每小時(shí)評(píng)論數(shù)")
bar.add("小時(shí)", df_mdhcount.index, df_mdhcount.values,is_label_show=True,xaxis_interval=0,xaxis_rotate=-90)
bar
該新浪財(cái)經(jīng)這篇《中國(guó)年輕人正帶領(lǐng)國(guó)家走向危機(jī)》文章呛伴,有著極其“聳人聽(tīng)聞”的標(biāo)題勃痴,但同樣逃不過(guò)“速朽”的命運(yùn),在一兩天內(nèi)就趨于平淡了热康。
組合圖 overlap
評(píng)論數(shù)隨時(shí)間的變化情況大概就是這樣了召耘,其實(shí)沒(méi)太多可說(shuō)的,如果把后面提取地理位置(area 列)中的省份和城市數(shù)據(jù)褐隆,并調(diào)用百度地圖API拿到所有位置的經(jīng)緯度,并用BDP繪制動(dòng)態(tài)熱力圖的實(shí)現(xiàn)過(guò)程先在這里一起講的話剖踊,可能更有的可說(shuō)庶弃,不過(guò)內(nèi)容所限還是后續(xù)再講哈。感興趣的朋友可以按照這里的思路自行嘗試?yán)L制出下面的動(dòng)態(tài)圖哈德澈。
嘮嗑
仍值得一說(shuō)的是在作圖和可視化的過(guò)程中歇攻,對(duì)評(píng)論數(shù)相關(guān)圖表還是不滿意,于是想把每小時(shí)評(píng)論數(shù)的柱形圖和總評(píng)論數(shù)變化的曲線圖組合到一起梆造,就像當(dāng)初爬取張佳瑋138w+知乎關(guān)注者:數(shù)據(jù)可視化完成項(xiàng)目時(shí)缴守,在完全不懂 ECharts3里的代碼和配置項(xiàng)的情況下,硬著頭皮坑 JavaScript 代碼镇辉,搞了個(gè)知乎第一大V“張公子”張佳瑋的138萬(wàn)關(guān)注中自身有100+關(guān)注的人群的性別人數(shù)和比例圖屡穗,今日看來(lái),依舊兼具美感和創(chuàng)意忽肛,不像別處看到的可視化圖一般“丑陋”(逃...)村砂;
也在簡(jiǎn)書(shū)=雞湯?爬取簡(jiǎn)書(shū)今日看點(diǎn):1916篇熱門(mén)文章可視化項(xiàng)目里繪制了簡(jiǎn)書(shū)熱門(mén)文章發(fā)布時(shí)間的年月分布圖屹逛,審美杠杠的(逃...):
當(dāng)然這里不必像上述二者那樣需要去啃 ECharts3 的 JavaScript 代碼(相關(guān)實(shí)現(xiàn):圖表太丑怎么破础废,ECharts神器帶你飛汛骂!),直接在 pyecharts 配置文檔 里有組合圖多種示例评腺,輕松實(shí)現(xiàn)下圖:
df_mdhmax = df.groupby('time_mdh')['cmntcount'].max()
df_mdhcount = df.groupby('time_mdh')['cmntcount'].count()
from pyecharts import Bar, Line, Overlap
bar = Bar("每小時(shí)評(píng)論數(shù)")
bar.add("小時(shí)", df_mdhcount.index, df_mdhcount.values,is_label_show=True,xaxis_interval=-90,
xaxis_rotate=-90, yaxis_interval=200,yaxis_max=800)
line = Line("每小時(shí)評(píng)論數(shù)")
line.add("小時(shí)", 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
便捷的代價(jià)就是配色上沒(méi)有太多選擇的余地:
小結(jié)
pyecharts( 圖表詳情) 提供的圖表選擇還是蠻多的帘瞭,大家可以自行選擇想呈現(xiàn)的效果。后面地圖可視化也會(huì)用到蒿讥。而且蝶念,用起來(lái)很簡(jiǎn)單的,套用示例诈悍,改成自己的數(shù)據(jù)就行祸轮。
本系列將全面涉及本項(xiàng)目從爬蟲(chóng)、數(shù)據(jù)提取與準(zhǔn)備侥钳、數(shù)據(jù)異常發(fā)現(xiàn)與清洗适袜、分析與可視化等細(xì)節(jié),并將代碼統(tǒng)一開(kāi)源在GitHub:DesertsX/gulius-projects 舷夺,感興趣的朋友可以先行 star 哈苦酱。
本系列文章:
“中國(guó)年輕人正帶領(lǐng)國(guó)家走向危機(jī)”,這鍋背是不背给猾?
手把手教你完成一個(gè)數(shù)據(jù)科學(xué)小項(xiàng)目(1):數(shù)據(jù)爬取
手把手教你完成一個(gè)數(shù)據(jù)科學(xué)小項(xiàng)目(2):數(shù)據(jù)提取疫萤、IP 查詢(xún)
手把手教你完成一個(gè)數(shù)據(jù)科學(xué)小項(xiàng)目(3):數(shù)據(jù)異常與清洗