회사원도 쉽게 가능하다! 데이터 분석
온 세상이 데이터로 뒤덮인지 몇년이 지났습니다. 뭔가 데이터 사이언티스트라는 그럴듯한 직업(?)도 등장했습니다. 미래의 원유, 즉, 4차 산업혁명의 원동력이라고도 합니다. 엄청나게 넘치는 데이터에서 인사이트를 찾아내는 일은 정말로 중요해진듯 합니다. 이 일은 컴퓨터 공학이나 통계학을 전공한 섹시한 소수에게만 열려있는 길인것 같기는 합니다.
사실 데이터 사이언티스트는 100M 달리기 선수같이 특정할수 있는 직업이라기보다는 직업군이라는 수식이 더 맞을것 같습니다. 데이터는 정말 수도없이 많은 분야에서 쌓이고 있습니다. 삼성전자가 만들어 내는 반도체의 오점을 순간적으로 찾는다거나, 구글의 자율주행 자동차에서 영상 데이터를 모아서 훈련을 시킨다거나, 현대카드 사용자 중 부도가 날것같은 사람을 미리 포착한다거나, 귀여운 카카오 캐릭터를 가지고 최적의 매출을 낼수 있는 포인트를 잡는다거나 하는 등, 모두가 각기 다른 산업군과 전문지식을 요하는 일에서 각자의 목적에 맞게 요긴하게 쓰일 수 있습니다.
통계학자나, 소프트웨어 엔지니어는 분명 데이터분석에 이점이 있는건 사실입니다. 코딩으로 순식간에 프로그램을 만들거나, 논리적으로 따져 빈틈이 없는 데이터분석 시스템을 구축하거나 하는등의 일입니다. 하지만, 이들은 특정한 분야의 데이터에 대한 직관력은 떨어질 수밖에 없습니다. 어떤 분야에 대한 통찰력은 쉽게 생기는 것이 아닙니다. 그 분야에 있어 열심히 노력한 여러분들의 노력에 의해 뇌는 일에 대한 특정 패턴을 익히게 되며, 이는 업무 노하우라고 부릅니다. 같은 데이터를 봐도 통계학자나 엔지니어보다 훨씬 그 함의를 빠르게 파악할수 있는 능력은, '도메인' 지식에 특화된 여러분야에 종사하는 회사원들이 훨씬 뛰어날 수 밖에 없습니다.
4차 혁명의 원유라고 부르는 이 데이터는 사실 특수한 소수의 전유물이 아니라, 이제는 많은 사람들이 각자의 분야에서 갈고 닦은 노하우와 합쳐져야 그제서야 빛을 발하게 됩니다.
하지만, 컴퓨터와 통계에 친하지 않은 많은 사람들은 겁부터 먹고 학원부터 찾다가 보통은 열정부족으로 포기해버립니다. 한번 배워놓으면 생산성이 제일 오르는 것중 하나가 데이터분석인데 참 아까운 경우입니다.
천릿길도 한걸음부터 일단 발을 떼고 한걸음을 내딛는 일부터 한번 해봅시다.
어떤 데이터 분석 툴로 시작할까? 파이썬? R?
사실, 데이터분석은 엑셀로도 가능하며 SPSS, SAS등 여러가지 도구들을 이용해 분석이 가능합니다. 다만 아래에 언급하는 언어들은 일단 무료라는 강력한 점이 있으며, 생태계의 발전이 빨라 여러가지 최신기술을 녹여낼수 있습니다.
엑셀은 인류 최대의 발명품이라는 찬사처럼, 표를 이용한 데이터를 살펴보는데는 유리하지만 조금더 고급 데이터분석을 사용하려면 유료 플러그인등을 사용해야 하는 번잡함이 있으며, 추후에 어플리케이션 등으로 발전할때 코드등을 공유하기에는 확장성이 떨어지며, 예측 모델들을 공유하기가 어렵습니다.
나머지 툴들도 훌륭하겠지만, 일단 유료라는 점이 심히 마음에 걸립니다.
파이썬 | R | |
---|---|---|
연계 | 웹 서비스 용이 | 기본 목적에 충실 |
편의 | 라이브러리 설치시 삽질가능성 | 통계 패키지 사용이 편함 |
참조자료 | 많음 | 많음 |
기능 | 충분 | 충분 |
실무에서 교육용 목적으로는 대부분 R을 통해 빠르게 배우는 편이고, 실제 서비스를 올려야 할 필요가 있을때는 파이썬이 일반적인 언어이기 때문에 이를 택하는게 대부분입니다. 기업급 레벨에서는 추가로 자바, 스칼라, C 등이 필요에 따라 추가되는 편입니다.
사실 데이터분석만을 수행하기 위한 코딩은 그렇게 높은 수준이 필요하지 않습니다. 결국 필요한건 어떤 라이브러리를 어떻게 쓰는지, 기본적인 개념은 어떻게 되는지가 훨씬 중요합니다. 우리가 하고자 하는건 어플리케이션 시스템이 아니라, 개념을 배우는게 선행되어야 하기 때문에 R을 선택합니다.
기초만 잡으면 추후에 필요할때 파이썬 혹은 다른 언어를 추가로 배우면 됩니다.
기본 준비 작업 하기
데이터 분석을 쉽게하기 위해 R과 이를 좀더 편하게 도와줄 R Studio를 설치하면 됩니다.
R 설치
R Studio 설치
기본기 익히기
R Studio를 설치했으면, 아주 기본적인 것부터 해보면 됩니다.
R studio에는 크게 두 부분에 코드를 작성하면 되는데 (1)에는 여러줄로 된 코드를 적어놓을때 메모장같이 이용하며, (2) 부분인 Console부분에서는 바로바로 코드를 실행시켜 볼수 있습니다. (1) 메모장에 적어놓은 부분은 Ctrl + Enter 를 치면 바로바로 실행되기 때문에 사실 콘솔에 그대로 치는 경우는 생각보다 많이 없습니다.
사칙 연산
R은 쉽게 통계를 다룰 수도 있으며, 빠르게 통계적 결과를 내볼수 있습니다. 그리고 또한, 일반 프로그래밍 언어처럼 간단한 프로그램도 만들어볼수가 있습니다. 결과적으로, 프로그래밍에서 사용되는 기본적이 기능은 사용해볼수 있다는 것입니다. 프로그래밍은 거대한 계산 식을 만드는 일입니다. 그의 기본이 되는건 우리가 초등학교때 배웠던 더하기 빼기 등 입니다.
R에 다음과 같은 식을 입력해보세요
1 + 1
어때요? 참 쉽죠? 바로 결과를 알아낼 수 있습니다. 복잡한 컴파일도 없고, 바로 바로 계산기처럼 결과를 알아낼수 있습니다. 모든 사칙연산들은 쉽게 계산이 가능합니다.
2 * 2
3 - 4
6 / 2
수학 계산
R은 통계에 특화되어 있는 툴이기 때문에 적어도 공학용 계산기 정도의 기능은 제공하는게 상식에 맞을 것 같습니다. 몇가지 더 수학적으로 필요한 것들을 계산하 봅니다. 고등학교때 잠시 졸아 무슨 뜻인지 모른다면, 일단은 넘어가도 좋습니다.
2 ^ 4
2의 4승입니다. 2를 4번 곱하는 거겠죠?
log(10)
로그를 구해볼수도 있습니다.
sqrt(100)
100의 제곱근 입니다. 10을 제곱하면 100이 됩니다.
pi
pi의 경우 우리가 알고있는 3.1415...를 계산하여 줍니다.
exp(100)
지수함수도 계산해줍니다.
10%%3
%%은 나머지를 계산해주는 연산자입니다.
변수 - 데이터 저장
지금까지 우리는 간단한 계산기를 돌려보았습니다. 하지만 결과값을 어딘가에 저장하여야 쓸모가 있겠죠. 이를 변수라고 합니다. 데이터를 저장하는 통이라고 생각하면 되고, 그 안의 값들은 항상 바뀔수가 있어 변수(Variable)라고 생각하면 됩니다.
x <- 2 * 2
x + 2
x
2 * 2 결과를 x에 넣고, 이 x에다가 다시 2를 더하면 6이라는 결과가 튀어나옵니다. 참고로 변수를 그냥 타이핑 하면 안에 들어있는 값이 튀어나옵니다.
마찬가지로 한번만 더해 볼까요?
x <- 2 ^ 3
y <- 1
x + y
2의 3승인 8에다가 1을 더해야겠네요. 답은 9입니다.
여기서 나오는 x, y가 변수입니다. x, y에는 아무값이나 들어갈수 있으니 변하는 값이라고 생각해도 되고, 혹은 하나의 임시 통이라고 생각해도 됩니다.
변수에는 아무거나 저장이 가능합니다. 그 안에 숫자 하나도 저장이 가능하고, 문자 하나도 저장이 가능하고, 데이터가 잘 모아진 데이터 집합을 저장하는것도 가능합니다.
벡터 - 데이터 집합 저장
이제는 통계적인 기본적인 것들을 계산해보도록 하겠습니다. 제 학창시절의 성적은 다음과 같습니다. 국어, 수학, 미술, 음악, 체육 순이라고 해보죠.
90, 80, 0, 20, 10
위에서 열거한 숫자는 성적표라는 이름으로 제 아이디에 묶여야하는 하나의 데이터 집합입니다. 하지만 이렇게 알려주면 R은 알아듣지 못합니다. 하나로 감싸야 한다는 뭔가 표식을 남겨주어야 합니다. 이럴때는 다음과 같이 표현하면 하나로 데이터가 묶입니다.
c(90,80,0,20,10)
c(원소1, 원소2, 원소3, ....) 이렇게 써주면 되는것이지요. c가 뭐냐구요? combine의 약자입니다. 결합시키다라는 뜻이 있습니다. 우리가 원하는것도 데이터를 하나로 결합시켜주는 역할을 하는것이였죠. c가 기억하기 힘들다면 할머니 손으로 김밥을 만다고 생각하고 그렇게 생각합니다. 김밥을 잘 말면 당근, 단무지, 깻잎, 참치등이 하나로 잘 묶여서 들고다니기 편하니까요.
이 데이터 묶음을 우리는 벡터라고 부릅니다. 벡터맨도 아니고 왜 이렇게 부르냐구요? 선형대수를 당장 공부할 게 아니면, 일단 모두 생략하고 이를 그저 한줄의 김밥처럼, 한줄의 데이터를 벡터라고 부른다고 생각하면 됩니다. 기억하세요 c()안에 잘 넣으면 됩니다.
벡터 가지고 놀기
고등학교때 점수를 평균내본적이 있을겁니다. 오늘까지 본 시험은 망했지만 앞으로 올백만 맞으면 평균 몇점인지 계산하는건, 공부천재부터 잠만보학생까지 사실 뻔하게 하는 일입니다.
위에서는 데이터를 하나로 말았습니다. c()라는 함수 안에다 집어넣어서요. 잘 말린 데이터는, 변수안에다가 집어넣을 수 있습니다.
v <- c(90,80,0,20,10)
v
심심하니 어떤 자료가 저장되어있는지 시각으로 확인해보고 가겠습니다. plot()안에다가 자료를 집어넣으면 R은 알아서 데이터에 맞는 그래프를 뿌려줍니다. ()안에 필요한 데이터를 집어넣으면 되는데, 이러한 방식의 기능을 함수라고 부릅니다. f(x) 이러한 식으로 활용하게 되는것이지요. 할머니 김밥함수였던 c()도 함수입니다.
plot(v)
기초함수
약간은 복잡해 보이지만, v는 하나의 벡터로 말린 점수들을 가지고 있습니다. 위에서 보았듯이, v라는 키워드를 한번만 쳐도 v안에 무엇이 들어있는지 쉽게 확인이 가능합니다. 이 변수를 가지고 몇가지 통계적인 결과들을 내어볼수 있습니다.
mean(v)
sd(v)
max(v)
min(v)
sum(v)
mean()은 평균을 내는 함수입니다.
sd()는 표준편차 (standard deviation)을 내는 함수입니다.
표준편차는 자료들의 흩뿌려져 있는정도가 광범위한지, 아니면 굉장히 좁은지에 대한 여부를 알수있는 중요한 지표입니다.
max() 는 벡터안의 최대치를 구하는 함수입니다.
min() 은 벡터안의 최소치를 구하는 함수입니다.
보통의 함수는 항상 ()의 괄호가 함께 따라옵니다. 실제로 호출되는 함수의 이름을 한번 쳐주고 ()안에다 필요한 인자를 넣어주기만 하면, 해당하는 함수 이름으로 되어있는 로직이 실행 됩니다.
필요한 데이터의 특성을 한번에 보고싶으면 보통 summary()함수를 많이 씁니다.
summary(v)
이 뿐만 아니라 데이터 집합이 하나의 변수안에 묶여있으면 여러가지 함수를 추가적으로 더 써볼수 있습니다.
정렬
위와같이 sort()로 쉽게 정렬을 할수 있습니다. 정렬된 결과를 다른 곳에서 다시 활용하고 싶으면 변수에 저장을 하면 됩니다.
sort(v)
order()의 경우는 랭킹을 냅니다. 단순한 랭킹이 무슨 소용이냐 할수도 있지만, 나중에 랭킹순으로 데이터를 골라낼 때 요긴하게 쓰입니다.
order(v)
데이터 꺼내오기
이제 벡터에서 필요한 데이터만 가지고 오는 연습을 한번 해봅시다.
v[2]
데이터를 골라내고 싶을 때는 위와같이 [] 괄호를 잘 이용하면 됩니다. 예를들어 벡터안에 들어가 있는 데이터중 두번째 데이터를 골라낼때는 v[2]와 같은 식으로 표현하면 바로 필요한 데이터만 빼오게 됩니다. 다만, R은 일반적인 프로그래밍 언어와는 달리 상식에 맞게 0이 아니라 1부터 시작한다고 보면 됩니다.
[]가 꼬챙이 형태니 필요한 데이터를 김밥에서 꼬챙이로 꿰어온다고 생각하면 편하겠습니다.
조건 충족되는 데이터 꺼내오기
그렇다면, 실제로 몇점 이상의 점수만 뽑아내는 방법이라든지, 점수들이 특정 조건을 충족시키는지 확인하는 코드를 실행시키는 것도 꽤나 도움이 될것입니다.
v>3
which(v>3)
v[v>3]
일정 조건의 벡터만 골라내는 것들에 대한 로직은 여러가지가 있습니다. which() 함수를 써서 골라내기도 하지만, 실제로 많이 쓰이는 방법은 [] 안에 조건을 넣어 원소를 골라내는 것입니다.
행렬 - 여러줄 데이터 다루기
벡터가 한줄짜리 데이터라면 행렬은 가로 세로가 있는 데이터 집합입니다. 벡터가 여러줄 있다고 생각할수도 있습니다. 학창시절에 아래와 같이 표현되는 데이터 묶음에 대해 배운적이 있습니다. 행렬입니다.
1 2 3
3 4 2
위는 2행 3열의 원소를 가지고 있는 행렬입니다. 위와같은 행렬을 만들려면 아래와 같이 쉽게 만들 수 있습니다.
mat1 <- matrix(c(1,3,2,4,3,2), nrow = 2, ncol = 3)
mat2 <- matrix(1:4, nrow = 2, ncol = 2, byrow=T)
mat1
mat2
처음은, 원소를 직접 c()에 담아 명시해 줬고, 두번째의 경우는 1:4라는 표현식으로 1~4라는 숫자를 채우라고 명시해 주었습니다. byrow=T를 통해 일단 행부터 채우라고 명령해 줄수도 있습니다. 어떤식으로 데이터가 저장되는지 살펴보세요.
행렬은 비록 가로 세로가 퍼져있는 모양이지만, 위에서 언급한 함수도 먹힙니다.
mat1
그리고 원소(Element)를 가지고 오는 방식도 벡터와 같습니다.
mat1[1,3]
1행3열의 데이터를 가지고 옵니다.
다만 행렬에는 특정한 열이나 행만 지정해주고 싶을때가 있는데 이럴때는 해당 부분을 공란으로 놔둬버리면 됩니다.
mat1[,3]
mat1[1,]
6) 데이터의 종류
데이터라는건 굉장히 큰 개념이라, 데이터에는 마케팅 데이터도 있고, 엔진 데이터도 있고, 차량데이터들도 있을 수 있습니다. 그렇게 데이터들을 모아서 분석하려고 보면, 데이터들은 그중에서도 몇가지 종류가 나눠진다는것을 알게 됩니다. 과연 어떻게 나눠질까요?
사실 숫자데이터 아니면 문자데이터입니다. 물론 따지고 들어가면 더 많지만, 일단은 우리가 유의해서 생각해야하는건 숫자인지 문자인지입니다.
흰 도화지에 5라는 숫자를 한번 써보세요. 이는 문자인가요? 숫자인가요? 실생활에서는 말장난에 가깝습니다. 문자이며 숫자입니다. 컴퓨터에게는 둘은 명확히 다릅니다. 숫자는 그 자체로 평균도 낼수있고, 계산도 가능합니다. 하지만 "5"로 표현되는 문자는 따로 뭔가를 해주지 않으면 문자 그 자체입니다. "5"를 "5"와 더해봤자 문자 + 문자일 뿐이지요. 따라서 가끔은 변환되는 식이 필요합니다.
5 와 "5"는 다르다!
value <- "9"
is.numeric(value)
보통의 프로그래밍 언어에서는 이 문자를 큰따옴표로 감싸주어서 문자라는 점을 표현해줍니다. is.numeric()이라는 함수로는 실제 value에 들어있는 값이 숫자인지, 문자인지 판별해줍니다. 위의 예제로는 "9"라는 문자는 컴퓨터 입장에서는 숫자가 아닙니다.
value <- as.numeric(value)
is.numeric(value)
as.numeric은 다른 타입의 데이터를 숫자로 변환시켜줍니다. 변환시킨 숫자를 다시한번 value라는 변수에 저장하면, value는 숫자타입의 변수입니다.
자매품으로는 as.character와 is.character가 있습니다.
value <- as.character(value)
is.character(value)
실제 상황에서는 텍스트를 읽으려다가 숫자가 죄다 문자화 되어서 불러오게되는 경우가 굉장히 많은데, 상황에 따라 변형시켜주어야 할 필요가 위와같이 있는것입니다.
기본은 익혔습니다!
너무 많은 프로그래밍은 금물! R을 다루기 위한 기본적인 것들을 빠르게 마무리 했습니다. 다음부터는 실제로 데이터분석에 필요한 여러가지 방법들을 직접 R로 배우고 익히는 시간을 가지겠습니다.
엄청 도움되는 포스팅이네요. 고맙습니다. ^^ gillime님 스팀친구 추가 합니다.
R 기초를 금방 배웠습니다 감사합니다