站酷UI設計師探索性數據分析

簡介

作為自己R語言簡單階段性總結,熟悉R語言的簡單操作,並將站酷網爬取到的總量30W+的數據作為樣本,只對UI設計師的樣本做最基礎的分析和可視化操作。如果你也是R語言新手,歡迎私信我,加wechat一起成長。

聲明:題圖作者為站酷hbdkfk,本文為個人習作,若有侵犯版權,請私信我,火速處理

原題圖地址:站酷app引導頁|UI|APP界面|hbdkfk - 原創作品 - 站酷 (ZCOOL)

數據參數

註:數據的更新時間是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)nURI = mongodb://127.0.0.1:27017nclean_data <- mongo(zcool, url = URI, collection = clean_data)nUIDesigners <- clean_data$find({"job": "UI設計師"})n

  • 看一下數據總樣本數

  • 接著我們看一下男女比例

male_ana <- ggplot(UIDesigners, aes(x=UIDesigners$male)) +n geom_bar() +n geom_text(stat = count, aes(label=..count..), vjust=-1, hjust=0.5) +n labs(x="性別", y="數值", title="UI設計師性別分布表") +n theme(text = element_text(family = PingFang SC, size = 10), nplot.title = element_text(hjust = 0.5))n

溫馨提示:圖片建議打開看,要不然很不清晰

說明UI行業男女從業比例還是比較均衡的

接下來我們看一下年齡不同設計師的酷齡分布情況,首先看下大概數值

summary(UIDesigners$z_age)n

由中位數和平均值大概可以看出整體還是偏年輕的

輸出結果

z_age_ana <- ggplot(UIDesigners, aes(x=UIDesigners$z_age)) +n geom_bar() +n geom_text(stat = count, aes(label=..count..), vjust=-1, hjust=0.5) +n labs(x="酷齡", y="數值", title="UI設計師年齡分布表") +n theme(text = element_text(family = PingFang SC, size = 10),nplot.title = element_text(hjust = 0.5))n

溫馨提示:圖片建議打開看,要不然很不清晰

這裡的橫坐標是以月份記錄的,比如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)) + n geom_point() +n geom_smooth(method = lm) + n labs(x="作品數", y=人氣值, title="UI設計師作品和人氣值關係") + n theme(text = element_text(family = PingFang SC, size = 10), n plot.title = element_text(hjust = 0.5))n

溫馨提示:圖片建議打開看,要不然很不清晰

發現有兩個特別大的異常值,明顯高於他們,我們再限定一下範圍

ggplot(UIDesigners, aes(x=UIDesigners$z_age, y=UIDesigners$stastic$hot)) + n geom_point() +n geom_smooth(method = lm) + n ylim(0, 10000000) +n labs(x="作品數", y=人氣值, title="UI設計師作品和人氣值關係") + n theme(text = element_text(family = PingFang SC, size = 10), n plot.title = element_text(hjust = 0.5))n

溫馨提示:圖片建議打開看,要不然很不清晰

發現結果也是差不多,說明UI設計並不是一個跟年齡直接掛鉤的行業,關鍵還是得看你的實力

接著,我想了解一下一線二線城市是不是水平會有差異,是不是真的我在一線城市發展要比在二線城市好呢?那我們來看下設計師的整體水平如何,這邊我主要是拿去兩個維度,所在地和人氣值,做加權平均數比較。這裡本來是只做了最簡單的將一線二線城市做了分組,然後加權,後面發現這種做法是錯的,因為不同城市的UI設計師比例不同,所以要分比例。這個是請教了大神 @唐亦六安 才明白的,跪謝。

備註一二線城市的劃分我是根據戳這裡??????這篇文章取的,二線只取了發達地區

