日常工作当中,特别是金融行业当中,有不少人的工作是提取数据,分析数据,得到可视化图表,并加入自已的研究分析结论,最终生成分析报告,并且有不少报告是定期生成,存在不少重复手工劳动。本文通过一个简单实例,介绍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:temptest.doc,效果如下:

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

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

  1. 用python进行股票数据分析_利用python进行股票数据分析

    个人觉得这问题问的不太对,说句不好的话,你是来搞编程的还是做股票的. 当然,如果题主只是用来搜集资料,看数据的话那还是可以操作一波的,至于python要怎么入门,个人下面会推荐一些入门级的书籍,通过这 ...

  2. python股票数据分析_用Python进行股票数据分析

    本篇运用Python进行自选股的数据分析,帮助进行投资决策,分析用到以下两个模块:pandas(数据分析包):pandas_datareader(可以查询雅虎的股票数据接口). 本篇参考了猴子老师的课 ...

  3. 利用python进行数据分析_利用python进行数据分析复现(1)

    一直以来,都想学习python数据分析相关的知识,总是拖拖拉拉,包括这次这个分享也是.<利用python进行数据分析 第2版>是一次无意之间在简书上看到的一个分享,我决定将很详细.一直都 ...

  4. python股票数据分析_用Python浅析股票数据

    本文将使用Python来可视化股票数据,比如绘制K线图,并且探究各项指标的含义和关系,最后使用移动平均线方法初探投资策略. 数据导入 这里将股票数据存储在stockData.txt文本文件中,我们使用 ...

  5. python股票数据分析_用Python抓取新浪的股票数据

    最近做数据分析,先是找到了Tushare这个免费开源的第三方财经包,但后来用了几天之后发现,它的日交易历史数据有时候有不准确的情况,查看源代码发现,这个包的数据源是凤凰财经,而对比凤凰网站其站点的数据 ...

  6. python股票数据库_利用Python爬股票数据并存入数据库Mysql

    直接上代码,小白也能爬股票......... import tushare as ts import mysql.connector import re,time #创建所有股票的表格以及插入每支股票 ...

  7. python营业数据分析_利用Python对咖啡馆营业做一个简单的数据分析

    准备数据 1.导入python数据分析模块三剑客:pandas\matplotlib\numpy 2.用read_excel()方法导入数据源 .输出结果截图如下(部分): 可以看到有这些数据:订单日 ...

  8. 用python做数据分析pdf_利用python进行数据分析pdf

    利用python进行数据分析pdf微盘下载!<利用python进行数据分析>利用Python实现数据密集型应用由浅入深帮助读者解决数据分析问题~适合刚刚接触Python的分析人员以及刚刚接 ...

  9. python数据分析报告范文_利用PYTHON全自动生成分析报告

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

最新文章

  1. [翻译] 构建完美的WPF开发工作站
  2. 【Fabric】Python自动化部署工具-Fabric入门教程
  3. python自学网站需要多长时间-怎么自学python,大概要多久?
  4. 【渝粤教育】国家开放大学2019年春季 0692-22T化工设备机械基础 参考试题
  5. IIR滤波器设计基础及Matlab设计示例
  6. windows重置net use或者SMB协议
  7. bat文件建文件夹时乱码及失败问题
  8. 平面向量内积坐标公式推导_向量的数量积的坐标运算公式是如何推导出的 两个向量的向量积公式是怎...
  9. 转载CSDN博客时的错误
  10. 安卓开发用什么语言?Jetpack-MVVM-高频提问和解答,Android校招面试指南
  11. 畅购商城-添加订单实现(一)
  12. 【104】ntvdm.exe占内存极大的问题
  13. 关于举办“第五届全国现代物流绿色包装与循环共用大会”的通知
  14. Dowiedz si? wi?cej o Nike Free Run
  15. 车牌识别系统四:Pyqt5编写简易车牌识别界面
  16. mbrfix.exe
  17. 高清监控视频存储最佳方案
  18. 海康转正答辩突击总结
  19. 只有走过的路 才懂她的内容
  20. 【植树节专题】回顾TcaplusDB的十年发展史

热门文章

  1. 使用百度排名工具该怎么样正确布局网站关键词?
  2. free()到底做了什么
  3. Preferences DataStore使用实例
  4. jsp+ssm+mysql java实现的校园二手市场交易平台
  5. Oracle数据库(安装)及一些问题解决方案、PL/SQL安装以及连接Oracle
  6. 柔性自动化在物流的应用及探索
  7. 自行车保险市场现状研究分析-
  8. 微信测试号实现微信分享等功能【转载】
  9. 保护个人隐私和数据安全的方法与策略
  10. Linux --- 常用命令汇总