데이터 분석을 위한 환경 설정

데이터 분석 환경의 변화

데이터 분석을 공부하거나 현실의 데이터를 분석하기 위해서는 실제로 분석작업을 수행하는 컴퓨터 프로그램이 있어야 한다.

과거에 주로 사용하던 데이터 분석 환경은 개인용 데스크톱 컴퓨터의 윈도우즈 OS(운영체제) 위에 이미 완성된 형태의 특정 분석 전용 애플리케이션(프로그램)을 설치하고 이 애플리케이션의 GUI 혹은 명령어 메뉴를 사용하여 특정한 분석 기능을 구동하는 방식으로 분석을 수행하였다.

현재에는 리눅스 OS기반의 서버 컴퓨터에서 분석 프로그램 작성용 라이브러리를 설치하고 분석하고자 하는 사람이 이 라이브러리의 함수등을 사용한 R 혹은 Python 프로그램을 직접 작성하여 프로그램 실행을 통해 분석을 수행하는 방식으로 변화하고 있다.

  • 과거의 데이터 분석 환경

    • 개인용 데스크톱 컴퓨터
    • 윈도우즈 OS
    • 특정 분석 전용 애플리케이션
    • GUI 메뉴로 분석 실행
  • 현재의 데이터 분석 환경

    • 서버 컴퓨터
    • 리눅스 OS
    • 분석 프로그램 작성용 라이브러리
    • R/Python 등으로 분석 프로그램 작성

분석 환경이 이렇게 변화하는 이유는 무엇일까?

우선 분석하고자 하는 문제와 요구사항이 다양해지고 있다는 점이다. 메뉴나 명령어 방식으로 수행되는 전용 분석 애플리케이션의 경우 보통 풀고자 하는 문제의 목표 및 자료, 결과물의 형식 등이 미리 정해져 있고 여기에 따라서면 분석을 수행할 수 있다. 만약 분석하고자 하는 문제가 약간이라도 원래의 문제에서 변형된 형태이거나 결과물을 다른 형식으로 표현하는 것이 쉽지 않다.

두번째로 분석의 주체가 달라지고 있다. 과거에는 자료분석은 사람이 하는 일이었다. 사람이 컴퓨터 키보드를 사용하여 분석 프로그램을 가동하고 자료를 입력하고 모니터에 나타난 결과물을 눈으로 살펴봄으로써 자료에 대한 인사이트(insight)를 얻는 것이 분석의 최종 목표였다. 그러나 이제는 분석의 주체가 사람이 아닌 프로그램 혹은 시스템이 되어가고 있다. 실제 어떤 업무를 처리하는 프로그램이나 시스템이 업무 처리과정에서 필요한 분석 결과를 실시간으로 얻기 위해 분석가가 만든 분석 프로그램을 수행시키고 그 결과를 얻어가서 업무에 적용한다. 즉, 분석을 포함한 전체 업무 프로세스를 컴퓨터 프로그램이 자동으로 수행하게 된 것이다.

분석 프로그램이 실행되는 기반이 데스크탑과 윈도우즈 OS가 아닌 서버와 리눅스 OS가 된 것도 이러한 이유이다. 대부분의 실제 업무처리 시스템이 리눅스 OS가 설치된 서버위에서 돌아가기 때문에 원활한 연결을 위해 분석 프로그램도 같은 하드웨어나 OS위에서 돌아가는 것이 자료 처리나 시스템 연동에 좋기 때문이다.

  • 분석하고자 하는 문제 및 요구 사항의 다양화

    • 문제의 형식이 달라지면 전용 분석 애플리케이션 사용이 어려움
    • 결과의 표현 방식 등에 대한 요구 사항의 변화에 적응이 힘듬
  • 분석의 주체가 사람이 아닌 프로그램으로 변화

    • 사람이 아닌 기존 업무 프로그램이 분석 프로그램을 호출하여 결과 획득
    • 기본 업무 프로그램과 같은 환경에서 작동해야 함

데이터 분석 환경의 구성

그럼 최근의 데이터 분석 환경은 구체적으로 어떻게 구성되어 있을까.

우선 하드웨어의 경우 데스크톱과 서버의 구분은 분석가에게 실질적으로 큰 차이가 없다고 봐도 된다. 서버용 컴퓨터는 데이터 센터에 물리적으로 컴퓨터를 장착하기 위한 규격, 전원을 내리지 않은 상태에서 장시간 운영하기 위한 규격 등이 다르기 때문에 최종 사용자에게는 그 차이가 크게 와 닿지 않을 것이다.

