시계열 데이터 전처리 결과 확인 : pandas DataFrame
시계열 데이터를 가지고 pandas 자료 구조를 익히고 있는 중입니다. 판다스(pandas)는 파이썬 데이터 분석에서 가장 많이 활용되는 라이브러리입니다. 이번 포스팅을 통해서 판다스 DataFrame을 이해해 보고자 합니다. 비트코인과 이더리움 가격을 업비트 API로 받아온 후 판다스 DataFrame을 이용하여 표로 만들어 보는 것이 이번 포스팅의 목표입니다.
글의 순서
pandas란
pandas Series와 DataFrame 비교
pandas DataFrame 연습
pandas DataFrame 연습 : 여러 개의 리스트를 묶어주는 zip
업비트 API로 받은 시계열 데이터를 pandas DataFrame으로 나타내기
pandas란
panads는 panel datas의 줄임말이며, 파이썬에서 사용하는 데이터분석 라이브러리입니다. matplotlib 라이브러리를 이용하여 그래프를 그릴 수 있듯, 판다스(pandas) 라이브러리로는 테이블을 만들 수 있습니다. 여기서 테이블은 우리말로 표입니다. 엑셀 파일을 열었을 때 나오는 그 표가 바로 테이블입니다.
판다스에서 제공하는 데이터 구조는 한 줄로 길게 줄지어놓은 1차원 배열 형태와 테이블 모양의 2차원 배열 행태의 2가지입니다. 1차원 배열 형태를 Series, 2차원 배열 형태를 DataFrame 이라고 부릅니다. 지난 포스팅의 Series에 이어 이번 포스팅에서는 pandas DataFrame에 대해 알아보겠습니다. 1차원 배열 형태를 다루는 Series는 2열의 표를 만드는데, 이 표에서 1열은 인덱스(index), 2열은 값(values)을 의미합니다.
판다스 Series와 DataFrame 비교
DataFrame은 pandas 라이브러리에 2차원 배열을 매개 변수로 전달합니다. 배열을 영어로는 리스트라고 합니다. 우리가 배웠던 파이썬 자료구조 중 하나였던 그 리스트입니다. 2차원 배열은 행과 열로 구성되어 있습니다. 그러니까 DataFrame은 행을 구분해주는 인덱스(index)와 열을 구분해주는 컬럼(column)이 있고, 각 index와 column에 대응되는 값(values)이 있는 것입니다. 두 개를 정리해서 비교해보면 아래와 같습니다.
▶pandas Series : index와 값으로 구성
▶pandas DataFrame : index, column과 값으로 구성
가장 쉽게 이해해보는 방법은 그냥 한번 해보는 겁니다. 간단한 파이썬 프로그래밍으로 pandas.Series와 pandas.DataFrame을 비교해보겠습니다. pandas01 코드는 x라는 리스트를 판다스 라이브러리에 전달할 때 각각 Series와 DataFrame 이라는 함수를 써서 비교한 것입니다. sr이라는 변수에는 Series를 사용한 데이터가, df라는 변수에는 DataFrame을 사용한 데이터가 담겨 있습니다. 파이썬 코드 실행결과를 보면 sr은 행을 구분해주는 index만 있는데, df는 행을 구분해주는 index와 열을 구분해주는 colunm이 함께 표시가 됩니다.
1 2 3 4 5 6 7 8 9 10 |
import pandas as pd x = [100, 200, 300, 400] sr = pd.Series(x) print("-- pandas Series --") print(sr) df = pd.DataFrame(x) print("\n", "-- pandas DataFrame --") print(df) |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
-- pandas Series -- 0 100 1 200 2 300 3 400 dtype: int64 -- pandas DataFrame -- 0 0 100 1 200 2 300 3 400 |
pandas DataFrame 연습
pandas01 코드 실행 결과 중 df의 column 이름(열을 지정하는 인덱스)이 0으로 나와있습니다. 0은 아무런 열 이름을 주지 않아서 나온 기본 값입니다. 열 이름을 정해주려면 columns라는 변수를 사용합니다.
1 2 3 4 5 |
import pandas as pd x = [100, 200, 300] df = pd.DataFrame(x, columns=['price']) print(df) |
1 2 3 4 |
price 0 100 1 200 2 300 |
물론 index와 column을 함께 지정해줄 수도 있습니다. 열 이름을 정할 때 column을 사용했듯이 각 행의 이름을 정할 때는 index라는 변수를 사용합니다.
1 2 3 4 5 |
import pandas as pd x = [100, 200, 300] df = pd.DataFrame(x, index=['Mon','Tue','Wed'], columns=['price']) print(df) |
1 2 3 4 |
price Mon 100 Tue 200 Wed 300 |
여기까지 pandas.DataFrame으로 데이터를 표 모양으로 만드는 방법을 알아봤습니다. DataFrame은 열이 여러 개일 때 알맞은 방법인데, 지금까지는 1개의 열로 된 데이터를 이용했었습니다. 지금부터는 2개 이상의 열을 구성하는 방법을 알아보겠습니다.
판다스 DataFrame 연습 : 여러 개의 리스트를 묶어주는 zip
만약 우리가 업비트 API로 받아온 비트코인과 이더리움 가격을 한 눈에 비교하고 싶다면 어떻게 하면 될까요? 업비트 API로 받아온 날짜 리스트, 이 날짜에 대응되는 비트코인, 이더리움 가격 리스트 등등 여러 가지 코인들의 가격 리스트를 하나의 표에 나타내려면 각 리스트를 합쳐야 합니다. 이때는 zip() 함수를 이용합니다. 일단 pandas04 코드를 실행해 보시기 바랍니다. pandas04 코드는 리스트 x, y, z를 묶어서 all 이라는 변수에 담은 후, DataFrame으로 만든 것입니다.
1 2 3 4 5 6 7 8 |
import pandas as pd x = [100, 200, 300] y = [10, 20, 30] z = [1, 2, 3] all = zip(x,y,z) df = pd.DataFrame(all, index=['Mon','Tue','Wed'], columns=['A-price', 'B-price', 'C-price']) print(df) |
1 2 3 4 |
A-price B-price C-price Mon 100 10 1 Tue 200 20 2 Wed 300 30 3 |
업비트 API로 받은 시계열 데이터를 pandas DataFrame으로 나타내기
‘시계열 데이터 전처리 결과 확인 : pandas Series’라는 포스팅에서 업비트 API를 이용하여 비트코인 가격을 가져온 후, pandas.Series 함수를 써서 표 모양으로 만들어보았습니다. 이번에는 비트코인과 이더리움 가격을 함께 나타내보겠습니다. 업비트 API를 이용하는 것부터 API로 받은 코인 가격을 전처리하는 데는 아래와 같은 과정을 거쳤습니다.
▶ 업비트 API를 이용한 코인 가격 받아오기와 데이터 전처리 과정
(1) 업비트 API 분석하기
(2) 업비트 API를 포함하는 파이썬 함수 만들기
(3) 업비트 API로 가져온 데이터 확인
(4) 업비트 API로 가져온 데이터 전처리
(5) pandas DataFrame을 이용한 데이터 전처리 결과 확인
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 37 38 |
import requests import json import pandas as pd #(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로 데이터 가져오기 nday = 3 btc_price_raw = get_coin_price("KRW-BTC",nday) eth_price_raw = get_coin_price("KRW-ETH",nday) #(4) UPbit API로 가져온 데이터 전처리 date = [] btc_price = [] eth_price = [] for i in range(0,nday): date.append(btc_price_raw[nday-1-i]["candle_date_time_kst"]) btc_price.append(btc_price_raw[nday-1-i]["trade_price"]) eth_price.append(eth_price_raw[nday-1-i]["trade_price"]) #(5) 데이터 전처리 결과 print("\n", "-- Data 전처리 결과 --") print(date) print(btc_price) print(eth_price) #(6) 판다스를 이용한 전처리 결과 확인 coin_price = zip(btc_price, eth_price) df = pd.DataFrame(coin_price, index = date, columns=['BTC','ETH']) print("\n" + "-- pandas를 이용한 전처리 결과 확인 --") print(df) |
1 2 3 4 5 6 7 8 9 10 |
-- Data 전처리 결과 -- ['2022-06-25T09:00:00', '2022-06-26T09:00:00', '2022-06-27T09:00:00'] [27832000.0, 27460000.0, 27039000.0] [1608500.0, 1564500.0, 1544000.0] -- pandas를 이용한 전처리 결과 확인 -- BTC ETH 2022-06-25T09:00:00 27832000.0 1608500.0 2022-06-26T09:00:00 27460000.0 1564500.0 2022-06-27T09:00:00 27039000.0 1544000.0 |
마치며 …
시계열 데이터를 가지고 판다스 자료 구조를 익히고 있는 중입니다. 판다스(pandas)는 파이썬 데이터 분석에서 가장 많이 활용되는 라이브러리입니다. 지금까지 판다스의 Series와 DataFrame 쓰는 방법을 익혔습니다.
판다스에서 제공하는 데이터 구조는 한 줄로 길게 줄지어놓은 1차원 배열 형태와 테이블 모양의 2차원 배열 행태의 2가지입니다. 1차원 배열 형태를 Series, 2차원 배열 형태를 DataFrame 이라고 부릅니다. 이번 포스팅에서는 판다스의 DataFrame을 이용하여 업비트 API를 이용하여 받아온 코인 가격의 전처리 결과를 확인하였습니다. 이제부터는 본격적으로 그래프를 통해 시계열 데이터를 확인하는 단계로 나아가 보겠습니다.
함께 참고하면 더 좋은 글 :
▶ 파이썬 데이터 분석 : 판다스 인덱스
▶ 파이썬 프로그래밍 시작하기 (1) 온라인 프로그래밍 환경 replit
▶ 시계열 데이터 전처리 결과 확인 : pandas Series
▶ 업비트 API로 이해해보는 REST API
▶ 업비트 REST API를 이용한 비트코인 가격 추출 파이썬 프로그래밍
▶ 업비트 시계열 데이터 가시화를 위한 전처리
▶ 시계열 데이터 가시화 (2) 보고서용 파이썬 그래프 만들기
▶ 파이썬 데이터 분석! 데이터 분석을 위한 코딩언어 파이썬
▶ 알아두면 좋을 컴퓨터 작동원리. 폰 노이만 아키텍처
참고자료
[1] UPbit(2020),일(Day) 캔들
[2] DelftStack (2021),Python에서 목록을 Pandas DataFrame으로 변환
[3] 박태희(2021), 파이썬으로 구현한 인공지능, 홍릉
[4] 송석리, 이현아(2019), 모두의 데이터 분석 with 파이썬, 길벗