본문 바로가기

카테고리 없음

[시계열 분석] 시계열 데이터 - to_datetime(), to_period(), set_index(), reset_index(), date_range(), .dt.year/month/day

~ 목차 ~

 

시간데이터 조작

 

라이브러리


import pandas as pd

 

[시간 유형] 데이터 만들기


dates = ["2020-01-01", "2020-03-01", "2021-09-01"]
dates

 

['2020-01-01', '2020-03-01', '2021-09-01']

 

시간 유형의 문자열을 날짜 타입으로 변환하기(형변환)


ts_dates = pd.to_datetime(dates)
ts_dates

 

DatetimeIndex(['2020-01-01', '2020-03-01', '2021-09-01'], dtype='datetime64[ns]', freq=None)


 

년월일 단위로 추출하기 🐥

 


- to_period() : 날짜 타입의 데이터에서 특정 날짜(년, 월, 일)을 추출하고자 할 때 사용

 

 

년월일 단위로 추출하기


pr_day = ts_dates.to_period(freq = "D")
pr_day

 

PeriodIndex(['2020-01-01', '2020-03-01', '2021-09-01'], dtype='period[D]')

 

년월 단위로 추출하기


pr_month = ts_dates.to_period(freq = "M")
pr_month

 

PeriodIndex(['2020-01', '2020-03', '2021-09'], dtype='period[M]')

 

년 단위로 추출하기


pr_year = ts_dates.to_period(freq = "Y")
pr_year

 

PeriodIndex(['2020', '2020', '2021'], dtype='period[A-DEC]')


 

데이터 읽어들이기

 

 

데이터셋


df = pd.read_csv("./data/timeseries.csv")
df

 

df

 


df.info()

info()

 

 

※ 타입 꼭 확인할 것!!! object면 바꿔줘야함

 

Date 데이터를 날짜타입으로 변경하여, 새로운 컬럼에 넣기


df["newDate"] = pd.to_datetime(df["Date"])
df.info()

 

newDate

 

 


 

데이터프레임의 데이터를 추출하는 3가지 방법  🐥

 


- df["columns"][0]
- df["columns"].loc[0]
- df["columns"].iloc[0]

 

※ 데이터 변경 시에는 loc나 iloc로 변경하는게 좋다! (그렇지 않으면 가끔 오류 날때 있음)

 

new_Date 컬럼의 0번째 데이터를 추출(3가지 방법)

 


 df["newDate"][0]
 df["newDate"].loc[0]
 df["newDate"].iloc[0]

 

Timestamp('2015-07-02 00:00:00')

 


 

날짜 타입의 컬럼만 남기고, 날짜 유형을 가지는 Date 컬럼은 삭제하기


df.drop(columns="Date", axis=1, inplace=True)
df

 

삭제 후 df

 


 

index를 날짜 타입의 데이터로 변경하는 방법  🐥

 


- 시계열 분석을 위해서는
   → index를 날짜 타입의 데이터로 사용해야함
   
 - new_Date 컬럼의 데이터를 인덱스로 사용하게 해주세요

 -  df.set_index("newDate")

 

 

new_Date 컬럼의 데이터를 인덱스로 사용

 


df = df.set_index("newDate")
df

 

newDate 인덱스화

 


df.info()

 

인덱스 변환

 

 


 

기간 설정하기

 

 

기간 설정하기  🐥

 


 * 기간 설정하는 함수 : pd.date_range()

   - start : 설정 기간의 시작 값
   - end : 설정 기간의 끝값 (None은 무한대)
   - periods : 생성할 기간의 갯수
   - freq : 시간 간격 설정
              (Y는 년도, M은 월, D는 일 - 각 알파벳 옆에 숫자가 있으면 그 숫자 단위만큼 증가시키라는 의미)
   - tz : 타임존(사용할 국가 지정)


 

 

기간 설정하는 함수 예시

 


timestamp_df = pd.date_range(start = "2020-01-01", 
                                                   end = None,
                                                   periods = 6,
                                                   freq = "Y",
                                                   tz = "Asia/Seoul")
timestamp_df

 

DatetimeIndex(['2020-12-31 00:00:00+09:00', '2021-12-31 00:00:00+09:00',
                          '2022-12-31 00:00:00+09:00', '2023-12-31 00:00:00+09:00',
                          '2024-12-31 00:00:00+09:00', '2025-12-31 00:00:00+09:00'],
                          dtype='datetime64[ns, Asia/Seoul]', freq='A-DEC')

 

 

 * 위 함수 해석
   - 2020년 1월 1일을 시작값으로,
   - 종료값 없이, 6개의 구간값을 출력
   - 시간 간격은 Y(년도)를 기준으로 1씩 증가시키고,
   - 사용할 시간은 한국시간 사용

 

 

 

 

기간 설정하는 함수 예시들

 


""" 3년 단위로 기간 구성하기, 6개 기간 추출하기 """
 pd.date_range(start = "2020-01-01", 
                             end = None,
                             periods = 6,
                             freq = "3Y",
                             tz = "Asia/Seoul")

""" 2개월 단위로 기간을 설정해주세요, 기간은 3개 추출"""
pd.date_range(start="2020-01-01",
              end=None,
              periods=3,
              freq="2M")

""" 3일 간격으로, 6개 기간 추출하기 """
pd.date_range(start="2020-01-01",
             end=None,
             periods=6,
             freq="3D")

""" 2시간 간격으로, 4개 기간 추출하기 """
pd.date_range(start="2020-01-01",
             end=None,
             periods=4,
             freq="2H")

""" 3분 간격으로, 5개 기간 추출하기 """
pd.date_range(start="2020-01-01",
             end=None,
             periods=5,
             freq="3MIN")

""" 2초 간격으로, 3개 기간 추출하기 """
pd.date_range(start="2020-01-01",
             end=None,
             periods=3,
             freq="2S")

""" 2일 2시간 2분 2초 간격으로 5개 기간을 추출해 주세요 """
pd.date_range(start="2020-01-01",
              end = None,
              periods=5,
             freq="2D 2H 2MIN 2S")


 

 

 


 

 

인덱스를 컬럼으로 만들기

 


df.reset_index(inplace=True)

 


df.info()

 

인덱스 리셋

 

 

 


 

 

 

인덱스를 컬럼으로 만들기

 


df.reset_index(inplace=True)

 


 

new_Date 컬럼에서 "년도"만 추출하기  🐥

 


 * new_Date 컬럼에서 "년도"만 추출하기

 - 데이터프레임 안에 특정 날짜 타입의 컬럼에서 각 값에서 년/월/일 추출/변경할 경우에는 
   → 각 값에 접근해야 합니다. (.dt)
 - . : 접근 지정자 (자바에선 멤버변수 접근하는 기호)
 - .dt : 판다스(데이터프레임을 다루는 라이브러리)에서 날짜와 시간 데이터를 다룰 때 사용되는 접근자(accessor)

 - df["newDate"].dt.year

 

 

new_Date 컬럼에서 "년, 월, 일" 컬럼 생성하기

 


"""new_Date 컬럼에서 "년도"만 추출하기"""
df["Year"] = df["newDate"].dt.year

"""newDate 컬럼에서 월을 추출하여 Month 컬럼 생성하기"""
df["Month"] = df["newDate"].dt.month

"""newDate 컬럼에서 일을 추출하여 Day 컬럼 생성하기"""
df["Day"] = df["newDate"].dt.day

 

년,월,일 컬럼 생성

 


 

 

 

newDate 컬럼의 데이터를 이용해서, 0000-00(년-월) 단위로 추출하여, YM 컬럼 생성하기

 


df["YM"] = df["newDate"].dt.to_period(freq = "M")
df

 

YM컬럼 생성

 

 

newDate 컬럼의 데이터를 이용해서, 년-월-일 단위로 추출해서 YMD 컬럼 생성하기

 


df["YMD"] = df["newDate"].dt.to_period(freq="D")
df

 

 

 

 

※ 시계열 분석 시 원하는 날짜 형식(년-월-일, 년-월) 해당 컬럼을 index로 올린 후 진행하면 됨!!

 

 

 

newDate 컬럼을 인덱스로 지정하기

 


df.set_index("newDate", inplace=True)
df

 

 

 

 


 

 

df 데이터프레임의 0번째 행의 값을 추출하기  🐥

 


Q) df 데이터프레임의 0번째 행의 값을 추출해주세요.
     - 추출하는 방법 모두 사용

※ df["2015-07-02"], df[0] : 인덱스가 RangeIndex가 아니면 직접 접근이 안됨(오류 발생) 
     - loc 또는 iloc를 사용해야함

 

 

df 데이터프레임의 0번째 행의 값을 추출

 


### 내코드
df.iloc[0, :]
df.loc[df.index[0], :]

### 강사님
df.iloc[0]
df.loc["2015-07-02"]

 

0번째 행의 값 추출

 

 

인덱스 2016-06-29 ~ 2018-06-27 까지의 행 조회하기

 


### 내코드
df.loc[df.index[1]:df.index[3], :]

### 강사님
df.loc["2016-06-29" : "2018-06-27"]

 

 

행 추출하기

 

 

 


 

 

 

실습

 

데이터 불러오기


"""
- df 변수로 csv 파일 새로 불러들이고,
- new_Date 컬럼 생성 : Date 컿럼을 날짜타입으로 변환해서 사용 
"""
df = pd.read_csv("./data/timeseries.csv")
df["new_Date"] = pd.to_datetime(df["Date"])
df

 

데이터프레임

 

 

컬럼 삭제하기


df.drop("Date", axis=1, inplace=True)
df

 

컬럼 삭제 후

 

 

날짜 타입으로 인덱스 설정하기


df.set_index("new_Date", inplace=True)
df

 

 

 

선그래프 그리기


"""
x축 : 인덱스값
y축 : 각각 컬럼의 범위 값으로 각 컬럼에 대한 선그래프 그리기
 - 그래프 하나에 모든 컬럼의 선 그래프 표현
"""

df.plot()

 

선그래프

 

 

728x90