CDA數據分析師 出品
最近一連出了好幾部職場劇,有孫儷主演講述房地產行業的《安家》,李易峰主演講律師的《我在北京等你》,以及佟麗婭、黃軒主演圍繞公關行業展開的《完美關係》。
其中,《安家》是翻拍自高分日劇《賣房子的女人》,《我在北京等你》講的是一名律師奮鬥的故事,《完美關係》則是國產職場劇涉及的又一全新行業——公關。
那麼這三部劇的口碑如何呢?
截止到目前為止,《安家》在豆瓣的評分為6.2分,《我在北京等你》豆瓣5.2分,《完美關係》為3.9分。都不是特別好的成績。
《完美關係》播出後更是有公關行業的小夥伴吐槽:我們不想被這麼代言啊!
那麼《完美關係》到底是哪裡差強人意呢?今天我們就先聊聊這部《完美關係》。
01近年頻頻撲街的國產職場劇
近年來,推出的國產職場劇還真不少,涉及的行業從地產、網際網路、醫療、到翻譯、律師等等,幾乎形形色色的行業都有。但這些劇的口碑如何呢?
先看幾部比較熱門的:
以上這些劇在播出時都頻頻上熱搜,但口碑就差強人意了。分數3.5-5.5不等,連6分及格線都不到。
相關行業的從業者也吐槽,根本沒有反應出行業的真實現狀,美其名曰職場劇,其實這不是披著行業外衣的偶像劇嘛!
進一步匯總國產職場劇的情況可以發現:
從2008年到2020年3月,共出品64部職場劇,近兩年職場題材更有井噴之勢,2018年和2019年每年都有13部,數量是2014年的13倍!
數量上來了,然後質量就堪憂了。從這些職場劇的豆瓣評分可見,平均分一直在5.5分徘徊。
02披著公關外衣的《完美關係》
那這次瞄準公關行業的《完美關係》能為國產職場劇正名嗎?
《完美關係》是由安建執導,黃軒、佟麗婭領銜主演,陳數、高露主演的都市職場劇。
故事講的是公關合伙人衛哲、江達琳等人從單槍匹馬到並肩作戰,積極迎接在公關實戰中遇到的壓力與困難,互相影響、共同成長的故事。
從2月18日首播以來,《完美關係》的收視率越來越高,3月11日《完美關係》憑藉6.92%的市場佔有率,拿下了收視率排行榜的冠軍寶座。
但同時收穫的吐槽和差評也不少,主要集中在:
劇情太浮誇,對公關行業的刻畫不真實;女主的傻白甜人設實在不討喜;演員的演技流於表面,難以產生共鳴等等03《完美關係》豆瓣3.9分到底冤不冤?
《完美關係》在豆瓣已有60284人進行評分,目前僅為3.9分。那麼《完美關係》豆瓣3.9分到底冤不冤呢?
我們對《完美關係》豆瓣的影評數據進行了收集整理。
整個數據分析的過程分為三步:
· 獲取數據
· 數據預處理
· 數據可視化
以下是具體的步驟和代碼實現:
獲取數據
此次我們選擇豆瓣短評的數據作為分析對象。由於豆瓣的限制,非登錄狀態下最多獲取200條數據,登錄狀態下最多獲取500條數據。
為了解決登錄的問題,此次我們使用requests的Session方法來讓代碼自動保存Cookie信息,維持登錄和會話保持狀態。然後使用Xapth配合正則語句進行數據的提取。
如圖所示,本次我們需要獲取的主要內容如下:
用戶名用戶主頁評論時間評論星級短評內容短評投票數用戶主頁(用於獲取城市)評分分布代碼實現:
# 導入所需包import pandas as pdimport requestsimport parselimport reimport timefrom fake_useragent import UserAgentdef login_douban:"""功能:登錄豆瓣,維持會話形式"""global s# 初始化sessions = requests.Session# 登錄地址login_url = 'ht tps:/ /accounts.douban.co m/j/mobile/login/basic'# 添加headersheaders = {'user-agent': UserAgent.random}# 表單數據form_data = {'name': '你的帳號','password': '你的密碼','remember': 'false'}# post登錄try:s.post(login_url, headers=headers, data=form_data)except:print("登錄失敗")def get_one_page(url):"""功能:給定URL地址,獲取豆瓣電影一頁的短評信息:param url: 電影URL地址:return: 返回數據框"""# 添加headersheaders = {'user-agent': UserAgent.random}# 發起請求try:r = s.get(url, headers=headers, timeout=5)except:time.sleep(3)r = s.get(url, headers=headers, timeout=5)# 解析網頁data = parsel.Selector(r.text)# 獲取用戶名user_name = [re.findall(r'.*?class="">(.*?).*', i)for i in data.xpath('//span[@class="comment-info"]').extract]# 獲取評分rating = [re.findall(r'.*?<span title=(.*?)></span>.*', i)for i in data.xpath('//span[@class="comment-info"]').extract]# 獲取評論時間comment_time = [re.findall(r'<span title=(.*)>.*', i)for i in data.xpath('//span[@class="comment-info"]').extract]# 獲取短評信息comment_info = data.xpath('//span[@class="short"]/text').extract# 投票次數votes_num = data.xpath('//span[@class="comment-vote"]/span/text').extract# 獲取主頁URLuser_url = data.xpath('//div[@class="avatar"]/a/@href').extract# 保存數據df_one = pd.DataFrame({'user_name': user_name,'rating': rating,'comment_time': comment_time,'comment_info': comment_info,'votes_num': votes_num,'user_url': user_url})return df_onedef get_all_page(movie_id, page_num=25):"""功能:獲取豆瓣電影25頁短評信息:param movie_id: 電影ID:param page_num: 爬取頁面數:return: 返回數據框"""df_25 = pd.DataFramefor i in range(page_num):# 構造URLurl = 'ht tps://movie.douban.co m/subject/{}/comments?start={}&limit=20&sort=new_score&status=P'.format(movie_id,i * 20)# 調用函數df = get_one_page(url)# 循環追加df_25 = df_25.append(df, ignore_index=True)# 列印進度print('我正在獲取第{}頁的信息'.format(i + 1))# 休眠一秒time.sleep(1)return df_25if __name__ == '__main__':# 先登錄豆瓣login_douban# 獲取完美關係df_all = get_all_page(movie_id='30221758')print(df_all.shape)
獲取的數據以數據框的形式存儲,結果如下:
從用戶主頁的地址可以進一步獲取到用戶的城市信息,此次共獲取500條數據。
數據預處理
對於獲取的數據,我們需要進行進一步的處理以滿足可視化的需求。
推薦星級:轉換為1~5分評論時間:轉換為時間類型,並提取日期數據城市信息:有未填寫數據、海外城市、寫錯的需要進行處理短評信息:需要進行分詞處理部分關鍵代碼:
# 處理評分列df['rating'] = [re.sub(r'\[\'\"|\"\'\]', '', i) for i in df['rating']]# 替換空列表df['rating'].replace('', '還行', inplace=True)# 定義字典rating_dict = {'很差': '1星','較差': '2星','還行': '3星','推薦': '4星','力薦': '5星'}df['rating'] = df['rating'].map(rating_dict)# 評論信息分詞處理# 合併為一篇txt = df['comment_info'].str.cat(sep='。')# 添加關鍵詞jieba.add_word('黃軒')jieba.add_word('佟麗婭')jieba.add_word('男主')jieba.add_word('女主')jieba.add_word('跳戲')jieba.add_word('顏值')jieba.add_word('吐槽')jieba.add_word('裝逼')jieba.add_word('國產劇')# 讀入停用詞表stop_words = with open('stop_words.txt', 'r', encoding='utf-8') as f:lines = f.readlinesfor line in lines:stop_words.append(line.strip)# 添加停用詞stop_words.extend(['一部', '一拳', '一行', '10', '啊啊啊', '一句','get', '哈哈哈哈', '哈哈哈', '越來越', '一步','一種', '樣子', '幾個', '第一集', '一點','第一', '沒見', '一集', '第一次', '兩個','二代', '真的', '2020', '令人'])# 評論欄位分詞處理word_num = jieba.analyse.extract_tags(txt,topK=100,withWeight=True,allowPOS=)# 去停用詞word_num_selected = for i in word_num:if i[0] not in stop_words:word_num_selected.append(i)key_words = pd.DataFrame(word_num_selected, columns=['words','num'])
數據可視化
我們使用pyecharts進行數據可視化分析,安裝命令:pip install pyecharts。分析結果如下:
總體評分分布
有41.6%的人都給了1星,其次28.2%的人給了5星。15.4%的人給了2星。由此可見本劇的兩極分化特別嚴重,有些人特別喜歡給到了5星好評,同時覺得拍的很爛的也有不少。
代碼實現:
score_perc = df['rating'].value_counts / df['rating'].value_counts.sumscore_perc = np.round(score_perc*100,2)print(score_perc)# 繪製餅圖from pyecharts.charts import Piefrom pyecharts import options as optspie1 = Pie(init_opts=opts.InitOpts(width='1350px', height='750px'))pie1.add("",[*zip(score_perc.index, score_perc.values)],radius=["35%","70%"])pie1.set_global_opts(title_opts=opts.TitleOpts(title='總體評分分布'),legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%"),toolbox_opts=opts.ToolboxOpts)pie1.set_series_opts(label_opts=opts.LabelOpts(formatter="{c}%"))pie1.set_colors(['#D7655A', '#FFAF34', '#3B7BA9', '#EF9050', '#6FB27C'])pie1.render
評分熱度時間走勢
評分熱度主要集中在2月18日,也就是《完美關係》首播的那天,其次熱度不斷下降。
代碼實現:
df['comment_time'] = pd.to_datetime(df['comment_time'])df['comment_date'] = df['comment_time'].dt.datecomment_num = df['comment_date'].value_counts.sort_index# 折線圖from pyecharts.charts import Lineline1 = Line(init_opts=opts.InitOpts(width='1350px', height='750px'))line1.add_xaxis(comment_num.index.tolist)line1.add_yaxis('評論熱度', comment_num.values.tolist,areastyle_opts=opts.AreaStyleOpts(opacity=0.5),label_opts=opts.LabelOpts(is_show=False))line1.set_global_opts(title_opts=opts.TitleOpts(title='時間走勢圖'),toolbox_opts=opts.ToolboxOpts,visualmap_opts=opts.VisualMapOpts(max_=200))line1.render
評論用戶城市分布
觀看和評分人群主要集中在北上廣三地,其次是江蘇、四川等地。
代碼實現:
# 國內城市top10city_top10 = df['city_dealed'].value_counts[:12]city_top10.drop('國外', inplace=True)city_top10.drop('未填寫', inplace=True)# 條形圖from pyecharts.charts import Barbar1 = Bar(init_opts=opts.InitOpts(width='1350px', height='750px'))bar1.add_xaxis(city_top10.index.tolist)bar1.add_yaxis("城市", city_top10.values.tolist)bar1.set_global_opts(title_opts=opts.TitleOpts(title="評論者Top10城市分布"),visualmap_opts=opts.VisualMapOpts(max_=50),toolbox_opts=opts.ToolboxOpts)bar1.render
city_num = df['city_dealed'].value_countscity_num.drop('國外', inplace=True)city_num.drop('未填寫', inplace=True)from pyecharts.charts import Map# 地圖map1 = Map(init_opts=opts.InitOpts(width='1350px', height='750px'))map1.add("", [list(z) for z in zip(city_num.index.tolist, city_num.values.tolist)],maptype='china')map1.set_global_opts(title_opts=opts.TitleOpts(title='評論者國內城市分布'),visualmap_opts=opts.VisualMapOpts(max_=50),toolbox_opts=opts.ToolboxOpts)map1.render
評論詞雲
而在詞雲方面討論最多的就是「黃軒」和「佟麗婭」兩大主演了。
其次關於女配「陳數」的討論也很多,無論是陳數這次強大的職場新女性人設,還是驚豔幹練的職場穿搭都是很吸睛的。
然後對「演技」和「劇情」上的吐槽也不少。評價中「油膩」、「尷尬」、「狗血」等負面詞頻頻出現。
代碼實現:
# 詞雲圖from pyecharts.charts import WordCloudfrom pyecharts.globals import SymbolTypeword1 = WordCloud(init_opts=opts.InitOpts(width='1350px', height='750px'))word1.add("", [*zip(key_words.words, key_words.num)],word_size_range=[20, 200],shape=SymbolType.DIAMOND)word1.set_global_opts(title_opts=opts.TitleOpts('完美關係豆瓣短評詞雲圖'),toolbox_opts=opts.ToolboxOpts)word1.render
那麼《完美關係》你怎麼看呢?