电影数据分析

项目介绍

1.项目背景

电影公司制作一部新电影推向市场时,要想获得成功,通常要了解电影市场趋势,观众喜好的电影类型,电影的发行情况,改编电影和原创电影的收益情况,以及观众喜欢什么样的内容

2.项目来源

本案例来源于 kaggle上的 TMDB 5000 Movie Dataset 数据集
下载地址:https://www.kaggle.com/tmdb/tmdb-movie-metadata

3.项目解决的问题

(1)电影类型如何随着时间的推移发生变化的?

(2)电影类型与利润的关系?

(3)Universal 和 Paramount 两家影视公司的对比情况如何?

(4)改编电影和原创电影的对比情况如何?

(5)电影时长与电影票房及评分的关系?

(6)分析电影关键字

(7)问题七 分析收益的影响因素

3.编程环境:vscode,python3

数据源整理

  • 将数据下载,导入并输出

import seaborn as sns
from wordcloud import WordCloud
import collections
import numpy as np
from copy import deepcopy
import pandas as pd
import json
import matplotlib.pyplot as plt

credits = pd.read_csv('./tmdb_5000_credits.csv')
print('credits:\n', credits)
print("_"*50)
print('credits:\n', credits.columns)
print("_"*50)
print('credits:\n', credits.info())
print("_"*50)

movies = pd.read_csv('./tmdb_5000_movies.csv')
print('movies:\n', movies)
print("_"*50)
print('movies:\n', movies.columns)
print("_"*50)
print('movies:\n', movies.info())
print("_"*50)
  • 得到两个csv文件的具体信息,如数据规模,及行、列索引等,整理得到如下电影数据说明表。

字段名意义id标识号imdb_idIMDB 标识号popularity在 Movie Database 上的相对页面查看次数budget预算(美元)revenue收入(美元)original_title电影名称cast演员列表crew中国人员homepage电影首页的 URLdirector导演列表,按tagline电影的标语keywords与电影相关的关键字,按overview剧情摘要runtime电影时长genres风格列表,按production_companies制作公司列表,按release_date首次上映日期vote_count评论次数vote_average平均评分release_year发行年份

credits数据集主要记载了电影名称、演员列表,工作人员等信息,而movies数据集则记载了电影成本与收入、电影风格、电影关键字、上映时间等信息。注意到其中有许多与本项目无关的信息,合并时将除去这些片段

数据清洗

  • 将credits和movies两个数据集进行合并,查看合并后的数据集信息

credits.rename(columns={'movie_id': 'id'}, inplace=True)

all_data = pd.merge(left=credits, right=movies, on=[
                    'id', 'title'], how='outer')
print('all_data:\n', all_data)
print('all_data:\n', all_data.columns)
print('all_data:\n', all_data.dtypes)
  • 从中选取对本项目有帮助的数据列

all_data = all_data[['original_title', 'crew', 'release_date', 'genres', 'keywords','production_companies', 'production_countries', 'revenue','budget', 'runtime', 'vote_average']]

print('all_data:\n', all_data)
print('all_data:\n', all_data.columns)
print('all_data:\n', all_data.dtypes)
  • 处理缺失值

serach_null = pd.isnull(all_data).sum()
print('缺失值检测结果:\n', serach_null)

null_array = all_data.loc[:, 'release_date'].isnull()
movie_name = all_data.loc[null_array, 'original_title']
print('the null_value movie is', movie_name)

all_data.loc[null_array, 'release_date'] = '2014-06-01'
  • 增加对本项目有帮助的数据列 本项目涉及电影利润分析,此处利用revenue和budget两列获得利润列profit

all_data['profit'] = all_data['revenue'] - all_data['budget']
  • 数据格式处理 注意到电影风格genres列为json类型,首映日期release_date列为object类型,希望转其转化为python类型
    此外,注意到数据集中电影涉及范围较大,但release_date列精确到日,可以降低精确度,精确到年足以应对本项目分析需求。

