import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 1. 데이터 로드, 확인
df = pd.read_csv('c:\\data\\auto-mpg.csv', header=None)
df.columns = ['mpg','cylinders','displacement','horsepower','weight','acceleration','model year','origin','name']
print(df.head())
pd.set_option('display.max_columns', 10) # 행 10개까지 출력
print(df.head())
# 2. 데이터 탐색
print(df.info())
horsepower에 전처리가 필요한 문자가 포함되어있어서 object 문자형으로 출력되었는데, 이를 수치형 데이터로 변경해야 한다.
print(df['horsepower'].unique())
확인결과 '?' 라는 문자가 끼어있었다.
def isNumber(s):
try:
float(s)
return True
except ValueError:
return False
for i in df['horsepower']:
if isNumber(i)==False:
print(i)
데이터가 대용량이라 눈으로 확인하기 힘든 경우는 위 방법을 사용하면 될 것 같다.
# 3. 결측치 처리
df['horsepower'].replace('?', np.nan, inplace=True) # '?'을 np.nan으로 변경
df.dropna(subset=['horsepower'], axis=0, inplace=True) # 누락 데이터 행(horsepower 기준)을 삭제
df['horsepower'] = df['horsepower'].astype('float') # 실수형 데이터만 남았기 때문에 object 타입이던 horsepower을 실수형으로 변환
# 4. 속성간 관계 살펴보기
ndf = df[['mpg', 'cylinders', 'horsepower', 'weight']]
ndf.plot(kind='scatter', x='weight', y='mpg', c='coral', s=10, figsize=(10, 5))
plt.show()
plt.close()
fig = plt.figure(figsize=(10, 5)) # 전체 그림판 가로 10, 세로 5로 잡아주고
ax1 = fig.add_subplot(1, 2, 1) # 첫번째 그림판 영역
ax2 = fig.add_subplot(1, 2, 2) # 두번째 그림판 영역
sns.regplot(x='weight', y='mpg', data=ndf, ax=ax1) # 회귀선 표시
sns.regplot(x='weight', y='mpg', data=ndf, ax=ax2, fit_reg=False) #회귀선 미표시
plt.show()
plt.close()
sns.jointplot(x='weight', y='mpg', data=ndf) # 회귀선 없음
sns.jointplot(x='weight', y='mpg', kind='reg', data=ndf) # 회귀선 표시
plt.show()
plt.close()
sns.pairplot(ndf) # 모든 경우의 수 그리기
plt.show()
plt.close()
# 5. 데이터셋 구분 - 훈련용(train data)/ 검증용(test data)
속성(변수) 선택
X=ndf[['weight']] #독립 변수 X
y=ndf['mpg'] #종속 변수 Y
# train data 와 test data로 구분(7:3 비율)
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=10) # seed : 10
print('train data 개수: ', len(X_train))
print('test data 개수: ', len(X_test))
# 6. 단순회귀분석 모형 - sklearn 사용
from sklearn.linear_model import LinearRegression
lr = LinearRegression() # 단순회귀분석 모형 객체 생성
lr.fit(X_train, y_train) # train data를 가지고 모형 학습
r_square = lr.score(X_test, y_test) # 학습을 마친 모형에 test data를 적용하여 결정계수(R-제곱) 계산
print(r_square) # 0.6822458558299325
print(lr.coef_) # 회귀식의 기울기
print(lr.intercept_) # 회귀식의 y절편
# 모형에 전체 X 데이터를 입력하여 예측한 값 y_hat을 실제 값 y와 비교
y_hat = lr.predict(X)
plt.figure(figsize=(10, 5)) # plot 사이즈 설정
ax1 = sns.distplot(y, hist=False, label="y")
ax2 = sns.distplot(y_hat, hist=False, label="y_hat", ax=ax1)
plt.show()
plt.close()
# 예측 성능을 높이기 위하여 단순 회귀 -> 다항 회귀
1. 단순회귀 : 독립변수 한개에 종속변수 한개 ( 선형 회귀선 )
2. 다항회귀 : 독립변수 한개에 종속변수 한개 ( 비선형 회귀선 )
# 다항식 변환
poly = PolynomialFeatures(degree=2) #2차항 적용
X_train_poly=poly.fit_transform(X_train) #X_train 데이터를 2차항으로 변형
'나 취준생 > 파이썬' 카테고리의 다른 글
파이썬 의사결정트리 (0) | 2021.02.23 |
---|---|
파이썬 나이브 베이즈 (0) | 2021.02.22 |
파이썬 knn (0) | 2021.02.22 |
카카오 비밀지도 (0) | 2020.12.28 |
자카드 유사도 + 카카오 문제 (0) | 2020.12.24 |