1 데이터 과학 환경 1

데이터 과학에 필요한 프로그래밍 언어로 R과 파이썬이 경쟁을 한동안 했다면 이제 그 세월도 흘러 데이터 과학을 R과 파이썬을 적절히 잘 활용하는 시점으로 변경이 되었다. 데이터 과학에 필수적으로 요구되는 몇가지 구성요소로 다음이 있다. 프로그래밍 언어, 통합개발환경(코드 편집기), 버전 제어 및 형상관리, 공유와 협업이 대표적으로 요구되는 사항이다.

2 RStudio CLI + R + 파이썬

RStudio 통합개발환경 즉, 코드 편집기에서 파이썬을 연결하기 위해서는 Miniconda를 설치하여 파이썬과 파이썬 팩키지 관리자(conda)를 함께 설치한다. Git and Bash도 설치하여 윈도우에서 리눅스 터미널을 사용할 수 있도록 CLI 환경을 일치시킨다.

2.1 RStudio + R 2

RStudio와 R을 윈도우에 설치하는 것은 R을 설치하게 되면 RStudio에서 자동으로 인식해 RStudio와 R 설치는 CRAN R 최신 버전을 다운로드 받아 설치한다.

~/.bash_profile 파일을 편비하여 R이 설치된 경로를 지정하여 Git Bash 터미널에서 R을 실행할 수 있도록 한다.

# 경로에 R과 Rscript 추가
export PATH="/c/Program Files/R/R-4.0.2/bin/x64":$PATH

~/.bash_profile 작업을 통해서 Git Bash 터미널에서 R 경로명을 등록시켜 R을 Git Bash와 연결시키는 작업을 완수했다.

2.2 RStudio 터미널 + Git Bash

RStudio 터미널과 Git Bash 터미널을 연결시켜 두면 추후 생길 수 있는 터미널 혼선을 막을 수 있다. 이를 위해서 ToolsGlobal OptionsTerminal에서 Shell을 Git Bash로 설정한다.

  • New terminals open with: Custom
  • Custom shell binary: C:/Program Files/Git/bin/bash.exe
  • Custom shell command-line options: -l

상기 작업 실행결과 RStudio 터미널이 Git Bash 터미널로 일원화 되었다.

2.3 RStudio + 파이썬 3

미니콘다 Miniconda를 설치했기 때문에 파이썬과 팩키지 관리자(conda)가 동시에 설치가 되었다. 파이썬과 R을 연결해주는 팩키지가 reticulateinstall.packages("png")install.packages("reticulate") 명령어로 설치를 하게 되면 기본준비는 되었다. 이제 usethis::edit_r_profile 명령어를 R 콘솔에서 쳐서 .Rprofile 파일에 Sys.setenv(RETICULATE_PYTHON = "C:\\Users\\사용자명\\miniconda3\\python.exe")을 설정하여 파이썬을 돌릴 수 있도록 준비를 한다. 참고로 .Rprofile 파일은 ~/Documents/.Rprofile에 위치한다.

3 헬로 월드

python 코드 덩어리를 만들어 헬로월드를 찍어 R마크다운 문서에 파이썬을 실행할 수 있음을 확인한다.

print("Hello World! 2+3 = ", 2+3)
Hello World! 2+3 =  5

4 파이썬 데이터 과학

아나콘다가 아닌 miniconda를 기본 파이썬 엔진으로 사용할 경우 아나콘다에 포함된 팩키지들이 빠져있어 별도 설치를 해야 한다. pandas, matplotlib이 대표적인다.

4.1 파이썬 팩키지 관리자

파이썬 팩키지 관리자로 conda를 사용하는 경우 conda install 팩키지명을 사용하여 원하는 파이썬 팩키지를 설치할 수 있다. matplotlib의 경우 QT 의존성이 있어 pyqt5도 함께 설치한다.

conda install pandas conda install pyqt5 conda install matplotlib

QT를 설치한 후에 환경변수로 등록하는 작업이 함께 수반되어야 한다. 간단히 다음 코드를 사용해서 matplotlib 그래프를 그릴 때 사용하는 QT 라이브러리를 환경변수에서 참고하여 시각화시키는데 도움을 준다.

library(reticulate)

py_run_string("import os as os")
py_run_string("os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = 'C:/Users/사용자명/miniconda3/Library/plugins/platforms'")

5 타이타닉 R vs 파이썬

RStudio IDE 를 가지고 윈도우 10 환경에서 R과 파이썬을 데이터 과학 주 언어로 사용하는 사례를 살펴보자.

