机器学习系列(2)_数据分析之Kaggle电影TMDB5000(下)

简介: 机器学习系列(2)_数据分析之Kaggle电影TMDB5000

四、 Universal和Paramount两家影视公司的对比情况如何?



# 对比两家电影公司的电影发行情况
# 对电影公司的数据进行整理
moviesdf['prodcompanies']=moviesdf['production_companies'].apply(json.loads)
moviesdf['prodcompany']=moviesdf['prodcompanies'].apply(decode) # 用到上面定义的函数
moviesdf.head()
moviesdf['Universal']=moviesdf['prodcompany'].str.contains('Universal Pictures').apply(lambda x:i if x else 0)
moviesdf['Paramount']=moviesdf['prodcompany'].str.contains('Paramount Pictures').apply(lambda x:i if x else 0)
moviesdf.tail()
a=moviesdf['Universal'].sum()
b=moviesdf['Paramount'].sum()
dict_companies={'Universal':a,'Paramount':b}
dict_companies
companies_number=pd.Series(dict_companies)
companies_number.plot(kind='pie',label='',autopct='%11.1f%%')

4de25356db164501b042938fb26e7010.png

company=moviesdf[['Universal','Paramount']]
company.index=moviesdf['releaseyear']
companydf=company.groupby('releaseyear').sum()
companydf.head()
plt.figure(figsize=(10,7))
plt.plot(companydf,label=companydf.columns)
7eebdd79979b4f5a95582f115ecc7bd0.png

五、 改编电影和原创电影以及评分情况如何



# 通过keywords字段,分割改编电影与原创电影的对比
# 分析:在keywords字段中,如果存在based on novel 则说明电影改编自小说
moviesdf['keywds']=moviesdf['keywords'].apply(json.loads)
moviesdf['keywds2']=moviesdf['keywds'].apply(decode)
# 标注是否为基于小说改编的电影
a='based on novel'
moviesdf['if_original']=moviesdf['keywds2'].str.contains(a).apply(lambda x:'no original' if x else 'original')
moviesdf['if_original'].value_counts()
# moviesdf.head(2)
original_profit=moviesdf[['if_original','budget','revenue','profit']]
original_profit_mean=original_profit.groupby(by='if_original').mean()
original_profit_mean.head()
plt.figure(figsize=(12,9))
original_profit_mean.plot(kind='bar')
plt.title('原创电影与改编电影的预算,收入,利润比较')
plt.xlabel('原创与改编')
plt.ylabel('现金流')
plt.xticks(rotation=0)

8700ce57766c48e99a5f543da327fa3c.png


六、 电影时长与电影票房以及评分的关系



# 电影的runtime与票房,评分之间的关系
moviesdf.plot(kind='scatter',x='runtime',y='revenue',figsize=(10,7))
plt.title('电影时长与票房的关系',fontsize=15)
plt.xlabel('时长(分钟)',fontsize=15)
plt.ylabel('票房收入',fontsize=15)
e7091216502b464e84c2d2c253473fda.png
# 电影的时长与评分之间的关系
moviesdf.plot(kind='scatter',x='runtime',y='vote_average',figsize=(10,7))
plt.title('电影时长与评分之间的关系',fontsize=15)
plt.xlabel('时长(分钟)',fontsize=15)
plt.ylabel('评分',fontsize=15)

0d63d1d0b02c468ea62e94ce03ade68b.png


七、 分析电影关键字



1、根据jieba生成词频计算


# 电影关键字词频计算和词云生成
keywords_list=[]
for i in moviesdf['keywds2']:
    keywords_list.append(i)
#     keywords_list=list(keywords_list)
lis=''.join(keywords_list)
lis.replace('\'s','')
lis
# 根据电影关键词生成词频计算
import jieba
words=jieba.lcut(lis)
counts={}
mytext_list=[]
for word in words:
    if len(word)==1: # 单个分词不需要
        continue 
    else:
        counts[word]=counts.get(word,0)+1
        mytext_list.append(word.replace(" ",""))
cloud_text=','.join(mytext_list)
# print(cloud_text)
items=list(counts.items())
items.sort(key=lambda x:x[1],reverse=True)
for i in range(100):
    word,countsnt=items[i]
    print("{0:<10}{1:>5}".format(word,count))

4a31681f07dd4401805cb940a68cc809.png


cd09ee04641f4377b1a6d92b9cdc5cc0.png

from PIL import Image  #需要下载安装PIL包
import numpy as np
from wordcloud import WordCloud, ImageColorGenerator
from matplotlib import pyplot as plt
import pandas as pd 
# 简单生成词云
wc=WordCloud(
    background_color='black',
    max_words=2000,
    max_font_size=100,
    min_font_size=10,
    random_state=12
)
wc.generate(lis)
plt.figure(figsize=(12,9))
plt.imshow(wc)
plt.axis('off')
plt.show()

