第十四章 基于基站定位数据的商圈分析
14.1 背景与挖掘目标
根据手机信号在真实地理空间上的覆盖情况,将手机用户时间序列的手机定位数据,映射至现实的地理位置,即可完整、客观地还原出手机用户的现实活动轨迹,从而挖掘得到人口空间分布与活动联系特征信息。商圈划分的目的之一是研究潜在顾客的分布以制定适宜的商业对策。建模目标:
1)对用户的历史定位数据,采用数据挖掘技术,对基站进行分群;
2)对不同的商圈分群进行特征分析,比较不同商圈类别的价值,选择合适的区域进行运营商的促销活动。
14.2 分析方法与过程
1、数据抽取。从移动通信运营商提供的特定接口上解析、处理,并过滤用户属性后得到位置数据。
2、数据探索分析。结合实际情况,对某样本的运动轨迹进行描述。
3、数据预处理。对不观察的变量进行剔除,最后仅保留日期、时间、基站编号和EMASI号。
对商圈的平均量做描述性分析,并对处理后的数据进行标准化处理
setwd("F:/数据及程序/chapter14/上机实验")
Data <- read.csv("./data/business_circle.csv", header = TRUE, encoding = 'utf-8')
colnames(Data) <- c("number", "x1", "x2", "x3", "x4")
attach(Data)
y1 = (x1 - min(x1)) / (max(x1) - min(x1))
y2 = (x2 - min(x2)) / (max(x2) - min(x2))
y3 = (x3 - min(x3)) / (max(x3) - min(x3))
y4 = (x4 - min(x4)) / (max(x4) - min(x4))
standardized <- data.frame(Data[, 1], y1, y2, y3, y4)
write.csv(standardized, "./tmp/standardizedData.csv", row.names = TRUE)
4、模型构建
构建商圈聚类模型,采用层次聚类算法对数据进行聚类,画出谱系聚类图。
##谱系聚类图
# 设置工作空间
setwd("F:/数据及程序/chapter14/示例程序")
Data <- read.csv("./data/standardized.csv", header = FALSE)
# colnames(Data) <- c("x1", "x2", "x3"," x4")
attach(Data)
dist <- dist(Data, method = 'euclidean')
hc1 <- hclust(dist, "ward.D2")
plot(hc1, hang = -1)
detach(Data)
##层次聚类算法
# 设置工作空间
setwd("F:/数据及程序/chapter14/示例程序")
library(ggplot2)
Data <- read.csv("./data/standardized.csv", header = FALSE)
attach(Data)
dist <- dist(Data, method = 'euclidean')
hc1 <- hclust(dist, "ward.D2")
plot(hc1)
# 分成三类
re1 <- rect.hclust(hc1, k = 3)
a <- re1[[2]]
b <- re1[[3]]
c <- re1[[1]]
# 商圈类别1
matrix <- Data[a,]
d <- dim(matrix)
y <- as.numeric(t(matrix))
row <- factor(rep(1:d[1], each = d[2]))
x <- rep(1:d[2], times = d[1])
data <- data.frame(y = y, x = x, row = row)
ggplot(data = data, aes(x = x, y = y, group = row)) + geom_line() +
scale_x_continuous(breaks = c(1, 2, 3, 4),
labels = c("工作日人均停留时间", "凌晨人均停留时间",
"周末人均停留时间", "日均人流量")) +
labs(title = "商圈类别1", x = "", y = "")
# 商圈类别2
matrix <- Data[b, ]
d <- dim(matrix)
y <- as.numeric(t(matrix))
row <- factor(rep(1:d[1], each = d[2]))
x <- rep(1:d[2], times = d[1])
data <- data.frame(y = y, x = x, row = row)
ggplot(data = data, aes(x = x, y = y, group = row)) + geom_line() +
scale_x_continuous(breaks = c(1, 2, 3, 4),
labels = c("工作日人均停留时间", "凌晨人均停留时间",
"周末人均停留时间", "日均人流量")) +
labs(title="商圈类别2", x="", y="")
# 商圈类别3
matrix <- Data[c,]
d <- dim(matrix)
y <- as.numeric(t(matrix))
row <- factor(rep(1:d[1], each = d[2]))
x <- rep(1:d[2], times = d[1])
data <- data.frame(y = y, x = x, row = row)
ggplot(data = data, aes(x = x, y = y, group = row)) + geom_line() +
scale_x_continuous(breaks = c(1, 2, 3, 4),
labels = c("工作日人均停留时间", "凌晨人均停留时间",
"周末人均停留时间", "日均人流量")) +
labs(title = "商圈类别3", x = "", y = "")
##对聚类结果按不同类别画出4个特征的折线图
分析模型结果可以知道人们在三个商圈的停留时间。商圈1偏工作型,商圈2偏商业区,商圈3偏住宅区,所以认为商圈2有利于进行运营商的促销活动。