python如何生成分析报告

2025-11-22 22:04:39

1、从万得数据库读取数据,保存可视化结果图片

python如何生成分析报告

2、自动生成WORD文件,定义文档模板

from docx import Document

from 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='ListBullet'

    )

    document.add_paragraph(

        u'可以自动嵌入相应的图片和表格', style='ListBullet'

    )

    document.add_paragraph(

        u'支持各类样式进行调整', style='ListBullet'

    )

    document.add_paragraph(u'python-doc模块不足的地方:')

    document.add_paragraph(

        u'相对简单', style='ListNumber'

    )

    document.add_paragraph(

        u'暂不支持WORD文档模板', style='ListNumber'

    )

    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 is 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

    list_stockname=list(df_newstock['STOCKNAME'])

    list_TRDMARKETNAME=list(df_newstock['TRDMARKETNAME'])

    list_PLATENAME=list(df_newstock['PLATENAME'])

    for i in range(len(df_newstock.index)):

        row_cells = table.add_row().cells

        #注意这里PYTHON2的编码问题,多谢stackoverflow,程序员的圣地

        row_cells[0].text = unicode(list_stockname[i],'utf-8')

        row_cells[1].text = unicode(list_TRDMARKETNAME[i],'utf-8')

        row_cells[2].text = unicode(list_PLATENAME[i],'utf-8')

    document.add_page_break()

    document.save(doc_file_path)

3、前后串在一起,生成最终完整的WORD文件

#生成图片

(df,pie_file_path,bar_file_path)=getDataAndSavePic()

#整合到WORD文档当中

gen_docfile(df,pie_file_path,bar_file_path,r'd:\temp\test.doc')

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