작성자: admin 작성일시: 2016-04-07 21:26:19 조회수: 3809 다운로드: 105
카테고리: 개발/운용 환경 태그목록:

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

데이터 분석을 위한 계산 환경의 변화

실제로 데이터를 수집, 저장하고 분석작업을 수행하는 것은 컴퓨터 프로그램이므로 계산 환경은 데이터 분석에서 가장 먼저 고려되어야하는 중요한 요소이다. 데이터 분석을 위한 계산환경이란 컴퓨터 하드웨어, 운영체제, 분석용 프로그램 등을 모두 통틀어 말한다. 아무리 많은 데이터와 좋은 분석 모형이 있어도 실제로 데이터 가공과 분석을 수행할 계산환경이 이를 받쳐주지 못한다면 아무런 소용이 없을 것이다.

최근 데이터 분석을 위한 계산 환경은 빠르게 변화하고 있으므로 우선 이러한 변화에 대해 알아볼 필요가 있다.

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

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

  • 과거의 데이터 분석 환경

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

    • 서버 컴퓨터
    • 리눅스 OS
    • 분석 프로그램 작성용 라이브러리
    • R/Python 등으로 분석 프로그램 작성
그림: 데이터 분석 환경의 변화

데이터 분석 환경의 변화

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

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

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

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

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

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

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

데이터 분석 환경의 구성

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

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

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

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

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

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

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

  • 최근의 데이터 분석 환경의 구성 예

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

리눅스

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

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

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

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

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

  • 리눅스

    • 페도라 계열

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

      • 우분투
  • BSD

    • freeBSD
    • netBSD
    • 매킨토시 OS X

도커 Docker

리눅스 기반의 운영에서 빠질 수 없는 것이 도커(Docker) 서비스이다. 도커는 리눅스에서 사용가능한 운영체제 수준의 가상화 서비스이다. 보통 컨테이너 서비스라고 불린다.

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

이와 달리 도커는 리눅스 커널을 공유하는 운영체제 수준의 가상화 서비스이므로 VirtualBox와 같이 서로 다른 운영체제를 가동하는 것은 불가능하지만 게스트 프로세스도 호스트 프로세스와 같은 속도와 성능으로 움직이며 가상화 프로세스를 시작하거나 종료하기 위한 추가 부담도 거의 없다.

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

  • Docker

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

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

저자는 R과 파이썬(Python) 기반으로 모든 분석 환경을 갖춘 datascienceschool/rpython 이라는 도커 이미지를 도커 허브(docker hub)라는 인터넷 사이트를 통해 제공하고 있다. 이 도커 이미지만 설치하면 추가적인 소프트웨어 설치 없이 여기에서 사용하는 모든 예제 코드를 바로 실행할 수 있다.

datascienceschool/rpython 를 설치하고 사용하는 방법은 다음 절을 참조한다.

데이터 분석용 프로그래밍 언어

데이터 분석에는 다양한 언어들이 사용된다. SAS, SPSS, Stata, Minitab, Weka, S, R 등 데이터 분석을 위한 전용 프로그램이나 언어 뿐 아니라 C, C++, 자바(Java), 스칼라(Scala), 루아(Lua), 파이썬(Python) 등 범용 언어도 많이 사용된다. 데이터 분석 목적으로만 보자면 사용자 기준으로 가장 많이 사용되는 언어가 R과 파이썬이다.

R

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

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

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

  • R

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

    • 장점

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

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

파이썬

여기에서는 파이썬을 기준으로 모든 내용을 설명한다.

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

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

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

  • 파이썬

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

    • 장점

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

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

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

      • 느린 속도

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

아나콘다 배포판 기반으로 파이썬을 설치하고 사용하는 방법은 다음 절에서 자세히 설명한다.

질문/덧글

사용자에 의해 삭제되었습니다. hdba*** 2016년 12월 23일 6:59 오후

사용자에 의해 삭제되었습니다.

답변: os 관련 질문드립니다. 관리자 2016년 12월 23일 9:56 오후

데이터 분석 및 머신러닝과 관련된 대부분의 신규 라이브러리가 리눅스를 기반으로 나오는 경우가 많으므로 리눅스를 사용할 것을 추천합니다.

증권사 API를 통해 빅데이터 분석을 하려고 할 때 리눅스로 하면 불편함은 없는 지 궁금합니다. ukeb*** 2017년 1월 13일 7:10 오후

선생님 안녕하세요. 선생님의 파이썬 데이터 사이언스 강의를 들은 뒤 호기심이 생겨 열심히 따라해 보고 있는 개인 투자자입니다. 먼저 이런 사이트를 통해 귀중한 경험과 지식들을 배울 수 있게 해주신 점 진심으로 감사드립니다. (_ _)

현재 증권사 API를 통해 자료를 수집하고 분석하는 일을 고려해 보고 있는데요. 증권사 API의 경우 대부분 COM을 이용해서 만드는 걸로 알고 있는데, 리눅스를 사용할 때 충돌은 없을 지 궁금합니다. 현재 파이썬으로 증권사 API를 이용하는 코드를 짜고 있거든요. 저같은 초보자들은 언어나 환경을 바꾸는 일이 상당히 버거운 일이라 이렇게 질문을 드립니다.

API를 통해 각종 데이터를 수집하고 저장한 뒤 R이나 파이썬을 통해 불러와 투자 아이디어를 찾고 싶은데요. 생각보다 가야할 길이 머네요. 그래도 선생님과 같이 어깨를 빌려 주시는 거인들 덕분에 더 먼 곳을 그려볼 수 있는 듯 합니다. 항상 감사합니다.

답변: 증권사 API를 통해 빅데이터 분석을 하려고 할 때 리눅스로 하면 불편함은 없는 지 궁금합니다. 관리자 2017년 1월 15일 12:57 오후

현재 리테일 고객에게 리눅스용 API는 제공하는 증권사는 없는 것으로 알고 있습니다. 증권사 API를 사용하시려면 윈도우즈를 사용하는 방법밖에 없습니다.