日常工作当中,特别是金融行业当中,有不少人的工作是提取数据,分析数据,得到可视化图表,并加入自已的研究分析结论,最终生成分析报告,并且有不少报告是定期生成,存在不少重复手工劳动。本文通过一个简单实例,介绍python中的一个叫python-doc模块,可以实现全自动获取数据-分析数据-最终生成分析报告的全部操作。

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

def getDataAndSavePic():

db_engine = create_engine('oracle://lianghua:lianghua@172.16.10.101:1521/orcl', echo=False)

DB_Session = sessionmaker(bind=db_engine)

session = DB_Session()

s = ("select OB_OBJECT_NAME_1090 AS STOCKNAME,"#股票名称

" F5_1090 AS TRDMARKETNAME, "#交易所名称

" F6_1090 AS PLATENAME, "#版块名称

" F17_1090 AS TIMETOMARKET, "#上市时间

" F16_1090 AS STOCKCODE "#股票代码

"from wind.tb_object_1090 t where t.f4_1090='A' ")#只取A股数据

selectsql = text(s)

result = session.execute(selectsql) # 执行查询语句

df_result = pd.DataFrame(result.fetchall())

df_result.columns = ['STOCKNAME', 'TRDMARKETNAME', 'PLATENAME', 'TIMETOMARKET','STOCKCODE'] # 列重命名

df_result = df_result.set_index('STOCKCODE')

session.close()

pie_file_path = r'd:\temp\pie.png' #饼状图图片地址

bar_file_path = r'd:\temp\bar.png' #柱状图图片地址

#绘制饼状图,分别计算主板、中小板和创业板股票的数量占比

(

df_result.groupby('PLATENAME')

.count()

.plot.pie(y='STOCKNAME',figsize=(6, 6),autopct='%.2f')

)

plt.savefig(pie_file_path)

#绘制柱状图,获取不同年份上市股票的数量

df_result['YEARTOMARKET']=df_result['TIMETOMARKET'].map(lambda x:None if x is None else x[0:4])

(

df_result.groupby('YEARTOMARKET')

.count()

.plot.bar(y='STOCKNAME',figsize=(8, 6))

)

plt.savefig(bar_file_path)

return (df_result,pie_file_path,bar_file_path)

二、自动生成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)

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

#生成图片

(df,pie_file_path,bar_file_path)=getDataAndSavePic()

#整合到WORD文档当中

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

四、最终效果图

打开d:\temp\test.doc,效果如下:

截图1

截图2

截图3

截图4

怎么样,是不是很方便?对于图表样式和文档样式,python的matplotlib和python-doc模块都可以修改,使用起来也非常方便。另外更有用的在于通过嵌入网络爬虫,以及对外部的接口,可以快速实现大量手工劳动才能完成的工作,提高工作效率

