데이터이야기

DB 노하우, 데이터직무, 다양한 인터뷰를 만나보세요.

3화- 파이선 사물인터넷 데이터 분석

데이터 이야기
작성자
dataonair
작성일
2015-02-25 00:00
조회
7275


파이선 사물인터넷 데이터 분석



지영민 (yangsamy@gmail.com) - 분당 야탑 영장산 산자락에 자리 잡은 전자부품연구원에서 마늘과 쑥을 먹으면서 곰에서 사람으로 환골탈태하여 세상 밖으로 나가기 위해 사물 인터넷 빅데이터 연구에 인고의 시간을 보내고 있다. 마음은 자유로운 영혼이나 자본주의의 노예에서 벗어나지 못함을 한탄하며 찾아올지 모르는 미래의 풍류낭 같은 인생을 꿈꾸며 오늘도 연구에 매진하고 있다.



이번 글부터 파이선(Python)을 통한 다양한 데이터 분석 기법을 소개하고자 합니다. 파이선은 오픈소스 스크립트 언어로 가장 널리 사용되고 있습니다. 이런 파이선 사용자의 증가와 함께 다양한 추가 라이브러리가 개발되었습니다. 그 중 데이터 분석에 필요한 라이브러리가 오픈소스로 개발되어 데이터 분석 개발자들이 활용할 수 있습니다. 이것이 바로 Scipy 와 Numpy 입니다.

본 글에서는 기본적인 파이선 스크립트 언어의 문법이나 특징을 다루지는 않을 것입니다. 따라서 필요하신 분들은 가급적 다른 경로를 통해 따로 파이선 언어를 배우셔야 할 것입니다.


SciPy와 Numpy 소개

Numpy와 SciPy는 파이선의 오픈소스 추가 모듈로 수치적 연산이나 수학적 분석을 하기위해 활용합니다. 이 모듈은 이미 컴파일이 된 형태로 제공되기 때문에 빠른 속도를 보장합니다. 이런 파이선 모듈은 대표적인 상용 소프트웨어인 MatLab과 버금가는 기능을 제공하고 있기 때문에 많이 사용하고 있습니다. Numpy는 패키지는 대용량 배열과 수 데이터를 처리하기 위한 기본 기능들을 제공하고 있습니다. SciPy 패키지는 Numpy 기능을 넘어 확장된 기능과 다양한 유용한 알고리즘을 제공하기 때문에 많이 사용합니다. SciPy의 지원 알고리즘은 퓨리에 변환, 회귀 분석, 최소화 등의 다양한 수학적 분석 기술을 제공합니다.


SciPy와 Numpy 및 matplotlib 설치

설치 내용을 자세히 다룰 수 없어 제가 직접 작업한 환경을 기반으로 설치 과정을 간단히 이야기하겠습니다. 우분투(Ubuntu) 배포판 14.04 버전을 기준으로 Python 2.7.4 상에서 SciPy와 Numpy 및 matplotlib를 설치를 설명하겠습니다. Matplotlib은 실제 데이터를 시각화하는데 필요한 그래프를 그리는 라이블러리입니다. 시각화를 통해 데이터를 보고 어떤 과정을 통해 데이터를 정제하고 분석하는지에 사용합니다.

파이선 추가 라이브러리 모듈을 우분투에서 제공하는 패키지 관리 프로그램인 apt-get 으로 쉽게 설치가 가능합니다. 윈도우즈나 다른 리눅스 환경에서 Numpy 및 SciPy 설치는 검색으로 찾아보시면 쉽게 설치방법을 구할 수 있습니다.


dbin_386.png

$sudo apt-get install python-numpy (엔터)

dbin_387.png

$sudo apt-get install python-scipy (엔터)

dbin_388.png
dbin_389.png

$sudo apt-get install python-matplotlib (엔터)


분석 데이터 다운로드

이번 글의 데이터 분석에 활용할 데이터를 준비해 두었습니다. 이 데이터는 학교 건물의 개별 교수방에 설치한 환경센서에서 취득된 데이터 중 일부를 추려 파일로 공유합니다. 아래 링크를 통해 다운로드 받으셔서 데이터 분석 이번 내용의 데이터 분석 예제를 따라하실 수 있습니다. 환경센서 데이터 중 이산화탄소(CO2)와 온도 데이터를 가지고 비교 분석하는 과정을 보시게 될 것입니다.

