数据分析项目实战:电影数据分析

数据分析 专栏收录该内容
10 篇文章 1 订阅

一、项目背景

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

本案例来源于 kaggle 上的 TMDB 5000 Movie Dataset 数据集,为了探讨电影数据可视化, 为电影的制作提供数据支持,主要研究以下几个问题:

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

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

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

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

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

(6)分析电影关键字

二、理解数据

**1、采集数据 **

下载数据集:https://www.kaggle.com/tmdb/tmdb-movie-metadata

2、导入数据,并进行查看

代码实现:

import pandas as pd
import json

# =============================================加载数据===================================

# 加载数据 --credits
credits = pd.read_csv('./tmdb_5000_credits.csv')
print('credits:\n', credits)
print('*' * 100)
print('credits:\n', credits.columns)
print('*' * 100)
print('credits:\n', credits.info())
print('*' * 100)

# 加载数据
movies = pd.read_csv('./tmdb_5000_movies.csv')
print('movies:\n', movies)
print('#' * 100)
print('movies:\n', movies.columns)
print('#' * 100)
print('movies:\n', movies.info())
print('#' * 100)

3、数据说明

电影数据说明表

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

三、数据清洗

1、合并数据集

先将 credits 数据集和 movie 数据集中的数据合并在一起,再查看合并后的数据集信息

代码实现:

# (1)合并数据
# print(credits['crew'])
# credits 中存在 movie_id  和 title
# movies 中存在 id 和 title
# 将 credits 中的 movie_id 修改为 id
credits.rename(columns={'movie_id': 'id'}, inplace=True)
# print('credits的列索引:\n', credits.columns)
# 主键合并 ---on id 和 title
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)

2、选取子集

由于数据集中包含的信息过多,其中部分数据并不是我们研究的重点,所以从中选取我 们需要的数据:

代码实现:

# 筛选特征
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.columns)
print('all_data的形状:\n', all_data.shape)

由于后面的数据分析涉及到电影类型的利润计算,先求出每部电影的利润,并在数据集 data 中增加 profit 数据列

代码实现:

# 增加利润
all_data['profit'] = all_data['revenue'] - all_data['budget']
print('all_data的列索引:\n', all_data)
print('all_data的形状:\n', all_data)

3、缺失值处理

代码实现:

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

# 检测到 release_date 存在一个缺失值 ---针对方式:填充,查找具体的电影名称,根据电影名称查找上映时间
# a、确定bool数组
mask = all_data.loc[:, 'release_date'].isnull()
# b、根据bool数组来获取缺失值位置的电影名称
movie_name = all_data.loc[mask, 'title']
print('缺失上映日期的电影名称为:\n', movie_name)
# 缺失上映日期的电影名称为:
#  4553    America Is Still the Place
# Name: title, dtype: object

# 通过上网查询该电影的上映日期为:2014-06-01
# c 、 填充
all_data.loc[mask, 'release_date'] = '2014-06-01'

# 将 release_date 转化为 pandas支持的时间序列
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

通过上面的结果信息可以知道:整个数据集缺失的数据比较少。 其中 release_date(首次上映日期)缺失 1 个数据,可以通过网上查询补齐这个数据,填补 release_date(首次上映日期)数据

4、数据格式转换

genres 列数据处理:

代码实现:

# 查看电影风格数据
print('电影风格:\n', all_data.loc[:, 'genres'])  # json数据类型

# json.loads # 可以将json转化为python类型
# 将 all_data.loc[:, 'genres'] 由 json类型转化为 python类型
all_data.loc[:, 'genres'] = all_data.loc[:, 'genres'].transform(json.loads)

# 构建所有的电影的类型
all_movie_type = set()


