데이터 업로드
시험 데이터를 시스템에 업로드하고 분석 가능한 형태로 전처리하는 과정을 설명합니다.
지원 파일 형식
| 형식 | 확장자 | 비고 |
|---|---|---|
| CSV | .csv | UTF-8 인코딩, 쉼표 구분자 |
| Excel | .xlsx | 첫 번째 시트만 인식 |
CSV 파일은 첫 행에 컬럼 헤더를 포함해야 합니다. Excel 파일은 셀 병합이 없는 단일 테이블 형태여야 합니다.
데이터 구조
시험 데이터는 시계열 형태로 아래 컬럼을 포함합니다.
| 컬럼명 | 단위 | 설명 | 필수 여부 |
|---|---|---|---|
timestamp | s | 측정 시각 (0부터 시작하는 경과 시간) | 필수 |
speed | rad/s | 회전자 각속도 | 필수 |
current_d | A | d축 전류 | 필수 |
current_q | A | q축 전류 | 필수 |
voltage_d | V | d축 전압 | 선택 |
voltage_q | V | q축 전압 | 선택 |
torque | N·m | 축 토크 | 필수 |
temp_winding | degC | 권선 온도 | 필수 |
temp_bearing | degC | 베어링 온도 | 선택 |
temp_inverter | degC | 인버터 IGBT 접합 온도 | 선택 |
예시 CSV
timestamp,speed,current_d,current_q,torque,temp_winding
0.000,0.0,0.0,0.0,0.0,25.3
0.001,10.5,0.12,1.85,0.42,25.3
0.002,21.0,0.11,3.70,0.84,25.4
0.003,31.4,0.10,5.55,1.26,25.4
SI 단위 규칙
모든 데이터는 SI 단위계를 따릅니다.
- 속도: rad/s (RPM이 아닌 rad/s로 변환 필요. 1 RPM = 2π/60 rad/s)
- 전류/전압: A, V (피크값 기준)
- 토크: N·m (kgf·cm 등 비SI 단위 사용 금지)
- 온도: degC (절대온도 K가 아닌 섭씨)
RPM 단위로 기록된 속도 데이터가 있다면 업로드 전 변환하거나, 전처리 단계에서 자동 변환을 적용할 수 있습니다.
import numpy as np
RPM_TO_RADS = 2 * np.pi / 60
speed_rads = speed_rpm * RPM_TO_RADS
업로드 절차
웹 대시보드에서 업로드
- 대시보드 좌측 메뉴에서 데이터 관리 탭을 선택합니다
- 새 데이터 업로드 버튼을 클릭합니다
- 파일을 드래그 앤 드롭하거나 파일 선택 대화상자에서 선택합니다
- 업로드 후 미리보기 화면에서 컬럼 매핑을 확인합니다
- 확인 버튼을 누르면 전처리가 시작됩니다
CLI에서 업로드
simulation/runner.py를 통해 직접 데이터를 로드할 수 있습니다.
cd ev-motor-reliability
source venv/bin/activate
python -m simulation.runner --input data/test_001.csv --validate
--validate 옵션은 업로드 전 데이터 무결성을 검사합니다. 컬럼 누락, 단위 범위 초과, NaN 값 등을 확인합니다.
시리얼 포트에서 실시간 수집
SMC300 모터제어 패키지와 시리얼 통신으로 실시간 데이터를 수집하는 경우:
python -m automation.pipeline --mode acquire --port /dev/ttyUSB0 --baudrate 115200
수집된 데이터는 data/raw/ 디렉토리에 타임스탬프 기반 파일명으로 자동 저장됩니다.
데이터 전처리
업로드된 데이터는 분석 전 자동 전처리를 거칩니다.
이상치 제거
3σ (표준편차 3배) 범위를 벗어나는 데이터 포인트를 이상치로 판정합니다. 물리적 한계값도 함께 적용됩니다.
| 물리량 | 유효 범위 | 근거 |
|---|---|---|
| 속도 | 0 ~ 2,094 rad/s | PMSM 최대 20,000 RPM 기준 |
| 전류 | -500 ~ 500 A | 인버터 정격 기준 |
| 토크 | -200 ~ 200 N·m | 다이나모 최대 토크 기준 |
| 온도 | -40 ~ 200 degC | 절연 등급 H종 기준 |
이상치가 전체 데이터의 5% 이상이면 경고가 표시됩니다. 센서 고장이나 통신 오류 가능성을 점검해야 합니다.
결측값 보간
결측값(NaN)은 선형 보간(Linear Interpolation)으로 채웁니다. 연속 결측이 10개 이상이면 해당 구간을 제외하고 분석합니다.
import pandas as pd
df = pd.read_csv("data/test_001.csv")
df = df.interpolate(method="linear", limit=10)
df = df.dropna() # 보간 불가 구간 제거
리샘플링
측정 간격이 불균일한 경우, 지정된 샘플링 주기(기본값: 1 ms)로 리샘플링합니다. scipy의 interp1d를 사용하여 시간축을 정규화합니다.
전처리 결과 확인
전처리 완료 후 요약 리포트가 생성됩니다.
- 원본 데이터 포인트 수 / 전처리 후 데이터 포인트 수
- 제거된 이상치 수 및 비율
- 보간된 결측값 수
- 각 컬럼의 최소/최대/평균/표준편차
다음 단계
데이터 업로드와 전처리가 완료되면 분석 실행으로 진행합니다.