중간에 추가된 일
parquet을 활용해 효과적으로 데이터를 저장하고 용도별로 테이블을 쪼개서 보관하기
중간에 취소된 일
오늘은 드디어 30일치 데이터를 모아서 이걸 용도별로 컬럼을 묶어 테이블화 시킬려고 하는데.. csv파일로 만드니 15기가가 넘어서 df로 불러오려니 어마무시한 메모리 사용량으로 인해 잦은 튕김으로 대책이 필요했다. 마침 어제 게임도메인 수업에서 배웟던 parquet을 떠올리고 사용법을 익히고 분리에 성공했다.
import os
import pandas as pd
# CSV 파일이 들어있는 폴더 경로
folder_path = "C:/Users/namat/Desktop/python/이터널리턴/이터널 리턴DB/업로드 한것/앞쪽 30일"
# 폴더 내 모든 CSV 파일 읽어오기
csv_files = [file for file in os.listdir(folder_path) if file.endswith('.csv')]
# 파일별 DataFrame 저장할 딕셔너리
dfs = {}
# 모든 CSV 파일을 읽어와 DataFrame으로 저장
for file in csv_files:
file_path = os.path.join(folder_path, file)
df_name = os.path.splitext(file)[0] # 파일명으로 DataFrame 이름 설정
dfs[df_name] = pd.read_csv(file_path)
# 모든 DataFrame 합치기 (SQL의 UNION 기능과 동일)
combined_df = pd.concat(dfs.values(), ignore_index=True)
# gameId 컬럼 기준으로 내림차순 정렬
sorted_df = combined_df.sort_values(by='gameId', ascending=False)
우선 폴더의 csv 파일을 모두 들고오고 그걸 df로 만든다.
그리고 gameID를 위로부터 아래까지 확인하여 불러운 매의 끝과 끝이 알맞게 불러온지 확인하였다.
import pandas as pd
sorted_df.drop_duplicates(inplace=True)
이후 여러팀원이 중복된 추출부분이 있을것 같아서 듀플리케이트를 활용해 중복되는 행을 한개로 만들어 주었다.
import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq
sorted_df.to_parquet("data.parquet", engine="pyarrow")
추출한 df를 parquet형태로 저장해주고
일단 껏다 킨다.(모든 csv를 합치고 df를 추출하는 과정에서 사용된 메모리만으로 터질듯 했다.
이제 이후로는
match_data_43168913_44348911 = pd.read_parquet("data.parquet", engine="pyarrow")
이 방법으로 불러오면 매번 csv에서 df를 가져오는것보다 parquet에서 df를 가져오는게 3배정도 빨랐다. 이 방식으로 이제 컬럼별로 테이블을 나눠 최종적으로
위와 같은 형태의 테이블을 제작하니 이미 하루가 다가버렸다😥
우리조는 데이터양이 너무많아서 추출에 시간이 너무걸려 이제 분석에 들어가다보니 설연휴와 이번주말도 반납하고 분석을 해야할 것 같다.
그래서 미리 튜터님께 질문하여 주말에 할 작업에 대한 예비궁금증을 물어서 최대한 밀어볼 예정이다.