R&Python Data Science 系列:數據處理(3)

  • 2019 年 11 月 10 日
  • 筆記

承接上面內容,本部分將剩餘函數介紹完整。

R&Python Data Science 系列:數據處理(2)

R&Python Data Science 系列:數據處理(1)

1 重塑函數

這裡只介紹arrange()和rename()兩個函數。

1.1 arrange函數

排序函數,按照某(幾)個指定的列按照升(降)序排列重新排列數據集,參數ascending = False,降序排列,ascending = True,升序排列;

Python實現

from dfply import *  import numpy as np  import pandas as pd  ###按照price升序排列  diamonds >> arrange(X.price, ascending = True) >> head(4)
###按照price降序排列  diamonds >> arrange(X.price, ascending = False) >> head(4)

R實現

library(tidyverse)  library(ggplot2)  library(dplyr)  ##按照price升序排列  diamonds %>% arrange(price) %>% head(4)    ##按照price降序排列  diamonds %>% arrange(desc(price)) %>% head(4)

注意:Python排列順序使用參數ascending控制;R語言中使用desc函數;

1.2 rename函數

重命名函數,Python和R語言中使用方法相同,new_name = old_name:

Python實現

###將cut重命名為CUT  diamonds >> rename(CUT = X.cut) >> head(5)

R實現

###將cut重命名為CUT  diamonds %>% rename(CUT = cut) %>% head(5)

2 匯總函數

Python中匯總函數主要有summarize()和summarize_each()函數,這裡的"匯總"翻譯成概括更加合適,summarize()和summarize_each()區別在於:對某(幾)列作用幾個函數,summarize()需要幾個函數依次作用於對應的列,而summarize_each()將幾個函數以列表形式作為第一個參數,作用於後面的列:

Python實現

###計算鑽石價格price的最大值、最小值  diamonds >> summarize(price_max = X.price.max(), price_min = X.price.min()) >> head(4)
###計算x、y、z的最大值和最小值  diamonds >> summarize_each([np.max, np.min], X.x, X.y, X.z) >> head(4)

R實現

##計算鑽石價格price的最大值、最小值  diamonds %>% summarise(price_max = max(price), price_min=min(price))    ###計算鑽石x、y、z的最大值、最小值  diamonds %>% select(x, y, z) %>% summarise_all(list(min, max))

注意:R語言中沒有summarise_each(),但是summarise_all()有相同的處理方式。

3 窗口函數

窗口函數,是對某列操作,返回長度相同的一列,主要包括排名函數、偏移函數、累計聚合函數。R語言中窗口函數可以查看:

【R語言】窗口函數系列一:排名窗口函數

【R語言】窗口函數系列二:偏移窗口函數

【R語言】窗口函數系列三:聚合窗口函數

【R語言】窗口函數系列四:分佈窗口函數

3.1 排名函數

Python中排名函數主要有row_number()、min_rank()、dense_rank(),R語言也是這個3個函數,函數名都是相同的,用法也完全相同。在某種分組排序規則之後,row_number()生成一個連續不重複的編碼,min_rank()生成一個不連續的編碼,但是對相同的記錄編碼相同,而dense_rank()生成一個連續的編碼,相同記錄有相同的編碼:

Python實現

##新增一列排序,row_number  diamonds >> select(X.price) >> mutate(price_rn = row_number(X.price)) >> head(6)
#新增一列排序,min_rank  diamonds >> select(X.price) >> mutate(price_mrank = min_rank(X.price)) >> head(6)
#新增一列排序,dense_rank  diamonds >> select(X.price) >> mutate(price_drank = dense_rank(X.price)) >> head(6)

R實現

#新增一列排序,row_number  diamonds %>% select(price) %>% mutate(price_rn = row_number(price)) %>% head(6)    #新增一列排序,min_rank  diamonds %>% select(price) %>% mutate(price_mrank = min_rank(price)) %>% head(6)    #新增一列排序,dense_rank  diamonds %>% select(price) %>% mutate(price_drank = dense_rank(price)) %>% head(6)

3.2 偏移函數

兩個偏移函數lead()和lag():

lead(column,n):按照某種分組排序規則之後,向下取某列數據的第n行記錄

lag(column,n):按照某種分組排序規則之後,向上取某列數據的第n行記錄

Python實現

(diamonds >> arrange(X.price) >> select(X.price) >>  mutate(price_lead1 = lead(X.price,1), price_lead2 = lead(X.price,2),        price_lag1 = lag(X.price,1), price_lag2 = lag(X.price,2)) >>   head(5))

R實現

diamonds %>%    arrange(price) %>%    select(price) %>%      mutate(price_lead1 = lead(price,1), price_lead2 = lead(price,2),             price_lag1 = lag(price,1), price_lag2 = lag(price,2)) %>%      head(5)

3.3 累計聚合函數

累計聚合函數主要包括cumsum()、cummean()、cummax()、cummin()以及cumprod(),都是在某種排序規則下,函數作用於第一行記錄,結果記在第一行,函數作用於前兩行記錄,結果記錄在第二行,函數作用於前三行記錄,結果記錄在第三行…

Python實現

(diamonds >> select(X.price) >> head(6) >>  mutate(price_cumsum = cumsum(X.price), price_cummean = cummean(X.price),        price_cummax = cummax(X.price), price_cummin = cummin(X.price),        price_cumprod = cumprod(X.price)))

R實現

diamonds %>%    select(price) %>%    head(6) %>%    mutate(price_cumsum = cumsum(price), price_cummean = cummean(price),             price_cummax = cummax(price), price_cummin = cummin(price),             price_cumprod = cumprod(price))

4 聚合函數

聚合函數是對某一列數據,使用分組函數和排序函數進行處理之後(可以省略),使用聚合函數,返回一個值。主要有first()、last()、nth()、n()以及n_distinct():

first(column):按照某種規則分組排序後(可選),取第一行數據記錄

last(column):按照某種規則分組排序後(可選),取最後一行數據記錄

nth(column,n):按照某種規則分組排序後(可選),取第n行的記錄

n():按照某種規則分組排序後(可選),count計數,不去重

n_distinct():按照某種規則分組排序後(可選),count計數,去重

Python實現

##聚合函數  (diamonds >> head(6) >> select(X.price) >>   summarise(price_first = first(X.price), price_last = last(X.price),price_nthprice = nth(X.price,3),             price_n = n(X.price), price_disn = n_distinct(X.price)))

R實現

#聚合函數  diamonds %>%    head(6) %>%    select(price) %>%    summarise(price_first = first(price), price_last = last(price), price_nthprice = nth(price,3),              price_n = n(), price_disn = n_distinct(price))  

注意:Python中n()函數需要傳入參數,R中不需要傳入參數;Python中輸出列按照字段名稱升序排列,R中輸出的列按照書寫順序輸出。

5 總結

數據處理1-3,主要介紹了Python中dfply和R中dplyr包中的數據處理函數,幾乎滿足數據預處理中篩選變量、衍生變量以及計算一些統計量的需求。