Python Matplotlib으로 CSV 데이터 시각화하기
matplotlib 라이브러리를 활용한 Python 스크립트로 CSV 파일에서 빠르게 시각화를 만들 수 있습니다. 이 예제에서는 행 번호, 조도(Lx), 온도, 시간, 날짜, Unix 타임스탬프 컬럼이 있는 LiLog.csv 파일을 사용합니다. 그래프는 X축에 타임스탬프(6번째 컬럼), Y축에 조도(2번째 컬럼)를 표시합니다.
Python 3 이상, matplotlib, 내장 csv 모듈이 필요합니다. Python 인터프리터 확인은 where python 명령어로 하고, Cygwin이나 Inkscape 번들 대신 깨끗한 설치를 권장합니다.
의존성 설치:
pip install matplotlib numpy
2D 선 그래프 기본 스크립트
이 코드는 데이터를 불러와 CSV를 파싱하고 선을 그립니다:
import matplotlib.pyplot as plt
import csv
X = []
Y = []
with open('LiLog.csv', 'r') as datafile:
plotting = csv.reader(datafile, delimiter=',') # 이 예제에서는 쉼표 사용
for ROWS in plotting:
X.append(float(ROWS[5]))
Y.append(float(ROWS[1]))
plt.plot(X, Y)
plt.title('CSV를 이용한 선 그래프')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()
X와 Y 리스트는 지정된 컬럼의 float 값으로 채워집니다. csv.reader는 구분자(여기서는 쉼표)를 처리합니다(파일 확인 필수). plt.plot으로 선을 그리고, show()로 창을 띄웁니다.
임계선과 주석이 포함된 고급 그래프
수평 임계선(63 Lx), 격자, 범례, 회전 라벨을 추가합니다:
import matplotlib.pyplot as plt
import csv
X = []
Y = []
with open('LiLog.csv', 'r') as datafile:
plotting = csv.reader(datafile, delimiter=',')
for ROWS in plotting:
X.append(float(ROWS[5]))
Y.append(float(ROWS[1]))
threshold = 63.0
T = [threshold] * len(Y)
plt.plot(X, Y)
plt.plot(X, T)
plt.title('조도 변화')
plt.xlabel('시간,[s]')
plt.ylabel('조도, [Lx]')
plt.grid()
plt.xticks(rotation=-90)
plt.legend(['조도', f'임계값 {threshold} Lx'])
plt.show()
배열 길이 확인: print(len(X), len(Y)). 데이터 타입은 list[float]입니다. matplotlib 창 툴바로 확대/축소, 팬 기능 사용 가능합니다.
의존성 및 설치
설치된 패키지 목록: pip freeze. 일반적인 matplotlib 출력:
- contourpy==1.3.3
- cycler==0.12.1
- fonttools==4.62.1
- kiwisolver==1.5.0
- matplotlib==3.10.8
- numpy==2.4.4
개별 설치: pip install matplotlib numpy.
데이터 시각화에서 Matplotlib의 강점
- 무료 오픈소스.
- 인터랙티브: 확대, PNG 저장, 축/격자 사용자 지정.
- 크로스플랫폼: Windows, Linux(GUI 지원).
- PyInstaller로 EXE 패키징하여 쉽게 공유.
- 최소 용량: .py 파일 하나.
- 헤드리스 자동화: GUI 없이 명령줄 실행.
한계
- 실시간 플로팅(예: COM/TCP 스트림)은 스레딩이나 FuncAnimation 필요.
- 대용량 데이터(100만 포인트 초과)는 느려짐—numpy 배열로 최적화.
핵심 팁
- 배열은
numpy사용:X = np.array(X)로 플로팅 속도 향상. - CSV 구분자:
delimiter=','또는';', 복잡 파일은pandas추천. - 축 라벨:
plt.xlabel,plt.ylabel에 단위(s, Lx) 포함. - 범례:
plt.legend(['데이터', '임계값'])으로 여러 선 표시. - 격자:
plt.grid()로 가독성 높임.
Python + matplotlib은 CSV 실험 데이터의 빠른 시각화에 최적입니다. 센서 로그 분석, 예를 들어 시간에 따른 조도 변화에 딱 맞아요.
— Editorial Team
아직 댓글이 없습니다.