python 让你的报表做得更好(三)

python+plotly让你的数据可视化,绘制各种牛逼的柱状图、折线图。

安装方式:pip install plotly pandas openpyxl

import pandas as pd
import os
import plotly.express as px

"""
数据可视化
"""


# 输入一个DataFrame,根据索引,输出对应索引的内容
def group_by_select(df: pd.DataFrame, column: str, slice=None):
    # 地区、演员表中的每一个单元格有多个数据,由逗号分割,可以采用按逗号分割的方式对数据进行处理后再统计
    # 上映时间中的每一个单元格是字符串格式的日期,字符串前4个字符则为年份,可以采用切片的方式提取提取年份
    '''
    :param df: 输入的DataFrame
    :param column: column=DataFrame的任一列索引,比如column='地区'
    :param slice: 返回数据的长度
    :return:
    output=[('美国', 153), ('英国', 38), ('加拿大', 22), ('日本', 15), ('德国', 12)]
    output2存放output对应的电影名[['<<明日边缘>>','<<银河护卫队>>',...],[...],...[]]
    '''
    data_list = df[column].tolist()
    output = {}
    for data in data_list:
        if "-" in data:
            data = data[:4]
        for dat in data.split(','):
            output[dat] = output.get(dat, 0) + 1
    output = sorted(output.items(), key=lambda x: x[1], reverse=True)  # 降序排列
    if slice:
        output = output[:slice]  # 切片

    output2 = []
    for op, _ in output:
        output2.append(df[df[column].str.contains(op)]['电影名'].map(lambda x: f"<<{x}>>").tolist())
    return output, output2

# 获取当前文件所在的文件夹路径
base_path = os.getcwd()
excel_path = os.path.join(base_path, '科幻片排行榜.xlsx')
df = pd.read_excel(excel_path, sheet_name='sheet1')

region, _ = group_by_select(df=df, column='地区')
columns = ['地区', '电影数量']
region = pd.DataFrame(region, columns=columns)
# 创建一个柱状图
fig = px.bar(region,
             x=columns[0], # x轴数据
             y=columns[1], # y轴数据
             text=columns[1], # 数据标签
             title='各国家地区电影数量', # 标题
             color=columns[1], # 用不同的颜色显示不同的柱状图
             )
# 设置数据标签显示在柱状图外面
fig.update_traces(textposition='outside')
fig.show()
fig.write_html('柱状图.html')

绘制的柱状图效果如下

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值