日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

267019条猫眼数据加持,原来你是这样的《流浪地球》——python数据分析全流程代码实现!

發(fā)布時間:2023/12/14 python 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 267019条猫眼数据加持,原来你是这样的《流浪地球》——python数据分析全流程代码实现! 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2019年春節(jié)檔,《流浪地球》橫空出世,在強勢口碑加持下,上映兩周多票房即突破40億! 與之相隨的主題也霸占了春節(jié)期間的話題榜。 作為一部現(xiàn)象級的電影,筆者也很感興趣,特意爬取了2月5日(初一)至2月12日(初八) 267019條貓眼影評,多角度可視化分析了《流浪地球》的數(shù)據(jù)規(guī)律。 接下來,跟我看看這267019人究竟說了什么吧!

數(shù)據(jù)分析準(zhǔn)備工作

  • 整個數(shù)據(jù)分析分為數(shù)據(jù)爬取、數(shù)據(jù)清洗、數(shù)據(jù)可視化和文本分析四個板塊
  • 項目采用Anaconda環(huán)境,過程仍需安裝多個第三方模塊

所需第三方模塊(需提前安裝)

  • 數(shù)據(jù)可視化:pyecharts(是一個用于生成 Echarts 圖表的類庫).
  • 文本分析:jieba(中文分詞),wordcloud(生成詞云)等

(一)數(shù)據(jù)爬取階段

1、工具庫準(zhǔn)備(備用模塊:time,random,datetime,requests,json)

2、備用user-agents(準(zhǔn)備多個可用的user_agents,應(yīng)用于爬蟲階段)

3、爬蟲封裝代碼(詳細(xì)的爬蟲實現(xiàn)代碼)

源代碼github地址:https://github.com/Willsgao/Personal-projects/

爬蟲階段總結(jié)

  • 1、爬取2019-02-05日——2019-02-12日,8天共267019條評價數(shù)據(jù)。
  • 2、實際爬取過程中會因為網(wǎng)站的反扒機制多次中斷,導(dǎo)致部分?jǐn)?shù)據(jù)丟失。

(二)數(shù)據(jù)清洗階段

  • 1、此階段主要依靠pandas對原始數(shù)據(jù)進(jìn)行預(yù)處理
  • 2、爬蟲階段得到的數(shù)據(jù)分布在多個csv文件中需要進(jìn)行合并
  • 3、數(shù)據(jù)中存在空值,根據(jù)需求進(jìn)行刪除或補充操作

1、導(dǎo)入數(shù)據(jù)清洗所需工具庫

import pandas as pd import glob # 在csv文件合并中讀取所有的csv文件

2、將爬取的多個csv文件進(jìn)行合并

# 讀取爬取的所有csv文件 csv_files = glob.glob('./*.csv')# 將csv文件進(jìn)行合并 for file in csv_files:data = pd.read_csv(file, names=['昵稱','城市','評語','評分','日期','性別標(biāo)簽'],encoding='utf_8_sig',engine='python',header=None)data.to_csv('合并文件/流浪地球01_comments.csv', mode='a', encoding='utf_8_sig', index=False, sep=',')

3、數(shù)據(jù)基本信息特征

# 讀取合并后的文件信息 datas = pd.read_csv('合并文件/流浪地球01_comments.csv',encoding='utf_8_sig',engine='python') # 查看數(shù)據(jù)的基本信息屬性 datas.describe()

4、所需的目標(biāo)數(shù)據(jù)的預(yù)處理

# 統(tǒng)計各城市出現(xiàn)的數(shù)據(jù)信息 ct_datas = pd.DataFrame(datas['城市']) # 將城市名稱為空的數(shù)據(jù)刪除 ct_datas = ct_datas.dropna(axis=0) print(ct_datas.size)# pandas讀取會員的評分?jǐn)?shù)據(jù) df_score = pd.DataFrame(datas['評分']) # 將評分為空的數(shù)據(jù)刪除 df_score = df_score.dropna(axis=0) print(df_score.size)# 讀取會員的評語數(shù)據(jù) dt_coms = pd.DataFrame(datas['評語']) # 將評語為空的數(shù)據(jù)刪除 dt_coms = dt_coms.dropna(axis=0) print(dt_coms.size) # 將評語保存為txt文檔 dt_coms.to_csv("流浪地球_影評.txt",sep='\t', index=False)

5、數(shù)據(jù)清洗小結(jié)

  • 主要根據(jù)數(shù)據(jù)分析的業(yè)務(wù)需求進(jìn)行初步的數(shù)據(jù)處理
  • 更加細(xì)致的數(shù)據(jù)處理在業(yè)務(wù)分析階段實現(xiàn)

(三)數(shù)據(jù)分布可視化

  • 利用pyecharts可視化參與影評的粉絲分布情況
  • 分別通過Geo和Bar函數(shù)進(jìn)行數(shù)據(jù)可視化

