시간 내에서 특정 순간의 타임스탬프
2000년 1월, 2020년도 전체 같은 고정된 기간
시작과 끝 타임스탬프로 표시되는 시간 간격
실험 혹은 경과시간
pandas는 표준 시계열 도구와 데이터 알고리즘을 제공
- 날짜, 시간 자료형, 도구
- 날짜와 시간 자료형 : datatime, time
- datetime : 날짜+시간+마이크로초까지 포함 (2021-09-15 18:10:31.862057)
- datetime(2011, 1, 7) : 2011-01-07 00:00:00
- datetime(2008, 6, 24, 8,15,20,10) : 2008-06-24 08:15:20.000010
- 년, 월, 일, 시, 분, 초, 밀리세컨드 로 구성된다.
- timedelta
- 시간에 대해서 해당 일자에 +,- 을 수행한다.
- 여기서 사용되는 인자값은 시간단위이다.
from datetime import timedelta start = datetime(2011, 1, 1) print(start) a1 = start + timedelta(3) print(a1) start - 2 * timedelta(12) # 2011-01-01 00:00:00 # 2011-01-04 00:00:00 # datetime.datetime(2010, 12, 8, 0, 0)
- 문자열을 datetime 으로 변경하기
- python의 datetime객체, pandas의 Timestamp객체 모두 동일하게
→ str메소드, strftime메소드 사용이 가능하다 - strftime 메소드는 날짜 형식에 맞게 stamp.strftime('%Y-%m-%d') 가장 편하게 사용가능
- from dateutil.parser import parse : 대부분의 날짜 표현 방식을 parsing할 수 있다.
- parse('Jan 31, 1997 10:45 PM') → datetime.datetime(1997, 1, 31, 22, 45)
- pd.to_datetime : pandas의 경우 to_datetime 메소드를 사용한다.
- python의 datetime객체, pandas의 Timestamp객체 모두 동일하게
- datetime : 날짜+시간+마이크로초까지 포함 (2021-09-15 18:10:31.862057)
- 달력 관련 자료형 : calendar
- 날짜와 시간 자료형 : datatime, time
- 시계열 기초
- pandas에서 가장 기본적인 시계열 객체는 파이선 문자열 or datetime객체로 표현되는 타임스탬프로 색인된 Series 이다.
longer_ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000)) print(longer_ts) longer_ts['2001']
# 2000.1.1 부터 총 100개의 row를 생성하는데, 수요일인 날짜만 추출한다. dates = pd.date_range('1/1/2000', periods=100, freq='W-WED')
- pandas에서 가장 기본적인 시계열 객체는 파이선 문자열 or datetime객체로 표현되는 타임스탬프로 색인된 Series 이다.
- 날짜 범위, 빈도, 이동
예) 일별, 월별, 매 15분 같은 상대적인 고정 빈도의 작업
→ pandas에서는 리샘플링, 표준 시계열 빈도 모음, 빈도 추론, 고정된 빈도의 날짜 범위를 지원함
- 날짜 범위 생성하기
# 해당 날짜 모두 포함해서 DataTimeIndex객체 생성하기 index = pd.date_range('2012-04-01', '2012-06-01') # 2012.04.01 포함해서 20일치에 대한 날짜 생성 pd.date_range(start='2012-04-01', periods=20) # 종료일이 2012.06.01 포함해서 이전 날짜로 20일치에 대한 날짜 생성 pd.date_range(end='2012-06-01', periods=20) # 영업 마감일 기준으로 출력 # ex : 01-31, 02-29,.... 이런 형태로 구성 # P.428에 freq 옵션 다양하게 있음 # M(월 마지막일), MS(월 시작일), BMS(월 영업시작일) 등등 설명되어 있음 pd.date_range('2000-01-01', '2000-12-01', freq='BM') # 시분초도 모두 유지됨 pd.date_range('2012-05-02 12:56:31', periods=5) # 시분초 정보 제거하고, 년월일만으로 구성함, normalize=True 사용 pd.date_range('2012-05-02 12:56:31', periods=5, normalize=True)
- 빈도와 날짜 오프셋
pandas의 빈도는 기본빈도와 배수의 조합으로 이루어 진다.
- from pandas.tseries.offsets import Hour, Minute
# 4시간 단위로 구분 pd.date_range('2000-01-01', '2000-01-03 23:59', freq='4h') # 1시간30분 단위로 구분 pd.date_range('2000-01-01', periods=10, freq='1h19min') # 월별주차를 쉽게 구분 지을 수 있음 # freq='WOM-3FRI' 매월 3번쩨 금요일을 출력함 rng = pd.date_range('2012-01-01', '2012-09-01', freq='WOM-3FRI')
- from pandas.tseries.offsets import Hour, Minute
- 데이터 시프트
- 데이터를 시간 축에서 앞이나 뒤로 이동하는 것을 의미한다.
- Series와 DataFrame은 색인은 변경하지 않고, 데이터를 앞이나 뒤로 시프트를 수행하는 shift메소드를 가지고 있다.
# 느신한 시프트는 색인을 바꾸지 않기 때문에, 어떤 데이타는 버려지고 NaN처리가 된다. ts.shift(2) # 시프트의 빈도를 알고 있는 경우, 타임스탬프가 채워질수 있게 조치 가능 ts.shift(2, freq='M') # 명시적으로 offset을 지정해서 날짜를 조정할수 있다. offset.rollforward(now) offset.rollback(now)
- 날짜 범위 생성하기
- 시간대 다루기
- pytz 라이브러리를 사용한다.
- 각 지역 timezone에 맞도록 데이터 수정이 가능하다.
- 기간과 기간연산
- Period클래스를 사용
- 며칠, 몇개월, 몇분기, 몇해 같은 조건을 걸수 있음
# 코드에서 freq=정의한 사항을 명확히 정의하고, 이해하는게 중요 p = pd.Period(2007, freq='A-DEC') index = pd.PeriodIndex(values, freq='Q-DEC') p = pd.Period('2007', freq='A-JUN') p = pd.Period('2012Q4', freq='Q-JAN')
- 며칠, 몇개월, 몇분기, 몇해 같은 조건을 걸수 있음
- Period클래스를 사용
- 리샘플링과 빈도 변환
정의 : 시계열의 빈도를 변환하는 과정
다운 샘플링 : 상위빈도의 데이터를 하위빈도로 집계
업샘플링 : 다운의 반대
resample메소드 :
- pandas객체에 있음 (빈도변환 관련된 모든 작업에 유용함)
- groupby와 비슷한 API를 통해서, 데이터를 그룹화 하고 요약함수를 적용하는 방식
- 유연한 고수준 메소드로, 매우 큰 시계열 데이터를 처리할 수 있다
- 다운 샘플링
- 이동창 함수
'파이선' 카테고리의 다른 글
데이타 집계와 그룹연산 (chap10) (0) | 2021.09.06 |
---|---|
데이터 준비하기:조인,병합,변형 (chap8) (0) | 2021.09.05 |
데이터 정제 및 준비 (chap7) (0) | 2021.09.02 |
데이터 로딩과 저장, 파일형식 (chap6) (0) | 2021.09.02 |
pandas 시작하기 (chap5) (0) | 2021.09.01 |