연비 단위 수정, CLASS 분류까지 전처리 완료한 파일로 진행('processed_df.csv')
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()
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))
클래스별 연료별 연비 교차분석

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

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()
