# 根据前一案例中输出的分析数据和编码格式,分别读取描述性统计和相关性分析数据
data_cb_describe = pd.read_csv(
os.path.join(PATH_DATA, "data_cb_describe.csv"),
encoding="GB18030",
index_col=[0]
)
data_cb_corr = pd.read_csv(
os.path.join(PATH_DATA, "data_cb_corr.csv"),
encoding="GB18030",
index_col=[0]
)
# 利用 DocxTemplate 导入编辑完成的Word模板
report_tpl = DocxTemplate(
template_file = os.path.join(PATH_REPORT, "模板-沪深交易所现券交易月报分析示例.docx")
)
# 利用字典编辑需要渲染到Word模板中的内容
context = {
# 分析报告日期,渲染为富文本,设置字体颜色为红色
'analysis_date': RichText(
text = datetime.date.today().strftime("%Y-%m-%d"),
color = "FF6666",
),
# 分析报告描述内容,渲染为基础文本
"summary": "模板式自动化Word报告示例",
# 描述性统计表格,分别对表头和表数据赋值
# 表数据的格式调整可结合 pandas.DataFrame.agg 和 lambda函数 实现
# 此处 count 数据不保留小数,其他数据保留2位小数
'des_table_cols': data_cb_describe.columns.to_list(),
'des_table_contents': data_cb_describe.agg(
lambda x: {'label': x.name, 'cols': [f"{d:.0f}" if x.name == "count" else f"{d:.2f}" for d in x]},
axis=1
).to_list(),
# 相关性分析表格,分别对表头和表数据赋值
# 表数据的格式调整可结合 pandas.DataFrame.agg 和 lambda函数 实现
# 此处数据均保留2位小数
'corr_table_cols': data_cb_corr.columns.to_list(),
'corr_table_contents': data_cb_corr.agg(
lambda x: {'label': x.name, 'cols': [f"{d:.2f}" for d in x]},
axis=1
).to_list(),
# 成交金额历史变化情况(折线图),渲染为图片
'fig_line': InlineImage(
tpl = report_tpl,
image_descriptor = os.path.join(PATH_PLOT, "折线图.png"),
width = Mm(150),
),
# 成交金额分布特征(箱型图),渲染为图片
'fig_box': InlineImage(
tpl = report_tpl,
image_descriptor = os.path.join(PATH_PLOT, "箱型图.png"),
width = Mm(150)
),
# 近期成交金额对比(柱状图),渲染为图片
'fig_bar': InlineImage(
tpl = report_tpl,
image_descriptor = os.path.join(PATH_PLOT, "柱状图.png"),
width = Mm(150)
),
# 成交金额相关性矩阵(散点图),渲染为图片
'fig_scatter': InlineImage(
tpl = report_tpl,
image_descriptor = os.path.join(PATH_PLOT, "散点图.png"),
width = Mm(150)
),
}
# 利用 DocxTemplate.render 渲染模板内容
# 利用 DocxTemplate.save 保存渲染后的Word文档
report_tpl.render(context = context)
report_tpl.save(os.path.join(PATH_REPORT, "沪深交易所现券交易月报分析示例.docx"))