python电影分析_用Python解读分析《爱情公寓》电影版

'Connection':'keep-alive'

}

cookies = '_lxsdk_cuid=1651950e6dfc8-02b4e01b2f82ec-6b1b1279-100200-1651950e6dfc8; _lxsdk=FA2EEC709AFE11E883FE1F23FDF

D6ADBB39CE732DF384D9DADFD1909B110AD64; v=3; _lx_utm=utm_source%3DBaidu%26utm_medium%3Dorganic; __mta=121983668.153372

8057235.1533731802598.1533731803845.10'

cookie = {}

forline incookies.split(';'):

name, value = cookies.strip().split('=', 1)

cookie[name] = value

love_apartment = pd.DataFrame(columns=['data','score','city','comment','nick'])

fori inrange(0,1000):

j = random.randint(1,1000)

print(str(i)+' '+str(j))

try:

time.sleep(2)

url = 'https://m.maoyan.com/mmdb/comments/movie/1175253.json?_v_=yes&offset='+str(j)

html = requests.get(url=url, cookies=cookie,headers=header).content

data = json.loads(html.decode('utf-8'))['cmts']

foritem indata:

love_apartment = love_apartment.append({'data':item['time'].split(' ')[0],'city':item['cityName'],

'score':str(item['score']),'comment':item['content'],'nick':item['nick']},

ignore_index=True)

love_apartment.to_csv('爱情公寓.csv',index=False)

except:

continue

数据获取的最大的难点就是猫眼电影短评的api,如果直接在电脑上用浏览器是获取不到api的,本次采用的是利用手机,UC,Fiddler软件对网站的url、header及cookie进行获取,具体网址:

https://blog.csdn.net/shimengran107/article/details/78644862

另外这回也是第一次尝试pandas,所以也费了不少时间去学习,附上相关网址:

https://blog.csdn.net/liufang0001/article/details/77856255/

获得数据表如下:

这里遇到比较多问题就是编码问题,生成的CSV文件会出现乱码,有两种方法,我选择的是CSV转为Excel,附上相关解决方案的网址:

https://blog.csdn.net/lht_okk/article/details/54929103

https://blog.csdn.net/erinalees/article/details/78862011

基本上数据获取就完成了,电影短评截止到现在大概有7万条,我利用Python的随机函数获取了其中的1千条左右(我也不知道为什么这么少...,有待考究,可是1千多条的数据清除无效地图城市也花了不少时间),然后进行数据分析,详情请见后文。

PART2:数据分析

首先附上图表神器pyecharts的技术文档的网址:http://pyecharts.org/#/zh-cn/charts

这里主要是使用其中的HeatMap(热力图)、Bar(柱状图/条形图)、Line(折线/面积图)、Geo(地理坐标系)、Overlap 类。

词云生成wordcloud使用网址:

https://blog.csdn.net/fly910905/article/details/77763086

这里遇到最大的障碍就是Pycharm导入pyecharts库、wordcloud库失败,至于为什么也是不懂。无奈只好通过相关网站下载.whl格式的安装包,在文件夹环境下安装库,可以成功使用。

上篇的pandas也在这里有应用,主要是涉及对数据表的排序、计算处理。主要的函数就是groupby和agg,groupby可以理解为基于行操作(对相同行进行归类),agg则是基于列的(统计列的平均值和数量)。

importpandas aspd

frompyecharts importBar, Line,Overlap,Geo

importjieba

fromwordcloud importWordCloud,ImageColorGenerator

importmatplotlib.pyplot asplt

fromcollections importCounter

love_apartment_com = pd.read_excel('爱情公寓.xlsx',encoding='utf-8')

grouped = love_apartment_com.groupby(['city'])

grouped_pct = grouped['score']

city_com = grouped_pct.agg(['mean', 'count'])

city_com.reset_index(inplace=True)

city_com['mean'] = round(city_com['mean'], 2)

data = [(city_com['city'][i], city_com['count'][i]) fori inrange(0, city_com.shape[0])]

geo = Geo('《爱情公寓》全国热力图', title_color="#fff",title_pos="center", width=1200, height=600, background_color='#404a59')

attr, value = geo.cast(data)

geo.add("", attr, value, type="heatmap", is_visualmap=True, visual_range=[0, 20],visual_text_color="#fff")

geo.render('爱情公寓全国观影图.html')

在做第一张图表的时候,出现最大的问题就是pyecharts地图资源不全面,所以只好自己慢慢对Excel表筛除无效数据,着实是费了不少时间。从图中看出来,内陆确实人烟稀少,长三角,珠三角,沿海,北京,重庆都是金钱大佬,毕竟能去看电影,评得起分......

city_main = city_com.sort_values('count',ascending=False)[0:20]

attr = city_main['city']

v1 = city_main['count']

v2 = city_main['mean']

line = Line("主要城市评分")

line.add("城市", attr, v2, is_stack=True, xaxis_rotate=30, yaxis_min=0, mark_point=["max", "min"], xaxis_interval=0,

line_color='lightblue', line_width=4, mark_point_textcolor='black', mark_point_color='lightblue', is_splitline_show=False)

bar = Bar("主要城市评论数")

bar.add("城市", attr, v1, is_stack=True, xaxis_rotate=30, yaxis_min=0, xaxis_interval=0, is_splitline_show=False)

overlap = Overlap()

overlap.add(bar)

overlap.add(line, yaxis_index=1, is_add_yaxis=True)

overlap.render('主要城市评分and评论数.html')

这边少了折线图y轴坐标的注释,明明程序里是有添加的,但是不知为何没有显示,我对城市其实没多大兴趣,主要想看就是电影评分,不过总的来说确实分低,也许这就是卖弄情怀的结果,欺骗了广大观众朋友的感情。

city_score = city_main.sort_values('mean',ascending=False)[0:20]

attr = city_score['city']

v1 = city_score['mean']

line = Line('爱情公寓主要城市评分')

line.add("城市", attr, v1, is_stack=True, xaxis_rotate=30, yaxis_min=0, mark_point=["min", "max"], xaxis_interval=0,

line_color='lightblue', line_width=4, mark_point_textcolor='black', mark_point_color='lightblue', is_splitline_show=True)

line.render('爱情公寓主要城市评分.html')

最高:4.36分,最低:2.21分,数据收集的不少,应该还算可靠。

city_score_area = city_com.sort_values('count',ascending=False)[0:30]

city_score_area.reset_index(inplace=True)

data = [(city_score_area['city'][i], city_score_area['mean'][i]) fori inrange(0, city_score_area.shape[0])]

geo = Geo('《爱情公寓》全国打分图', title_color="#fff",title_pos="center", width=1200, height=600, background_color='#404a59')

attr, value = geo.cast(data)

geo.add("", attr, value, visual_range=[0, 5],visual_text_color="#fff", symbol_size=15, is_visualmap=True,is_roam=False)

geo.render('爱情公寓全国打分图.html')

一片黄颜色的点点,评分大多在中间段

love_apartment_str = ' '.join(love_apartment_com['comment'])

words_list = []

word_generator = jieba.cut_for_search(love_apartment_str)

forword inword_generator:

words_list.append(word)

words_list = [k fork inwords_list iflen(k)>1]

back_color = plt.imread('爱心.jpg')

wc = WordCloud(background_color='white',

mask=back_color,

font_path='C:WindowsFontsSTZHONGS.TTF',

max_words=2000,

max_font_size=250,

random_state=30,

)

love_apartment_count = Counter(words_list)

wc.generate_from_frequencies(love_apartment_count)

image_colors = ImageColorGenerator(back_color)

plt.figure()

plt.imshow(wc.recolor(color_func=image_colors))

plt.axis('off')

print('生成词云成功!')

wc.to_file('love_apartment.jpg')

生成的词云如下:

怎么说呢,一开始看跑男的节目的时候还以为有点搞头,慢慢的时间越长名堂也越来越明显了,网上的评论也是吐槽不少,不过这也不是我该操心的事了。

十年青春,说过就过,依稀还记得里面的一句台词:人生没有彩排,每一天都是现场直播。共勉!

-END-

转载声明:本文转载自「Python中文社区」,搜索「python-china」即可关注

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值