python自动生成分析报告_利用PYTHON全自动生成分析报告相关推荐

  1. 钉钉python 自动发消息软件_利用Python自动发送钉钉数据消息,一个简单的上手小项目...

    现在大部分公司都使用钉钉作为内部的主要沟通工具,钉钉消息基本都上都能快速有效的被阅读,打开率会比邮件高上不少.所以准备使用钉钉来播报平台每日的成交额,并附上一些鼓励的话和图片.起到一个激励团队的作用 ...

  2. python自动保存ping结果_利用python获取Ping结果示例代码

    前言 本文主要跟大家分享了关于利用python获取Ping结果的相关内容,分享出来供大家参考学习,下面话不多说,来一起看看详细的介绍吧. 示例代码: # -*- coding: utf-8 -*- i ...

  3. python自动导出数据脚本_利用python生成一个导出数据库的bat脚本文件的方法

    # 环境: python3.x def getExportDbSql(db, index): # 获取导出一个数据库实例的sql语句 sql = 'mysqldump -u%s -p%s -h%s - ...

  4. python自动卸载win程序_利用python实现自动扫雷程序

    自动扫雷一般分为两种,一种是读取内存数据,而另一种是通过分析图片获得数据,并通过模拟鼠标操作,这里我用的是第二种方式. 一.准备工作 1.扫雷游戏 我是win10,没有默认的扫雷,所以去扫雷网下载 h ...

  5. python自动生成word报告_利用Python实现报告自动生成

    前几天,在网上看到一篇介绍利用Python组件实现MS word内容生成的文章.可能是很久没接触编码,感觉在技术领域变得有点孤陋寡闻了,看见一些实用的功能都觉的屌屌的.以前经常通过代码写Excel文件 ...

  6. python乘法符号手写_利用Python自动生成小学生加减乘除口算考试题卷,不再为手写算术题烦恼!...

    还在为给孩子抄各种各样的口算题而烦恼?孩子上小学一年级之后,加减乘除的口算就要开始练习了,老师肯定会让家长出题.所以我们当家长的,要提前准备一下,就利用Python开发了一套自动生成小学生口算题的小应 ...

  7. 利用python从网页查找数据_利用Python模拟淘宝的搜索过程并对数据进行可视化分析...

    数据挖掘入门与实战 公众号: datadw 本文讲述如何利用Python模拟淘宝的搜索过程并对搜索结果进行初步的数据可视化分析. 搜索过程的模拟:淘宝的搜索页面有两种形式, 一种形式是, 2019/2 ...

  8. python pdf报告_利用python设计PDF报告,jinja2,whtmltopdf,matplotlib,pandas

    转自:https://foofish.net/python-crawler-html2pdf.html 工具准备 弄清楚了网站的基本结构后就可以开始准备爬虫所依赖的工具包了.requests.beau ...

  9. python情感分析语料库_利用Python实现中文情感极性分析

    情感极性分析,即情感分类,对带有主观情感色彩的文本进行分析.归纳.情感极性分析主要有两种分类方法:基于情感知识的方法和基于机器学习的方法.基于情感知识的方法通过一些已有的情感词典计算文本的情感极性(正 ...

  10. python制作心形照片墙_利用python生成照片墙的示例代码

    PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了.其官方主页为:PIL. PIL历 ...

最新文章

  1. 上线前一个小时,dubbo这个问题可把我折腾惨了
  2. Multi-Task Learning的几篇综述文章
  3. 机器学习知识点(二十)矩阵奇异值分解基础知识及Java实现
  4. Docker框架使用系列教程(六)创建镜像
  5. C++以螺旋方式打印m * n矩阵的算法(附完整源码)
  6. 如何让css与js分离
  7. Node操作Mysql的简单例子
  8. php学习笔记---php调试和开发工具整理
  9. Xamarin调用JSON.net来解析JSON
  10. HIVE SQL 时间函数
  11. 有关 VS winform 开发问题
  12. 基于51单片机汽车智能灯光控制系统设计
  13. shutil,re,hashlib,subprocess模块及其相关
  14. 世界经典咖啡@配制方法
  15. 《计算机体系结构量化研究方法》1.8 性能的测量、报告和汇总
  16. 2021国产数据库领域最具商业合作价值企业盘点
  17. 平均路径损耗、小尺度衰落、大尺度衰落的区别
  18. Electric Fences_usaco3.4_皮克定理
  19. 让 VS2008 崩溃 的 WinForm 用户控件
  20. pyinstaller打包exe免杀和逆向浅析

热门文章

  1. 我是主考官:应聘者给我的圈套
  2. SQL语句性能调整原则
  3. ASP.NET页面对象模型:Page类介绍
  4. Vim试水之六:NerdTree插件安装
  5. shell脚本操作mysql数据库,使用mysql的-e参数可以执行各种sql的(创建,删除,增,删,改、查)等各种操作
  6. WeChat微信支付类型与支付授权目录配置与回调地址设置
  7. PHP实现10亿个商品编码ing
  8. PHP的CURL:请求接口 模拟请求登陆 上传下载
  9. java mysql servlet_Java--用户登录(JDBC,MYSQL,Servlet)
  10. 数据库设计与开发概述