百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

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

bigegpt 2024-09-10 11:16 5 浏览

承接上面内容,本部分将剩余函数介绍完整。

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

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

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重命名为
CUTdiamonds >> 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 窗口函数
窗口函数,是对某列操作,返回长度相同的一列,主要包括排名函数、偏移函数、累计聚合函数。

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_rankdiamonds %>% select(price) %>% mutate(price_mrank = min_rank(price)) %>% head(6)?#新增一列排序,dense_rankdiamonds %>% 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包中的数据处理函数,几乎满足数据预处理中筛选变量、衍生变量以及计算一些统计量的需求。

相关推荐

Go语言泛型-泛型约束与实践(go1.7泛型)

来源:械说在Go语言中,Go泛型-泛型约束与实践部分主要探讨如何定义和使用泛型约束(Constraints),以及如何在实际开发中利用泛型进行更灵活的编程。以下是详细内容:一、什么是泛型约束?**泛型...

golang总结(golang实战教程)

基础部分Go语言有哪些优势?1简单易学:语法简洁,减少了代码的冗余。高效并发:内置强大的goroutine和channel,使并发编程更加高效且易于管理。内存管理:拥有自动垃圾回收机制,减少内...

Go 官宣:新版 Protobuf API(go pro版本)

原文作者:JoeTsai,DamienNeil和HerbieOng原文链接:https://blog.golang.org/a-new-go-api-for-protocol-buffer...

Golang开发的一些注意事项(一)(golang入门项目)

1.channel关闭后读的问题当channel关闭之后再去读取它,虽然不会引发panic,但会直接得到零值,而且ok的值为false。packagemainimport"...

golang 托盘菜单应用及打开系统默认浏览器

之前看到一个应用,用go语言编写,说是某某程序的windows图形化客户端,体验一下发现只是一个托盘,然后托盘菜单的控制面板功能直接打开本地浏览器访问程序启动的webserver网页完成gui相关功...

golang标准库每日一库之 io/ioutil

一、核心函数概览函数作用描述替代方案(Go1.16+)ioutil.ReadFile(filename)一次性读取整个文件内容(返回[]byte)os.ReadFileioutil.WriteFi...

文件类型更改器——GoLang 中的 CLI 工具

我是如何为一项琐碎的工作任务创建一个简单的工具的,你也可以上周我开始玩GoLang,它是一种由Google制作的类C编译语言,非常轻量和快速,事实上它经常在Techempower的基准测...

Go (Golang) 中的 Channels 简介(golang channel长度和容量)

这篇文章重点介绍Channels(通道)在Go中的工作方式,以及如何在代码中使用它们。在Go中,Channels是一种编程结构,它允许我们在代码的不同部分之间移动数据,通常来自不同的goro...

Golang引入泛型:Go将Interface「」替换为“Any”

现在Go将拥有泛型:Go将Interface{}替换为“Any”,这是一个类型别名:typeany=interface{}这会引入了泛型作好准备,实际上,带有泛型的Go1.18Beta...

一文带你看懂Golang最新特性(golang2.0特性)

作者:腾讯PCG代码委员会经过十余年的迭代,Go语言逐渐成为云计算时代主流的编程语言。下到云计算基础设施,上到微服务,越来越多的流行产品使用Go语言编写。可见其影响力已经非常强大。一、Go语言发展历史...

Go 每日一库之 java 转 go 遇到 Apollo?让 agollo 来平滑迁移

以下文章来源于GoOfficialBlog,作者GoOfficialBlogIntroductionagollo是Apollo的Golang客户端Apollo(阿波罗)是携程框架部门研...

Golang使用grpc详解(golang gcc)

gRPC是Google开源的一种高性能、跨语言的远程过程调用(RPC)框架,它使用ProtocolBuffers作为序列化工具,支持多种编程语言,如C++,Java,Python,Go等。gR...

Etcd服务注册与发现封装实现--golang

服务注册register.gopackageregisterimport("fmt""time"etcd3"github.com/cor...

Golang:将日志以Json格式输出到Kafka

在上一篇文章中我实现了一个支持Debug、Info、Error等多个级别的日志库,并将日志写到了磁盘文件中,代码比较简单,适合练手。有兴趣的可以通过这个链接前往:https://github.com/...

如何从 PHP 过渡到 Golang?(php转golang)

我是PHP开发者,转Go两个月了吧,记录一下使用Golang怎么一步步开发新项目。本着有坑填坑,有错改错的宗旨,从零开始,开始学习。因为我司没有专门的Golang大牛,所以我也只能一步步自己去...