1、指明文件編碼格式,識別中文字符

# 導(dǎo)入相關(guān)工具庫 import importlib import sys importlib.reload(sys)

2、城市分布信息處理

  • 為實現(xiàn)Geo可視化全國粉絲分布,對ct_datas進(jìn)行處理
  • 定義數(shù)據(jù)格式處理的相關(guān)函數(shù)
    ******* 詳細(xì)代碼見github源代碼******
# 城市信息列表化 # 將讀取的城市特征信息轉(zhuǎn)化為列表 def list_cities(ct_datas):passreturn city_lists# 城市列表字典化,將城市列表轉(zhuǎn)化為鍵為城市值為人數(shù)的字典 def set_list_cities(city_lists):passreturn city_sets# Geo格式化,將城市字典轉(zhuǎn)化為Geo所需的數(shù)據(jù)格式 # 將城市信息和評論數(shù)量以元組格式添加到列表中 def geo_city_infos(city_sets):passreturn city_infos# 將Geo格式化的列表重新轉(zhuǎn)化為字典格式 def set_info_cities(city_infos):passreturn city_sets # 生成城市數(shù)據(jù)字典 city_sets = set_list_cities(city_lists) print(len(city_sets))# 生成格式化城市數(shù)據(jù) city_infos = geo_city_infos(city_sets) print(len(city_infos)) data = city_infos

3、Geo可視化粉絲分布圖

  • pyecharts源代碼的數(shù)據(jù)庫中無法識別所有的城市,因此不能識別的城市需要特殊處理。
  • 方法一是將所有不能識別的城市數(shù)據(jù)刪除;
  • 方法二是在源代碼城市數(shù)據(jù)庫中添加新城市的經(jīng)緯度值。
考慮到操作的簡便性,此處采用方法一,將不能識別的城市數(shù)據(jù)刪除
# Geo繪圖函數(shù) def geo_picture(data, city_sets):# 導(dǎo)入相關(guān)工具庫# 導(dǎo)入Geo模塊進(jìn)行城市數(shù)據(jù)分析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))# 判斷是否由于下面集合中的字的缺失或是多余導(dǎo)致ad_re_cities = []cityname = ''lists = ['縣','區(qū)','市','州']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中顯示 geo

Geo可視化粉絲分布小結(jié)

  • pyecharts識別城市能力有限,導(dǎo)致380個左右的城市信息無法識別
  • 總體上來說主要城市信息是能正常識別的,因此不會對頭部信息有較大影響
  • 對于定型化了解全國影迷分布仍具有很大的參考價值

具體分布信息見上圖

  • 1、中東部是《流浪地球》影迷和影評的主力;
  • 2、廣大的西部地區(qū)影評人數(shù)嚴(yán)重不足;
  • 3、影評的密度與地區(qū)人口的分布密度正相關(guān)。

4、利用Bar可視化評論頭部城市信息

  • 利用pyecharts中的Bar模塊進(jìn)行分析
  • 查看影評數(shù)量在前20名的城市信息
  • 利用pyecharts中的Style模塊定義可視化圖形
from pyecharts import Bar from pyecharts import Style# 定義樣式 style = Style(title_color='#fff',title_pos='center',width=800,height=500,background_color='#404a59',subtitle_color='#fff' )# 根據(jù)城市數(shù)據(jù)生成柱狀圖 city_counts = ct_datas.groupby("城市").size() city_sorted = city_counts.sort_values(ascending=False).head(20)bar = Bar("《流浪地球》評星人來源排行TOP20", "蝸牛行天下", **style.init_style) attr, value = bar.cast(list(city_sorted.items())) bar.add("", attr, value, is_visualmap=True, visual_range=[0, 2500],visual_text_color='#fff', label_color='#fff',xaxis_label_textcolor='#fff', yaxis_label_textcolor='#fff', is_more_utils=True,is_label_show=True)# 保存可視化圖片文件 bar.render("評星人來源排行-柱狀圖.html") # 圖像可視化 bar

Bar可視化分析小結(jié)

  • 從上圖可見,城市粉絲評論數(shù)量順序與城市的經(jīng)濟實力排名相吻合。
  • 此外,城市粉絲評論數(shù)量順序也與城市人口數(shù)量排名正相關(guān)。
  • 由此可以初步推斷,城市經(jīng)濟實力越強。人口越多,市民的觀影數(shù)量越多,娛樂生活越豐富。

5、Pie模塊可視化《流浪地球》的星級評價&區(qū)分性別

  • 利用pyecharts的Pie模塊分析《流浪地球》的評分分布
  • 將評分進(jìn)行分段處理,用一星到五星來標(biāo)定影片評價等級
  • 分別考察不同性別影迷對《流浪地球》的評分結(jié)果,探究性別影響。
  • 性別缺失值較多,但因為數(shù)據(jù)是否缺失沒有明顯的性別差異,缺失值可以刪除
