电影数据分析

import json

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

import warnings

warnings.filterwarnings('ignore')  #忽略python运行过程中的警告错误

credits=pd.read_csv(r'C:\Users\lenovo\Desktop\tmdb\tmdb_5000_credits.csv')

movies=pd.read_csv(r'C:\Users\lenovo\Desktop\tmdb\tmdb_5000_movies.csv')

fulldf=pd.concat([credits,movies],axis=1) #合并数据集

moviesdf=fulldf[['original_title','crew','release_date','genres','keywords','production_companies','production_countries','revenue','budget',

                'runtime','vote_average']]  #选区子集

moviesdf['profit']=moviesdf['revenue']-moviesdf['budget']#增加一列利润

#moviesdf.info()

#moviesdf[moviesdf['runtime'].isnull()]

moviesdf['release_date']=moviesdf['release_date'].fillna('2004-6-1')  #填充空值

moviesdf['release_date']=pd.to_datetime(moviesdf['release_date'],format='%Y-%m-%d') #转时间类型

moviesdf.fillna(value={'runtime':98.0},inplace=True,limit=1)

moviesdf.fillna(value={'runtime':81.0},inplace=True,limit=1) #字符串索引必须为整数

moviesdf['genres']=moviesdf['genres'].apply(json.loads) #把json转为dict, apply默认遍历一行或多行

def decode(column):

    li=[]

    for i in column:

        li.append(i['name'])

    return ' '.join(li)  #将列表中元素用空格连接起来生成一个新的字符串

moviesdf['genres']=moviesdf['genres'].apply(decode)

#提取电影类型

genres_list=set()  #去重

for i in moviesdf['genres']:

    for j in i.split(' '):

        genres_list.add(j)

genres_list.remove('')

for i in genres_list:

    moviesdf[i]=moviesdf['genres'].str.contains(i).apply(lambda x:1 if x else 0) #将序列转换为字符串

moviesdf['release_date']=pd.to_datetime(moviesdf['release_date']).dt.year #获取时间中的年

#moviesdf['release_date'].head()

genres_list=list(genres_list)

genres_year=moviesdf.loc[:,genres_list]  #获取所有行,列在genres_list列表的列

genres_year.index=moviesdf['release_date'] #设置时间为索引

genres_year=genres_year.groupby(['release_date']).sum() #通过时间分组求和

genres_sum=genres_year.sum(axis=0).sort_values(ascending=True)  #求出所有电影类型的总和 ,其中sum(axis=0)表示矩阵按列相加

#可视化(各电影类型的数据量) 条形图

plt.rcParams['font.sans-serif']=['SimHei']

plt.figure(figsize=(12,8))

plt.title('各种电影类型数据量统计图',fontsize=15)

plt.xlabel('电影数量(部)',fontsize=15)

plt.ylabel('电影类型',fontsize=15)

plt.tick_params(labelsize=12) #控制刻度字体大小

plt.barh(genres_sum.index,genres_sum.values)

你可能感兴趣的:(电影数据分析)