话不多说,看效果
1)先准备销售表内容:高手自测.xlsx
2)向kimi上传文件,并提问
3)得出结果,代码如下:
import pandas as pd
from pyecharts.charts import Bar, Line, Overlap
from pyecharts import options as opts
# 读取Excel文件
df = pd.read_excel('高手自测3.xlsx')
# 数据预处理
# 将数据转换为适合图表展示的格式
data = {
'一处': {'一季度': df.loc[df['Unnamed: 1'] == '张三', '一季度'].values[0],
'二季度': df.loc[df['Unnamed: 1'] == '张三', '二季度'].values[0],
'三季度': df.loc[df['Unnamed: 1'] == '张三', '三季度'].values[0],
'四季度': df.loc[df['Unnamed: 1'] == '张三', '四季度'].values[0]},
'二处': {'一季度': df.loc[df['Unnamed: 1'] == '李四', '一季度'].values[0],
'二季度': df.loc[df['Unnamed: 1'] == '李四', '二季度'].values[0],
'三季度': df.loc[df['Unnamed: 1'] == '李四', '三季度'].values[0],
'四季度': df.loc[df['Unnamed: 1'] == '李四', '四季度'].values[0]},
'三处': {'一季度': df.loc[df['Unnamed: 1'] == '王五', '一季度'].values[0],
'二季度': df.loc[df['Unnamed: 1'] == '王五', '二季度'].values[0],
'三季度': df.loc[df['Unnamed: 1'] == '王五', '三季度'].values[0],
'四季度': df.loc[df['Unnamed: 1'] == '王五', '四季度'].values[0]},
'四处': {'一季度': df.loc[df['Unnamed: 1'] == '赵六', '一季度'].values[0],
'二季度': df.loc[df['Unnamed: 1'] == '赵六', '二季度'].values[0],
'三季度': df.loc[df['Unnamed: 1'] == '赵六', '三季度'].values[0],
'四季度': df.loc[df['Unnamed: 1'] == '赵六', '四季度'].values[0]},
}
# 创建多柱图和折线图的组合图表
bar = (
Bar()
.add_xaxis(["一季度", "二季度", "三季度", "四季度"])
.add_yaxis("业绩", [v for _, v in data['一处'].items()], category_gap="50%")
.extend_yaxis(
["业绩", "业绩", "业绩", "业绩"],
[[data['二处'][k] for k in data['二处'].keys()],
[data['三处'][k] for k in data['三处'].keys()],
[data['四处'][k] for k in data['四处'].keys()]]
)
)
line = (
Line()
.add_xaxis(["一季度", "二季度", "三季度", "四季度"])
.add_yaxis("2016年", [df.loc[df['Unnamed: 1'] == '四处', '2016年'].values[0]])
.add_yaxis("2015年", [df.loc[df['Unnamed: 1'] == '四处', '2015年'].values[0]])
)
overlap = Overlap()
overlap.add(bar)
overlap.add(line)
# 设置全局配置项
overlap.set_global_opts(title_opts=opts.TitleOpts(title="2019年每个处个季度业绩分析表"))
# 渲染图表到HTML文件中
overlap.render('2019_业绩分析.html')
4)将代码进行测试,发现以下问题:
4.1)overlap错误(应该是版本问题),果断修改为line.overlap
4.2)再运行报如下错误
4.3)报错看不懂,也没空研究,果断修改输入源xlsx文件,内容如下
5)重新上传附件,让kimi按前述要求再分析附件,一次次让其改进,最终如下
6)kimi最终给出的代码如下:
import pandas as pd
from pyecharts.charts import Bar, Line
from pyecharts import options as opts
# 读取Excel文件
df = pd.read_excel('301-002.xlsx')
# 提取每个部门的业绩数据
data = {
'一处': [130, 85, 846, 100],
'二处': [140, 60, 798, 98],
'三处': [180, 70, 640, 64],
'四处': [200, 120, 580, 89],
'合计': [650, 335, 2864, 351]
}
# 将季度数据转换为图表所需的格式
x_axis_data = ["一季度", "二季度", "三季度", "四季度"]
# 创建多柱图
bar = (
Bar()
.add_xaxis(x_axis_data)
.add_yaxis("一处", data['一处'])
.add_yaxis("二处", data['二处'])
.add_yaxis("三处", data['三处'])
.add_yaxis("四处", data['四处'])
.add_yaxis("合计", data['合计'])
.set_global_opts(title_opts=opts.TitleOpts(title="2019年每个处个季度业绩分析表"))
)
# 创建折线图,反映每个季度的合计业绩
line = (
Line()
.add_xaxis(x_axis_data)
.add_yaxis("季度合计业绩", [sum(data['合计'][i::4]) for i in range(4)])
.set_global_opts(title_opts=opts.TitleOpts(title="2019年季度合计业绩分析"))
)
# 渲染图表到HTML文件中
bar.render('2019_业绩分析柱状图.html')
line.render('2019_季度合计业绩分析折线图.html')
7)运行后,看到的结果是一个对比柱图,一个折线图
8)虽然未达到想要的叠加图效果,但也算基本解决问题,后面靠自己修改代码,最终修改代码如下:
import pandas as pd
from pyecharts.charts import Bar, Line
from pyecharts import options as opts
# 读取Excel文件
df = pd.read_excel('static/datafiles/301/002/301-002.xlsx')
# 提取每个部门的业绩数据
data = {
'一处': [130, 85, 846, 100],
'二处': [140, 60, 798, 98],
'三处': [180, 70, 640, 64],
'四处': [200, 120, 580, 89],
'合计': [650, 335, 2864, 351]
}
# 将季度数据转换为图表所需的格式
x_axis_data = ["一季度", "二季度", "三季度", "四季度"]
# 创建多柱图
bar = (
Bar()
.add_xaxis(x_axis_data)
.add_yaxis("一处", data['一处'])
.add_yaxis("二处", data['二处'])
.add_yaxis("三处", data['三处'])
.add_yaxis("四处", data['四处'])
.set_global_opts(title_opts=opts.TitleOpts(title="2019年每个处个季度业绩分析表"))
)
# 创建折线图,反映每个季度的合计业绩
line = (
Line()
.add_xaxis(x_axis_data)
.add_yaxis("季度合计业绩", [sum(data['合计'][i::4]) for i in range(4)])
# .set_global_opts(title_opts=opts.TitleOpts(title="2019年季度合计业绩分析"))
)
# 渲染图表到HTML文件中
# bar.render('2019_业绩分析柱状图.html')
line.overlap(bar)
line.set_global_opts(title_opts=opts.TitleOpts(title="2019年每个处个季度业绩分析表"))
line.render('2019_业绩分析.html')
相关附件到我的资源里下载:
https://download.csdn.net/download/gui818/89631853