# 一線二線城市變數nUIDesigners <- clean_data$find({"job": "UI設計師"})nUIShangHai <- clean_data$find({"job": "UI設計師", "livenow.0": "上海"})nUIBeijing <- clean_data$find({"job": "UI設計師", "livenow.0": "北京"})nUITianjin <- clean_data$find({"job": "UI設計師", "livenow.0": "天津"})nUIGuangzhou <- clean_data$find({"job": "UI設計師", "livenow.1": "廣州"})nUIShenzhen <- clean_data$find({"job": "UI設計師", "livenow.1": "深圳"})nUICityNo1 <- clean_data$find({"livenow.1":{"$in": ["上海市", "北京市","天津市", "廣州", "深圳"]} , "job": "UI設計師"})nUICityNo2 <- clean_data$find({"livenow.1":{"$in": ["杭州", "南京","濟南", "重慶", "青島", "大連", "寧波", "廈門"]} , "job": "UI設計師"})n

分別計算一線城市人數佔一線城市總人數的比率和一線城市人氣均值

#分別計算一線城市佔一線城市總人數的比率nShanghaiPercent <- nrow(UIShangHai)/nrow(UICityNo1)nBeijingPercent <- nrow(UIBeijing)/nrow(UICityNo1)nTianjinPercent <- nrow(UITianjin)/nrow(UICityNo1)nGuangzhouPercent <- nrow(UIGuangzhou)/nrow(UICityNo1)nShenzhenPercent <- nrow(UIShenzhen)/nrow(UICityNo1)nn#分別計算一線城市人氣的均值nShanghaiHotMean <- mean(UIShangHai$stastic$hot)nBeijingHotMean <- mean(UIBeijing$stastic$hot)nTianjinHotMean <- mean(UITianjin$stastic$hot)nGuangzhouHotMean <- mean(UIGuangzhou$stastic$hot)nShenzhenHotMean <- mean(UIShenzhen$stastic$hot)n

接著求加權平均值

weighted.mean(c(ShanghaiHotMean, BeijingHotMean, TianjinHotMean, GuangzhouHotMean, ShenzhenHotMean), n c(ShanghaiPercent, BeijingPercent, TianjinPercent, GuangzhouPercent, ShenzhenPercent))n

輸出的結果

誒,可累壞了。不過幸好得出了最終值,不過怎麼看上去那麼多冗餘的代碼,不行,咱不能這麼邋裡邋遢的,接下來求二線城市的時候改版代碼,黑喂狗~

先把這個取mongodb的抽象成一個函數。

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

只需要根據工作種類和城市名稱篩選表

那麼二線城市的城市變數可以這麼寫了

UIHangzhou <- JobCityFromMongo(UI設計師, 杭州)nUINanjing <- JobCityFromMongo(UI設計師, 南京)nUIJinan <- JobCityFromMongo(UI設計師, 濟南)nUIChongqing <- JobCityFromMongo(UI設計師, 重慶市)nUIQingdao <- JobCityFromMongo(UI設計師, 青島)nUIDalian <- JobCityFromMongo(UI設計師, 大連)nUINingbo <- JobCityFromMongo(UI設計師, 寧波)nUIXiamen <- JobCityFromMongo(UI設計師, 廈門)n

看著舒服了好多。接著直接寫個函數計算二線城市加權平均值,只需要把城市分別傳進去就好,說干就干

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

這麼一來,我們只需要將剛才的二線城市變數輸進來就可以了。

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

運行一下,我們就得到結果啦...

輸出的結果

這樣我們就可以得到,一線城市的人氣均值18207.71相對於二線發達城市16447.92,高出1759.79。說明一線城市的整體水平還是比二線城市高出一截的。想要提高拔高技術水平的小夥伴還是早點往一線城市走吧。

然後我有點好奇到底牛逼UI設計師是不是說他們所在的學校也是很牛逼的,來,我們看看,這裡我多次嘗試,最後選定了人氣值大於100萬的設計師,調用的是R語言的subset子集函數

subset(UIDesigners, stastic$hot>1000000, select = c(educated, username))n

輸出的結果

但是這麼多<NA>是什麼鬼,就是設計師沒有填這個資料,好吧,那我們把它剔除掉。

