摘要:本文通過一個簡單實例,介紹中的一個叫模塊,可以實現(xiàn)全自動獲取數(shù)據(jù)分析數(shù)據(jù)最終生成分析報告的全部操作。另外更有用的在于通過嵌入網(wǎng)絡(luò)爬蟲,以及對外部的接口,可以快速實現(xiàn)大量手工勞動才能完成的工作,提高工作效率
日常工作當(dāng)中,特別是金融行業(yè)當(dāng)中,有不少人的工作是提取數(shù)據(jù),分析數(shù)據(jù),得到可視化圖表,并加入自已的研究分析結(jié)論,最終生成分析報告,并且有不少報告是定期生成,存在不少重復(fù)手工勞動。本文通過一個簡單實例,介紹python中的一個叫python-doc模塊,可以實現(xiàn)全自動獲取數(shù)據(jù)-分析數(shù)據(jù)-最終生成分析報告的全部操作。
一、從萬得數(shù)據(jù)庫讀取數(shù)據(jù),保存可視化結(jié)果圖片def getDataAndSavePic(): db_engine = create_engine("oracle://lianghua:[email protected]: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股數(shù)據(jù) selectsql = text(s) result = session.execute(selectsql) # 執(zhí)行查詢語句 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" #柱狀圖圖片地址 #繪制餅狀圖,分別計算主板、中小板和創(chuàng)業(yè)板股票的數(shù)量占比 ( df_result.groupby("PLATENAME") .count() .plot.pie(y="STOCKNAME",figsize=(6, 6),autopct="%.2f") ) plt.savefig(pie_file_path) #繪制柱狀圖,獲取不同年份上市股票的數(shù)量 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: 數(shù)據(jù)記錄,用于表格顯示 :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模塊是一個非常實用的用于自動生成報告的文檔,可以自動根據(jù)讀取的數(shù)據(jù)生成") 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"根據(jù)程序計算動態(tài)結(jié)果替換動態(tài)內(nèi)容,如統(tǒng)計數(shù)字等", style="ListBullet" ) document.add_paragraph( u"可以自動嵌入相應(yīng)的圖片和表格", style="ListBullet" ) document.add_paragraph( u"支持各類樣式進(jìn)行調(diào)整", 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"二、各板塊統(tǒng)計", level=1) text=u"滬深兩地的上市A股總共有%s只,其中滬市有 %s 只,深市有%s 只,各板塊的數(shù)據(jù)占比如下所示" %(str(df["STOCKNAME"].count()), str(df[df["TRDMARKETNAME"]=="上海"]["STOCKNAME"].count()), str(df[df["TRDMARKETNAME"]=="深圳"]["STOCKNAME"].count()) ) document.add_paragraph(text) # 插入圖片,文件名可以作為參數(shù)傳入,由之前的程序進(jìn)行傳入 document.add_picture(pie_file_path, width=Inches(5.0)) document.add_heading(u"三、上市時間統(tǒng)計", level=1) text=u" 上市時間分布圖如下所示,可以看出今明兩年并不上上市的高峰期" document.add_paragraph(text) # 插入圖片,文件名可以作為參數(shù)傳入,由之前的程序進(jìn)行傳入 document.add_picture(bar_file_path, width=Inches(5.0)) document.add_heading(u"四、待上市新股統(tǒng)計", 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文檔當(dāng)中 gen_docfile(df,pie_file_path,bar_file_path,r"d: emp est.doc")四、最終效果圖
打開d:temptest.doc,效果如下:
怎么樣,是不是很方便?對于圖表樣式和文檔樣式,python的matplotlib和python-doc模塊都可以修改,使用起來也非常方便。另外更有用的在于通過嵌入網(wǎng)絡(luò)爬蟲,以及對外部的接口,可以快速實現(xiàn)大量手工勞動才能完成的工作,提高工作效率
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/41431.html
摘要:時間永遠(yuǎn)都過得那么快,一晃從年注冊,到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時候把他們整理一下了。那是因為收藏夾太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...
摘要:一什么是是一個基于瀏覽器的自動化工具,她提供了一種跨平臺跨瀏覽器的端到端的自動化解決方案。模塊主要用來記錄用例執(zhí)行情況,以便于高效的調(diào)查用例失敗信息以及追蹤用例執(zhí)行情況。測試用例倉庫用例倉庫主要用來組織自動化測試用例。 一、什么是Selenium? Selenium是一個基于瀏覽器的自動化工具,她提供了一種跨平臺、跨瀏覽器的端到端的web自動化解決方案。Selenium主要包括三部分:...
摘要:有一些表示常見圖形的對象稱為塊,完整的集合位于。中的繪圖函數(shù)在中,有行標(biāo)簽列標(biāo)簽分組信息。密度圖通過計算可能會產(chǎn)生觀測數(shù)據(jù)的連續(xù)概率分布的估計而產(chǎn)生的。在探索式數(shù)據(jù)分析工作中,同時觀察一組變量的散布圖是很有意義的。 我們在上一篇介紹了 pandas,本篇介紹 matplotlib。 繪圖和可視化 一個用于創(chuàng)建出版質(zhì)量圖表的桌面繪圖包。 Matplotlib API入門 Figure ...
摘要:為了你最好的未來,請不斷的學(xué)習(xí)創(chuàng)始人兼首席執(zhí)行官人工智能和機器學(xué)習(xí)的時代已經(jīng)到來了,這些領(lǐng)域都有可能對印度的行業(yè)產(chǎn)生重大的影響。在印度努力重振生產(chǎn)力增長的同時,人工智能和機器學(xué)習(xí)有望填補這一空白。 showImg(http://upload-images.jianshu.io/upload_images/13825820-702c6873cd07cfc3.jpg?imageMogr2/...
閱讀 713·2021-11-18 10:02
閱讀 2252·2021-11-15 18:13
閱讀 3188·2021-11-15 11:38
閱讀 2969·2021-09-22 15:55
閱讀 3688·2021-08-09 13:43
閱讀 2456·2021-07-25 14:19
閱讀 2466·2019-08-30 14:15
閱讀 3459·2019-08-30 14:15