成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

【數(shù)據(jù)科學(xué)系統(tǒng)學(xué)習(xí)】Python # 數(shù)據(jù)分析基本操作[四] 數(shù)據(jù)規(guī)整化和數(shù)據(jù)聚合與分組運(yùn)算

The question / 4061人閱讀

摘要:數(shù)據(jù)規(guī)整化清理轉(zhuǎn)換合并重塑數(shù)據(jù)聚合與分組運(yùn)算數(shù)據(jù)規(guī)整化清理轉(zhuǎn)換合并重塑合并數(shù)據(jù)集可根據(jù)一個(gè)或多個(gè)鍵將不同中的行鏈接起來。函數(shù)根據(jù)樣本分位數(shù)對(duì)數(shù)據(jù)進(jìn)行面元?jiǎng)澐帧W值浠?,給出待分組軸上的值與分組名之間的對(duì)應(yīng)關(guān)系。

本篇內(nèi)容為整理《利用Python進(jìn)行數(shù)據(jù)分析》,博主使用代碼為 Python3,部分內(nèi)容和書本有出入。

在前幾篇中我們介紹了 NumPy、pandas、matplotlib 三個(gè)庫(kù)的基本操作,本篇介紹對(duì)數(shù)據(jù)的一些操作。

數(shù)據(jù)規(guī)整化:清理、轉(zhuǎn)換、合并、重塑

數(shù)據(jù)聚合與分組運(yùn)算


數(shù)據(jù)規(guī)整化:清理、轉(zhuǎn)換、合并、重塑 合并數(shù)據(jù)集

pandas.merge:可根據(jù)一個(gè)或多個(gè)鍵將不同DataFrame中的行鏈接起來。

pandas.concat:可沿著一條軸將多個(gè)對(duì)象堆疊到一起。

combine_first:可將重復(fù)數(shù)據(jù)編接在一起,用一個(gè)對(duì)象中的值填充另一個(gè)對(duì)象中的缺失值。


數(shù)據(jù)庫(kù)風(fēng)格的 DataFrame 合并


數(shù)據(jù)集的合并或連接運(yùn)算:通過一個(gè)或多個(gè)鍵將行鏈接起來。

多對(duì)一的合并:

若沒有指定用哪個(gè)列進(jìn)行連接,merge會(huì)將重疊列名當(dāng)做鍵,指定如下:

若兩個(gè)對(duì)象的列名不同,可分別進(jìn)行指定:

默認(rèn)情況下,mergeinner連接,結(jié)果中的鍵是交集。外連接求取的是鍵的并集:

多對(duì)多的合并操作:

連接方式只影響出現(xiàn)在結(jié)果中的鍵。

根據(jù)多個(gè)鍵進(jìn)行合并,傳入一個(gè)由列名組成的列表:

在進(jìn)行列-列連接時(shí),DataFrame對(duì)象中的索引會(huì)被丟棄。

suffixes選項(xiàng):指定附加到左右兩個(gè)DataFrame對(duì)象的重疊列名上的字符串。


索引上的合并


當(dāng)DataFrame中的連接鍵位于其索引中時(shí),傳入left_index=True、 right_index=True,以說明索引應(yīng)該被用作連接鍵:


對(duì)于層次化索引的數(shù)據(jù):

必須以列表的形式指明用作合并鍵的列(注意對(duì)重復(fù)索引值的處理):

使用合并雙方的索引:


DataFramejoin 實(shí)例方法:

更方便的實(shí)現(xiàn)按索引合并,不管有沒有重疊的列。在連接鍵上作左連接。


支持參數(shù)DataFrame的索引跟調(diào)用者DataFrame的某個(gè)列之間的連接:

對(duì)于簡(jiǎn)單的索引合并,可以向join傳入一組DataFrame(concat 函數(shù)也是這個(gè)功能):


軸向連接


數(shù)據(jù)合并運(yùn)算:

連接(concatenation)

綁定(binding)

堆疊(stacking)

NumPy有一個(gè)用于合并原始NumPy數(shù)組的concatenation函數(shù):

pandasconcat函數(shù):

默認(rèn)情況下,concataxis=0 上工作,產(chǎn)生一個(gè)新Series。傳入 axis=1,產(chǎn)生一個(gè)DataFrame

這種情況下,另外一條軸上沒有重疊,傳入 join = "inner" 得到它們的交集:

使用 key 參數(shù),在連接軸上創(chuàng)建一個(gè)層次化索引:

沿著 axis=1 對(duì)Series進(jìn)行合并,keys 就會(huì)成為DataFrame的列頭:

