python案例之电影数据分析

练习数据:https://pan.baidu.com/s/1hf-J5XZCKSI329qIGWxChw
提取码:tckk

import pandas as pd
#读取文件
df=pd.read_csv('./movie_metadata.csv')


##########   浏览大概数据   ###########
# 查看行列数
# print(df.shape)
# 查看非空数量
# df.count()
# 查看每列空值合计
# df.isna().sum()
# 查看最小值、最大值、四分位等
# df.describe()
# 查看数据信息
# df.info()
# 查看前5行
# df.head()
##########   浏览大概数据   ###########



##########   暴力清洗数据   ###########
#只要有空值,就删掉,形成新的数据df_bl
df_bl=df.dropna(how='any')
#df_bl.info()
##########   暴力清洗数据   ###########


#历年来电影数量走势

#取出相应的年、月
df_bl['year']=df_bl['title_year'].apply(lambda x:x[:4])
df_bl['month']=df_bl['title_year'].apply(lambda x:x[5:7])

#对列进行重新排序,将年月放在列title_year后面
col_name=df_bl.columns.tolist()
col_name.insert(col_name.index('title_year')+1,'year')
col_name.insert(col_name.index('title_year')+1,'year')
col_name.insert(col_name.index('title_year')+2,'month')
df_bl=df_bl.reindex(columns=col_name)
#删除重复列,通过两次转置
df_bl=df_bl.T.drop_duplicates(keep='first').T

#根据年份分组,统计每年电影上映数量
movie_years_count=df_bl.groupby(by='year')['movie_title'].count()
import matplotlib.pyplot as plt
%matplotlib inline
plt.figure()
#绘制折线图
movie_years_count.plot()
#进行保存
plt.savefig('movie_years_count.png')
plt.show()
#历年来电影票房走势
movie_years_gross=df_bl.groupby('year')['gross'].sum()/10000
plt.figure()
movie_years_gross.plot()
plt.savefig('./movie_years_gross.png')
plt.show()
#月份对上映数量的影响
movie_month_count=df_bl.groupby('month')['movie_title'].count()
plt.figure()
movie_month_count.plot()
plt.savefig('./movie_month_count.png')
plt.show()
#月份对电影票房走势影响
movie_month_gross=df_bl.groupby('month')['gross'].sum()/10000
plt.figure()
movie_month_gross.plot()
plt.savefig('./movie_month_gross.png')
plt.show()
#各个国家的总的上映电影数量
movie_country=df_bl.groupby('country')['movie_title'].count()
movie_country.sort_values(ascending=False)
#电影时长分布分析
print(df_bl['duration'].max())
print(df_bl['duration'].min())
plt.figure(figsize=(20,8),dpi=100)
#设置组距
distince=5
#计算组数(向上取整)
n=int(np.ceil(((df_bl['duration'].max())-(df_bl['duration'].min()))/distince))
plt.hist(df_bl['duration'],bins=n)
#添加网格线
plt.grid(linestyle='--',alpha=0.5)
#修改X轴刻度
#plt.xticks(range(37,330)[::5])
plt.xticks(range(int(df_bl['duration'].min()),int(df_bl['duration'].max()))[::5])
plt.show()
#取出需要的两列
df2=pd.DataFrame(data=df_bl[['gross','genres']],columns=['gross','genres'])
#df2

#创建只有表头的genre_data,为后面插入数据做准备
genre_data = pd.DataFrame(columns = ['genre','gross']) 
#使用迭代器的方式读取数据,返回数字索引(int)和每一行的数据(series)
for i,row_data in df2.iterrows():
    genres=row_data['genres'].split('|')
    #print(genres)
    n_genres = len(genres)
    # 构建一个空字典,用以保存genre和gross的值
    dict_obj = {
     }
    dict_obj['gross'] = [row_data['gross']] * n_genres
    #print(dict_obj['gross'])
    dict_obj['genre'] = genres
    #print(dict_obj)
    # 将字典转为dataframe类型
    genre_df = pd.DataFrame(dict_obj)
    #print(genre_df)
    # DataFrame的append将genre_df的数据添加进genre_data
    genre_data = genre_data.append(genre_df)
#print(genre_data)
# 将最终的数据写入csv保存
genre_data.to_csv('genre_data.csv',index=None)  
#按题材分类,统计个数
genre_count = genre_data.groupby('genre').size()
genre_count
plt.figure(figsize=(15.0, 10.0))
genre_count.plot(kind='barh')
plt.savefig('genre_count.png')
plt.show()
#按题材统计票房
genre_gross = genre_data.groupby('genre')['gross'].sum()
plt.figure(figsize=(15.0, 10.0))
genre_gross.plot(kind='barh')
plt.savefig('genre_gross.png')
plt.show()
# 计算电影盈利字段  
df_bl['profit'] = df_bl.gross - df_bl.budget 
df_bl

group_director_gross = df_bl.groupby(by='director_name')['gross'].sum()/10000
group_director_gross.sort_values(ascending=False) 

group_director_profit = df_bl.groupby(by='director_name')['profit'].sum()/10000
group_director_profit.sort_values(ascending=False) 

print(type(group_director_profit))
print(group_director_profit.values)
group_director_profit[group_director_profit.values>0] #盈利导演数量
group_director_profit[group_director_profit.values<0] #亏本导演数量

你可能感兴趣的:(笔记,python)