绘制累积分布图-R语言

最近有一个需求,要求根据数据分布情况,根据分布曲线寻找切点来进行人群特征划分,用数据来反应实际情况,而不是主观划分节点。
这次需要处理的数据量为亿级量,处理之后关键绘图数据条数为一千万条左右,这次并没有拟合分布曲线,求导,找到斜率变动最大的几个点,仅通过分布图,定义了几个坡度变动明显的几个点。

数据格式截图

绘制累积分布图-R语言_第1张图片

R代码

price_data<-read.csv("E://house//estate.csv",header=F,encoding="UTF-8",quote="")#读取数据
colnames(price_data)<-c("card","year","loc","total_price")#给列赋予名称
pdata<-table(price_data$total_price)#按价格列统计频次
pframe<-data.frame(as.numeric(names(pdata)),as.numeric(pdata))#将table类型数据转化为数据框格式
colnames(pframe)<-c("price","num")#给统计后的数据命名
rankData<-pframe[order(pframe[,1],decreasing=F),]#按价格升序排列
####计算价格频数累积值####
mulData<-data.frame()
sum=0
for(i in 1:nrow(rankData)){
    sum=sum+rankData[i,2]
    row=cbind(rankData$price[i],sum)#拼接
    mulData=rbind(mulData,row)
}#此步耗时良久,数据量决定
colnames(mulData)<-c("price","num")
finalData<-mulData[which(mulData$price>100000),]#筛选满足条件的数据
plot(finalData$price,finalData$num/sum,xaxt="n",yaxt="n",main="价格分布图",xlab="价格",ylab="累计比例")
axis(side=2,seq(from=0,to=1,by=0.1),)#设置y轴
axis(side=1,seq(from=500000,to=10000000,by=400000),)#设置x轴
grid(nx=25,ny=25)#添加方格
text(600000,0.4,"grade1",col=gray(0:10/50),cex=1)
text(900000,0.6,"grade2",col=gray(0:20/50),cex=1)
text(2000000,0.9,"grade3",col=gray(0:30/50),cex=1)
text(10000000,1,"grade4",col=gray(0:40/50),cex=1)

绘制累积分布图

绘制累积分布图-R语言_第2张图片

你可能感兴趣的:(数据,R语言,图形展现)