이산화탄소 데이터 다운로드
https://dataonair.or.kr/publishing/download/co2.log
온도 데이터 다운로드
https://dataonair.or.kr/publishing/download/temp.log

다운로드 받은 파일을 열어보면 아래와 같이 숫자 값들로 이루어진 2개의 컬럼 데이터를 보실 수 있습니다. 첫 번째 라인의 데이터는 각 데이터가 측정된 시간이고 단위는 유닉스 시간으로 되어 있습니다. 두 번째 라인의 데이터는 측정 값으로 이산화탄소의 경우 ppm 단위의 농도 값이고 온도는 섭씨 단위의 값으로 저장되어 있습니다.

유닉스 시간 / 값 (이산화탄소)
1422122406 341
1422122412 340
1422122416 341
1422122421 341
1422122426 342
1422122431 342
1422122437 344
1422122441 345
1422122446 343
1422122451 342
1422122457 341
1422122461 340
1422122466 339
1422122471 339
1422122477 340
1422122517 340
1422122521 341
…..


분석 데이터 시각화를 통한 데이터 이해하기

dbin_390.png

위 함수는 앞서 공유한 데이터 로그 파일을 읽어서 이를 메트릭스에 저장하는 역할을 하고 저장된 결과를 리턴으로 넘겨주게 되어있습니다. 함수 입력 파라미터로는 파일 명을 넣으시면 됩니다.


dbin_391.png

위 코드와 앞서 file2matrix 함수 코드를 co2_visualization.py 와 같은 파일에 동시에 저장하고 아 래 명령어를 통해 수행하면 아래 그림과 같은 그래프를 확인 할 수 있습니다.

$python co2_visualization.py (엔터)


dbin_392.png
dbin_393.png
dbin_394.png

위 코드는 추가적으로 온도 데이터를 읽어 시각화를 한 것이다. 기존 이산화탄소 데이터 구별하기 위해 그래프 선을 파란색으로 설정하여 표시하였습니다. 이를 실행하면 다음과 같은 화면을 볼 수 있습니다. 이 예제는 co2_temp_vis.py 파일로 저장하였습니다.

$python co2_temp_vis.py (엔터)


dbin_395.png

두 가지 데이터를 하나의 그래프에 표시하고 보니 데이터 값의 스케일이 달라 시각화를 해도 비교가 힘든 것을 알게되었습니다. 그럼 이번에는 y축을 하나 더 추가해서 스케일이 비슷해지게 데이터 시각화를 해보겠습니다.


dbin_396.png
dbin_397.png

이렇게 데이터를 스케일을 맞춰서 시각화 된 것을 보니 이제 데이터의 특성이 눈에 들어오기 시 작합니다. 우선 이산화탄소와 온도는 상관 관계를 가지고 비슷한 패턴을 보이고 있습니다. 이산화탄소가 증가하는 구간에서 온도도 같이 증가하는 경향이 보입니다. 이는 조그만 공간에 사람이 들어오면 몸에서 방출하는 열때문에 공간의 온도가 많게는 1도 정도 올라가는 것을 볼 수 있습니다. 또 사람은 호흡을 하면 산소를 흡입하여 이산화탄소를 방출하는데, 이로 인하여 공간내 이산화탄소의 농도가 올라가는 것을 볼 수 있습니다.

이렇게 시각화를 할 때 축을 서로 다른 축으로 두어 데이터 특성을 쉽게 비교할 수 있습니다. 이와 같이 데이터 분석 중에서는 데이터를 비교하기 전에 데이터 간에 일정한 규칙에따라 변형하여 이용하기 쉽게 만드는 작업을 합니다. 이런 작업을 정규화(Normalization)이라고 하는데, 다음 번에는 정규화를 거친 데이터를 통해 분석을 하는 작업을 설명 드리겠습니다.

예제를 직접 입력하는 귀차니즘이 오실 것을 예상해 코드도 아래 경로를 통해 다운로드 받아 실행해 보실 수 있습니다.

이산화탄소 시각화 코드
https://dataonair.or.kr/publishing/download/co2_visualization.py
이산화탄소 온도 시각화 코드
https://dataonair.or.kr/publishing/download/co2_temp_vis.py
두 가지 스케일 적용 시각화 코드
https://dataonair.or.kr/publishing/download/co2_temp_twoscale.py



출처 : 한국데이터베이스진흥원

제공 : DB포탈사이트 DBguide.net