파이썬 pandas에서 시간 시리즈를 조작하는 기법은 무엇인가요?
_____A1: pandas에서 시간 시리즈는 인덱스가 날짜나 시간 정보를 가지는 데이터 구조를 말합니다. `pd.Series`나 `pd.DataFrame`에서 인덱스를 `DatetimeIndex`로 설정하여 시간 기반 데이터를 효율적으로 다룰 수 있습니다.
Q2: 시간 시리즈 데이터를 생성하는 방법은?
A2: `pd.date_range()`를 사용해 일정 간격의 날짜/시간 범위를 생성한 뒤, 이를 인덱스로 설정해 시간 시리즈를 만듭니다. 예:
```python
dates = pd.date_range(start='2023-01-01', periods=5, freq='D')
ts = pd.Series([10, 20, 30, 40, 50], index=dates)
```
Q3: 문자열로 된 날짜를 datetime 형태로 변환하려면?
A3: `pd.to_datetime()` 함수를 사용합니다. 예:
```python
df['date'] = pd.to_datetime(df['date'])
```
Q4: 시간 시리즈의 인덱스를 설정하거나 변경하려면?
A4: `set_index()` 메서드로 datetime 컬럼을 인덱스로 설정하거나, 기존 인덱스를 `pd.to_datetime()`으로 변환합니다.
```python
df = df.set_index('date')
df.index = pd.to_datetime(df.index)
```
Q5: 시간 시리즈 데이터를 특정 기간으로 필터링하는 방법은?
A5: 인덱스가 `DatetimeIndex`일 때, 슬라이싱을 이용할 수 있습니다. 예:
```python
filtered = ts['2023-01-01':'2023-01-03']
```
Q6: 시간 간격을 변경(resample)하는 방법은?
A6: `resample()` 메서드를 사용해 데이터를 다시 샘플링하고 집계합니다. 예: 일별 데이터를 월별 평균으로 변환
```python
monthly = ts.resample('M').mean()
```
Q7: 이동 평균 등 이동 통계를 계산하려면?
A7: `rolling()` 메서드로 이동 윈도우를 정의하고, 평균 등 통계 함수를 호출합니다. 예:
```python
ts.rolling(window=3).mean()
```
Q8: 시간 시리즈에서 결측치 처리 방법은?
```python
ts = ts.fillna(method='ffill') 앞선 값으로 채움
ts = ts.interpolate() 선형 보간
```
Q9: 여러 시계열을 합치거나 연결하려면?
A9: `concat()` 또는 `merge_asof()`를 사용합니다. 시간 축 기준 정렬 후 `merge_asof()`는 근접 시점 데이터를 매칭할 때 유용합니다.
Q10: 시간대(timezone) 처리는 어떻게 하나요?
A10: `tz_localize()`로 시간대를 지정하고, `tz_convert()`로 다른 시간대로 변환합니다.
```python
ts = ts.tz_localize('UTC')
ts = ts.tz_convert('Asia/Seoul')
```
Q11: 날짜 속성(year, month, day 등)을 추출하는 방법?
A11: `dt` 접근자를 통해 추출 가능
```python
df['year'] = df.index.year
df['month'] = df.index.month
```
Q12: 시간 시리즈 데이터에서 리샘플링 후 빈 값을 보간하는 방법은?
A12: 리샘플링 후 `interpolate()` 를 사용하여 선형 또는 다양한 방식으로 결측값을 채웁니다.
```python
ts.resample('H').mean().interpolate()
```
Q13: 시계열 데이터에 시프트(shift)를 적용하는 방법은?
A13: `shift()` 메서드로 데이터를 앞뒤로 이동시켜 시차 분석 등에 활용합니다.
```python
ts.shift(1) 데이터 1단위 뒤로 이동
```
Q14: 시간 시리즈에서 특정 요일, 월 또는 분기 데이터만 추출하려면?
A14: `dt.dayofweek` (월=0, 일=6), `dt.month`, `dt.quarter` 등을 사용하여 조건 필터링합니다.
```python
ts[ts.index.dayofweek == 0] 월요일 데이터만 선택
```
이상은 pandas에서 시간 시리즈를 조작할 때 자주 사용하는 주요 기법들입니다.
시간 시리즈는 시간의 흐름에 따라 변화하는 데이터를 다루는 데 유용하며, Pandas의 `DatetimeIndex`, `Timedelta`, `Period` 등의 개념을 사용하여 작업할 수 있습니다.
아래는 데이터 조작에 주로 사용되는 기법들입니다.
1. DatetimeIndex - DatetimeIndex 생성 : 목록이나 배열을 사용하여 DatetimeIndex 객체를 생성할 수 있습니다.
```python import pandas as pd date_rng = pd.date_range(start='2023-01-01', end='2023-01-10', freq='D') ``` - DataFrame 생성 : DatetimeIndex를 사용하여 DataFrame을 생성할 수 있습니다.
```python df = pd.DataFrame(date_rng, columns=['date']) df['data'] = range(len(df)) ```
2. 날짜와 시간 변환 - 문자열을 datetime으로 변환 : `pd.to_datetime()` 함수를 사용하여 문자열을 datetime 객체로 변환할 수 있습니다.
```python df['date'] = pd.to_datetime(df['date']) ``` - 시간을 문자열로 변환 : `dt` 접근자를 사용하여 형식을 지정하여 문자열로 변환할 수 있습니다.
```python df['date_str'] = df['date'].dt.strftime('%Y-%m-%d') ```
3. 인덱스와 슬라이싱 - 인덱싱 : DatetimeIndex를 사용하여 특정 기간의 데이터를 쉽게 인덱싱할 수 있습니다.
```python df.set_index('date', inplace=True) sliced_df = df['2023-01-05':'2023-01-07'] ```
4. 리샘플링 (Resampling) - 리샘플링 : 시간 주기를 변경하여 데이터를 집계할 수 있습니다.
예를 들어, 일별 데이터를 주별 데이터로 집계할 수 있습니다.
```python weekly_data = df.resample('W').sum() ```
5. 이동평균 (Moving Average) - 이동평균을 계산하여 시계열의 추세를 파악할 수 있습니다.
```python df['moving_avg'] = df['data'].rolling(window=
3).mean() ```
6. 시간 차 계산 - Timedelta : 시간 간격을 나타내기 위해 Timedelta를 사용할 수 있습니다.
```python df['date_plus_5days'] = df.index + pd.Timedelta(days=
5) ```
7. 시계열 데이터의 주기 설정 - Period : 특정 기간의 동작(예: 월별, 분기별 등)을 설정할 수 있습니다.
```python period_rng = pd.period_range(start='2023-01', periods=10, freq='M') ```
8. 시계열 데이터의 정상성 확인 - 시계열 분석에서 데이터를 변환하여 정상성을 가지게 만들거나, 시계열 분해(decomposition)를 통해 트렌드와 계절성을 분리할 수 있습니다.
이 외에도 시계열 분석을 위한 다양한 기법이 Pandas와 함께 활용될 수 있습니다.
이러한 기능들을 통해 사용자는 시간에 따른 데이터 분석 및 예측을 효율적으로 수행할 수 있습니다.
작성자:
최다현 [비회원]
| 작성일자: 1년 전
2025-02-10 05:31:15
조회수: 166 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 166 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.