R语言学习笔记之聚类分析

Python011

R语言学习笔记之聚类分析,第1张

R语言学习笔记之聚类分析

使用k-means聚类所需的包:

factoextra

cluster #加载包

library(factoextra)

library(cluster)l

#数据准备

使用内置的R数据集USArrests

#load the dataset

data("USArrests")

#remove any missing value (i.e, NA values for not available)

#That might be present in the data

USArrests <- na.omit(USArrests)#view the first 6 rows of the data

head(USArrests, n=6)

在此数据集中,列是变量,行是观测值

在聚类之前我们可以先进行一些必要的数据检查即数据描述性统计,如平均值、标准差等

desc_stats <- data.frame( Min=apply(USArrests, 2, min),#minimum

Med=apply(USArrests, 2, median),#median

Mean=apply(USArrests, 2, mean),#mean

SD=apply(USArrests, 2, sd),#Standard deviation

Max=apply(USArrests, 2, max)#maximum

)

desc_stats <- round(desc_stats, 1)#保留小数点后一位head(desc_stats)

变量有很大的方差及均值时需进行标准化

df <- scale(USArrests)

#数据集群性评估

使用get_clust_tendency()计算Hopkins统计量

res <- get_clust_tendency(df, 40, graph = TRUE)

res$hopkins_stat

## [1] 0.3440875

#Visualize the dissimilarity matrix

res$plot

Hopkins统计量的值<0.5,表明数据是高度可聚合的。另外,从图中也可以看出数据可聚合。

#估计聚合簇数

由于k均值聚类需要指定要生成的聚类数量,因此我们将使用函数clusGap()来计算用于估计最优聚类数。函数fviz_gap_stat()用于可视化。

set.seed(123)

## Compute the gap statistic

gap_stat <- clusGap(df, FUN = kmeans, nstart = 25, K.max = 10, B = 500)

# Plot the result

fviz_gap_stat(gap_stat)

图中显示最佳为聚成四类(k=4)

#进行聚类

set.seed(123)

km.res <- kmeans(df, 4, nstart = 25)

head(km.res$cluster, 20)

# Visualize clusters using factoextra

fviz_cluster(km.res, USArrests)

#检查cluster silhouette图

Recall that the silhouette measures (SiSi) how similar an object ii is to the the other objects in its own cluster versus those in the neighbor cluster. SiSi values range from 1 to - 1:

A value of SiSi close to 1 indicates that the object is well clustered. In the other words, the object ii is similar to the other objects in its group.

A value of SiSi close to -1 indicates that the object is poorly clustered, and that assignment to some other cluster would probably improve the overall results.

sil <- silhouette(km.res$cluster, dist(df))

rownames(sil) <- rownames(USArrests)

head(sil[, 1:3])

#Visualize

fviz_silhouette(sil)

图中可以看出有负值,可以通过函数silhouette()确定是哪个观测值

neg_sil_index <- which(sil[, "sil_width"] <0)

sil[neg_sil_index, , drop = FALSE]

##          cluster    neighbor     sil_width

## Missouri    3          2        -0.07318144

#eclust():增强的聚类分析

与其他聚类分析包相比,eclust()有以下优点:

简化了聚类分析的工作流程

可以用于计算层次聚类和分区聚类

eclust()自动计算最佳聚类簇数。

自动提供Silhouette plot

可以结合ggplot2绘制优美的图形

#使用eclust()的K均值聚类

# Compute k-means

res.km <- eclust(df, "kmeans")

# Gap statistic plot

fviz_gap_stat(res.km$gap_stat)

# Silhouette plotfviz_silhouette(res.km)

##    cluster size ave.sil.width

## 1     1     13      0.31

## 2     2     29      0.38

## 3     3      8      0.39

#使用eclust()的层次聚类

# Enhanced hierarchical clustering

res.hc <- eclust(df, "hclust") # compute hclust

fviz_dend(res.hc, rect = TRUE) # dendrogam

#下面的R代码生成Silhouette plot和分层聚类散点图。

fviz_silhouette(res.hc) # silhouette plot

##   cluster size ave.sil.width

## 1    1     19      0.26

## 2    2     19      0.28

## 3    3     12      0.43

fviz_cluster(res.hc) # scatter plot

#Infos

This analysis has been performed using R software (R version 3.3.2)

1. 为什么要做用户研究岗位分析报告?

(1)要找工作了想了解一下行情;

(2)学习了R语言,想小试牛刀。

2. 出于什么样的目的做这份用户研究岗位分析报告?

(1)搞清楚这个时间节点什么规模、什么行业的公司对用户研究岗位需求比较旺盛;

(2)弄明白现阶段对用户研究技能的要求和工作年限的要求,明白自己需要在哪些方面做准备和提高;

(3)薪资水平心里有数,以便找工作时根据自己的情况和行情定自己的期望薪资;

(4)盘点目标城市的岗位数和公司,方便投递。

(5)理清楚R语言爬虫的逻辑,技能和工具。

(6)练习R语言数据的导入和导出,excel数据清洗,以及基本的数据分析和数据可视化。

3. 怎么做用户研究岗位分析报告?

一个实际的数据分析case需要经历:问题提出、数据采集、数据清洗、数据分析,这四个大的阶段。如果有更深层次的分析挖掘还会涉及到数据建模,模型验证评估等过程。

3.1 问题提出

  换个角度也就是目的 目的 目的, 要解决什么问题。做任何事情都要有目的,有明确的目的,有明确可行的目的。这个目的前面已经提及,在这里就不多阐述。

