sql 中位数_大量数据(1600万条)的分组分位数(极大值 90分位 75分位 中位数)...

本文讲述了在MySQL数据库中由于缺少内置中位数函数,如何使用R语言处理1600万条数据的分组分位数计算,包括75分位数、95分位数和最大值。通过`read.csv`导入数据,利用R的`tapply`和`quantile`函数计算分位数,以及`sqldf`包执行SQL查询最大值,最终高效解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近工作中需要处理一个实际的问题:

找出几类产品(实际上一共是10类),历史上所有日销量的极大值还有各种分位数。

处理好的表字段只有两个:产品类型,日销量。共1600万条。

本来很简单,想着用sql做个分组,公式聚合一下就完事了。估摸着10分钟肯定能搞定。

只可惜,公司用的mysql库,并没有内置中位数函数median()。

那怎么办呢?

导出来用excel吧,之前100万条数据的时候,我就分产品导出来,然后用excel搞10次。对,就是这么效率低下。胜在不用在mysql里写复杂的sql逻辑,半个小时搞定了。

可是现在,1600万条呀。excel承载不了这么大的重任,分分钟撂挑子。不,它连打开都不能。

194M的CSV。

110522d7830c9a895a28a860b591f724.png

于是,只能用好久没用的R语言了。

以下是步骤:

1、先导入数据(几秒钟搞定)

data3<-read.csv("abc0702.csv",as.is = TRUE, encoding = 'UTF-8')

不加encoding = 'UTF-8'中文会乱码。

原始数据大概长这样:

492a4474207dbc74e68cdf4e6d2c52f0.png

2、写个公式,算各种分位数(方法百度来的,复制粘贴,五分钟搞定。)

a <-data3[,1]

b <-data3[,2]

pf <- factor(b)

######75

qt75<-function(x){

quantile(x,0.75)

}

tapply(a,pf,qt75)

######95

qt95<-function(x){

quantile(x,0.95)

}

tapply(a,pf,qt95)

贴在这里。1秒钟就出了结果。非常优秀了。

72967a28274b115906e3fc174ac84e02.png

3、在r语言中直接用sql算最大值

曾经的R语言在我面前朴实无华,我没有看到它的美好。今天使用了一下 sqldf,对我等分析师来说,简直如鱼得水。

代码如下:

library(sqldf)

sqldf("select cartype, max(amount) as amount_max

from data3

group by cartype")

不得不说,sql就是慢,等了估计七八秒,才出了结果。

e3cd0bc005eefb9ecfcc46f6e3305371.png

综上,我的问题都已经解决了。

本来困扰我的事情,R语言用了前后20分钟帮我搞完了,中间还包括更新了下最新版本的R。

记录下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值