NumPy 텍스트 파일 읽기 및 쓰기 (loadtxt, savetxt)
데이터 분석과 처리를 하다 보면 데이터를 파일로 저장하거나, 파일에서 데이터를 읽어와야 할 때가 많습니다. 특히 텍스트 파일 형식은 다양한 환경에서 호환성이 뛰어나 많이 사용됩니다. NumPy는 이러한 작업을 간단하게 처리할 수 있도록 loadtxt
와 savetxt
라는 함수를 제공합니다. 이번 포스팅에서는 이 두 함수의 사용법과 실전 예제를 통해 텍스트 파일 입출력 작업을 효율적으로 수행하는 방법을 알아보겠습니다.
1. NumPy loadtxt
와 savetxt
란?
numpy.loadtxt
loadtxt
함수는 텍스트 파일에서 데이터를 읽어 NumPy 배열로 변환합니다. 파일에 저장된 숫자 데이터를 쉽고 빠르게 로드할 수 있어 데이터 분석 초기 작업에 자주 활용됩니다.
- 주요 파라미터:
- fname: 읽어올 파일의 이름 또는 경로
- dtype: 데이터 타입 (기본값:
float
) - delimiter: 구분자 (기본값: 공백)
- skiprows: 무시할 행 수 (기본값: 0)
- usecols: 읽어올 열의 인덱스 (기본값: 모든 열)
numpy.savetxt
savetxt
함수는 NumPy 배열 데이터를 텍스트 파일로 저장합니다. 간단한 설정만으로 데이터 출력을 자동화할 수 있습니다.
- 주요 파라미터:
- fname: 저장할 파일의 이름 또는 경로
- X: 저장할 NumPy 배열
- fmt: 저장할 데이터 형식 (기본값:
%.18e
) - delimiter: 구분자 (기본값: 공백)
2. loadtxt
사용 예제
기본적인 텍스트 파일 읽기
먼저, 간단한 예제 파일을 만들어보겠습니다:
1.0 2.0 3.0
4.0 5.0 6.0
7.0 8.0 9.0
위 파일을 "data.txt"로 저장했다고 가정합니다. 이 파일을 읽는 코드는 다음과 같습니다:
import numpy as np
# 텍스트 파일에서 데이터 로드
data = np.loadtxt('data.txt')
print(data)
출력 결과:
[[1. 2. 3.]
[4. 5. 6.]
[7. 8. 9.]]
구분자가 있는 파일 읽기
다음은 쉼표(,
)로 구분된 파일 예제입니다:
1.0,2.0,3.0
4.0,5.0,6.0
7.0,8.0,9.0
이를 읽으려면 delimiter
파라미터를 설정해야 합니다:
# 쉼표로 구분된 파일 읽기
data = np.loadtxt('data_comma.txt', delimiter=',')
print(data)
출력 결과는 동일합니다.
특정 열만 읽기
파일에서 첫 번째와 세 번째 열만 읽고 싶다면:
# 특정 열 읽기
data = np.loadtxt('data.txt', usecols=(0, 2))
print(data)
출력 결과:
[[1. 3.]
[4. 6.]
[7. 9.]]
문자열이 포함된 파일 읽기
loadtxt
는 숫자 데이터를 처리하는 데 최적화되어 있습니다. 만약 파일에 문자열이 포함되어 있다면, genfromtxt
를 사용하는 것이 더 적합합니다. 예를 들어:
# 문자열이 포함된 파일 예제
a,1,2,3
b,4,5,6
c,7,8,9
# 문자열 처리 예제
structured_data = np.genfromtxt('data_with_strings.txt', delimiter=',', dtype=None, encoding='utf-8')
print(structured_data)
3. savetxt
사용 예제
기본적인 텍스트 파일 저장
NumPy 배열을 생성한 뒤 텍스트 파일로 저장해보겠습니다:
# NumPy 배열 생성
array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 텍스트 파일로 저장
np.savetxt('output.txt', array)
결과 파일 output.txt
:
1.000000000000000000e+00 2.000000000000000000e+00 3.000000000000000000e+00
4.000000000000000000e+00 5.000000000000000000e+00 6.000000000000000000e+00
7.000000000000000000e+00 8.000000000000000000e+00 9.000000000000000000e+00
형식 지정하여 저장하기
데이터 형식을 지정하려면 fmt
를 설정합니다:
# 형식 지정하여 저장
np.savetxt('output_formatted.txt', array, fmt='%.2f', delimiter=',')
결과 파일:
1.00,2.00,3.00
4.00,5.00,6.00
7.00,8.00,9.00
4. 실전 응용 예제
데이터 전처리 후 저장
파일에서 데이터를 읽고 일부만 저장하는 예제입니다:
# 데이터 로드
data = np.loadtxt('data.txt')
# 첫 번째 열과 두 번째 열의 합 계산
sum_column = data[:, 0] + data[:, 1]
# 새로운 배열 생성
new_data = np.column_stack((data, sum_column))
# 결과 저장
np.savetxt('processed_data.txt', new_data, fmt='%.2f', delimiter=',')
결과 파일 processed_data.txt
:
1.00,2.00,3.00,3.00
4.00,5.00,6.00,9.00
7.00,8.00,9.00,15.00
5. 주의사항
- 파일을 읽거나 쓸 때 경로가 올바른지 확인하세요.
savetxt
는 1차원 또는 2차원 배열만 저장할 수 있습니다. 다차원 배열을 저장하려면 다른 방법을 사용하세요.- 큰 데이터셋을 처리할 때는 메모리 사용량을 주의하세요.
6. 결론
loadtxt
와 savetxt
는 간단한 텍스트 파일 입출력을 처리할 때 매우 유용합니다. 이 두 함수만 잘 활용해도 데이터 전처리와 분석 작업에서 큰 효율성을 얻을 수 있습니다. 실전 프로젝트에서도 활용하며 익숙해지시길 바랍니다!
'Python > NumPy' 카테고리의 다른 글
NumPy를 사용한 성능 최적화 기법 (0) | 2025.10.21 |
---|---|
NumPy 배열 파일 저장 및 로드 (save, load, savez) (0) | 2025.10.19 |
NumPy 데이터 분석: 데이터 정렬 및 검색 (0) | 2025.10.18 |
NumPy로 배우는 데이터 분석: 배열 필터링과 수정 (0) | 2025.10.17 |
NumPy 데이터 분석: 조건에 따른 데이터 선택 (Boolean Indexing) (0) | 2025.10.16 |