日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

IMDB电影数据分析实践

發(fā)布時(shí)間:2024/8/1 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IMDB电影数据分析实践 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

IMDB電影數(shù)據(jù)分析實(shí)踐

根據(jù)IMDB5000部電影數(shù)據(jù)集進(jìn)行下列數(shù)據(jù)分析:

  • 數(shù)據(jù)準(zhǔn)備:讀取數(shù)據(jù)并查看數(shù)據(jù)的基本信息
  • 數(shù)據(jù)清洗:缺失值處理,重復(fù)值處理,處理后“干凈”數(shù)據(jù)的基本信息。
  • 數(shù)據(jù)分析及可視化展示:
  • 電影出品國及地區(qū)和演員票房的情況分析:
    繪制電影出品數(shù)量排名前10位的國家及地區(qū)的條形圖;繪制票房前十的電影中喜愛男 1 號,男 2 號,男 3 號的人數(shù)的分組條形圖。

  • 電影數(shù)量的分析:
    按年份統(tǒng)計(jì)每年電影總數(shù)量、彩色影片數(shù)量和黑白影片數(shù)量并繪制折線圖(在同一個(gè)坐標(biāo)系中繪制)。

  • 電影類型的分析:
    繪制不同類型的電影數(shù)量條形圖和餅圖。

  • 電影評分統(tǒng)計(jì)及電影評分相關(guān)因素分析:
    找出評分排名前 20 位電影的片名和評分;繪制所有影片評分與受歡迎程度的關(guān)系散點(diǎn)圖。

  • 文章目錄

    • 一、數(shù)據(jù)準(zhǔn)備:
        • 1. 導(dǎo)入numpy 包和 pandas 包,使用 read_csv 方法讀取本地 csv 數(shù)據(jù);
        • 2. 查看數(shù)據(jù)的基本內(nèi)容、結(jié)構(gòu)
    • 二、數(shù)據(jù)清洗
      • 1. 缺失數(shù)據(jù)處理
      • 2. 重復(fù)值處理
      • 3. 處理后的數(shù)據(jù)
    • 三、數(shù)據(jù)分析及可視化展示
      • 1. 電影出品國及地區(qū)和演員票房的情況分析:
        • 1.1 繪制電影出品數(shù)量排名前10位的國家及地區(qū)的條形圖;
        • 1.2 繪制票房前十的電影中喜愛男1號,男2號,男3號的人數(shù)的分組條形圖。
      • 2. 電影數(shù)量的分析:
      • 3. 電影類型的分析:
      • 4. 電影評分統(tǒng)計(jì)及電影評分相關(guān)因素分析:
        • 4.1 找出評分排名前20位電影的片名和評分;
        • 4.2 繪制所有影片評分與受歡迎程度的關(guān)系散點(diǎn)圖。


    一、數(shù)據(jù)準(zhǔn)備:

    讀取數(shù)據(jù)并查看數(shù)據(jù)的基本信息

    1. 導(dǎo)入numpy 包和 pandas 包,使用 read_csv 方法讀取本地 csv 數(shù)據(jù);

    import pandas as pd import numpy as np movies = pd.read_csv('D:\\gaojie\\movie_metadata.csv',encoding='utf—8')

    2. 查看數(shù)據(jù)的基本內(nèi)容、結(jié)構(gòu)

  • 打印前五行觀察

    movies.head (5)

    通過前五行,可以看出數(shù)據(jù)集有28列,以及具體的列名。同時(shí)也可以發(fā)現(xiàn),前五行里就有空值較多的行,說明我們需要對數(shù)據(jù)作處理。

  • 輸入 .shape 看看有多少行多少列

    movies.shape

    可以看到,數(shù)據(jù)集的維度是5043行,28列。

  • 查看列的數(shù)據(jù)類型

    movies.dtypes

    可以看出,數(shù)據(jù)集中涉及數(shù)據(jù)的列默認(rèn)為 float64 和 int64,無需對數(shù)據(jù)做類型轉(zhuǎn)換。而其他列均為 object 類型,后面需要考慮是否做類型轉(zhuǎn)換。

  • 二、數(shù)據(jù)清洗

    數(shù)據(jù)清洗也叫數(shù)據(jù)預(yù)處理,因?yàn)榇蠖鄷r(shí)候獲取的數(shù)據(jù)并不符合我們的數(shù)據(jù)分析的標(biāo)準(zhǔn)這時(shí)候我們就需要對數(shù)據(jù)進(jìn)行預(yù)處理,使之?dāng)?shù)據(jù)更加規(guī)整有序方便我們下一步的分析。數(shù)據(jù)清洗通常需要數(shù)據(jù)分析大部分時(shí)間,但是我覺得也是有一定的步驟的,我將它大致分為六部曲: 選擇子集→列名重命名→缺失數(shù)據(jù)處理→數(shù)據(jù)類型轉(zhuǎn)換→數(shù)據(jù)排序→異常值處理

    1. 缺失數(shù)據(jù)處理

  • 先通過isnull函數(shù)看一下是否有空值,結(jié)果是有空值的地方顯示為True,沒有的顯示為False

    print(movies.isnull())

    可以看到有空值的行非常之多,在分析之前我們需要處理對行進(jìn)行取舍。

  • 再通 過 isnull().sum() 直接看每一列有多少空值

    print(movies.isnull().sum())

    可以看到,只有極少列沒有空值,有的列空值異常之多。因此我們處理的時(shí)候只能選擇讓重點(diǎn)的列沒有空值,刪除行而不要?jiǎng)h除列。

  • 為了方便我們這里選擇直接刪除有缺失值的行

    print ('刪除缺失值前數(shù)據(jù)集大小 ',movies.shape )# how=‘a(chǎn)ny’ 在給定的任何一列中有缺失值就刪除 movies = movies.dropna(how ='any' ) print ('刪除缺失值后大小 ',movies.shape )

    可以看到一千多行有缺失值的數(shù)據(jù)被刪除掉了,對數(shù)據(jù)的損耗還是非常大的。最好是只刪除重要列有缺失值的行,或者按缺失值的比例刪除。規(guī)定n行有多少個(gè)缺失值時(shí)再刪除。

  • 這里我們選擇刪除電影名重復(fù)的行:

    movies.drop_duplicates(subset=["movie_title"],keep='first',inplace=True) print(movies.duplicated().value_counts())

  • 2. 重復(fù)值處理

  • 先用 duplicated() 方法進(jìn)行邏輯判斷,確定是否有重復(fù)值,統(tǒng)計(jì)重復(fù)值的數(shù)量

    print(movies.duplicated().value_counts())

    可以看到,雖然有眾多重復(fù)值,但我們應(yīng)該考慮哪些列的重復(fù)值是不允許出現(xiàn)應(yīng)該刪除的。因?yàn)楹芏嘀貜?fù)值可能只是數(shù)據(jù)相同,或者演員、國家這樣的重復(fù)值是允許出現(xiàn)的。

  • 再用 duplicates(subset,keep,inplace) 方法對某幾列下面的重復(fù)行刪除

    • subset: 以哪幾列作為基準(zhǔn)列,判斷是否重復(fù),如果不寫則默認(rèn)所有列都要重復(fù)才算
    • keep: 保留哪一個(gè),fist-保留首次出現(xiàn)的,last-保留最后出現(xiàn)的,False-重復(fù)的一個(gè)都不保留,默認(rèn)為first
    • inplace: 是否進(jìn)行替換,最好選擇 False,保留原始數(shù)據(jù),默認(rèn)也是 False

    這里我們選擇刪除所有電影名重復(fù)的行

    movies.drop_duplicates(subset=[‘director_name’],keep='first',inplace=True) print(movies.duplicated().value_counts())

    可以看到重復(fù)值并沒有變化,因?yàn)橹貜?fù)值均為 int64 類型,也就是說沒有電影名重復(fù)的行。因此沒有數(shù)據(jù)被刪除掉 。

  • 3. 處理后的數(shù)據(jù)

    使用 info 查看處理后“干凈”數(shù)據(jù)的基本信息:

    movies.info

    可以看到,處理后數(shù)據(jù)為3655行,保留了所有的列。我們將在此數(shù)據(jù)集上做數(shù)據(jù)分析及可視化展示。

    三、數(shù)據(jù)分析及可視化展示

    1. 電影出品國及地區(qū)和演員票房的情況分析:

    1.1 繪制電影出品數(shù)量排名前10位的國家及地區(qū)的條形圖;

  • 按country分組,統(tǒng)計(jì)所有國家的電影數(shù)量

    country_group = movies.groupby('country').size() country_group

  • 電影出品數(shù)量排名前10位的國家

    group_head_10=country_group.sort_values(ascending=False).head(10) group_head_10

    得到了電影數(shù)量前十的國家及對應(yīng)的電影數(shù)量,因?yàn)殡娪皵?shù)量為 int64,因此可以直接作為縱軸數(shù)值繪圖。

  • 繪制電影出品數(shù)量排名前 10 位的柱形圖的國家及地區(qū)的條形圖

    import pandas as pd import matplotlib.pyplot as plt import matplotlib matplotlib.rcParams['font.family']='SimHei' plt.ylabel('電影數(shù)量') plt.title('電影出品數(shù)量排名前10位的國家及地區(qū)的條形圖') group_head_10.plot(kind = 'bar')

  • 1.2 繪制票房前十的電影中喜愛男1號,男2號,男3號的人數(shù)的分組條形圖。

  • 將電影按票房數(shù)降序排序,切取前10的電影信息

    movies_max=movies.sort_values(['gross'],ascending=False).head(10) movies_max1=movies_max[['actor_1_facebook_likes','actor_2_facebook_likes','actor_3_facebook_likes']] movies_max1

  • 創(chuàng)建 DataFrame,作為分組條形圖的數(shù)據(jù)集

    df = pd.DataFrame({'喜愛男1號':movies_max1['actor_1_facebook_likes'].values,'喜愛男2號':movies_max1['actor_2_facebook_likes'].values,'喜愛男3號':movies_max1['actor_3_facebook_likes'].values},index=movies_max['movie_title'].str.strip()) df

    這里我們對電影標(biāo)題做了一個(gè)字符串去空格操作,是因?yàn)槲覀儼l(fā)現(xiàn)在創(chuàng)建分組條形圖時(shí)橫坐標(biāo)總有異常方塊,最后發(fā)現(xiàn)是因?yàn)?csv 中的原始數(shù)據(jù)電影標(biāo)題前面有空格導(dǎo)致的。

  • 繪制分組條形圖

    plt.figure() df.plot.bar() plt.title("票房前十電影喜愛男1號,男2號,男3號的人數(shù)的分組條形圖") plt.legend(ncol=3,loc=(0,1.1)) plt.xlabel('電影標(biāo)題') plt.ylabel('喜歡人數(shù)') plt.show()

  • 2. 電影數(shù)量的分析:

  • 按年份統(tǒng)計(jì)每年電影總數(shù)量、彩色影片數(shù)量和黑白影片數(shù)量并繪制折線圖(在同一個(gè)坐標(biāo)系中繪制)。

    # 每年電影總數(shù)量折線圖 movies['title_year'].value_counts().sort_index().plot(kind='line',label='total number')# 彩色影片數(shù)量折線圖 movies[movies['color']=='Color']['title_year'].value_counts().sort_index().plot(kind='line',c='red',label='color number')# 黑白影片數(shù)量折線圖 movies[movies['color']!='Color']['title_year'].value_counts().sort_index().plot(kind='line',c='black',label='Black White number')plt.legend(loc='upper left') plt.xlabel('電影色彩') plt.ylabel('電影數(shù)量') plt.title('不同色彩電影數(shù)量折線圖') plt.legend(loc='upper left')

  • 3. 電影類型的分析:

    繪制不同類型的電影數(shù)量條形圖和餅圖。

  • 提取 genres 列所有的電影類型,放入一個(gè)數(shù)組中;

    # 創(chuàng)建字典用于存儲電影類型 types = [] for tp in movies['genres']:sp = tp.split('|')for x in sp:types.append(x)# 格式化 types_df = pd.DataFrame({'genres':types})

    可以看到,字典中共有14504個(gè)電影類型(包含重復(fù)值)。

  • 統(tǒng)計(jì)字典中各種類型的數(shù)量

    types_df_counts = types_df['genres'].value_counts() types_df_counts

  • 繪制不同類型的電影數(shù)量條形圖

    types_df_counts.plot(kind='bar') plt.xlabel('電影類型') plt.ylabel('電影數(shù)量') plt.title('不同類型的電影數(shù)量條形圖')

  • 繪制不同類型的電影數(shù)量餅圖

    b1 = types_df_counts/types_df_counts.sum() explode = (b1>=0.06)/20+0.02 types_df_counts.plot.pie(autopct='%1.1f%%',figsize=(8,8),\label='',explode=explode) plt.title('不同類型的電影數(shù)量餅圖')

  • 4. 電影評分統(tǒng)計(jì)及電影評分相關(guān)因素分析:

    4.1 找出評分排名前20位電影的片名和評分;

    movie_score_20 = movies.sort_values(['imdb_score'],ascending=False).head(20) movie_score_20[['movie_title','imdb_score']]

    4.2 繪制所有影片評分與受歡迎程度的關(guān)系散點(diǎn)圖。

    plt.scatter(x= movies.imdb_score,y=movies.movie_facebook_likes) plt.xlabel('電影評分') plt.ylabel('臉書喜歡人數(shù)') plt.title('影片評分與受歡迎程度的關(guān)系散點(diǎn)圖')


    Over


    😃分享不易,點(diǎn)贊關(guān)注不迷路!

    總結(jié)

    以上是生活随笔為你收集整理的IMDB电影数据分析实践的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。