python如何生成分析报告
1从万得数据库读取数据,保存可视化结果图片
2自动生成word文件,定义文档模板from docx import documentfrom docx.shared import inches def gen_docfile(df,pie_file_path,bar_file_path,doc_file_path): ''' :param df_result: 数据记录,用于表格显示 :param pie_file_path: 饼图文件显示 :param bar_file_path: 柱状图文件显示 :param doc_file_path: 需要保存的work文件路径 :return: 无返回值 ''' # 新建一个文档 document = document() document.add_heading(u' 自动分析报告生成 ', 0) # 添加一个段落 p = document.add_paragraph(u'python-doc模块是一个非常实用的用于自动生成报告的文档,可以自动根据读取的数据生成') p.add_run(u'图片').bold = true p.add_run(u' 和 ') p.add_run(u'表格').italic = true document.add_paragraph(u'python-doc模块可以用于:') #无序列表项 document.add_paragraph( u'根据程序计算动态结果替换动态内容,如统计数字等', style='l**tbullet' ) document.add_paragraph( u'可以自动嵌入相应的图片和表格', style='l**tbullet' ) document.add_paragraph( u'支持各类样式进行调整', style='l**tbullet' ) document.add_paragraph(u'python-doc模块不足的地方:') document.add_paragraph( u'相对简单', style='l**tnumber' ) document.add_paragraph( u'暂不支持word文档模板', style='l**tnumber' ) document.add_heading(u'二、各板块统计', level=1) text=u'沪深两地的上市a股总共有%s只,其中沪市有 %s 只,深市有%s 只,各板块的数据占比如下所示'\ %(str(df['stockname'].count()),\ str(df[df['trdmarketname']=='上海']['stockname'].count()),\ str(df[df['trdmarketname']=='深圳']['stockname'].count()) ) document.add_paragraph(text) # 插入图片,文件名可以作为参数传入,由之前的程序进行传入 document.add_picture(pie_file_path, width=inches(5.0)) document.add_heading(u'三、上市时间统计', level=1) text=u'\n上市时间分布图如下所示,可以看出今明两年并不上上市的高峰期' document.add_paragraph(text) # 插入图片,文件名可以作为参数传入,由之前的程序进行传入 document.add_picture(bar_file_path, width=inches(5.0)) document.add_heading(u'四、待上市新股统计', level=1) # 轮询上市时间为空的未上市股票,添加表格 text=u'\n待上市股票列表如下' df['timetomarket']=df['timetomarket'].map(lambda x:'99991231' if x ** none else x[0:4]) df_newstock=df[df['timetomarket']=='99991231'] print df_newstock #插入表格 table = document.add_table(rows=len(df_newstock.index)+1, cols=3,style='table grid') hdr_cells = table.rows[0].cells hdr_cells[0].text = u'股票名称' hdr_cells[1].text = u'上市交易所' hdr_cells[2].text = u'上市板块' #编历dataframe l**t_stockname=l**t(df_newstock['stockname']) l**t_trdmarketname=l**t(df_newstock['trdmarketname']) l**t_platename=l**t(df_newstock['platename']) for i in range(len(df_newstock.index)): row_cells = table.add_row().cells #注意这里python2的编码问题,多谢stackoverflow,程序员的圣地 row_cells[0].text = unicode(l**t_stockname[i],'utf-8') row_cells[1].text = unicode(l**t_trdmarketname[i],'utf-8') row_cells[2].text = unicode(l**t_platename[i],'utf-8') document.add_page_break() document.s**e(doc_file_path)3前后串在一起,生成最终完整的word文件#生成图片(df,pie_file_path,bar_file_path)=getdataands**epic()#整合到word文档当中gen_docfile(df,pie_file_path,bar_file_path,r'd:\temp\test.doc')end 20210311