반응형
TimeSiries (시계열 데이터)
- 시계열 데이터를 다루는 여러 가지 유용한 기능을 제공합니다.
- 시계열 데이터를 데이터 프레임의 행 인덱스로 사용하면 시간으로 기록된 데이터 분석에 매우 편리합니다.
- 판다스 시간 표시 방식 중 시계열 데이터 표현에 자주 이용되는 두가지 유형
- 특정한 시점을 기록하는 "Timestamp"
- 두 시점 사이의 일정한 기간을 나타내는 "Period"
* 판다스는 주식, 환율 등 금율데이터를 다루기 위해 개발 되었으며 미국에서는 1980-90년대 부터 판다스를 사용하고 있었지만 한국에서는 일부 대기업에서만 사용중입니다.
▶ 다른 자료형을 시계열 객체로 변환합니다.
▷ 파일을 불러옵니다.
df_stock = pd.read_csv('./stock-data.csv')
▷ 기존의 문자열 컬럼을 datetime64의 자료형을 가진 새로운 컬럼으로 변환하여 입력합니다.
- to_datetime() 함수는 다른 자료형을 판다스 Timestamp를 나타내는 자료형으로 변환합니다.
df_stock['new_Date'] = pd.to_datetime(df_stock.Date)
# 첫번째 데이터의 타입을 확인합니다.
type(df_stock.new_Date[0])
# pandas._libs.tslibs.timestamps.Timestamp
▷ new_Date 컬럼을 인덱스로 지정합니다.
# new_Date를 인덱스로 지정합니다.
df_stock.set_index("new_Date", inplace=True)
▷ 기존의 Date 컬럼을 제거합니다.
# 기존의 Date 컬럼을 제거합니다.
df_stock.drop(columns='Date', inplace=True)
▶ Timestamp를 Peroid로 변환합니다.
▷ Pandas.to_period는 일정한 기간을 나타내는 Period객체로 Timestamp 객체를 변환할 수 있습니다.
옵션 | 설명 | 옵션 | 설명 |
D | day | B | business day |
W | week | H | hour |
M | month end | T | minute |
MS | month begin | S | second |
Q | quarter end | L | millisecond |
QS | quarter begin | U | microsecond |
A | year end | N | nanosecond |
AS | year begin | ... | ... |
# freg 옵션에 기준이 되는 기간을 설정
dates = ['2019-01-01', '2020-03-01', '2021-06-01']
# 문자열 데이터를 판다스 Timestamp로 변환
ts_dates = pd.to_datetime(dates)
# Timestamp를 Period로 변환
pr_day = ts_dates.to_period(freq="D")
pr_month = ts_dates.to_period(freq="M")
pr_year = ts_dates.to_period(freq="A")
print(pr_day)
print(pr_month)
print(pr_year)
# PeriodIndex(['2019-01-01', '2020-03-01', '2021-06-01'], dtype='period[D]')
# PeriodIndex(['2019-01', '2020-03', '2021-06'], dtype='period[M]')
# PeriodIndex(['2019', '2020', '2021'], dtype='period[A-DEC]')
▶ 시계열 데이터 생성
▶ date_range()
임의의 규칙으로 시계열 데이터를 생성합니다.
# 2022-01-01 부터 한달 간격으로 각 달의 시작 날짜를 6개 생성합니다.
pd.date_range(start='2022-01-01', periods=6, freq='MS', tz="Asia/Seoul")
# 2022-01-01 부터 한달 간격으로 각 달의마지막 날짜를 6개 생성합니다.
pd.date_range(start='2022-01-01', periods=6, freq='M', tz="Asia/Seoul")
# 2022-01-01 부터 분기 간격(3개월)으로 월의 마지막 날짜를 6개 생성합니다.
pd.date_range(start='2022-01-01', periods=6, freq='4M', tz="Asia/Seoul")
# DatetimeIndex(['2022-01-31 00:00:00+09:00', '2022-05-31 00:00:00+09:00',
# '2022-09-30 00:00:00+09:00', '2023-01-31 00:00:00+09:00',
# '2023-05-31 00:00:00+09:00', '2023-09-30 00:00:00+09:00'],
# dtype='datetime64[ns, Asia/Seoul]', freq='4M')
▶ period_range()
- 임의의 규칙으로 시계열 데이터를 생성합니다.
- 설정한 규칙 단위만 출력합니다.
# 2022-01-01부터 한달 길이 객체 3개 생성
pd.period_range('2022-01-01', periods=3, freq='M')
# 2022-01-01부터 1시간 길이 간격으로 객체 3개 생성
pd.period_range('2022-01-01', periods=3, freq='H')
# 2022-01-01부터 2시간 길이 간격으로 객체 3개 생성
pd.period_range('2022-01-01', periods=3, freq='2H')
# PeriodIndex(['2022-01-01 00:00', '2022-01-01 02:00', '2022-01-01 04:00'], dtype='period[2H]')
▶ 날짜 데이터 분리
- dt 속성을 이용하여 날짜 데이터를 연, 월, 일로 분리 할 수 있습니다.
- 정수형으로 반환됩니다.
df_stock["Year"] = df_stock.new_Date.dt.year
df_stock["Month"] = df_stock.new_Date.dt.month
df_stock["Day"] = df_stock.new_Date.dt.day
▷ Date_m컬럼을 월기준 시계열 데이터로 생성한후 인덱스화 합니다.
df_stock['Date_m'] = df_stock.new_Date.dt.to_period('M')
df_stock.set_index("Date_m", inplace=True)
▶ 시계열 데이터로 데이터 프레임의 데이터 확인.
# 2018년도의 데이터를 보겠다.
df_stock2.loc['2018']
# 2018년 6월의 데이터를 보겠다.
df_stock2.loc['2018-06']
df_stock2.loc['2018/06']
# 2018년 6월의 시작가 상한가를 보겠다.
df_stock2.loc['2018-06', ['Start', 'High']]
# 2018년 6월 15일의 데이터를 보겠다
df_stock2.loc['2018-06-15']
# 2018년 6월 5일 부터 21일 까지의 데이터 출력
df_stock2.sort_index().loc['2018-06-05' : '2018-06-21']
반응형
'Python' 카테고리의 다른 글
[Python] DataFrame (0) | 2022.10.06 |
---|---|
[Python] Function Mapping (0) | 2022.10.06 |
[Python] 정규화 (0) | 2022.10.06 |
[Python] 데이터 사전처리 (0) | 2022.10.01 |
[Python] Seaborn (0) | 2022.10.01 |