Motivation

얼마 전부터 R Shiny로 뭔가를 만들어보고 있다. 데이터 분석가로 커리어체인지를 준비하고 있는데, 현업에서 다루는 고객조사 데이터는 크기도 작고 성질이 많이 달라 포트폴리오가 꼭 필요해서다.

사실 내 경우는 동작하는 프로토타입보다는, 전처리 과정에서의 기본기와 탐색적 분석에서 얻어내는 인사이트 등을 보고서로 정리하는 게 가장 좋다. 그래서 원래는 Rmarkdown이나 Python Notebook을 사용해 포트폴리오를 만들 생각이었다.

그런데 Public으로 공개된 BigQuery dataset을 둘러보다가 US names라는 데이터셋을 보고 꽂혀버렸다. 미국에서 1910년부터 현재까지의 각 연도별 아기 이름과 빈도수를 담은 것인데, 나의 가려웠던 부분을 긁어줄 수 있는 데이터라 웹 애플리케이션으로 만들어보고 싶어진 것이다.

내가 겪고 있던, 해결하고픈 문제는 이런 것이다.

  • 요즘은 회사에서 영어이름을 쓰는 경우도 늘고 있고, 글로벌 업무를 하려면 영어이름이 있는 게 편하다.
  • 그런데 전에 쓰던 영어이름인 Jenny는 왠지 너무 올드한 것 같다.(마치 Mary나 John같은 느낌?…철수..영희..)
  • 지금 페북에서 닉네임으로 쓰는 Jessy는 한국어로 부르기 불편하다.(제시님..?)
  • 영미권에서 내 나이대에 어색하지 않고도 조금은 어려 보이는, 한국어로도 부르기 쉬운 영어 이름을 새로 짓고 싶다.


이런 니즈가 있다 보니, 저 데이터셋을 봤을 때 구미가 당겼다. 그래서 비슷한 필요를 가진 사람도 사용할 수 있게 웹애플리케이션으로 만들어 보기로 했다.

데이터와 관련 자료를 보다 보면서 추가된 니즈는 다음과 같다.

  • 이름에도 지역색의 느낌이 있을까? 개인적 취향은 서부 > 동부 > 중부 > 남부 순이다. 가급적 서부/동부적 이름을 짓고 싶다.
  • 유대계 이름은 피하고 싶다. 영미권 사람에게 어떤 이미지를 주는지 정확히는 모르지만, 어쨌든 나는 유대계가 아니므로 내 이미지에 불필요한 왜곡이 끼지 않았으면 좋겠다.


무엇을 만들까?

내가 만들려는 애플리케이션은 다음과 같은 기능을 가진 것이다.

  • 출생연도와 성별을 선택하면, 해당년도에 많이 지어진 Rank 순으로 이름을 보여준다.
  • 뜨는 이름인지 옛날 느낌을 주는 이름인지, 앞뒤연도를 고려해 추세를 보여준다.
    • 각 이름을 클릭하면 1970년~최근까지의 추이를 보여준다.
    • 랭킹 테이블에서 요약값을 어떻게 보여줄지는 고민 중이다. (단순히 n년 전과 Rank 변화를 비교할지, 선형회귀를 써서 모델링을 해볼지)
  • 지역별 차이를 탐색해보고, 유의미한 차이가 있으면 보여준다.
  • 유대계 이름 표시

작업을 하다 보니 자꾸 아이디어가 떠올라서 제공하는 정보나 기능은 더 늘어날 수도 있을 듯하다. 위에 적은 건 구현하고 싶은 가장 기본적인 부분이다. 그 외에도 추가로 하고 싶은 작업은 Christine, Christina, Kristina, Kristen 등 발음이 유사하지만 철자만 조금 다른 이름들을 고려해서 결과값을 보여주는 것이다.


어떻게 만들 것인가?

Shiny는 웹 애플리케이션을 만들 수 있는 R 패키지다. 이걸로 대시보드를 만들 수도 있는데, 나처럼 Job을 구하는 입장에서는 포트폴리오를 만들기 꽤 좋은 듯하다. 개인적으로 서버를 구축하지 않고도 Rstudio의 호스팅 서비스를 이용해 쉽게 퍼블리시할 수 있기 때문이다.(http://www.shinyapps.io/)

무료 이용 시 한 url당 접속 시간이 제한되어 있다는 단점은 있다.


삽질 항목

지금까지 진도는 정말이지 미미하다. 삽질 때문이다. R 자체를 공부할 때는 Stackoverflow에서 왠만한 건 해결할 수 있었지만, Shiny는 체감상 자료가 좀 적은 편이다. 그래서 너무 기초적인 걸로 헤맸던 부끄러운 내용이지만 기록으로 남겨보려 한다. (Shiny를 왠만큼 다루시는 분들은 글 보고 뿜으실 수 있으니 조용히 패쓰해주시길 바랍니다)

  • 로컬 데이터를 읽어들일 수 있게 셋팅했다.
    도대체 이런데서 왜 삽질했는지 다음 글에서 다루기로 한다.
  • 출생연도를 선택하면 해당 연도의 이름만 보여주도록 구현했다.
    간단한 Rows filtering이지만, Shiny의 Reactive 함수를 제대로 이해하지 못해서 많이 헤맴. 속 터지는 줄.

단순히 R Shiny 튜토리얼만 보고 구현할 수 있는 부분은 제외하고, 수많은 구글링과 삽질이 필요했던 부분만 다뤄볼 생각이다.


다음글 : R Shiny로 포트폴리오 삽질기(2) : 로컬 데이터 읽어들이기