시계열 데이터 전처리 결과 확인 : pandas Series
API를 이용하거나, 직접 수집해 온 시계열 데이터에서 새로운 정보를 얻기 위해 파이썬 데이터 분석을 따라해 보고 있는 중입니다. 이번 포스팅에서는 파이썬 데이터 분석에서 빼놓을 수 없는 pandas 라이브러리를 이해해 보겠습니다. 데이터 분석에 필요한 데이터만 남기고 나머지를 날려버리는 데이터 전처리 과정을 간략하게 정리해본 후 그 결과로 나온 리스트 형태의 데이터를 pandas를 이용하여 표로 만들어보는 것이 목표입니다.
글의 순서
판다스 라이브러리 (pandas library)
업비트 API로 받아온 비트코인 데이터 전처리 과정과 결과
판다스 라이브러리로 시간에 따른 비트코인 가격 표 만들기
판다스 라이브러리 (pandas library)
판다스 라이브러리는 파이썬 데이터 분석에서 빼놓을 수 없는 유용한 분석 도구입니다. 데이터를 이해하기 위해서 주로 어떤 방법을 쓰고 계시나요? 대부분 그래프로 그려보거나, 표로 정리해보는 것일 겁니다. 표를 영어로는 테이블(table)이라고 합니다. 그래프나 테이블을 담당하는 대표적인 파이썬 패키지는 matplotlib와 pandas입니다. matplotlib 패키지를 이용하여 그래프를 그릴 수 있듯, 판다스 패키지로는 테이블을 만들 수 있습니다. 그것도 눈에 잘 들어오는 형태로 말입니다. 여러차례 말씀드렸지만 파이썬에서 쓰는 패키지라는 용어는 다른 프로그래밍 언어의 라이브러리와 같은 의미입니다.
panads는 panel datas의 줄임말이며, 파이썬 데이터 분석에서 무척 많이 사용되는 라이브러리입니다. 판다스에서 제공하는 데이터 구조는 한 줄로 길게 줄지어놓은 1차원 배열 형태와 테이블 모양의 2차원 배열 행태의 2가지입니다. 1차원 배열 형태를 Series, 2차원 배열 형태를 DataFrame 이라고 부릅니다. 1차원 배열 형태는 리스트라는 파이썬 자료구조와 잘 대응됩니다.
판다스 라이브러리도 matplotlib 패키지처럼 기능이 방대합니다. 판다스만 전문적으로 다루는 책이 있을 정도입니다. 여기서는 데이터 분석에 유용한 기능 위주로 연습해 보겠습니다. 판다스의 Series는 리스트라는 자료구조와 대응된다는 사실을 기억해 주시기 바랍니다. 지난 포스팅에서 API로 받아온 데이터를 전처리 하고 난 결과가 바로 리스트 형태였습니다.
업비트 API로 받아온 시계열 데이터 전처리 과정과 결과
업비트 API를 이용하여 비트코인 가격 데이터를 수집한 후 전처리 과정을 알아봤는데요. 판다스 라이브러리를 사용하면 그래프가 아니라 테이블로 데이터를 확인할 수 있습니다. 일단 비트코인 가격 데이터가 파이썬 자료구조 중 리스트 모양으로 나오는 과정을 정리해보겠습니다.
(1) 업비트 API 분석하기
이 포스팅에서 원하는 시계열 데이터는 지난 20일간의 코인 시세입니다. 시계열 데이터 그래프에서 데이터를 비교하기 위하여 비트코인과 이더리움의 가격을 가져올 예정입니다. 아래의 API에서 market과, count를 바꾸면 코인 종류와 기간이 바뀝니다.
https://api.upbit.com/v1/candles/days?market=KRW-BTC&count=2
(2) 업비트 API를 포함하는 파이썬 함수 만들기
함수는 프로그램을 확장하고, 코드를 깔끔하게 만드는데 아주 중요한 요소입니다. 시계열 데이터를 수집하기 위해 API가 포함된 파이썬 함수를 만듭니다. 이때 함수에 넘겨주는 파라미터는 코인의 종류와 가격을 수집하는 기간입니다.
(3) 업비트 API로 가져온 데이터 확인
업비트 API를 이용하여 받아온 코인가격 데이터는 리스트 안에 딕셔너리가 들어있는 [ { }, { }, … { } ] 형태입니다. 각 딕셔너리 { }에는 시간 데이터와 코인 가격 데이터 등이 들어있습니다.
(4) 업비트 API로 가져온 데이터 전처리
시간에 따른 코인 가격이라는 시계열 데이터를 추출하기 위해서는 딕셔너리로부터 데이터를 추출해내야 합니다. 빈 리스트를 만들어 놓고 for 반복문으로 리스트 안에 있는 딕셔너리를 하나씩 훑으면서, 미리 정해놓은 key를 만날 경우, key에 대응되는 값을 리스트에 덧붙이는 방법을 사용합니다. 이 방법으로 시간을 담아놓은 리스트와 코인 가격을 담아놓은 리스트를 만들 수 있습니다.
(5) 데이터 전처리 결과 확인
데이터 전처리 결과는 시간 리스트와 코인 가격 리스트입니다.
데이터전처리01은 (1)~(5) 까지의 과정을 구현한 파이썬 코드입니다. 코드 실행결과도 연달아 나타내었습니다. 코드의 print() 부분을 유심히 봐 주시기 바랍니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
import requests import json import matplotlib.pyplot as plt #(1) UPbit API 분석하기 #(2) UPbit API를 포함하는 파이썬 함수 만들기 def get_coin_price(ticker,n_candle): url = ("https://api.upbit.com/v1/candles/days?market=%s&count=%d" %(ticker, n_candle)) print(url) raw_resp = requests.get(url) response = raw_resp.json() return response #(3) UPbit API로 데이터 가져온 후 확인 coin_price = get_coin_price("KRW-BTC",2) print(coin_price) #(4) UPbit API로 가져온 데이터 전처리 date = [] price = [] for i in range(0,len(coin_price)): date.append(coin_price[len(coin_price)-1-i]["candle_date_time_kst"]) price.append(coin_price[len(coin_price)-1-i]["trade_price"]) #(5) 데이터 전처리 결과 print("--- Data 전처리 결과 ---") print(date) print(price) |
pandas 라이브러리로 시간에 따른 비트코인 가격 표 만들기
데이터 전처리 결과로 2개의 리스트가 나왔습니다. pandas 라이브러리를 사용해서 얼마나 가독성 좋게 데이터를 보여주는지 확인해보겠습니다. 판다스 라이브러리를 사용하기 위해서는 먼저 pandas 라이브러리를 설치해야 합니다. 지금까지 계속 사용해오고 있는 replit 이라는 온라인 프로그래밍 환경에서는 패키지를 검색한 후 install 하면 되고, 윈도우나 맥 환경에서는 아래와 같이 설치합니다. 이 부분은 지난 포스팅 ‘업비트 REST API를 이용한 비트코인 가격 추출 파이썬 프로그래밍’을 참고하시기 바랍니다.
pip install panas
많은 데이터 전문가들은 pandas 라이브러리를 pd라는 별명을 써서 짧게 부릅니다. 판다스의 Series 라는 클래스는 1차원 배열 형태의 데이터를 사용하는데, 1차원 배열의 각 값(values)에 인덱스(index)를 부여합니다. 아래는 srs라는 변수에 pandas의 Series를 이용하여 값을 담아두는 방법이며, 인덱스를 date로 부여한 경우입니다. srs의 값과 인덱스는 각각 print(srs.values), print(srs.index)로 확인할 수 있습니다.
판다스에 있는 Series를 사용하는 방법은 pandas.Series인데, 아래의 pd.Series는 판다스를 pd라는 별명으로 쓴다는 import pandas as pd를 코드 시작 부분에 선언해 놨을 경우 사용할 수 있습니다.
srs1 = pd.Series(price, date)
srs가 어떤 모양의 테이블인지를 확인하려면 늘 쓰던 print(srs)가 좋은 방법입니다. 인덱스를 부여하지 않았을 때는 0, 1, 2, 3 과 같은 숫자가 자동으로 부여됩니다. pandas.Series를 이용하면서 별도로 인덱스를 부여하지 않고, 자동으로 인덱를 부여하려면 아래처럼 pd.Series(price,date) 대신 pd.Series(price)를 사용하시면 됩니다.
srs2 = pd.Series(price)
여기까지 판다스 자료구조 중 Series를 이용하는 방법을 알아보았습니다. 데이터전처리02 코드를 실행하면 실행결과에서 처럼 pandas를 이용한 전처리 결과를 확인하실 수 있습니다. 데이터전처리02 코드에 있는 print문 내부의 “\n”는 빈 줄을 하나 삽입하라는 의미입니다. 출력된 결과물의 가독성을 높이기 위해 빈 줄을 추가해보았습니다. 덱스를 부여하지 않고, 자동으로 인덱를 부여하려면 아래처럼 pd.Series(price,date) 대신 pd.Series(price)를 사용하시면 됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
import requests import json import pandas as pd import matplotlib.pyplot as plt #(1) UPbit API 분석하기 #(2) UPbit API를 포함하는 파이썬 함수 만들기 def get_coin_price(ticker,n_candle): url = ("https://api.upbit.com/v1/candles/days?market=%s&count=%d" %(ticker, n_candle)) raw_resp = requests.get(url) response = raw_resp.json() return response #(3) UPbit API로 데이터 가져온 후 확인 coin_price = get_coin_price("KRW-BTC",2) #(4) UPbit API로 가져온 데이터 전처리 date = [] price = [] for i in range(0,len(coin_price)): date.append(coin_price[len(coin_price)-1-i]["candle_date_time_kst"]) price.append(coin_price[len(coin_price)-1-i]["trade_price"]) #(5) 데이터 전처리 결과 print("-- Data 전처리 결과 --") print(date) print(price) #(6) pandas를 이용한 전처리 결과 확인 srs1 = pd.Series(price,date) srs1 = pd.Series(price) print("\n" + "-- pandas를 이용한 전처리 결과 확인 --") print("index를 date로 부여할 경우 ") print(srs1) print("\n" + "index를 자동으로 부여할 경우 ") print(srs2) |
데이터전처리02 실행결과
— Data 전처리 결과 —
[‘2022-06-25T09:00:00’, ‘2022-06-26T09:00:00’]
[27832000.0, 27697000.0]
— pandas를 이용한 전처리 결과 확인 —
index를 date로 부여할 경우
2022-06-25T09:00:00 27832000.0
2022-06-26T09:00:00 27697000.0
dtype: float64
index를 자동으로 부여할 경우
0 27832000.0
1 27697000.0
dtype: float64
마치며 …
API를 이용하거나, 직접 수집해 온 데이터에서 새로운 정보를 얻기 위해 파이썬 데이터 분석을 따라해 보고 있는 중입니다. 이번 포스팅에서는 파이썬 데이터 분석에서 빼놓을 수 없는 pandas 라이브러리를 활용해 보았습니다.
panads는 panel datas의 줄임말이며, 파이썬 데이터 분석에서 무척 많이 사용되는 라이브러리입니다. matplotlib 라이브러리를 이용하여 그래프를 그릴 수 있듯, 판다스 라이브러리로는 테이블을 만들 수 있습니다.
판다스에서 제공하는 데이터 구조는 한 줄로 길게 줄지어놓은 1차원 배열 형태와 테이블 모양의 2차원 배열 행태의 2가지입니다. 1차원 배열 형태를 Series, 2차원 배열 형태를 DataFrame 이라고 부릅니다. 1차원 배열 형태는 리스트라는 파이썬 자료구조와 잘 대응됩니다. 이번 포스팅에서는 pandas의 Series를 이용하여 전처리 결과를 확인하였습니다. 다음 포스팅에서는 판다스의 DataFrame에 대해 알아보겠습니다.
함께 참고하면 더 좋은 글 :
▶ 파이썬 데이터 분석 : 판다스 인덱스
▶ 파이썬 프로그래밍 시작하기 (1) 온라인 프로그래밍 환경 replit
▶ 업비트 API로 이해해보는 REST API
▶ 업비트 REST API를 이용한 비트코인 가격 추출 파이썬 프로그래밍
▶ 업비트 시계열 데이터 가시화를 위한 전처리
▶ 시계열 데이터 가시화 (2) 보고서용 파이썬 그래프 만들기
▶ 파이썬 데이터 분석! 데이터 분석을 위한 코딩언어 파이썬
▶ 알아두면 좋을 컴퓨터 작동원리. 폰 노이만 아키텍처
참고자료
UPbit(2020),일(Day) 캔들