시간데이터 조작
라이브러리
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.info()
※ 타입 꼭 확인할 것!!! object면 바꿔줘야함
Date 데이터를 날짜타입으로 변경하여, 새로운 컬럼에 넣기
df["newDate"] = pd.to_datetime(df["Date"])
df.info()
데이터프레임의 데이터를 추출하는 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
index를 날짜 타입의 데이터로 변경하는 방법 🐥
- 시계열 분석을 위해서는
→ index를 날짜 타입의 데이터로 사용해야함
- new_Date 컬럼의 데이터를 인덱스로 사용하게 해주세요
- df.set_index("newDate")
new_Date 컬럼의 데이터를 인덱스로 사용
df = df.set_index("newDate")
df
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
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"]
인덱스 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()