본문 바로가기
SW 개발/Data 분석 (RDB, NoSQL, Dataframe)

Random Number를 가지는 Pandas Dataframe 생성 (좋은 code와 나쁜 code 비교)

by Kibua20 2021. 7. 27.

Pandas Dataframe은 보통 df.read_csv() 함수로 CSV 파일을 읽어 dataframe을 생성하지만,  성능 테스트 목적으로 random number를 가지는 dataframe 생성해야 하는 경우가 아래와 같이 가끔 있습니다. 

 

[SW 개발/Data 분석 (RDB, NoSQL, Dataframe)] - Pandas Dataframe 처리 속도 향상을 위한 병렬 처리 방법: Swifter 모듈 (사용법 쉬움))

 

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 공식 문서를 첨부했습니다.

출처: https://numpy.org/doc/stable/reference/random/generated/numpy.random.randint.html

 

출처: https://numpy.org/doc/stable/reference/random/generated/numpy.random.randint.html
 출처: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html

 

성능이 나쁜 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)

 

[참고 링크] https://stackoverflow.com/questions/32752292/how-to-create-a-dataframe-of-random-integers-with-pandas

 

관련 글:

[SW 개발/Data 분석 (RDB, NoSQL, Dataframe)] - Pandas Dataframe 처리 속도 향상을 위한 병렬 처리 방법: Swifter 모듈 (사용법 쉬움)

[SW 개발/Data 분석 (RDB, NoSQL, Dataframe)] - Pandas Dataframe Groupby() 함수로 그룹별 연산하기: Split, Apply, Combine

[SW 개발/Data 분석 (RDB, NoSQL, Dataframe)] - Python Pandas로 Excel과 CSV 파일 입출력 방법

[SW 개발/Python] - Python 정규식(Regular Expression) re 모듈 사용법 및 예제

[SW 개발/Data 분석 (RDB, NoSQL, Dataframe)] - Python KoNLPy와 WordCloud를 활용하여 WordCloud 생성하기 (Sample code 포함)

[SW 개발/Data 분석 (RDB, NoSQL, Dataframe)] - Apple App Store 사용자 댓글(리뷰) 데이터 수집하기 (Sample code 포함)

[SW 개발/Data 분석 (RDB, NoSQL, Dataframe)] - Python Selenium과 BeautifulSoup을 활용하여 Google PlayStore 사용자 리뷰 (댓글) 가져오기 (Sample Code 포함)

[SW 개발/Data 분석 (RDB, NoSQL, Dataframe)] - 우분투 20.04에서 MariaDB 설치 및 기본 동작 확인 명령어

[SW 개발/Data 분석 (RDB, NoSQL, Dataframe)] - Dataframe(또는 Numpy)를 JSON 출력 시 에러: TypeError: Object of type int64 is not JSON serializable




댓글