all_data.loc[:, 'genres'] = all_data.loc[:, 'genres'].transform(json.loads)

all_data.loc[:, 'release_date'] = pd.to_datetime(all_data.loc[:, 'release_date'])

all_data.loc[:, 'release_year'] = all_data.loc[:, 'release_date'].dt.year
all_data = all_data.drop(columns='release_date')
print(all_data.columns)
  • 将处理完成的数据保存为all_data.csv

all_data.to_csv("all_data.csv", index=False)

数据分析及可视化

问题一:电影类型如何随着时间的推移发生变化的?

图一 电影类型随时间变化图

电影数据分析

电影类型随时间变化图

代码实现:


all_movie_type = set()

def get_movie_type(val):

    type_list = []

    for item in val:

        if item:

            movie_type = item['name']

            type_list.append(movie_type)

            all_movie_type.add(movie_type)
    return ','.join(type_list)

all_data.loc[:, 'genres'] = all_data.loc[:, 'genres'].transform(get_movie_type)

all_movie_type = list(all_movie_type)

all_data_genres = deepcopy(all_data)
for column in all_movie_type:
    all_data_genres.loc[:, column] = 0

    mask = all_data_genres.loc[:, 'genres'].str.contains(column)

    all_data_genres.loc[mask, column] = 1

year_genres = all_data_genres.groupby(by='release_year')[all_movie_type].sum()

plt.figure(figsize=(20, 8), dpi=80)

x = year_genres.index
for movie_type in year_genres.columns:
    y = year_genres[movie_type]
    plt.plot(x, y)

plt.title('year_genres')
plt.legend(year_genres.columns, fontsize='x-small')
plt.ylabel('number')
plt.xlabel('year')
plt.grid(b=True, alpha=0.2)
plt.title = "year_genres"

plt.savefig('./year_genres')

图二 各电类型电影统计图

电影数据分析

代码实现:


genres_sum = all_data_genres[all_movie_type].sum()

plt.figure(figsize=(16, 8), dpi=80)
plt.pie(genres_sum, labels=genres_sum.index, autopct="%1.2f%%")
plt.legend(bbox_to_anchor=(1.4, 0.8))
plt.title = "genres_sum"
plt.savefig('./genres_sum')

结论: 从图中观察到,随着时间的推移,所有电影类型都呈现出增长趋势,尤其是 1992 年以 后各个类型的电影均增长迅速,其中 Drama(戏剧)和 Comedy(喜剧)增长最快,目前仍是最热 门的电影类型。此外,在所有电影类型中,电影数量排名前 5 的电影类型分别为:Drama(戏剧)、Comedy(喜剧)、Thriller(惊悚)、Action(动作)、Romance(冒险)。其中,Drama(戏剧)类型占所有电影类型的 18.89%, Comedy(喜剧)占所有电影类型的14.16%,而Thriller(恐怖片)类型占所有电影类型的 10.48%

问题二:电影类型与利润的关系?

对电影类型进行处理,获得所有电影类型,并对不同类型的电影利润进行统计


type_profit = []

for column in all_movie_type:
    mask = all_data_genres.loc[:, column] == 1
    mean_profit = all_data_genres.loc[mask, 'profit'].mean()

    type_profit.append(mean_profit)

type_profit_series = pd.Series(data=type_profit,index=all_movie_type).sort_values()

平均利润-种类统计柱状图

电影数据分析
代码实现:

plt.figure(figsize=(25, 10), dpi=80)
plt.bar(type_profit_series.index, type_profit_series, width=0.4)
plt.title = "type_profit"
plt.xticks(rotation=90)
plt.ylabel("billion")
plt.grid(linestyle="--", alpha=0.5)
plt.text("TV Movie", 3e+06, "-1.15")
plt.text("Foreign", 3e+06, "-2.93")

plt.savefig('./type_profit')

分析结论:拍摄 Animation、Adventure、Fantasy 这三类电影盈利最好,平均盈利为15.9、14.2、13.0千万,而拍摄 Foreign、TV Movie 这两类电影会存在亏本的风险。选材及拍摄时最好选择 Animation、Adventure、Fantasy 三种类型。