4a44dfae7fa3405ea90fb5670b961d97.png


2、根据pkuseg生成词频计算


# 安装pkuseg
!pip install pkuseg
#调用北大算法和jieba算法得到的结果对于英文来说基本相同,但对于中文来说pkuseg会更加准确
#根据电影关键词生成词频计算 北大算法pkuseg
# 根据电影关键词生成词频计算
import pkuseg
seg=pkuseg.pkuseg()
words=seg.cut(lis) # 与jieba的区别主要是调用的算法不同
counts={}
mytext_list=[]
for word in words:
    if len(word)==1: # 单个分词不需要
        continue 
    else:
        counts[word]=counts.get(word,0)+1
        mytext_list.append(word.replace(" ",""))
cloud_text=','.join(mytext_list)
# print(cloud_text)
items=list(counts.items())
items.sort(key=lambda x:x[1],reverse=True)
for i in range(100):
    word,count=items[i]
    print("{0:<20}{1:>5}".format(word,count))


八、分析演员的关联度(社会网络计算)



88e82dc56efa4405a2b3a4d23afd1598.png

# 分析演员的关联度(社会网络计算) 
moviesdf['actorsls']
actors_list=[]
actorsforcut=[]
# 将每部电影的演员放在列表当中
for i in moviesdf['actorsls']:
    actors_list.append(i.split(','))
# 将演员列表中的对象放置到为分割而设置的另一个列表
for k in range(0,len(actors_list)):
    for j in range(len(actors_list[k])):
        actorsforcut.append(actors_list[k][j])
actors_list=''.join(actorsforcut)
actors_list


此时生成的actors_list[0:100]


55146f03abdf42a6b1e43842f2097dd0.png

wc=WordCloud(
    background_color='black',
    max_words=2000,
    max_font_size=100,
    min_font_size=10,
    random_state=12
)
wc.generate(actors_list)
plt.figure(figsize=(12,9))
plt.imshow(wc)
plt.axis('off')
plt.show()

此时生成的词云是不完整的

88708395566043b6851e407fee06d156.png

改进方法:变换词云的结构:

# 改进方案:
# 分析演员的关联度(社会网络计算) 
moviesdf['actorsls']
actors_list=[]
actorsforcut=[]
# 将每部电影的演员放在列表当中
for i in moviesdf['actorsls']:
    actors_list.append(i.split(','))
# 将演员列表中的对象放置到为分割而设置的另一个列表
for k in range(0,len(actors_list)):
    for j in range(len(actors_list[k])):
        actorsforcut.append("'"+actors_list[k][j]+"'") # 在这里对每个人的姓名前后都加上单引号
actors_list=','.join(actorsforcut)
actors_list[0:100]


此时生成的actors_list[0:100]

54384e50d4484d508f3d287e4a11267b.png

6edc7e63833b425280d7fb98a8c23e95.png

将演员中间的空格去除,并合并为一个整体

# 如何将演员中间的空格去除,并合并为一个整体
movieactorsdfv2=moviesdf['actorsls'].apply(lambda x:''.join(x.split())).replace()
movieactorsdfv2.head(2)
movieactorsdfv2.to_csv('actors.txt',index=False,header=False)
# 读取数据并加载字典
with open('actors.txt',encoding='utf-8-sig') as f:
    actorstxt=f.readlines()
# 此处的actors_forcut是手工查找替换单引号等完成的,在进行DF转换中可以直接处理
jieba.load_userdict("actors_forcut")
actorsforcut
actorsdf=pd.DataFrame(actorsforcut).drop_duplicates()
actorsdf[0]=actorsdf[0].apply(lambda x:''.join(x.split())).replace() # 将中间的空格删除
# 此时拿到了完整的人物列表
actorsdf[0]=actorsdf[0].apply(lambda x:''.join(x.split('\''))).replace() # 将姓名两边的单引号去除
actorsdf['']='nr'
actorsdf.to_excel('actorsdf.xlsx',index=False)
actorsdf.head()
movieactorsdfv2=pd.DataFrame(moviesdf['actorsls'])
movieactorsdfv2.head(5)

36d1277746a2456898c05803fb114f97.png

思路:如果我们按照actorsdf去寻找movieactorsdfv2,只要在电影里面找到了演员的名字,则在对应的actorsdf上面加一,就能知道哪些演员演过的电影最多。并且还可以将不同演员之间建立关系,最后使用pyechart进行可视化。

