数据入口:影视剧数据集 - Heywhale.com
读取的数据包含750条条目,分布在6个列中。以下是数据的列和它们的数据类型:
影视剧名称
(object):表示影视剧的名称。影视剧标签
(object):包含关于影视剧的标签信息,如类型、年份、主演等。弹幕数量
(object):表示影视剧的弹幕数量,需要注意的是这一列的数据类型为 object,可能是因为数值前有单位(例如“万条弹幕”)。热度
(int64):表示影视剧的热度,为一个整数数值。关键词描述
(object):包含关于影视剧的关键词描述。高清图片网址
(object):包含指向影视剧高清图片的网址。
一:数据预处理
数据概览如下:
首先读取数据,观察数据的大致情况:
import pandas as pd
# 读取上传的Excel文件
file_path = '影视剧信息.xlsx'
data_df = pd.read_excel(file_path)
data_df.info()
观测出“弹幕数量”有空值,所以可以去除含有空值的行:
# 删除含有空值的行
df1 = data_df.dropna(axis=0, how='any')
df1.info()
由于“弹幕数量”的单位存在不一致且“影视剧标签”含有多列,因此可以对这两列进行数据预处理。
由于大部分弹幕数量以万计,所以我们可以只提取含有“万条弹幕”的行,然后以“/”分隔符对影视剧标签进行分割:
# 筛选出“弹幕数量”中含有“万条弹幕”的行
df2 = df1[df1['弹幕数量'].str.contains('万条弹幕')]
# 提取“弹幕数量”中的数字
df2['弹幕数量'] = df2['弹幕数量'].str.replace('万条弹幕', '').astype(float)
# 分割"影视剧标签"列
df2[['影视剧类型', '年份', '主题', '演员']] = df2['影视剧标签'].str.split('/', expand=True)
随后分析2023年的影视剧并降序排列:
# 筛选年份为2023的行
filtered_df = df2[df2['年份'] == 2023]
# 按热度降序排列
sorted_df = filtered_df.sort_values(by='热度', ascending=False)
二:数据分析
1:影视剧主题分布
keyword_proportions = df2['影视剧类型'].value_counts(normalize=True)
keyword_proportions
得出比例较大的主题分布比例如下:
import matplotlib.pyplot as plt
# 设置 Matplotlib 的字体以支持中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
result_df = keyword_proportions.to_frame(name='关键词')
# 提取主题和关键词列
themes = result_df['主题']
keywords = result_df['关键词']
# 取前 10 行数据
top_10_data = result_df.head(10)
# 绘制柱形图
plt.bar(top_10_data['主题'], top_10_data['关键词'])
plt.xlabel('主题')
plt.ylabel('关键词')
plt.title('前 10 行主题关键词分布')
plt.xticks(rotation=90)
plt.show()
然后绘制前10行主题关键词分布图如下:
可以看出以“爱情”,“都市”,‘动作’,“真人秀”,“喜剧”为主题的影视剧占比较多。
2:弹幕数量与热度之间的相关性
from scipy.stats import pearsonr
# 提取“热度”和“弹幕数量”两列数据
heat = df2['热度']
bullet_count = df2['弹幕数量']
# 计算相关性
correlation, p_value = pearsonr(heat, bullet_count)
# 打印结果
print("相关性系数:", correlation)
print("p值:", p_value)
得出弹幕数量与热度的相关性系数与p值分别约为: 0.21和 4.47e-08。
这个结果表明 “热度” 和 “弹幕数量” 两列数据之间存在正相关关系,且相关性在统计上是显著的说明两者之间存在一定的正相关,但相关性不是很强。也就是说,一般情况下,热度较高的影视剧可能会有相对较多的弹幕数量,但这种关系并不是非常紧密。通常在统计学中,当 p 值小于某个显著性水平(如 0.05)时,我们认为结果具有统计学意义。这里的 p 值非常小,说明在给定的样本数据下,这种相关性具有一定的可靠性。
综上所述,这个结果说明 “热度” 和 “弹幕数量” 之间存在一定的正相关关系,但具体的关系强度还需要结合实际情况进行综合分析。
3:对关键词描述进行主题建模
import pandas as pd
from gensim import corpora
from gensim.models import LdaModel
# 提取"关键词描述"列
keywords = df2['关键词描述'].tolist()
# 数据预处理:分词、去除停用词等
stop_words = set(['的', '是', '在', '这', '一个', '有', '和', '了', '等']) # 自定义停用词列表
texts = [[word for word in keyword.split() if word not in stop_words] for keyword in keywords]
# 创建词典
dictionary = corpora.Dictionary(texts)
# 构建文档-词频矩阵
corpus = [dictionary.doc2bow(text) for text in texts]
# 训练LDA模型
lda_model = LdaModel(corpus, num_topics=5, id2word=dictionary, passes=10) # 设置主题数为5,可根据实际情况调整
# 打印主题
for topic_id, topic_words in lda_model.print_topics():
print(f"Topic {topic_id}: {topic_words}")
在上述代码中,首先进行了数据的预处理,包括分词和去除停用词。然后,使corpora.Dictionary
创建词典,将文本转换为词袋模型。接下来,使用LdaModel
进行主题建模,设置了主题数和迭代次数。最后,打印出每个主题的相关词汇。主题建模结果如下:
Topic 0: 0.034*"白鹿周深惊喜加盟" + 0.034*"兰强夫妇双向养成" + 0.034*"先婚后爱双向攻略" + 0.034*"最终季有情人终成眷属" + 0.034*"硬核谢苗打爆不平" + 0.034*"铁三角探寻终极之谜" + 0.034*"黄景瑜李沁共赴荣光" + 0.034*"张一山关晓彤青梅竹马" + 0.034*"天造地“色”烟火色" + 0.034*"陈晓毛晓彤携手赴江湖" Topic 1: 0.069*"IP沉浸式推理真人秀" + 0.035*"跨国追踪打击网络犯罪" + 0.035*"男团才艺竞演真人秀" + 0.035*"白敬亭宋轶先婚后爱" + 0.035*"倪家三代的离合悲欢" + 0.035*"草帽路飞伟大冒险" + 0.035*"黄景瑜杨祐宁正邪较量" + 0.035*"五哈旅行团再度启程" + 0.029*"夜市美食真人秀" + 0.029*"混沌之种逆转苍生" Topic 2: 0.032*"岳云鹏严浩翔历9弥新" + 0.032*"三世同堂谱写人间烟火" + 0.032*"高能反转的爱情博弈" + 0.032*"沈腾贾玲组队爆笑回归" + 0.032*"任嘉伦白鹿绝美虐恋" + 0.032*"沈腾千玺身陷局中局" + 0.032*"罗云熙白鹿半糖蜜恋" + 0.032*"黄子韬孙红雷强势回归" + 0.032*"原班人马爆笑回归" + 0.032*"赵丽颖演绎明兰传奇" Topic 3: 0.037*"阳光少年真实运营农场" + 0.037*"警弟匪兄黑白对决" + 0.037*"没心没肺,快乐加倍!" + 0.037*"双门洞胡同的温情故事" + 0.037*"邓超陈赫鹿晗人在囧途" + 0.037*"才冠绝伦" + 0.037*"麒麟才子" + 0.037*"郭涛梅婷还原时代爱情" + 0.037*"杨颖马天宇修仙情缘" + 0.037*"张译张颂文黑白较量" Topic 4: 0.034*"任嘉伦白鹿相伴此生" + 0.034*"你的专属电子榨菜" + 0.034*"谢苗东北扫黑除恶" + 0.034*"够狠,够勇,够巅峰" + 0.034*"同福客栈趣事多" + 0.034*"baby周深解锁奇幻之旅" + 0.034*"陈建斌陈晓联袂缉凶" + 0.034*"郭麒麟嫁给宋轶" + 0.034*"鞠婧祎郭俊辰三界情缘" + 0.034*"真相只有一个"
根据这个结果,可以看出主题建模将 “关键词描述” 一列的内容分为了四个主题:
- Topic 0:主要涉及一些具体的影视剧情节和角色关系,如 “兰强夫妇双向养成”“先婚后爱双向攻略”“张一山关晓彤青梅竹马” 等。
- Topic 1:包含了一些与综艺节目和影视剧类型相关的关键词,如 “IP 沉浸式推理真人秀”“男团才艺竞演真人秀”“跨国追踪打击网络犯罪” 等。
- Topic 2:涵盖了一些关于演员、角色和剧情的描述,如 “岳云鹏严浩翔历 9 弥新”“三世同堂谱写人间烟火”“任嘉伦白鹿绝美虐恋” 等。
- Topic 3:包括了一些与影视剧的整体特点和氛围相关的词汇,如 “阳光少年真实运营农场”“警弟匪兄黑白对决”“没心没肺,快乐加倍!” 等。
- Topic 4:涉及了一些具体的演员、角色和剧情元素,如 “任嘉伦白鹿相伴此生”“你的专属电子榨菜”“谢苗东北扫黑除恶” 等。
总的来说,这个主题建模的结果展示了 “关键词描述” 一列中存在的一些潜在主题和相关词汇的分布情况,可以帮助我们更好地理解这些关键词所代表的内容和意义。
想要探索多元化的数据分析视角,可以关注之前发布的相关内容。