어제는 파이썬의 그래픽 라이브러리 matplotlib의 간단한 예제를 살펴보았고 오늘은 파이썬 라이브러리 끝판왕 격인 데이터 분석 라이브러리 pandas에 대해 살펴보겠습니다.
Pandas 설명을 드리기 앞서 그 배경에 대해서 설명을 드리면, 보통 컴퓨터 프로그래밍에서 사용하는 자료를 담는 변수는 숫자, 문자(또는 문장)으로 나뉘고 컴퓨터의 연산 효율을 위해 숫자를 정수와 실수로 구분합니다.
하지만 이와 같은 int, float, string과 같은 자료형으로는 손쉽게 원하는 정보를 저장할 수 없기 때문에, 예전의 C언어 사용하던 80-90년대에서는 자료형 객체를 임의로 만들어 쓰곤 했습니다.
그중 가장 많이 사용하는 자료형은 리스트와 배열로 줄줄이 비엔나 쏘세지처럼 데이터가 순서를 가지고 연속으로 들어가 있는 구조입니다. 최근 우리를 열광하게 만드는 블록체인도 크게보면 리스트의 한 형태입니다.
비록 리스트나 배열이 기본적인 자료형보다 편할수는 있겠지만, 여전히 데이터를 마음대로 다루기에는 불편함이 큽니다.
사실 처음보는 사람도 편하고 익숙하게 사용할 수 있는 자료형은 엑셀과 같은 스프레드시트로 행과 열로 이루어진 테이블 형태입니다.
전통적인 통계 프로그램들에서는 이와 같이 테이블형 구조를 본따 만든 자료형을 통해 데이터를 저장하고 불러오고, 테이블 단위로 연산을 하기도 합니다.
최근에 등장한 무료 통계툴인 R에서도 dataframe이라는 테이블 형태의 자료구조를 제공하는데, 바로 이 dataframe을 파이썬이 그대로 따라 만든것이 이름도 같은 DataFrame 객체이고, 이 객제를 기반으로 오만가지 통계적 툴을 모아놓은게 Pandas 라이브러리입니다.
출처: https://www.slideshare.net/21_venkat/step-by-step-guide-to-learn-r
비로소 pandas가 등장함에 따라 프로그래밍 언어인 파이썬이 난데없이 데이터 분석용 툴과 같은 지위를 얻게 되면서, 소위 데이터 수집 + 가공 + 분석 + 시각화를 하나의 언어로 할 수 있게 되었습니다.
물론 통계 툴에서 시작한 R이나 SAS역시 스크립트를 활용하여 거의 같은 기능을 구현할 수 있습니다만, 새로 공부하는 사람 입장에서 언어의 난이도 만큼은 파이썬을 따라오기가 힘든게 사실입니다.
Pandas에 대한 소개가 좀 길었는데, 사실 뭔가 새로 공부하는 입장에서는 스토리가 길 수록 더 기억에 잘 남기 때문에 역사(?)부터 시작하였습니다. ^^
그럼 pandas의 기본적인 구조와 연산에 대해서 살펴보겠습니다.
실습의 흥미를 불러일으키기 위해 스팀잇 DB에서 데이터를 가져오겠습니다.
아래는 시간의 역순으로 kr 태그에 올라온 포스팅 50개의 날짜, 저자, 제목, 보상 정보를 공개DB인 steemsql.com에서 가져오는 코드이며, pd.read_sql() 함수가 쓰였습니다.
import pandas as pd
import pypyodbc
con = pypyodbc.connect('Driver={SQL Server};' 'Server=sql.steemsql.com;' 'Database=DBSteem;' 'uid=steemit;pwd=steemit')
cursor = con.cursor()
sql = "select top 50 created, author, title from comments \
where category = 'kr' and depth = 0 \
and created > DATEADD(day, -30, GETDATE()) \
order by created desc"
df = pd.read_sql(sql, con)
위 코드를 실행시키면 아무런 출력 없이 원격 DB서버로부터 데이터가 날라와 저장되는데, pandas dataframe에 무슨 데이터가 들어있는지 확인하기 위해 head() 또는 tail()를 자주 사용합니다.
head()의 실행결과 다음과 같이 테이블 형태의 구조로 DB에서 호출한 자료가 저장되어 있는 것을 확인할 수 있습니다.
참고로, steemsql.com의 DB 서버의 시간과 한국 시간이 약 9시간정도 차이가 납니다.
이와 같은 자료에서 payout이 1 SBD 이상인 데이터를 뽑아보겠습니다.
또는 한개의 값을 가져와 보겠습니다.
이번에는 pandas를 통해 matplotlib을 호출해 보겠습니다.
payout의 금액을 10개 범주로 나누어 비중을 확인해 봅니다.
최근 50개의 글 대부분은 0~1달러 미만의 보상을 받았으나, 두 분 정도가 60달러와 70달러의 보상을 받으셨네요.. 부럽... ^^
이상으로 pandas 라이브러리의 dataframe 객체를 이용하여 정보를 저장하고 추출하고 다시 시각화를 해 보았습니다.
- pandas.read_sql()
- dataframe.head() / dataframe.tail()
- dataframe[dataframe.column > condition]
- dataframe.column.hist()
한번에 다 배울수 없는 양이지만, 일단은 흥미를 가지고 하나씩 시작하면서 구글 검색을 하다보면 본인이 필요한 분석용 툴이나 함수들을 쉽게 적용해 볼 수 있습니다.
오늘도 재미있으셨다면 추천 한방 부탁드립니다. ^^
※ 파이썬을 이용한 투자 포스팅은 #kr-systemtrading에서 보실 수 있습니다.
Cheer Up!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
interesting data!!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
판다스.. spark 공부할 때 처음보게 된 녀석인데 잘만쓰면 정말 유용하더군요. 한번 정복하고 싶은 녀석인데 참 어렵습니다. ;ㅅ;)
종종 올려주세요! 'ㅅ')/
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit