기초프로젝트_260130

3eo·2026년 1월 30일
  1. 소형 차에는 O연료, 대형 차에는 O 연료 ←- 이런 방식으로 조합을 제시하는가?

  2. 단기적 관점과 장기적 관점으로 나눠서 개발 전략 제시해도 좋을 듯

  3. 정책 수립도 제시할 것인지 ( 예를 들어 O 연료 규제 강화, OO class 차량에 대한 추가 비용(..?)

데이터 출처, 구성, 관측단위, 행/열 개수

  • Kaggle의 Fuel Consumption 2000–2022에서 제공된 공개 데이터셋
  • 하나의 CSV 파일(차량_연비_데이터(2002~2022).csv)로 구성
  • 관측 단위 : 차량 모델 (데이터 한 행(row) 당 특정 차량 모델의 성능 기록)
  • 관측 기간 : 2002년부터 2022년까지 20년 간의 데이터를 포함
📊

분석할 데이터의 행열 개수

  • raw data : (22556, 13)
  • 정제 data : (22224, 12)
📊

분석할 데이터의 컬럼 타입과 기술통계(min/median/mean/max, 결측치 수)

  • (이상치를 제거하지 않기로 결정한 이유) 필요
  • (OO % 수치 제시 & 시각화 자료)
📊

데이터 컬럼명 의미 단위 (13개의 컬럼)

  • VEHICLE CLASS: 차량 분류
    • 차량 크기와 목적에 따른 분류 (예: SUV, 세단, 트럭).
  • MODEL: 차량 모델
    • 차량의 모델명 (예: Sonata, Model S).
  • FUEL: 연료 종류
    • 차량의 주요 연료 유형 (예: 일반 가솔린(X), 고급 가솔린(Z), 디젤(D), 에탄올(E85), 천연가스(N)).
  • COMB (L/100 km): 복합 연비
    • 도시와 고속도로 연비를 종합한 평균 연료 소비량.
    • 도시 연비(55%)와 고속도로 연비(45%)를 종합한 복합 연비.
  • EMISSIONS: 배출량
    • 이산화탄소 배출량 (단위: g/km).

연비 및 CO2 배출량은 친환경 차량 설계의 주요 기준이며, 데이터 기반 정책 수립의 핵심 요소

차량의 판매량과 연비는 매우 연관이 높으며 제조사 입장에서는 필수로 관리해야 하는 항목

📊

데이터 전처리 방법 및 선정 이유 ***

단위변환/스케일링/파생변수→ 단위변환 적합

  1. 분석의 일관성과 가독성을 위해 한국 표준식으로 단위변환을 해주었습니다. L/100km → km/L

    # 1. 단위 변환하여 새 컬럼 생성: L/100km → km/L
    df['COMB (km/L)'] = 100 / df['COMB (L/100 km)']  ---> ppt에 직접 작성해서 첨부
    df['CITY (km/L)'] = 100 / df['CITY (L/100 km)']
    df['HWY (km/L)']  = 100 / df['HWY (L/100 km)']
  2. COMB (km/L)와 같이 의미는 같으나 단위만 다른 중복 정보를 제공하는 변수는 제외하였습니다.

# 2. COMB(mpg) 등 필요없는 컬럼들 삭제하기
df = df.drop(columns=[
    'COMB (L/100 km)', 'CITY (L/100 km)', 'HWY (L/100 km)', 'COMB (mpg)'
])
df.head()
  1. 범주형 변수의 표기 일관성을 위해 컬럼 값의 대소문자 통합 및 특수문자 통일을 하였습니다.
# 3. 클래스명 대문자로 통일하기
df["VEHICLE CLASS"] = df["VEHICLE CLASS"].str.strip().str.upper()
df['VEHICLE CLASS'] = df['VEHICLE CLASS'].str.replace(':', ' -', regex=False)
df["VEHICLE CLASS"].unique()
  1. 이에 따라 연비가 좋은 차량( Vehicle Class : 차량 크기와 목적에 따른 분류 )

이유: 해당 컬럼의 범주가 세분화되어 있어 분석 목적에 맞는 비교가 어렵다고 판단했습니다. 따라 도매인지식으로 차급으로 그룹핑

# 4. 차량 분류 그룹핑
mapping = {
     # SUV
    'SUV': 'SUV - STANDARD',
    'SPECIAL PURPOSE VEHICLE': 'VAN - CARGO'
}
group_df = df.copy()
group_df['VEHICLE CLASS'] = df['VEHICLE CLASS'].replace(mapping).copy()
group_df["VEHICLE CLASS"].unique()
  1. 하이브리드 제거
# 'MODEL' 컬럼에서 'HYBRID'라는 글자가 포함된 행을 제외(~)하고 새로운 데이터프레임 생성
r_h_df = df1[~df1['MODEL'].str.contains('HYBRID', case=False, na=False)].copy() # ~: not의 의미로 hybrid가 포함되지 않은 행만 남김
r_h_df.shape

# 하이브리드 전처리한 데이터 저장
r_h_df.to_csv("data/processed_hybrid_df.csv", index=False)

(도메인 지식→하이브리드 관련 데이터 확인→지식/예상과 일치(특수한 케이스)→제거)

어떤 점에서 특수 차량이라고 보셨나요? - 도메인 지식

분석 결과를 보고 난 후 처리한 것이니까 후처리인가요? - 혜리 튜터님 지도

⇒

도메인 지식 근거만으로 뒷받침해서 이야기해도 되는가? - 도메인+데이터 확인

하이브리드를 뺀 차량별 연비/배출량만 봄 → 하이브리드를 함께 포함해서 분석 → 올려치기..?

단위변환/스케일링

📊

데이터 전처리 방법 및 선정 이유

단위변환/스케일링/파생변수→ 단위변환 적합

  1. 분석의 일관성과 가독성을 위해 한국 표준식으로 단위변환을 해주었습니다. L/100km → km/L

    # 1. 단위 변환하여 새 컬럼 생성: L/100km → km/L
    df['COMB (km/L)'] = 100 / df['COMB (L/100 km)']
    df['CITY (km/L)'] = 100 / df['CITY (L/100 km)']
    df['HWY (km/L)']  = 100 / df['HWY (L/100 km)']
  2. COMB (km/L)와 같이 의미는 같으나 단위만 다른 중복 정보를 제공하는 변수는 제외하였습니다.

# 2. COMB(mpg) 등 필요없는 컬럼들 삭제하기
df = df.drop(columns=[
    'COMB (L/100 km)', 'CITY (L/100 km)', 'HWY (L/100 km)', 'COMB (mpg)'
])
df.head()
  1. 범주형 변수의 표기 일관성을 위해 컬럼 값의 대소문자 통합 및 특수문자 통일을 하였습니다.
# 3. 클래스명 대문자로 통일하기
df["VEHICLE CLASS"] = df["VEHICLE CLASS"].str.strip().str.upper()
df['VEHICLE CLASS'] = df['VEHICLE CLASS'].str.replace(':', ' -', regex=False)
df["VEHICLE CLASS"].unique()
  1. 이에 따라 연비가 좋은 차량( Vehicle Class : 차량 크기와 목적에 따른 분류 )

이유: 해당 컬럼의 범주가 세분화되어 있어 분석 목적에 맞는 비교가 어렵다고 판단했습니다. 따라 도매인지식으로 차급으로 그룹핑

# 4. 차량 분류 그룹핑
mapping = {
     # SUV
    'SUV': 'SUV - STANDARD',
    'SPECIAL PURPOSE VEHICLE': 'VAN - CARGO'
}
group_df = df.copy()
group_df['VEHICLE CLASS'] = df['VEHICLE CLASS'].replace(mapping).copy()
group_df["VEHICLE CLASS"].unique()
  1. 하이브리드 제거, 제거이유(키워드 작성 혹은 발표)
# 'MODEL' 컬럼에서 'HYBRID'라는 글자가 포함된 행을 제외(~)하고 새로운 데이터프레임 생성
r_h_df = df1[~df1['MODEL'].str.contains('HYBRID', case=False, na=False)].copy() # ~: not의 의미로 hybrid가 포함되지 않은 행만 남김
r_h_df.shape

# 하이브리드 전처리한 데이터 저장
r_h_df.to_csv("data/processed_hybrid_df.csv", index=False)

(도메인 지식→하이브리드 관련 데이터 확인→지식/예상과 일치(특수한 케이스)→제거)

어떤 점에서 특수 차량이라고 보셨나요? - 도메인 지식

분석 결과를 보고 난 후 처리한 것이니까 후처리인가요? - 혜리 튜터님 지도

⇒

도메인 지식 근거만으로 뒷받침해서 이야기해도 되는가? - 도메인+데이터 확인

하이브리드를 뺀 차량별 연비/배출량만 봄 → 하이브리드를 함께 포함해서 분석 → 올려치기..?

단위변환/스케일링

📊

파생변수(★) 공식 및 생성 이유

발표 : 이 파생변수에선 차급 간 특성과 연료 간 특성을 비교하기 위해

차량을 클래스별,

복합연비와 이산화탄소 배출량의 중앙값을 대표값으로 산출하여

별도의 파생 데이터프레임을 구성하였습니다.

  • 차량클래스별 파생변수
    # 차량 클래스별 연비 중앙값 계산 및 내림차순 정렬
    veh_comb_sorted_df = df.groupby("VEHICLE CLASS", as_index=False)["COMB (km/L)"].median().sort_values(by="COMB (km/L)", ascending=False)
    veh_comb_sorted_df
    # 차량 클래스별 CO2 배출량 중앙값 계산 및 내림차순 정렬
    veh_co2_sorted_df = df.groupby("VEHICLE CLASS", as_index=False)["EMISSIONS"].median().sort_values(by="EMISSIONS", ascending=False)
    veh_co2_sorted_d
  • 연료별 파생변수
    # 연료 유형별 연비 중앙값 계산 및 내림차순 정렬
    fuel_comb_sorted_df = df.groupby("FUEL", as_index=False)["COMB (km/L)"].median().sort_values(by="COMB (km/L)", ascending=False)
    fuel_comb_sorted_df
    # 연료 유형별 CO2 배출량 중앙값 계산 및 내림차순 정렬
    fuel_co2_sorted_df = df.groupby("FUEL", as_index=False)["EMISSIONS"].median().sort_values(by="EMISSIONS", ascending=False)
    fuel_co2_sorted_df

3

0개의 댓글