數據可視化-電影分析
一:提出問題
假設你是一名業務分析師顧問,你的客戶是一個電影製作新公司,他們將製作一部新電影。客戶想確保電影能成功,從而使新公司立足市場。他們希望你能幫助他們了解電影市場趨勢,使他們能做出正確的決策。他們提供了指導,希望你能研究以下三大領域:
● 問題 1:電影類型是如何隨著時間的推移發生變化的?
● 問題 2: Universal Pictures 和 Paramount Pictures 之間的對比情況如何?
● 問題 3: 改編電影和原創電影的對比情況如何?
二:理解數據
採集數據——導入讀取數據——查看數據集信息,從整體上了解數據信息
獲取數據:https://www.kaggle.com/tmdb/tmdb-movie-metadata
欄位解釋:
● imdb_id:IMDB 標識號
● popularity:在 Movie Database 上的相對頁面查看次數
● budget:預算(美元)
● revenue:收入(美元)
● original_title:電影名稱
● cast:演員列表,按 | 分隔,最多 5 名演員
● homepage:電影首頁的 URL
● director:導演列表,按 | 分隔,最多 5 名導演
● tagline:電影的標語
● keywords:與電影相關的關鍵字,按 | 分隔,最多 5 個關鍵字
● overview:劇情摘要
● runtime:電影時長
● genres:風格列表,按 | 分隔,最多 5 種風格
● production_companies:製作公司列表,按 | 分隔,最多 5 家公司
● release_date:首次上映日期
● vote_count:評分次數
● vote_average:平均評分
● release_year:發行年份
● budget_adj:根據通貨膨脹調整的預算(2010 年,美元)
● revenue_adj:根據通貨膨脹調整的收入(2010 年,美元)
#導入模塊import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport seaborn as sns import json#導入文件moviesdf=pd.read_csv(C:\Users\WangKai\Desktop\tmdb_5000_movies.csv)movdf=pd.read_csv(C:\Users\WangKai\Desktop\tmdb_5000_credits.csv)#查看數據moviesdf.head(2)moviesdf.info()
三:數據清洗
1.缺失數值處理——release_date列
#查找缺失項null=moviesdf["release_date"].isnull()moviesdf.loc[null,:]#填充缺失值moviesdf[release_date] = moviesdf[release_date].fillna( 2017-11-01 )#驗證moviesdf.info()
2.類型轉換(1)
#字元串轉化成日期數據類型moviesdf.loc[:,release_date]=pd.to_datetime(moviesdf.loc[:,release_date], format=%Y-%m-%d, errors=coerce)
類型轉換(2)
#將json轉換成字元串#genresmoviesdf[genres] = moviesdf[genres].apply(json.loads)for index, i in zip(moviesdf.index, moviesdf[genres]): l = [] for j in range(len(i)): l.append((i[j][name])) moviesdf.loc[index, genres] = str(l)#keywordsmoviesdf[keywords] = moviesdf[keywords].apply(json.loads)for index, i in zip(moviesdf.index, moviesdf[keywords]): l = [] for j in range(len(i)): l.append((i[j][name])) moviesdf.loc[index, keywords] = str(l)#production_companiesmoviesdf[production_companies] = moviesdf[production_companies].apply(json.loads)for index, i in zip(moviesdf.index, moviesdf[production_companies]): l = [] for j in range(len(i)): l.append((i[j][name])) moviesdf.loc[index, production_companies] = str(l)#production_countriesmoviesdf[production_countries] = moviesdf[production_countries].apply(json.loads)for index, i in zip(moviesdf.index, moviesdf[production_countries]): l = [] for j in range(len(i)): l.append((i[j][name])) moviesdf.loc[index, production_countries] = str(l)
四:數據處理
#各風格統計moviesdf[genres]=moviesdf[genres].str.strip([]).str.replace( ,).str.replace("",)moviesdf[genres]=moviesdf[genres].str.split(,)list1=[]for i in moviesdf[genres]: list1.extend(i)genres=pd.Series(list1).value_counts().sort_values(ascending=False)genres[:10]genres=pd.DataFrame(genres[:10])genres.rename(columns={0:"total"},inplace=True)f,ax=plt.subplots(figsize=(12,10))g=sns.barplot(y=genres.index,x="total",data=genres,palette="Blues_d",ax=ax)
#電影類型隨著時間的推移#提取年份years=[]for x in moviesdf["release_date"]: year=x.year years.append(year)Years=pd.Series(years)moviesdf[year]=Yearsmoviesdf[year].head()min_year = moviesdf[year].min()max_year = moviesdf[year].max()liste_genres = set()for s in moviesdf[genres]: liste_genres = set().union(s, liste_genres)liste_genres = list(liste_genres)liste_genresgenre_df = pd.DataFrame( index = liste_genres,columns= range(min_year, max_year + 1))genre_df = genre_df.fillna(value = 0)year = np.array(moviesdf[year])z = 0for i in moviesdf[genres]: split_genre = list(i) for j in split_genre: genre_df.loc[j, year[z]] = genre_df.loc[j, year[z]] + 1 z+=1genre_df#製圖plt.figure(figsize=(15,8))plt.plot(genre_df.T)plt.title(rrr)plt.xticks(range(1910,2020,5))plt.legend(genre_df.index)plt.show()
電影類型隨著時間的推移越來越豐富,從1975年1995年電影類型明顯增多;從1995年之後
戲劇、喜劇片、驚悚片數量增加極快。
#改編電影和原創電影的對比情況keylist = [based on novel,original]nums = [197,4606]plt.figure(figsize=(7, 4))plt.bar(np.arange(len(keylist)), nums, color = c , width = 0.1, align = center)plt.ylabel(數量,fontsize = 12)plt.xticks(np.arange(len(keylist)), keylist,fontsize = 12)plt.title(改編電影 VS 原創電影 數量對比,fontsize = 14)plt.grid(True)plt.show()
絕大部分是原創電影。
# Universal Pictures 和 Paramount Pictures 之間的對比情況plt.figure(figsize = (7,4))two = [Universal Pictures, Paramount Pictures]num = [77015832,70100000]plt.bar(np.arange(len(two)), num, color = c, width = 0.1, align = center)plt.ylabel(revenue)plt.xticks(np.arange(len(two)), two)plt.title(Universal Pictures VS Paramount Pictures 票房對比)plt.grid(True)plt.show()
截止2017年,Universal Pictures環球影業比Paramount Pictures即派拉蒙影業的票房總收入略高。
推薦閱讀:
※數據之美
※Kindle是否值得包月
※吉利帝豪GS--車主洞察研究
※3分鐘帶你認識知乎刷贊
※數據分析告訴你,韋小寶跟他七個老婆哪個最親?
TAG:數據分析 |