Python

[Python] TimeSeries

SangRok Jung 2022. 10. 6. 11:53
반응형

TimeSiries (시계열 데이터)


  • 시계열 데이터를 다루는 여러 가지 유용한 기능을 제공합니다.
  • 시계열 데이터를 데이터 프레임의 행 인덱스로 사용하면 시간으로 기록된 데이터 분석에 매우 편리합니다.
  • 판다스 시간 표시 방식 중 시계열 데이터 표현에 자주 이용되는 두가지 유형
    • 특정한 시점을 기록하는 "Timestamp"
    • 두 시점 사이의 일정한 기간을 나타내는 "Period"

 

 

 

 

 

 

* 판다스는 주식, 환율 등 금율데이터를 다루기 위해 개발 되었으며 미국에서는 1980-90년대 부터 판다스를 사용하고 있었지만 한국에서는 일부 대기업에서만 사용중입니다.

 

 

 

 

 

 

 

▶ 다른 자료형을 시계열 객체로 변환합니다.

 

stock-data.csv
0.00MB

 

▷ 파일을 불러옵니다.

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