【Python可視化大屏】“淄博燒烤”熱評輿情分析大屏
一、開發(fā)背景
您好,我是 @馬哥python說 ,一枚10年程序猿。
自從2023.3月以來,淄博燒烤現(xiàn)象持續(xù)占領熱搜流量,體現(xiàn)了后疫情時代眾多網友對人間煙火氣的美好向往,本現(xiàn)象級事件存在一定的數(shù)據(jù)分析實踐意義。
靜態(tài)截圖:

動態(tài)演示:

二、爬蟲代碼
2.1 爬微博列表
通過m端的搜索頁面,爬取以淄博燒烤為關鍵詞的微博id,獲取到微博id的目的,是傳給評論爬蟲。
發(fā)送請求部分:
注意,type=60代表"熱門",如下:

解析數(shù)據(jù)部分:
至此,已經獲取到以淄博燒烤為關鍵詞的微博id列表 id_list_list 了。
2.2 爬微博評論
從2.1章節(jié)獲取到微博id列表之后,傳入爬取微博評論函數(shù) get_comments
這部分爬蟲講解可移步:

最終,爬取到的微博評論數(shù)據(jù),示例如下:

說明:無論微博搜索頁,還是微博評論頁,都可以自定義設置max_page,滿足自己的個性化數(shù)據(jù)量要求。
2.3 導入MySQL數(shù)據(jù)庫
最核心的三行代碼:
用create_engine創(chuàng)建數(shù)據(jù)庫連接,格式為:
create_engine('數(shù)據(jù)庫類型+數(shù)據(jù)庫驅動://用戶名:密碼@數(shù)據(jù)庫IP地址/數(shù)據(jù)庫名稱')
這樣,數(shù)據(jù)庫連接就創(chuàng)建好了。
然后,用pandas的read_csv函數(shù)讀取csv文件。
最后,用pandas的to_sql函數(shù),把數(shù)據(jù)存入MySQL數(shù)據(jù)庫:
name='college_t2' #mysql數(shù)據(jù)庫中的表名?
con=engine # 數(shù)據(jù)庫連接?
index=False #不包含索引字段?
if_exists='replace' #如果表中存在數(shù)據(jù),就替換掉,另外,還支持append(追加數(shù)據(jù))
非常方便地完成了反向導入,即:從csv向數(shù)據(jù)庫的導入。
這個部分的講解視頻:

三、可視化代碼
3.1 大標題
由于pyecharts組件沒有專門用作標題的圖表,我決定靈活運用Line組件實現(xiàn)大標題。
首先,找到一張星空圖作為大屏背景圖:

然后,在Line組件中加入js代碼,加載背景圖:
大標題效果如下:

3.2 詞云圖(含:加載停用詞)
繪制詞云圖,需要先進行中文分詞。既然分詞,就要先設置停用詞,避免干擾詞影響分析結果。
這里采用哈工大停用詞作為停用詞詞典。
這樣,所有停用詞就存入stopwords_list這個列表里了。
如果哈工大停用詞仍然無法滿足需求,再加入一些自定義停用詞,extend到這個列表里:
現(xiàn)在就可以愉快的繪制詞云圖了,部分核心代碼:
詞云圖效果:

3.3 玫瑰圖(含:snownlp情感分析)
先對評論數(shù)據(jù)進行情感判定,采用snownlp技術進行情感打分及判定結果:
將情感分析結果用pandas保存到一個Excel文件里,如下:

繪制玫瑰圖,部分核心代碼:
玫瑰圖效果:

3.4 柱形圖-TOP10關鍵詞
先根據(jù)詞云圖部分提取出TOP10高頻詞(過濾掉停用詞之后的):
然后帶入柱形圖,部分核心代碼:
柱形圖效果:

3.5 折線圖-討論熱度趨勢
首先,根據(jù)評論時間統(tǒng)計出每天的微博評論數(shù)量:
然后,根據(jù)統(tǒng)計數(shù)據(jù)畫出折線圖,部分核心代碼:
折線圖效果:

3.6 地圖-IP分布
由于IP屬地字段都包含"來自"兩字,先進行數(shù)據(jù)清洗,將"來自"去掉:
然后統(tǒng)計各個IP屬地的數(shù)量,方便后續(xù)帶入地圖可視化:
下面開始繪制地圖,部分核心代碼:
地圖效果,如下:

當然,地圖中的顏色,都是自己設置的十六進制顏色,可以根據(jù)自己的喜好更改。
3.7 Page組合大屏
最后,也是最關鍵的一步,把以上所有圖表組合到一起,用Page組件,并且選用DraggablePageLayout方法,即拖拽的方式,組合圖表:
本代碼執(zhí)行完畢后,打開臨時html并排版,排版完點擊Save Config,把json文件放到本目錄下。
再執(zhí)行最后一步,調用json配置文件,生成最終大屏文件。
至此,所有代碼執(zhí)行完畢,生成了最終大屏html文件。
四、彩蛋-多種顏色主題
分享一個小技巧,我設置了一鍵更換顏色主題:
只需更換ThemeType參數(shù),即可實現(xiàn)一鍵更換主題!
4.1 INFOGRAPHIC主題

4.2 MACARONS主題

4.3 SHINE主題

4.4 WALDEN主題

4.5 WESTEROS主題

4.6 WHITE主題

4.7 WONDERLAND主題

更多顏色主題等待小伙伴去發(fā)掘!
五、技術總結
整體技術開發(fā)流程,如下:
requests 爬蟲發(fā)送請求
json 解析返回數(shù)據(jù)
re 正則表達式清洗文本
pandas保存csv文件
sqlalchemy 保存MySQL數(shù)據(jù)
pyecharts 可視化開發(fā)
snownlp 情感分析
jieba 中文分詞
pyecharts+page 組合大屏
flask 啟動網頁服務
六、在線體驗
為了方便大家體驗可視化動態(tài)交互效果,我把此大屏部署到了服務器,請移步:
http://81.70.253.63:8888
七、演示視頻
效果演示視頻:

八、獲取完整源碼
愛學習的小伙伴,本次分析過程的完整python源碼及結果數(shù)據(jù),我已打包好,并上傳至我的微信公眾號"老男孩的平凡之路",后臺回復"淄博燒烤大屏"即可獲取。

我是@馬哥python說 ,持續(xù)分享python干貨中!?