對(duì)DataFrame對(duì)象也是如此:

傳入一個(gè)字典,則字典的鍵會(huì)被當(dāng)做keys選項(xiàng)的值:

用于管理層次化索引創(chuàng)建方式的參數(shù):

跟當(dāng)前分析工作無關(guān)的DataFrame行索引:

傳入 ignore_index = True


合并重疊數(shù)據(jù)


關(guān)于有索引全部或部分重疊的兩個(gè)數(shù)據(jù)集。

NumPywhere函數(shù),用于表達(dá)一種矢量化的if-else

Seriescombine_first方法,實(shí)現(xiàn)與上面一樣的功能,并會(huì)進(jìn)行數(shù)據(jù)對(duì)齊:

對(duì)于DataFrame 一樣:

可以看作用參數(shù)對(duì)象中的數(shù)據(jù)為調(diào)用者對(duì)象的缺失數(shù)據(jù)“打補(bǔ)丁”。


重塑和軸向旋轉(zhuǎn)

用于重新排列表格型數(shù)據(jù)的基礎(chǔ)運(yùn)算:重塑(reshape)或軸向旋轉(zhuǎn)(pivot)。


重塑層次化索引


stark:將數(shù)據(jù)的列“旋轉(zhuǎn)”為行

unstark:將數(shù)據(jù)的行“旋轉(zhuǎn)”為列

stack方法將行轉(zhuǎn)為列,得到一個(gè)Series

對(duì)層次化索引的Series,可以用unstack將其重新排為一個(gè)DataFrame

默認(rèn)情況下,unstack操作最內(nèi)層。

傳入分層級(jí)別的編號(hào)或名稱可對(duì)其他級(jí)別進(jìn)行unstack操作:

如果不是所有的級(jí)別值都能在各分組找到的話,unstack操作可能會(huì)引入缺失數(shù)據(jù):

stack默認(rèn)會(huì)濾除缺失數(shù)據(jù),因此該運(yùn)算是可逆的:

對(duì)DataFrame進(jìn)行unstack操作時(shí),作為旋轉(zhuǎn)軸的級(jí)別將會(huì)成為結(jié)果中的最低級(jí)別:


將“長(zhǎng)格式”旋轉(zhuǎn)為“寬格式”


時(shí)間序列數(shù)據(jù)通常以 “長(zhǎng)格式(long)”或“堆疊格式(stacked)”存儲(chǔ)在數(shù)據(jù)庫(kù)和 CSV 中。

轉(zhuǎn)成DataFrame,用 pivot 方法:

得到的DataFrame帶有層次化的列:

假設(shè)有兩個(gè)需要參與重塑的數(shù)據(jù)列:

pivot其實(shí)只是一個(gè)快捷方式:用set_index創(chuàng)建層次化索引,再用unstack重塑。


以上是數(shù)據(jù)的重排,下面是過濾、清理及其他轉(zhuǎn)換工作。

數(shù)據(jù)轉(zhuǎn)換

移除重復(fù)數(shù)據(jù)


DataFrame中出現(xiàn)的重復(fù)行:

DataFrameduplicated方法返回一個(gè)布爾型Series,表示各行是否是重復(fù)行,drop_duplicates方法返回一個(gè)移除了重復(fù)行的DataFrame

指定部分列進(jìn)行重復(fù)項(xiàng)判斷,如只希望根據(jù)k1列過濾重復(fù)項(xiàng):

duplicateddrop_duplicates默認(rèn)保留重復(fù)數(shù)值里第一次出現(xiàn)的組合,傳入keep = last則保留最后一個(gè):


利用函數(shù)或映射進(jìn)行數(shù)據(jù)轉(zhuǎn)換


根據(jù)數(shù)組、SeriesDataFrame列中的值來實(shí)現(xiàn)轉(zhuǎn)換。

編寫一個(gè)肉類到動(dòng)物的映射:

Seriesmap方法:可以接受一個(gè)函數(shù)或含有映射關(guān)系的字典型對(duì)象,用于修改對(duì)象的數(shù)據(jù)子集。

也可以傳入一個(gè)能夠完成全部這些工作的函數(shù):


替換值


replace方法 :替換

利用fillna方法填充缺失數(shù)據(jù)可以看作替換的一種特殊情況。

替換一個(gè)值和一次性替換多個(gè)值:

對(duì)不同的值進(jìn)行不同的替換:

傳入的參數(shù)也可以是字典:


重命名軸索引


軸標(biāo)簽有一個(gè)map方法:

對(duì)函數(shù)或映射進(jìn)行轉(zhuǎn)換,從而得到一個(gè)新對(duì)象。


將其值賦給index,就可以對(duì)DataFrame進(jìn)行就地修改了:


要?jiǎng)?chuàng)建數(shù)據(jù)集的轉(zhuǎn)換版,而不是修改原始數(shù)據(jù),用rename

rename結(jié)合字典型對(duì)象可以實(shí)現(xiàn)對(duì)部分軸標(biāo)簽的更新:

rename實(shí)現(xiàn)了復(fù)制DataFrame并對(duì)其索引和列標(biāo)簽進(jìn)行賦值,就地修改某個(gè)數(shù)據(jù)集,傳入inplace=True


離散化和面元?jiǎng)澐?/strong>


為了便于分析,連續(xù)數(shù)據(jù)常常被離散化或拆分為“面元(bin)”。

pandascut函數(shù):

pandas返回的是一個(gè)特殊的Categorical對(duì)象,它含有一個(gè)表示不同分類名稱的數(shù)組和一個(gè)為年齡數(shù)據(jù)進(jìn)行標(biāo)號(hào)的屬性:

哪邊是閉端可以通過right=False進(jìn)行修改:

設(shè)置自己的面元名稱:

labels選項(xiàng)設(shè)置為一個(gè)列表或數(shù)組即可。


如果向cut傳入的是面元的數(shù)量而不是確切的面元邊界,則它會(huì)根據(jù)數(shù)據(jù)的最小值和最大值計(jì)算等長(zhǎng)面元:

將一些均勻分布的數(shù)據(jù)分成了四組。


qcut函數(shù):根據(jù)樣本分位數(shù)對(duì)數(shù)據(jù)進(jìn)行面元?jiǎng)澐帧?/p>

由于qcut使用的是樣本分位數(shù),可以得到大小基本相等的面元(而 cut 根據(jù)數(shù)據(jù)的分布情況,可能無法使各個(gè)面元中含有相同數(shù)量的數(shù)據(jù)點(diǎn))。

設(shè)置自定義的分位數(shù):

在聚合和分組運(yùn)算時(shí)會(huì)再次用到cutqcut 這兩個(gè)離散化函數(shù)。


檢測(cè)和過濾異常值


判斷是否存在異常值(outlier ):

找出某列中絕對(duì)值大小超過 3 的值:

選出全部含有“超過 3 或 -3 的值”的行:

將值限制在區(qū)間 -3 到 3 以內(nèi):

np.sign這個(gè)ufunc返回的是一個(gè)由 1 和 -1 組成的數(shù)組,表示原始值的符號(hào)。


排列和隨機(jī)采樣


numpy.random.permutation函數(shù):對(duì)SeriesDataFrame的列排列。

Permutation(5):需要排列的軸的長(zhǎng)度。

然后就可以在基于ix的索引操作或take函數(shù)中使用該數(shù)組了:

選取隨機(jī)子集(非替換):

用替換的方式產(chǎn)生樣本:


計(jì)算指標(biāo)/啞變量


將分類變量(Categorical)轉(zhuǎn)換為“啞變量矩陣(dummy matrix)”或“指標(biāo)矩陣(indicator matrix)”。

DataFrame的列加上一個(gè)前綴,以便能夠跟其他數(shù)據(jù)進(jìn)行合并:

get_dummiesprefix參數(shù)。


DataFrame中的某行同屬于多個(gè)分類的情況,舉個(gè)例子:

要為每個(gè)genre添加指標(biāo)變量就需要做一些數(shù)據(jù)規(guī)整操作,構(gòu)建多成員指標(biāo)變量:

對(duì)于很大的數(shù)據(jù),這種方式會(huì)變得非常慢,需要編寫一個(gè)能夠利用DataFrame內(nèi)部機(jī)制的更低級(jí)的函數(shù):

get_dummiescut之類的離散化函數(shù)。


字符串操作

字符串對(duì)象方法


Python 字符串對(duì)象的內(nèi)置方法:

find找不到返回 -1,index找不到引發(fā)一個(gè)異常


傳入空字符串常常用于刪除模式:


正則表達(dá)式(regex)


提供了一種靈活的在文本中搜索或匹配字符串模式的方式。python 內(nèi)置的re模塊負(fù)責(zé)對(duì)字符串應(yīng)用正則表達(dá)式。

re模塊的函數(shù)分為三個(gè)大類:模式匹配、替換、拆分。

描述一個(gè)或多個(gè)空白符的regexs+。

調(diào)用re.split("s+", text)時(shí),正則表達(dá)式會(huì)先被編譯,然后再在text上調(diào)用其split方法。

可以用re.compile自己編譯一個(gè)regex,以得到一個(gè)可重用的regex對(duì)象,如上所示。如果打算對(duì)許多字符串應(yīng)用同一條正則表達(dá)式,強(qiáng)烈建議通過這種方法,可以節(jié)省大量的 CPU 時(shí)間。


得到匹配regex的所有模式:

findall:返回字符串中所有的匹配項(xiàng)。

search:只返回第一個(gè)匹配項(xiàng)。

match:只匹配字符串的首部。


sub方法:將匹配到的模式替換為指定字符串,并返回所得到的新字符串。

不僅想找出電子郵件地址,還想將各個(gè)地址分為 3 個(gè)部分,只需將待分段的模式的各部分用圓括號(hào)包起來:

通過groups方法返回一個(gè)由模式各段組成的元組。


對(duì)于帶有分組功能的模式,findall會(huì)返回一個(gè)元組列表:

sub還能通過諸如1, 2之類的特殊符號(hào)訪問各匹配項(xiàng)中的分組:

為各個(gè)匹配分組加上一個(gè)名稱,由這種正則表達(dá)式所產(chǎn)生的匹配對(duì)象可以得到一個(gè)簡(jiǎn)單易用的帶有分組名稱的字典:


pandas 中矢量化的字符串函數(shù)


通過data.map,所有字符串和正則表達(dá)式方法都能被應(yīng)用于各個(gè)值,但如存在NA就會(huì)報(bào)錯(cuò),為了解決這個(gè)問題,Series有一些能夠跳過NA值的字符串操作方法,通過Seriesstr屬性即可訪問這些方法:

也可以用正則表達(dá)式:

實(shí)現(xiàn)矢量化的元素獲取操作,對(duì)str.get/str屬性上使用索引:

對(duì)字符串進(jìn)行子串截?。?/p>


數(shù)據(jù)聚合與分組運(yùn)算

對(duì)數(shù)據(jù)集進(jìn)行分組并對(duì)各組應(yīng)用一個(gè)函數(shù)。

在將數(shù)據(jù)集準(zhǔn)備好之后,通常的任務(wù)就是計(jì)算分組統(tǒng)計(jì)生成透視表。pandas提供了一個(gè)靈活高效的gruopby功能,對(duì)數(shù)據(jù)集進(jìn)行切片、切塊、摘要等操作。

pythonpandas強(qiáng)大的表達(dá)能力可以執(zhí)行復(fù)雜的多的分組運(yùn)算:利用任何可以接受pandas對(duì)象或NumPy數(shù)組的函數(shù)。


GroupBy技術(shù)

分組運(yùn)算:split(拆分)--apply(應(yīng)用)--combine(合并)。

分組鍵的形式:

列表或數(shù)組,其長(zhǎng)度與待分組的軸一樣。

表示DataFrame某個(gè)列名的值。

字典或Series,給出待分組軸上的值與分組名之間的對(duì)應(yīng)關(guān)系。

函數(shù),用于處理軸索引或索引中的各個(gè)標(biāo)簽。


訪問data1,并根據(jù)key1調(diào)用groupby。

變量grouped是一個(gè)GroupBy對(duì)象,它實(shí)際上還沒有進(jìn)行任何計(jì)算,只是含有一些有關(guān)分組鍵df["key1"]的中間數(shù)據(jù)。

例如,調(diào)用GroupBymean方法來計(jì)算分組平均值:

Series根據(jù)分組鍵進(jìn)行了聚合,產(chǎn)生了一個(gè)新的Series,其索引為key1列中的唯一值。

通過兩個(gè)鍵對(duì)數(shù)據(jù)進(jìn)行了分組后,得到的Series具有一個(gè)層次化索引:

分組鍵可以是任何長(zhǎng)度適當(dāng)?shù)臄?shù)組:

將列名用作分組鍵:

GroupBysize方法返回一個(gè)含有分組大小的Series


對(duì)分組進(jìn)行迭代


GroupBy對(duì)象支持迭代,可以產(chǎn)生一組二元元組(由分組名和數(shù)據(jù)塊組成)。

對(duì)于多重鍵,元組的第一個(gè)元素將會(huì)是由鍵值組成的元組。

對(duì)數(shù)據(jù)片段進(jìn)行操作,如將這些數(shù)據(jù)片段做成一個(gè)字典:

groupby默認(rèn)在axis=0上進(jìn)行分組,通過設(shè)置可以在其它任何軸上進(jìn)行分組,如可以根據(jù)dtype對(duì)列進(jìn)行分組:


選取一個(gè)或一組列


對(duì)于由DataFrame產(chǎn)生的GroupBy對(duì)象,用一個(gè)或一組(單個(gè)字符串或字符串?dāng)?shù)組)列名對(duì)其進(jìn)行索引,就能實(shí)現(xiàn)選取部分列進(jìn)行聚合的目的:

例如,對(duì)部分列進(jìn)行聚合:計(jì)算data2列的平均值并以DataFrame形式得到結(jié)果:

返回一個(gè)已分組的DataFrame(傳入的是列表或數(shù)組)或Series(傳入的是標(biāo)量形式的單個(gè)列名):


通過字典或 Series 進(jìn)行分組


除數(shù)組以外,分組信息還可以其他形式存在

根據(jù)分組計(jì)算列的sum

mapping這個(gè)字典傳給groupby即可。

Series作為分組鍵:

這里Series可以被看做一個(gè)固定大小的映射。pandas會(huì)檢查Series以確保其索引根分組軸是對(duì)齊的。


通過函數(shù)進(jìn)行分組


任何被當(dāng)做分組鍵的函數(shù)都會(huì)在各個(gè)索引值上被調(diào)用一次,其返回值就會(huì)被用作分組名稱。

將函數(shù)根數(shù)組、列表、字典、Series混合使用(任何東西最終都會(huì)被轉(zhuǎn)換為數(shù)組):

Key_list和人名對(duì)應(yīng),再在相同長(zhǎng)度的對(duì)應(yīng)一列里選min的值。


根據(jù)索引級(jí)別分組


層次化索引數(shù)據(jù)集通過level關(guān)鍵字傳入級(jí)別編號(hào)或名稱:


數(shù)據(jù)聚合

可以使用經(jīng)過優(yōu)化的GroupBy的方法,還可以使用自己發(fā)明的聚合運(yùn)算,還可以調(diào)用分組對(duì)象上已經(jīng)定義好的任何方法,如 quantile可以計(jì)算SeriesDataFrame列的樣本分位數(shù):

GroupBy會(huì)高效地對(duì)Series進(jìn)行切片,然后對(duì)各片調(diào)用piece.quantile(0.9),最后將這些結(jié)果組裝成最終結(jié)果。

使用自己的聚合函數(shù),傳入aggregateagg方法即可:

有些方法如describe也可以用,但嚴(yán)格來講它們并非聚合運(yùn)算。


自定義聚合函數(shù)比表中的經(jīng)過優(yōu)化的函數(shù)慢得多,這是因?yàn)樵跇?gòu)造中間分組數(shù)據(jù)塊時(shí)存在非常大的開銷(函數(shù)調(diào)用、數(shù)據(jù)重排等)。


面向列的多函數(shù)應(yīng)用


根據(jù) "smoker""size" 對(duì) tips 進(jìn)行分組:

傳入一組函數(shù)或函數(shù)名,得到的DataFrame的列就會(huì)以相應(yīng)的函數(shù)命名:

傳入一個(gè)由(name, function )元組組成的列表,各元組的第一個(gè)元素會(huì)被用作DataFrame的列名:

對(duì)于DataFrame,定義一組應(yīng)用于全部列的函數(shù),或不同的列應(yīng)用不同的函數(shù)。

結(jié)果的DataFrame擁有層次化的列。相當(dāng)于分別對(duì)列["tip_pct"]和列["total_bill"]進(jìn)行聚合,然后用concat將結(jié)果組裝到一起(列名用作 keys 參數(shù))。

傳入帶有自定義名稱的元組列表:

對(duì)不同的列應(yīng)用不同的函數(shù):向agg傳入一個(gè)從列名映射到函數(shù)的字典

只有將多個(gè)函數(shù)應(yīng)用到至少一列時(shí),DataFrame才會(huì)擁有層次化的列:


以“無索引”的形式返回聚合數(shù)據(jù)


groupby傳入as_index=False,禁用功能由唯一的分組鍵組成索引:


分組級(jí)運(yùn)算和轉(zhuǎn)換

聚合只是分組運(yùn)算的其中一種,它接受能夠?qū)⒁痪S數(shù)據(jù)簡(jiǎn)化為標(biāo)量值的函數(shù)。

接下來介紹 transformapply 方法,執(zhí)行更多其他的分組運(yùn)算。

為一個(gè)DataFrame添加一個(gè)用于存放各索引分組平均值的列:先聚合再合并。

下面在GroupBy上使用transform方法:

transform會(huì)將一個(gè)函數(shù)應(yīng)用到各個(gè)分組,然后將結(jié)果放置到適當(dāng)?shù)奈恢蒙稀?/p>

從各組中減去平均值:先創(chuàng)建一個(gè)距平化函數(shù)(demeaning function),然后將其傳給transform

檢查demeaned現(xiàn)在的分組平均值是否為 0:

aggregate一樣,transform也是一個(gè)有著嚴(yán)格條件的特殊函數(shù),傳入的函數(shù)只能產(chǎn)生兩種結(jié)果,一個(gè)可以廣播的標(biāo)量值(如 np.mean) 或一個(gè)相同大小的結(jié)果數(shù)組。


apply:一般性的“拆分-應(yīng)用-合并”


最一般化的GroupBy方法是applyapply會(huì)將待處理的對(duì)象拆分成多個(gè)片段,然后對(duì)各片段調(diào)用傳入的函數(shù),最后嘗試將各片段組合到一起。

根據(jù)分組選出最高的 5 個(gè)tip_pct值:編寫一個(gè)函數(shù),在指定列找出最大值,然后把這個(gè)值所在的行選取出來。

對(duì)smoker分組并用該分組函數(shù)調(diào)用apply,得到:

top函數(shù)在DataFrame的各個(gè)片段上調(diào)用,然后結(jié)果由pandas.concat組裝到一起,并以分組名稱進(jìn)行了標(biāo)記。

最后結(jié)果就有了一個(gè)層次化索引,其內(nèi)層索引值來自原DataFrame

如果傳給apply的函數(shù)能夠接受其他參數(shù)或關(guān)鍵字,可以將這些內(nèi)容放在函數(shù)名后面一并傳入:

GroupBy對(duì)象上調(diào)用describe

GroupBy中,當(dāng)調(diào)用如describe之類的方法時(shí),實(shí)際上只是應(yīng)用了下面兩條代碼的快捷方式:

除這些基本用法之外,能否充分發(fā)揮apply的威力很大程度上取決于你的創(chuàng)造力,傳入的哪個(gè)函數(shù)能做什么全由你說了算,它只需返回一個(gè)pandas 對(duì)象標(biāo)量值即可。


禁止分組鍵


分組鍵會(huì)跟原始對(duì)象的索引共同構(gòu)成結(jié)果對(duì)象中的層次化索引,將group_keys=False傳入groupby即可禁止該效果:


分位數(shù)和桶分析


pandas有一些能根據(jù)指定面元或樣本分位數(shù)將數(shù)據(jù)拆分成多塊的工具(cut 和 qcut),將這些函數(shù)跟groupby結(jié)合起來,就能非常輕松地實(shí)現(xiàn)對(duì)數(shù)據(jù)集的桶或分位數(shù)分析了。

桶:bucket

分位數(shù):quantile


“長(zhǎng)度相等的桶”指的是“區(qū)間大小相等”,“大小相等的桶”指的是“數(shù)據(jù)點(diǎn)數(shù)量相等”。

利用cut將其裝入長(zhǎng)度相等的桶中:

cut返回的Factor對(duì)象可直接用于groupby,可以對(duì)data2做一些統(tǒng)計(jì)計(jì)算:

要根據(jù)樣本分位數(shù)得到大小相等的桶,使用qcut

傳入labels=False,即可只獲取分位數(shù)的編號(hào)。否則那段還是區(qū)間而不是編號(hào):


示例:用特定于分組的值填充缺失值


對(duì)于缺失數(shù)據(jù)的清理工作,有時(shí)用dropna將其濾除,有時(shí)則希望用一個(gè)固定值或由數(shù)據(jù)集本身所衍生出來的值去填充NA值,用fillna這個(gè)工具。

如用平均值去填充NA值

對(duì)不同的分組填充不同的值:將數(shù)據(jù)分組,并使用apply和一個(gè)能夠?qū)Ω鲾?shù)據(jù)塊調(diào)用fillna的函數(shù)即可。

用這個(gè)分組平均值去填充NA值

也可以在代碼中預(yù)定義各組的填充值,由于分組具有一個(gè)name 屬性


示例:隨機(jī)采樣和排列


從一個(gè)大數(shù)據(jù)集中隨機(jī)抽取樣本以進(jìn)行蒙特卡羅模擬(Monte Carlo simulation)或其他分析工作。抽取的方式很多,其中的一些效率會(huì)比其他的高很多

一個(gè)辦法是:選取np.random.permutation(N)的前K個(gè)元素,其中N為完整數(shù)據(jù)的大小,K為期望的樣本大小。

構(gòu)造一副撲克牌:

從整副牌中抽出 5 張:

從每種花色中隨機(jī)抽取兩張牌,由于花色是牌名的最后一個(gè)字符,可以據(jù)此進(jìn)行分組,并使用apply

另一種方法:


示例:分組加權(quán)平均數(shù)和相關(guān)系數(shù)


例如對(duì)這個(gè)數(shù)據(jù)集利用category計(jì)算分組加權(quán)平均數(shù):

來自 Yahoo! Finance 的數(shù)據(jù)集:

計(jì)算一個(gè)由日收益率(通過百分?jǐn)?shù)變化計(jì)算)與 SPX 之間的年度相關(guān)系數(shù)組成的DataFrame

計(jì)算列于列之間的相關(guān)系數(shù):(蘋果和微軟的年度相關(guān)系數(shù))


示例:面向分組的線性回歸


還是上個(gè)例子,定義下面這個(gè)regress函數(shù)(利用 statsmodels 庫(kù))對(duì)各數(shù)據(jù)塊執(zhí)行普通最小二乘法回歸(Ordinary Least Squares, OLS)。

按年計(jì)算 AAPL 對(duì) SPX 收益率的線性回歸:


透視表和交叉表

透視表(pivot table)


是各種電子表格程序和其他數(shù)據(jù)分析軟件中一種常見的數(shù)據(jù)匯總工具。它根據(jù)一個(gè)或多個(gè)鍵對(duì)數(shù)據(jù)進(jìn)行聚合,并根據(jù)行和列上的分組鍵將數(shù)據(jù)分配到各個(gè)矩形區(qū)域中。

在小費(fèi)數(shù)據(jù)集中,根據(jù)daysmoker計(jì)算分組平均數(shù)(pivot_table 的默認(rèn)聚合類型):

只想聚合tip_pctsize,并根據(jù)day進(jìn)行分組:

傳入margins=True添加分項(xiàng)小計(jì),將會(huì)添加標(biāo)簽為All的行和列,其值對(duì)應(yīng)于單個(gè)等級(jí)中所有數(shù)據(jù)的分組統(tǒng)計(jì)。

這里All值為平均數(shù)。

要使用其他的聚合函數(shù),將其傳給aggfunc即可。例如使用countlen得到有關(guān)分組大小的交叉表:

存在NA值,就設(shè)置一個(gè)fill_value


交叉表(crosstab)


是一種用于計(jì)算分組頻率的特殊透視表。

pandas.crosstab函數(shù)(pivot_table 也能實(shí)現(xiàn)該功能:根據(jù) Nationality 和 Handedness 對(duì)這段數(shù)據(jù)進(jìn)行匯總):

crosstab的前兩個(gè)參數(shù)可以是數(shù)組、Series、數(shù)組列表:

示例:2012聯(lián)邦選舉委員會(huì)數(shù)據(jù)庫(kù)

加載數(shù)據(jù)

抽取有關(guān)贊助人和贊助模式的統(tǒng)計(jì)信息。

通過unique,可以獲取全部的候選人名單:

利用字典說明黨派關(guān)系:

通過這個(gè)映射以及 Series對(duì)象的map方法,可以根據(jù)候選人姓名得到一組黨派信息:

注意,該數(shù)據(jù)集既包括贊助也包括退款(負(fù)的出資額),為了簡(jiǎn)化分析過程,限定該數(shù)據(jù)集只能有正的出資額:

由于 Barack Obama 和 Mitt Romney 是最主要的兩名候選人,專門準(zhǔn)備了一個(gè)子集,只包含針對(duì)他們兩人的競(jìng)選活動(dòng)的贊助信息:

根據(jù)職業(yè)和雇主統(tǒng)計(jì)贊助信息

首先,根據(jù)職業(yè)計(jì)算出資總額:

這里只列出了前10個(gè),注意到 許多職業(yè)都涉及相同的基本工作類型或同一樣?xùn)|西有多種變體,清理一些這樣的數(shù)據(jù):將一個(gè)職業(yè)信息映射到另一個(gè)。

對(duì)雇主信息也進(jìn)行了同樣的處理。

這里利用了dict.get,它允許沒有映射關(guān)系的職業(yè)也能“通過”。

現(xiàn)在,可以通過pivot_table根據(jù)黨派和職業(yè)對(duì)數(shù)據(jù)進(jìn)行聚合,然后過濾掉總出資額不足 200 萬美元對(duì)數(shù)據(jù):

做成柱狀圖:

對(duì) Obama 和 Romney 總出資額最高的職業(yè)和企業(yè):先對(duì)候選人進(jìn)行分組,然后求取最大值:

對(duì)出資額分組

利用cut函數(shù)根據(jù)出資額的大小將數(shù)據(jù)離散化到多個(gè)面元中:

根據(jù)候選人姓名以及面元標(biāo)簽對(duì)數(shù)據(jù)進(jìn)行分組:

對(duì)出資額求和并在面元內(nèi)規(guī)格化,以便圖形化顯示兩位候選人各種贊助額度的比例:

根據(jù)州統(tǒng)計(jì)贊助信息

首先,根據(jù)候選人和州對(duì)數(shù)據(jù)進(jìn)行聚合:

對(duì)各行除以總贊助額,就得到各候選人在各州的總贊助額比例:


不足之處,歡迎指正。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/44765.html

相關(guān)文章

  • 數(shù)據(jù)學(xué)系統(tǒng)學(xué)習(xí)Python # 數(shù)據(jù)分析基本操作[二] pandas

    摘要:中面向行和面向列的操作基本是平衡的。用層次化索引,將其表示為更高維度的數(shù)據(jù)。使用浮點(diǎn)值表示浮點(diǎn)和非浮點(diǎn)數(shù)組中的缺失數(shù)據(jù)。索引的的格式化輸出形式選取數(shù)據(jù)子集在內(nèi)層中進(jìn)行選取層次化索引在數(shù)據(jù)重塑和基于分組的操作中很重要。 我們?cè)谏弦黄榻B了 NumPy,本篇介紹 pandas。 pandas入門 Pandas 是基于Numpy構(gòu)建的,讓以NumPy為中心的應(yīng)用變的更加簡(jiǎn)單。 pandas...

    jayzou 評(píng)論0 收藏0
  • 數(shù)據(jù)學(xué)系統(tǒng)學(xué)習(xí)Python # 數(shù)據(jù)分析基本操作[一] numpy

    摘要:提供了使我們能夠快速便捷地處理結(jié)構(gòu)化數(shù)據(jù)的大量數(shù)據(jù)結(jié)構(gòu)和函數(shù)。結(jié)構(gòu)化數(shù)據(jù),例如多維數(shù)據(jù)矩陣表格行數(shù)據(jù),其中各列可能是不同的類型字符串?dāng)?shù)值日期等?;A(chǔ)數(shù)組和矢量計(jì)算高性能科學(xué)計(jì)算和數(shù)據(jù)分析的基礎(chǔ)包。 本篇內(nèi)容為整理《利用Python進(jìn)行數(shù)據(jù)分析》,博主使用代碼為 Python3,部分內(nèi)容和書本有出入。 利用 Python 進(jìn)行科學(xué)計(jì)算的實(shí)用指南。本書重點(diǎn)介紹了用于高效解決各種數(shù)據(jù)分析問...

    wushuiyong 評(píng)論0 收藏0
  • 數(shù)據(jù)學(xué)系統(tǒng)學(xué)習(xí)Python # 數(shù)據(jù)分析基本操作[三] matplotlib

    摘要:有一些表示常見圖形的對(duì)象稱為塊,完整的集合位于。中的繪圖函數(shù)在中,有行標(biāo)簽列標(biāo)簽分組信息。密度圖通過計(jì)算可能會(huì)產(chǎn)生觀測(cè)數(shù)據(jù)的連續(xù)概率分布的估計(jì)而產(chǎn)生的。在探索式數(shù)據(jù)分析工作中,同時(shí)觀察一組變量的散布圖是很有意義的。 我們?cè)谏弦黄榻B了 pandas,本篇介紹 matplotlib。 繪圖和可視化 一個(gè)用于創(chuàng)建出版質(zhì)量圖表的桌面繪圖包。 Matplotlib API入門 Figure ...

    BDEEFE 評(píng)論0 收藏0
  • 新書《全棧數(shù)據(jù)之門》完整目錄

    摘要:全棧數(shù)據(jù)之門前言自強(qiáng)不息,厚德載物,自由之光,你是我的眼基礎(chǔ),從零開始之門文件操作權(quán)限管理軟件安裝實(shí)戰(zhàn)經(jīng)驗(yàn)與,文本處理文本工具的使用家族的使用綜合案例數(shù)據(jù)工程,必備分析文件探索內(nèi)容探索交差并補(bǔ)其他常用的命令批量操作結(jié)語快捷鍵,之門提高效率光 showImg(https://segmentfault.com/img/bVK0aK?w=350&h=350); 全棧數(shù)據(jù)之門 前言 自強(qiáng)不息,...

    yibinnn 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<