3.1 数据采集

网站数据:boss直聘

爬虫工具:R语言

3.3 数据清洗

人生总是有一大半的时间在为一个机会做准备,数据分析也一样,前期的数据清洗占据了80%工作量,但是只要这80%做好了,后面就会事半功倍。

3.3.1 数据的导出和导入

用R成功爬取数据,由于数据量较小,所以使用excel做最基础的数据清洗。这里必须注意,R中导出来的数据如果是CSV格式,excel打开会变成乱码,因此需要进行CSV转换。使用Mac的同学可能会在这里遇到很多问题,那就按下面这个方便快捷的方法设置一下。

http://blog.sina.com.cn/s/blog_69e225900102w2mc.html

3.3.2 数据清洗

数据分列、重编码、重复项计算等,使用函数有mid(),find(),countif()等。

3.4 数据基础分析

由于数据量比较小,所以数据基础分析都是在excel中完成的,主要用到的分析方法是交叉分析。

4. 用户研究岗位分析报告的结果

4.1 岗位需求时空分析

4.1.1 用研岗位需求的时间分布趋势

本次分析共爬取了2017年12月7日到2017年8月11日的招聘信息212条。时间分布趋势图中可以看出,17年1月份迎来一个高峰,第二个小高峰出现在3-4月份之间,这也就是我们俗称的“金三银四”,到了7、8月份招聘趋势又有所回升,并且出现了波动。对比这三个趋势,12月份对用户研究的需求最高,其次是七八月份,反而三四月份需求较低,据推测这可能是因为金三银四之后很多用人单位招到了合适的人员,随后会将岗位标为停止招聘,所以这些招聘信息不会再出现。

4.1.2 用户研究岗位需求城市分布

从获取到的数据中发现,用户研究岗位的需求主要集中在北京,其次是深圳、上海、杭州,广州和南京也有一定的需求。这是由于这些地区是互联网行业发展较为成熟的地方,互联网企业云集,因此对用户研究的需求较为旺盛。

4.2 需求企业分析

4.2.1 有用户研究岗位需求的公司规模

在所有收集到的岗位信息中,主要是已上市的公司和不需要融资的公司对用户研究岗位有较大的需求。

4.2.2 用户研究岗位行业分布

用户研究岗位在互联网行业需求最强,其次是IT软件和游戏行业。

4.3 岗位要求分析

4.3.1 岗位年限要求

从数据结果来看,3-5年工作经验最受青睐,其次是1-3年,另外还有许多公司在用户研究岗位招聘中没有具体的经验限制。

4.3.2 岗位学历要求

用人单位对用户研究岗位的学历要求基本为本科学历,仍有部分公司在JD对学历没有做要求。

4.3.3 能力要求

通过对招聘信息中的能力标签进行分析,发现除了传统的用户研究之外,数据分析能力称为用户研究岗位能力要求中较为重要的一项。

4.4 薪资分析

薪资水平一定程度上由工作年限决定,因此对工作年限和薪资水平进行交叉分析发现,3-5年经验的用户研究人员,用人单位的薪资范畴以15-20k居多,1-3年经验的薪资水平跨度较大,这是由于薪资水平还会受城市、公司规格的影响,这些因素后续将会进行分析讨论。

5. 用户研究岗位分析报告结论

(1)用户研究岗位目前的招聘需求并不是很旺盛,且主要分布在北京、深圳、上海、杭州这些互联网行业发展较好的地区为主;由于北京互联网公司较多,北京的需求要远远大于其它地区。

(2)数据显示,上市公司和互联网行业对用户研究岗位的需求更旺盛,原因在于:

a. 从行业角度来说,互联网行业捧红了用户体验的概念,在做产品的过程中对用户体验要求更高。

b. 从公司角度看,大公司产品流程和UCD团队更加体系化、成熟化,分工比较明确。

c. 大公司的产品和用户量级较大,需要有专职岗位去负责针对用户研究,更好的保证产品质量。

d. 从大公司的经济实力的角度出发,大公司有足够的经济实力去建立用户研究团队,因为用户研究从本质上来说还是属于产品的支撑部门,因此对于中小型企业来说,单独去设立这样的岗位成本较高,因此用户研究的工作多由产品经理或产品运营来承担。

e. 大公司用户体验的理念也决定着对用户研究投入产出比的权衡,很多大公司在产品打磨过程中愿意投入时间成本去进行用户研究,他们会认为好的用户研究会为产品带来更大的益处。

(3) 用户研究岗位中能力标签中数据分析能力越来越重要,这是由于随着行业的发展,数据驱动已经成为大趋势,所以对用户研究这个连接用户与产品的岗位而言不仅仅要用传统的方法和思路去研究用户,还需要分析用户行为数据、业务数据,将传统用研和产品数据结合起来发现问题,有的放矢,客观高效的解决问题。因此用户研究人员,在项目过程中需进一步提高自己数据分析能力,与业务紧密结合,更有效的发现问题,解决问题。

(4)用户研究岗位的薪资水平主要受工作年限、城市以及公司规模的影响,通过对工作年限和薪资水平的交叉分析,3-5年工作经验的用户研究人员公司一般会给出的薪资范围为15-20k。

本次分析的数据来源于boss直聘中所能收集到的2016年12月7日至2017年8月11日招聘信息,由于招聘信息实时更新,本次分析结果仅作为参考。