相关文章
|
1月前
|
机器学习/深度学习 数据采集 数据挖掘
实战派教学:掌握Scikit-learn,轻松实现数据分析与机器学习模型优化!
【10月更文挑战第4天】Scikit-learn凭借高效、易用及全面性成为数据科学领域的首选工具,简化了数据预处理、模型训练与评估流程,并提供丰富算法库。本文通过实战教学,详细介绍Scikit-learn的基础入门、数据预处理、模型选择与训练、评估及调优等关键步骤,助你快速掌握并优化数据分析与机器学习模型。从环境搭建到参数调优,每一步都配有示例代码,便于理解和实践。
83 2
|
6天前
|
机器学习/深度学习 数据采集 搜索推荐
利用Python和机器学习构建电影推荐系统
利用Python和机器学习构建电影推荐系统
20 1
|
19天前
|
机器学习/深度学习 并行计算 数据挖掘
R语言是一种强大的统计分析工具,广泛应用于数据分析和机器学习领域
【10月更文挑战第21天】R语言是一种强大的统计分析工具,广泛应用于数据分析和机器学习领域。本文将介绍R语言中的一些高级编程技巧,包括函数式编程、向量化运算、字符串处理、循环和条件语句、异常处理和性能优化等方面,以帮助读者更好地掌握R语言的编程技巧,提高数据分析的效率。
38 2
|
1月前
|
机器学习/深度学习 算法 数据挖掘
从零到精通:Scikit-learn在手,数据分析与机器学习模型评估不再难!
【10月更文挑战第4天】在数据科学领域,模型评估是连接理论与实践的桥梁,帮助我们理解模型在未知数据上的表现。对于初学者而言,众多评估指标和工具常令人困惑。幸运的是,Scikit-learn 这一强大的 Python 库使模型评估变得简单。本文通过问答形式,带你逐步掌握 Scikit-learn 的评估技巧。Scikit-learn 提供了丰富的工具,如交叉验证、评分函数(准确率、精确率、召回率、F1 分数)、混淆矩阵和 ROC 曲线等。
36 1
|
2月前
|
机器学习/深度学习 算法 数据挖掘
Python数据分析革命:Scikit-learn库,让机器学习模型训练与评估变得简单高效!
在数据驱动时代,Python 以强大的生态系统成为数据科学的首选语言,而 Scikit-learn 则因简洁的 API 和广泛的支持脱颖而出。本文将指导你使用 Scikit-learn 进行机器学习模型的训练与评估。首先通过 `pip install scikit-learn` 安装库,然后利用内置数据集进行数据准备,选择合适的模型(如逻辑回归),并通过交叉验证评估其性能。最终,使用模型对新数据进行预测,简化整个流程。无论你是新手还是专家,Scikit-learn 都能助你一臂之力。
129 8
|
2月前
|
机器学习/深度学习 数据可视化 数据挖掘
数据可视化大不同!Python数据分析与机器学习中的Matplotlib、Seaborn应用新视角!
在数据科学与机器学习领域,数据可视化是理解数据和优化模型的关键。Python凭借其强大的可视化库Matplotlib和Seaborn成为首选语言。本文通过分析一份包含房屋面积、卧室数量等特征及售价的数据集,展示了如何使用Matplotlib绘制散点图,揭示房屋面积与售价的正相关关系;并利用Seaborn的pairplot探索多变量间的关系。在机器学习建模阶段,通过随机森林模型展示特征重要性的可视化,帮助优化模型。这两个库在数据分析与建模中展现出广泛的应用价值。
48 2
|
3月前
|
数据采集 机器学习/深度学习 算法
"揭秘数据质量自动化的秘密武器:机器学习模型如何精准捕捉数据中的‘隐形陷阱’,让你的数据分析无懈可击?"
【8月更文挑战第20天】随着大数据成为核心资源,数据质量直接影响机器学习模型的准确性和效果。传统的人工审查方法效率低且易错。本文介绍如何运用机器学习自动化评估数据质量,解决缺失值、异常值等问题,提升模型训练效率和预测准确性。通过Python和scikit-learn示例展示了异常值检测的过程,最后强调在自动化评估的同时结合人工审查的重要性。
90 2
|
3月前
|
机器学习/深度学习 搜索推荐 数据挖掘
【深度解析】超越RMSE和MSE:揭秘更多机器学习模型性能指标,助你成为数据分析高手!
【8月更文挑战第17天】本文探讨机器学习模型评估中的关键性能指标。从均方误差(MSE)和均方根误差(RMSE)入手,这两种指标对较大预测偏差敏感,适用于回归任务。通过示例代码展示如何计算这些指标及其它如平均绝对误差(MAE)和决定系数(R²)。此外,文章还介绍了分类任务中的准确率、精确率、召回率和F1分数,并通过实例说明这些指标的计算方法。最后,强调根据应用场景选择合适的性能指标的重要性。
422 0
|
6月前
|
机器学习/深度学习 存储 搜索推荐
利用机器学习算法改善电商推荐系统的效率
电商行业日益竞争激烈,提升用户体验成为关键。本文将探讨如何利用机器学习算法优化电商推荐系统,通过分析用户行为数据和商品信息,实现个性化推荐,从而提高推荐效率和准确性。
239 14
|
6月前
|
机器学习/深度学习 算法 搜索推荐
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)