Blog

  • 시계 알고리즘 구현

    시계 알고리즘 구현

    D-day 기능과 NTP를 통한 시간의 동기화 기능이 구현된 시계가 있었으면 좋겠다고 예전부터 생각’만’ 하고 있다가 라즈베리파이로 구현해 보기로 마음을 먹었다.

    라즈베리파이에서도 R이 구현 가능할 것 같기는 했는데, 그 보다도 액정에 글을 뿌려주는게 python 으로 구현되어 있는걸 쓰는게 일반적인듯 했다. 그래서 python 으로 구현해야만 했다.

    R과는 조금은 다른 문법 구조와 체계 때문에 인터넷 검색을 여러번 해본 끝에 비슷하게 구현하는데 성공했다. 이제 남은 것은 코드를 조금 더 최적화시키고, 생각해둔 기능을 추가로 구현시켜서 쓰는 것이다.

  • 두 항목 비교 함수 만들기

    필요는 발명의 어머니라고 누가 말했던가..

    병리과 논문 뿐만이 아니라, 대부분의 연구에서는 두 그룹사이에서 각종 인자의 비교가 필수적이다. 병리과에서는 대부분의 인자가 2개 혹은 그 이상의 ordinal factor 로 구성되어 있다. 그렇다는 것은 chi-squre 검정을 선택하던가 혹은 fisher 검정을 선택해서 검사를 시행하여야 한다는 것을 의미함. 

    처음에 함수 구성은 비교 항목을 나열하고 그에 따라서 비교하는 부분을 일일이 넣어줬다. 그다지 나쁜 방법은 아니지만, 변경이 있을 경우에 일일이 고쳐줘야 하며 빼먹는 부분도 생기게 마련이다. 그래서 두 항목의 비교만을 다루는 함수를 사전에 만들고, 그 다음에는 각각의 비교 인자에 따라서 비교를 시행하는 함수를 하나 더 만드는 방법으로 시행하기로 하였다.

    여러번 분석을 하다보니 한 줄(column)이나 열(row)에 0으로 가득찬 값이 있으면 통계 분석을 시행하지 못하고 오류메세지와 함께 비교 과정이 중단되기 때문에 이에 대한 것을 확인하는 과정이 필요했다.

    반복구문이 많아지면 실행 속도가 느려지기는 하지만, 뭐 그렇게 CPU나 나쁜 것도 아니고, 내가 복잡한 계산을 수행하는 것도 아니기 때문에 반복 구문을 최대한 활용하기로 하였다.

    compare.fun <- function(parameter.1, parameter.2){

      A <- parameter.1

      B <- parameter.2

    #Matrix 의 Cell 숫자

      cell.number <- nrow(table(A, B)) * ncol(table(A, B)) 

    #한 줄 혹은 한 열에 0 으로 가득찬 경우가 있으면 find.0 라는 값에 1을 더하기.

      find.0 <- 0

      for (X in 1:nrow(table(A, B))){if (length(which(table(A, B)[X, ] == 0)) == ncol(table(A, B))) {find.0 <- find.0 + 1}}

      for (X in 1:ncol(table(A, B))){if (length(which(table(A, B)[, X] == 0)) == nrow(table(A, B))) {find.0 <- find.0 + 1}}

      

    # 한 번이라도 0으로 가득찬 경우가 있으면 일단 계산 수행은 안하는 것으로, 그렇지 않을 경우 계산 수행. Fisher 검정의 조건을 만족하면 Fisher 검정을 그렇지 않다면 chi-squre 검정 수행. 각각의 검정 수행 후 correlation 검사 수행.

      ifelse(find.0 > 0, NA, 

        if (length(which(table(A, B) <= 5)) > 0 & (length(which(table(A, B) <= 5)) / cell.number >= 0.25)) {

          print(fisher.test(A, B))

          print(cor.test(A, B, method=”spearman”))

          } else {print(chisq.test(A, B, correct=FALSE))

                  print(cor.test(A, B, method=”spearman”))

          }

        )

    # 사실 함수 내부에서 만든 값은 내부에서만 사용되기 때문에 다음의 항목은 필요없지만 그래도 넣었음.

      rm(A, B, cell.number, find.0)

    # 중간에 여러줄을 띄우면 구분이 쉽다.

      cat(rep(“\n”,3))

    }

  • 빅데이터 분석 도구 R 프로그래밍

    빅데이터 분석 도구 R 프로그래밍

    시대의 화두인 빅데이터. 관련 책을 하나 도서관에서 빌려 보았다. 그런데 빅데이터를 취급하지 않으니, 별로 와닿지는 않는다. 훑어본 결과 뒷부분에 있던 최적화와 관련된 내용이나 다중 프로세서의 사용이 더 와닿았음.

    최적화와 관련된 것은 아니지만, 속도 향상을 위해서는 벡터를 적극적으로 이용해서 계산을 하는 것이 좋다는 것이 있었음.

    다중 프로세서의 사용은 도대체 무슨 말인지 잘 모르겠음. 다만 핵심은 어떤 프로그램을 사용하던지 간에 일을 쪼개는게 필요한데, 이게 쉽지는 않다는 것이다. 내가 예전에 시도했던 방법은 정적 분산 컴퓨팅의 개념에 가깝다는 것은 확인할 수 있었다. 그 때에는 4등분 시켜서 하나의 터미널에서 실행 시켰는데, 그것도 분산 컴퓨팅의 하나의 방법인 정적 분산 컴퓨팅이 었다.

    필요한 부분을 스크랩해서 천천히 분석해가면서 읽어보면 될 듯 함.

  • 첫인상은 항상 배신한다.

    첫인상은 항상 배신한다.

    도서관 범죄학 책장에 있던 책으로 기억한다. 제목을 보고 있으니 재미있을 것 같아서 선택한 책. ‘크리미널 마인드’로 유명한 FBI 행동 분석반(BAU) 출신의 저자가 쓴 책이다. 범죄에 사용되곤 하는 프로파일링 기법을 일상 생활에서 이용하기를 바라는 마음에서 썼다고 한다.

    제목에서 나와 있듯이 선입견에 아주 중요한 역할을 하는 첫인상의 맹점에 대하여 다루고 있다. 그 뿐만 아니라 이성적인 사고 방식을 키워주는데에 도움이 되는 내용이 많이 있다. 내용도 어렵거나 잔혹하지 않음. 읽어보면 도움이 될 책이라고 생각한다. 

    ‘전과가 있습니까?’ 라는 질문에 대한 반응이 아주 도움이 된다는 저자의 팁은 적용해 볼만한 듯.