摘要:今天要分享的是,用來寫。數據處理環節效率低下,易受干擾。問題排查難以溯源。一旦數據報告有誤,想要定位問題所在,常常需要從頭開始復盤。結果和上面結果結構是一致的。這是官網的文檔,但是卻不完全適用目前的場景。
大毛 豈安科技業務風險分析師
多年訂單業務反欺詐經驗,負責豈安科技多款產品運營工作。
上回筆者分享過一些 pandas 的常用數據查詢語法,但是數據查詢對于 pandas 而言只是冰山一角,它還有著更多更有價值的的應用場景。今天要分享的是,用 pandas 來寫 excel。
我的數據分析工作經常是在這樣的場景下開展的:數據格式五花八門,有些存儲在關系型數據庫內,有些則是 csv 或者是 json,而最后老板想要的數據報告是 excel 版本的。
在沒有使用 pandas 處理數據以前,我會周旋在各個數據源之間,將取完的數之后黏貼到 excel 中,最終在統一在 excel 內進行處理。
這個操作有一些缺陷:
? 各個數據源取數方法不統一。自己掌握可以通過反復操作熟練,一旦教授給新人需要花更多時間。
? 數據處理環節效率低下,易受干擾。在頻繁的復制黏貼中,很難確保不受外界干擾,一旦恍神了,很難想起剛剛的取數的一些細節。并且過多的復制黏貼可能導致excel崩潰。
? 問題排查難以溯源。仔細想來,excel承擔了打草稿的功能,在多次復制黏貼之后,沒有人會清楚記得每一步為什么復制黏貼。一旦數據報告有誤,想要定位問題所在,常常需要從頭開始復盤。
?如果把數據的獲取到處理全部交給 pandas 呢?
這樣一來 excel 只負責最終呈現層面的功能。為了實現這些,除了 pandas 本身強大的數據分析功能之外,還得益于兩點:
pandas 良好的數據讀取接口
xlsxwriter
良好的數據讀取接口一旦 import pandas as pd 了之后,就可以任意的 pd.read_json / pd.read_csv / pd.read_sql 了,是不是很方便?
example.json [{ "teamName": "GoldenArch", "distCode": 04, "distArea": "Shanghai", "month": 11, "income": 16255, "cost": 30250, }, { "teamName": "OldFather", "distCode": 02, "distArea": "Beijing", "month": 11, "income": 135300, "cost": 27200, }]
結果
csv,相對省力,甚至可以用 excel 直接打開處理,不過這種方式影響到了這個數據處理方案的一致性。舉例略。
data_csv = pd.read_csv("example.csv")
結果和上面json結果結構是一致的。
sql,最復雜的一項,在 read_sql 之前,你還需要關心數據庫連接問題,和要處理的 sql 語句問題。
這里我遭遇的坑在后者,如果你打算用 read_sql 打入 dataframe 的是一張大表,那么可以暫時放棄這個念頭,因為在 read_sql 的過程中,雖然讀表很快,但是寫入 dataframe 的速度卻受制于數據規模,個人建議是,如果人類沒有耐心把這些數據一一讀完,那么就不要打給 dataframe,至少在目前的 0.20 版本是這樣。不過好在我們可以在語句上做處理,在 where 之后按需做一些 group 或者 limit。
#數據庫連接部分 import pymysql def getConn(): connect_config = { "host":"0.1.0.1", "port":8888, "user":"myname", "password":"mypassword", "db":"mydb", "charset":"utf8" } conn = pymysql.connect(**connect_config) return conn #實例化連接對象 conn = getConn() #語句 sql = "select company, sum(totaAmount) from myTable where ... and ... group by company" #最熟悉的語法 data_sql = pd.read_sql(sql,con=conn)
結果和上面 json 結果結構是一致的
這個環節最大的收益就是將所有來源的數據 dataframe 或者 series 化了,然后就可以統一用 pandas 功能來進行下一步數據處理工作。數據處理環節環節太龐大,本文不做描述。這里我們跳過了處理環節,直奔 excel。
xlsxwriter這個包的作用就是用 python 語法來寫 excel 文件,在把所有關心的數據都裁剪完成后,下一步就是把它們按需塞進 excel 中。
import xlsxwriter 之后,用三行代碼就能用 python 創建一個 excel 文件。
workbook = xlsxwriter.Workbook("helloworld.xlsx") worksheet = workbook.add_worksheet(‘made by xlsxwriter’) workbook.close()
簡單吧,看字面意思就能理解——先創建文件,再創建表單,最后關閉。這是官網的文檔,但是卻不完全適用目前的場景。因為,我們需要借助于 pandas 來寫,而不是直接寫。
df = pd.DataFrame({"Data": [10, 20, 30, 20, 15, 30, 45]}) writer = pd.ExcelWriter("example2.xlsx", engine="xlsxwriter") df.to_excel(writer, sheet_name="Sheet1") writer.save()
這也是官網的文檔,這兩種方法處理 excel 都可以,區別是前者是可以方便地指定打在哪些格子里,而后者是將數據作為一個整體的打入 excel,這里更推薦后者。如果是多個不同數據源或者不同意義的數據,可以在 to_excel 的時候,新增一些 Sheet 來分類數據,sheet_name 參數,使得你能自如的掌控數據的內容。
所謂的塞數據也就是把你最終處理完的 dataframe 或者 series 交給了 excel,用 sheet_name 來管理不同意義的數據。
取數工作一般是周期性的,在數據需求沒有產品化之前,需要利用更高效的工具來壓縮取數環節所耗費的時間,將更多的精力留給數據分析之后結論以及建議上,畢竟分析才是數據價值。
上述方案比 excel+ 復制黏貼來的高效且可靠,既統一了數據采集方式,又使得取數過程可視化且易于維護。成本則是你需要花一些時間閱讀 pandas 和 xlsxwriter 的文檔,而 python 環境的搭建幾乎是零成本的。
xlsxwriter文檔:http://xlsxwriter.readthedocs.io
pandas文檔:http://pandas.pydata.org/pand...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41046.html
摘要:今天要分享的是,用來寫。數據處理環節效率低下,易受干擾。問題排查難以溯源。一旦數據報告有誤,想要定位問題所在,常常需要從頭開始復盤。結果和上面結果結構是一致的。這是官網的文檔,但是卻不完全適用目前的場景。 大毛 豈安科技業務風險分析師 多年訂單業務反欺詐經驗,負責豈安科技多款產品運營工作。 上回筆者分享過一些 pandas 的常用數據查詢語法,但是數據查詢對于 pandas 而言只是冰...
摘要:在使用之前,大多數數據分析師已經掌握了和,并且在剛上手時會經常習慣性想到老辦法。這種根據列值選取行數據的查詢操作,推薦使用方法。如果我又有一批數據,需要將兩部分數據合并。 大毛 豈安科技業務風險分析師 多年訂單業務反欺詐經驗,負責豈安科技多款產品運營工作。 在使用Pandas之前,大多數數據分析師已經掌握了Excel和SQL,并且在剛上手Pandas時會經常習慣性想到老辦法。如果誰能把...
摘要:數據分析的發展方向一般有商業方向,行業分析業務方向,和機器學習數據挖掘方向。機器學習的書籍推薦統計學習方法,機器學習,機器學習實戰三本書。 作者:xiaoyu 微信公眾號:Python數據科學 知乎:python數據分析師 上一篇主要分享了博主親身轉行數據分析的經歷: 【從零學起到成功轉行數據分析,我是怎么做的?】 本篇繼上一篇將分享轉行數據分析的一些經驗和學習方法,看完這篇你將會解...
閱讀 1478·2021-10-14 09:43
閱讀 1442·2021-10-09 09:58
閱讀 1937·2021-09-28 09:42
閱讀 3727·2021-09-26 09:55
閱讀 1752·2021-08-27 16:23
閱讀 2755·2021-08-23 09:46
閱讀 906·2019-08-30 15:55
閱讀 1405·2019-08-30 15:54