乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      不識 Pandas,縱是老手也枉然?

       gexian 2019-09-13

      作者 | 周志鵬  發(fā)布時(shí)間:2019-09-1319:10北京創(chuàng)新樂知信息技術(shù)有限公司

      責(zé)編 |

      這段時(shí)間和一些做數(shù)據(jù)分析的同學(xué)閑聊,我發(fā)現(xiàn)數(shù)據(jù)分析技能入門階段存在一個(gè)普遍性的問題,很多憑著興趣入坑的同學(xué),都能夠很快熟悉Python基礎(chǔ)語法,然后不約而同的一頭扎進(jìn)《利用Python進(jìn)行數(shù)據(jù)分析》這本經(jīng)典之中,硬著頭皮啃完之后,好像自己什么都會了一點(diǎn),然而實(shí)際操作起來既不知從何操起,又漏洞百出。

      至于原因嘛,理解不夠,實(shí)踐不夠是兩條老牌的攔路虎,只能靠自己來克服。還有一個(gè)非常有意思且經(jīng)常被忽視的因素——陷入舉三反一的懵逼狀態(tài)。

      什么意思呢?假如我是個(gè)旱鴨子,想去學(xué)游泳,教練很認(rèn)真的給我剖析了蛙泳的動作,扶著我的腰讓我在水里劃拉了5分鐘,接著馬上給我講解了蝶泳,又是劃拉了5分鐘,然后又硬塞給我潛泳的姿勢,依然是劃拉5分鐘。最后,教練一下子把我丟進(jìn)踩不到底的泳池,給我吶喊助威。

      作為一個(gè)還沒入門的旱鴨子,教練傾囊授了我3種游泳技巧,讓我分別實(shí)踐了5分鐘。這樣做的結(jié)果就是我哪一種游泳技巧也沒學(xué)會,只學(xué)會了喝水。當(dāng)一個(gè)初學(xué)者一開始就陷入針對單個(gè)問題的多種解決方法,而每一種方法的實(shí)踐又淺嘗輒止,在面對具體問題時(shí)往往會手忙腳亂。

      Pandas來說,它的多種構(gòu)造方式,多種索引方式以及類似效果的多種實(shí)現(xiàn)方法,很容易把初學(xué)者打入舉三反一的懵逼狀態(tài)。所以,盡量避開這個(gè)坑也是我寫Pandas基礎(chǔ)系列的初衷,希望通過梳理和精簡知識點(diǎn)的方式,給需要的同學(xué)一些啟發(fā)。

      下面開始進(jìn)入正題(我真是太嘮叨了)。

      Pandas簡介

      江湖上流傳著這么一句話——分析不識潘大師(PANDAS),縱是老手也枉然。

      Pandas是基于Numpy的專業(yè)數(shù)據(jù)分析工具,可以靈活高效的處理各種數(shù)據(jù)集,也是我們后期分析案例的神器。它提供了兩種類型的數(shù)據(jù)結(jié)構(gòu),分別是DataFrameSeries,我們可以簡單粗暴的把DataFrame理解為Excel里面的一張表,而Series就是表中的某一列,后面學(xué)習(xí)和用到的所有Pandas騷操作,都是基于這些表和列進(jìn)行的操作(關(guān)于PandasExcel的形象關(guān)系,這里推薦我的好朋友張俊紅寫的《對比EXCEL,輕松學(xué)習(xí)Python數(shù)據(jù)分析》)。

      這里有一點(diǎn)需要強(qiáng)調(diào),PandasExcel、SQL相比,只是調(diào)用和處理數(shù)據(jù)的方式變了,核心都是對源數(shù)據(jù)進(jìn)行一系列的處理,在正式處理之前,更重要的是謀定而后動,明確分析的意義,理清分析思路之后再處理和分析數(shù)據(jù),往往事半功倍。

      創(chuàng)建、讀取和存儲

      1、創(chuàng)建

      Pandas中我們想要構(gòu)造下面這一張表應(yīng)該如何操作呢?

      IMG_256

      別忘了,第一步一定是先導(dǎo)入我們的庫——import pandas as pd

      構(gòu)造DataFrame最常用的方式是字典+列表,語句很簡單,先是字典外括,然后依次打出每一列標(biāo)題及其對應(yīng)的列值(此處一定要用列表),這里列的順序并不重要:

      IMG_257

      左邊是jupyter notebookdataframe的樣子,如果對應(yīng)到excel中,他就是右邊表格的樣子,通過改變columns,indexvalues的值來控制數(shù)據(jù)。

      PS,如果我們在創(chuàng)建時(shí)不指定index,系統(tǒng)會自動生成從0開始的索引。

      2、讀取

      更多時(shí)候,我們是把相關(guān)文件數(shù)據(jù)直接讀進(jìn)PANDAS中進(jìn)行操作,這里介紹兩種非常接近的讀取方式,一種是CSV格式的文件,一種是EXCEL格式(.xlsxxls后綴)的文件。

      讀取csv文件:

      IMG_258

      engine是使用的分析引擎,讀取csv文件一般指定python避免中文和編碼造成的報(bào)錯(cuò)。而讀取Excel文件,則是一樣的味道:

      IMG_259

      非常easy,其實(shí)read_csvread_excel還有一些參數(shù),比如headersep、names等,大家可以做額外了解。實(shí)踐中數(shù)據(jù)源的格式一般都是比較規(guī)整的,更多情況是直接讀取。

      3、存儲

      存儲起來一樣非常簡單粗暴且相似:

      快速認(rèn)識數(shù)據(jù)

      這里以我們的案例數(shù)據(jù)為例,迅速熟悉查看N行,數(shù)據(jù)格式概覽以及基礎(chǔ)統(tǒng)計(jì)數(shù)據(jù)。

      1、查看數(shù)據(jù),掐頭看尾

      很多時(shí)候我們想要對數(shù)據(jù)內(nèi)容做一個(gè)總覽,用df.head()函數(shù)直接可以查看默認(rèn)的前5行,與之對應(yīng),df.tail()就可以查看數(shù)據(jù)尾部的5行數(shù)據(jù),這兩個(gè)參數(shù)內(nèi)可以傳入一個(gè)數(shù)值來控制查看的行數(shù),例如df.head(10)表示查看前10行數(shù)據(jù)。

      IMG_260

      2、格式查看

      df.info()幫助我們一步摸清各列數(shù)據(jù)的類型,以及缺失情況:

      IMG_261

      從上面直接可以知道數(shù)據(jù)集的行列數(shù),數(shù)據(jù)集的大小,每一列的數(shù)據(jù)類型,以及有多少條非空數(shù)據(jù)。

      3、統(tǒng)計(jì)信息概覽

      快速計(jì)算數(shù)值型數(shù)據(jù)的關(guān)鍵統(tǒng)計(jì)指標(biāo),像平均數(shù)、中位數(shù)、標(biāo)準(zhǔn)差等等。

      IMG_262

      我們本來有5列數(shù)據(jù),為什么返回結(jié)果只有兩列?那是因?yàn)檫@個(gè)操作只針對數(shù)值型的列。其中count是統(tǒng)計(jì)每一列的有多少個(gè)非空數(shù)值,mean、std、min、max對應(yīng)的分別是該列的均值、標(biāo)準(zhǔn)差、最小值和最大值,25%、50%75%對應(yīng)的則是分位數(shù)。

      列的基本處理方式

      這里,我們采用SQL四大法寶的邏輯來簡單梳理針對列的基本處理方式——增、刪、選、改。

      使用Pandas時(shí),盡量避免用行或者EXCEL操作單元格的思維來處理數(shù)據(jù),要逐漸養(yǎng)成一種列向思維,每一列是同宗同源,處理起來是嗖嗖的快。

      1、增

      增加一列,用df['新列名'] = 新列值的形式,在原數(shù)據(jù)基礎(chǔ)上賦值即可:

      IMG_263

      2、刪:

      我們用drop函數(shù)制定刪除對應(yīng)的列,axis = 1表示針對列的操作,inplaceTrue,則直接在源數(shù)據(jù)上進(jìn)行修改,否則源數(shù)據(jù)會保持原樣。

      IMG_264

      3、選:

      想要選取某一列怎么辦?df['列名']即可:

      IMG_265

      選取多列呢?需要用列表來傳遞:df[['第一列','第二列','第三列'..]]

      IMG_266

      4、改:

      好事多磨,復(fù)雜的針對特定條件和行列的篩選、修改,放在后面結(jié)合案例細(xì)講,這里只講一下最簡單的更改:df['舊列名'] = 某個(gè)值或者某列值,就完成了對原列數(shù)值的修改。

      常用數(shù)據(jù)類型及操作

      1、字符串

      字符串類型是最常用的格式之一了,Pandas中字符串的操作和原生字符串操作幾乎一毛一樣,唯一不同的是需要在操作前加上".str"。

      我們最初用df2.info()查看數(shù)據(jù)類型時(shí),非數(shù)值型的列都返回的是object格式,和str類型深層機(jī)制上的區(qū)別就不展開了,在常規(guī)實(shí)際應(yīng)用中,我們可以先理解為object對應(yīng)的就是str格式,int64對應(yīng)的就是int格式,float64對應(yīng)的就是float格式即可。

      在案例數(shù)據(jù)中,我們發(fā)現(xiàn)來源明細(xì)那一列,可能是系統(tǒng)導(dǎo)出的歷史遺留問題,每一個(gè)字符串前面都有一個(gè)“-”符號,又丑又無用,所以把它給拿掉:

      IMG_267

      一般來說清洗之后的列是要替換掉原來列的:

      2、數(shù)值型

      數(shù)值型數(shù)據(jù),常見的操作是計(jì)算,分為與單個(gè)值的運(yùn)算,長度相等列的運(yùn)算。

      以案例數(shù)據(jù)為例,源數(shù)據(jù)訪客數(shù)我們是知道的,現(xiàn)在想把所有渠道的訪客都加上10000,怎么操作呢?

      IMG_268

      只需要選中訪客數(shù)所在列,然后加上10000即可,pandas自動將10000和每一行數(shù)值相加,針對單個(gè)值的其他運(yùn)算(減乘除)也是如此。

      列之間的運(yùn)算語句也非常簡潔。源數(shù)據(jù)是包含了訪客數(shù)、轉(zhuǎn)化率和客單價(jià),而實(shí)際工作中我們對每個(gè)渠道貢獻(xiàn)的銷售額更感興趣。(銷售額 = 訪客數(shù) X 轉(zhuǎn)化率 X 客單價(jià))

      對應(yīng)操作語句:df['銷售額'] = df['訪客數(shù)'] * df['轉(zhuǎn)化率'] * df['客單價(jià)']

      但為什么瘋狂報(bào)錯(cuò)?

      導(dǎo)致報(bào)錯(cuò)的原因,是數(shù)值型數(shù)據(jù)和非數(shù)值型數(shù)據(jù)相互計(jì)算導(dǎo)致的。PANDAS把帶“%”符號的轉(zhuǎn)化率識別成字符串類型,我們需要先拿掉百分號,再將這一列轉(zhuǎn)化為浮點(diǎn)型數(shù)據(jù):

      IMG_269

      要注意的是,這樣操作,把9.98%變成了9.98,所以我們還需要讓支付轉(zhuǎn)化率除以100,來還原百分?jǐn)?shù)的真實(shí)數(shù)值:

      IMG_270

      然后,再用三個(gè)指標(biāo)相乘計(jì)算銷售額:

      IMG_271

      3、時(shí)間類型

      PANDAS中時(shí)間序列相關(guān)的水非常深,這里只對日常中最基礎(chǔ)的時(shí)間格式進(jìn)行講解,對時(shí)間序列感興趣的同學(xué)可以自行查閱相關(guān)資料,深入了解。

      以案例數(shù)據(jù)為例,我們這些渠道數(shù)據(jù),是在201982日提取的,后面可能涉及到其他日期的渠道數(shù)據(jù),所以需要加一列時(shí)間予以區(qū)分,在EXCEL中常用的時(shí)間格式是'2019-8-3'或者'2019/8/3',我們用PANDAS來實(shí)現(xiàn)一下:

      IMG_272

      在實(shí)際業(yè)務(wù)中,一些時(shí)候PANDAS會把文件中日期格式的字段讀取為字符串格式,這里我們先把字符串'2019-8-3'賦值給新增的日期列,然后用to_datetime()函數(shù)將字符串類型轉(zhuǎn)換成時(shí)間格式:

      IMG_273

      轉(zhuǎn)換成時(shí)間格式(這里是datetime64)之后,我們可以用處理時(shí)間的思路高效處理這些數(shù)據(jù),比如,我現(xiàn)在想知道提取數(shù)據(jù)這一天離年末還有多少天('2019-12-31'),直接做減法(該函數(shù)接受時(shí)間格式的字符串序列,也接受單個(gè)字符串):

      IMG_274

      是不是非常簡單?

      最后我們一起快速回顧下本文的內(nèi)容:

      第一步,我們先了解PANDAS到底是個(gè)什么東西。第二步,學(xué)習(xí)如何構(gòu)建、讀入存儲數(shù)據(jù)。第三步,拿到數(shù)據(jù)之后,怎么樣快速查看數(shù)據(jù)。第四步,對數(shù)據(jù)有了基礎(chǔ)了解,就可以進(jìn)行簡單的增刪選改了。第五步,在了解基礎(chǔ)操作之后,對Pandas中基礎(chǔ)數(shù)據(jù)類型進(jìn)行了初步照面。每一步都是本著小而美(畢竟臭美也算美)和輕量的初心,和大家一起重新認(rèn)識回顧這些模塊,然后在接下來的案例實(shí)踐中檢驗(yàn)、鞏固、沉淀這些操作與分析思路。

      作者:周志鵬,2年數(shù)據(jù)分析,深切感受到數(shù)據(jù)分析的有趣和學(xué)習(xí)過程中缺少案例的無奈,遂新開公眾號「數(shù)據(jù)不吹?!?,定期更新數(shù)據(jù)分析相關(guān)技巧和有趣案例(含實(shí)戰(zhàn)數(shù)據(jù)集),歡迎大家關(guān)注交流。

      聲明:本文為作者投稿,版權(quán)歸其

        本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多