本文的文字及圖片來源于網路,僅供學習、交流使用,不具有任何商業用途,如有問題請及時聯系我們以作處理,
以下文章來源于菜J學Python ,作者J哥
Python爬蟲、資料分析、網站開發等案例教程視頻免費在線觀看
https://space.bilibili.com/523606542
前言
最近由騰訊視頻、愛奇藝聯合出品綜藝《哈哈哈哈哈》(又名五哈)話題不斷,節目中由鄧超、陳赫、鹿晗組成的兄弟旅行團,開啟了一段由東到西穿越中國的真實旅行,作為首個雙平臺聯播的超級網綜,給廣大觀眾帶來了無限歡樂,妥妥登上了綜藝熱搜榜第一,
騰訊視頻綜藝熱搜TOP3
本文通過爬取騰訊視頻《哈哈哈哈哈》47687條彈幕,進行可視化分析和情感分析,
資料獲取
《哈哈哈哈哈》目前已播出10期,本文爬取了第10期上下兩篇彈幕,彈幕資料爬蟲在往期原創文章中已詳細講解,本文不做贅述,以下給出完整代碼:
#-*- coding = uft-8 -*- import requests import json import time import pandas as pd df = pd.DataFrame() for page in range(15, 3973, 30): headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'} url = 'https://mfm.video.qq.com/danmu?otype=json×tamp={}&target_id=6384458060%26vid%3Dd0035ka5c02&count=80'.format(page) print("正在提取第" + str(page) + "頁") html = requests.get(url,headers = headers) bs = json.loads(html.text,strict = False) #strict引數解區域分內容json格式決議報錯 time.sleep(1) #遍歷獲取目標欄位 for i in bs['comments']: name = i['opername'] #昵稱 content = i['content'] #彈幕 upcount = i['upcount'] #點贊數 user_degree =i['uservip_degree'] #會員等級 timepoint = i['timepoint'] #發布時間 comment_id = i['commentid'] #彈幕id cache = pd.DataFrame({'用戶名':[name],'彈幕':[content],'會員等級':[user_degree], '發布時間':[timepoint],'彈幕點贊':[upcount],'彈幕id':[comment_id]}) df = pd.concat([df,cache]) df.to_csv('haha-1.csv',encoding = 'utf-8') print(df.shape)
資料處理
1.資料讀取并預覽
首先,將兩個彈幕csv檔案進行資料合并,采用concat方法,
import pandas as pd import numpy as np df1 = pd.read_csv("/彈幕/騰訊/哈哈哈哈哈/haha-1.csv") df1["期數"] = "10期上" df2 = pd.read_csv("/彈幕/騰訊/哈哈哈哈哈/haha-2.csv") df2["期數"] = "10期下" df = pd.concat([df1,df2]) df.sample(10)
抽樣10條彈幕資料,預覽效果如下:
2.查看資料資訊
df.info() <class 'pandas.core.frame.DataFrame'> Int64Index: 47687 entries, 0 to 21820 Data columns (total 8 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Unnamed: 0 47687 non-null int64 1 用戶名 13433 non-null object 2 彈幕 47687 non-null object 3 會員等級 47687 non-null int64 4 發布時間 47687 non-null int64 5 彈幕點贊 47687 non-null int64 6 彈幕id 47687 non-null int64 7 期數 47687 non-null object dtypes: int64(5), object(3) memory usage: 3.3+ MB
發現資料存在以下幾個問題:
(1)欄位名稱可調整
(2)Unnamed、彈幕id欄位多余
(3)用戶名欄位有缺失值,可填充
(4)發布時間欄位型別需要調整
3.資料清洗
#重命名欄位 df = df.rename(columns={'用戶名':'用戶昵稱','彈幕':'彈幕內容','發布時間':'發送時間','評論點贊':'彈幕點贊','期數':'所屬期數'}) #過濾不需要的欄位 df = df[["用戶昵稱","彈幕內容","會員等級","發送時間","彈幕點贊","所屬期數"]] #缺失值填充 df["用戶昵稱"] = df["用戶昵稱"].fillna("無名氏")
清洗后,資料預覽如下:
資料可視化
1.彈幕在討論些什么
通過對4萬+彈幕制作詞云圖,我們發現,彈幕中出現頻率較高的詞匯有「哈哈哈、鹿晗、晨藝、虞書欣」等,這綜藝的初衷,是讓觀眾在看節目的程序中頻繁大笑,由彈幕可知,效果還是很明顯的,鹿晗在這一期表現亮眼,躺贏刺殺游戲,被很多觀眾夸贊,
#繪制詞云圖 text1 = get_cut_words(content_series=df['彈幕內容']) stylecloud.gen_stylecloud(text=' '.join(text1), max_words=200, collocations=False, font_path='simhei.ttf', icon_name='fas fa-video', size=653, #palette='matplotlib.Inferno_9', output_name='./haha.png') Image(filename='./haha.png')
2.彈幕里都提到了誰
鹿晗被觀眾提及7329次,王晨藝3222次,張顏齊1632次,鹿晗的吸粉體質為這個綜藝帶來了較大的流量,而陳赫在最新一期的節目中似乎被一些觀眾遺忘,
df8 = df["人物提及"].value_counts()[1:11] print(df8.index.to_list()) print(df8.to_list()) c = ( Bar(init_opts=opts.InitOpts(theme=ThemeType.WALDEN)) .add_xaxis(df8.index.to_list()) .add_yaxis("",df8.to_list()) .set_global_opts(title_opts=opts.TitleOpts(title="人物提及次數",subtitle="資料來源:騰訊視頻 \t制圖:菜J學Python",pos_left = 'left'), xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=13)), #更改橫坐標字體大小 yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=13)), #更改縱坐標字體大小 ) .set_series_opts(label_opts=opts.LabelOpts(font_size=16,position='top')) ) c.render_notebook()
我們分別對六位主要提及演員進行詞云圖繪制,發現他們的人緣是真的好,幾乎看不到負面的評價,陳赫的外號還挺多:赫赫、赫哥,不做詞云我還不知道呢,看來J哥要補充知識點了,
3.誰是彈幕發射機
每天都是小春日和共發射彈幕158條,遙遙領先其他彈幕黨,名副其實的彈幕發射機,想太多de貓緊隨其后,發射了97條彈幕,如果大家還有印象的話,他(她)還是《令人心動的offer》第2季彈幕發射機,
df8 = df["用戶昵稱"].value_counts()[1:11] df8 = df8.sort_values(ascending=True) df8 = df8.tail(10) print(df8.index.to_list()) print(df8.to_list()) c = ( Bar(init_opts=opts.InitOpts(theme=ThemeType.WALDEN,width="1100px",height="500px")) .add_xaxis(df8.index.to_list()) .add_yaxis("",df8.to_list()).reversal_axis() #X軸與y軸調換順序 .set_global_opts(title_opts=opts.TitleOpts(title="彈幕發送數量TOP10",subtitle="資料來源:騰訊視頻 \t制圖:菜J學Python",pos_left = 'left'), xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=13)), #更改橫坐標字體大小 yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=13)), #更改縱坐標字體大小 #yaxis_opts=opts.AxisOpts(axislabel_opts={"rotate":40})#更改縱坐標字體大小 ) .set_series_opts(label_opts=opts.LabelOpts(font_size=16,position='right')) ) c.render_notebook()
我們來看看彈幕發射機討論了些啥,通過彈幕點贊數降序排列,篩選出點贊數最多的10條彈幕,彈幕內容幾乎全為王勉相關內容,死忠粉無疑了,
df_first = df[df["用戶昵稱"]=="每天都是小春日和"] df_first.sort_values('彈幕點贊',inplace=True,ascending=False) df_first[:10]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/251403.html
標籤:Python
上一篇:溫故而知新--day3
下一篇:Python基礎 - 變數及常量