问题三:Universal Pictures 和 Paramount Pictures 两家影视公司发行 电影的对比情况如何?

拷贝all_data,并增加两列,以判断电影属于哪一公司。绘制两家公司电影总量占比图。

两家公司电影总量占比图

电影数据分析
代码实现:

all_data_firm = deepcopy(all_data)

all_data_firm.loc[:, 'Universal Pictures'] = 0
all_data_firm.loc[:, 'Paramount Pictures'] = 0

mask1 = all_data_firm.loc[:, 'production_companies'].str.contains(
    'Universal Pictures')

all_data_firm.loc[mask1, 'Universal Pictures'] = 1

mask2 = all_data_firm.loc[:, 'production_companies'].str.contains(
    'Paramount Pictures')

all_data_firm.loc[mask2, 'Paramount Pictures'] = 1

print('all_data_firm):\n', all_data)

~~~python

all_firm= ['Universal Pictures','Paramount Pictures']
firm_sum = all_data_firm[all_firm].sum()

plt.figure(figsize=(16, 8), dpi=80)
plt.pie(firm_sum, labels=all_firm, autopct="%1.2f%%")
plt.legend(bbox_to_anchor=(1.4, 0.8))
plt.title = "firm_sum_pie"
plt.savefig('./firm_sum_pie')

不同年份两家公司电影数量变化图

电影数据分析
代码实现:

year_firm = all_data_firm.groupby(by='release_year')[all_firm].sum()

plt.figure(figsize=(20, 8), dpi=80)

x = year_firm.index
for firm in year_firm.columns:
    y = year_genres[firm]
    plt.plot(x, y)

plt.title('year_genres')
plt.legend(year_genres.columns, fontsize='x-small')
plt.ylabel('number')
plt.xlabel('year')
plt.grid(b=True, alpha=0.2)
plt.title = "year_firm"

plt.savefig('./year_firm')

问题四:改编电影和原创电影的对比情况如何?

对原创、非原创两种电影进行对比,绘制柱状图。

原创、非原创两种电影总量占比图

电影数据分析
对原创、非原创两种电影的成本、收入、利润进行比较。

原创、非原创两种电影的成本、收入、利润图

电影数据分析

结论:电影市场的主流为非原创电影,将近是原创电影的十倍,这些电影平均成本和收益都很高,平均利润达到了原创电影的两倍,这可能是由于非原创电影早期有更多的受众支持。

代码实现:


all_data_original = deepcopy(all_data)
all_data_original.loc[:, 'original'] = 'original'

mask = all_data_original.loc[:, 'keywords'].str.contains('based on')
all_data_original.loc[mask, 'original'] = 'not_original'

original_table = all_data_original.groupby(by='original', as_index=True)[
    ['budget', 'revenue', 'profit']].mean()

plt.figure()
plt.bar([1, 2, 3], original_table.loc["not_original"],
        width=0.4, label="not_original")
plt.bar([1.4, 2.4, 3.4], original_table.loc["original"],
        width=0.4, label="original")
plt.legend()
plt.xticks([1.2, 2.2, 3.2], ['budget', 'revenue', 'profit'])
plt.ylabel('million')
plt.title("original_analyse")
plt.savefig('./original_analyse')
plt.close()

original_sum = all_data_original.groupby(by='original', as_index=True)[
    "original_title"].count()
print(original_sum)
plt.figure()
plt.pie(original_sum, labels=original_sum.index, autopct="%1.2f%%")
plt.legend(bbox_to_anchor=(0.8, 0.75))
plt.title("original_sum")
plt.savefig('./original_sum')
plt.close()

问题五:电影时长与电影票房及评分的关系

电影市场与电影票房及评分柱状图

电影数据分析

结论:时长在[150,180)这一区间的票房最佳,在[120,240)区间的电影平均能够取得较好的票房,而[150,360)区间内的电影平均能够获得较高均分。总体而言,电影时长最好控制在[150,240)z这一区间内。

