摘要:本文通過一個簡單實例,介紹中的一個叫模塊,可以實現全自動獲取數據分析數據最終生成分析報告的全部操作。另外更有用的在于通過嵌入網絡爬蟲,以及對外部的接口,可以快速實現大量手工勞動才能完成的工作,提高工作效率
日常工作當中,特別是金融行業當中,有不少人的工作是提取數據,分析數據,得到可視化圖表,并加入自已的研究分析結論,最終生成分析報告,并且有不少報告是定期生成,存在不少重復手工勞動。本文通過一個簡單實例,介紹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: emppie.png" #餅狀圖圖片地址 bar_file_path = r"d: empar.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" 上市時間分布圖如下所示,可以看出今明兩年并不上上市的高峰期" document.add_paragraph(text) # 插入圖片,文件名可以作為參數傳入,由之前的程序進行傳入 document.add_picture(bar_file_path, width=Inches(5.0)) document.add_heading(u"四、待上市新股統計", level=1) # 輪詢上市時間為空的未上市股票,添加表格 text=u" 待上市股票列表如下" 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: emp est.doc")四、最終效果圖
打開d:temptest.doc,效果如下:
怎么樣,是不是很方便?對于圖表樣式和文檔樣式,python的matplotlib和python-doc模塊都可以修改,使用起來也非常方便。另外更有用的在于通過嵌入網絡爬蟲,以及對外部的接口,可以快速實現大量手工勞動才能完成的工作,提高工作效率
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41431.html
摘要:時間永遠都過得那么快,一晃從年注冊,到現在已經過去了年那些被我藏在收藏夾吃灰的文章,已經太多了,是時候把他們整理一下了。那是因為收藏夾太亂,橡皮擦給設置私密了,不收拾不好看呀。 ...
摘要:一什么是是一個基于瀏覽器的自動化工具,她提供了一種跨平臺跨瀏覽器的端到端的自動化解決方案。模塊主要用來記錄用例執行情況,以便于高效的調查用例失敗信息以及追蹤用例執行情況。測試用例倉庫用例倉庫主要用來組織自動化測試用例。 一、什么是Selenium? Selenium是一個基于瀏覽器的自動化工具,她提供了一種跨平臺、跨瀏覽器的端到端的web自動化解決方案。Selenium主要包括三部分:...
摘要:有一些表示常見圖形的對象稱為塊,完整的集合位于。中的繪圖函數在中,有行標簽列標簽分組信息。密度圖通過計算可能會產生觀測數據的連續概率分布的估計而產生的。在探索式數據分析工作中,同時觀察一組變量的散布圖是很有意義的。 我們在上一篇介紹了 pandas,本篇介紹 matplotlib。 繪圖和可視化 一個用于創建出版質量圖表的桌面繪圖包。 Matplotlib API入門 Figure ...
摘要:為了你最好的未來,請不斷的學習創始人兼首席執行官人工智能和機器學習的時代已經到來了,這些領域都有可能對印度的行業產生重大的影響。在印度努力重振生產力增長的同時,人工智能和機器學習有望填補這一空白。 showImg(http://upload-images.jianshu.io/upload_images/13825820-702c6873cd07cfc3.jpg?imageMogr2/...
閱讀 701·2021-11-18 10:02
閱讀 2235·2021-11-15 18:13
閱讀 3139·2021-11-15 11:38
閱讀 2934·2021-09-22 15:55
閱讀 3666·2021-08-09 13:43
閱讀 2438·2021-07-25 14:19
閱讀 2449·2019-08-30 14:15
閱讀 3441·2019-08-30 14:15