站酷UI设计师探索性数据分析

简介

作为自己R语言简单阶段性总结,熟悉R语言的简单操作,并将站酷网爬取到的总量30W+的数据作为样本,只对UI设计师的样本做最基础的分析和可视化操作。如果你也是R语言新手,欢迎私信我,加wechat一起成长。

 

数据参数

注:数据的更新时间是2017年11月

  1. 总数据集:站酷UI设计师 29812人
  2. 变量介绍
  • uid:用户唯一id
  • username: 用户名
  • male:性别
  • job:职业
  • z_age:站酷酷龄
  • hometown:家乡
  • livenow:现居地
  • sign:签名
  • educated:毕业院校
  • requipment:个人装备
  • person_lable:个人标签
  • stastic.hot:人气值
  • stastic.fans:粉丝数
  • stastic.score:积分
  • stastic.follow:关注
  • stastic.work_total:总作品数
  • stastic.comment_count:被评论数

探索性分析

首先我们看一下整体情况,男女比例是多少(安利一下R连接mongodb超好用的一个库mongolite)

  • 读取数据库,获得样本集
library(mongolite)
URI = 'mongodb://127.0.0.1:27017'
clean_data <- mongo('zcool', url = URI, collection = 'clean_data')
UIDesigners <- clean_data$find('{"job": "UI设计师"}')
  • 看一下数据总样本数
站酷UI设计师探索性数据分析
  • 接着我们看一下男女比例
male_ana <- ggplot(UIDesigners, aes(x=UIDesigners$male)) +
  geom_bar() +
  geom_text(stat = 'count', aes(label=..count..), vjust=-1, hjust=0.5)  +
  labs(x="性别", y="数值", title="UI设计师性别分布表") +
  theme(text = element_text(family = 'PingFang SC', size = 10), 
plot.title = element_text(hjust = 0.5))
站酷UI设计师探索性数据分析
温馨提示:图片建议打开看,要不然很不清晰

说明UI行业男女从业比例还是比较均衡的

接下来我们看一下年龄不同设计师的酷龄分布情况,首先看下大概数值

summary(UIDesigners$z_age) 

由中位数和平均值大概可以看出整体还是偏年轻的

站酷UI设计师探索性数据分析
输出结果
z_age_ana <- ggplot(UIDesigners, aes(x=UIDesigners$z_age)) +
  geom_bar() +
  geom_text(stat = 'count', aes(label=..count..), vjust=-1, hjust=0.5) +
  labs(x="酷龄", y="数值", title="UI设计师年龄分布表") +
  theme(text = element_text(family = 'PingFang SC', size = 10),
plot.title = element_text(hjust = 0.5))
站酷UI设计师探索性数据分析
温馨提示:图片建议打开看,要不然很不清晰

这里的横坐标是以月份记录的,比如40=12*3+4,也就是4年零4个月。

从图中可以看出,大部分UI设计师入住站酷为3年以内,说明UI设计行业还是比较年轻的比较活跃。其中有一个小高峰,也就是59个月(即4年11个月)得人也很多,总共404人。

 

那这里就有个问题,UI设计师是不是越老越吃香呢?我们看看人气值和酷零的关系

ggplot(UIDesigners, aes(x=UIDesigners$z_age, y=UIDesigners$stastic$hot)) + 
  geom_point() +
  geom_smooth(method = lm) + 
  labs(x="作品数", y='人气值', title="UI设计师作品和人气值关系") + 
  theme(text = element_text(family = 'PingFang SC', size = 10), 
        plot.title = element_text(hjust = 0.5))
站酷UI设计师探索性数据分析
温馨提示:图片建议打开看,要不然很不清晰

发现有两个特别大的异常值,明显高于他们,我们再限定一下范围

ggplot(UIDesigners, aes(x=UIDesigners$z_age, y=UIDesigners$stastic$hot)) + 
  geom_point() +
  geom_smooth(method = lm) + 
  ylim(0, 10000000) +
  labs(x="作品数", y='人气值', title="UI设计师作品和人气值关系") + 
  theme(text = element_text(family = 'PingFang SC', size = 10), 
        plot.title = element_text(hjust = 0.5))
站酷UI设计师探索性数据分析
温馨提示:图片建议打开看,要不然很不清晰

发现结果也是差不多,说明UI设计并不是一个跟年龄直接挂钩的行业,关键还是得看你的实力

接着,我想了解一下一线二线城市是不是水平会有差异,是不是真的我在一线城市发展要比在二线城市好呢?那我们来看下设计师的整体水平如何,这边我主要是拿去两个维度,所在地和人气值,做加权平均数比较。这里本来是只做了最简单的将一线二线城市做了分组,然后加权,后面发现这种做法是错的,因为不同城市的UI设计师比例不同,所以要分比例。这个是请教了大神 @唐亦六安 才明白的,跪谢。

 

