카테고리 없음

240117_포스코 아카데미 빅데이터 정형화(3)

Seungyeon.Jung 2024. 1. 17. 11:28

 

plt.hist(df["CO2배출량"], bins=100)
plt.show()
plt.figure(figsize=(10,10))
for i, column in enumerate(df.select_dtypes(include="number").columns):
    plt.subplot(2,2,i+1)
    plt.hist(df[column])
    plt.title(column)
plt.figure(figsize=(10,10))
for i, column in enumerate(df.select_dtypes(include="number").columns):
    plt.subplot(2,2,i+1)
    plt.boxplot(df[column])
    plt.title(column)

2. 범주형 변수 분포 : 막대 그래프

df.select_dtypes(include="category")
plt.figure(figsize=(10,15))
plt.subplots_adjust(hspace=0.6)
for i, column in enumerate(df.select_dtypes(include="category").columns):
    plt.subplot(3,2,i+1)
    plt.bar(df[column].value_counts().index, df[column].value_counts())
    plt.title(column)
    plt.xticks(rotation=90)

3. 수치형 - 수치형 관계 : 산점도

plt.scatter(df["배기량"], df["CO2배출량"])
plt.xlabel("배기량")
plt.ylabel("CO2배출량")
plt.figure(figsize=(10,15))
plt.subplots_adjust(hspace=0.2)
for i, column in enumerate(df.select_dtypes(include="number").drop("CO2배출량",axis=1).columns):
    plt.subplot(2,2,i+1)
    plt.scatter(df[column], df["CO2배출량"])
    plt.xlabel(column)
    plt.ylabel("CO2배출량")

4. 범주형 - 수치형 관계 : 박스플롯

df.groupby("변속기")["CO2배출량"].mean()
변속기
AT     270.189804
CVT    237.713164
MT     226.766827
Name: CO2배출량, dtype: float64
plt.boxplot([df[df["변속기"] == "AT"]["CO2배출량"],df[df["변속기"] == "CVT"]["CO2배출량"],df[df["변속기"] == "MT"]["CO2배출량"]])
plt.xlabel("변속기")
plt.ylabel("Co2배출량")
plt.xticks(ticks=[1,2,3],labels=["AT","CVT","MT"])
plt.show()

sns.boxplot(x=df["변속기"],y=df["CO2배출량"],hue=df["연료"],palette="Set1")

plt.figure(figsize=(10,15))
plt.subplots_adjust(hspace=1)
for i, column in enumerate (df.select_dtypes(include="category").columns):
    plt.subplot(3,2,i+1)
    sns.boxplot(x=df[column],y=df["CO2배출량"],palette="Set1")
    plt.xticks(rotation=90)
plt.hist(df["CO2배출량"], bins=100)
plt.show()

실습 8 : 상관분석

    1. 수치형 변수간의 상관계수 확인하기
    2. 결과변수 CO2배출량과 입력변수간 상관계수 확인하고, 크기순으로 정열하기
    3. 결과변수 CO2배출량과 입력변수간 상관계수 크기를 그래프로 그리기

 

 

1. 수치형 변수간의 상관계수 확인하기

df.select_dtypes(include="number").corr()

2. 결과변수 CO2배출량과 입력변수간 상관계수 확인하고, 크기순으로 정열하기

df.select_dtypes(include="number").corr()["CO2배출량"].drop("CO2배출량")

3. 결과변수 CO2배출량과 입력변수간 상관계수 크기를 그래프로 그리기

x=df.select_dtypes(include="number").corr()["CO2배출량"].drop("CO2배출량")

 

plt.bar(x.index, x)
plt.ylabel("상관계수")

 

실습 9 : 회귀 모델링

[예측 모델링]

    1. 단순선형회귀분석
    2. 다중선형회귀분석
# 데이터 분할 : train, test
from sklearn.model_selection import train_test_split
# 선형회귀 분석
from sklearn.linear_model import LinearRegression 
# 모델성능 평가
from sklearn.metrics import r2_score, mean_squared_error
# import sklearn error 발생, python version 변경으로 해결

1. 단순선형회귀분석

1) 모델링
plt.scatter(df["배기량"],df["CO2배출량"])
plt.show()

train, test = train_test_split(df, train_size=0.7)
df.shape,train.shape, test.shape
((5150, 10), (3604, 10), (1546, 10))
lr=LinearRegression()
type(lr)
sklearn.linear_model._base.LinearRegression
lr.fit(train[["배기량"]],train["CO2배출량"])

vars(lr)
{'fit_intercept': True,
 'copy_X': True,
 'n_jobs': None,
 'positive': False,
 'feature_names_in_': array(['배기량'], dtype=object),
 'n_features_in_': 1,
 'coef_': array([37.42972939]),
 'rank_': 1,
 'singular_': array([77.94507477]),
 'intercept_': 131.30638860435425}

2) 예측

y_pred=lr.predict(test[["배기량"]])
y_pred
array([303.48314381, 221.13773915, 206.16584739, ..., 243.59557678,
       206.16584739, 262.31044148])
lt.scatter(test["배기량"],test["CO2배출량"])
plt.scatter(test["배기량"],y_pred)
plt.show()

plt.scatter(test["CO2배출량"], y_pred)
plt.xlabel("actual")
plt.ylabel("predicted value")

3) 잔차 분석

residual = test["CO2배출량"] - y_pred

plt.hist(residual)
plt.show()

4) 모델 성능 평가

r2_score(test["CO2배출량"],y_pred)
0.7263548041311751

2. 다중선형회귀분석

1) 모델링

mlr = LinearRegression()

mlr.fit(train[["배기량", "CITY연비", "HWY연비"]], train["CO2배출량"])

vars(mlr)
{'fit_intercept': True, 'copy_X': True, 'n_jobs': None, 'positive': False}

2) 예측

y_pred = mlr.predict(test[["배기량","CITY연비", "HWY연비"]])
y_pred
array([323.61111865, 258.59505271, 148.88789328, ..., 291.73235229,
       220.91062218, 229.41201416])
plt.scatter(test["배기량"],test["CO2배출량"])
plt.scatter(test["배기량"],y_pred)
plt.xlabel("배기량")
plt.ylabel("CO2배출량")
plt.show()

plt.scatter(test["CO2배출량"], y_pred)
plt.xlabel("actual")
plt.ylabel("predicted value")
Text(0, 0.5, 'predicted value')

3) 잔차 분석

residual = test["CO2배출량"] - y_pred

plt.hist(residual)
plt.show()

df # 정형데이터, structured data

4) 모델 성능 평가

r2_score(test["CO2배출량"],y_pred)
0.892796282133621