TIL(Today I Learned)
1️⃣실전 프로젝트(1)
주제: 모빌리티 데이터
- 도메인 조사 : 4조 포아송 도메인 조사 - Google Docs
4조 포아송 도메인 조사
주행 동역학 & 회생 제동 오병준 BMW i3 주행 동역학 핵심 요약 1. 주행저항 4요소 차량은 아래 4가지 저항을 이겨내며 주행함. 공기저항 : 속도↑ → 급격히 증가 구름저항 : 타이어·노면 마찰 등판
docs.google.com
- 분리된 데이터 병합 및 전처리 계획
- Trip병합 -> Time 기준 정렬
- 기본 전처리(컬럼명 및 중복 컬럼, 불필요 컬럼 제거) -> 시계열 1초 단위로 resampling
- diff계산 전 결측치 처리 -> 시계열 기반 전처리(변화량 feature 생성, 시계열 cleaning) ->
- 요약통계 생성 -> Overview 합치기 -> ML용 전처리
더보기
더보기
#Trip데이터 병합
import pandas as pd
import glob
import os
folder_path = "/content/drive/MyDrive/실전 프로젝트"
files = glob.glob(folder_path + "/Trip*.csv")
print("파일 개수:", len(files))
df_list = []
for f in files:
# 구분자 추가랑 인코딩 변경
try:
df = pd.read_csv(f, sep=";", encoding="utf-8-sig")
except:
df = pd.read_csv(f, sep=";", encoding="cp949")
# 깨진 문자 바꾸기
df.columns = df.columns.str.replace("캜", "℃", regex=False)
# Trip ID 추가하기
df["Trip_ID"] = os.path.basename(f).replace(".csv", "")
df_list.append(df)
# 전체 병합
all_trip = pd.concat(df_list, ignore_index=True)
# 저장하기
save_path = folder_path + "/all_trip.csv"
all_trip.to_csv(
save_path,
index=False,
encoding="utf-8-sig"
)
print("저장")
print(all_trip.head())
- 병합 후 데이터

- 추가 수정 예정
- 컬럼명 오탈자 수정 Velocity [km/h]]] -> Velocity [km/h]
- Unnamed: 컬럼 삭제
- 시계열 기반 정렬 및 1초 단위 리샘플링
2️⃣시계열 문제풀이
문제1: LOT 단위 요약 통계 생성
- 문제 설명: 다음 LOT 데이터에 대해 LOT_ID 별로 WIDTH의 평균(width_mean), 표준편차(width_std), 불량 비율(defect_ratio)을 계산하여 새로운 데이터프레임으로 출력하세요. (소수점 셋째 자리까지 표시, reset_index 사용)
- 데이터
data = {
'LOT_ID': ['LOT123','LOT123','LOT123','LOT123','LOT123',
'LOT124','LOT124','LOT124','LOT124','LOT124'],
'PRODUCT': [1, 2, 3, 4, 5, 1, 2, 3, 4, 5],
'WIDTH': [10.23, 10.15, 9.87, 10.31, 10.08,
11.02, 10.94, 11.21, 11.13, 10.87],
'DEFECT': ['OK','OK','NG','OK','OK',
'OK','NG','NG','OK','OK']
}
df = pd.DataFrame(data)
- 핵심
-
- LOT_ID로 그룹화: groupby()
- WIDTH는 평균, 표준편차: agg()
- DEFECT는 NG 비율: mean()
- 컬럼명을 단일 이름으로 정리 및 소수점 자리수 반올림
- 코드
result = df.groupby('LOT_ID').agg(
width_mean=('WIDTH', 'mean'),
width_std=('WIDTH', 'std'),
defect_ratio=('DEFECT', lambda x: (x == 'NG').mean())
).reset_index()
result = result.round({
'width_mean': 3,
'width_std': 3,
'defect_ratio': 1
})
print(result)
💡 느낀점
오늘은 TripA와 TripB 데이터를 하나의 파일로 병합하고, 컬럼 구조 및 결측치 여부를 점검하면서 데이터 전처리의 중요성을 다시 느낄 수 있었다. 특히 시계열 데이터인 점에서 집계로 이를 요약하면 시계열의 장점이 사라지기 때문에 변화량 Feature를 만드는 방안을 채택하였고, 통계 요약과 함께 적용할 예정이다. 또한 불필요한 컬럼과 데이터 타입을 정리하면서 실제 모델링 전 깔끔한 데이터를 만드는 과정의 필요성을 몸소 느꼈다.
'실전 프로젝트 대시보드' 카테고리의 다른 글
| Chapter.7 실전 프로젝트 대시보드(6) (0) | 2026.06.05 |
|---|---|
| Chapter.7 실전 프로젝트 대시보드(5) (0) | 2026.06.04 |
| Chapter.7 실전 프로젝트 대시보드(4) (0) | 2026.06.02 |
| Chapter.7 실전 프로젝트 대시보드(3) (0) | 2026.06.01 |
| Chapter.7 실전 프로젝트 대시보드(2) (1) | 2026.05.28 |