京公网安备 11010802034615号
经营许可证编号:京B2-20210330
使用R并行方式对数值型数据离散化
数据的特征按照其取值可以分为连续型和离散型。离散数值属性在数据挖掘的过程中具有重要的作用。比如在信用卡评分模型中,当自变量很多时,并非所有字段对于目标字段来说都是有效的,因此通常的做法是通过计算woe值和iv值(类似于信息增益)来初步挑选通过对目标变量重要的字段,然后建模逻辑回归模型。而这当中就需要对数值型数据离散化。
数值型数据离散化通常分为有监督离散化和无监督离散化。考虑到数据建模通常是建立目标字段和其影响因素之间的关系的量化,因此会选择有监督离散化。
R语言中用于数值型数据离散化的包discretization。安装和加载如下:
>install.packages("discretization") >library(discretization)
以R自带数据集iris为例,以”Species” 为目标字段,对”Sepal.Length”、”Sepal.Width”、”Petal.Length” 、”Petal.Width” 四个数值型属性离散化。
>lisan_result <- mdlp(iris)
>class(lisan_result)
[1] “list”
>names(lisan_result)
[1] “cutp” “Disc.data”使用mdlp()方法对iris离散化,该方法默认数据框最后一列最后为目标字段。返回结果为列表。”cutp”为各列的分割点向量。”Disc.data”为离散化后的数据框。
该方法对于较小的样本量和维度时,程序运行时间还可以接受。但随着数据量的增大,数据维度的增加,程序运行时间会越来越长。因此考虑采用并行的方式对数据进行离散化。介绍R用于离散化的包parallel。
>install.packages(“parallel”)
>library(parallel)
>cores <- detectCores() ##查看本机虚拟核心数
> cores
[1] 4现在考虑以并行的方式实现离散化方法。考虑设计思路如下:
1.将字段10个为一组分别与目标字段组合成数据框,(不足10个时以实际数量字段与目标字段组合)存放在一个列表中。列表的元素即离散字段与目标字段构成的数据框。
2.启动M个附属进程,并初始化。M<=本机虚拟核心数。使用parLapply()作用于步骤1中建立的列表数据。此时既有M个附属进程对数据进行离散化。
3.将步骤2中的离散化结果合并。
4.将上述步骤封装成函数。整理后使得返回结果与mdlp()函数一致。这样方便调用。
将上述设计思路写成R代码,如下:输入离散数据、使用核心数,返回结果与使用mdlp()函数相同
parallel_lisan <- function(lisan_data,cores_num){
library(parallel)
library(discretization
res <- list()
lisan_data_v <- list()
cut_point <- list()
Disc.data <- data.frame(c(rep(NA,nrow(lisan_data))))name_num = ncol(lisan_data)-1 ##将原始数据分割成多列,先考虑每组10列。不足的单独分为一组。
group_num = floor(name_num/10)
last_group_num = name_num%%10
if( name_num > 10{ ##当原始数据列数多余10列
for(i in 1:group_num){
lw_flag <- lisan_data[,ncol(lisan_data)]
lisan_data_v[[i]] <- cbind(lisan_data[,(10*i-9):> (10*i)],lw_flag)
}
lisan_data_v[[group_num+1]] <- lisan_data[, (10*group_num+1):ncol(lisan_data)]
}else{
lisan_data_v[[group_num+1]] <- lisan_data[,(10*group_num+1):ncol(lisan_data)]
}
cl <- makeCluster(cores_num) ##初始化核心
results <- parLapply(cl,lisan_data_v,mdlp) ##对列表数据使用mdlp函数并行离散化
for(i in 1:length(results)){
for(j in 1:length(results[[i]][[1]])){
cut_point[[(i-1)*10+j]] <- results[[i]][[1]][[j]]
}
temp <- as.data.frame(results[[i]][[2]])
Disc.data <- cbind(Disc.data,temp[,1:(ncol(temp)-1)]) ##合并离散数据结果
}
Disc.data <- Disc.data[,2:ncol(Disc.data)]
Disc.data$lw_flag <- lisan_data[,ncol(lisan_data)]
names(Disc.data) <- names(lisan_data)
stopCluster(cl)
res[[“cutp”]] <- cut_point
res[[“Disc.data”]] <- Disc.data
return(res)
}
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
CDA数据分析师 出品 作者:李诗怡 定义: 用户增长核心分析框架,刻画用户从接触产品到自发推荐的全生命周期,五个递进环节构建 ...
2026-09-15在数字化营销与精细化用户运营时代,企业传统的广撒网式营销模式成本高、转化率低,已无法适配精准商业竞争需求。客户画像作为大 ...
2026-09-15 很多数据分析师精通描述性统计,能熟练计算均值、中位数、标准差,但当被问到“用500个样本如何推断10万用户的真实满意度” ...
2026-09-15在MySQL数据库数据查询与数据分析中,GROUP BY与ORDER BY是使用频率极高的核心关键字。二者语法结构相似,常搭配使用,但核心功 ...
2026-09-14随着数字化治理、智慧运营、数字孪生技术的普及,数字体征成为衡量业务状态、系统运行、城市治理与企业经营健康度的核心体系。数 ...
2026-09-14 很多数据分析师沉迷于复杂的模型和算法,却忽略了数据分析的一项基础能力——描述性统计。事实上,大量商业分析问题,用描述 ...
2026-09-14在MySQL数据库运维与开发实践中,经常出现一种典型现象:数据库实际存储的数据量很小,数据表条数少、文件体积低,但服务器整体 ...
2026-09-11 很多数据分析师能熟练计算均值、标准差,但当被问到“总体和样本有什么区别”“参数和统计量有什么关系”“数据级别的高低如 ...
2026-09-11CDA数据分析师 出品 作者:李诗怡 定义: 将同一时间段内因具备相同属性或共同经历的用户划分为群体,分析其留存与生命周期价值 ...
2026-09-11在零售、商超、餐饮、线下门店等实体商业运营中,客流与销售额是衡量门店经营状态的两大核心指标。销售额是门店经营的最终结果, ...
2026-09-10在数据可视化体系中,柱形图是最基础、应用最广泛的图表类型,其中**累计柱形图(堆积柱状图)**是兼顾整体总量与内部结构的核心 ...
2026-09-10 许多数据分析师精通Excel函数和SQL查询,但当面对一张上万行的销售明细表,要快速回答“哪个地区销量最高”“哪款产品增长最 ...
2026-09-10在Python Pandas数据分析中,DataFrame是承载结构化数据的核心载体,数据清洗、数据修正、条件赋值、字段更新等实操场景,都离不 ...
2026-09-09 很多数据分析师掌握了Excel函数、会写SQL查询,但当被问到“数据从哪里来”“数据加工有哪些步骤”“如何使用分析工具连接数 ...
2026-09-09卡方检验(Chi-Square Test)是统计学中针对分类数据的经典显著性检验方法,核心用于判断两个离散分类变量是否相互独立、数据实 ...
2026-09-09CDA数据分析师 出品 作者:李诗怡 1. 销售漏斗阶段判断 题目:销售漏斗模型中,通过广告、社交媒体等方式触达品牌信息(如浏览品 ...
2026-09-07在Python数据分析中,Pandas库的DataFrame是最核心、最常用的结构化数据表对象,类似于Excel的二维表格,具备规整的行列结构、字 ...
2026-09-07在数据分析、经营复盘、业绩预测与经济统计工作中,平均增速(平均增长率)是衡量数据长期变化趋势、业务发展快慢的核心指标。不 ...
2026-09-07 很多数据分析师精通Excel单元格操作,但当被问到“表结构数据的基本处理单位是什么”“字段和记录的本质区别”“为什么表结 ...
2026-09-07随着大数据技术的快速发展,商业竞争逐步从传统的经验式经营转变为数据驱动的精细化运营。海量的用户行为数据、交易数据、运营数 ...
2026-09-04