다만 서버는 대부분 사용자가 직접 접속하지 않기 때문에 X-Window와 같은 그래픽 유저 인터페이스는 가동시키지 않으며 보통 콘솔/터미널을 사용하여 텍스트 기반으로 운영한다. 차트나 플롯이 포함된 그래픽 유저 인터페이스가 필요한 경우에는 웹 서버를 가동하여 사용자 웹 브라우저에서만 보여주는 것이 보통이다.

OS 즉, 운영체제는 조직의 목표에 따라 다양하다. 금융권과 같이 확고한 신뢰성이 요구되는 경우에는 아직도 메인프레임이나 유닉스를 사용하고 있지만 중소형 사업체의 경우 비용 절감을 위해 리눅스를 사용하는 경우가 많다.

분석 라이브러리는 기존에는 SAS, SPSS, S+ 등을 많이 사용하였으나 최근 오픈 소스이자 무료인 R 또는 Python을 사용하는 경우가 많다. 특히 최신의 머신 러닝이나 기타 분석 라이브러리는 대부분 Python을 지원하기 때문에 Python은 데이터 분석 환경 구성에서 필수적이라고 할 수 있다.

또 데이터의 용량이나 처리 수준이 한 대의 컴퓨터로는 불가능한 정도로 커지는 경우가 많아지면서 클러스터(cluster)를 사용한 분산 컴퓨팅(distributed computing) 환경이 필요하다. 딥 러닝(deep learning)과 같은 고용량의 처리가 필요한 경우에는 CPU가 아닌 GPU(그래픽 처리 유닛)를 사용한 처리가 필요할 수도 있다.

이러한 분석 환경을 개인이나 조직내에 자체적으로 갖추는 것은 비용이 많이 들기 때문에 최근에는 아마존과 같은 대규모 데이터 센터가 제공하는 클라우드 서비스를 사용하는 경우에는 사용 방식에 따라 설치 및 운영 비용을 획기적으로 절감할 수 있다.

  • 데이터 분석 환경의 구성

    • 텍스트 기반의 콘솔/터미널 환경
    • 리눅스 운영체제
    • R/Python 프로그래밍 환경
    • 클러스터 분산 컴퓨팅
    • GPU 사용
    • 클라우드 서비스 사용

리눅스

리눅스(Linux)리누스 토르발스가 개발한 커널을 기반으로 하는 운영체제를 말한다. 포직스(POSIX) 커널에 호환되며 기존에 유닉스 시스템에서 사용하던 대부분의 운영체제 구성요소를 사용할 수 있기때문에 오픈 소스에 무료이므로 원가 절감이 요구되는 기업 환경에서 많이 사용되고 있다.

리눅스 배포판(Linux distribution)은 리눅스 커널을 포함한 전체 운영체제를 말하며 다양한 배포판들이 존재한다. 그중 가장 많이 사용되는 것은 페도라 계열과 데비안 계열이다.

페도라 계열에서 가장 유명한 것은 레드햇 엔터프라이즈 리눅스(Red Hat Enterprise Linux, RHEL)로 유상 유지보수 서비스를 제공하기 때문에 국내 기업체에서 많이 사용하고 있다. CentOS는 레드햇 엔터프라이즈 리눅스와 완벽하게 호환되는 무료 버전이라고 볼 수 있다. 레드햇의 경우에는 유상 유지보수 서비스를 제공하기 때문에 커널이나 라이브러리 등 구성요소의 업그레이드에 굉장히 보수적인 경향이 있다. 예를 들어 C++11, 도커(Docker) 등의 라이브러리나 서비스는 국내에서 가장 많이 쓰이는 RHEL 6 버전에서는 돌아가지 않는다.

이와 반대로 개인 사용자 환경을 지향하며 지속적으로 커널 및 구성요소 업그레이드를 지향하는 배포판이 데비안 계열의 우분투 배포판이다. 따라서 최신의 라이브러리를 사용하고자 하는 경우에는 우분투 사용이 필수적이다.

