기초프로젝트_260128

3eo·2026년 1월 28일

연비 단위 수정, CLASS 분류까지 전처리 완료한 파일로 진행('processed_df.csv')

  1. df["VEHICLE_CLASS_GROUP"] = df["VEHICLE CLASS"].replace({
        # SUV
        "SUV": "SUV Standard",
        "SUV - STANDARD": "SUV Standard",
        "SUV - SMALL": "SUV Small",
        # 밴 / 특수 목적 차량
        "VAN - CARGO": "VAN / SPECIAL",
        "SPECIAL PURPOSE VEHICLE": "VAN / SPECIAL"})
    #클래스 이름 통일
    df["VEHICLE_CLASS_GROUP"] = df["VEHICLE_CLASS_GROUP"].str.strip().str.upper()
    df['VEHICLE_CLASS_GROUP'] = df['VEHICLE_CLASS_GROUP'].str.replace(':', ' -', regex=False)
    df["VEHICLE_CLASS_GROUP"].unique()

  1. 피벗 테이블 생성(클래스별x연료별)

import pandas as pd

#df.groupby(['VEHICLE_CLASS_GROUP', 'FUEL'])[['EMISSIONS', 'COMB (km/L)']].mean()
pivot = pd.pivot_table(df, index='VEHICLE_CLASS_GROUP', columns='FUEL', values=['EMISSIONS', 'COMB (km/L)'],aggfunc='mean')

pivot


참고: 일반 가솔린(X), 고급 가솔린(Z), 디젤(D), 에탄올(E85), 천연가스(N))

NaN 값은 빈칸으로 일단 둠

mean으로 해도 괜찮을까

클래스별 연료별 연비 교차분석

클래스별 연료별 배출량 교차분석

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
import seaborn as sns

#=============
# 연비 히트맵
# ============
plt.figure(figsize=(12,8))
comb_map = sns.heatmap(pivot['COMB (km/L)'], annot=True, cmap="YlGnBu", mask=pivot['COMB (km/L)'].isnull(), fmt=".0f")

# annot으로 박스 안에 값 표기 여부 결정
# cmap으로 색깔 설정
# NaN 값은 mask(빈칸)처리
# 1.8e+02 같은 소수점 없이 깔끔한 계산값 도출


comb_map.set_xlabel("")
comb_map.set_ylabel("")
# x라벨, y라벨이 잘 안 보여서, 원래 라벨은 없애고 인덱스 상자 만들어보기
box_text = "x = Fuel\ny = Vehicle Class"
box = dict(boxstyle='round,pad=0.4', facecolor='white', edgecolor='black', alpha=0.9)

comb_map.text(-0.3, 1.05, box_text, transform=comb_map.transAxes, fontsize=10, verticalalignment='top', bbox=box)
# transform=__.transAxes : (x, y) 좌표를 0~1 사이 값으로 위치 지정
# transAxes : x=0 → 왼쪽,  x=1 → 오른쪽,  y=0 → 아래쪽,  y=1 → 위쪽
# verticalalignment='top' : y값을 위쪽 기준으로 배치


plt.title("Heatmap (CLASS x FUEL) - COMB",fontsize=15)
plt.tight_layout()
plt.show()


#==============
# 배출량 히트맵
# =============

plt.figure(figsize=(12,8))
emissions_map = sns.heatmap(pivot['EMISSIONS'], annot=True, cmap="OrRd", mask=pivot['EMISSIONS'].isnull(), fmt=".0f")


emissions_map.set_xlabel("")
emissions_map.set_ylabel("")
emissions_map.text(-0.3, 1.05, box_text, transform=emissions_map.transAxes, fontsize=10, verticalalignment='top', bbox=box)
plt.title("Heatmap (CLASS x FUEL) - EMISSIONS",fontsize=15)
plt.tight_layout()
plt.show()

0개의 댓글