2024. 12. 26. 03:46ㆍMOOC
pandas 를 사용하여 csv 형태의 time series 데이터를 처리하는 방법에 대해 직접 코드를 실행하며
설명하는 Case Study 를 진행
1. AirPassengers 예시 (시계열 데이터)
1.1 데이터 불러오기 및 확인
"import pandas as pd
df_time_series = pd.read_csv('./data/AirPassengers.csv')
df_time_series.head()
"
CSV 파일을 불러오고, head()를 통해 상단 몇 줄을 확인
1.2 새로운 열 추가: step
"df_time_series['step'] = range(len(df_time_series))
df_time_series.head()
"
range(len(df_time_series))로 0부터 시작하는 정수 시퀀스를 생성하여 step 열로 추가함
1.3 누적 계산(cumsum, cummax, cummin)
"df_time_series['cum_sum'] = df_time_series['#Passengers'].cumsum()
df_time_series['cum_max'] = df_time_series['#Passengers'].cummax()
df_time_series['cum_min'] = df_time_series['#Passengers'].cummin()
df_time_series.head()
"
누적합과 누적 최대/최소값을 계산하여 해당 열을 추가
1.4 연도, 월 분리
"import numpy as np
temp_date = df_time_series['Month'].map(lambda x: x.split('-'))
temp_date = np.array(temp_date.values.tolist())
df_time_series['year'] = temp_date[:, 0]
df_time_series['month'] = temp_date[:, 1]
df_time_series.head()
"
Month 열의 문자열을 split('-')하여 year와 month 열을 새로 생성
1.5 변화량(diff)과 퍼센트 변화율(pct_change)
"df_time_series['diff'] = df_time_series['#Passengers'].diff().fillna(0)
df_time_series['pct'] = df_time_series['#Passengers'].pct_change().map(lambda x: '%.2f' % (x * 100))
df_time_series.head()
"
- diff(): 현재 행 값과 이전 행 값의 차이를 계산
- pct_change(): 퍼센트 변화율을 계산한 뒤 포맷팅하여 문자열 형태로 저장
2. 특허 데이터 예시 (sea_managing_raw.csv)
2.1 데이터 불러오기
"import pandas as pd
patent = pd.read_csv('./data/sea_managing_raw.csv', encoding='cp949')
patent.head()
"
CSV 파일(sea_managing_raw.csv)을 CP949 인코딩으로 불러오고, 상단 행을 확인
2.2 필요한 열만 선택
"df_patent = patent[['출원번호', 'Original US Class All[US]']]
df_patent.head()
"
특허 데이터에서 출원번호와 Original US Class All[US] 열만 추출
2.3 출원번호와 클래스 연결 (edge_list 생성)
"edge_list = []
for data in zip(df_patent['출원번호'].tolist(), df_patent['Original US Class All[US]'].map(lambda x: x.split('|')).tolist()):
for value in data[1]:
edge_list.append([data[0], value.strip()])
df_edge_list = pd.DataFrame(edge_list)
df_edge_list['rating'] = 1
"
- zip()을 사용해 (출원번호, 클래스 문자열 리스트)를 묶어 순회
- '|‘로 구분된 클래스를 개별로 분리해 edge_list에 추가
- 최종적으로 edge_list를 DataFrame으로 만들고, rating=1을 부여
2.4 특허번호 vs. 클래스의 관계 행렬 생성
"df_edge_matrix = df_edge_list.groupby([0, 1])['rating'].sum().unstack().fillna(0)
df_edge_matrix.head()
"
- groupby([0, 1])['rating'].sum()으로 (출원번호, 클래스)의 조합마다 합계를 구함
- unstack()을 통해 행(출원번호), 열(클래스) 형태의 관계 행렬로 변환 후 fillna(0) 처리
'MOOC' 카테고리의 다른 글
[머신러닝을 위한 파이썬] Visualization - matplotlib (0) | 2024.12.26 |
---|---|
[머신러닝을 위한 파이썬] Pandas #2 (0) | 2024.12.26 |
[머신러닝을 위한 파이썬] Pandas (0) | 2024.12.26 |
[머신러닝을 위한 파이썬] Numerical Python (Numpy) Overview and Usage (1) | 2024.12.22 |
[머신러닝을 위한 파이썬] Basic Linear Algebra (0) | 2024.12.22 |