# 構(gòu)建Pie圖生成函數(shù) def genPiePicture(df_score):pass # 詳細(xì)代碼見文末github地址return pie

分性別處理影評數(shù)據(jù)

# 處理性別數(shù)據(jù) # 1、刪除缺失值 gender_datas = datas.dropna(subset=['性別標(biāo)簽']) print(len(gender_datas))# 2、分別讀取男女性別數(shù)據(jù),男g(shù)ender值為'1.0',女為'2.0' male_datas = gender_datas[gender_datas.性別標(biāo)簽=='1.0'] female_datas = gender_datas[gender_datas.性別標(biāo)簽=='2.0']# 3、分別讀取男女會員的評分?jǐn)?shù)據(jù) 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
男性星級評價比例圖

女性星級評價比例圖

《流浪地球》星級評價小結(jié)

  • 男女影評者均有85%左右的比例對《流浪地球》給出了5星的評價。
  • 男女影評者具有超過93%的影評者對《流浪地球》給出了超過4星的評價。
  • 《流浪地球》是一部基本沒有性別區(qū)分度的影片,男女通吃。
  • 《流浪地球》是一部評價很高(評分?jǐn)?shù)據(jù)超過大多數(shù)影片),值得一看。

(四)評語文本分析

  • 利用jieba分詞工具包對評語進(jìn)行分詞處理,分析評語文本信息。
  • 對所得的評語分詞進(jìn)行頭部分析,利用wordcloud生成詞云,可視化評語。
  • 原始評語過于龐大(700萬字),此處不做詳細(xì)分析。
  • 更為詳細(xì)的文本分析見‘《流浪地球》貓眼評語文本分析’一文。

1、導(dǎo)入文本分析工具包

import jieba import matplotlib.pyplot as mp from wordcloud import STOPWORDS, WordCloud from os import path from PIL import Image import numpy as np

2、獲取樣本評語數(shù)據(jù)

  • 為簡化分析,隨機選擇了一個小樣本(1.6萬字左右)進(jìn)行簡要分析。
# 獲取所有的評論 comments = []with open("流浪地球_影評01.txt", 'r', encoding='utf-8') as f:rows = f.readlines()for row in rows:try:comment = row.strip().split(',')except IndexError:continueif comment:comments.append(comment) print(len(comments)) # 設(shè)置分詞 com_aft_spl = jieba.cut(str(comments),cut_all=False) # 非全模式分詞,cut_all=False words = ' '.join(com_aft_spl) print(len(words))# 設(shè)置停用詞,在默認(rèn)停用詞基礎(chǔ)上添加新的停用詞 stopwords = STOPWORDS.copy() wd_libs = ['電影','一部','一個','沒有','什么','有點','這部','這個','不是','我們','真的','感覺','覺得','還是','但是','就是','流浪地球','流浪','地球','中國'] for wl in wd_libs:stopwords.add(wl) print(len(stopwords))
溫馨提示:此處有坑font_path設(shè)置不好,中文詞云可能會亂碼!
# 詞云代碼構(gòu)建 d = path.dirname('__file__') nana_coloring = np.array(Image.open(path.join(d, "car.png"))) # 詞云形狀由圖片‘car.png’決定 my_wordcloud = WordCloud( background_color = 'white', # 設(shè)置背景顏色mask = nana_coloring, # 設(shè)置背景圖片max_words = 200, # 設(shè)置最大現(xiàn)實的字?jǐn)?shù)stopwords = stopwords, # 設(shè)置停用詞font_path = 'simhei.ttf',max_font_size = 100, # 設(shè)置字體最大值random_state = 30 # 設(shè)置有多少種隨機生成狀態(tài),即有多少種配色方案) my_wordcloud.generate(words)
分詞詞云背景圖片,決定詞云形狀。

# 可視化詞云圖 mp.imshow(my_wordcloud,cmap=mp.cm.gray, interpolation='bilinear') # 顯示詞云圖 mp.axis("off") # 不顯示x軸、y軸下標(biāo) mp.show() my_wordcloud.to_file("wordcloud_new.png")

評語文本分析小結(jié)

  • 文本可視化看到影迷的主評價詞為:好看,科幻,震撼,特效劇情。
  • 從影評評價中可以看出《流浪地球》的口碑非常不錯,值得一看!
項目源代碼包github地址:https://github.com/Willsgao/Personal-projects/

參考網(wǎng)址:https://www.jianshu.com/p/d4a86da914e9
參考網(wǎng)址:https://blog.csdn.net/weixin_40096730/article/details/81984231
參考網(wǎng)址:https://blog.csdn.net/Dick633/article/details/80261233

總結(jié)

以上是生活随笔為你收集整理的267019条猫眼数据加持,原来你是这样的《流浪地球》——python数据分析全流程代码实现!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。