배움엔 끝이 없다

어떤 프로그래밍 언어를 다룰 줄 안다 라는걸 단계를 어떻게 매길 수 있을까.

2달쯤 전, 이력서를 쓸 때 특기, 기술 부분에 쓰려고 고민 했던 내용이었다.

그리고 내가 내렸던 5단계의 기준은 다음과 같다.

  • :black_circle::white_circle::white_circle::white_circle::white_circle: 이름만 들어봤거나 혹은 처음 들어봄, spring, julia, go, c#등등
  • :black_circle::black_circle::white_circle::white_circle::white_circle: HelloWorld를 출력 해본 적 있음, ruby, perl, verilog, mathmatica
  • :black_circle::black_circle::black_circle::white_circle::white_circle: 비효율적이겠지만 어쨌든 간단한 필요 기능 정도는 만들어 봤다. python, matlab
  • :black_circle::black_circle::black_circle::black_circle::white_circle: 시간과 예산이 충분 하면 어떻게든 할 수 있을 것 같다. r, html-css-js
  • :black_circle::black_circle::black_circle::black_circle::black_circle: 나는 구루다.


다른 건 그럴 수 있겠지만 r을 4 에 둔 이유는 간단했다.
학부 때는 거의 써본적 없던 걸, 누구한테 배움 없이 온전히 맨땅에 박치기로 sci 2개를 쓸 정도는 되었으니.

나중에 보니 어떤 네이버맨이 비슷한 고민을 하고 나름의 답을 내렸던것 같다.
(레벨 3이랑 레벨 4랑 바뀐것 같은데)

실제로 나는 매우 오만하게도 전국에서 r쓰는 사람들 쭉 줄세워 놓으면 그 중에서 100등 안에는 들어갈 것이라는 생각을 늘 했고,
어쩌면 앞으로도 계속 그러고 살았을지도 모른다.


지금 내 머리를 산발로 만들고 있는 것 중 하나는,
데이터의 전처리후, 통계치에 따라서 선택, 분석, 시각화하는 프로그램이다.

저번주에 완성 시킨 프로토타입에서는, 20000 * 90 사이즈 예시 데이터를 사용했던지라.
3분 정도 시간이 걸려서 결과물이 짜잔 나왔었고, 그나마 온갖 똥꼬쑈 끝에 1분 정도로 시간을 타협 할 수 있었다.

실제 데이터는 90 이 아니라 몇천 ~ 몇만 단위가 올 수도 있으니,
3k 짜리 데이터를 구해서 돌려봐라 라는 주문이 들어왔고, 당연히 될 줄 알았다.

왠 걸 데이터 선택 분석은 둘째치고 전처리에서 몇 분이 먹히는걸 보면서 반나절을 꼬박 부었고

마침내 원피스에 숨겨진 솔루션을 찾았다

가장 먼저 막혔던 전처리는

  • 데이터의 row별로
  • 작은 값(1)을 더한 뒤, (아래 log에서 0 으로 나누는걸 방지)
  • median을 뽑아서 그 값으로 나누고,
  • log를 박는것.

진짜 간단한 내용이어서 이게 왜 오래 걸리는 지 아직도 잘 모르겠다. 아무리 사이즈가 커도 그렇지.

기존에 했던 내용 :

for( i in 1:nrow(v)){
  v[i,] <- log( (v[i,] + 1) / median(v[i,]) )
}

수정 내용 :

v <- v + 1
meds <- apply(v, 1, median)
v <- log(sweep(v,1,mes,'/'))

sweep이라는 함수를 써본적도 없고 본적도 없는데, 심지어 새로운 어떤 패키지에 있는 내용인가 찾아봤는데 그것도 아닌 base에 딸린 함수였다. 이런 갓함수도 몰라뵈다니 실망스럽다. 앞으로 matrix 계산에 자주 애용해야지

이전내용이 너무 오래걸려서 벤치마킹 테스트 조차 안 됐지만, 몇분 vs 몇초 면 거의 100배 이상은 차이 나는 것 같다. 대성공

배움엔 끝이 없다, 그리고 나는 r 레벨 3.5다 이제 .

Updated:

Comments