代码实现:


all_data_time = deepcopy(all_data)
print(all_data_time)

mask = all_data_time.loc[:, 'runtime'].isnull()
movie_name = all_data_time.loc[mask, 'original_title'].index

all_data_time.loc[all_data.loc[:, 'original_title'] ==
                  'Chiamatemi Francesco - Il Papa della gente', 'runtime'] = 94
all_data_time.loc[all_data.loc[:, 'original_title']
                  == 'To Be Frank, Sinatra at 100', 'runtime'] = 81

bucket = [0, 60, 90, 120, 150, 180, 240, 360]
all_data_time.loc[:, 'runtime'] = pd.cut(all_data_time.loc[:, 'runtime'],
                                         bins=bucket, include_lowest=True, right=False)
print(all_data_time.loc[:, 'runtime'].head)

runtime_table = all_data_time.groupby(
    by='runtime')[['revenue', 'vote_average']].mean()
print(runtime_table["revenue"])

figure, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=80)

axes[0].bar(x=[0, 1, 2, 3, 4, 5, 6], height=runtime_table["revenue"],
            width=0.4, label="revenue")
axes[1].bar(x=[0, 1, 2, 3, 4, 5, 6], height=runtime_table["vote_average"],
            width=0.4, label="vote_average")

x_label = ['[0, 60)', '[60, 90)', '[90, 120)',
           '[120, 150)',  '[150, 180)', '[180, 240)', '[240, 360)']

axes[0].set_xticks([0, 1, 2, 3, 4, 5, 6], x_label)
axes[1].set_xticks([0, 1, 2, 3, 4, 5, 6], x_label)
axes[0].legend(bbox_to_anchor=(0.2, 1))
axes[1].legend(bbox_to_anchor=(0.25, 1))
axes[0].set_title('runtime_revenue')
axes[1].set_title('runtime_vote_average')

plt.savefig("./runtime_table.png")
plt.close()

问题六 分析电影关键字

对处理 _keywords_列,使其成为字符串列表,并作出词云。

电影数据分析

出现次数前十的关键词信息如下

关键词出现次数woman director324independent film318based on novel197murder189violence150dystopia139sport126revenge118sex111friendship106

all_data_kw = all_data["keywords"]

key_words_list = []
for item in all_data_kw:
    item = eval(item)
    if item:
        key_words_list.extend([x['name'] for x in item if x['name'] not in [
                              'aftercreditsstinger', 'duringcreditsstinger']])

words_count = collections.Counter(key_words_list)
print(words_count)

wc = WordCloud(
    background_color='white',
    max_words=2000,
    max_font_size=100,
    random_state=8,
)

wc.generate_from_frequencies(words_count)
plt.imshow(wc)
plt.axis('off')
plt.savefig('keyword_wordcloud.png')

问题七 分析收益的影响因素

对runtime,vote_average ,budget,release_year ,popularity ,revenue 等列进行回归分析,其中受欢迎度(popularity)和票房相关性:0.64,电影预算(budget)和票房相关性:0.73

做出相关性散点图和回归线如下

电影数据分析
结论:受欢迎度、电影预算和票房呈现强相关性,制作电影时,应格外注意电影前期资金投入,并做好后期宣传等工作。可进一步挖掘数据集中受欢迎度的计算方法,并根据影响因素有的放矢。

代码实现:


influ = all_data[['runtime', 'vote_average', 'budget',
                  'release_year', 'popularity', 'revenue']].corr()
print(influ.loc["revenue", :])

fig = plt.figure(figsize=(17, 5))

ax1 = plt.subplot(1, 2, 1)
ax1 = sns.regplot(x=all_data['popularity'], y=all_data['revenue'],
                  data=all_data['revenue'], x_jitter=.1)
ax1.text(400, 2e9, 'r=0.64', fontsize=15)
plt.title('revenue by popularity', fontsize=15)
plt.xlabel('popularity', fontsize=13)
plt.ylabel('revenue', fontsize=13)

