Pandas Dataframe은 보통 df.read_csv() 함수로 CSV 파일을 읽어 dataframe을 생성하지만, 성능 테스트 목적으로 random number를 가지는 dataframe 생성해야 하는 경우가 아래와 같이 가끔 있습니다.
Random number 생성은 Numpy random 또는 Built 모듈인 random 모듈 모두 사용 가능합니다. 구현 방법에 따라서 Dataframe의 생성 속도 차이는 상당히 발생합니다. 테스트 결과 10,000,000개 사이즈의 실행 속도를 비교하는 성능이 빠른 code는 1초 이내에 dataframe을 생성하지만, 성능이 느린 코드는 30분 이상 소요됩니다.
성능이 우수한 Code
성능이 우수한 코드는 아래와 같습니다.
df = pd.DataFrame(np.random.randint(0, row_size,size=(row_size, 1)), columns=['x'])
Numpy에서는 아래와 같이 np.random.radinit()에서 (m, n) 크기의 정수형 랜덤 값을 사용해서 Array를 생성할 수 있고, DataFrame에 그대로 전달할 수 있습니다. Numpy와 Dataframe 공식 문서를 첨부했습니다.
성능이 나쁜 Code:
성능이 나쁜 코드는 아래와 같습니다. 비워있는 Dataframe을 만들고, for loop를 통해서 각각의 rand 값을 만들고, dataframe.append()로 row를 추가하는 코드입니다. randinit() 함수가 여러 번 호출되고, df.append() 함수 또한 효율적이지 못합니다.
df = pd.DataFrame(columns=['idx', 'x'])
for idx in range(1, row_size):
# 1과 size 사이의 random 한 값 생성하기
number = random.randint(1, row_size)
# DataFrame에 특정 정보를 이용하여 data 채우기
df = df.append({'idx':idx, 'x':number}, ignore_index=True)
df.set_index('idx', inplace=True)
관련 글:
[SW 개발/Data 분석 (RDB, NoSQL, Dataframe)] - Python Pandas로 Excel과 CSV 파일 입출력 방법
[SW 개발/Python] - Python 정규식(Regular Expression) re 모듈 사용법 및 예제
[SW 개발/Data 분석 (RDB, NoSQL, Dataframe)] - Apple App Store 사용자 댓글(리뷰) 데이터 수집하기 (Sample code 포함)
[SW 개발/Data 분석 (RDB, NoSQL, Dataframe)] - 우분투 20.04에서 MariaDB 설치 및 기본 동작 확인 명령어
댓글