為了便于分析,我們將使用Python中的panda庫。因此,如果您還沒有安裝這個庫,請在命令提示符中使用以下代碼之一來安裝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)對Python和pandas庫有了基本的了解。但是不用擔(dān)心,如果你還沒有接觸到上面的任何一個,我們將從頭到尾進行詳細介紹。 我們的數(shù)據(jù)集 為了能夠使用上述技術(shù),我們需要數(shù)據(jù)。我們可以導(dǎo)入csv文件或excel文件,但現(xiàn)在我們只需要用pandas簡單地創(chuàng)建一個小數(shù)據(jù)集。 以下代碼將生成一個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ù)框。 如上所述,你可以看到ID,Value和Date。 1 基本的過濾 我們已經(jīng)加載了pandas庫和創(chuàng)建了數(shù)據(jù)集,我們開始第一個技術(shù)。當(dāng)你想基于列的值獲得數(shù)據(jù)的子集時,我們在談?wù)撨^濾數(shù)據(jù)。 在pandas我們有多種方式做這個事情,現(xiàn)在我們看一下最常用的方式。
用[]過濾數(shù)據(jù)如下 # Boolean indexing with square brackets
df[df['Value'] > 100] 在pandas中的過濾邏輯是將條件傳遞給方括號之間的DataFrame. df[condition] 給我們輸出如下結(jié)果 用.loc過濾 # Boolean indexing with .loc
df.loc[df['Value'] > 100] 正如所料,它給出了相同的輸出,因為我們應(yīng)用了相同的過濾器。 哪個更適合使用?對于基本過濾器,正如我們上面看到的,沒有區(qū)別或首選項,這取決于您更喜歡哪種代碼語法。但是,當(dāng)您想應(yīng)用更高級的數(shù)據(jù)選擇時,.loc提供了這一功能,并且可以執(zhí)行更復(fù)雜的選擇和切片。但現(xiàn)在不用擔(dān)心。 2 基于條件過濾 我們使用了第一個過濾器,非常直接。但是假設(shè)你想應(yīng)用一個有多個條件的過濾器。我們?nèi)绾卧趐andas做到這一點?為此,我們研究了Python操作符。 2.1 &操作符 例如,您希望過濾ID等于C1且值大于100的所有行。 要應(yīng)用這個過濾器,我們必須用&運算符連接兩個條件。這看起來像這樣: # Filtering with multiple conditions '&' operator df[(df['ID'] == 'C1') & (df['Value'] > 100)] 并將返回以下輸出: 正如預(yù)期的那樣,我們返回一行,因為只有這一行滿足我們在過濾器中設(shè)置的條件。 2.2 |操作符 Python中的|操作符代表or,如果滿足其中一個條件,則返回True。 我們可以通過應(yīng)用以下過濾器來顯示這一點:給出日期晚于2019-04-10或值大于100的所有行。 在Python代碼中,它看起來像這樣: # Filtering with multiple conditions 'or' operator
condition = (df['Date'] > '2019-04-10') | (df['Value'] > 100)
df[condition] 并將返回以下輸出: 正如預(yù)期的那樣,返回的所有行都具有大于100的值,或者日期在2019-04-10之后。 3 聚合 有時需要聚合數(shù)據(jù),以便創(chuàng)建特定的視圖或進行一些計算。在pandas中,我們使用groupby。 那么groupby到底是什么呢?如果我們引用pandas文檔:
基本上,它是根據(jù)一些指標(biāo),將數(shù)據(jù)分組,讓你自己對這些組做一些操作。 3.1 Groupby 獲得總和 讓我們看一個例子。假設(shè)我們想要基于ID得到每個組的value的總值。這就像下面的Python代碼: # Get the total value of each group based on ID df.groupby('ID', as_index=False)['Value'].sum() 將為我們提供以下結(jié)果 所以如果我們再看看我們的DataFrame,我們可以看到這是正確的: 例如ID A1的總value是100 120 = 220,這是正確的。 Groupby:獲得最大日期 pandas提供了一個大范圍的函數(shù),您可以在使用groupby之后對您的組使用這些函數(shù)。讓我們再看一個。例如,我們可以使用.max()函數(shù)獲得每個組的最大日期。 就像這樣 # Get the highest date of each group
df.groupby('ID', as_index=False)['Date'].max() 輸出結(jié)果如下: 4 連接 連接是基于一個公共列以并排的方式組合兩個數(shù)據(jù)框。大多數(shù)情況這些列被當(dāng)做主鍵列。 join這個術(shù)語起源于數(shù)據(jù)庫語言SQL,之所以需要它,是因為SQL數(shù)據(jù)庫的數(shù)據(jù)建模大多是通過關(guān)系建模來完成的。 連接有很多類型,您的輸出將基于執(zhí)行的連接類型。由于這是一個入門教程,我們將介紹最常見的一個:inner join。在本系列后面的部分中,我們將研究更復(fù)雜的連接。 內(nèi)部連接來自韋恩圖表示兩個集合的交集部分。因此,當(dāng)我們將其轉(zhuǎn)換為數(shù)據(jù)時,內(nèi)部連接將返回兩個數(shù)據(jù)框中都存在的行。 4.1 我們的數(shù)據(jù)集 因為我們想合并兩個數(shù)據(jù)框,所以我們將創(chuàng)建新的數(shù)據(jù)。這兩個虛構(gòu)的數(shù)據(jù)集表示customer主表和orders表。 使用下面的代碼,我們創(chuàng)建了兩個新的數(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]}) 它們看起來像這樣: 因此,我們要對新數(shù)據(jù)進行邏輯分析,得到orders表中每個訂單表的客戶名稱和城市。這是一個典型的連接問題,按行匹配兩個dataframes,并用更多的列充實數(shù)據(jù)。在本例中,鍵列是Customer_ID。 在pandas中,我們使用merge方法進行連接。我們將把以下參數(shù)傳遞給這個方法:
在merge方法中,我們可以使用的參數(shù)比上面列出的更多,但目前這些參數(shù)已經(jīng)足夠了。 我們想要執(zhí)行的合并在pandas中看起來如下: pd.merge(left=dfB, right=dfA, on='Customer_ID', how='inner' ) 正如我們所期望的,name和city列被添加到每個對應(yīng)的customer_ID旁邊。 以上就是本部分的內(nèi)容:使用Python,每個數(shù)據(jù)分析師都應(yīng)該知道的基本數(shù)據(jù)分析技術(shù)。 最后檸檬為大家準(zhǔn)備了一些python的學(xué)習(xí)教程分享,希望可以幫助到大家。獲取方式:請大家轉(zhuǎn)發(fā) 關(guān)注并私信小編關(guān)鍵詞:“資料”即可獲取。 |
|