影視分析案例

影視分析案例

學完了pandas,趁熱打鐵練習了下電影分析案例,通過練習,鞏固了這幾天的知識,不過數據分析時沒有業務邏輯,基本停留表面,數據分析的過程中也讓我感到有些枯燥。

1. 總覽數據

import pandas as pd
import matplotlib.pyplot as plt

# 影視分析案例

# 1.加載數據
data = pd.read_csv('movie_metadata.csv')
print('數據的形狀:',data.shape)
data.head()

影視數據

2. 數據處理

# 發現有空值(NaN),處理缺失值
data = data.dropna(how='any')
data.head()

影視數據

3. 開始分析

3.1 查看票房收入統計

#  任務1、查看票房收入統計
#  1.1 導演 vs 票房總收入
group_director = data.groupby(by='director_name')['gross'].sum()
# 採用降序排列
group_director.sort_values(ascending=False)

數據統計:
director_name
Steven Spielberg 4.114233e+09
Peter Jackson 2.289968e+09
Michael Bay 2.231243e+09
Tim Burton 2.071275e+09
Sam Raimi 2.049549e+09
...
Paul Bunnell 2.436000e+03
Alex Craig Mann 1.332000e+03
Ricki Stern 1.111000e+03
Frank Whaley 7.030000e+02
Ekachai Uekrongtham 1.620000e+02
Name: gross, Length: 1659, dtype: float64


# 主演 vs  票房總收入
group_actor = data.groupby(by='actor_1_name')['gross'].sum()
group_actor.sort_values(ascending=False)

數據統計:
actor_1_name
Johnny Depp 3.714789e+09
Harrison Ford 3.391556e+09
Tom Hanks 3.264559e+09
Tom Cruise 2.987622e+09
J.K. Simmons 2.856407e+09
...
Jim Carter 3.607000e+03
Stephen McHattie 3.478000e+03
Tatyana Ali 2.468000e+03
Kate Maberly 2.436000e+03
Darryl Hunt 1.111000e+03
Name: gross, Length: 1428, dtype: float64


# 導演 + 主演 vs 票房總收入
group_director_actor = data.groupby(by=['director_name','actor_1_name'])['gross'].sum()
group_director_actor.sort_values(ascending=False)

統計結果:
director_name actor_1_name
Joss Whedon Chris Hemsworth 1.705551e+09
Sam Raimi J.K. Simmons 1.485313e+09
Gore Verbinski Johnny Depp 1.250323e+09
George Lucas Natalie Portman 1.165483e+09
Tim Burton Johnny Depp 1.070126e+09
...
Alex Craig Mann Justin Chon 1.332000e+03
Ricki Stern Darryl Hunt 1.111000e+03
Brian Trenchard-Smith David Keith 7.210000e+02
Frank Whaley Lynn Cohen 7.030000e+02
Ekachai Uekrongtham Michael Jai White 1.620000e+02
Name: gross, Length: 3415, dtype: float64


3.2 查看imdb評分統計

# 任務2、查看imdb評分統計
# 2.1 查看 各 imdb 評分的電影個數
imdb = data.groupby('imdb_score')['movie_title'].count()
plt.figure()
imdb.plot() 
# plt.savefig('./imdb_scores.png')
plt.show()

得分區間

# 2.2 查看mdb評分平均最高的前20導演
director_mean = data.groupby('director_name')['imdb_score'].mean()
top20_imdb_directors = director_mean.sort_values(ascending=False)[:20]
plt.figure(figsize=(18.0,10.0))
# kind = 'barh' 水平條形圖
top20_imdb_directors.plot(kind='barh')
# plt.savefig('./top20_imdb_directors.png')
plt.show()

評分

3.3 電影產量年份趨勢

# 任務3、電影產量年份趨勢
moive_years = data.groupby('title_year')['movie_title'].count()
plt.figure()
moive_years.plot()
# plt.savefig('./moive_year.png')
plt.show()

趨勢

3.4電影類型分析

# 任務4、電影類型分析
# 每個電影可以對應好幾種題材,將數據處理爲一個電影對應一個類型
genre_data = pd.DataFrame(columns=['genre', 'gross'])
# data.iterrows:使用迭代器的方法讀取數據,返回數字索引(int) 和每一行的數據
for i, row_data in data.iterrows():
    # 使用split進行切割
    genres = row_data['genres'].split('|')
    n_genres = len(genres)
    dict_obj = {}
    # 構建一個空字典,用以保存genre和gross的值
    dict_obj['gross'] = [row_data['gross']] * n_genres
    # print(dict_obj['gross'])

    dict_obj['genre'] = genres
    # 將字典轉爲dataframe類型
    genre_df = pd.DataFrame(dict_obj)
    # dataframe中的append將gener_df的數據添加到genre_data
    genre_data = genre_data.append(genre_df)
# 將最終的數據寫入csv文件,進行保存
genre_data.to_csv('./genre_data.csv', index=None)
# 4.1、按題材分類。統計個數
genre_count = genre_data.groupby('genre').size()
plt.figure(figsize=(15.0,10.0))
genre_count.plot(kind='barh')
plt.savefig('./gener_count.png')
plt.show()

題材

# 4.2 按題材統計票房
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()

題材

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章