Python利用猫眼票房接口及pyecharts制作图表

2022-01-20 16:39:15 浏览数 (1)

安装pip包

安装requests包

代码语言:javascript复制
pip install requests

安装pyecharts包

代码语言:javascript复制
pip install pyecharts

演示

柱状图:

折线图:

饼图:

代码实现

代码语言:javascript复制
import requests
from pyecharts.charts import Bar, Line, Pie
from pyecharts.globals import ThemeType
from pyecharts import options as opts


def data_one():
    url = 'https://piaofang.maoyan.com/getBoxList?date=1&isSplit=true&timeStamp=1637233875102&index=242&channelId=40009&sVersion=1&signKey=7f498fbe57c7ea7e8889fdfa2b65e1b8'
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (HTML5, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
    }
    # 定义两个空列表
    name_list = []
    movie_list = []
    res = requests.get(url=url, headers=headers).json()
    # 索引到list里
    json_dict = res['boxOffice']['data']['list']
    for i in json_dict:
        # 在获取到的数据里索引电影名
        name = i['movieInfo']['movieName']
        # 如果票房的最后一位是亿,那么票房的数字乘10000
        if i['sumBoxDesc'][-1] == '亿':
            a = float(i['sumBoxDesc'][:-1]) * 10000
        # 否则
        else:
            # 如果票房的最后一位不是亿,那就是万,不变
            a = i['sumBoxDesc'][:-1]

        # 将电影名、票房添加到上面定义的两个空列表中
        name_list.append(name)
        movie_list.append(a)
    print('data ===> success')
    # 向函数传值
    see_bar(name_list, movie_list)
    see_line(name_list, movie_list)
    see_pie(name_list, movie_list)


# 柱状图表
def see_bar(name_list, movie_list):
    bar = Bar(init_opts=opts.InitOpts(width='1200px', height='600px', page_title='猫眼电影', theme=ThemeType.VINTAGE))
    # X轴数据
    bar.add_xaxis(name_list, )
    # Y轴数据
    bar.add_yaxis('票房', movie_list)
    # 全局设置
    bar.set_global_opts(
        title_opts=opts.TitleOpts(
            # 主标题
            title='猫眼电影',
            # 副标题
            subtitle='票房数据',
            # 标题位置
            pos_left='center',
            # 主标题样式
            title_textstyle_opts=opts.TextStyleOpts(font_size=30, color='#ee3f4d'),
            # 副标题样式
            subtitle_textstyle_opts=opts.TextStyleOpts(font_size=20, color='#f0a1a8')),
        # x轴设置
        xaxis_opts=opts.AxisOpts(name_rotate=0, axislabel_opts={"rotate": 0, "interval": 0, }, ),  # 名字太长不显示,倾斜角度

        # 图例设置
        legend_opts=opts.LegendOpts(pos_left='right', textstyle_opts=opts.TextStyleOpts(font_size=20, color='#de1c31')),

        # y轴 单位
        yaxis_opts=opts.AxisOpts(name='单位:万元')
    )

    # 格式化输出
    bar.set_series_opts(
        label_opts=opts.LabelOpts(formatter='{@[1]}万'))
    # 渲染页面
    bar.render('bar.html')
    print('bar  ===> success')


# 折线图表
def see_line(name_list, movie_list):
    line = Line(init_opts=opts.InitOpts(width='1200px', height='600px', page_title='猫眼电影', theme=ThemeType.VINTAGE))
    # X轴数据
    line.add_xaxis(name_list)
    # Y轴数据
    line.add_yaxis('票房', movie_list)
    # 全局设置
    line.set_global_opts(
        title_opts=opts.TitleOpts(
            # 主标题
            title='猫眼电影',
            # 副标题
            subtitle='票房数据',
            # 标题位置
            pos_left='center',
            # 主标题样式
            title_textstyle_opts=opts.TextStyleOpts(font_size=30,
                                                    color='#ee3f4d'),
            # 副标题样式
            subtitle_textstyle_opts=opts.TextStyleOpts(font_size=20,
                                                       # 颜色
                                                       color='#f0a1a8')),
        # x轴设置
        # x轴文字的角度"rotate": 0
        xaxis_opts=opts.AxisOpts(name_rotate=0, axislabel_opts={"rotate": 0, "interval": 0, }, ),  # 名字太长不显示,倾斜角度

        # 标签设置
        # pos_left='left' 标签位置
        # textstyle_opts 标签
        legend_opts=opts.LegendOpts(pos_left='left', textstyle_opts=opts.TextStyleOpts(font_size=20, color='#de1c31')),

        # y轴 单位
        yaxis_opts=opts.AxisOpts(name='单位:万元')
    )

    # 格式化输出
    line.set_series_opts(
        label_opts=opts.LabelOpts(formatter='{@[1]}万', position='right'))
    # 渲染页面
    line.render('line.html')
    print('line ===> success')


# 饼图
def see_pie(name_list, movie_list):
    # 创建一个Pie对象
    pie = Pie(init_opts=opts.InitOpts(width='1200px', height='600px', page_title='猫眼电影', theme=ThemeType.VINTAGE))
    # 定义一个空的列表
    data_list = []
    # 循环zip(name_list,movie_list),将票房和电影名合成key,value格式
    for i in zip(name_list, movie_list):
        # 将key,value格式数据合成在data_list
        data_list.append(list(i))
    # 传入数据,鼠标停留显示
    # series_name = '猫眼票房' 鼠标放在块上的标签文字
    pie.add(
        data_pair=data_list, series_name='猫眼票房', label_opts=opts.LabelOpts(font_size=12)  # 视觉引导线的字体
    )
    # 全局设置
    pie.set_global_opts(
        title_opts=opts.TitleOpts(
            # 主标题
            title='猫眼电影',
            # 副标题
            subtitle='票房数据',
            # 标题位置
            pos_left='center',
            # 主标题样式
            title_textstyle_opts=opts.TextStyleOpts(
                font_size=20, color='black'
            ),
            # 副标题样式
            subtitle_textstyle_opts=opts.TextStyleOpts(font_size=14, color='black')
        ),
        # 标签设置
        # pos_left='right' 标签位置
        # orient='vertical' 标签竖排列
        legend_opts=opts.LegendOpts(pos_left='right', orient='vertical')
    )
    pie.render('pie.html')
    print('pie  ===> success')

# 主函数
if __name__ == '__main__':
    data_one()

版权属于:kenvie

本文链接:https://cloud.tencent.com/developer/article/1937758

商业转载请联系作者获得授权,非商业转载请注明出处。

0 人点赞