通过读取数据源,生成一个excel多个sheet的可视化数据报表的过程。(项目2)

import pandas as pd
from openpyxl.drawing.image import Image
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = "SimHei"  # 解决中文乱码

# 说明通过读取数据源,生成一个excel多个sheet的可视化数据报表的过程。

# 读取数据源,转换成二维数组。
pd_re = pd.read_excel("C:/Users/Administrator/Desktop/999/sale_data.xlsx")
pd_df = pd.DataFrame(pd_re)
pd_cj_count = pd_df[pd_df["创建日期"] == "2021-04-11"]["order_id"].count()
pd_cj_count2 = pd_df["order_id"].count()


# 获取不同时间段的各指标值
def get_data(date):
    create_count1 = pd_df[pd_df["创建日期"] == date]["order_id"].count()
    pay_count2 = pd_df[pd_df["付款日期"] == date]["order_id"].count()
    receive_count3 = pd_df[pd_df["收货日期"] == date]["order_id"].count()
    return_count4 = pd_df[pd_df["退款日期"] == date]["order_id"].count()
    return create_count1, pay_count2, receive_count3, return_count4


#  生成想要的excel数据
df_view = pd.DataFrame([get_data("2021-04-11"), get_data("2021-04-10"), get_data("2021-04-04")],
                       columns=["创建订单量", "付款订单量", "收货订单量", "退款订单量"],
                       index=["当日", "昨日", "上周同期"]).T
df_view["环比"] = df_view["当日"] / df_view["昨日"] - 1
df_view["上周同比"] = df_view["当日"] / df_view["上周同期"] - 1
# print(df_view)
# df_view.to_excel("C:/Users/Administrator/Desktop/999/202202032136.xlsx")

# 下面是对excel数据进行美化加工
from openpyxl import Workbook
from openpyxl.utils.dataframe import dataframe_to_rows
from openpyxl.styles import Alignment, Font, PatternFill

# 创建空工作簿
wb = Workbook()
ws = wb.active

# 将DataFrame格式数据转化为openpyxl格式
for r in dataframe_to_rows(df_view, index=True, header=True):
    ws.append(r)

# 第二行是空行,刪除第二行
ws.delete_rows(2)

# 给A1 单元格进行赋值
ws["A1"] = '指标'

# 插入一行作为标题行
ws.insert_rows(1)
ws["A1"] = '电商业务方向2021/4/11 日报'

# 将标题的单元格进行合并(合并单元格)
ws.merge_cells("A1:F1")

# 将同比和环比设置成百分比格式
for col in ws["E":"F"]:
    for r in col:
        r.number_format = "0.00%"

# 调整A和E列的宽
ws.column_dimensions["A"].width = 17
ws.column_dimensions["B"].width = 13
ws.column_dimensions["E"].width = 10
ws.column_dimensions["F"].width = 13

for row in ws[1:6]:
    for c in row:
        #  对齐方式的设置
        c.alignment = Alignment(horizontal='center')

# 对标题行和表头行进行特殊设置
for row in ws[1:2]:
    for c in row:
        c.font = Font(name="微软雅黑", size=12, bold=True, color="FFFFFFFF")
        c.fill = PatternFill(fill_type="solid", start_color="FFFF6100")
# wb.save("C:/Users/Administrator/Desktop/999/202202040929.xlsx")

# 下面是创建第二个sheet,第三个sheet
pd_df_count = pd.DataFrame(pd_re[pd_re['创建日期'] == '2021-04-11'].groupby("省份")['order_id'].count())
pd_df_province = pd_df_count.reset_index()
pd_df_province = pd_df_province.sort_values(by='order_id', ascending=False)
# 最终显示的效果图
pd_df_province = pd_df_province.rename(columns={"order_id": "创建订单量"})
# print(pd_df_province)
# pd_df_province.to_excel("C:/Users/Administrator/Desktop/999/202202041251.xlsx")


print("********************************************202202101112")
ws1 = wb.create_sheet()
ws2 = wb.create_sheet()
# 更新sheet的名称
ws.title = "核心指标"
ws1.title = "各省份销售情况"
ws2.title = "分日趋势"

# 创建第二个sheet
for r2 in dataframe_to_rows(pd_df_province, index=True, header=True):
    ws1.append(r2)
# 第二行是空行,刪除第二行
ws1.delete_rows(2)

# 创建第三个sheet
plt.figure(figsize=(10, 6))
pd.DataFrame(pd_df.groupby("创建日期")["order_id"].count()).plot()
plt.title("4.2-4.11 创建订单量分日趋势")
plt.xlabel("日期")
plt.ylabel("订单量")

# 将图表保存到本地
plt.savefig("C:/Users/Administrator/Desktop/999/202202101434.png")
# 从本地再加载图片(这一步和上一步有点,非必要)
img2 = Image("C:/Users/Administrator/Desktop/999/202202101434.png")
ws2.add_image(img2, "A1")

