python电影数据分析报告-电影数据可视化项目分析报告_第1页
python电影数据分析报告-电影数据可视化项目分析报告_第2页
python电影数据分析报告-电影数据可视化项目分析报告_第3页
python电影数据分析报告-电影数据可视化项目分析报告_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

python电影数据分析报告_电影数据可视化项⽬分析报告代码部分导⼊模块这⾥除了基础模块意外,主要介绍可视化模块即matplotlib和seaborn。matplotlib是常⽤的数据可视化模块,主要是做散点图,线形图和柱状图等。seaborn主要做热图,这篇⽂章(机器学习之泰坦尼克号存活预测)中的相关性的可视化。importjsonimportpandasaspdimportnumpyasnp#数据可视化importmatplotlib.pyplotaspltimportplotly.offlineaspyo#⽤不好,运⾏没有效果放到最后待后续解决importseabornassns%matplotlibinlinefromwordcloudimportWordCloud导⼊数据这⾥导⼊的数据是由Kaggle提供的TMDB的5000部电影相关信息,在编码的时候为了后边处理⽅便我们将时间的格式进⾏了处理,并删除了⽆⽤的和重复的信息。credits_file='.../tmdb_5000_credits.csv'movies_file='.../tmdb_5000_movies.csv'credits=pd.read_csv(credits_file,encoding='utf-8')movies=pd.read_csv(movies_file,parse_dates=['release_date'])#删除⽆⽤信息full.drop('status',axis=1,inplace=True)full.drop('tagline',axis=1,inplace=True)full.drop('overview',axis=1,inplace=True)填补缺失值因为数据⽐较完整,所以仅针对其运⾏时间进⾏填补即可。这⾥我直接查找了两部电影的播放时长,逐⼀进⾏填补。#填充runtime缺失值,分别填写94.0和240.0values1={'runtime':94.0}values2={'runtime':240.0}full.fillna(value=values1,limit=1,inplace=True)full.fillna(value=values2,limit=1,inplace=True)提取特征值

因为这⾥的数据是从TMDB官⽹上直接爬取下来的数据,很多信息都是以⽹页代码的形式出现的,我们需要对其进⾏解析,这⾥主要中的就是json的⽅法进⾏解析。json_cols='cast','crew','genres','keywords','production_companies','production_countries','spoken_languages'forcinjson_cols:full[c]=full[c].map(json.loads)defvalue_update(s,d,idxes):foridxinidxes:d[idx]=s[idx]defcalculate_json_col(row,src_col,kept_cols):df=Noneifrow[src_col]:df=pd.DataFrame.from_records(row[src_col])else:df=pd.DataFrame()ifkept_cols:value_update(row,df,kept_cols)returndfdefcollect_json_col(src_df,src_col,kept_cols):returnpd.concat(map(lambdax:calculate_json_col(src_df.loc[x],src_col,kept_cols),src_df.index),axis=0,ignore_index=True)上述代码就是利⽤⾃定义函数的⽅法,将cast等信息进⾏json解析。下⾯就是提取这些信息并删除原有的信息。kept_cols=['title','movie_id']cast_df=collect_json_col(full,'cast',kept_cols)crew_df=collect_json_col(full,'crew',kept_cols)genres_df=collect_json_col(full,'genres',kept_cols)keywords_df=collect_json_col(full,'keywords',kept_cols)production_companies_df=collect_json_col(full,'production_companies',kept_cols)spoken_languages_df=collect_json_col(full,'spoken_languages',kept_cols)production_countries_df=collect_json_col(full,'production_countries',kept_cols)son_cols=['production_countries','spoken_languages','production_companies','keywords','genres','crew','cast']full.drop(json_cols,axis=1,inplace=True)数据可视化

⾸先对电影风格进⾏数据可视化,因为⼀般⼀个电影有很多的电影风格,如喜剧,惊悚等,我们直接对其进⾏分类并统计,饼状图和柱状图更能体现其占⽐。在数据可视化中,除特殊表达⽅法,⼀般柱状图是由最⾼⾄最低顺序排列。这⾥主要就是利⽤matplotlib包进⾏绘制饼状图和柱状图。genres_catl=genres_df['name'].value_counts()genres_catl=genres_catl/genres_catl.sum()others=0.01genres_catl_=genres_catl[genres_catl>=others]genres_catl_['Other']=genres_catl[genres_catlexplode=(genres_catl_<=0.02)/20+0.05genres_catl_.plot(kind='pie',label='',startangle=50,shadow=False,figsize=(10,10),autopct="%1.1f%%",explode=explode)其次电影产地,这⾥我主要采⽤饼状图,因为柱状图会显得USA特别的⾼,不如饼状图美观。#电影产地ct_catl=production_countries_df['name'].value_counts()ct_catl=ct_catl/ct_catl.sum()others=0.04ct_catl_=ct_catl[ct_catl>=others]ct_catl_['Other']=ct_catl[ct_catlexplode=np.zeros(len(ct_catl_))+0.05ct_catl_.plot(kind='pie',explode=explode,autopct="%1.1f%%",figsize=(10,10),label='',startangle=120,shadow=False)对于年份,要先进⾏预处理,⾸先选取年份这个数值,利⽤函数对其处理改成年代,再进⾏数据可视化分析。#电影年份full['release_year']=full['release_date'].dt.yearfull['release_month']=full['release_date'].dt.month.fillna(0)full['decade']=full['release_year'].apply(lambdax:((x-1900)//10)*10)defget_stats(gr):return{'min':gr.min(),'max':gr.max(),'count':gr.count(),'mean':gr.mean()}test=full['release_year'].groupby(full['decade']).apply(get_stats).unstack()sns.set_context("poster",font_scale=0.85)deflabel(s):val=(1900+s,s)[s<100]chaine=''ifs<50else"{}'s".format(int(val))returnchaineplt.rc('font',weight='bold')

f,ax=plt.subplots(figsize=(11,6))labels=[label(s)forsintest.index]sizes=test['count'].valuesexplode=[0.2ifsizes[i]<100else0.01foriinrange(11)]ax.pie(sizes,explode=explode,labels=labels,autopct=lambdax:'{:1.0f}%'.format(x)ifx>1else'',shadow=False,startangle=0)ax.axis('equal')ax.set_title('按照年代划分',bbox={'facecolor':'k','pad':5},color='w',fontsize=16);full.drop('decade',axis=1,inplace=True)关键字⽐较多,⽆论柱状图还是饼状图都难以表现出来,所以这⾥⽤照⽚墙来体现这部分内容更加的美观。这⾥⽤的就是wordcloud包来数据可视化。#照⽚墙wc=WordCloud(background_color='white',max_words=2000,random_state=1).\generate_from_frequencies(keywords_df['name'].value_counts().to_dict())plt

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论