>RE::VISION CRM

R 데이터 분석

[데이터분석] 데이터 분석 도구 사용 현황 조사

YONG_X 2019. 9. 5. 14:01

데이터 분석가가 주로 사용하는 도구 조사



(구글 독 조사 페이지 링크 : https://docs.google.com/forms/d/e/1FAIpQLSe31ixLe3hGifL9rauxCM687QJ7lQ2S4xlVowrHpe7e8QpnmQ/viewform )



[Summary]

   본 조사는 대한민국의 데이터 분석가들이 2019년 현재 어떤 도구를 사용해서 데이터 분석을 수행하는가에 대한 개략적인 패턴을 파악하기 위한 것. 조사결과의 주요패턴은


 ■ 데이터분석 분야에서 R을 많이 사용

 ■ AI/머신러닝에서는 압도적으로 파이썬을 사용

 ■ 실무경력 7년초과 사용자들의 SAS 사용 많음

 ■ 민간기업의 파이썬 사용 많음





문항 구성 :: 

-------------


[1] 당신은 어느 데이터 분석 도구를 주로 사용하십니까?

   파이썬 ; R ; SAS ; 기타


[2] 당신의 연령대는?

   24세 미만 ; 24~34세 ; 35~54세 ; 55세 이상


[3] 당신의 주된 업무는?

  데이터 분석 ; AI/머신러닝 ; 마케팅, 기획, 공정관리 등 현업 ; IT ; 기타


[4] 당신의 데이터 분석 관련 실무 경력은?

  1년 미만 ; 1~3년 이하 ; 3~7년 이하 ; 7년 초과


[5] 당신의 소속 기관 유형은?

  민간기업 ; 공공기관 ; 대학/연구기관 ; 기타


* 응답자수 총 131명 중 사용도구 응답한 130명을 유효응답으로 간주

조사방식 : 구글 서베이를 사용한 온라인 조사 (페이스북 활용해 응답자 모집)

* 조사기간: 20190829~20190904

* 응답결과 데이터 : (클릭해서 다운로드)  http://www.revision.co.kr/study/tool.csv

 


이하 개략적인 집계 결과

---------------------------------


1. 주로 사용하는 도구는 R과 Python (조사 표본이 치우쳐져있을 가능성 존재)

   단, 데이터 분석에서 두 도구의 사용이 많은 것이 최근(2019년 기준)의 추세.


2. 사용도구를 결정하는 가장 중요한 요인은 주업무 

   - AI/머신러닝 업무에서 주로 파이썬이 압도적으로 많이 사용됨

   - 일반 데이터 분석에서는 R 사용 많음



3. 영향요소간 상대적 중요도에서 주업무가 압도적으로 중요, 실무경력이 다음으로 중요


4. 주업무가 데이터 분석인 경우 R 사용이 특히 많음

  -  응답자 중 다수가 데이터 분석에 R을 사용함 (23.8%)



5. 실무경력 1~3년 구간에서 R 사용 많고, 실무경력 7년 초과에서 SAS 사용 많음

   - 파이썬 주사용자들은 실무경력 적은 쪽에서 비율 높음



6. 상대적으로 젊은 쪽에서 R 사용 좀 더 많음 



7. 민간기업에서 파이썬 사용비율 높고 기타 유형에서 R 사용 비율 높음

   단, 데이터 분석 업무가 상대적으로 민간기업에서 좀 더 보편화 되었을 가능성 존재



8. 연령과 실무경력이 높은 쪽에 SAS 사용 많음

   (범주형 응답을 임의로 수치로 환산해 시각화한 것. 구간별 중간값 활용)

   - 연령, 실무경력 모두 적은 쪽에 파이썬 사용자 많음

   (기존에 장기간 데이터 분석에 SAS를 사용해온 조직들이 여전히 사용하고 있는 경우 반영 추측)



9. 주영향요소인 주업무와 실무경력 교차 조합별 사용도구 비교

   - 데이터 분석 영역에서 1년 이상 실무경력자가 다수 R을 사용

   - AI/머신러닝 분야에서는 다수가 파이썬을 사용

   - 기타 영역은 응답수가 많지 않고 패턴 신뢰 어려움 존재



- 끝 - 


(부록: 집계용 R Script)


tool <- read.csv("http://www.revision.co.kr/study/tool.csv", stringsAsFactors = F)

nrow(tool) # 131 including missings

summary(tool)

# check if any na

sum(is.na(tool))


# 결측값 제거

library(dplyr)

tool <- tool %>% filter(!is.na(사용도구)) 

tool <- tool %>% filter(사용도구!="") 

nrow(tool)

sum(is.na(tool))


tool$기관유형 <- ifelse(is.na(tool$기관유형), "기타", tool$기관유형)

tool$기관유형 <- ifelse(tool$기관유형=="", "기타", tool$기관유형)


barplot(table(tool$실무경력), col=c(1,2,3,4))

# fill with median

tool$실무경력 <- ifelse(is.na(tool$실무경력), "3~7년 이하", tool$실무경력)

tool$실무경력 <- ifelse(tool$실무경력=="", "3~7년 이하", tool$실무경력)


barplot(table(tool$실무경력), col=c(1,2,3,4))


nrow(tool)

# check if any na

sum(is.na(tool))


tool$사용도구 <- as.factor(tool$사용도구)

tool$사용도구 <-factor(as.numeric(tool$사용도구),levels = c(4,1,2,3),

                    labels = c("파이썬", "R", "SAS","기타"))

plot(tool$사용도구)


tool$연령대 <- as.factor(tool$연령대)

plot(tool$연령대)


tool$실무경력 <- as.factor(tool$실무경력)

levels(tool$실무경력)


tool$실무경력 <- factor(as.numeric(tool$실무경력),levels = c(2,1,3,4),

                     labels = c("1년미만", "1~3년이하", "3~7년이하","7년초과"))

plot(tool$실무경력)


tool$주업무 <- as.factor(tool$주업무)

tool$주업무 <-factor(as.numeric(tool$주업무),levels = c(1,4,2,5,3),

                   labels = c("AI/머신러닝", "데이터분석", "IT","마케팅,기획,공정관리등현업","기타"))

plot(tool$주업무)


tool$기관유형 <- as.factor(tool$기관유형)

tool$기관유형 <-factor(as.numeric(tool$기관유형),levels = c(4,1,3,2),

                  labels = c("민간기업", "공공기관", "대학/연구기관","기타"))

plot(tool$기관유형)


barplot(table(tool$사용도구), col=c(1,2,3,4),

  main='주로 사용하는 데이터 분석 도구는?')


library(party)

ct100 <- ctree(사용도구~.,data=tool,

                  controls = ctree_control(minsplit=4,minbucket=2,maxdepth=3))

plot(ct100)



nrow(tool)

# check if any na

sum(is.na(tool))



library(randomForest)

fit <- randomForest(사용도구~.,

                 data=tool, 

                 importance=TRUE, 

                 ntree=1000)# ntree 변화에 따른 오차율 변화 확인 


plot(fit)

varImpPlot(fit, main='RF VarImp on 주사용도구', 

    pch=19)


library(ggplot2)

library(gridExtra)



# 주업무별 사용도구

g3 <- ggplot(tool,aes(주업무,fill=사용도구))+geom_bar(position='dodge')+ggtitle("주업무별 사용도구")+theme_classic ()+theme(plot.title=element_text(face="bold", size=20, vjust=2))

g4 <- ggplot(tool,aes(주업무,fill=사용도구))+geom_bar(position='fill')+ggtitle("주업무별 사용도구")+theme_light()+theme(plot.title=element_text(face="bold", size=20, vjust=2))+geom_text(aes(label=scales::percent(..count../sum(..count..))),stat='count',position=position_fill(vjust=0.5))

grid.arrange(g3,g4, ncol=2)




# 실무경력별 사용도구

p3 <- ggplot(tool,aes(실무경력,fill=사용도구))+geom_bar(position='dodge')+ggtitle("실무경력별 사용도구")+theme_classic ()+theme(plot.title=element_text(face="bold", size=17, vjust=2))


p4 <- ggplot(tool,aes(실무경력,fill=사용도구))+geom_bar(position='fill')+ggtitle("실무경력별 사용도구")+theme_light()+theme(plot.title=element_text(face="bold", size=17, vjust=2))+geom_text(aes(label=scales::percent(..count../sum(..count..))),stat='count',position=position_fill(vjust=0.5))

grid.arrange(p3,p4, ncol=2)



# 연령대별 사용도구

p5 <- ggplot(tool,aes(연령대,fill=사용도구))+geom_bar(position='dodge')+ggtitle("연령대별 사용도구")+theme_classic ()+theme(plot.title=element_text(face="bold", size=17, vjust=2))


p6 <- ggplot(tool,aes(연령대,fill=사용도구))+geom_bar(position='fill')+ggtitle("연령대별 사용도구")+theme_light()+theme(plot.title=element_text(face="bold", size=17, vjust=2))+geom_text(aes(label=scales::percent(..count../sum(..count..))),stat='count',position=position_fill(vjust=0.5))

grid.arrange(p5,p6, ncol=2)



# 기관유형별 사용도구

p7 <- ggplot(tool,aes(기관유형,fill=사용도구))+geom_bar(position='dodge')+ggtitle("기관유형별 사용도구")+theme_classic ()+theme(plot.title=element_text(face="bold", size=17, vjust=2))


p8 <- ggplot(tool,aes(기관유형,fill=사용도구))+geom_bar(position='fill')+ggtitle("기관유형별 사용도구")+theme_light()+theme(plot.title=element_text(face="bold", size=17, vjust=2))+geom_text(aes(label=scales::percent(..count../sum(..count..))),stat='count',position=position_fill(vjust=0.5))

grid.arrange(p7,p8, ncol=2)




# 범주형을 숫자형으로

# 범주형 구간거리의 중간값으로 변환


# 연령대 숫자형으로 변환

tool$연령대_N <- ifelse(tool$연령대=="24~34세", 29, 0)

tool$연령대_N <- ifelse(tool$연령대=="35~54세", 45, tool$연령대_N)

tool$연령대_N <- ifelse(tool$연령대=="55세 이상", 60, tool$연령대_N)


# 실무경력을 숫자형으로 변환

tool$실무경력_N <- ifelse(tool$실무경력=="1년미만", 0.5, 0)

tool$실무경력_N <- ifelse(tool$실무경력=="1~3년이하", 2, tool$실무경력_N)

tool$실무경력_N <- ifelse(tool$실무경력=="3~7년이하", 5, tool$실무경력_N)

tool$실무경력_N <- ifelse(tool$실무경력=="7년초과", 10, tool$실무경력_N)



library(ggplot2)

ggplot(tool,aes(연령대_N,실무경력_N,col=사용도구))+geom_point(size=3)+geom_jitter()


ggplot(tool,aes(사용도구, fill=사용도구))+geom_bar(position='dodge') + 

    theme(axis.text.x = element_text(angle = 45, hjust = 1)) + 

    facet_grid(실무경력~주업무)+ggtitle('주업무별실무경력별 사용도구 분포') +

    theme(plot.title = element_text(size = 5, face = "bold"))