# 三个sheet一起保存在一个excel中
wb.save("C:/Users/Administrator/Desktop/999/202202101028.xlsx")

# 方法2,

通过读取数据源,生成的excel只有一个sheet,这个sheet内容有多个可视化数据报表。

import pandas as pd
from openpyxl.drawing.image import Image
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = "SimHei"  # 解决中文乱码

# 说明通过读取数据源,生成的excel只有一个sheet,这个sheet内容有多个可视化数据报表。

# 读取数据源,转换成二维数组
pd_re = pd.read_excel("C:/Users/Administrator/Desktop/999/sale_data.xlsx")
pd_df = pd.DataFrame(pd_re)


# 获取不同时间段的各指标值
def get_data(date):
    create_count1 = pd_df[pd_df["创建日期"] == date]["order_id"].count()
    pay_count2 = pd_df[pd_df["付款日期"] == date]["order_id"].count()
    receive_count3 = pd_df[pd_df["收货日期"] == date]["order_id"].count()
    return_count4 = pd_df[pd_df["退款日期"] == date]["order_id"].count()
    return create_count1, pay_count2, receive_count3, return_count4


#  生成想要的excel数据
df_view = pd.DataFrame([get_data("2021-04-11"), get_data("2021-04-10"), get_data("2021-04-04")],
                       columns=["创建订单量", "付款订单量", "收货订单量", "退款订单量"],
                       index=["当日", "昨日", "上周同期"]).T
# print(df_view)
df_view["环比"] = df_view["当日"] / df_view["昨日"] - 1
df_view["上周同比"] = df_view["当日"] / df_view["上周同期"] - 1
# print(df_view)
# df_view.to_excel("C:/Users/Administrator/Desktop/999/202202032136.xlsx")

#  对生成的excel数据,进行加工美化。
from openpyxl import Workbook
from openpyxl.utils.dataframe import dataframe_to_rows
from openpyxl.styles import Alignment, Font, PatternFill

# 创建空工作簿
wb = Workbook()
ws = wb.active

# 将DataFrame格式数据转化为openpyxl格式
for r in dataframe_to_rows(df_view, index=True, header=True):
    ws.append(r)


# 第二行是空行,刪除第二行
ws.delete_rows(2)

# 给A1 单元格进行赋值
ws["A1"] = '指标'

# 插入一行作为标题行
ws.insert_rows(1)
ws["A1"] = '电商业务方向2021/4/11 日报'

# 将标题的单元格进行合并(合并单元格)
ws.merge_cells("A1:F1")

# 将同比和环比设置成百分比格式
for col in ws["E":"F"]:
    for r in col:
        r.number_format = "0.00%"

# 调整A和E列的宽
ws.column_dimensions["A"].width = 17
ws.column_dimensions["B"].width = 13
ws.column_dimensions["E"].width = 10
ws.column_dimensions["F"].width = 13

for row in ws[1:6]:
    for c in row:
        #  对齐方式的设置
        c.alignment = Alignment(horizontal='center')

# 对标题行和表头行进行特殊设置
for row in ws[1:2]:
    for c in row:
        c.font = Font(name="微软雅黑", size=12, bold=True, color="FFFFFFFF")
        c.fill = PatternFill(fill_type="solid", start_color="FFFF6100")

# wb.save("C:/Users/Administrator/Desktop/999/202202040929.xlsx")
# print("***********************************202202040929")

pd_df_count = pd.DataFrame(pd_re[pd_re['创建日期'] == '2021-04-11'].groupby("省份")['order_id'].count())
pd_df_province = pd_df_count.reset_index()
pd_df_province = pd_df_province.sort_values(by='order_id', ascending=False)
# 最终显示的效果图
pd_df_province = pd_df_province.rename(columns={"order_id": "创建订单量"})
# print(pd_df_province)
# pd_df_province.to_excel("C:/Users/Administrator/Desktop/999/202202041251.xlsx")


print("***********************************************202202041713")
# 生成excel的头部标题
for j in range(pd_df_province.shape[1]):
    ws.cell(row=df_view.shape[0]+5, column=1+j).value = pd_df_province.columns[j]

# 生成各省份的创建订单数量
for i in range(pd_df_province.shape[0]):
    for j in range(pd_df_province.shape[1]):
        ws.cell(row=df_view.shape[0]+6+i, column=1+j).value = pd_df_province.iloc[i, j]


plt.figure(figsize=(10, 6))
pd.DataFrame(pd_df.groupby("创建日期")["order_id"].count()).plot()
plt.title("4.2-4.11 创建订单量分日趋势")
plt.xlabel("日期")
plt.ylabel("订单量")

# 将图表保存到本地
plt.savefig("C:/Users/Administrator/Desktop/999/202202101434.png")
# 从本地再加载图片(这一步和上一步有点,非必要)
#  生成的图片加载到excel中
img = Image("C:/Users/Administrator/Desktop/999/202202101434.png")
ws.add_image(img, "H1")
wb.save("C:/Users/Administrator/Desktop/999/202202101519.xlsx")



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值