ax2 = plt.subplot(1, 2, 2)
ax2 = sns.regplot(x=all_data['budget'], y=all_data['revenue'],
                  data=all_data['revenue'], x_jitter=.1, color='r', marker='^')
ax2.text(1.6e8, 2.2e9, 'r=0.73', fontsize=15)
plt.title('revenue by budget', fontsize=15)
plt.xlabel('budget', fontsize=13)
plt.ylabel('revenue', fontsize=13)
fig.savefig('revenue_infu.png')
plt.close()

完整源码


import seaborn as sns
from wordcloud import WordCloud
import collections
import numpy as np
from copy import deepcopy
import pandas as pd
import json
import matplotlib.pyplot as plt

credits = pd.read_csv('./tmdb_5000_credits.csv')

movies = pd.read_csv('./tmdb_5000_movies.csv')

credits.rename(columns={'movie_id': 'id'}, inplace=True)

all_data = pd.merge(left=credits, right=movies, on=[
                    'id', 'title'], how='outer')

all_data = all_data[['original_title', 'crew', 'release_date', 'genres', 'keywords',
                    'production_companies', 'production_countries', 'revenue',
                     'budget', 'runtime', 'vote_average', 'popularity']]

serach_null = pd.isnull(all_data).sum()

null_array = all_data.loc[:, 'release_date'].isnull()
movie_name = all_data.loc[null_array, 'original_title']

all_data.loc[null_array, 'release_date'] = '2014-06-01'

all_data['profit'] = all_data['revenue'] - all_data['budget']

all_data.loc[:, 'genres'] = all_data.loc[:, 'genres'].transform(json.loads)

all_data.loc[:, 'release_date'] = pd.to_datetime(
    all_data.loc[:, 'release_date'])

all_data.loc[:, 'release_year'] = all_data.loc[:, 'release_date'].dt.year
all_data = all_data.drop(columns='release_date')

all_data.to_csv("all_data.csv", index=False)

all_movie_type = set()

def get_movie_type(val):

    type_list = []

    for item in val:

        if item:

            movie_type = item['name']

            type_list.append(movie_type)

            all_movie_type.add(movie_type)
    return ','.join(type_list)

all_data.loc[:, 'genres'] = all_data.loc[:, 'genres'].transform(get_movie_type)

all_movie_type = list(all_movie_type)

all_data_genres = deepcopy(all_data)
for column in all_movie_type:
    all_data_genres.loc[:, column] = 0

    mask = all_data_genres.loc[:, 'genres'].str.contains(column)

    all_data_genres.loc[mask, column] = 1

year_genres = all_data_genres.groupby(by='release_year')[all_movie_type].sum()

plt.figure(figsize=(20, 8), dpi=80)

x = year_genres.index
for movie_type in year_genres.columns:
    y = year_genres[movie_type]
    plt.plot(x, y)

plt.title('year_genres')
plt.legend(year_genres.columns, fontsize='x-small')
plt.ylabel('number')
plt.xlabel('year')
plt.grid(b=True, alpha=0.2)
plt.title = "year_genres"

plt.savefig('./year_genres')
plt.close()

genres_sum = all_data_genres[all_movie_type].sum()

plt.figure(figsize=(16, 8), dpi=80)
plt.pie(genres_sum, labels=genres_sum.index, autopct="%1.2f%%")
plt.legend(bbox_to_anchor=(1.4, 0.8))
plt.title = "genres_sum"
plt.savefig('./genres_sum')
plt.close()

type_profit = []

for column in all_movie_type:
    mask = all_data_genres.loc[:, column] == 1
    mean_profit = all_data_genres.loc[mask, 'profit'].mean()

    type_profit.append(mean_profit)

type_profit_series = pd.Series(
    data=type_profit, index=all_movie_type).sort_values()

