Booking.com 에서의 축차 검정 (Sequential Testing)
원문: Sequential Testing at Booking.com
원문: RStudio Projects and Working Directories: A Beginner’s Guide by Martin Chan
이 글은 RStudio 의 Projects 의 사용과 폴더를 구조화하는 방법에 대한 기초적인 소개글입니다. 여러분이 여전히 setwd()
를 사용하고 있다면 읽을만한 가치가 있는 글이죠!
비록 R 에서의 작업 디렉토리가 꽤나 기본적이고 잘 다뤄진 주제이긴 하지만, 이를 구조화하는 저만의 방법을 공유하는 게 여전히 가치가 있을 것이라 느꼈습니다. 작업 디렉토리를 구조화하는 이성적이고 유요한 여러가지 방법이 명백하게 있긴 합니다. 이 글에서 다룰 프로젝트 디렉토리의 구조는 제가 매일 사용하고 있는 것이며, 메모리에 데이터셋을 읽고, 작업 디렉토리 안에 저장하는 것과 같이 제가 주로 다루는 데이터 분석 업무에 가장 적절하다고 생각했기 때문입니다.
만약 여러분이 이제 막 R 을 배우기 시작했다면 RStudio 의 프로젝트(Project) 를 사용하고 작업 디렉토리를 구조화하는 것은 ‘필수 요소’ 라는 것이 제 개인적인 조언입니다. RStudio 의 프로젝트를 사용하면 데이터를 읽고 내보는 작업에서의 수많은 초기의 어려움을 없앨 수 있습니다. 작업 디렉토리를 제대로 설정하는 것은 재현가능한 분석에 이바지하는 좋은 습관을 기를 수 있게 도와줍니다. 이는 제가 R 프로그래밍에서 코드와는 관계 없지만 알면 굉장히 유용하다고 생각하는 부분이며, 학습자에게는 틀림없이 GitHub을 사용하는 것보다 우선순위가 높다고 생각합니다.
몇 년 전 제가 처음 R 을 사용하기 시작했을 때, 작업 디렉토리를 설정하는 교과서와 주된 방법은 setwd()
를 사용하는 것이었습니다. 이는 파일의 절대 주소를 받아서 이를 R 프로세스에서의 작업 디렉토리로 설정하는 방법입니다. 그러고 나서 getwd()
를 이용해서 현재 작업 디렉토리를 찾고, 제대로 설정이 되었는지를 알 수 있습니다.
이 접근법의 문제점은 setwd()
함수가 파일의 절대 주소에 의존하기 때문에 링크가 깨지기 굉장히 쉽고, 다른 사람들과 분석 결과를 공유하기 굉장히 어렵다는 점입니다. 전체 디렉토리를 다른 드라이브의 하위 폴더로 옮기는 것 같이 간단한 행위로도 링크가 깨져서 여러분의 스크립트는 작동하지 않습니다. Jenny Bryan 이 지적했듯이 setwd()
방법은 원저자가 본인의 컴퓨터에서 직접 스크립트를 실행하는 게 아니라면 다른 모든 사람들은 이를 사용하는 게 거의 불가능하게 만듭니다.
setwd()
명령어가 저자를 제외한 다른 사람의 컴퓨터에서 제대로 작동할 확률은 0% 입니다. 심지어 1-2년 뒤에는 저자의 컴퓨터에서도 제대로 작동하지 않을 수 있습니다. 그 프로젝트는 독립적이지도, 휴대 가능하지도 않습니다. 이 그림을 다시 만들거나 확장하기 위해서는 운이 좋은 수신자가 본인의 컴퓨터에 맞게 하나 이상의 주소를 직접 수정해야 할 것입니다. 만약 과제 때문에 이틀 동안 이 짓을 73번 정도 하고 나면 그 사람의 컴퓨터를 불살라버리는 환상에 빠지기 시작할 겁니다.
(원문을 보려면 위의 링크를 누르세요)
처음에는 저도 setwd()
의 전통을 전부 버리는 급진적으로 보이는 행위에 회의적이었습니다. 하지만 프로젝트 워크플로우를 사용하고 나서 파일의 절대 주소를 사용하는 것을 더이상 생각해보지 않았습니다. 그래서 저는 이에 대해서는 Jenny Bryan 에 전적으로 동의합니다.
RStudio 프로젝트는 파일 주소를 상대적으로 만들어서 ‘깨지기 쉬운’ 파일 주소 문제를 해결했습니다. RStudio 프로젝트 파일은 .Rproj 확장자를 가진 루트 디렉토리 (root directory) 에 존재하는 파일입니다. 여러분의 RStudio 세션이 프로젝트 파일(.Rproj) 을 통해 실행되고 있는 동안은 현재 작업 디렉토리는 .Rproj 파일이 저장되어 있는 루트 디렉토리를 바라보고 있습니다.
예를 들어봅시다. 제 작업 디렉토리가 SurveyAnalysis1 이라는 이름의 폴더라고 가정해보죠. 전체 절대경로 주소를 C:/Users/Martin/Documents/Analysis/SurveyAnalysis1/Data/Data1.xlsx 와 같이 나열하는 대신 동일한 엑셀 파일을 Data/Data1.xlsx 와 같이 프로젝트를 사용하는 디렉토리 수준에서부터 참조할 수 있습니다. 만약 어느날 제가 SurveyAnalysis1 폴더를 다른 위치로 옮기거나 다른 컴퓨터에서 연다고 해도, 제가 .Rproj 파일을 이용해서 세션을 시작하기만 한다면 제 R 스크립트는 여전히 잘 작동할 것입니다.
이 .Rproj 파일은 RStudio 에서 File > New Project… 을 통해 만들 수 있으며, 특정 폴더 또는 디렉토리와 연계됩니다. 이제 그 디렉토리(전체 폴더와 하위 폴더, 그리고 모든 컨텐츠) 는 독립적이고 이동가능하다고 생각하시면 됩니다. 다시 말하면, 이 디렉토리 밖에서 파일을 읽거나 쓰면 안된다는 것입니다. 그 분석 또는 프로젝트와 관련이 있는 모든 것은 해당 디렉토리 안에서 일어나야만 합니다. 여러분의 분석이 웹 스크래핑이나 API 를 부르는 것처럼 인터넷 소스에서 불러오는 게 아니라면요. 존재하는 프로젝트를 열 때는 .Rproj 파일을 먼저 연 다음 R 스크립트(.R 확장자 파일) 를 열어야만 합니다. .Rproj 파일을 여는 것을 여러분이 이 세션에서 실행하는 모든 것이 해당 디렉토리 아래의 적합한 파일을 찾을 수 있도록 보장하는 RStudio 세션을 ‘시작하는’ 단계라고 생각하시면 됩니다. RStudio 에는 .RData 와 .Rhistory 파일에 대한 보다 많은 정보를 담고 있는 RStudio 프로젝트에 대한 보다 자세한 문서 가 있으며, 읽어볼 가치가 충분히 있습니다. R for Data Science 책의 8장 (Workflow: projects) 에는 RStudio 프로젝트에 대한 ‘처음 시작하는’ 가이드가 있습니다.
RStudio 프로젝트를 사용하는 것 외에도, 여러분과 협업하는 사람들, 또는 일부 분석을 재현하려는 미래의 본인이 쉽게 그 분석을 둘러볼 수 있도록 여러분의 디렉토리를 구조화하는 것 또한 좋은 습관입니다. 저는 아래의 기본적인 ‘시작’ 디렉토리 설정을 추천합니다.
여러분의 작업 디렉토리에 다음과 같은 것들이 있어야 합니다.
source()
를 사용하는 워크플로우가 같이 따라오게 됩니다.{here}
패키지와 그 워크플로우를 사용하기를 권장합니다. 그게 아니라면 knitr::opts_knit$set(rood.dir = "../")
를 사용해서 작업 디렉토리가 RMarkdown 파일이 저장된 하위 폴더가 아니라 루트 디렉토리라는 것을 알려주는 이 코드를 셋업 구문에서 실행시켜주셔도 됩니다({here}
를 쓰는 것만큼 이상적이지는 않습니다). 제 다른 글에서 다수의 RMarkdown 파일들을 하나의 긴 RMarkdown 문서로 합치는 디렉토리 구조에 대해서도 다룬 적이 있습니다.timed_fn()
은 파일명에 타임스탬프를 만들어주는데, 반복적인 분석을 하는 경우에 결과물을 잃지 않도록 하기 위해서 종종 사용합니다.이 디렉토리 구조 ‘템플릿’ 은 프로젝트 워크 플로우가 생소하신 분들에게 프로젝트를 정리하는 좋은 시작점이 될 것입니다. 비록 일관성을 가지는 것이 좋다고는 하지만 프로젝트마다 필요한 부분이 다를 수 있습니다. 그러므로 여러분은 항상 어떤 것이 필요한지, 작업 디렉토리 구조를 설정할 때 어떤 일이 벌어질지를 항상 생각하시고 적절하게 변형하시기 바랍니다.
크리스 폰 체펄베이 (Chris Von Csefalvay) 도 R 프로젝트를 구조화할 때 고려할 사항에 대해 자세한 가이드를 제공해주는 R 프로젝트 구조에 대한 좋은 글 을 썼습니다. 그는 각 프로젝트마다 (루트 디렉토리에) README 파일을 둘 것을 제언하였고, 더욱 복잡한 프로젝트일수록 특히 중요할 것이라고 했습니다.
늘 그렇듯이 여러분의 피드백, 댓글, 그리고 질문은 항상 환영합니다! 이 글이 마음에 드셨다면 https://martinctc.github.io/blog/ 에서 다른 글도 확인해주시기 바랍니다.
전에 다니던 회사에서 다른 사람들이 짜놓은 R 코드를 받아서 쓸 일이 있었는데 이 글에서 나온 폴더 구조는 어느 정도 고려는 되었지만 프로젝트 기능을 사용하지 않아서 다른 폴더나 컴퓨터로 옮기면 전체 프로세스가 와장창 깨지는 식이었다. 그래서 개선 작업을 하면서 주로 신경 썼던 부분이 그것이었고, 마침 이 글에서도 나왔던 Jenny Bryan 의 글을 보고 프로젝트 (Project) 에 대해서 알게된 후 적용했었고 아직까지도 프로젝트는 아주 잘 쓰고 있다 (전 회사의 코드가 아직까지 잘 돌아가는지는 잘 모르겠지만).
한동안 파이썬을 Jupyter Notebook, Google Colab 에서 사용하면서 셀 단위 실행에 익숙해졌고, R 로 넘어와서도 RMarkdown 에서 주로 작업을 했다. 보기는 편한데 전체를 실행하는 경우라면 데이터를 추출해오는 작업을 또 실행해야 해서 시간이 오래 걸리는 단점이 있었다. 그런데 이 글에서 말한 것처럼 분석 자체는 .R 파일에서 하고 RMarkdown 은 결과물을 가지고 분석 리포트를 만들기 위한 툴로만 사용하면 굉장히 시간을 단축시킬 수 있을 것 같다.
뿐만 아니라 지금은 분석 단위마다 별도의 프로젝트를 만들어서 진행하는데 20개 정도가 넘어가다보니 많이 헷갈리는 게 사실이다. 특히 재사용하는 DB 연결 관련 스크립트를 매번 가져와야하는데 여기서의 폴더 구조를 적용하면 그런 작업이 많이 줄어들지 않을까 싶다.
원문: Sequential Testing at Booking.com
가장 좋은 방법은 당연히 영어 밖에 사용하지 못하는 환경에 강제로 처해지는 것이겠지만 그것이 어려우니…
고민의 흔적을 보여주세요
을 찾습니다.
원문: Charts & Accessibility
모수, 큰 수의 법칙, 그리고 중심극한정리에 대하여
그리고 여러분들도 (아마도) 하지 않아야 하는 이유
회사 서비스의 추천 시스템을 개선하기 위해 팀 내에서 (아직까진 두 명이긴 하지만) 지난 두 달 동안 스터디를 진행했습니다. 얼마 전 두 번째 스터디가 끝났고 이에 대한 회고를 해보려고 합니다.
원문: Dark Side of Data: Privacy by Emre Rencberoglu
원문: RStudio Projects and Working Directories: A Beginner’s Guide by Martin Chan
원문: TidyTuesday GitHub Repository
원문: How programming languages got their names
원문: How to Make Meetings Less Terrible 팟캐스트: How to Make Meetings Less Terrible (Ep. 389)
생키 다이어그램 (Sankey Diagram) 은 흐름(Flow) 다이어그램의 한 종류로써 그 화살표의 너비로 흐름의 양을 비율적으로 보여준다.
2년 전 일본어로 책을 내긴 했지만 대부분의 독자들이 이 책을 읽을 수는 없을 것 같았다.
자기회귀 모형이란 무엇인가?
회귀분석을 실행하기 위해 필요한 가정과 조건들에 대해 알아보자.
통계적 검정과 회귀분석에서 자주 사용되는 정규성 가정과 정규성 검정에 대해 알아보자.
여러 통계 검정과 모형에서 사용되는 독립성 가정에 대해 알아보자.
시계열 모형 중 ARMA 모형에대해 알아보자.
시각화에서 주의할 점인 넓이를 표시하는 원칙에 대해 알아보자.
평균 양쪽의 z-값들 사이의 넓이를 구하는 방법에 대해 알아보자.
분산분석의 개념과 방법에 대해 알아보자.
분산분석(ANOVA; ANalysis Of VAriance) 와 회귀분석의 개념을 섞은 공분산분석(ANCOVA; ANalysis of COVAriance)에 대해 알아보자. 이 글을 이해하기 위해서는 아래의 글을 먼저 읽는 것이 좋다.
Akaike’s Information Criterion 의 정의와 이를 구하는 방법에 대해 알아보자.
수정된 R제곱과 그 용도에 대해서 알아보자.
통계 용어 중 정확도(Accuracy)와 정밀도(Precision) 에 대해서 알아보자.
절대 오차와 평균 절대 오차에 대해서 알아보자.
가설 검정이란 무엇이며, 가설 검정의 다양한 방법에 대해 알아보자.
회귀분석이란 무엇이며, 회귀분석 과정에서 사용하는 용어와 다양한 방법에 대해 알아보자.
이 글은 MathJax 를 GitHub Pages Jekyll blog 에 추가하는 방법을 다룬다. 이탤릭체로 된 부분은 본문에는 없고 제가 따라하면서 고치거나 추가한 부분이니 참고하세요.
모집단과 표본집단을 이용하는 경우 통계학에서 말하는 10% 조건이 무엇인지에 대해 알아보자.
여러분의 GitHub 블로그에 Jupyter notebook 을 바꿔서 올릴 수 있도록 도와줄 글입니다. 직접 바꾸는 방법은 1회성 글들을 위해서 추가했고, 변환 과정과 파일 이동, 그리고 여러분의 블로그에 올리는 것까지 한 번에 할 수 있는 자동화 bash 를 만드는 자세한 방법...
68 95 99.7의 법칙이란 무엇인가?
단위근 검정 방법 중 하나인 Augmented Dickey Fuller 검정에 대해 알아보자.
이 자료는 데이터 과학과 관련된 특정 주제에 대한 연재물이며, 다룰 주제는 다음과 같다. 회귀분석, 군집화, 신경망, 딥러닝, 의사결정나무, 앙상블, 상관관계, 파이썬, R, 텐서플로우, SVM, 데이터 축소, 피쳐 선택, 실험 계획법, 교차검증, 모델 피팅 등. 이 글을 계속 받...