[2025.01.24]TIL

DONGMIN SONG (송동민)·2025년 1월 24일
0

TIL

목록 보기
68/72
post-thumbnail

TIL

🍔 오늘 할 일

  • 30일치 데이터 뭉치기
  • 데이터 계속 받기...🤮

중간에 추가된 일
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배정도 빨랐다. 이 방식으로 이제 컬럼별로 테이블을 나눠 최종적으로

위와 같은 형태의 테이블을 제작하니 이미 하루가 다가버렸다😥

🥤 계획 및 회고

우리조는 데이터양이 너무많아서 추출에 시간이 너무걸려 이제 분석에 들어가다보니 설연휴와 이번주말도 반납하고 분석을 해야할 것 같다.
그래서 미리 튜터님께 질문하여 주말에 할 작업에 대한 예비궁금증을 물어서 최대한 밀어볼 예정이다.

  1. 플레이 빈도, 시간만으로 이진분류로 이탈할지0 잔존할지1 분석을 해도 의미가있을까요? 과금데이터를 가져올수 가없습니다 ㅠㅠ
    =>튜터님 : 분류 알고리즘 - 킬수, 데스수 ,어시수,게임 우승,플레이타임,레벨,개인 클러치횟수, 캐릭터레벨,전설아이템,총크레딧,팀의 터미네이트 영향을 줄거 같고 킬수 대비 데스수 파생변수 관련으로 묶어 머신러닝돌려 피쳐임폴턴팅으로 중요도를 찾아 그걸로 이진분류를 넣으면 근거가 될수 있다.
  2. 대량의 데이터다 보니 vs를 껏다 켜서 이제 안쓰는 df나 변수들이 차지하는 메모리를 날려주고 작업해야하는데 api를 받으면서 동시에 작업을 하면 끄는 순간 또다시 api를 받아야해서.. 문제가 되는데 이제 사용하지않는 변수나 df를 메모리에서 지우는 방법이 있는지 궁금합니다.
    =>튜터님 : 이방법을 해결할 방법은 돈으로 장비를 사는것 외엔 답이 없으므로 두가지 플랫폼에서 파이선을 돌리는 방식을 쓰는게 최선이다(비교적 메모리가 덜드는 api추출을 코랩으로하고 vs는 df 분석을 하는 방식)
  3. 60일이상 기간을 가진 데이터로서 용량이 너무많아서 데이터를 나눠서 추출해야 하는데 이 경우 전체 클러스터링이아니라 두개를 나눠서 하게되서 결과가 오염될것 같은데 해결법이 있나요?
    =>튜터님 : 클러스터링은 무조건 통일-안되면 랜덤샘플링- (30일에서 랜덤심플링 20~30프로 샘플링) 천만먼저 일단 시도 해보자.
  4. 머신러닝을 사용할때 수동으로 각각의 머신러닝을 만져보는것과 자동으로 오토글루온을 쓰는것중 의미가 있을까요?
    =>튜터님 : 포트폴리오에서 오토글루온만 사용한다면 머신러닝에 대한 이해도가 떨어져 보일수 있으므로 오토글루온은 크로스채킹정도로 사용해보자.-주석정도로.

내일 계획

  • 데이터 뽑기 계속하기
  • 1.에 해당하는 컬럼을 만들고 EDA를 진행하고 머신러닝 까지 해본다.
    최대한 월요일 전까지 유의미한 결과를 내서 튜터님께 검사받는게 목적이다.
profile
데이터 분석가를 꿈꾸고 있습니다.

0개의 댓글

관련 채용 정보