电竞比分网-中国电竞赛事及体育赛事平台

分享

用Python做數(shù)據(jù)分析,這些基本數(shù)據(jù)分析技術(shù)你知道嗎?贈(zèng)學(xué)習(xí)資料

 東西二王 2019-05-11

為了便于分析,我們將使用Python中的panda庫(kù)。因此,如果您還沒有安裝這個(gè)庫(kù),請(qǐng)?jiān)诿钐崾痉惺褂靡韵麓a之一來(lái)安裝panda:

# If you use Anaconda, type the following in anaconda prompt conda install -c anaconda pandas # If you use pip, type the following in command prompt pip install pandas

此外,我假定您已經(jīng)對(duì)Python和pandas庫(kù)有了基本的了解。但是不用擔(dān)心,如果你還沒有接觸到上面的任何一個(gè),我們將從頭到尾進(jìn)行詳細(xì)介紹。

用Python做數(shù)據(jù)分析,這些基本數(shù)據(jù)分析技術(shù)你知道嗎?贈(zèng)學(xué)習(xí)資料

我們的數(shù)據(jù)集

為了能夠使用上述技術(shù),我們需要數(shù)據(jù)。我們可以導(dǎo)入csv文件或excel文件,但現(xiàn)在我們只需要用pandas簡(jiǎn)單地創(chuàng)建一個(gè)小數(shù)據(jù)集。

以下代碼將生成一個(gè)pandas數(shù)據(jù)框。

import pandas as pd
df = pd.DataFrame({'ID': ['A1', 'A1', 'B1', 'B1', 'C1', 'C1', 'D1', 'D1'],
 'Value': [100, 120, 90, 80, 140, 30, 60, 210],
 'Date': pd.date_range('20190407', periods=8)})

這里顯示以下數(shù)據(jù)框。

用Python做數(shù)據(jù)分析,這些基本數(shù)據(jù)分析技術(shù)你知道嗎?贈(zèng)學(xué)習(xí)資料

如上所述,你可以看到ID,Value和Date。

1 基本的過(guò)濾

我們已經(jīng)加載了pandas庫(kù)和創(chuàng)建了數(shù)據(jù)集,我們開始第一個(gè)技術(shù)。當(dāng)你想基于列的值獲得數(shù)據(jù)的子集時(shí),我們?cè)谡務(wù)撨^(guò)濾數(shù)據(jù)。

在pandas我們有多種方式做這個(gè)事情,現(xiàn)在我們看一下最常用的方式。

  1. 用[]的布爾索引

  2. 用.loc的布爾索引

用[]過(guò)濾數(shù)據(jù)如下

# Boolean indexing with square brackets df[df['Value'] > 100]

在pandas中的過(guò)濾邏輯是將條件傳遞給方括號(hào)之間的DataFrame.

df[condition]

給我們輸出如下結(jié)果

用Python做數(shù)據(jù)分析,這些基本數(shù)據(jù)分析技術(shù)你知道嗎?贈(zèng)學(xué)習(xí)資料

用.loc過(guò)濾

# Boolean indexing with .loc df.loc[df['Value'] > 100]

正如所料,它給出了相同的輸出,因?yàn)槲覀儜?yīng)用了相同的過(guò)濾器。

用Python做數(shù)據(jù)分析,這些基本數(shù)據(jù)分析技術(shù)你知道嗎?贈(zèng)學(xué)習(xí)資料

哪個(gè)更適合使用?對(duì)于基本過(guò)濾器,正如我們上面看到的,沒有區(qū)別或首選項(xiàng),這取決于您更喜歡哪種代碼語(yǔ)法。但是,當(dāng)您想應(yīng)用更高級(jí)的數(shù)據(jù)選擇時(shí),.loc提供了這一功能,并且可以執(zhí)行更復(fù)雜的選擇和切片。但現(xiàn)在不用擔(dān)心。

2 基于條件過(guò)濾

我們使用了第一個(gè)過(guò)濾器,非常直接。但是假設(shè)你想應(yīng)用一個(gè)有多個(gè)條件的過(guò)濾器。我們?nèi)绾卧趐andas做到這一點(diǎn)?為此,我們研究了Python操作符。