# 定义一个函数,来提取电影类型
def get_movie_type(val):
    """
    获取电影类型
    :param val: 数据
    :return: 提取之后的电影类型数据
    """
    # 构建一个空列表,用来存储每一个电影的电影类型
    type_list = []
    # 遍历 列表
    for item in val:
        # 如果item存在
        if item:
            # 获取该电影的电影类型
            movie_type = item['name']
            # 将其加入到 type_list
            type_list.append(movie_type)
            # 将其加入到 all_movie_type
            all_movie_type.add(movie_type)

    return ','.join(type_list)


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

print('获取电影类型之后的结果:\n', all_data.loc[:, 'genres'])

# 将所有的电影类型转化为 list
all_movie_type = list(all_movie_type)

# 遍历
for column in all_movie_type:
    # 先增加
    all_data.loc[:, column] = 0

    # 构建bool数组
    mask = all_data.loc[:, 'genres'].str.contains(column)
    # 修改
    all_data.loc[mask, column] = 1

print('all_data:\n', all_data)

四、数据分析及可视化

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

1、建立包含年份与电影类型数量的关系数据框

代码实现:

# 需求:
# (1)电影类型如何随着时间的推移发生变化的?
# 电影类型、 ---genres(电影风格)
# 时间 ------ release_date (首次上映时间)
# 每一年各种电影的变化趋势。
# 按照发行年份进行分组,统计各个电影各个年份的数量
res = all_data.groupby(by='release_year')[all_movie_type].sum()
print('res:\n',res.tail())

# 根据 res 进行结果可视化

2、数据可视化

(1)绘制电影数据类型随时间变化趋势图

代码实现:

import matplotlib.pyplot as plt

# 创建画布
plt.figure()
# 默认不支持中文 ---修改RC参数
plt.rcParams['font.sans-serif'] = 'SimHei'
# 增加字体之后变得不支持负号,需要修改RC参数让其继续支持负号
plt.rcParams['axes.unicode_minus'] = False
# 构建横轴数据
x = groupby_year.index
for movie_type in groupby_year.columns:
    # 构建纵轴数据
    y = groupby_year[movie_type]
    # 绘制折线图
    plt.plot(x, y)
# 增加标题
plt.title('电影数据类型随时间变化趋势图')
# 设置图例
plt.legend(groupby_year.columns, fontsize='x-small')
# 设置纵轴名称
plt.ylabel('数量')
# 设置横轴名称
plt.xlabel('年份')
# 增加网络曲线
plt.grid(b=True, alpha=0.2)
# 保存图片
plt.savefig('./电影数据类型随时间变化')
# 展示
plt.show()

分析结论: 从图中观察到,随着时间的推移,所有电影类型都呈现出增长趋势,尤其是 1992 年以 后各个类型的电影均增长迅速,其中 Drama(戏剧)和 Comedy(喜剧)增长最快,目前仍是最热 门的电影类型

(2)绘制各种类型电影数量的统计柱状图

代码实现:

# 导包
from pyecharts.charts import Bar
from pyecharts import options as opts
from pyecharts.globals import ThemeType

movie_type_sum = all_data[list(all_movie_type)].sum(axis=0).sort_values()
print('movie_type_sum:\n', movie_type_sum.tail())

# 1、实例化
bar = Bar(
    # 初始化配置
    init_opts=opts.InitOpts(
        width='2000px',  # 画布宽度
        height='1000px',  # 画布高度
        theme=ThemeType.WHITE,  # 主题 设置方式
    )
)

# 2、添加数据
# 横轴数据
bar.add_xaxis(
    movie_type_sum.index.tolist()
)

# 纵轴数据
bar.add_yaxis(
    '',
    movie_type_sum.values.tolist(),
    color='#6495ED'
)

# 3、增加系列配置
bar.set_series_opts(
    label_opts=opts.LabelOpts(
        is_show=False  # 不展示标签
    )
)

# 4、增加全局配置
bar.set_global_opts(
    title_opts=opts.TitleOpts(
        title='各种电影类型数量统计柱状图',  # 标题名字
        pos_left='center'  # 标题位置
    ),
    legend_opts=opts.LegendOpts(
        is_show=True  # 展示图列
    ),
    xaxis_opts=opts.AxisOpts(
        name='数量'  # 横轴名称
    ),
    yaxis_opts=opts.AxisOpts(
        name='电影类型'  # 纵轴名称
    )
)