리눅스 커널을 사용하지 않지만 포직스(POSIX) 커널에 호환되는 운영체제로 freeBSDnetBSD가 있다. 리눅스 커널을 사용하지 않기 때문에 정확히는 리눅스라고 부를 수는 없지만 보통 리눅스와 같이 취급되곤 한다. 국내의 경우에는 사용자가 많지 않지만 일본의 경우에는 두터운 사용자 층을 확보하고 있다. 매킨토시의 운영체제인 OS X는 FreeBSD를 기반으로 한다.

  • 리눅스

    • 페도라 계열

      • 레드햇 엔터프라이즈 리눅스
      • CentOS
    • 데비안 계열

      • 우분투
  • BSD

    • freeBSD
    • netBSD
    • 매킨토시 OS X

도커 Docker

리눅스 기반의 운영에서 빠질 수 없는 것이 도커(Docker) 서비스이다. 도커는 리눅스에서 사용가능한 운영체제 수준의 가상화 서비스이다. 보통 컨테이너 서비스라고 불린다. 도커는 흔히 하드웨어를 에뮬레이션하여 하나의 컴퓨터 위에 복수의 운영체제를 가동하기 위한 하드웨어 수준의 가상 머신과 비교된다. 오라클의 VirtualBox나 마이크로소프트의 Windows Virtual PC는 하드웨어 수준의 가상 머신으로 윈도우즈 운영체제 위에서 리눅스 운영체제를 가동한다거나 반대로 리눅스 운영체제 위에서 윈도우즈 운영체제를 가동하는 것이 가능하다. 이 때 원래의 운영체제를 호스트(Host)라고 하고 가상의 운영체제를 게스트(Guest)라고 한다. 게스트 운영체제는 하드웨어 수준에서 에뮬레이션하는 것이므로 속도 등의 성능이 급격하게 저하하고 프로세스를 시작하기 위해서도 게스트 운영체제의 부팅 과정을 거쳐야 하므로 가상 프로세스를 시작하거나 종료하는데 시간이 많이 걸린다.

이와 달리 도커는 리눅스 커널을 공유하는 운영체제 수준의 가상화 서비스이므로 VirtualBox와 같이 서로 다른 운영체제를 가동하는 것은 불가능하지만 게스트 프로세스도 호스트 프로세스와 같은 속도와 성능으로 움직이며 가상화 프로세스를 시작하거나 종료하기 위한 추가 부담도 거의 없다. 따라서 커널의 버전만 일치한다면 레드햇 리눅스에서 우분투를 사용하는 등의 일도 가능하다. 현재 도커는 리눅스 커널 3.10 이상에서 사용가능하다. 도커의 인기로 인해 레드햇 엔터프라이즈는 10년 이상을 고집하던 리눅스 커널 2.6 을 RHEL 7에서 3.10으로 업그레이드하였다.

도커는 클러스터/클라우드 서비스의 활성화와 함께 인기를 얻게 되었다. 리눅스 상의 어플리케이션을 설정하는 과정은 상당히 복잡하다. 그러나 도커 이미지를 사용하면 가상의 컴퓨터를 쉽게 클러스터/클라우드 상의 노드에 복제할 수 있고 코드를 공유하므로 운영 및 유지 보수 부담이 적다.

  • Docker

    • 운영체제 수준의 가상화 서비스 (컨테이너 서비스)
    • 리눅스 커널 공유 (커널 버전 3.10 이상)
    • 게스트 프로세스 운용시 성능 저하 없음
    • 다양한 배포판의 동시 사용 가능
  • 오라클 VirtualBox

    • 하드웨어 수준의 가상화 서비스 (가상 머신)
    • 하드웨어 에뮬레이션
    • 게스트 프로세스 성능 저하
    • 윈도우즈 위에서 리눅스 사용 가능

데이터 사이언스 스쿨에서는 R과 Python 기반으로 모든 분석 환경을 갖춘 datascienceschool/rpython 이라는 도커 이미지를 도커 허브(docker hub)에서 제공하고 있다. 이 도커 이미지만 설치하면 데이터 사이언스 스쿨에서 사용하는 예제 코드는 추가적인 설치없이 바로 실행할 수 있다.

datascienceschool/rpython 를 설치하고 사용하는 방법은 다음 노트북 문서를 참조한다.

[[school_notebook:22cc3845d45f4dc7b27828294fce3c93]]

[[school_notebook:03c5b5a96a614ee588a74f05c720e67c]]