2.1 &操作符

例如,您希望過(guò)濾ID等于C1且值大于100的所有行。

要應(yīng)用這個(gè)過(guò)濾器,我們必須用&運(yùn)算符連接兩個(gè)條件。這看起來(lái)像這樣:

# Filtering with multiple conditions '&' operator
df[(df['ID'] == 'C1') & (df['Value'] > 100)]

并將返回以下輸出:

用Python做數(shù)據(jù)分析,這些基本數(shù)據(jù)分析技術(shù)你知道嗎?贈(zèng)學(xué)習(xí)資料

正如預(yù)期的那樣,我們返回一行,因?yàn)橹挥羞@一行滿足我們?cè)谶^(guò)濾器中設(shè)置的條件。

2.2 |操作符

Python中的|操作符代表or,如果滿足其中一個(gè)條件,則返回True。

我們可以通過(guò)應(yīng)用以下過(guò)濾器來(lái)顯示這一點(diǎn):給出日期晚于2019-04-10或值大于100的所有行。

在Python代碼中,它看起來(lái)像這樣:

# Filtering with multiple conditions 'or' operator condition = (df['Date'] > '2019-04-10') | (df['Value'] > 100) df[condition]

并將返回以下輸出:

用Python做數(shù)據(jù)分析,這些基本數(shù)據(jù)分析技術(shù)你知道嗎?贈(zèng)學(xué)習(xí)資料

正如預(yù)期的那樣,返回的所有行都具有大于100的值,或者日期在2019-04-10之后。

3 聚合

有時(shí)需要聚合數(shù)據(jù),以便創(chuàng)建特定的視圖或進(jìn)行一些計(jì)算。在pandas中,我們使用groupby。

那么groupby到底是什么呢?如果我們引用pandas文檔:

我們所說(shuō)的“分組”是指涉及下列一項(xiàng)或多項(xiàng)步驟的程序:

根據(jù)一些標(biāo)準(zhǔn)將數(shù)據(jù)分成若干組。

獨(dú)立地對(duì)每個(gè)組應(yīng)用一個(gè)函數(shù)。

將結(jié)果組合成數(shù)據(jù)結(jié)構(gòu)。

基本上,它是根據(jù)一些指標(biāo),將數(shù)據(jù)分組,讓你自己對(duì)這些組做一些操作。

3.1 Groupby 獲得總和

讓我們看一個(gè)例子。假設(shè)我們想要基于ID得到每個(gè)組的value的總值。這就像下面的Python代碼:

# Get the total value of each group based on ID
df.groupby('ID', as_index=False)['Value'].sum()

將為我們提供以下結(jié)果

用Python做數(shù)據(jù)分析,這些基本數(shù)據(jù)分析技術(shù)你知道嗎?贈(zèng)學(xué)習(xí)資料

所以如果我們?cè)倏纯次覀兊腄ataFrame,我們可以看到這是正確的:

用Python做數(shù)據(jù)分析,這些基本數(shù)據(jù)分析技術(shù)你知道嗎?贈(zèng)學(xué)習(xí)資料

例如ID A1的總value是100 120 = 220,這是正確的。

Groupby:獲得最大日期

pandas提供了一個(gè)大范圍的函數(shù),您可以在使用groupby之后對(duì)您的組使用這些函數(shù)。讓我們?cè)倏匆粋€(gè)。例如,我們可以使用.max()函數(shù)獲得每個(gè)組的最大日期。

就像這樣

# Get the highest date of each group df.groupby('ID', as_index=False)['Date'].max()

輸出結(jié)果如下:

用Python做數(shù)據(jù)分析,這些基本數(shù)據(jù)分析技術(shù)你知道嗎?贈(zèng)學(xué)習(xí)資料

4 連接

連接是基于一個(gè)公共列以并排的方式組合兩個(gè)數(shù)據(jù)框。大多數(shù)情況這些列被當(dāng)做主鍵列。

join這個(gè)術(shù)語(yǔ)起源于數(shù)據(jù)庫(kù)語(yǔ)言SQL,之所以需要它,是因?yàn)镾QL數(shù)據(jù)庫(kù)的數(shù)據(jù)建模大多是通過(guò)關(guān)系建模來(lái)完成的。