# 图形水平
bar.reversal_axis()

# 5、生成文件
bar.render('./各种电影类型数量统计柱状图.html')

(3)绘制各种电影类型的占比饼图


代码实现:

# 导包
from pyecharts.charts import Pie
from pyecharts import options as opts
from pyecharts.globals import ThemeType

# 1、实例化
pie = Pie(
    # 初始化配置
    init_opts=opts.InitOpts(
        width='2000px',  # 画布宽度
        height='1000px',  # 画布高度
        theme=ThemeType.WHITE,  # 主题 设置方式
    )
)

# 2、添加数据
pie.add(
    '',
    data_pair=[list(x) for x in zip(list(movie_type_sum.index), movie_type_sum.values.tolist())],
    radius=['20%', '75%']  # 内径,外径
)

# 3、增加系列配置
pie.set_series_opts(
    label_opts=opts.LabelOpts(
        is_show=True,  # 展示标签
        formatter='{b}{d}'  # 数据显示的样式
    )
)

# 4、增加全局配置
pie.set_global_opts(
    title_opts=opts.TitleOpts(
        title='各种电影类型占比饼图',  # 标题名字
        pos_left='center'  # 标题位置
    ),
    legend_opts=opts.LegendOpts(
        is_show=False  # 不展示图列
    )
)

# 5、生成文件
pie.render('./各种电影类型占比饼图.html')

分析结论:

(a)从上面的结果可以看出,在所有的电影类型中,Drama(戏剧)类型电影最多,占所有电影类型的 18.9%,其次为 Comedy(喜剧),占所有电影类型的 14.2%

(b)在所有电影类型中,电影数量排名前 5 的电影类型分别为:
Drama(戏剧)、Comedy(喜剧)、Thriller(惊悚)、Action(动作)、Romance(冒险)

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

1、先求出各种电影类型的平均利润

代码实现:

# 电影类型及利润的关系
#  all_data  --电影类型已存在
#  利润 --- 收入 - 预算
# 计算 利润
all_data.loc[:, 'profit'] = all_data.loc[:, 'revenue'] - all_data.loc[:, 'budget']
print('利润:\n', all_data.loc[:, 'profit'])
# 对比 各种电影类型 的 平均利润 ---柱状图
#  Music ---> profit  --- sum   / music 电影的数量 count  ===>平均每一个music电影的利润
#
# 不能使用分组聚合  --存在多列的数据为电影类型
# 构建一个list来存储各种类型电影的平均利润
movie_type_profit = []
# 遍历 所有的 电影类型
for column in all_movie_type:
    # column : 各种电影类型
    # 确定bool数组 ---为True的电影,属于column类型
    mask = all_data.loc[:, column] == 1
    # 筛选 column 类型电影 --该类型电影利润的平均值
    mean_profit = all_data.loc[mask, 'profit'].mean()

    # 加入到 movie_type_profit
    movie_type_profit.append(mean_profit)

print(all_movie_type)
print(movie_type_profit)
# 创建series
res_series = pd.Series(data=movie_type_profit, index=all_movie_type).sort_values()
print('res_series:\n', res_series)

2、电影类型平均利润数据可视化

代码实现:

# 可视化 ---比 各种电影类型 的 平均利润 ---柱状图
# Pyecharts
# 实例化对象
bar = Bar(
    # 初始化配置
    init_opts=opts.InitOpts(
        width='900px',
        height='600px',
        theme="white"
    )
)

# 添加数据
bar.add_xaxis(
    xaxis_data=res_series.index.tolist()
)

bar.add_yaxis(
    series_name=' ',
    yaxis_data=[float('%.2f' % i) for i in (res_series / 1000000)],
    color='#6495ED'
)

