데이터 분석에서 데이터 통합은 필수적인 과정입니다. 이 글에서는 pandas와 os 라이브러리를 사용하여 대규모 데이터를 효율적으로 하나의 테이블로 통합하는 방법을 소개합니다. 데이터 병합의 기술적인 측면과 실용적인 팁을 제공합니다.
주요내용
- 📊 데이터 통합의 중요성: 분산된 데이터를 하나의 테이블로 병합하는 기술 소개
- 🛠️ pandas.concat과 os.listdir 활용: 데이터 병합과 파일 목록 확인 방법 설명
- 🔍 효율적인 데이터 병합 전략: 빈 데이터 프레임 사용과 파일명 정렬 문제 해결 방안 제시
하나의 통합된 데이터?
단계별로 생각해 봅시다.
-
지도 학습 모델을 분석하려면 하나의 통합된 데이터 테이블이 반드시 필요하다.
-
하지만 실제 데이터의 경우 센서, 로그, 거래 데이터 등 크기가 매우 큰 데이터는 시간과 ID 등으로 분할되어 저장된 경우가 대다수다.
-
이를 pandas의 concat 함수를 활용해 하나의 테이블로 만들어 낼 수 있다.
Tip
데이터를 통합해야 할 때 데이터가 많다면 빈 데이터 프레임
을 하나 생성한 뒤, 해당 데이터 프레임과 loop문을 활용해 불러온 데이터를 연속적으로 concat하여 효율적으로 merged_table을 만들어 낼 수 있다.
관련 문법 1 : pandas.concat 함수
-
두 개 이상의 DataFrame을 이어 붙일 때 사용하는 함수
-
주요 파라미터
-
objs : DataFrame을 요소로 하는 리스트 ([df1, df2]와 같은 형태로 입력). 입력 순서대로 병합된다.
-
ignore_index : True면 기존 index를 무시하고 ‘새로운 index’를 부여하고, False는 기존 index를 그대로 사용한다.
-
Tip. Axis
-
axis = 0 : 열 방향(컬럼 기준)으로 연산
-
axis = 1 : 행 방향(행 기준)으로 연산
- axis 키워드는 함수의 결과로 출력되는 구조가 벡터(1차원)인지, 행렬(2차원)인지에 따라 역할이 다르다.
관련 문법 2 : os.listdir 함수
주요 파라미터
- path : 입력된 경로 (path) 상에 있는
모든 파일명을 리스트 형태
로 반환
이 코드는 필요한 라이브러리를 불러오고, 불필요한 경고 메시지를 숨기며, 현재 작업 경로를 설정하는 과정을 담고 있습니다. os
와 pandas
라이브러리를 임포트하여 파일 시스템 작업과 데이터 처리 기능을 사용할 수 있게 합니다. warnings.filterwarnings(action = 'ignore')
를 사용하여 경고 메시지를 무시하도록 설정합니다. 마지막으로, %pwd
매직 커맨드를 사용하여 현재 작업 경로를 얻고, os.chdir(a)
를 통해 이 경로를 작업 디렉토리로 설정합니다.
1
2
3
4
5
6
7
8
9
import os
import pandas as pd
# 불필요한 경고 표시를 생략합니다.
import warnings
warnings.filterwarnings(action = 'ignore')
a=%pwd # 현재 작업 경로를 변수 a에 할당합니다.
os.chdir(a) # 현재 작업 경로로 파일 로드 경로를 설정합니다.
폴더 내에 포함된 파일 목록 확인하기
listdir
을 사용하여 폴더 내에 포함된 파일 목록을 확인할 수 있습니다. 이 함수는 os
모듈에 포함되어 있으며, 지정된 경로의 폴더 내에 있는 파일과 디렉터리 목록을 반환합니다.
이 함수는 지정된 디렉토리("에너지 사용량 예측"
) 내의 파일 목록을 반환합니다. 사용자는 이를 통해 해당 디렉토리에 어떤 파일들이 존재하는지 확인할 수 있습니다.
1
os.listdir("에너지 사용량 예측") # 파일 목록 확인
DataFrame 통합
- 추후 정리할 내용에서 5월 데이터는 test 데이터로 활용할 예정이기 때문에 제외하고 통합
이 함수는 pandas
라이브러리를 사용하여 “에너지 사용량 예측/2월4일.csv” 파일을 읽어들이고, 데이터프레임의 상위 3개 행을 출력합니다. pd.read_csv()
함수는 CSV 파일을 읽어서 DataFrame
객체로 반환하며, df.head(3)
는 데이터프레임에서 상위 3개 행을 보여줍니다.
1
2
3
4
5
6
import pandas as pd
# 에너지 사용량 데이터를 불러옵니다.
df = pd.read_csv("에너지 사용량 예측/2월4일.csv")
# 데이터프레임의 상위 3개 행을 출력합니다.
df.head(3)
이 함수는 pandas
라이브러리를 사용하여 “에너지 사용량 예측/1월11일.csv” 파일에서 데이터를 읽어온 후, 데이터프레임의 상위 3개 행을 출력합니다. pd.read_csv()
함수는 CSV 파일을 읽어와 DataFrame
객체로 변환하는 데 사용됩니다. 이후 head(3)
메소드는 데이터프레임에서 상위 3개 행을 선택하여 반환합니다.
1
2
3
df2 = pd.read_csv("에너지 사용량 예측/1월11일.csv")
# 에너지 사용량 데이터를 불러옵니다.
df2.head(3) # 데이터프레임의 상위 3개 행을 출력합니다.
-
폴더 내의 모든 csv 파일이 동일한 컬럼 값을 가졌다는 전제
-
concat을 할 때 기준점으로 삼기 좋은 컬럼을 선택 -> date
이 코드는 에너지 사용량 예측
폴더 내의 모든 .csv
파일을 순회하여, ‘5월’을 포함하지 않는 파일명을 가진 데이터를 불러와 하나의 DataFrame
으로 병합합니다. 병합 과정에서는 pd.concat
함수를 사용하여 행 기준(axis=0)으로 데이터를 결합하며, ignore_index=True
옵션을 통해 인덱스를 새로 생성합니다. 이 과정을 통해 다양한 시간대 또는 조건의 에너지 사용량 데이터를 통합하여 분석할 수 있는 기반을 마련합니다.
1
2
3
4
5
6
7
8
9
10
11
12
merged_df = pd.DataFrame() # 빈 데이터 프레임 생성
# DataFrame 통합
for file in os.listdir("에너지 사용량 예측"): # file이 에너지 사용량 예측 폴더 내에 있는 파일명을 순회
# csv확장자가 있는 경우만 불러오도록
if '5월' not in file and ".csv" in file:
df = pd.read_csv("에너지 사용량 예측/" + file) #파일들이 있는 폴더의 위치를 명시해준다.
# 행 기준(axis=0)으로 빈 DataFrame과 불러온 DataFrame을 병합 + index는 새로 생성
merged_df = pd.concat([merged_df, df], axis = 0, ignore_index = True)
# 행단위로 붙일 경우 주로 ignore_index = True로 한다.
파일명이 문자열 형태로 되어 있어서 listdir()
함수를 사용할 때 1일부터 9일까지의 날짜가 10일 이후의 날짜보다 뒤에 오는 정렬 문제가 발생한다. 이 문제를 해결하기 위해 merged_df
데이터프레임에서 ‘date’ 컬럼을 기준으로 sort_values
함수를 사용하여 날짜 기준으로 정렬을 수행한다.
1
2
3
4
5
6
7
# listdir()을 통해 보면 1일~9일이 10~19일보다 뒤에 정렬되어 있는 모양이 매달 반복된다.
# 각 파일명이 문자열 형태이기 때문
# 이를 정렬하고자 'date' 컬럼을 기준으로 sort_values를 사용하여 정렬을 해준다.
merged_df.sort_values('date', inplace = True) # 날짜 기준으로 정렬 수행
merged_df
댓글남기기