230327 / BSA04. 다양한 형태의 자료 파일 작업 속도 비교

BSA04_ReadWrite-Speed

 

필요한 패키지

import numpy as np  # NaN 처리할 때 많이 사용하는 라이브러리
import pandas as pd

 

데이터프레임 생성

pd.options.display.float_format = '{:,.4f}'.format  # 소수점 넷째자리까지 표현하도록 설정

# random으로 100,000개 관측개체 * 10 변수
난수개수 = 100000
변수개수 = 10
values = np.random.random((난수개수,변수개수))
df = pd.DataFrame(values)  # 데이터프레임 형태로 만듦

# 현재 df의 행과 열의 이름인 0~9, 0~99999는 숫자처럼 보이지만 문자열임

 

판다스 데이터프레임 관련 함수

  • info() : df에 대한 기본 정보 (행과 열의 수, 각 열의 데이터 타입 등)
  • shape : 행과 열의 수
  • dtypes : 변수(열)의 데이터 형식
  • columns : 변수(열)명
    • 전체 열 이름 변경 : df.columns=[...]
    • 열 이름 부분 변경 : df.rename(columns={'0':'A','1':'B'}, inplace=True)
  • head() : 앞부분 5개 return (개수 조정 가능) -> 앞 부분 데이터 선택
  • tail() : 뒷 부분 5개 return (개수 조정 가능) -> 뒷 부분 데이터 선택
  • loc : index(행) 이름 해당 또는 T/F 값에 따른 데이터 선택
  • iloc : 번호로 행/열의 데이터 선택
  • query() : 열들에 대해 boolean 연산결과로 rows 선택
    • ex) df.query('A>B') # df[df.A>df.B]와 동일

 

df.columns = ["A","B","C","D","E","F","G","H","I","J"]
df.info()

test = df.head(n=10)
test.tail()

 

작업 속도 비교

# timeit으로 실행 측정한 시간을 비교
# 결과를 저장할 빈 데이터프레임 생성
df_result = pd.DataFrame(columns=['read', 'write'])  # 컬럼명만 지정
df_result.head()


# !pip install openpyxl (패키지를 설치하기만 하면 됨, 패키지를 불러올 필요는 없음)
# 시간이 많이 걸리기 때문에 실습에서는 제외
# 1. excel
tm = %timeit -o df.to_excel('test_data.xlsx')
df_result.loc['excel', 'write'] = tm.best
tm = %timeit -o df = pd.read_excel('test_data.xlsx')
df_result.loc['excel', 'read'] = tm.best


# 2. CSV
tm = %timeit -o df.to_csv('test_data.csv')  # 7번 정도 반복 작업(저장하는 작업)한 결과를 tm에 저장
df_result.loc['csv', 'write'] = tm.best  # tm 중 best값을 df_result에 저장함
tm = %timeit -o pd.read_csv('test_data.csv')  # 저장한 것을 읽어들이는 작업 (7번 정도 반복 작업)한 결과를 tm에 저장
df_result.loc['csv', 'read'] = tm.best  # tm 중 가장 빠른 값을 df_result에 저장함


# 3. pickle
tm = %timeit -o df.to_pickle('test_data.pickle')
df_result.loc['pickle', 'write'] = tm.best
tm = %timeit -o pd.read_pickle('test_data.pickle')
df_result.loc['pickle', 'read'] = tm.best


# 4. feather
tm = %timeit -o df.to_feather('test_data.ftr')
df_result.loc['feather', 'write'] = tm.best
tm = %timeit -o pd.read_feather('test_data.ftr')
df_result.loc['feather', 'read'] = tm.best


# 5. parquet(파케이)
# 많은 빅데이터 처리 프레임 워크 및 플랫폼 지원
# 다양한 I/O 최적화를 제공하는 오픈소스 칼럼 기반 파일 형식
tm = %timeit -o df.to_parquet('test_data.parquet')
df_result.loc['parquet', 'write'] = tm.best
tm = %timeit -o pd.read_parquet('test_data.parquet')
df_result.loc['parquet', 'read'] = tm.best

 

 

spark 기본 데이터 소스

  • Parquet files
  • ORC files
  • JSON files
  • CSV files
  • Text files
  • Hive tables
  • JDBC to other databases
  • Avro files
  • Binary file: Ex, image file

 

작업 속도 비교

df_result

%matplotlib inline
import matplotlib.pyplot as plt
plt.rcParams["axes.grid"] = True
plt.rcParams["figure.figsize"] = (10,5)
plt.rcParams["font.size"] = 20

df_result
df_result.plot(kind='bar')
plt.show()