# 设置全局配置
bar.set_global_opts(
    # 标题
    title_opts=opts.TitleOpts(
        title='各种电影类型利润统计柱状图',
        # subtitle='广州分校Python0421班级'
        pos_left='center',
        pos_top='3%'
    ),
    # 图例
    legend_opts=opts.LegendOpts(
        is_show=False,
    ),
    # 横轴坐标设置
    xaxis_opts=opts.AxisOpts(
        name='利润(百万)'
    ),
    # # 坐标系设置
    yaxis_opts=opts.AxisOpts(
        name='电影类型'
    )
)

# 设置系列配置
bar.set_series_opts(
    label_opts=opts.LabelOpts(
        is_show=True,
        position='right',
        color='#000000',
        formatter='{c}'
    )
)
# 反转坐标轴
bar.reversal_axis()

# 生成文件
bar.render('./各种电影类型利润统计柱状图.html')

分析结论:

从图中观察到,拍摄 Animation、Adventure、Fantasy 这三类电影盈利最好,而拍摄 Foreign、TV Movie 这两类电影会存在亏本的风险

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

Universal Pictures(环球影业)和 Paramount Pictures(派拉蒙影业)是美国两家电影 巨头公司

(1)、查看 Universal Pictures 和 Paramount Pictures 两家影视公司电影发行的数量 先对 production_companies 列数据进行处理

查询 production_companies 数据列并统计 Universal Pictures 和 Paramount Pictures 的数据

代码实现:

# 3、Universal Pictures 和 Paramount Pictures 两家影视公司发行 电影的对比情况如何?
# 如何决定 某个电影 属于哪家公司?
#  production_companies 制作公司
print('查看制作公司字段:\n', all_data.loc[:, 'production_companies'])  # json字符串数据
# print('查看制作公司字段:\n',type(all_data.loc[0,'production_companies']))
# 只要 production_companies 数据里面包含Universal Pictures  ---该电影属于Universal Pictures
# 只要 production_companies 数据里面包含Paramount Pictures  ---该电影属于Paramount Pictures
# 先增加两列数据
all_data.loc[:, 'Universal Pictures'] = 0
all_data.loc[:, 'Paramount Pictures'] = 0
# 判断 ---bool数组
mask1 = all_data.loc[:, 'production_companies'].str.contains('Universal Pictures')
# 修改
all_data.loc[mask1, 'Universal Pictures'] = 1

# 判断 --bool数组
mask2 = all_data.loc[:, 'production_companies'].str.contains('Paramount Pictures')
# 修改
all_data.loc[mask2, 'Paramount Pictures'] = 1

print('all_data:\n', all_data)
# 保存
all_data.to_excel('./hhhhh.xlsx')

绘制饼状图比较两家公司发行的电影占比:

代码实现:

# 比较两家公司总的发行量对比饼图
# 发行量计算
res_pie = all_data.loc[:, ['Universal Pictures', 'Paramount Pictures']].sum()
print('res_pie:\n', res_pie)
# # Pyecharts
#
pie = Pie(
    # 初始化配置
    init_opts=opts.InitOpts(
        width='900px',
        height='500px',
        theme="white"
    )
)
# 准备数据
data_pair = [(k, v) for k, v in zip(res_pie.index.tolist(), res_pie.tolist())]
print('data_pair:\n', data_pair)

# 添加数据
pie.add(
    series_name=res_pie.index.tolist(),
    data_pair=data_pair,
    radius=['30%', '70%'],
    # rosetype='radius'
)

# 设置全局配置
pie.set_global_opts(
    # 标题
    title_opts=opts.TitleOpts(
        title='各家公司发行电影数量占比饼图',
        # subtitle='广州分校Python0421班级'
        pos_left='center',
        pos_top='3%'
    ),
    # 图例
    legend_opts=opts.LegendOpts(
        is_show=False,
        # type_='scroll'
    ),
)
# 设置系列配置
pie.set_series_opts(
    label_opts=opts.LabelOpts(
        is_show=True,
        color='#000000',
        formatter='{b}:{c}'
    )
)
# 生成文件
pie.render('./各家公司发行电影数量占比饼图.html')

(2)分析 Universal Pictures 和 Paramount Pictures 两家影视公司电影发行的走势 抽取相关数据列进行处理,绘制两家影视公司电影发行的折线图

代码实现:

# 查看两家公司发行量随时间变化趋势
# 按照 release_year分组,统计两家公司每年的发行数量
res_line = all_data.groupby(by='release_year')[['Universal Pictures', 'Paramount Pictures']].sum()
print('res_line:\n', res_line)

# 绘制折线图
# 创建画布
plt.figure()
# 默认不支持中文 ---修改RC参数
plt.rcParams['font.sans-serif'] = 'SimHei'
# 增加字体之后变得不支持负号,需要修改RC参数让其继续支持负号
plt.rcParams['axes.unicode_minus'] = False
# 绘图
# 准备x
x = np.arange(res_line.shape[0])

# 准备y
y = res_line.values

# 绘图
plt.plot(x, y)

# 增加标题
plt.title('各个电影公司发行量随时间变化趋势')
# 图例
plt.legend(res_line.columns)
# 横轴名称
plt.xlabel('时间')
# 纵轴名称
plt.ylabel('发行量')
# 横轴刻度
plt.xticks(x[::10], res_line.index[::10], rotation=45)
# 展示
plt.show()

分析结论:

从图中观察到,随着时间的推移,Universal Pictures 和 Paramount Pictures 公司的 电影发行量呈现出增长趋势,尤其是在 1995 年后增长迅速,其中 Universal Pictures 公司 比 Paramount Pictures 公司发行的电影数量更多

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

对 keywords 列数据处理:

代码实现:

#  4、 改编电影和原创电影的对比情况如何?
# 如何确定电影是改编的?还是原创的呢?
#  与电影相关的关键字  keywords
# 如果在这里是根据小说改编的 base on novel/fairy tale/.....
# 只要出现 base on 这个字眼 就说明 是改编的
# 查看 keywords
print('查看 keywords:\n', all_data.loc[:, 'keywords'])

# 先增加一列
all_data.loc[:, 'not_original'] = 'original'

# 确定bool数组,如果是改编的,那就将 not_original 修改为1
mask = all_data.loc[:, 'keywords'].str.contains('based on')
# 修改
all_data.loc[mask, 'not_original'] = 'not_original'

print('all_data:\n', all_data)

# 保存
# all_data.to_excel('./hhhhh.xlsx')

# 按照是否原创进行分组,统计原创电影的平均预算、收入、利![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/985f069f07bc4778bced184a31074927~tplv-k3u1fbpfcp-zoom-1.image)润
res_not_original = all_data.groupby(by='not_original')[['budget', 'revenue', 'profit']].mean()
print('res_not_original:\n', res_not_original)

描绘柱状图,对改编电影与原创电影在预算、收入及利润三方面进行比较:

代码实现:

# 可视化
# Pyecharts
# 实例化对象
bar = Bar(
    # 初始化配置
    init_opts=opts.InitOpts(
        width='900px',
        height='600px',
        theme="white"
    )
)

# 添加数据
bar.add_xaxis(
    xaxis_data=res_not_original.columns.tolist()
)

bar.add_yaxis(
    series_name='not_original',
    yaxis_data=res_not_original.loc['not_original', :].tolist(),
    # color='#6495ED'
    gap='0%',
)

bar.add_yaxis(
    series_name='original',
    yaxis_data=res_not_original.loc['original', :].tolist(),
    # color='#6495ED',
    category_gap='60%'
)
# 设置全局配置
bar.set_global_opts(
    # 标题
    title_opts=opts.TitleOpts(
        title='原创与非原创电影预算、收入、利润对比柱状图',
        # subtitle='广州分校Python0421班级'
        pos_left='center',
        # pos_top='3%'
    ),
    # 图例
    legend_opts=opts.LegendOpts(
        is_show=True,
        pos_top='5%'
    ),
    # 横轴坐标设置
    xaxis_opts=opts.AxisOpts(
        name='对比字段'
    ),
    # # 坐标系设置
    yaxis_opts=opts.AxisOpts(
        name='预算、收入、利润'
    )
)

# 设置系列配置
bar.set_series_opts(
    label_opts=opts.LabelOpts(
        is_show=True,
        position='top',
        color='#000000',
        formatter='{c}'
    )
)

# 生成文件
bar.render('./原创与非原创电影预算、收入、利润对比柱状图.html')

分析结论:从图上可以看出,改编电影的预算略高于原创电影,但改编电影的票房收入 和利润远远高于原创电影, 这可能是改编电影拥有一定的影迷基础

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

电影时长与电影票房的关系:

电影时长与电影平均评分的关系:

分析结论:从图上可以看出,电影要想获得较高的票房及良好的口碑,电影的时长应保 持在 90~150 分钟内

代码实现:

# 5、电影时长与电影票房及评分的关系
# 电影票房 ---收入 ---revenue
# 评分 --- vote_average
# 电影时长 ----runtime
print('查看电影时长、票房、评分:\n', all_data.loc[:, ['runtime', 'revenue', 'vote_average']])
# 电影时长存在缺失值
# 查询缺时长的电影,然后 ---查询具体的电影时长,填充
# 确定bool数组
mask = all_data.loc[:, 'runtime'].isnull()
# 筛选缺失的电影名称
movie_name = all_data.loc[mask, 'title']

print('缺失时长的电影名称为:\n', movie_name)
#  缺失时长的电影名称为:
#  2656    Chiamatemi Francesco - Il Papa della gente  94分钟
# 4140                   To Be Frank, Sinatra at 100  81分钟
# Name: title, dtype: object

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

# 电影时长与电影票房及评分的关系
# 按照 电影时长 分组,查看不同电影时长的平均票房、平均评分
# 对比不同的时长段的电影的平均票房、平均评分
# 对电影时长进行离散化
# 等宽、等频、自定义
#  自定义分组
bins = [0, 60, 90, 120, 150, 180, 210, 350]
# 进行离散化
all_data.loc[:, 'runtime'] = pd.cut(x=all_data.loc[:, 'runtime'],
                                    bins=bins,
                                    include_lowest=True)
# 分组聚合
res_runtime = all_data.groupby(by='runtime')[['revenue', 'vote_average']].mean().sort_values(
    by=['revenue', 'vote_average'])

print('res_runtime:\n', res_runtime)

电影时长与电影票房及评分的关系柱状图:

代码实现:

# 绘图
# 可视化
# Pyecharts
# 实例化对象
bar = Bar(
    # 初始化配置
    init_opts=opts.InitOpts(
        width='900px',
        height='600px',
        theme="purple-passion"
    )
)

# 添加数据
bar.add_xaxis(
    xaxis_data=[str(tmp) for tmp in res_runtime.index]
)

bar.add_yaxis(
    series_name='revenue',
    yaxis_data=res_runtime.loc[:, 'revenue'].tolist(),
    # color='#6495ED'
    gap='0%',
    yaxis_index=0
)

bar.add_yaxis(
    series_name='vote_average',
    yaxis_data=res_runtime.loc[:, 'vote_average'].tolist(),
    # color='#6495ED',
    category_gap='60%',
    yaxis_index=1,
)
# 增加坐标轴
bar.extend_axis(
    # 增加纵轴
    yaxis=opts.AxisOpts(
        type_='value',  # 数值轴
        min_=0,
        max_=10,
        position='right',
        offset=0,
        name='评分',
        axislabel_opts=opts.LabelOpts(
            formatter='{value}'
        )
    )
)

# 设置全局配置
bar.set_global_opts(
    # 标题
    title_opts=opts.TitleOpts(
        title='不同时长的电影票房、评分的对比柱状图',
        # subtitle='广州分校Python0421班级'
        pos_left='center',
        # pos_top='3%'
    ),
    # 图例
    legend_opts=opts.LegendOpts(
        is_show=True,
        pos_top='5%'
    ),
    # 横轴坐标设置
    xaxis_opts=opts.AxisOpts(
        name='时间段'
    ),
    # # 坐标系设置
    yaxis_opts=opts.AxisOpts(
        name='票房'
    ),
    tooltip_opts=opts.TooltipOpts(
        formatter='{c}',
        trigger='axis',
        axis_pointer_type='cross'
    )
)

# 设置系列配置
bar.set_series_opts(
    label_opts=opts.LabelOpts(
        is_show=False,
        position='top',
        color='#000000',
        formatter='{c}',
    )
)

# 生成文件
bar.render('./不同时长的电影票房、评分的对比柱状图.html')
  • 3
    点赞
  • 3
    评论
  • 49
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

<p style="font-size:16px;"> <span style="font-size:18px;"><span style="background-color:#FFFFFF;">Python 数据分析+pyecharts 可视化 + Flask Web端服务 + 2大真实项目 手把手实战教程.</span></span> </p> <p style="font-size:16px;"> Python数据分析课程以Python为核心工具,结合其工具包pyecharts+开发IDEA pycharm + web 框架Flask。课程以案例为中心,结合案例讲解让同学们更清晰的掌握每一个知识点的应用与工作流程。 </p> <p style="font-size:16px;"> <strong>2大项目案例 重点讲解 开发架构 + 部署上线流程,手把手实战教学。 </strong> </p> <p style="font-size:16px;"> 1. 开发架构 </p> <p style="font-size:16px;"> (1)基于PyCharm + Flask + Echarts + Python+Pandas 组合进行数据分析全栈开发 </p> <p style="font-size:16px;"> (2)PyCharm 项目开发的IDEA; </p> <p style="font-size:16px;"> (3)Flask作为WEB框架,主要连接后端服务数据。主要演示 前后端分离架构 + 模板直接渲染架构; </p> <p style="font-size:16px;"> (4)Echarts 这里使用pyecharts 作为可视化数据展示; </p> <p style="font-size:16px;"> (5)Python 作为后端数据生成的语言; </p> <p style="font-size:16px;"> (6)Pandas 主要作为数据分析库; </p> <p style="font-size:16px;"> 2 部署线上服务案例 </p> <p style="font-size:16px;"> (1)资讯类项目-基于Flask 模板渲染 词云; </p> <p style="font-size:16px;"> (2)人口统计项目-基于Flask 前后端分离 Line 和 Bar 组合 数据统计; </p> <p style="font-size:16px;"> <strong>课程特色</strong> </p> <p style="font-size:16px;"> 课程风格通俗易懂 </p> <p style="font-size:16px;"> 案例内容持续更新 </p> <p style="font-size:16px;"> 简单易懂,接地气的案例 </p> <p style="font-size:16px;"> 有效,提供所有数据和代码 </p> <p style="font-size:16px;"> <img src="https://img-bss.csdn.net/201908291440447128.png" alt="" /> </p> <p style="font-size:16px;"> <br /> </p> <p style="font-size:16px;"> <br /> </p> <p style="font-size:16px;"> <br /> </p> <p style="font-size:16px;"> <img src="https://img-bss.csdn.net/201908291440543352.png" alt="" /> </p> <p style="font-size:16px;"> <br /> </p> <p style="font-size:16px;"> <br /> </p> <p style="font-size:16px;"> <img src="https://img-bss.csdn.net/201908291441085943.png" alt="" /> </p> <p style="font-size:16px;"> <br /> </p> <p style="font-size:16px;"> <br /> </p> <p style="font-size:16px;"> <img src="https://img-bss.csdn.net/201908291441198368.png" alt="" /> </p>
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值