R

R 언어(이하 R)는 통계 계산에 사용되는 S/S+ 언어와 호환되는 무료이자 오픈소스인 프로그래밍 언어이다. S 언어는 벨 연구소에서 1976년에 개발된 통계 계산용 언어로 현재까지 각종 통계 계산용 프로그램 개발에 활발히 사용된다. (참고로 가장 널리 쓰이는 프로그래밍 언어인 C는 1972년도에 개발되었다.)

R의 장점은 통계 계산에 최적화된 각종 자료형(data type)과 R로 만들어진 다양한 통계 패키지들이다. 예를 들어 R의 data.frame 자료형은 다차원 통계 자료를 위한 것으로 기존의 행렬 자료형과 달리 다차원 인덱스와 라벨을 지원한다. R은 사용이 간편하여 학계에서 새로운 통계 알고리즘을 프로토타입 형태로 구현할 때 많이 사용되었다. 따라서 대부분의 통계 분석 방법론이나 알고리즘에 대해 R 패키지가 존재한다. 2016년 4월 현재 공개된 R 패키지의 수는 약 8200개이다.(https://cran.r-project.org/web/packages/ 참조)

다만 R은 일반적인 프로그래밍 언어가 아니므로 독립 실행 애플리케이션을 제작한다던가 타 시스템과 연동하는 것이 어려울 수 있다. 또한 실행 속도가 느리므로 실시간 계산에 적합하지 않다.

  • R

    • S/S+ 언어와 호환되는 통계 계산용 언어
    • 무료, 오픈소스

    • 장점

      • 통계 계산에 최적화된 각종 자료형
      • 다양한 통계 패키지들
    • 단점

      • 느린 속도
      • 범용 언어가 아님
      • 타 시스템과의 연동이 어려움

Python

Python 언어(이하 Python)는 1991년 귀도 반 로섬(Guido van Rossum)이 개발한 범용 프로그래밍 언어이다. 스크립트 기반의 언어이고 플랫폼 독립적이므로 어떤 운영체제에서도 사용가능하며 객체 지향 및 동적 타이핑 특성을 가진다.

Python이 데이터 분석 언어로써 널리 사용되는 이유 중의 하나는 NumPy, SciPy, Pandas, scikit-learn, statsmodels 등 다양한 수치 해석 및 데이터 분석 라이브러리를 가지기 있기 때문이다. 또한 범용 언어로서 독립 실행 애플리케이션, 웹 서버 등의 개발이 용이하고 다른 프로그래밍 언어와 연동이 쉽다는 것도 파이썬의 인기 요소이다.

다만 R과 마찬가지로 스크립트 언어이기 때문에 실행 속도가 C/C++ 등의 컴파일 언어에 비해 일반적으로 느리다. 그러나 핵심 코드만 C언어등을 사용하여 개발이 가능하고 다양한 최적화 옵션이 존재하며 최근에는 Pyston, PyPy 등 JIT가 가능한 Python 구현도 개발되어 속도에 대한 부담이 점차 줄어들고 있다.

  • Python

    • 범용 프로그래밍 언어
    • 객체 지향, 동적 타입

    • 장점

      • 다양한 수치해석 및 데이터 분석 패키지들

        • NumPy, SciPy, Pandas, scikit-learn, statsmodels, 등
      • 독립 실행 애플리케이션, 웹 서버 개발 가능

      • 다른 프로그래밍 언어와 연동 용이
    • 단점

      • 느린 속도

정확히 말하면 Python이란 Python 스크립트 언어를 해석하여 실행할 수 있는 인터프리터 엔진을 말한다. 그러나 실제로는 구체적인 기능을 수행하는 패키지(라이브러리)가 함께 설치되어야 한다. 따라서 리눅스와 마찬가지로 패키지와 패키지 관리 유틸리티를 포함한 다양한 배포판이 존재한다. 2016년 현재 가장 널리 쓰이는 파이썬 배포판은 Continuum 사가 개발한 Anaconda이다.

Anaconda 기반으로 Python을 설치하고 사용하는 방법은 다음 노트북 문서를 참조한다.

[[school_notebook:5e52b7c4b5754f2585844c8d9b26cdb5]]

[[school_notebook:ab78f919fdb84e838039c674acba5650]]

[[school_notebook:5b02e79e8bc94275af5f16f2c7aad26a]]