摘要:今天要分享的是,用來(lái)寫(xiě)。數(shù)據(jù)處理環(huán)節(jié)效率低下,易受干擾。問(wèn)題排查難以溯源。一旦數(shù)據(jù)報(bào)告有誤,想要定位問(wèn)題所在,常常需要從頭開(kāi)始復(fù)盤(pán)。結(jié)果和上面結(jié)果結(jié)構(gòu)是一致的。這是官網(wǎng)的文檔,但是卻不完全適用目前的場(chǎng)景。
大毛 豈安科技業(yè)務(wù)風(fēng)險(xiǎn)分析師
多年訂單業(yè)務(wù)反欺詐經(jīng)驗(yàn),負(fù)責(zé)豈安科技多款產(chǎn)品運(yùn)營(yíng)工作。
上回筆者分享過(guò)一些 pandas 的常用數(shù)據(jù)查詢(xún)語(yǔ)法,但是數(shù)據(jù)查詢(xún)對(duì)于 pandas 而言只是冰山一角,它還有著更多更有價(jià)值的的應(yīng)用場(chǎng)景。今天要分享的是,用 pandas 來(lái)寫(xiě) excel。
我的數(shù)據(jù)分析工作經(jīng)常是在這樣的場(chǎng)景下開(kāi)展的:數(shù)據(jù)格式五花八門(mén),有些存儲(chǔ)在關(guān)系型數(shù)據(jù)庫(kù)內(nèi),有些則是 csv 或者是 json,而最后老板想要的數(shù)據(jù)報(bào)告是 excel 版本的。
在沒(méi)有使用 pandas 處理數(shù)據(jù)以前,我會(huì)周旋在各個(gè)數(shù)據(jù)源之間,將取完的數(shù)之后黏貼到 excel 中,最終在統(tǒng)一在 excel 內(nèi)進(jìn)行處理。
這個(gè)操作有一些缺陷:
? 各個(gè)數(shù)據(jù)源取數(shù)方法不統(tǒng)一。自己掌握可以通過(guò)反復(fù)操作熟練,一旦教授給新人需要花更多時(shí)間。
? 數(shù)據(jù)處理環(huán)節(jié)效率低下,易受干擾。在頻繁的復(fù)制黏貼中,很難確保不受外界干擾,一旦恍神了,很難想起剛剛的取數(shù)的一些細(xì)節(jié)。并且過(guò)多的復(fù)制黏貼可能導(dǎo)致excel崩潰。
? 問(wèn)題排查難以溯源。仔細(xì)想來(lái),excel承擔(dān)了打草稿的功能,在多次復(fù)制黏貼之后,沒(méi)有人會(huì)清楚記得每一步為什么復(fù)制黏貼。一旦數(shù)據(jù)報(bào)告有誤,想要定位問(wèn)題所在,常常需要從頭開(kāi)始復(fù)盤(pán)。
?如果把數(shù)據(jù)的獲取到處理全部交給 pandas 呢?
這樣一來(lái) excel 只負(fù)責(zé)最終呈現(xiàn)層面的功能。為了實(shí)現(xiàn)這些,除了 pandas 本身強(qiáng)大的數(shù)據(jù)分析功能之外,還得益于兩點(diǎn):
pandas 良好的數(shù)據(jù)讀取接口
xlsxwriter
良好的數(shù)據(jù)讀取接口一旦 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, }]
結(jié)果
csv,相對(duì)省力,甚至可以用 excel 直接打開(kāi)處理,不過(guò)這種方式影響到了這個(gè)數(shù)據(jù)處理方案的一致性。舉例略。
data_csv = pd.read_csv("example.csv")
結(jié)果和上面json結(jié)果結(jié)構(gòu)是一致的。
sql,最復(fù)雜的一項(xiàng),在 read_sql 之前,你還需要關(guān)心數(shù)據(jù)庫(kù)連接問(wèn)題,和要處理的 sql 語(yǔ)句問(wèn)題。
這里我遭遇的坑在后者,如果你打算用 read_sql 打入 dataframe 的是一張大表,那么可以暫時(shí)放棄這個(gè)念頭,因?yàn)樵?read_sql 的過(guò)程中,雖然讀表很快,但是寫(xiě)入 dataframe 的速度卻受制于數(shù)據(jù)規(guī)模,個(gè)人建議是,如果人類(lèi)沒(méi)有耐心把這些數(shù)據(jù)一一讀完,那么就不要打給 dataframe,至少在目前的 0.20 版本是這樣。不過(guò)好在我們可以在語(yǔ)句上做處理,在 where 之后按需做一些 group 或者 limit。
#數(shù)據(jù)庫(kù)連接部分 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 #實(shí)例化連接對(duì)象 conn = getConn() #語(yǔ)句 sql = "select company, sum(totaAmount) from myTable where ... and ... group by company" #最熟悉的語(yǔ)法 data_sql = pd.read_sql(sql,con=conn)
結(jié)果和上面 json 結(jié)果結(jié)構(gòu)是一致的
這個(gè)環(huán)節(jié)最大的收益就是將所有來(lái)源的數(shù)據(jù) dataframe 或者 series 化了,然后就可以統(tǒng)一用 pandas 功能來(lái)進(jìn)行下一步數(shù)據(jù)處理工作。數(shù)據(jù)處理環(huán)節(jié)環(huán)節(jié)太龐大,本文不做描述。這里我們跳過(guò)了處理環(huán)節(jié),直奔 excel。
xlsxwriter這個(gè)包的作用就是用 python 語(yǔ)法來(lái)寫(xiě) excel 文件,在把所有關(guān)心的數(shù)據(jù)都裁剪完成后,下一步就是把它們按需塞進(jìn) excel 中。
import xlsxwriter 之后,用三行代碼就能用 python 創(chuàng)建一個(gè) excel 文件。
workbook = xlsxwriter.Workbook("helloworld.xlsx") worksheet = workbook.add_worksheet(‘made by xlsxwriter’) workbook.close()
簡(jiǎn)單吧,看字面意思就能理解——先創(chuàng)建文件,再創(chuàng)建表單,最后關(guān)閉。這是官網(wǎng)的文檔,但是卻不完全適用目前的場(chǎng)景。因?yàn)椋覀冃枰柚?pandas 來(lái)寫(xiě),而不是直接寫(xiě)。
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()
這也是官網(wǎng)的文檔,這兩種方法處理 excel 都可以,區(qū)別是前者是可以方便地指定打在哪些格子里,而后者是將數(shù)據(jù)作為一個(gè)整體的打入 excel,這里更推薦后者。如果是多個(gè)不同數(shù)據(jù)源或者不同意義的數(shù)據(jù),可以在 to_excel 的時(shí)候,新增一些 Sheet 來(lái)分類(lèi)數(shù)據(jù),sheet_name 參數(shù),使得你能自如的掌控?cái)?shù)據(jù)的內(nèi)容。
所謂的塞數(shù)據(jù)也就是把你最終處理完的 dataframe 或者 series 交給了 excel,用 sheet_name 來(lái)管理不同意義的數(shù)據(jù)。
取數(shù)工作一般是周期性的,在數(shù)據(jù)需求沒(méi)有產(chǎn)品化之前,需要利用更高效的工具來(lái)壓縮取數(shù)環(huán)節(jié)所耗費(fèi)的時(shí)間,將更多的精力留給數(shù)據(jù)分析之后結(jié)論以及建議上,畢竟分析才是數(shù)據(jù)價(jià)值。
上述方案比 excel+ 復(fù)制黏貼來(lái)的高效且可靠,既統(tǒng)一了數(shù)據(jù)采集方式,又使得取數(shù)過(guò)程可視化且易于維護(hù)。成本則是你需要花一些時(shí)間閱讀 pandas 和 xlsxwriter 的文檔,而 python 環(huán)境的搭建幾乎是零成本的。
xlsxwriter文檔:http://xlsxwriter.readthedocs.io
pandas文檔:http://pandas.pydata.org/pand...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/17653.html
摘要:今天要分享的是,用來(lái)寫(xiě)。數(shù)據(jù)處理環(huán)節(jié)效率低下,易受干擾。問(wèn)題排查難以溯源。一旦數(shù)據(jù)報(bào)告有誤,想要定位問(wèn)題所在,常常需要從頭開(kāi)始復(fù)盤(pán)。結(jié)果和上面結(jié)果結(jié)構(gòu)是一致的。這是官網(wǎng)的文檔,但是卻不完全適用目前的場(chǎng)景。 大毛 豈安科技業(yè)務(wù)風(fēng)險(xiǎn)分析師 多年訂單業(yè)務(wù)反欺詐經(jīng)驗(yàn),負(fù)責(zé)豈安科技多款產(chǎn)品運(yùn)營(yíng)工作。 上回筆者分享過(guò)一些 pandas 的常用數(shù)據(jù)查詢(xún)語(yǔ)法,但是數(shù)據(jù)查詢(xún)對(duì)于 pandas 而言只是冰...
摘要:在使用之前,大多數(shù)數(shù)據(jù)分析師已經(jīng)掌握了和,并且在剛上手時(shí)會(huì)經(jīng)常習(xí)慣性想到老辦法。這種根據(jù)列值選取行數(shù)據(jù)的查詢(xún)操作,推薦使用方法。如果我又有一批數(shù)據(jù),需要將兩部分?jǐn)?shù)據(jù)合并。 大毛 豈安科技業(yè)務(wù)風(fēng)險(xiǎn)分析師 多年訂單業(yè)務(wù)反欺詐經(jīng)驗(yàn),負(fù)責(zé)豈安科技多款產(chǎn)品運(yùn)營(yíng)工作。 在使用Pandas之前,大多數(shù)數(shù)據(jù)分析師已經(jīng)掌握了Excel和SQL,并且在剛上手Pandas時(shí)會(huì)經(jīng)常習(xí)慣性想到老辦法。如果誰(shuí)能把...
摘要:數(shù)據(jù)分析的發(fā)展方向一般有商業(yè)方向,行業(yè)分析業(yè)務(wù)方向,和機(jī)器學(xué)習(xí)數(shù)據(jù)挖掘方向。機(jī)器學(xué)習(xí)的書(shū)籍推薦統(tǒng)計(jì)學(xué)習(xí)方法,機(jī)器學(xué)習(xí),機(jī)器學(xué)習(xí)實(shí)戰(zhàn)三本書(shū)。 作者:xiaoyu 微信公眾號(hào):Python數(shù)據(jù)科學(xué) 知乎:python數(shù)據(jù)分析師 上一篇主要分享了博主親身轉(zhuǎn)行數(shù)據(jù)分析的經(jīng)歷: 【從零學(xué)起到成功轉(zhuǎn)行數(shù)據(jù)分析,我是怎么做的?】 本篇繼上一篇將分享轉(zhuǎn)行數(shù)據(jù)分析的一些經(jīng)驗(yàn)和學(xué)習(xí)方法,看完這篇你將會(huì)解...
閱讀 3898·2021-11-22 13:54
閱讀 2673·2021-09-30 09:48
閱讀 2359·2021-09-28 09:36
閱讀 3110·2021-09-22 15:26
閱讀 1342·2019-08-30 15:55
閱讀 2509·2019-08-30 15:54
閱讀 1424·2019-08-30 14:17
閱讀 2340·2019-08-28 18:25