plt.figure(figsize=(25, 10), dpi=80)
plt.bar(type_profit_series.index, type_profit_series, width=0.4)
plt.title = "type_profit"
plt.xticks(rotation=90)
plt.ylabel("million")
plt.grid(linestyle="--", alpha=0.5)
plt.text("TV Movie", 3e+06, "-1.15")
plt.text("Foreign", 3e+06, "-2.93")

plt.savefig('./type_profit')
plt.close()

all_data_firm = deepcopy(all_data)

all_data_firm.loc[:, 'Universal Pictures'] = 0
all_data_firm.loc[:, 'Paramount Pictures'] = 0

mask1 = all_data_firm.loc[:, 'production_companies'].str.contains(
    'Universal Pictures')

all_data_firm.loc[mask1, 'Universal Pictures'] = 1

mask2 = all_data_firm.loc[:, 'production_companies'].str.contains(
    'Paramount Pictures')

all_data_firm.loc[mask2, 'Paramount Pictures'] = 1

all_firm = ['Universal Pictures', 'Paramount Pictures']
firm_sum = all_data_firm[all_firm].sum()

plt.figure(figsize=(16, 8), dpi=80)
plt.pie(firm_sum, labels=all_firm, autopct="%1.2f%%")
plt.legend(bbox_to_anchor=(1.4, 0.8))
plt.title = "firm_sum_pie"
plt.savefig('./firm_sum_pie')
plt.close()

year_firm = all_data_firm.groupby(by='release_year')[all_firm].sum()

plt.figure(figsize=(20, 10), dpi=80)

x = year_firm.index
for firm in year_firm.columns:
    y = year_firm[firm]
    plt.plot(x, y)

plt.title('year_firm')
plt.legend(year_firm.columns, fontsize='x-small')
plt.ylabel('number')
plt.xlabel('year')
plt.grid(b=True, alpha=0.2)
plt.title = "year_firm"

plt.savefig('./year_firm')
plt.close()

all_data_original = deepcopy(all_data)
all_data_original.loc[:, 'original'] = 'original'

mask = all_data_original.loc[:, 'keywords'].str.contains('based on')
all_data_original.loc[mask, 'original'] = 'not_original'

original_table = all_data_original.groupby(by='original', as_index=True)[
    ['budget', 'revenue', 'profit']].mean()

plt.figure()
plt.bar([1, 2, 3], original_table.loc["not_original"],
        width=0.4, label="not_original")
plt.bar([1.4, 2.4, 3.4], original_table.loc["original"],
        width=0.4, label="original")
plt.legend()
plt.xticks([1.2, 2.2, 3.2], ['budget', 'revenue', 'profit'])
plt.ylabel('million')
plt.title("original_analyse")
plt.savefig('./original_analyse')
plt.close()

original_sum = all_data_original.groupby(by='original', as_index=True)[
    "original_title"].count()
print(original_sum)
plt.figure()
plt.pie(original_sum, labels=original_sum.index, autopct="%1.2f%%")
plt.legend(bbox_to_anchor=(0.8, 0.75))
plt.title("original_sum")
plt.savefig('./original_sum')
plt.close()

all_data_time = deepcopy(all_data)
print(all_data_time)

mask = all_data_time.loc[:, 'runtime'].isnull()
movie_name = all_data_time.loc[mask, 'original_title'].index

all_data_time.loc[all_data.loc[:, 'original_title'] ==
                  'Chiamatemi Francesco - Il Papa della gente', 'runtime'] = 94
all_data_time.loc[all_data.loc[:, 'original_title']
                  == 'To Be Frank, Sinatra at 100', 'runtime'] = 81

bucket = [0, 60, 90, 120, 150, 180, 240, 360]
all_data_time.loc[:, 'runtime'] = pd.cut(all_data_time.loc[:, 'runtime'],
                                         bins=bucket, include_lowest=True, right=False)
print(all_data_time.loc[:, 'runtime'].head)

runtime_table = all_data_time.groupby(
    by='runtime')[['revenue', 'vote_average']].mean()
print(runtime_table["revenue"])

figure, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=80)