連接有很多類型,您的輸出將基于執(zhí)行的連接類型。由于這是一個(gè)入門教程,我們將介紹最常見的一個(gè):inner join。在本系列后面的部分中,我們將研究更復(fù)雜的連接。

內(nèi)部連接來(lái)自韋恩圖表示兩個(gè)集合的交集部分。因此,當(dāng)我們將其轉(zhuǎn)換為數(shù)據(jù)時(shí),內(nèi)部連接將返回兩個(gè)數(shù)據(jù)框中都存在的行。

用Python做數(shù)據(jù)分析,這些基本數(shù)據(jù)分析技術(shù)你知道嗎?贈(zèng)學(xué)習(xí)資料

4.1 我們的數(shù)據(jù)集

因?yàn)槲覀兿牒喜蓚€(gè)數(shù)據(jù)框,所以我們將創(chuàng)建新的數(shù)據(jù)。這兩個(gè)虛構(gòu)的數(shù)據(jù)集表示customer主表和orders表。

使用下面的代碼,我們創(chuàng)建了兩個(gè)新的數(shù)據(jù)框:

# Dataset 1 - Customer Table
dfA = pd.DataFrame({'Customer_ID':[1, 2, 3, 4, 5],
 'Name': ['GitHub', 'Medium', 'Towardsdatascience', 'Google', 'Microsoft'],
 'City': ['New York', 'Washington', 'Los Angeles', 'San Francisco', 'San Francisco']})
# Dataset 2 - Orders 
dfB = pd.DataFrame({'Order_ID': [1, 2, 3, 4, 5, 6, 7],
 'Order_date': pd.date_range('20190401', periods=7),
 'Amount':[440, 238, 346, 637, 129, 304, 892],
 'Customer_ID':[4, 3, 4, 1, 2, 5, 5]})

它們看起來(lái)像這樣:

用Python做數(shù)據(jù)分析,這些基本數(shù)據(jù)分析技術(shù)你知道嗎?贈(zèng)學(xué)習(xí)資料

用Python做數(shù)據(jù)分析,這些基本數(shù)據(jù)分析技術(shù)你知道嗎?贈(zèng)學(xué)習(xí)資料

因此,我們要對(duì)新數(shù)據(jù)進(jìn)行邏輯分析,得到orders表中每個(gè)訂單表的客戶名稱和城市。這是一個(gè)典型的連接問(wèn)題,按行匹配兩個(gè)dataframes,并用更多的列充實(shí)數(shù)據(jù)。在本例中,鍵列是Customer_ID。

在pandas中,我們使用merge方法進(jìn)行連接。我們將把以下參數(shù)傳遞給這個(gè)方法:

  • 您想加入哪個(gè)數(shù)據(jù)框(dfA、dfB)。

  • 關(guān)鍵列是什么(Customer_ID)。

  • 您希望執(zhí)行哪種類型的連接(內(nèi)部連接)。

在merge方法中,我們可以使用的參數(shù)比上面列出的更多,但目前這些參數(shù)已經(jīng)足夠了。

我們想要執(zhí)行的合并在pandas中看起來(lái)如下:

pd.merge(left=dfB, right=dfA, on='Customer_ID', how='inner' )

正如我們所期望的,name和city列被添加到每個(gè)對(duì)應(yīng)的customer_ID旁邊。

用Python做數(shù)據(jù)分析,這些基本數(shù)據(jù)分析技術(shù)你知道嗎?贈(zèng)學(xué)習(xí)資料

以上就是本部分的內(nèi)容:使用Python,每個(gè)數(shù)據(jù)分析師都應(yīng)該知道的基本數(shù)據(jù)分析技術(shù)。

最后檸檬為大家準(zhǔn)備了一些python的學(xué)習(xí)教程分享,希望可以幫助到大家。

用Python做數(shù)據(jù)分析,這些基本數(shù)據(jù)分析技術(shù)你知道嗎?贈(zèng)學(xué)習(xí)資料

獲取方式:請(qǐng)大家轉(zhuǎn)發(fā) 關(guān)注并私信小編關(guān)鍵詞:“資料”即可獲取。

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

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多