267019条猫眼数据加持,原来你是这样的《流浪地球》——python数据分析全流程代码实现!
生活随笔
收集整理的這篇文章主要介紹了
267019条猫眼数据加持,原来你是这样的《流浪地球》——python数据分析全流程代码实现!
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2019年春節檔,《流浪地球》橫空出世,在強勢口碑加持下,上映兩周多票房即突破40億! 與之相隨的主題也霸占了春節期間的話題榜。 作為一部現象級的電影,筆者也很感興趣,特意爬取了2月5日(初一)至2月12日(初八) 267019條貓眼影評,多角度可視化分析了《流浪地球》的數據規律。 接下來,跟我看看這267019人究竟說了什么吧!
數據分析準備工作
- 整個數據分析分為數據爬取、數據清洗、數據可視化和文本分析四個板塊
- 項目采用Anaconda環境,過程仍需安裝多個第三方模塊
所需第三方模塊(需提前安裝)
- 數據可視化:pyecharts(是一個用于生成 Echarts 圖表的類庫).
- 文本分析:jieba(中文分詞),wordcloud(生成詞云)等
(一)數據爬取階段
1、工具庫準備(備用模塊:time,random,datetime,requests,json)
2、備用user-agents(準備多個可用的user_agents,應用于爬蟲階段)
3、爬蟲封裝代碼(詳細的爬蟲實現代碼)
源代碼github地址:https://github.com/Willsgao/Personal-projects/爬蟲階段總結
- 1、爬取2019-02-05日——2019-02-12日,8天共267019條評價數據。
- 2、實際爬取過程中會因為網站的反扒機制多次中斷,導致部分數據丟失。
(二)數據清洗階段
- 1、此階段主要依靠pandas對原始數據進行預處理
- 2、爬蟲階段得到的數據分布在多個csv文件中需要進行合并
- 3、數據中存在空值,根據需求進行刪除或補充操作
1、導入數據清洗所需工具庫
import pandas as pd import glob # 在csv文件合并中讀取所有的csv文件2、將爬取的多個csv文件進行合并
# 讀取爬取的所有csv文件 csv_files = glob.glob('./*.csv')# 將csv文件進行合并 for file in csv_files:data = pd.read_csv(file, names=['昵稱','城市','評語','評分','日期','性別標簽'],encoding='utf_8_sig',engine='python',header=None)data.to_csv('合并文件/流浪地球01_comments.csv', mode='a', encoding='utf_8_sig', index=False, sep=',')3、數據基本信息特征
# 讀取合并后的文件信息 datas = pd.read_csv('合并文件/流浪地球01_comments.csv',encoding='utf_8_sig',engine='python') # 查看數據的基本信息屬性 datas.describe()4、所需的目標數據的預處理
# 統計各城市出現的數據信息 ct_datas = pd.DataFrame(datas['城市']) # 將城市名稱為空的數據刪除 ct_datas = ct_datas.dropna(axis=0) print(ct_datas.size)# pandas讀取會員的評分數據 df_score = pd.DataFrame(datas['評分']) # 將評分為空的數據刪除 df_score = df_score.dropna(axis=0) print(df_score.size)# 讀取會員的評語數據 dt_coms = pd.DataFrame(datas['評語']) # 將評語為空的數據刪除 dt_coms = dt_coms.dropna(axis=0) print(dt_coms.size) # 將評語保存為txt文檔 dt_coms.to_csv("流浪地球_影評.txt",sep='\t', index=False)5、數據清洗小結
- 主要根據數據分析的業務需求進行初步的數據處理
- 更加細致的數據處理在業務分析階段實現
(三)數據分布可視化
- 利用pyecharts可視化參與影評的粉絲分布情況
- 分別通過Geo和Bar函數進行數據可視化
1、指明文件編碼格式,識別中文字符
# 導入相關工具庫 import importlib import sys importlib.reload(sys)2、城市分布信息處理
- 為實現Geo可視化全國粉絲分布,對ct_datas進行處理
- 定義數據格式處理的相關函數
******* 詳細代碼見github源代碼******
3、Geo可視化粉絲分布圖
- pyecharts源代碼的數據庫中無法識別所有的城市,因此不能識別的城市需要特殊處理。
- 方法一是將所有不能識別的城市數據刪除;
- 方法二是在源代碼城市數據庫中添加新城市的經緯度值。
考慮到操作的簡便性,此處采用方法一,將不能識別的城市數據刪除
# Geo繪圖函數 def geo_picture(data, city_sets):# 導入相關工具庫# 導入Geo模塊進行城市數據分析from pyecharts import Geouseless_cities = []city_infos = []for i in range(len(data)):geo = Geo("《流浪地球》全國觀影粉絲分布圖", "data from Maoyan", title_color="#fff",title_pos="center", width=1000,height=750, background_color='#404a59')attr, value = geo.cast(data)try:geo.add("", attr, value, visual_range=[0, 200], maptype='china',type="effectScatter",visual_text_color="#fff",symbol_size=10, is_visualmap=True)except Exception as e:# print(e)# 在異常信息中提取無法被pyecharts識別的城市city = str(e).split()[-1]# 將不能識別的城市名稱收集到列表中useless_cities.append(city)# 剔除無法識別的城市信息city_sets.pop(city)city_infos = geo_city_infos(city_sets)data = city_infos#生成html文件geo.render("全國觀影粉絲分布圖.html")return geo,city_infos,useless_cities# 處理不能識別的城市名稱,重新參與畫圖 def handle_cities(filename, city_sets):# 讀取未識別的城市名稱ul_cities = []with open(filename,'r',encoding='utf_8') as f:ul_lists = f.readlines()# 刪除非中文格式的城市for city in ul_lists:ch = city.strip()[0]if u'\u4e00' <= ch <= u'\u9ffff':ul_cities.append(city.strip())print(len(ul_cities))# 判斷是否由于下面集合中的字的缺失或是多余導致ad_re_cities = []cityname = ''lists = ['縣','區','市','州']for city in ul_cities:if city[-1] not in lists:for j in lists:cityname = city+jad_re_cities.append((cityname,city_sets[city]))elif len(city)>=3:cityname = ''.join(city[:-1])ad_re_cities.append((cityname, city_sets[city]))else:continuereturn ad_re_cities# 存儲不能識別的城市信息 def store_cities(useless_cities,filename):ul_cities = pd.DataFrame(useless_cities)ul_cities.to_csv(filename,sep='\t', index=False) # 運行Geo模塊 pre_city_sets = set_list_cities(city_lists) print(len(pre_city_sets)) geo,city_infos,useless_cities = geo_picture(data, pre_city_sets)# 定義存儲不能識別城市的文件名稱 filename = '未識別城市.txt'# 存儲城市信息 store_cities(useless_cities,filename) # 生成處理后的新城市信息 print(len(city_sets)) ad_re_cities = handle_cities(filename, city_sets)??# 處理后的城市與已識別的城市信息合并 final_city_infos = ad_re_cities + city_infos cur_city_sets = set_info_cities(final_city_infos) # print(next_city_sets)# 重新運行Geo模塊 geo,_,_ = geo_picture(final_city_infos,cur_city_sets)# 繪制全國觀影粉絲分布圖 # 直接在notebook中顯示 geoGeo可視化粉絲分布小結
- pyecharts識別城市能力有限,導致380個左右的城市信息無法識別
- 總體上來說主要城市信息是能正常識別的,因此不會對頭部信息有較大影響
- 對于定型化了解全國影迷分布仍具有很大的參考價值
具體分布信息見上圖
- 1、中東部是《流浪地球》影迷和影評的主力;
- 2、廣大的西部地區影評人數嚴重不足;
- 3、影評的密度與地區人口的分布密度正相關。
4、利用Bar可視化評論頭部城市信息
- 利用pyecharts中的Bar模塊進行分析
- 查看影評數量在前20名的城市信息
- 利用pyecharts中的Style模塊定義可視化圖形
Bar可視化分析小結
- 從上圖可見,城市粉絲評論數量順序與城市的經濟實力排名相吻合。
- 此外,城市粉絲評論數量順序也與城市人口數量排名正相關。
- 由此可以初步推斷,城市經濟實力越強。人口越多,市民的觀影數量越多,娛樂生活越豐富。
5、Pie模塊可視化《流浪地球》的星級評價&區分性別
- 利用pyecharts的Pie模塊分析《流浪地球》的評分分布
- 將評分進行分段處理,用一星到五星來標定影片評價等級
- 分別考察不同性別影迷對《流浪地球》的評分結果,探究性別影響。
- 性別缺失值較多,但因為數據是否缺失沒有明顯的性別差異,缺失值可以刪除
分性別處理影評數據
# 處理性別數據 # 1、刪除缺失值 gender_datas = datas.dropna(subset=['性別標簽']) print(len(gender_datas))# 2、分別讀取男女性別數據,男gender值為'1.0',女為'2.0' male_datas = gender_datas[gender_datas.性別標簽=='1.0'] female_datas = gender_datas[gender_datas.性別標簽=='2.0']# 3、分別讀取男女會員的評分數據 male_score = pd.DataFrame(male_datas['評分']) female_score = pd.DataFrame(female_datas['評分']) # 生成男性的評分pie圖 male_pie = genPiePicture(male_score) male_pie # 生成女性的評分pie圖 female_pie = genPiePicture(female_score) female_pie男性星級評價比例圖
女性星級評價比例圖
《流浪地球》星級評價小結
- 男女影評者均有85%左右的比例對《流浪地球》給出了5星的評價。
- 男女影評者具有超過93%的影評者對《流浪地球》給出了超過4星的評價。
- 《流浪地球》是一部基本沒有性別區分度的影片,男女通吃。
- 《流浪地球》是一部評價很高(評分數據超過大多數影片),值得一看。
(四)評語文本分析
- 利用jieba分詞工具包對評語進行分詞處理,分析評語文本信息。
- 對所得的評語分詞進行頭部分析,利用wordcloud生成詞云,可視化評語。
- 原始評語過于龐大(700萬字),此處不做詳細分析。
- 更為詳細的文本分析見‘《流浪地球》貓眼評語文本分析’一文。
1、導入文本分析工具包
import jieba import matplotlib.pyplot as mp from wordcloud import STOPWORDS, WordCloud from os import path from PIL import Image import numpy as np2、獲取樣本評語數據
- 為簡化分析,隨機選擇了一個小樣本(1.6萬字左右)進行簡要分析。
溫馨提示:此處有坑font_path設置不好,中文詞云可能會亂碼!
# 詞云代碼構建 d = path.dirname('__file__') nana_coloring = np.array(Image.open(path.join(d, "car.png"))) # 詞云形狀由圖片‘car.png’決定 my_wordcloud = WordCloud( background_color = 'white', # 設置背景顏色mask = nana_coloring, # 設置背景圖片max_words = 200, # 設置最大現實的字數stopwords = stopwords, # 設置停用詞font_path = 'simhei.ttf',max_font_size = 100, # 設置字體最大值random_state = 30 # 設置有多少種隨機生成狀態,即有多少種配色方案) my_wordcloud.generate(words)分詞詞云背景圖片,決定詞云形狀。
# 可視化詞云圖 mp.imshow(my_wordcloud,cmap=mp.cm.gray, interpolation='bilinear') # 顯示詞云圖 mp.axis("off") # 不顯示x軸、y軸下標 mp.show() my_wordcloud.to_file("wordcloud_new.png")評語文本分析小結
- 文本可視化看到影迷的主評價詞為:好看,科幻,震撼,特效劇情。
- 從影評評價中可以看出《流浪地球》的口碑非常不錯,值得一看!
項目源代碼包github地址:https://github.com/Willsgao/Personal-projects/
參考網址:https://www.jianshu.com/p/d4a86da914e9
參考網址:https://blog.csdn.net/weixin_40096730/article/details/81984231
參考網址:https://blog.csdn.net/Dick633/article/details/80261233
總結
以上是生活随笔為你收集整理的267019条猫眼数据加持,原来你是这样的《流浪地球》——python数据分析全流程代码实现!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 爬虫练习-爬取《斗破苍穹》全文小说
- 下一篇: 软件工程(三)——结构化需求分析 (重点