subset(UIDesigners, stastic$hot>1000000 & educated != NaN, select = c(educated, username))n

輸出的結果

我們可以看到,美院的和名牌大學的偏多,說明啥?知識改變設計啊!!!(我本來以為名牌大學不是很多,那麼就可以抖機靈:說明啥?少壯不努力,老大學UI啊,看來用不上了,??)

接著我還好奇設計師世界裡,是不是話術都比較有趣好玩,把整個樣本中的簽名欄位拿出來看看。這裡用到了jiebaR和jiebaRD庫,具體google了ABCDE....之後才了解到它的用法。

直接上碼

library(jiebaRD)nlibrary(jiebaR)nnsign_txt <- as.character(subset(UIDesigners, sign != NaN, select = "sign"))nsign_slice_words <- wk[sign_txt]n

這裡,我就懵逼了,這樣看起來太費勁了,不如作出雲詞來看看吧,走起,這裡又出現了各種安裝庫的環境問題,是處處都是坑啊。省略n小時。dont bebe, show me the code。

# 先把單個詞或者空白的部分篩選掉nsign_slice_words <- sign_slice_words[nchar(sign_slice_words)>1]n# 再把詞作出表,好統計每個詞頻nsign_slice_words <- table(sign_slice_words)n# 再把詞頻中出現top100的詞選出來nsign_slice_words <- sort(sign_slice_words, decreasing = TRUE)[1:100]n

溫馨提示:圖片建議打開看,要不然很不清晰

這樣看著也扎眼吧,搞個雲詞看看

# 接著擼雲詞nlibrary(wordcloud)nlibrary(wordcloud2)nnwordcloud2(sign_slice_words, color=random-light, backgroundColor = black, fontFamily = "PingFang SC")n

最終效果是這樣的

溫馨提示:圖片建議打開看,要不然很不清晰

有點失望誒,原來UI設計師的OS與我們也沒有什麼不同嘛~

之前做過把爬來的設計師裝備數據做了個分析,貼個圖here:

溫馨提示:圖片建議打開看,要不然很不清晰

從左到右從上到下依次是出現頻率由高到低的分布:

裝備出現頻次分布

總結

以上,就是此次探索性分析的全過程。收穫不少要點,這裡總結一下:

  • 學習是門技術活,多動手,忌空想,過程很簡單:學習-實踐-總結
  • 不會的點要多問人,但不要問「笨問題」,能谷歌的盡量別嗶嗶
  • 忌完美主義和攀比心態,比如我寫這篇文章之前,認為這裡面太多不夠嚴謹的結論,甚至到現在也是如此認為。但要知道,相較於通過寫這篇文章,獲得成就感,讓你保持長久的學習信心來說,現在的不完美是完全可以容忍的
  • 不論如何,保持持續的熱情最重要。keep hungry,keep foolish. 那麼過好怎樣的日常顯得極其重要,那麼保持充足睡眠,多閱讀,健身早起等一切補充你精力的活動,都要堅持,並成為習慣。道長且阻,keep steady

最後,有數據分析的小夥伴願意一起同行的,可以私信我+wechat,互相交流學習,一起成長。文章中出現的各種問題,歡迎大家不吝賜教。

如果覺得對你有幫助的話,麻煩動動手指點個贊吧~先謝過~

優秀資料推薦

R語言教程

[R語言]調整坐標、設置坐標軸、標題居中

R中的普通文本處理-匯總

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

jiebaR中文分詞,並做詞雲(R語言)

R語言之詞云:wordcloud&wordcloud2安裝及參數說明


推薦閱讀:

小記:主題設計基本步驟
設計乾貨 | 牆裂推薦的設計師靈感、素材庫神器——Eagle
公開課 | 你的職業設計生涯從學會這節課開始
聽說設計師要會C4D,你有什麼想說的?

TAG:站酷ZCOOL | UI设计师 | 数据分析 |