
Python对电影Top250并进行数据分析
由于CSDN审核机制,导致原文章无法发出,故修改了相关词汇,并改为两篇问章发布。利用Python对电影进行获得,收集相关的信息,并且利用Python进行数据分析,获取’排名’,‘电影名称’,‘导演’,‘上映年份’,‘制作国家’,‘类型’,‘评分’,‘评价分数’,'短评’等字段,探索相关的数据。
由于CSDN审核机制,导致原文章无法发出,故修改了相关词汇,并改为两篇问章发布。数据获取的链接:https://blog.csdn.net/qq_45176548/article/details/127735268
数据分析
获取数据后,就可以对自己感兴趣的内容进行分析了
数据预处理
from matplotlib import pyplot as plt
import pandas as pd
df = pd.read_excel("Top250.xlsx",index_col=False)
df.head()
- 上映年份格式不统一
year = []
for i in df["上映年份"]:
i = i[0:4]
year.append(i)
df["上映年份"] = year
df["上映年份"].value_counts()
x1 = list(df["上映年份"].value_counts().sort_index().index)
y1 = list(df["上映年份"].value_counts().sort_index().values)
y1 = [str(i) for i in y1]
上映年份分布
最后的.render('.html')
会创建一个html的文件,图表就在其中,如果你在jupyter下运行的代码,可以改为.render_notebook()
from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.faker import Faker
c1 = (
Bar()
.add_xaxis(x1)
.add_yaxis("影片数量", y1)
.set_global_opts(
title_opts=opts.TitleOpts(title="Top250年份分布"),
datazoom_opts=opts.DataZoomOpts(),
)
.render("上映年份.html")
)
c1
-
这里可以看出电影TOP250里,电影的上映年份,多分布于80年代以后。其中有好几年是在10部及以上的。
-
从年份的分布情况看,大部分高分电影都上映在 1987 年之后,并且随着时间逐渐增加,而近两年的高分电影的数量相对比较少。
评分分布情况
plt.figure(figsize=(10,6))
plt.hist(list(df["评分"]),bins=8,facecolor="blue", edgecolor="black", alpha=0.7)
plt.show()
-
从上图分析,随着评分升高,排名也基本靠前,评分主要集中在 8.4~9.2 之间。同时可以通过 pandas 计算平均数,众数和相关系数,平均分为 8.83 分,众数为 8.7 分,而相关系数为 -0.6882,评分与排名强相关。
-
大多分布于「8.5」到「9.2」之间。最低「8.3」,最高「9.6」
排名与评分分布情况
plt.figure(figsize=(10,5), dpi=100)
plt.scatter(df.index,df['评分'])
plt.show()
总的来说,排名越靠前,评价人数越多,并且分数也越高。
评论人数TOP10
df1 = df.sort_values(by="评价分数",ascending=False).head(10)
c2 = (
Bar()
.add_xaxis(df1["电影名称"].to_list())
.add_yaxis("评论数", df1["评价分数"].to_list(),color=Faker.rand_color())
.reversal_axis()
.set_series_opts(label_opts=opts.LabelOpts(position="right"))
.set_global_opts(title_opts=opts.TitleOpts(title="电影评论Top10"))
.render("评论人数TOP10.html")
)
c2
让我们来看看人气最高的有哪些影片,你又看过几部呢?
导演排名
可以看到这些导演很🐂呀
电影类型图
from collections import Counter
colors = ' '.join([i for i in df[ '类型']]).strip().split()
c = dict(Counter(colors))
f = zip(c.keys(), c.values())
words = sorted(f)
print(c)
发现有个错误值,1978(中国大陆),删除即可
d = c.pop('1978(中国大陆)')
my_df = pd.DataFrame(c,index=['数量']).T.sort_values(by='数量',ascending=False)
my_df
数量 | |
---|---|
剧情 | 184 |
喜剧 | 55 |
爱情 | 55 |
冒险 | 44 |
犯罪 | 43 |
奇幻 | 39 |
动画 | 34 |
惊悚 | 34 |
动作 | 33 |
悬疑 | 31 |
科幻 | 22 |
家庭 | 22 |
战争 | 16 |
传记 | 15 |
古装 | 9 |
历史 | 8 |
同性 | 8 |
音乐 | 7 |
歌舞 | 5 |
儿童 | 5 |
武侠 | 4 |
纪录片 | 4 |
西部 | 3 |
灾难 | 2 |
情色 | 2 |
恐怖 | 2 |
运动 | 1 |
题外话:对于删除字典的值有以下方法
方法一 pop(key[,default])
d = {'a':1,'b':2,'c':3}
# 删除key值为'a'的元素,并赋值给变量e1
e1 = d.pop('a')
print(e1)
# 如果key不存在,则可以设置返回值
e2 = d.pop('m','404')
print(e2)
# 如果key不存在,不设置返回值就报错
e3 = d.pop('m')
方法二 del[d[key]]
d = {'a':1,'b':2,'c':3}
# 删除给定key的元素
del d['a']
print(d)
# 删除不存在的元素
del d['m']
clear一次性删除所有字典元素
d = {'a':1,'b':2,'c':3}
print(d)
# 删除所有元素,允许d为{}
d.clear()
print(d)
题外话结束,分割
统计展示,
绘制词云图
c3 = (
WordCloud()
.add(
"",
words,
word_size_range=[20, 100],
textstyle_opts=opts.TextStyleOpts(font_family="cursive"),
)
.set_global_opts(title_opts=opts.TitleOpts(title="WordCloud-自定义文字样式"))
.render("电影类型词云图.html")
)
c3
## https://blog.csdn.net/qq_45176548/article/details/112735850
就可以清楚的看到,Top250的电影的类别
到这里就结束了,如果对你有帮助,欢迎点赞关注评论,你的点赞对我很重要
更多推荐
所有评论(0)