이 글은 데이터 분석가로서의 성장에 대한, 한 개인의 생각을 다룬 글이다. 스스로가 데이터 분석가로서 대표성을 띈다고 말할 수 있을 정도는 아니지만, 데이터 분석가를 준비하거나, 혹은 이제 막 데이터 분석가로서 커리어를 시작한 분들에게 개인 경험담을 나누고 싶어 글을 쓰게 되었다.
R vs Python
많이 나오는 떡밥 중 하나인 것 같다. 대부분 파이썬의 판정승에 손을 들어주는 분위기이지만, 개인적으로는 R 유저이기 때문에 R의 장점에 대해서도 어필해 볼 겸 글을 써본다.
R의 장점
EDA나 통계 분석을 파이썬보다 손쉽게 할 수 있다는 것이 R의 특장점이라 생각한다.
가령 파이썬으로 간단한 라인 그래프를 그리기 위해서는 코드 라인이 길어지게 되고, 각 함수마다 일관성이 없어서(xlabel, ylabel, title 등의 함수를 다 외워야 하는..) 필요한 함수를 찾기에 번거롭다는 느낌이 있다.
import matplotlib.pyplot as plt
import numpy as np
# 데이터 생성
x = np.linspace(0, 10, 100) # 0부터 10까지 100개의 점 생성
y = np.sin(x) # 사인 함수 값
# 시각화
plt.figure(figsize=(8, 5))
plt.plot(x, y, label='sin(x)')
plt.title("Simple Line Plot")
plt.xlabel("X-axis")
plt.ylabel("Y-axis")
plt.show()
그렇지만 R에서는 tidyverse 라는 굉장히 강력한 라이브러리가 있어서 데이터 전처리 및 시각화에 매우 유리하다. (사실 R의 8할 이상이 tidyverse라고 봐도 무방하지 않을까...라는 개인적인 생각이다.)
# 데이터 생성
x <- seq(0, 10, length.out = 100) # 0부터 10까지 100개의 점 생성
y <- sin(x) # 사인 함수 값
library(tidyverse)
data = data.frame(x, y)
# 시각화
ggplot(data = data, aes(x = x, y = y)) + geom_line() +
ggtitle("Simple Line Plot") +
scale_x_continuous(name = "x-axis") +
scale_y_continuous(name = 'y-axis') +
크게 gg로 시작하는 함수, geom으로 시작하는 함수가 있는데
- gg는 대략 그래프의 기본 틀을 잡거나, 설정하는 명령어
- geom은 시각화와 관련된 명령어로 볼 수 있다.
ggplot으로 그래프를 그릴 레이어를 만들어주고, geom_line이라는 함수를 써서 이것이 라인 그래프임을 명시한다.
ggtitle을 통해 그래프의 제목을 붙여주고, scale 함수를 통해 시각화를 좀 더 세밀하게 설정할 수 있다.
함수를 외워야 하는 것은 동일하나, 함수 자체에 나름의 일관성이 있어 시각화를 학습하는데 용이하다.
또, RStudio라는 R에 최적화된 IDE 가 있다는 것이 굉장히 큰 장점이다. 파이썬도 여러 IDE가 있기는 하지만 딱 파이썬에 최적화된 IDE를 손꼽기 어렵고, 개발이 아닌 분석에 최적화된 IDE를 고르자면 더더욱 폭이 좁아지는 문제가 있다. (아마 대부분 Jupyter를 사용하지 않을까 싶다.)
R이 통계에 최적화된 언어이다보니 기본적인 통계 분석이 내장 함수로 되어 있어 라이브러리를 따로 불러오지 않고 lm(선형회귀분석), glm(일반화회귀분석), scale(정규화, normalization), chisq.test(카이제곱검정) 함수를 냅다 실행할 수 있다. 그래서 간단한 통계 분석을 할 때에도 R은 굉장히 유리하다. 만약 파이썬으로 위 분석을 실행한다고 하면 scipy나 statsmodels의 라이브러리를 호출하고, 원하는 함수가 들어 있는 모듈을 찾아야 할 것이다.(개인적으로는 이게 무척 골치 아프다.. 경로를 못 외운다.)
파이썬의 장점
하지만 대세는 파이썬. R이 아무리 편하다고 해도 확장성을 고려하면 파이썬을 쓸 수밖에 없는 것 같다. Airflow를 통해 스케쥴링을 걸어야 하는 상황을 가정해 보자. (아마 많은 분들이 아시겠지만 Airflow는 워크플로(Work Flow)를 모니터링하고 스케줄링하는 워크 플로 플랫폼이다. 데엔 분들이 많이 사용하시는 걸로 알고 있는데, 잘은 모르니 여기까지만..!)
Airflow에서는 파이썬 함수를 사용할 수 있는 PythonOperator를 제공해주지만 R 함수를 지원하는 ROperator는 존재 자체가 있다는 건 알지만 구현하기 어렵기 때문에 잘 쓰지 않는 것 같다. 그래서 R로 공들여 코드를 짜도 그걸 갖고 가면 개발자 분이 고개를 절레절레 내저을 수 있다. (R은 안 돼요. 파이썬으로 바꿔 오세요.)
분석만 할 게 아니고 여기저기 모델을 배포해야 하는 상황이면 R은 상당 부분 불리하다. 반면 파이썬은 이런 제약에 상당히 자유롭다. 애초에 분석 특화 언어인 R이 개발 언어인 파이썬에 어찌 도전장을 내밀 수 있을까..
그리고 머신러닝이나 딥러닝을 해야 하는 환경에서는 R보다는 파이썬이 더 낫다고 한다.
- 대규모 데이터를 다룰 때 속도가 더 빠르고, 병렬 처리가 용이하기 때문에 복잡한 모델을 돌릴 때에도 성능이 훨씬 좋다.
- scikit-learn이나 Pytorch, Tensorflow와 같은 머신러닝-딥러닝 특화 라이브러리가 매우 강력하다.
찾아보니 이런 이유가 있다고 한다.
만약 둘 중 하나를 처음 배우는 상황이라면
R이나 파이썬 각각의 장점이 있기는 하지만, 아예 제로베이스에서 처음 배우는 상황이라면... 파이썬을 추천한다. 나는 R을 먼저 배우고 파이썬을 뒤늦게 배운 케이스인데 아직도 데이터 타입으로 버벅버벅 거리고 있다.. R에도 데이터 타입 개념이 있긴 하지만, 약간 허술한 부분이 있다. 그냥 적당히 돌아가면 됐지 뭐라는 느낌이 큰데, 파이썬에서는 그런 어설픈 마음가짐으로는 수많은 에러를 만들기 십상이다.
예를 들어 파이썬의 pandas가 R의 tidyverse에 대응되는데, 해당 라이브러리로 데이터 프레임 형식을 다룰 수는 있지만 사소해보이는 부분도 헷갈린다.
type(data['age'])
# 이건 dataframe 타입..
type(data[['age']])
# 이건 series 타입
pandas에서 특정 필드를 가져올 때 대괄호([])를 한 번 써주냐, 두 번 써주냐에 따라 데이터 타입 자체가 달라져 버린다. 데이터 프레임을 다룰 때 파이썬의 데이터 타입을 이해하면 저 개념이 이질감이 없게 느껴지겠지만, 나는 R이 익숙하다 보니 저 개념이 헷갈려서 계속 흠칫흠칫 할 때가 있다. (참고로 R에서는 데이터 프레임 타입을 쓰기 위해서는 data[c('age')]로 쓸 수 있고, 벡터 타입(Series 타입이랑 대충 대응..)을 쓰기 위해서는 data$age로 쓸 수 있다.)
예시는 데이터 타입으로만 들기는 했지만 개발 언어인 파이썬으로 입문한 뒤에 R을 배우면 코딩의 개념을 체계화해서 배울 수 있을 것으로 생각한다. 반대로 R로 먼저 입문하면 프로그래밍에서 기본적으로 다루는 기본 개념이 체계화되지 않고 계속 파편화되어 떠다니는 느낌이 든다. 지극히 개인적인 느낌이긴 하지만 말이다.
그렇다고 R을 하던 사람이 R을 버리고 파이썬으로 넘어가야 하냐.. 라고 하면 또 그렇지는 않은 것 같다. R로 코드를 잘 짤 수 있으면 또 금방 파이썬 코드로도 포팅이 가능하기 때문이다. 결국 어떤 분석을 하고 싶은지가 제일 중요하고, 코드로는 분석 방향이 정해지면 또 어찌어찌 구현이 가능할 수 있어 둘 중 하나가 익숙하면 일단 괜찮은 것 같다는 게 개인적인 생각이다. 특히 요즘은 ChatGPT가 포팅을 기깔나게 잘해주기 때문에 더더욱 하나만 잘해도 나쁘지 않은 것 같다.
또, 둘 다 잘 해도 괜찮은 것 같다. 앞서 말했듯 R은 시각화와 통계 분석에, 파이썬은 머신러닝, 딥러닝에 장점이 있기 때문에 EDA를 가볍게 R로 돌리고, 본격적인 분석은 파이썬으로 해서 모델 배포를 하는 식으로 하이브리드 분석이 가능하기 때문이다. R과 파이썬의 이중 언어(?)를 쓸 수 있다는 것도 멋짐 포인트기도 하고..
3줄 요약
기능 | 파이썬 | R |
주요 강점 | 머신러닝, 딥러닝, 개발 연계 | 통계 분석, 데이터 시각화 |
주요 라이브러리 | pandas, numpy, scikit-learn | tidyverse, ggplot2, caret |
IDE | Jupyter, VSCode, PyCharm | RStudio |
소프트 스킬 vs 하드 스킬
- 소프트 스킬 : 프로덕트 관점, 도메인 지식, 스토리텔링, 커뮤니케이션
- 하드 스킬 : 코딩, 통계 및 머신러닝 지식
으로 대략 정의내릴 수 있을 것 같다. 둘 중 무엇이 중요한가, 하나를 취사선택한다면 무엇을 해야 할 것인가..
라는 바보 같은 생각을 불과 얼마 전까지도 갖고 있었다.
통계를 생각보다 안 쓰게 되는 것 같아, 도메인 지식 몰빵으로 공부해야 하는 거 아닐까 이런 생각 말이다..
그렇지만 결국 업무를 하려면 둘 다 필요하다. 너무나도 당연하지만 말이다.
순수이성비판에 "내용 없는 사고는 공허하며 개념 없는 직관은 맹목적이다"라는 말이 나오는데, 딱 그 느낌이 아닐까 싶다.
도메인 없는 통계는 공허하며, 통계 지식이 없는 직관은 맹목적이다. 가설을 설정하기 위해서는 도메인이 필요하고, 올바르게 분석하기 위해서는 직관에만 의존해서는 안 된다. 그렇기 때문에 소프트스킬, 하드스킬 모두 다 놓쳐서는 안 된다.
만일 두 개를 한 번에 공부하기 버겁다면, 그래서 굳이 먼저를 따져야 한다면 소프트 스킬 쪽이 먼저 필요하지 않을까 싶다. 왜냐하면 배워야 하는 하드 스킬이 너무나도 많기 때문이다.
- 통계를 먼저 해야하나, 머신러닝/딥러닝을 먼저 해야 하나
- 통계를 한다고 하면 베이지안 통계를 해야 하나, 생존 분석을 공부해야 하나, 회귀분석 먼저 다시 짚고 가야 하나
- 파이썬 외에 다른 분석 툴도 써야 하는데 뭐부터 시작해야 하지
이런 생각들이 꼬리에 꼬리를 물게 되면 아무 것도 하지 못하는 상황이 와버릴 수 있다. 그렇지만 도메인 지식이 어느 정도 정립되고 우리 프로덕트에 필요한 분석이 대략 이런 것이야 라는 가닥이 나오면 공부의 우선순위를 잡을 수 있다.
예를 들어 내 경우는..
서비스의 업데이트가 이뤄졌는데, 우리는 AB 테스트를 할 수 없는 환경이야.
> 인과추론을 배우면 실험이 아니더라도 준실험(자연적으로 실험과 비슷하게 만들어지는 경우)을 찾아서 업데이트 효과를 분석할 수 있을 것 같아. 인과추론 공부를 해보자.
이런 흐름으로 가기도 했다.
반대로 AB 테스트를 할 수 있는 환경의 분석가였다면 실험계획법이나 웹 최적화에 활용할 수 있는 베이지안 통계가 더 중요할 수도 있을 것 같다.
소프트스킬, 하드스킬 둘 다 중요하지만 좀 더 중요한 걸 하기 위해서 소프트스킬에 살짝 손을 들어줘 본다.
통계 vs 머신러닝
둘 중 뭐가 더 좋을까... 보다는 통계에 대해 회의적인 인식이 강해지는 분위기에서 통계는 왜 필요한가? 에 대한 이야기를 조금 해보려 한다. 예측 문제를 풀기 위해서는 머신러닝이나 딥러닝을 쓰면 되고, 통계를 써도 어차피 이해가 직관적이지 않기 때문에 통계는 크게 의미가 없다는 의견을 종종 보기도 한다.
그렇지만 통계는 통계 나름의 의미가 있다고 생각한다. 최근에 읽고 있는 "수학지능"이라는 책에서도 비슷한 의견이 나오는데..
기계학습 알고리즘은 통계학의 가장 중요한 가르침, 즉 상관관계가 인과관계를 의미하지 않는다는 사실은 무시한 채 오로지 패턴만 찾는다. (중략) 그 결과 알고리즘은 회사의 다양성 부족을 야기한 그 편향을 영속시킨다.
통계학은 상관관계를 인과관계로 해석하는 것을 경계한다. 그렇다고 해서 뚜렷한 해결책이 있는 건 아니지만(이건 오히려 다른 분야에서 인과추론이라는 형태로 통계를 발전시켰다.) 어쨌든 최대한 A와 B를 비교가 가능한 상태로 만들기 위해 주의를 기울이는 학문이다.
그러다 보니 통계를 공부하면서 생긴 기준 같은 게 있는데,
- A와 B를 적절하게 비교하고 있는가, 비교가 불가능한 대상을 비교하면서 상관관계를 잘못 해석하고 있는 것은 아닐까?
- A와 B의 차이를 통계적으로 유의한 차이로 해석할 수 있을까? (...근데 이건 솔직히 종종 누락하게 된다.)
를 혼자 멍하니 계속 제단하게 된다.
실험설계에 대한 부분을 적어도 머신러닝의 입문 단계에서 다루지는 않는 것 같기에...(깊게 들어가면 머신러닝으로 인과관계를 추론하기 위한 노력들을 발견할 수 있지만, 입문 단계에서는 다루지 않기 때문에 자칫 간과할 수 있다고 생각한다.)
데이터를 통해 인사이트를 발굴해야 하는 데이터 분석가라면 좀 더 엄밀한 분석을 위해서 통계가 필요하다는 게 개인적인 생각이다.
결국 어떤 분석가가 좋은 분석가인가
이 질문에 대해서는 늘 끊임없이 고민하게 된다. "vs"로 대변되었던 목차들은 사실 내가 한 번씩 좋은 데이터 분석가가 되기 위해 고민했던 지점이기도 하다.
- 어떤 상황에 대해 핵심 문제를 파악하고, 이를 해결하기 위해 일을 잘 벌이는 능력 (문제 해결능력)
- 다양한 변화에 대해, 특히 툴에 대해 거부감 없이 받아들일 수 있는 능력 (개방성)
- 비즈니스 관점에서 고민하고 비즈니스 임팩트를 낼 수 있는 능력
- 소프트 스킬과 하드 스킬의 밸런스가 좋은 사람
요즘은 이런 데이터 분석가가 좋은 데이터 분석가이지 않을까 생각한다. 그래서 이런 데이터 분석가가 되기 위해 어떤 노력을 더 기울여야 할까, 현재 내 상태는 어느 정도인가에 대해 종종 생각하게 된다.
데이터 분석가라는 이름을 달고 있어도 하는 일이 저마다 다르기 때문에, 아마도 데이터 분석가들은 각자의 발자취를 남기면서 저마다 "좋은 데이터 분석가"에 대해 다른 정의를 내리지 않을까 싶다. 저마다 정의는 달라도 그 과정에 도달하기 위해 하는 고민들은 모두가 다 치열할 것이며, 그렇기에 그 여정에 응원의 박수를 보내지 않을 수 없다.
모두가 각자 생각하는 길에 잘 도달할 수 있길, 응원을 보내보는 것으로 글을 마쳐보려 한다.
'일상생각' 카테고리의 다른 글
2024년 회고, 2025년 목표 (1) | 2025.01.01 |
---|---|
2024-11 간단 회고 (1) | 2024.11.22 |
글또 10기를 시작하며 (가을은 독서와 글또의 계절) (14) | 2024.10.01 |
회고에 대한 회고 (2) | 2024.08.15 |
전직 소셜 빅데이터 분석가의 직무 썰풀기 (무엇을 하나요? 어떤 기술이 필요한가요?) (0) | 2024.06.22 |