실습 환경 - Google Colab
시계열 데이터 (Timedelta)¶
- 두 시점의 차이를 나타냄
- 날짜와 시간을 더하거나 빼서 새로운 시점 이전이나 이후 몇 시간뒤, 며칠 뒤를 계산
In [1]:
# 데이터 생성(실습 전 실행)
import pandas as pd
data = {
'Date1': ['2024-02-17', '2024-02-18', '2024-02-19'],
'Date2': ['2024:02:17', '2024:02:18', '2024:02:19'],
'Date3': ['24/02/17', '24/02/18', '24/02/19'],
'Date4': ['02/17/2024', '02/18/2024', '02/19/2024'],
'Date5': ['17-Feb-2024', '18-Feb-2024', '19-Feb-2024'],
'Date6': ['2024년02월17일', '2024년02월18일', '2024년02월19일'],
'DateTime1': ['24-02-17 11:45:30', '24-02-18 12:55:45', '24-02-19 13:30:15'],
'DateTime2': ['2024-02-17 11-45-30', '2024-02-18 12-55-45', '2024-02-19 13-30-15'],
'DateTime3': ['02/17/2024 11:45:30 AM', '02/18/2024 12:55:45 PM', '02/19/2024 01:30:15 PM'],
'DateTime4': ['17 Feb 2024 11:45:30', '18 Feb 2024 12:55:45', '19 Feb 2024 13:30:15']
}
df = pd.DataFrame(data)
df.to_csv("date.csv", index=False)
df
Out[1]:
Date1 | Date2 | Date3 | Date4 | Date5 | Date6 | DateTime1 | DateTime2 | DateTime3 | DateTime4 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 2024-02-17 | 2024:02:17 | 24/02/17 | 02/17/2024 | 17-Feb-2024 | 2024년02월17일 | 24-02-17 11:45:30 | 2024-02-17 11-45-30 | 02/17/2024 11:45:30 AM | 17 Feb 2024 11:45:30 |
1 | 2024-02-18 | 2024:02:18 | 24/02/18 | 02/18/2024 | 18-Feb-2024 | 2024년02월18일 | 24-02-18 12:55:45 | 2024-02-18 12-55-45 | 02/18/2024 12:55:45 PM | 18 Feb 2024 12:55:45 |
2 | 2024-02-19 | 2024:02:19 | 24/02/19 | 02/19/2024 | 19-Feb-2024 | 2024년02월19일 | 24-02-19 13:30:15 | 2024-02-19 13-30-15 | 02/19/2024 01:30:15 PM | 19 Feb 2024 13:30:15 |
In [4]:
# 데이터 불러오기 (usecols, parse_dates)
# 특정 컬럼 불러오기
df = pd.read_csv('date.csv', usecols=['DateTime4'], parse_dates=['DateTime4'])
df
Out[4]:
DateTime4 | |
---|---|
0 | 2024-02-17 11:45:30 |
1 | 2024-02-18 12:55:45 |
2 | 2024-02-19 13:30:15 |
In [5]:
df.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 3 entries, 0 to 2 Data columns (total 1 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 DateTime4 3 non-null datetime64[ns] dtypes: datetime64[ns](1) memory usage: 152.0 bytes
In [6]:
# 100일째 되는 날
day = pd.Timedelta(days=99)
df['100일'] = df['DateTime4'] + day
df
Out[6]:
DateTime4 | 100일 | |
---|---|---|
0 | 2024-02-17 11:45:30 | 2024-05-26 11:45:30 |
1 | 2024-02-18 12:55:45 | 2024-05-27 12:55:45 |
2 | 2024-02-19 13:30:15 | 2024-05-28 13:30:15 |
In [9]:
# 100시간 이후
hour = pd.Timedelta(hours=100)
df['100시간'] = df['DateTime4'] + hour
df
Out[9]:
DateTime4 | 100일 | 100시간 | |
---|---|---|---|
0 | 2024-02-17 11:45:30 | 2024-05-26 11:45:30 | 2024-02-21 15:45:30 |
1 | 2024-02-18 12:55:45 | 2024-05-27 12:55:45 | 2024-02-22 16:55:45 |
2 | 2024-02-19 13:30:15 | 2024-05-28 13:30:15 | 2024-02-23 17:30:15 |
In [10]:
# 시간 +/- (3주, 3일, 3시간, 3분, 3초 이전과 이후)
diff = pd.Timedelta(weeks=3, days=3, hours=3, minutes=3, seconds=3)
df['-diff'] = df['DateTime4'] - diff
df['+dff'] = df['DateTime4'] + diff
df
Out[10]:
DateTime4 | 100일 | 100시간 | -diff | +dff | |
---|---|---|---|---|---|
0 | 2024-02-17 11:45:30 | 2024-05-26 11:45:30 | 2024-02-21 15:45:30 | 2024-01-24 08:42:27 | 2024-03-12 14:48:33 |
1 | 2024-02-18 12:55:45 | 2024-05-27 12:55:45 | 2024-02-22 16:55:45 | 2024-01-25 09:52:42 | 2024-03-13 15:58:48 |
2 | 2024-02-19 13:30:15 | 2024-05-28 13:30:15 | 2024-02-23 17:30:15 | 2024-01-26 10:27:12 | 2024-03-14 16:33:18 |
In [12]:
# timedelta 자료형 - datetime간의 연산 결과
# datetime간의 연산 결과는 timedelta 자료형으로 변경되어 출력
diff = df['100일'] - df['100시간']
diff
Out[12]:
0 94 days 20:00:00 1 94 days 20:00:00 2 94 days 20:00:00 dtype: timedelta64[ns]
In [19]:
# 기간을 초로 변환 total_seconds()
# 분을 물어본다면 초로 변환 후 분으로 변환
print(diff.dt.total_seconds()) # 초 : 94일 20시간을 초로 변경한 것
print(diff.dt.total_seconds()/60) # 분
print(diff.dt.total_seconds()/60/60) # 시간
print(diff.dt.total_seconds()/60/60/24) # 일
0 8193600.0 1 8193600.0 2 8193600.0 dtype: float64 0 136560.0 1 136560.0 2 136560.0 dtype: float64 0 2276.0 1 2276.0 2 2276.0 dtype: float64 0 94.833333 1 94.833333 2 94.833333 dtype: float64
In [21]:
# 일(days), 초(seconds)
print(diff.dt.days)
print(diff.dt.seconds) # 20시간만 초로 변경한 것
print(20*60*60) # 검증
0 94 1 94 2 94 dtype: int64 0 72000 1 72000 2 72000 dtype: int32 72000
In [23]:
# 반올림 (ex: 5.49분) 30초 이상이면 올림, 30초 미만이면 버림
value = 5.49
In [24]:
# 반올림해서 분으로 출력하세요
round(value)
Out[24]:
5
In [26]:
# 0.49분 을 초로 변환하면
0.49 * 60
# 29.4 -> 30미만이다 그래서 버림
Out[26]:
29.4
참고
[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3) | 퇴근후딴짓 - 인프런
퇴근후딴짓 | 비전공자, 입문자가 빅데이터 분석기사 실기를 빠르게 취득할 수 있도록 안내해드려요! 꼭 필요한 파이썬, 판다스, 머신러닝을 다루고 있어요!, ❤️공지❤️ 7회 기출 유형 업데이
www.inflearn.com
'자격증 > 빅데이터분석기사' 카테고리의 다른 글
[빅데이터분석기사] 6회 필기 합격 후기 (0) | 2024.07.15 |
---|---|
[빅데이터분석기사] 작업형1 - 문자열 (0) | 2024.06.10 |
[빅데이터분석기사] 작업형1 - 시계열 데이터 1 (0) | 2024.06.10 |
[빅데이터분석기사] 작업형1 - 판다스 기초 3 (0) | 2024.06.10 |
[빅데이터분석기사] 작업형1 - 판다스 기초 2 (0) | 2024.06.10 |