5.1 팩키지 불러오기

tidyverse에 대응되는 대표적인 데이터 과학 팩키지가 pandas다. import 명령어로 가져온다.

파이썬

import pandas as pd

R/Tidyverse

library(tidyverse)

5.2 데이터 불러오기

판다스 pd.read_csv() 메쏘드가 파일 데이터를 메모리로 불러읽어 데이터 과학 작업을 수행할 수 있도록 준비한다. tidyverse에는 read_csv() 명령어가 이에 상응한다.

파이썬

titanic  = pd.read_csv("data/titanic.csv")

R/Tidyverse

titanic_tbl <- read_csv("data/titanic.csv")

5.3 시각화

파이썬은 matplotlib 라이브러리를 통해 판다스 데이터프레임을 시각화한다. R은 ggplot으로 그래프 문법에 맞춰 시각화를 한다.

파이썬

titanic.plot.scatter(x='age', y='fare', alpha=0.3)

R/Tidyverse

titanic_tbl %>% 
  ggplot(aes(x = age, y = fare)) +
    geom_point(alpha = 0.3)

5.4 데이터 다루기

판다스 데이터프레임이나 R 티블(tibble) 데이터프레임은 직사각형 테이블 데이터이기 때문에 SQL 쿼리문에 대응되는 문법에 맞춰 데이터를 조작할 수 있다. 사례로 칼럼을 선택하는 경우를 비교해보자.

파이썬

titanic[["age", "fare"]]
          age      fare
0     29.0000  211.3375
1      0.9167  151.5500
2      2.0000  151.5500
3     30.0000  151.5500
4     25.0000  151.5500
...       ...       ...
1304  14.5000   14.4542
1305      NaN   14.4542
1306  26.5000    7.2250
1307  27.0000    7.2250
1308  29.0000    7.8750

[1309 rows x 2 columns]

R/Tidyverse

titanic_tbl %>% 
  select(age, fare)
# A tibble: 1,309 x 2
      age  fare
    <dbl> <dbl>
 1 29     211. 
 2  0.917 152. 
 3  2     152. 
 4 30     152. 
 5 25     152. 
 6 48      26.6
 7 63      78.0
 8 39       0  
 9 53      51.5
10 71      49.5
# ... with 1,299 more rows

칼럼이 아니고 행을 필터(filtering)를 걸어 추출하는 사례를 살펴보자. 예를 들어 나이가 70 이상인 타이나틱호 승선인을 추출해보자.

파이썬

titanic[titanic["age"] > 70]
      pclass  survived  ...   body                home.dest
9          1         0  ...   22.0      Montevideo, Uruguay
14         1         1  ...    NaN            Hessle, Yorks
61         1         1  ...    NaN  Little Onn Hall, Staffs
135        1         0  ...    NaN             New York, NY
727        3         0  ...  171.0                      NaN
1235       3         0  ...    NaN                      NaN

[6 rows x 14 columns]

R/Tidyverse

titanic_tbl %>% 
  filter(age > 70)
# A tibble: 6 x 14
  pclass survived name  sex     age sibsp parch ticket  fare cabin embarked
   <dbl>    <dbl> <chr> <chr> <dbl> <dbl> <dbl> <chr>  <dbl> <chr> <chr>   
1      1        0 Arta~ male   71       0     0 PC 17~ 49.5  <NA>  C       
2      1        1 Bark~ male   80       0     0 27042  30    A23   S       
3      1        1 Cave~ fema~  76       1     0 19877  78.8  C46   S       
4      1        0 Gold~ male   71       0     0 PC 17~ 34.7  A5    C       
5      3        0 Conn~ male   70.5     0     0 370369  7.75 <NA>  Q       
6      3        0 Sven~ male   74       0     0 347060  7.78 <NA>  S       
# ... with 3 more variables: boat <chr>, body <dbl>, home.dest <chr>

5.5 파이썬 객체 R 함수

마지막으로 titanic은 파이썬 객체로 이를 py$ 방식으로 R에서 인식하기 때문에 시각화 함수로 ggplot을 사용하게 되면 파이썬의 장점과 R의 장점을 함께 사용할 수 있다.

py$titanic %>% 
  ggplot(aes(x = age, y = fare)) +
  geom_point(alpha = 0.5) +
  labs(x     = "탑승객 나이",
       y     = "탑승객 지불요금",
       title = "타이타닉 탑승객 나이와 요금에 대한 산점도") +
  theme_light(base_family = "NanumGothic")

 

데이터 과학자 이광춘 저작

kwangchun.lee.7@gmail.com