axes[0].bar(x=[0, 1, 2, 3, 4, 5, 6], height=runtime_table["revenue"],
            width=0.4, label="revenue")
axes[1].bar(x=[0, 1, 2, 3, 4, 5, 6], height=runtime_table["vote_average"],
            width=0.4, label="vote_average")

x_label = ['[0, 60)', '[60, 90)', '[90, 120)',
           '[120, 150)',  '[150, 180)', '[180, 240)', '[240, 360)']

axes[0].set_xticks([0, 1, 2, 3, 4, 5, 6], x_label)
axes[1].set_xticks([0, 1, 2, 3, 4, 5, 6], x_label)
axes[0].legend(bbox_to_anchor=(0.2, 1))
axes[1].legend(bbox_to_anchor=(0.25, 1))
axes[0].set_title('runtime_revenue')
axes[1].set_title('runtime_vote_average')

plt.savefig("./runtime_table.png")
plt.close()

all_data_kw = all_data["keywords"]

key_words_list = []
for item in all_data_kw:
    item = eval(item)
    if item:
        key_words_list.extend([x['name'] for x in item if x['name'] not in [
                              'aftercreditsstinger', 'duringcreditsstinger']])

words_count = collections.Counter(key_words_list)
print(words_count)

wc = WordCloud(
    background_color='white',
    max_words=2000,
    max_font_size=100,
    random_state=8,
)

wc.generate_from_frequencies(words_count)
plt.imshow(wc)
plt.axis('off')
plt.savefig('keyword_wordcloud.png')

influ = all_data[['runtime', 'vote_average', 'budget',
                  'release_year', 'popularity', 'revenue']].corr()
print(influ.loc["revenue", :])

fig = plt.figure(figsize=(17, 5))

ax1 = plt.subplot(1, 2, 1)
ax1 = sns.regplot(x=all_data['popularity'], y=all_data['revenue'],
                  data=all_data['revenue'], x_jitter=.1)
ax1.text(400, 2e9, 'r=0.64', fontsize=15)
plt.title('revenue by popularity', fontsize=15)
plt.xlabel('popularity', fontsize=13)
plt.ylabel('revenue', fontsize=13)

ax2 = plt.subplot(1, 2, 2)
ax2 = sns.regplot(x=all_data['budget'], y=all_data['revenue'],
                  data=all_data['revenue'], x_jitter=.1, color='r', marker='^')
ax2.text(1.6e8, 2.2e9, 'r=0.73', fontsize=15)
plt.title('revenue by budget', fontsize=15)
plt.xlabel('budget', fontsize=13)
plt.ylabel('revenue', fontsize=13)
fig.savefig('revenue_infu.png')
plt.close()
savefig('keyword_wordcloud.png')

influ = all_data[['runtime', 'vote_average', 'budget',
                  'release_year', 'popularity', 'revenue']].corr()
print(influ.loc["revenue", :])

fig = plt.figure(figsize=(17, 5))

ax1 = plt.subplot(1, 2, 1)
ax1 = sns.regplot(x=all_data['popularity'], y=all_data['revenue'],
                  data=all_data['revenue'], x_jitter=.1)
ax1.text(400, 2e9, 'r=0.64', fontsize=15)
plt.title('revenue by popularity', fontsize=15)
plt.xlabel('popularity', fontsize=13)
plt.ylabel('revenue', fontsize=13)

ax2 = plt.subplot(1, 2, 2)
ax2 = sns.regplot(x=all_data['budget'], y=all_data['revenue'],
                  data=all_data['revenue'], x_jitter=.1, color='r', marker='^')
ax2.text(1.6e8, 2.2e9, 'r=0.73', fontsize=15)
plt.title('revenue by budget', fontsize=15)
plt.xlabel('budget', fontsize=13)
plt.ylabel('revenue', fontsize=13)
fig.savefig('revenue_infu.png')
plt.close()

Original: https://blog.csdn.net/qq_43050407/article/details/124530132
Author: 三心菱方
Title: 电影数据分析

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/675806/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球