备注一二线城市的划分我是根据戳这里这篇文章取的,二线只取了发达地区

 

# 一线二线城市变量
UIDesigners <- clean_data$find('{"job": "UI设计师"}')
UIShangHai <- clean_data$find('{"job": "UI设计师", "livenow.0": "上海"}')
UIBeijing <- clean_data$find('{"job": "UI设计师", "livenow.0": "北京"}')
UITianjin <- clean_data$find('{"job": "UI设计师", "livenow.0": "天津"}')
UIGuangzhou <- clean_data$find('{"job": "UI设计师", "livenow.1": "广州"}')
UIShenzhen <- clean_data$find('{"job": "UI设计师", "livenow.1": "深圳"}')
UICityNo1 <- clean_data$find('{"livenow.1":{"$in": ["上海市", "北京市","天津市", "广州", "深圳"]} , "job": "UI设计师"}')
UICityNo2 <- clean_data$find('{"livenow.1":{"$in": ["杭州", "南京","济南", "重庆", "青岛", "大连", "宁波", "厦门"]} , "job": "UI设计师"}')

分别计算一线城市人数占一线城市总人数的比率和一线城市人气均值

#分别计算一线城市占一线城市总人数的比率
ShanghaiPercent <- nrow(UIShangHai)/nrow(UICityNo1)
BeijingPercent <- nrow(UIBeijing)/nrow(UICityNo1)
TianjinPercent <- nrow(UITianjin)/nrow(UICityNo1)
GuangzhouPercent <- nrow(UIGuangzhou)/nrow(UICityNo1)
ShenzhenPercent <- nrow(UIShenzhen)/nrow(UICityNo1)

#分别计算一线城市人气的均值
ShanghaiHotMean <- mean(UIShangHai$stastic$hot)
BeijingHotMean <- mean(UIBeijing$stastic$hot)
TianjinHotMean <- mean(UITianjin$stastic$hot)
GuangzhouHotMean <- mean(UIGuangzhou$stastic$hot)
ShenzhenHotMean <- mean(UIShenzhen$stastic$hot)

接着求加权平均值

eighted.mean(c(ShanghaiHotMean, BeijingHotMean, TianjinHotMean, GuangzhouHotMean, ShenzhenHotMean), 
              c(ShanghaiPercent, BeijingPercent, TianjinPercent, GuangzhouPercent, ShenzhenPercent))
站酷UI设计师探索性数据分析
输出的结果

诶,可累坏了。不过幸好得出了最终值,不过怎么看上去那么多冗余的代码,不行,咱不能这么邋里邋遢的,接下来求二线城市的时候改版代码,黑喂狗~

 

先把这个取mongodb的抽象成一个函数。

JobCityFromMongo <- function(job, city_name){
  clean_data$find(sprintf('{"job": "%s", "livenow.1": "%s"}', job, city_name))
}

只需要根据工作种类和城市名称筛选表

那么二线城市的城市变量可以这么写了

UIHangzhou  <- JobCityFromMongo('UI设计师', '杭州')
UINanjing   <- JobCityFromMongo('UI设计师', '南京')
UIJinan     <- JobCityFromMongo('UI设计师', '济南')
UIChongqing <- JobCityFromMongo('UI设计师', '重庆市')
UIQingdao   <- JobCityFromMongo('UI设计师', '青岛')
UIDalian    <- JobCityFromMongo('UI设计师', '大连')
UINingbo    <- JobCityFromMongo('UI设计师', '宁波')
UIXiamen    <- JobCityFromMongo('UI设计师', '厦门')

看着舒服了好多。接着直接写个函数计算二线城市加权平均值,只需要把城市分别传进去就好,说干就干

GroupWeightedMean <- function(...){
  args_list <- list(...);
  args_len <- length(args_list);
  verctor_percent <- c();
  verctor_weightmean <- c();
  for(i in 1:args_len){
    percent_city <- nrow(args_list[[i]])/nrow(UICityNo2);
    verctor_percent[i] <- percent_city;
    weightmean_city <- mean(args_list[[i]]$stastic$hot);
    verctor_weightmean[i] <- weightmean_city;
    
  }
  return(weighted.mean(verctor_weightmean, verctor_percent));
}

这么一来,我们只需要将刚才的二线城市变量输进来就可以了。

GroupWeightedMean(UIHangzhou, UINanjing, UIJinan, UIChongqing, UIQingdao, UIDalian, UINingbo, UIXiamen) 

