반응형

데이터 파일을 메모리에 로드하지 않고 다룰 수 있는 dask를 간단히 사용해보았습니다. 



자세한 사용방법은 아래 링크를 참고하세요. 

https://docs.dask.org/en/latest/




2022. 1. 17 최초작성




소스코드 파일 이름을 dask.py로 하면 다음처럼 에러가 날 수 있으니 주의하세요.

임포트하려는 모듈이름 dask와 같은 소스코드 파일 이름을 사용했기 때문에 에러가 나는 것입니다.



(newenv) webnautes@webnautesui-MacBookAir python_work % /Users/webnautes/miniconda3/envs/newenv/bin/python /Users/webnautes/Documents/python_work/dask.py

Traceback (most recent call last):

  File "/Users/webnautes/Documents/python_work/dask.py", line 1, in <module>

import dask.dataframe as dd

  File "/Users/webnautes/Documents/python_work/dask.py", line 1, in <module>

import dask.dataframe as dd

ModuleNotFoundError: No module named 'dask.dataframe'; 'dask' is not a package




간단한 예제입니다. 

 

import dask.dataframe as dd
import glob
import os



# 지정한 경로에 있는 csv 파일 이름을 리스트에 저장합니다.
files = glob.glob(os.path.join('./daily_dataset', '*.csv'))


# 리스트에 있는 파일을 dask에서 로드합니다. 실제로 모든 파일을 메모리에 로드하지는 않습니다.
df = dd.read_csv(files, sep=',')


# 데이터프레임 일부를 출력합니다.
print(df.head())
#    LCLid     day  energy_median  energy_mean  energy_max  energy_count  energy_std  energy_sum  energy_min

# 0  MAC000027  2011-12-07     0.1470 0.159880   0.408        25 0.062123   3.997   0.103
# 1  MAC000027  2011-12-08     0.1705 0.193479   0.459        48 0.077042   9.287   0.105
# 2  MAC000027  2011-12-09     0.1440 0.156771   0.365        48 0.051995   7.525   0.101
# 3  MAC000027  2011-12-10     0.2415 0.264250   0.814        48 0.135007  12.684   0.101
# 4  MAC000027  2011-12-11     0.2785 0.288438   0.540        48 0.112697  13.845   0.126



# 데이터프레임의 shape를 이렇게는 가져올 수 없습니다.
# df.shape


# 두번째 차원 개수는 그냥 가져올 수 있습니다. 전체 데이터를 로드하지 않아도 알 수 있기 때문입니다.
print('df.shape[1]', df.shape[1])
df.shape[1] 9



# 첫번째 차원의 개수는 전체 데이터를 로드해야 알 수 있기 때문에 compute 메소드를 사용해야 가져올 수 있습니다.
# dask가 전체 파일들을 전부 메모리로 로드하지 않기 때문에
# 파일을 로드할 필요할때 마다 필요한 메소드를 호출해줄 필요가 있어 보입니다.
print('df.shape[0]', df.shape[0].compute())
# df.shape[0] 3510433



# energy_count 컬럼의 평균을 구합니다. 평균을 구하려면 디스크에서 데이터를 로드해야 하기 때문에 compute 메소드를 사용합니다.
print('energy_count mean', df.energy_count.mean().compute())

# energy_count mean 47.80363590474452


반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.

도움이 되셨다면 토스아이디로 후원해주세요.
https://toss.me/momo2024


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts