R&Python Data Science 系列:数据处理(2)

2023-05-27 0 966

​承揽R&Python Data Science 系列产品:信息处理(1)接竭尽全力如是说余下的表达式。

1 重构表达式

主要就有三个表达式,mutate()和transmute(),三个表达式在Python和R上采用方式相同,这三个表达式这类有点儿差别:mutate()表达式留存原本大部份列,接着追加两列;transmute()只留存追加的两列:

python同时实现

from dfply import * import numpy as np import pandas as pd ##追加列x+y、x*y*z,mutate()表达式 diamonds >> mutate(x_plus_y = X.x + X.y, xyz = X.x*X.y*X.z) >> head(5) ​##追加列x+y、x*y*z,transmute()表达式 diamonds >> transmute(x_plus_y = X.x + X.y, xyz = X.x*X.y*X.z) >> head(5)
R&Python Data Science 系列:数据处理(2)

R词汇同时实现

library(dplyr) library(ggplot2) library(tidyr) ##追加列x+y、x*y*z,mutate()表达式 diamonds %>% mutate(x_plus_y = x + y, xyz = x*y*z) %>% head(5) ​##追加列x+y、x*y*z,transmute()表达式 diamonds %>% transmute(x_plus_y = x + y, xyz = x*y*z) %>% head(5)
R&Python Data Science 系列:数据处理(2)

2 前提表达式

这里如是说3个前提表达式,if_else()、case_when()、between()表达式,Python包dfply和R包dplyr中都是这3个表达式,在用法上有点儿细微差别,日常中采用最多,在构建评分卡woe赋值的时候特别好用。

2.1 if_else表达式

非A即B表达式:

Python同时实现

##如果钻石价格大于2000,则钻石等级为A,其他为A- diamonds >> mutate(price_class = if_else(X.price > 2000, A, A-)) >> distinct(X.price_class)
R&Python Data Science 系列:数据处理(2)

而且if_else()表达式可以嵌套采用,不过当前提判断超过2个的时候,建议采用case_when()表达式。

##如果钻石价格大于2000,则钻石等级为A,1500-2000为A-, 1500以下为A– (diamonds >> mutate(price_class = if_else(X.price > 2000, A, if_else(X.price > 1500,A-, A–))) >> distinct(X.price_class) >>select(X.price_class))
R&Python Data Science 系列:数据处理(2)

R词汇同时实现

##如果钻石价格大于2000,则钻石等级为A,其他为A- diamonds %>% mutate(price_class = if_else(price > 2000, A, A-)) %>% distinct(price_class) ​##如果钻石价格大于2000,则钻石等级为A,1500-2000为A-, 1500以下为A– diamonds %>% mutate(price_class = if_else(price > 2000, A, if_else(price > 1500,A-, A–))) %>% distinct(price_class)
R&Python Data Science 系列:数据处理(2)

注意:python在jupyter中采用管道表达式换行书写代码的时候需要用()把代码括起来。

2.2 case_when表达式

用于多前提赋值,评分卡Woe赋值的时候采用起来很方便。

python同时实现##如果钻石价格大于2000,则钻石等级为A,1500-2000为B, 1000-1500以下为C,1000以下为D (diamonds >> mutate(price_class = case_when([X.price > 2000, A], [X.price > 1500 , B], [X.price > 1000, C], [True, D])) >> distinct(X.price_class) >>select(X.price_class))
R&Python Data Science 系列:数据处理(2)

R词汇同时实现

##如果钻石价格大于2000,则钻石等级为A,1500-2000为B, 1000-1500以下为C,1000以下为D diamonds %>% mutate(price_class = case_when(price > 2000 ~ A, price > 1500 ~ B, price > 1000 ~ C, TRUE ~ D)) %>% distinct(price_class)
R&Python Data Science 系列:数据处理(2)

注意:case_when表达式在Python和R词汇中采用的时候有点儿差别,请留意。

2.3 between表达式

区间判断前提表达式,为闭区间[a,b]

python同时实现

##如果钻石价格大于2000,则钻石等级为A,1500-2000为B, 1000-1500以下为C,1000以下为D (diamonds >> mutate(price_class = case_when([X.price > 2000, A], [between(X.price,1500,2000) , B], [between(X.price,1000,1500), C], [True, D])) >> select(X.price_class) >> distinct(X.price_class))
R&Python Data Science 系列:数据处理(2)

R词汇同时实现

##如果钻石价格大于2000,则钻石等级为A,1500-2000为B, 1000-1500以下为C,1000以下为D diamonds %>% mutate(price_class = case_when(price > 2000 ~ A, between(price,1500,2000) ~ B, between(price,1000,1500) ~ C, TRUE ~ D)) %>% distinct(price_class)
R&Python Data Science 系列:数据处理(2)

3 bind表达式

三个表达式:bind_rows()行拼接;bind_cols()列拼接:

Python同时实现

###bind_rows()表达式 diamonds2 = diamonds >> head(2) diamonds3 = diamonds >> tail(3) diamonds2 >> bind_rows(diamonds3)
R&Python Data Science 系列:数据处理(2)
##bind_cols()表达式 diamonds4 = diamonds >> select(1, X.carat, cut, -1) diamonds5 = diamonds >> select(x, y) diamonds4 >> bind_cols(diamonds5) >> head(5)
R&Python Data Science 系列:数据处理(2)

R词汇同时实现

##bind_rows()表达式 diamonds2 = diamonds %>% head(2) diamonds3 = diamonds %>% tail(3) diamonds2 %>% bind_rows(diamonds3) ​##bind_cols()表达式 diamonds4 = diamonds %>% select(1, carat, cut, dim(diamonds)[2]) diamonds5 = diamonds %>% select(x, y) diamonds4 %>% bind_cols(diamonds5) %>% head(5)
R&Python Data Science 系列:数据处理(2)

4 连接表达式

这里主要就如是说inner_join()、left_join()和rigth_join()三个表达式

Python同时实现

a = pd.DataFrame({ x1:[A,B,C], x2:[1,2,3] }) b = pd.DataFrame({ x1:[A,B,D], x3:[True,False,True]})##inner_join表达式 a >> inner_join(b, by=x1)
R&Python Data Science 系列:数据处理(2)
##left_join函数 a >> left_join(b, by=x1)
R&Python Data Science 系列:数据处理(2)
##right_join表达式 a >> right_join(b, by=x1)
R&Python Data Science 系列:数据处理(2)

R词汇同时实现

a = data.frame(x1 = c(A, B, C), B = c(1, 2, 3)) b = data.frame(x1 = c(A, B, D), D = c(TRUE, FALSE, TRUE)) ​##inner_join表达式 a %>% inner_join(b, by = x1) ##或者inner_join(a, b, by = x1) ##left_join表达式 a %>% left_join(b, by = x1) ##或者left_join(a, b, by = x1) ##right_join表达式 a %>% right_join(b, by = x1) ##或者rigth_join(a, b, by = x1)
R&Python Data Science 系列:数据处理(2)

注意:R词汇中可以采用XXX_join(a,b,by),Python中不可以采用。

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务