일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Kaggle
- 빅데이터분석기사
- 예제소스
- pytorch
- 인공지능
- GPU
- ml 웹서빙
- 성능
- Ai
- 1유형
- streamlit
- 공간시각화
- 딥러닝
- K최근접이웃
- 공간분석
- 실기
- 캐글
- DASH
- 3유형
- webserving
- KNN
- dl
- gradio
- 머신러닝
- CUDA
- 2유형
- fastapi
- ㅂ
- qgis
- QGIS설치
- Today
- Total
에코프로.AI
[python] Python 메모리 최적화 기법: 효율적인 코드를 위한 11가지 팁 본문
Python 프로그램의 메모리 사용을 최적화하는 방법에 대해 알아보겠습니다. 특히 Pandas DataFrame을 사용할 때 메모리를 효율적으로 관리하는 방법도 포함하여 설명하겠습니다.
1. 제너레이터 사용하기
제너레이터는 필요할 때만 데이터를 생성하므로 메모리를 크게 절약할 수 있습니다.
# 리스트 사용 (메모리 비효율적)
numbers_list = [i for i in range(1000000)]
# 제너레이터 사용 (메모리 효율적)
numbers_generator = (i for i in range(1000000))
2. 불필요한 객체 삭제하기
del 키워드를 사용하여 더 이상 필요하지 않은 객체를 삭제할 수 있습니다.
a = [1, 2, 3, 4, 5, ..., 100000000]
# 객체 사용 후
del a
3. 효율적인 데이터 구조 선택하기
상황에 따라 적절한 데이터 구조를 선택하는 것이 중요합니다.
예를 들어, 튜플은 리스트보다 메모리를 덜 사용합니다.
import sys
my_tuple = (1, 2, 3, 4, 5)
my_list = [1, 2, 3, 4, 5]
print(sys.getsizeof(my_tuple)) # 80
print(sys.getsizeof(my_list)) # 120
4. 전역 변수 사용 최소화하기
전역 변수는 프로그램 수명 전체 동안 메모리를 점유하므로, 가능한 한 지역 변수를 사용하는 것이 좋습니다.
# 비효율적인 방법
global_var = [i for i in range(1000000)]
def process_data():
for item in global_var:
# 처리 로직
# 효율적인 방법
def process_data():
local_var = (i for i in range(1000000))
for item in local_var:
# 처리 로직
5. 문자열 연결 시 join() 메소드 사용하기
문자열은 불변이므로, '+' 연산자로 연결하면 매번 새로운 문자열 객체가 생성됩니다.
join() 메소드를 사용하면 더 효율적입니다.
# 비효율적인 방법
result = ''
for i in range(1000):
result += str(i)
# 효율적인 방법
result = ''.join(str(i) for i in range(1000))
6. 대용량 데이터 처리 시 청크 단위로 읽기
대용량 파일을 처리할 때는 전체를 한 번에 메모리에 로드하지 않고, 청크 단위로 읽는 것이 효율적입니다.
import pandas as pd
# 비효율적인 방법
df = pd.read_csv('large_file.csv')
# 효율적인 방법
chunk_size = 10000
for chunk in pd.read_csv('large_file.csv', chunksize=chunk_size):
# 청크 단위로 처리
7. 가비지 컬렉션 수동 제어하기
필요한 경우 gc 모듈을 사용하여 가비지 컬렉션을 수동으로 제어할 수 있습니다
import gc
# 가비지 컬렉션 강제 실행
gc.collect()
8. DataFrame 메모리 사용량 확인하기
Pandas의 memory_usage() 함수를 사용하여 DataFrame의 메모리 사용량을 확인할 수 있습니다
import pandas as pd
df = pd.DataFrame({'A': range(1000), 'B': [x * 2.5 for x in range(1000)]})
print(df.memory_usage(deep=True))
9. 데이터 타입 최적화하기
적절한 데이터 타입을 사용하여 메모리 사용량을 줄일 수 있습니다
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': np.random.rand(1000000)})
df['A'] = pd.to_numeric(df['A'], downcast='float')
10. 불필요한 열 제거하기
필요하지 않은 열을 제거하여 메모리 사용량을 줄일 수 있습니다
import pandas as pd
df = pd.read_csv('large_file.csv')
df = df[['important_column1', 'important_column2']]
11. 내부 할당
표준 할당 작업과 달리 내부 할당 작업은 새 DataFrame 개체를 생성하지 않고,
원래 DataFrame자체를 수정하려고 합니다.
import pandas as pd
# 비효율적인 방법 (표준 할당)
df2 = df1.fillna(0)
# 효율적인 방법 (내부 할당)
df1.fillna(0, inplace =True)
이러한 기법들을 적절히 활용하면 Python 프로그램과 Pandas DataFrame의 메모리 사용을 크게 최적화할 수 있습니다.
효율적인 메모리 관리는 프로그램의 성능 향상과 안정성 개선에 큰 도움이 됩니다.
끝~

'AI Tutorial' 카테고리의 다른 글
[QGIS] QGIS 개요 및 설치 (2) | 2024.12.08 |
---|---|
[재정데이터] 미니프로젝트 주제선정관련 (4) | 2024.11.26 |
[GitHub] Colab에서 GoogleDrive의 파일 GitHub연동 (0) | 2024.11.07 |
[Python] Pandas - DataFrame 합치기 (Feat. concat(), merge(), join()) (3) | 2024.11.05 |
[Python] Pandas - DataFrame의 컬럼명 변경 (0) | 2024.10.23 |