관심있는 주제/python

python zip file 바로 사용하기

Lynn123 2020. 9. 13. 14:35
반응형

너무 큰 데이터 또는 많은 데이터의 경우 zip으로 압축되어 있음

 

만약 압축 파일 안에 있는 csv 개수가 297,444개 혹은 그 이상이라고 가정했을 때,

서버에서 압축을 풀고 사용하려면 페이지가 엄청 느려지거나 렉 먹을 가능성이 높음

 

그렇기 때문에 바로 zip 파일을 읽어와 압축을 풀지 않고 파일들을 불러와 데이터를 보고싶을 수도 있음

 

만약 형식이 같은 데이터들이라면 각각 29만개 이상으로 두는 것보다 변수 하나 만들어서 레이블을 달고 하나로 합치는 것이 더 효율적일 수 있음

 

예시로 Ednet 데이터를 이용함 (github.com/riiid/ednet)

 

아래 코드를 보면, 먼저 zip file을 가져와서 파일 리스트를 만들고 필요없는 파일을 리스트에서 제거한 후 하나의 csv를 만드는 코드임

import pandas as pd
import os
import datetime
import zipfile
import zlib
import re
from tqdm import tqdm_notebook

KT_2_zip = zipfile.ZipFile('./data/EdNet-KT2.zip') 

file_list = zipfile.ZipFile.namelist(KT_2_zip)
file_list.remove('KT2/')
file_list.remove('__MACOSX/._KT2')


def make_total_df(zipfile_, file_list):
    total_df=pd.DataFrame([], columns=['timestamp', 'action_type', 'item_id', 'source', 'user_answer','platform','user'])

    for i in tqdm_notebook(range(len(file_list))):
        # read csv file in zip file
        df = pd.read_csv(zipfile_.open(file_list[i]))
        # to put user information 
        user=re.split('[/ .]', file_list[i])[-2]
        df['user']=user
        #concat dataframe
        total_df=pd.concat([total_df, df])
        
    return total_df
    
    total_df=make_total_df(zipfile_=KT_2_zip, file_list=file_list)

 

29만개를 모두 하나로 합치려니 24시간 넘게 걸려서... 샘플로 5000개만 합친 후 to_csv 저장하여 불러온 모습

 

반응형

'관심있는 주제 > python' 카테고리의 다른 글

Microsoft NNI(Neural Network Intelligence)  (0) 2020.04.14
sort_values(by='Date')  (0) 2020.04.02
Pandas_profiling  (0) 2019.07.05
tf.keras.callbacks  (0) 2019.06.18