运行一下,我们就得到结果啦…

站酷UI设计师探索性数据分析
输出的结果

这样我们就可以得到,一线城市的人气均值18207.71相对于二线发达城市16447.92,高出1759.79。说明一线城市的整体水平还是比二线城市高出一截的。想要提高拔高技术水平的小伙伴还是早点往一线城市走吧。

 

然后我有点好奇到底牛逼UI设计师是不是说他们所在的学校也是很牛逼的,来,我们看看,这里我多次尝试,最后选定了人气值大于100万的设计师,调用的是R语言的subset子集函数

subset(UIDesigners, stastic$hot>1000000, select = c('educated', 'username')) 
站酷UI设计师探索性数据分析
输出的结果

但是这么多<NA>是什么鬼,就是设计师没有填这个资料,好吧,那我们把它剔除掉。

subset(UIDesigners, stastic$hot>1000000 & educated != NaN, select = c('educated', 'username')) 
站酷UI设计师探索性数据分析
输出的结果

我们可以看到,美院的和名牌大学的偏多,说明啥?知识改变设计啊!!!(我本来以为名牌大学不是很多,那么就可以抖机灵:说明啥?少壮不努力,老大学UI啊,看来用不上了,?)

接着我还好奇设计师世界里,是不是话术都比较有趣好玩,把整个样本中的签名字段拿出来看看。这里用到了jiebaR和jiebaRD库,具体google了ABCDE….之后才了解到它的用法。

直接上码

library(jiebaRD)
library(jiebaR)

sign_txt <- as.character(subset(UIDesigners, sign != NaN, select = "sign"))
sign_slice_words <- wk[sign_txt]

 

站酷UI设计师探索性数据分析

这里,我就懵逼了,这样看起来太费劲了,不如作出云词来看看吧,走起,这里又出现了各种安装库的环境问题,是处处都是坑啊。省略n小时。dont bebe, show me the code。

# 先把单个词或者空白的部分筛选掉 sign_slice_words <- sign_slice_words[nchar(sign_slice_words)>1] # 再把词作出表,好统计每个词频 sign_slice_words <- table(sign_slice_words) # 再把词频中出现top100的词选出来 sign_slice_words <- sort(sign_slice_words, decreasing = TRUE)[1:100] 
站酷UI设计师探索性数据分析
温馨提示:图片建议打开看,要不然很不清晰

这样看着也扎眼吧,搞个云词看看

# 接着撸云词 
library(wordcloud)
library(wordcloud2)
wordcloud2(sign_slice_words, color='random-light', backgroundColor = 'black', fontFamily = "PingFang SC") 

最终效果是这样的

站酷UI设计师探索性数据分析
温馨提示:图片建议打开看,要不然很不清晰

有点失望诶,原来UI设计师的OS与我们也没有什么不同嘛~

之前做过把爬来的设计师装备数据做了个分析,贴个图here:

站酷UI设计师探索性数据分析
温馨提示:图片建议打开看,要不然很不清晰

从左到右从上到下依次是出现频率由高到低的分布:

站酷UI设计师探索性数据分析
装备出现频次分布

总结

以上,就是此次探索性分析的全过程。收获不少要点,这里总结一下:

  • 学习是门技术活,多动手,忌空想,过程很简单:学习-实践-总结
  • 不会的点要多问人,但不要问“笨问题”,能谷歌的尽量别哔哔
  • 忌完美主义和攀比心态,比如我写这篇文章之前,认为这里面太多不够严谨的结论,甚至到现在也是如此认为。但要知道,相较于通过写这篇文章,获得成就感,让你保持长久的学习信心来说,现在的不完美是完全可以容忍的
  • 不论如何,保持持续的热情最重要。keep hungry,keep foolish. 那么过好怎样的日常显得极其重要,那么保持充足睡眠,多阅读,健身早起等一切补充你精力的活动,都要坚持,并成为习惯。道长且阻,keep steady

最后,有数据分析的小伙伴愿意一起同行的,可以私信我+wechat,互相交流学习,一起成长。文章中出现的各种问题,欢迎大家不吝赐教。

如果觉得对你有帮助的话,麻烦动动手指点个赞吧~先谢过~

优秀资料推荐

R语言教程

[R语言]调整坐标、设置坐标轴、标题居中

R中的普通文本处理-汇总

R 繪圖與中文字型:在圖形中加入中文,解決亂碼問題

jiebaR中文分词,并做词云(R语言)

R语言之词云:wordcloud&wordcloud2安装及参数说明

About the author

张小鸡

日拱一卒,功不唐捐

Add comment

By 张小鸡