본문 바로가기
PYTHON

20200325 - 2 파이썬 통계기반 데이터 분석

by 낫싱 2020. 3. 25.
728x90
반응형

ml_0325호지수 - Jupyter Notebook.pdf
0.78MB
ml_통계기반 데이터 분석_평가_0325호지수 - Jupyter Notebook.pdf
0.32MB
ml_통계학_평가_0325호지수 - Jupyter Notebook.pdf
0.12MB
ml_0325호지수.ipynb
0.36MB
ml_통계기반 데이터 분석_평가_0325호지수.ipynb
0.04MB
ml_통계학_평가_0325호지수.ipynb
0.01MB

지도학습(Supervised Learning) : 정답을 알려주며 학습하는 것.

고양이 사진을 주고(input data), 이 사진은 고양이(정답지 - label data)야.

사자 사진을 주고, 이 사진은 사자야. 라고 알려주는 학습 방식

회귀 : 어떤 데이터들의 특징(feature)을 토대로 값을 예측

분류 : 이진 분류, 다중 분류

K-최근접 이웃(k-Nearest Neigbors)

선형회귀(Linear Regression)

로지스틱 회귀(Logistic Regression)

서포트 벡터 머신(SVM, Support Vector Machine)

결정 트리(Decision Tree)와 랜덤 포레스트(Random Forest)

신경망 (Neural Network)

 

비지도학습(Unsupervised Learning) : 정답을 알려주지 않고(label 없음), 비슷한 데이터들을 군집화

군집화, 동물이 '무엇' 이라고 기계가 정의는 할 수 없지만 비슷한 단위로 군집화

 

강화학습(Reinforcement Learning)

상과 벌이라는 보상(reward)을 주며 상을 최대화 하고 벌을 최소화 하도록 강화 학습하는 방식

 

회귀선 : 주어진 데이터를 대표하는 하나의 직선

 

회귀식 : 회귀선을 함수로 표현한 것

 

단순선형 회귀분석 : y = wx + b인 회귀식에서 x가 1개

 

잔차 : 관측값의 y와 예측값의 y간의

 

최소제곱법 : 잔차의 제곱의 합이 최소가 되도록 회귀계수를 구함

 

회귀

소득이 증가하면 소비도 증가. 어떤 변수가 다른 변수에 영향을 준다면 두 변수 사이에 선형관계가 있다고 할 수 있음.

두 변수 사이에 일대일로 대응되는 확률적, 통계적 상관성을 찾는 알고리즘을 Simple Linear Regression 이라고 함. 지도학습

변수 X와 Y에 대한 정보를 가지고 일차 방정식의 계수 a,b를 찾는 과정이 단순회귀분석 알고리즘

In [1]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

import pandas as pd

import numpy as np

import seaborn as sns

import matplotlib.pyplot as plt

%matplotlib inline

import warnings

warnings.filterwarnings('ignore')

 

df = pd.read_csv('auto-mpg.csv') #, header=None

df.columns = ['mpg','cylinders','displacement','horsepower',

'weight','acceleration','model year','origin','name']

df.head()

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Out[1]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 6열 선택6열 다음에 열 추가
  • 7열 선택7열 다음에 열 추가
  • 8열 선택8열 다음에 열 추가
  • 9열 선택9열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

mpg

cylinders

displacement

horsepower

weight

acceleration

model year

origin

name

0

15.0

8

350.0

165.0

3693.0

11.5

70

1

buick skylark 320

1

18.0

8

318.0

150.0

3436.0

11.0

70

1

plymouth satellite

2

16.0

8

304.0

150.0

3433.0

12.0

70

1

amc rebel sst

3

17.0

8

302.0

140.0

3449.0

10.5

70

1

ford torino

4

15.0

8

429.0

198.0

4341.0

10.0

70

1

ford galaxie 500

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

In [2]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# horsepower 열의 자료형 변경(문자->숫자)

df['horsepower'].replace('?', np.nan, inplace=True)

df.dropna(subset=['horsepower'], axis=0, inplace=True) #누락 데이터 행 삭제

df['horsepower'] = df['horsepower'].astype('float')

 

#저장

df.to_pickle('auto-mpg.pkl')

 

#분석에 활용할 열(속성)을 선택(연비, 실린더, 출력, 중량)

ndf=df[['mpg','cylinders','horsepower', 'weight']]

display(ndf.head())

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

mpg

cylinders

horsepower

weight

0

15.0

8

165.0

3693.0

1

18.0

8

150.0

3436.0

2

16.0

8

150.0

3433.0

3

17.0

8

140.0

3449.0

4

15.0

8

198.0

4341.0

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

In [3]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# seaborn pairplot으로 두 변수 간의 모든 경우의 수 그리기

sns.pairplot(ndf)

plt.show()

plt.close()

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

대표사진 삭제

사진 설명을 입력하세요.

In [4]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

#속성(변수) 선택

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) #랜덤 추출 값

 

print('train data 개수:', len(X_train))

print()

print('test data 개수:', len(X_test))

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

train data 개수: 273 test data 개수: 118

In [5]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# sklearn 라이브러리에서 선형회귀분석 모듈 가져오기

from sklearn.linear_model import LinearRegression # 알고리즘(단순선형회귀) 임포트

 

# 단순회귀분석 모형 객체 생성 (Simple Linear Regression) - 상황에 따라 알맞는 모델을 사용해야 한다.

lr = LinearRegression()

 

# train data를 가지고 모형 학습

lr.fit(X_train, y_train) # 학습용 데이터로 fit 시킨다(학습시킨다). 독립변수와 종속변수를 이용하여 학습

# 학습을 해서 오차를 최소로 하는 y=ax+b 에서 a, b를 찾아준다.

# 학습된 데이터는 lr에 저장

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Out[5]:

LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)

In [6]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# 학습을 마친 모형에 test data를 적용하여 결정계수(R-제곱) 계산

# 결정계수 값이 클수록 모형의 예측 성능이 좋다고 판단

# 회귀모델에 대한 평가 : MSE, RMSE, R_Square

 

r_square = lr.score(X_test, y_test) # score를 통해 점수를 계산해서 정확도 검증(검증용 데이터를 넣어서 검증)

print(r_square) # 이 모델에서는 r스퀘어를 사용한다. (설명력이 얼마나 있는지 판단.- 비교적 간단하기 때문에 r_square 사용.)

# 분산의 크기를 가지고 평가.

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

0.7035812683047353

In [7]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# 회귀식의 기울기

print('기울기 a:', lr.coef_)

print()

 

# 회귀식의 y절편

print('y절편 b:', lr.intercept_)

print()

 

# 모형에 전체 X 데이터를 입력하여 예측한 값 y_hat을 실제 값 y와 비교

y_hat = lr.predict(X) # lr을 이용해서 X를 대입했을 때 예측

type(y_hat)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

기울기 a: [-0.00770318] y절편 b: 46.60392617148081

Out[7]:

numpy.ndarray

In [8]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

y.plot(kind='hist') # y값에 대한 히스토그램 (실제 y값) y=ndf['mpg']

type(y)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Out[8]:

pandas.core.series.Series

대표사진 삭제

사진 설명을 입력하세요.

In [9]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

y_hat = pd.Series(y_hat)

print(type(y_hat))

y_hat.plot(kind='hist') # 실제 분포(y)하고 예측해서 나온 값(y_hat)을 비교

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

<class 'pandas.core.series.Series'>

 

Out[9]:

<matplotlib.axes._subplots.AxesSubplot at 0x1dc4ee48948>

대표사진 삭제

사진 설명을 입력하세요.

In [10]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# 실제 값은 왼쪽으로 편향되어 있고 예측값은 반대로 오른쪽으로 편중되는 경향을 보임.

# 모형의 모차를 줄일 필요가 있어 보임.

plt.figure(figsize=(15,5))

ax1 = sns.distplot(y, hist=False, label='y')

# ax2 = sns.distplot(y_hat, hist=False, label='y_hat', ax=ax1)

ax2 = sns.distplot(y_hat, hist=False, label='y_hat')

plt.show()

plt.close()

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

대표사진 삭제

사진 설명을 입력하세요.

다항 회귀분석

직선보다 곡선으로 설명하는 것이 적합할 경우 다항 함수를 사용하면 복잡한 곡선 형태의 회귀선을 표현할 수 있음

2차 함수 이상의 다항 함수를 이용하여 두 변수 간의 선형관계를 설명화는 알고리즘

다항 회귀도 선형회귀임. 선형/비선형 회귀를 나누는 기준은 회귀계수가 선형/비선형인지에 따르며 독립변수의 선형/비선형 여부와는 무관

In [11]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

df = pd.read_pickle('auto-mpg.pkl')

#분석에 활용할 열(속성)을 선택 (연비, 실린더, 출력, 중량)

ndf = df[['mpg', 'cylinders', 'horsepower', 'weight']]

ndf.head()

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Out[11]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

mpg

cylinders

horsepower

weight

0

15.0

8

165.0

3693.0

1

18.0

8

150.0

3436.0

2

16.0

8

150.0

3433.0

3

17.0

8

140.0

3449.0

4

15.0

8

198.0

4341.0

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

In [12]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

#속성(변수) 선택

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) #랜덤 추출 값

 

print('훈련데이터 : ', X_train.shape)

print('검증데이터 : ', X_test.shape)

print('훈련데이터 : ', y_train.shape)

print('검증데이터 : ', y_test.shape)

X_train.head()

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

훈련데이터 : (273, 1) 검증데이터 : (118, 1) 훈련데이터 : (273,) 검증데이터 : (118,)

Out[12]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

weight

276

3410.0

282

3265.0

356

2615.0

341

2385.0

289

4054.0

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

In [13]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# 다항회귀분석 모형 - sklearn 사용

 

# sklearn 라이브러리에서 필요한 모듈 가져오기

from sklearn.linear_model import LinearRegression #선형 회귀분석

from sklearn.preprocessing import PolynomialFeatures #다항식 변환

 

# 다항식 변환

poly = PolynomialFeatures(degree=2) #2차항 적용, 객체 생성

X_train_poly = poly.fit_transform(X_train) #X_train 데이터를 2차항으로 변형(단항 -> 다항으로 바꾸는 기능)

 

print('원 데이터:', X_train.shape)

print('2차항 변환 데이터:', X_train_poly.shape)

X_train_poly

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

원 데이터: (273, 1) 2차항 변환 데이터: (273, 3)

Out[13]:

array([[1.0000000e+00, 3.4100000e+03, 1.1628100e+07], [1.0000000e+00, 3.2650000e+03, 1.0660225e+07], [1.0000000e+00, 2.6150000e+03, 6.8382250e+06], [1.0000000e+00, 2.3850000e+03, 5.6882250e+06], [1.0000000e+00, 4.0540000e+03, 1.6434916e+07], [1.0000000e+00, 2.2100000e+03, 4.8841000e+06], [1.0000000e+00, 2.9010000e+03, 8.4158010e+06], [1.0000000e+00, 2.1640000e+03, 4.6828960e+06], [1.0000000e+00, 3.1580000e+03, 9.9729640e+06], [1.0000000e+00, 4.0800000e+03, 1.6646400e+07], [1.0000000e+00, 1.9400000e+03, 3.7636000e+06], [1.0000000e+00, 2.0030000e+03, 4.0120090e+06], [1.0000000e+00, 2.4050000e+03, 5.7840250e+06], [1.0000000e+00, 2.5750000e+03, 6.6306250e+06], [1.0000000e+00, 4.2090000e+03, 1.7715681e+07], [1.0000000e+00, 2.9450000e+03, 8.6730250e+06], [1.0000000e+00, 2.6780000e+03, 7.1716840e+06], [1.0000000e+00, 1.9650000e+03, 3.8612250e+06], [1.0000000e+00, 2.2000000e+03, 4.8400000e+06], [1.0000000e+00, 2.7110000e+03, 7.3495210e+06], [1.0000000e+00, 2.5450000e+03, 6.4770250e+06], [1.0000000e+00, 2.0500000e+03, 4.2025000e+06], [1.0000000e+00, 3.4250000e+03, 1.1730625e+07], [1.0000000e+00, 3.2880000e+03, 1.0810944e+07], [1.0000000e+00, 2.2650000e+03, 5.1302250e+06], [1.0000000e+00, 2.6720000e+03, 7.1395840e+06], [1.0000000e+00, 2.6940000e+03, 7.2576360e+06], [1.0000000e+00, 4.2150000e+03, 1.7766225e+07], [1.0000000e+00, 2.3790000e+03, 5.6596410e+06], [1.0000000e+00, 4.3540000e+03, 1.8957316e+07], [1.0000000e+00, 3.9400000e+03, 1.5523600e+07], [1.0000000e+00, 3.5300000e+03, 1.2460900e+07], [1.0000000e+00, 2.6200000e+03, 6.8644000e+06], [1.0000000e+00, 3.2050000e+03, 1.0272025e+07], [1.0000000e+00, 4.4990000e+03, 2.0241001e+07], [1.0000000e+00, 2.1550000e+03, 4.6440250e+06], [1.0000000e+00, 3.1690000e+03, 1.0042561e+07], [1.0000000e+00, 4.2740000e+03, 1.8267076e+07], [1.0000000e+00, 2.3750000e+03, 5.6406250e+06], [1.0000000e+00, 2.6700000e+03, 7.1289000e+06], [1.0000000e+00, 2.2790000e+03, 5.1938410e+06], [1.0000000e+00, 1.9630000e+03, 3.8533690e+06], [1.0000000e+00, 2.4510000e+03, 6.0074010e+06], [1.0000000e+00, 2.0740000e+03, 4.3014760e+06], [1.0000000e+00, 1.9850000e+03, 3.9402250e+06], [1.0000000e+00, 2.4080000e+03, 5.7984640e+06], [1.0000000e+00, 2.5110000e+03, 6.3051210e+06], [1.0000000e+00, 3.3600000e+03, 1.1289600e+07], [1.0000000e+00, 1.9950000e+03, 3.9800250e+06], [1.0000000e+00, 3.8800000e+03, 1.5054400e+07], [1.0000000e+00, 2.0000000e+03, 4.0000000e+06], [1.0000000e+00, 4.1540000e+03, 1.7255716e+07], [1.0000000e+00, 3.1900000e+03, 1.0176100e+07], [1.0000000e+00, 1.7950000e+03, 3.2220250e+06], [1.0000000e+00, 2.9300000e+03, 8.5849000e+06], [1.0000000e+00, 2.2020000e+03, 4.8488040e+06], [1.0000000e+00, 3.6130000e+03, 1.3053769e+07], [1.0000000e+00, 2.5820000e+03, 6.6667240e+06], [1.0000000e+00, 3.9000000e+03, 1.5210000e+07], [1.0000000e+00, 4.4220000e+03, 1.9554084e+07], [1.0000000e+00, 2.9500000e+03, 8.7025000e+06], [1.0000000e+00, 3.6930000e+03, 1.3638249e+07], [1.0000000e+00, 2.0650000e+03, 4.2642250e+06], [1.0000000e+00, 4.3250000e+03, 1.8705625e+07], [1.0000000e+00, 1.9370000e+03, 3.7519690e+06], [1.0000000e+00, 2.1300000e+03, 4.5369000e+06], [1.0000000e+00, 2.2780000e+03, 5.1892840e+06], [1.0000000e+00, 2.6350000e+03, 6.9432250e+06], [1.0000000e+00, 3.6050000e+03, 1.2996025e+07], [1.0000000e+00, 2.6700000e+03, 7.1289000e+06], [1.0000000e+00, 4.1000000e+03, 1.6810000e+07], [1.0000000e+00, 4.4980000e+03, 2.0232004e+07], [1.0000000e+00, 3.5250000e+03, 1.2425625e+07], [1.0000000e+00, 2.4010000e+03, 5.7648010e+06], [1.0000000e+00, 4.1290000e+03, 1.7048641e+07], [1.0000000e+00, 2.5420000e+03, 6.4617640e+06], [1.0000000e+00, 2.9100000e+03, 8.4681000e+06], [1.0000000e+00, 2.3350000e+03, 5.4522250e+06], [1.0000000e+00, 1.7550000e+03, 3.0800250e+06], [1.0000000e+00, 2.7000000e+03, 7.2900000e+06], [1.0000000e+00, 3.5200000e+03, 1.2390400e+07], [1.0000000e+00, 3.5740000e+03, 1.2773476e+07], [1.0000000e+00, 3.9620000e+03, 1.5697444e+07], [1.0000000e+00, 4.0420000e+03, 1.6337764e+07], [1.0000000e+00, 2.8150000e+03, 7.9242250e+06], [1.0000000e+00, 3.7850000e+03, 1.4326225e+07], [1.0000000e+00, 3.1390000e+03, 9.8533210e+06], [1.0000000e+00, 3.4250000e+03, 1.1730625e+07], [1.0000000e+00, 3.2210000e+03, 1.0374841e+07], [1.0000000e+00, 1.9680000e+03, 3.8730240e+06], [1.0000000e+00, 3.2450000e+03, 1.0530025e+07], [1.0000000e+00, 2.9450000e+03, 8.6730250e+06], [1.0000000e+00, 3.6720000e+03, 1.3483584e+07], [1.0000000e+00, 1.8450000e+03, 3.4040250e+06], [1.0000000e+00, 4.1650000e+03, 1.7347225e+07], [1.0000000e+00, 2.4900000e+03, 6.2001000e+06], [1.0000000e+00, 3.0600000e+03, 9.3636000e+06], [1.0000000e+00, 2.7200000e+03, 7.3984000e+06], [1.0000000e+00, 2.1640000e+03, 4.6828960e+06], [1.0000000e+00, 3.4330000e+03, 1.1785489e+07], [1.0000000e+00, 4.2570000e+03, 1.8122049e+07], [1.0000000e+00, 2.9650000e+03, 8.7912250e+06], [1.0000000e+00, 2.0650000e+03, 4.2642250e+06], [1.0000000e+00, 2.1580000e+03, 4.6569640e+06], [1.0000000e+00, 2.6600000e+03, 7.0756000e+06], [1.0000000e+00, 3.6450000e+03, 1.3286025e+07], [1.0000000e+00, 2.9000000e+03, 8.4100000e+06], [1.0000000e+00, 3.6510000e+03, 1.3329801e+07], [1.0000000e+00, 3.1500000e+03, 9.9225000e+06], [1.0000000e+00, 2.2200000e+03, 4.9284000e+06], [1.0000000e+00, 2.7350000e+03, 7.4802250e+06], [1.0000000e+00, 2.1500000e+03, 4.6225000e+06], [1.0000000e+00, 3.4390000e+03, 1.1826721e+07], [1.0000000e+00, 2.5420000e+03, 6.4617640e+06], [1.0000000e+00, 4.4250000e+03, 1.9580625e+07], [1.0000000e+00, 3.5630000e+03, 1.2694969e+07], [1.0000000e+00, 4.6540000e+03, 2.1659716e+07], [1.0000000e+00, 4.2370000e+03, 1.7952169e+07], [1.0000000e+00, 4.0960000e+03, 1.6777216e+07], [1.0000000e+00, 2.1300000e+03, 4.5369000e+06], [1.0000000e+00, 2.1250000e+03, 4.5156250e+06], [1.0000000e+00, 1.8250000e+03, 3.3306250e+06], [1.0000000e+00, 2.1450000e+03, 4.6010250e+06], [1.0000000e+00, 3.0390000e+03, 9.2355210e+06], [1.0000000e+00, 2.2230000e+03, 4.9417290e+06], [1.0000000e+00, 2.6050000e+03, 6.7860250e+06], [1.0000000e+00, 3.0120000e+03, 9.0721440e+06], [1.0000000e+00, 3.3800000e+03, 1.1424400e+07], [1.0000000e+00, 3.8400000e+03, 1.4745600e+07], [1.0000000e+00, 3.2700000e+03, 1.0692900e+07], [1.0000000e+00, 4.6680000e+03, 2.1790224e+07], [1.0000000e+00, 1.9450000e+03, 3.7830250e+06], [1.0000000e+00, 2.9500000e+03, 8.7025000e+06], [1.0000000e+00, 2.2280000e+03, 4.9639840e+06], [1.0000000e+00, 2.1240000e+03, 4.5113760e+06], [1.0000000e+00, 3.4150000e+03, 1.1662225e+07], [1.0000000e+00, 4.2940000e+03, 1.8438436e+07], [1.0000000e+00, 2.0450000e+03, 4.1820250e+06], [1.0000000e+00, 4.6380000e+03, 2.1511044e+07], [1.0000000e+00, 1.8500000e+03, 3.4225000e+06], [1.0000000e+00, 2.5560000e+03, 6.5331360e+06], [1.0000000e+00, 2.7020000e+03, 7.3008040e+06], [1.0000000e+00, 3.0150000e+03, 9.0902250e+06], [1.0000000e+00, 4.3350000e+03, 1.8792225e+07], [1.0000000e+00, 3.6300000e+03, 1.3176900e+07], [1.0000000e+00, 2.9840000e+03, 8.9042560e+06], [1.0000000e+00, 3.4200000e+03, 1.1696400e+07], [1.0000000e+00, 1.8670000e+03, 3.4856890e+06], [1.0000000e+00, 3.2500000e+03, 1.0562500e+07], [1.0000000e+00, 2.1230000e+03, 4.5071290e+06], [1.0000000e+00, 2.2150000e+03, 4.9062250e+06], [1.0000000e+00, 2.1100000e+03, 4.4521000e+06], [1.0000000e+00, 2.8700000e+03, 8.2369000e+06], [1.0000000e+00, 2.1000000e+03, 4.4100000e+06], [1.0000000e+00, 3.1210000e+03, 9.7406410e+06], [1.0000000e+00, 4.4560000e+03, 1.9855936e+07], [1.0000000e+00, 3.2780000e+03, 1.0745284e+07], [1.0000000e+00, 2.2340000e+03, 4.9907560e+06], [1.0000000e+00, 3.2100000e+03, 1.0304100e+07], [1.0000000e+00, 2.0700000e+03, 4.2849000e+06], [1.0000000e+00, 2.5950000e+03, 6.7340250e+06], [1.0000000e+00, 3.7300000e+03, 1.3912900e+07], [1.0000000e+00, 2.1300000e+03, 4.5369000e+06], [1.0000000e+00, 2.1080000e+03, 4.4436640e+06], [1.0000000e+00, 4.3800000e+03, 1.9184400e+07], [1.0000000e+00, 2.3500000e+03, 5.5225000e+06], [1.0000000e+00, 4.3630000e+03, 1.9035769e+07], [1.0000000e+00, 4.7460000e+03, 2.2524516e+07], [1.0000000e+00, 2.7550000e+03, 7.5900250e+06], [1.0000000e+00, 1.9750000e+03, 3.9006250e+06], [1.0000000e+00, 2.4340000e+03, 5.9243560e+06], [1.0000000e+00, 1.8340000e+03, 3.3635560e+06], [1.0000000e+00, 1.7950000e+03, 3.2220250e+06], [1.0000000e+00, 2.7950000e+03, 7.8120250e+06], [1.0000000e+00, 3.4650000e+03, 1.2006225e+07], [1.0000000e+00, 2.0190000e+03, 4.0763610e+06], [1.0000000e+00, 1.7730000e+03, 3.1435290e+06], [1.0000000e+00, 2.8330000e+03, 8.0258890e+06], [1.0000000e+00, 2.1880000e+03, 4.7873440e+06], [1.0000000e+00, 3.1400000e+03, 9.8596000e+06], [1.0000000e+00, 3.8300000e+03, 1.4668900e+07], [1.0000000e+00, 3.4490000e+03, 1.1895601e+07], [1.0000000e+00, 2.6480000e+03, 7.0119040e+06], [1.0000000e+00, 1.8360000e+03, 3.3708960e+06], [1.0000000e+00, 2.6390000e+03, 6.9643210e+06], [1.0000000e+00, 1.9900000e+03, 3.9601000e+06], [1.0000000e+00, 3.2820000e+03, 1.0771524e+07], [1.0000000e+00, 2.0750000e+03, 4.3056250e+06], [1.0000000e+00, 2.1900000e+03, 4.7961000e+06], [1.0000000e+00, 5.1400000e+03, 2.6419600e+07], [1.0000000e+00, 2.2650000e+03, 5.1302250e+06], [1.0000000e+00, 2.2880000e+03, 5.2349440e+06], [1.0000000e+00, 4.1900000e+03, 1.7556100e+07], [1.0000000e+00, 2.8350000e+03, 8.0372250e+06], [1.0000000e+00, 4.1400000e+03, 1.7139600e+07], [1.0000000e+00, 2.7450000e+03, 7.5350250e+06], [1.0000000e+00, 2.2650000e+03, 5.1302250e+06], [1.0000000e+00, 3.7610000e+03, 1.4145121e+07], [1.0000000e+00, 3.4590000e+03, 1.1964681e+07], [1.0000000e+00, 2.0510000e+03, 4.2066010e+06], [1.0000000e+00, 3.9880000e+03, 1.5904144e+07], [1.0000000e+00, 3.3650000e+03, 1.1323225e+07], [1.0000000e+00, 4.6990000e+03, 2.2080601e+07], [1.0000000e+00, 2.1250000e+03, 4.5156250e+06], [1.0000000e+00, 2.8300000e+03, 8.0089000e+06], [1.0000000e+00, 1.9250000e+03, 3.7056250e+06], [1.0000000e+00, 2.2550000e+03, 5.0850250e+06], [1.0000000e+00, 2.1440000e+03, 4.5967360e+06], [1.0000000e+00, 2.7250000e+03, 7.4256250e+06], [1.0000000e+00, 4.3410000e+03, 1.8844281e+07], [1.0000000e+00, 4.1410000e+03, 1.7147881e+07], [1.0000000e+00, 2.4080000e+03, 5.7984640e+06], [1.0000000e+00, 3.1550000e+03, 9.9540250e+06], [1.0000000e+00, 3.9400000e+03, 1.5523600e+07], [1.0000000e+00, 3.9550000e+03, 1.5642025e+07], [1.0000000e+00, 2.5650000e+03, 6.5792250e+06], [1.0000000e+00, 4.4570000e+03, 1.9864849e+07], [1.0000000e+00, 2.2460000e+03, 5.0445160e+06], [1.0000000e+00, 4.0980000e+03, 1.6793604e+07], [1.0000000e+00, 2.8680000e+03, 8.2254240e+06], [1.0000000e+00, 2.3800000e+03, 5.6644000e+06], [1.0000000e+00, 2.2950000e+03, 5.2670250e+06], [1.0000000e+00, 2.3000000e+03, 5.2900000e+06], [1.0000000e+00, 2.9330000e+03, 8.6024890e+06], [1.0000000e+00, 2.3700000e+03, 5.6169000e+06], [1.0000000e+00, 3.5700000e+03, 1.2744900e+07], [1.0000000e+00, 3.8210000e+03, 1.4600041e+07], [1.0000000e+00, 2.6400000e+03, 6.9696000e+06], [1.0000000e+00, 4.9510000e+03, 2.4512401e+07], [1.0000000e+00, 1.8350000e+03, 3.3672250e+06], [1.0000000e+00, 3.7250000e+03, 1.3875625e+07], [1.0000000e+00, 1.9150000e+03, 3.6672250e+06], [1.0000000e+00, 3.3810000e+03, 1.1431161e+07], [1.0000000e+00, 2.6340000e+03, 6.9379560e+06], [1.0000000e+00, 2.1100000e+03, 4.4521000e+06], [1.0000000e+00, 2.3000000e+03, 5.2900000e+06], [1.0000000e+00, 4.4640000e+03, 1.9927296e+07], [1.0000000e+00, 3.8970000e+03, 1.5186609e+07], [1.0000000e+00, 4.3600000e+03, 1.9009600e+07], [1.0000000e+00, 1.9750000e+03, 3.9006250e+06], [1.0000000e+00, 2.1900000e+03, 4.7961000e+06], [1.0000000e+00, 1.6490000e+03, 2.7192010e+06], [1.0000000e+00, 1.9850000e+03, 3.9402250e+06], [1.0000000e+00, 2.3720000e+03, 5.6263840e+06], [1.0000000e+00, 2.1890000e+03, 4.7917210e+06], [1.0000000e+00, 2.1600000e+03, 4.6656000e+06], [1.0000000e+00, 2.4640000e+03, 6.0712960e+06], [1.0000000e+00, 2.6710000e+03, 7.1342410e+06], [1.0000000e+00, 2.2450000e+03, 5.0400250e+06], [1.0000000e+00, 1.8250000e+03, 3.3306250e+06], [1.0000000e+00, 3.3290000e+03, 1.1082241e+07], [1.0000000e+00, 4.1350000e+03, 1.7098225e+07], [1.0000000e+00, 3.6640000e+03, 1.3424896e+07], [1.0000000e+00, 2.3950000e+03, 5.7360250e+06], [1.0000000e+00, 1.9850000e+03, 3.9402250e+06], [1.0000000e+00, 1.9550000e+03, 3.8220250e+06], [1.0000000e+00, 2.6000000e+03, 6.7600000e+06], [1.0000000e+00, 2.9300000e+03, 8.5849000e+06], [1.0000000e+00, 2.5870000e+03, 6.6925690e+06], [1.0000000e+00, 2.1250000e+03, 4.5156250e+06], [1.0000000e+00, 4.9550000e+03, 2.4552025e+07], [1.0000000e+00, 3.0700000e+03, 9.4249000e+06], [1.0000000e+00, 4.0770000e+03, 1.6621929e+07], [1.0000000e+00, 3.8500000e+03, 1.4822500e+07], [1.0000000e+00, 2.7900000e+03, 7.7841000e+06], [1.0000000e+00, 4.2950000e+03, 1.8447025e+07], [1.0000000e+00, 4.6570000e+03, 2.1687649e+07], [1.0000000e+00, 3.1020000e+03, 9.6224040e+06], [1.0000000e+00, 2.0250000e+03, 4.1006250e+06], [1.0000000e+00, 2.8000000e+03, 7.8400000e+06], [1.0000000e+00, 2.7740000e+03, 7.6950760e+06], [1.0000000e+00, 3.3360000e+03, 1.1128896e+07], [1.0000000e+00, 2.3000000e+03, 5.2900000e+06]])

In [14]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# train data를 가지고 모형 학습

pr = LinearRegression()

pr.fit(X_train_poly, y_train) #다항으로 바꿔준 데이터로 학습을 시킨다.

# 다항으로 바꾼 독립변수들과, 학습한 y값으로 학습시킨다. (선형회귀법을 사용)

# pr에 학습된 모델이 적용된 상태

 

# 학습을 마친 모형에 test data를 적용하여 결정계수(R-제곱) 계산

# 설계한 모형의 오차가 작다면 R-square가 커지고, 설계한 모형의 오차가 크다면 R-square

 

X_test_poly = poly.fit_transform(X_test)

r_square = pr.score(X_test_poly, y_test) # 학습된 모델을 가지고 스코어링 할 수 있다.(설명력 점수 평가)

print(r_square) # 3% 값이 개선된 것을 확인할 수 있다.

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

0.7337822241594427

In [15]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# train data의 산점도와 test data로 예측한

 

y_hat_test = pr.predict(X_test_poly) # 다항으로 바꾼 검증용 데이터를 가지고 예측한 값을 y_hat_test에 저장

 

fig = plt.figure(figsize=(10,5))

ax = fig.add_subplot(1,1,1) # 하나의 그래프를 만들어준다.

ax.plot(X_train, y_train, 'o', label='Train Data') # 데이터 분포 # 학습용 데이터를 그래프로 그려준다.

ax.plot(X_test, y_hat_test, 'r+', label = 'Predicted Value') #모형이 학습한 회귀선, 

ax.legend(loc='best')

plt.xlabel('weight')

plt.ylabel('mpg')

plt.show()

plt.close()

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

대표사진 삭제

사진 설명을 입력하세요.

In [16]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# 모형에 전체 X 데이터를 입력하여 예측한 값 y_hat을 실제 값 y와 비교

# 단순 회귀분석 결과와 비교하면 데이터가 어느 한쪽으로 편향되는 경향이 상당히 감소한 것을 확인

X_poly = poly.fit_transform(X)

y_hat = pr.predict(X_poly)

 

plt.figure(figsize=(15,5))

ax1 = sns.distplot(y, hist=False, label='y') # 히스토그램을 보여줄지 말지 선택(True, False)

ax2 = sns.distplot(y_hat, hist=False, label='y_hat', ax=ax1)

plt.show()

plt.close()

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

대표사진 삭제

사진 설명을 입력하세요.

회귀 평가 지표

MAE : 실제값과 예측값의 차이를 절대값으로 변환해 평균한 것 (절대값으로 하는 것)

MSE : 실제값과 예측값의 차이를 제곱해 평균한 것 (스퀘어 해서 처리)

RMSE : MSE에 루트를 씌운 것(실제 오류 평균보다 커지는 것 보정) (스퀘어를 하니까 다시 루트를 씌운다.)

R square : 분산 기반으로 예측 성능을 평가, 실제 값의 분산 대비 예측값의 분산 비율을 지표로 함 (분산값으로 해서 설명력을 높여주는 것)

 

분류 - KNN

KNN : k-Nearest-Neighbors의 약칭. 새로운 관측값이 주어지면 가장 속성이 비슷한 이웃을 먼저 찾음

가까운 목표 값과 같은 값으로 분류하여 예측

k값에 따라 예측의 정확도가 달라지므로 적절한 k값을 찾는 것이 중요

★가까운 것 부터 찾고, 범위를 넓혀가며 값을 찾음. 이 때, 다수결에 의해 수가 많은 그룹을 선택하여 묶인다.

대표사진 삭제

사진 설명을 입력하세요.

분류 - SVM

Margin이란 선과 가장 가까운 양 옆 데이터와의 거리

선과 가장 가까운 포인트를 서포트 벡터(Support vector)

데이터를 정확히 분류하는 범위를 먼저 찾고, 그 범위 안에서 Margin을 최대화하는 구분선을 선택

로버스트 하다는 것은 아웃라이어(outlier)의 영향을 받지 않는다는 의미

어느 정도 outlier를 무시하고 최적의 구분선

(가운데를 기준으로 나눴을 때, 나눈 선을 기준으로 데이터와의 거리가 '서포트 벡터'라고 한다)

(나눈다고 하더라고 그 기준을 벗어나는 것들이 존재, 이것이 아웃라이어. 이 때, 로버스트하여 아웃라이어의 영향을 받지 않는다.)

대표사진 삭제

사진 설명을 입력하세요.

분류 - Decision Tree

Decision Tree : 의사결정 나무라는 의미. 트리 구조를 사용, 각 분기점(node) 에는 분석 대상의 속성들이 위치

각 분기점마다 목표 값을 잘 분류할 수 있는 속성을 찾아서 배치

해당 속성이 갖느 값을 이용하여 새로운 가지(branch)를 만듦

최적의 속성을 선택할 때는 다른 종류의 값들이 섞여 있는 정도를 나타내는 Entropy를 주로 활용

Entropy가 낮을 수록 분류가 잘 된 것임

대표사진 삭제

사진 설명을 입력하세요.

대표사진 삭제

사진 설명을 입력하세요.

대표사진 삭제

사진 설명을 입력하세요.

분류 - Logistic Regression

분류에 사용하는 회귀분석 종속변수가 범주형이면서 0, 1

일반 회귀모형을 로짓 변환

Odds ratio : 실패에 비해 성공할 확률 p/(1-p)

Logit : Odds에 log를 취한 것

대표사진 삭제

사진 설명을 입력하세요.

분류 - Random Forest

하나의 알고리즘 사용

학습 데이터셋을 랜덤하게 추출하여 모델을 학습

투표방식으로 최빈값으로 결정

배깅 : 학습 데이터에서 랜덤하게 추출 시 중복 허용

대표사진 삭제

사진 설명을 입력하세요.

In [41]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

from sklearn.tree import DecisionTreeClassifier # 분류기

from sklearn.datasets import load_iris

from sklearn.model_selection import train_test_split

import warnings

warnings.filterwarnings('ignore')

 

# 붓꽃 데이터를 로딩하고 학습과 테스트 데이터 세트로 분리

iris_data = load_iris()

display(iris_data.keys()) # columns 값을 볼 수 있다. (feature는 독립변수를 의미)

X_train, X_test, y_train, y_test = train_test_split(iris_data.data,

iris_data.target,

test_size=0.2, # 8:2 로 나누니까 0.2로 놔준다.

random_state=11)

 

print(iris_data.feature_names)

print(iris_data.target_names)

 

# DecisionTree Claaifier 생성

# dt_clf = DecisionTreeClassifier(random_state=156) # 아무 제약을 걸지 않은 기본

dt_clf = DecisionTreeClassifier(criterion='gini', max_depth=2, random_state=156) # max_depth = 2 는 두번째 단계까지만 만든다.

# dt_clf = DecisionTreeClassifier(criterion='gini', max_depth=4, random_state=156)

# dt_clf = DecisionTreeClassifier(criterion='gini', max_depth=4, random_state=156)

 

# criterion='gini' or criterion='entropy' 가능

 

# DecisionTreeClassifier 학습

dt_clf.fit(X_train, y_train) # 학습용 데이터로 학습을 시킨다. dt_clf는 학습된 모델이 된다.

y_hat = dt_clf.predict(X_test) # 학습된 모델(dt_clf)을 토대로 예측(검증 평가용 X_test 데이터를 이용)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

dict_keys(['data', 'target', 'target_names', 'DESCR', 'feature_names', 'filename'])

['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'] ['setosa' 'versicolor' 'virginica']

Dicision Tree 파라미터

max_depth : 트리의 최대 깊이 ( 5 단계로 찢어지는것은 max_depth = 5 이다.)

max_features : 최적의 분할을 위해 고려할 최대 피처 개수

max_leaf_nodes : 말단 노드의 최대 개수

min_samples_split : 노드를 분할하기 위한 최소한의 샘플 데이터, 디폴트 2. 작게 설정할 수록 분할되는 노드 증가, 과적합 가능성 증가

min_samples_leaf : 말단 노드가 되기 위한 최소한의 샘플 데이터

In [43]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# DT 시각화

from sklearn import tree

import matplotlib.pyplot as plt

%matplotlib inline

 

plt.figure(figsize=(20,15))

tree.plot_tree(dt_clf, filled=True, # 그림을 그린다.

feature_names=iris_data.feature_names, # iris_data가 가지고 있는 데이터를 입력한다.

class_names=iris_data.target_names, # iris_data가 가지고 있는 데이터를 입력한다.

rounded=True, fontsize=14) # 사각형의 모서리 라운드처리, 글자 사이즈

plt.show()

plt.close()

# petal length <= 2.45 : 가장 중요한 분류 기준

# petal width <= 1.55 기준 : 두 번째 분류 기준

# 완전히 분리되는 것은 gini(불순도) = 0.0 이다.

# entropy 를 통해 모두가 gini = 0.0 이 될 때 까지

# 계속 가지치기를 해서 제일 밑에부분까지 내려가서 너무 미세한부분까지 맞춰지면 일반화된것을 예측하기 어려움

# --> 차원의 저주

# --> 일반화된 예측 모델을 만들어야 한다.

# 성능이 부족함(정확도)에도 많이 사용한다. 내부 처리 데이터를 쉽게 확인할 수 있는 장점이 존재.

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

대표사진 삭제

사진 설명을 입력하세요.

In [49]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

import pandas as pd

import numpy as np

 

pd.set_option('display.max_columns', 15)

titanic_df=pd.read_csv('titanic3.csv')

 

from sklearn.preprocessing import LabelEncoder

# Null 처리 함수

def fillna(df):

df['age'].fillna(df['age'].mean(), inplace=True)

df['cabin'].fillna('N', inplace=True)

df['fare'].fillna(df['fare'].mean(), inplace=True)

df['embarked'].fillna('N', inplace=True)

return df

 

def drop_features(df):

df.drop(['home.dest','boat','body','name','ticket'], axis=1, inplace=True)

return df

 

def format_features(df):

df['cabin'] = df['cabin'].str[:1]

features = ['cabin','sex','embarked']

for feature in features:

le = LabelEncoder()

df[feature] = le.fit_transform(df[feature])

return df

 

def transform_features(df):

df = fillna(df)

df = drop_features(df)

df = format_features(df)

return df

 

t_df = transform_features(titanic_df)

display(t_df.head())

display(t_df.columns.values)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 6열 선택6열 다음에 열 추가
  • 7열 선택7열 다음에 열 추가
  • 8열 선택8열 다음에 열 추가
  • 9열 선택9열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

pclass

survived

sex

age

sibsp

parch

fare

cabin

embarked

0

1

1

0

29.00

0

0

211.3375

1

3

1

1

1

1

0.92

1

2

151.5500

2

3

2

1

0

0

2.00

1

2

151.5500

2

3

3

1

0

1

30.00

1

2

151.5500

2

3

4

1

0

0

25.00

1

2

151.5500

2

3

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

array(['pclass', 'survived', 'sex', 'age', 'sibsp', 'parch', 'fare', 'cabin', 'embarked'], dtype=object)

In [61]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

from sklearn import preprocessing

from sklearn.model_selection import train_test_split

 

# 독립변수, 종속변수 분리

X = t_df[['pclass', 'sex', 'age', 'sibsp', 'parch', 'fare', 'cabin', 'embarked']]

y = t_df['survived']

 

# 독립변수 정규화(평균 0, 분산1인 표준정규분포)

X = preprocessing.StandardScaler().fit(X).transform(X) # StandardScaler : 표준정규분포

 

# 학습용 데이터와 평가용 데이터를 8:2로 분리

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=10)

 

print(X_train.shape) # (1047, 8) 80% 데이터 갯수

print(X_test.shape) # (262, 8) 20% 데이터 갯수

print()

print(X.mean()) # -4.885320566723378e-17 (0.0 이 17개 있어서 거의 0이라고 보면 된다.)-> 평균 = 0

print(X.std()) # 1.0 표준편차

print(type(y_test)) # <class 'pandas.core.series.Series'>

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

(1047, 8) (262, 8) -4.885320566723378e-17 1.0 <class 'pandas.core.series.Series'>

In [109]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# Decision Tree

from sklearn.metrics import accuracy_score

from sklearn.tree import DecisionTreeClassifier

 

dt_model = DecisionTreeClassifier() # 객체 생성

dt_model.fit(X_train, y_train) # 트레이닝 데이터로 학습

dt_pred = dt_model.predict(X_test) # 검증용 데이터로 예측

 

print(dt_pred[0:10])

print(y_test.values[0:10])

 

accuracy = accuracy_score(y_test, dt_pred)

print('dt 예측 정확도:',accuracy) # 예측 정확도가 좋지 못하면 재개발 해야함

# 분석용 데이터셋을 잘 만들어서, 중요한 변수들을 뽑아내야 함.

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

[0 1 0 0 0 0 0 1 0 0] [1 0 0 1 0 0 0 1 1 0] dt 예측 정확도: 0.7404580152671756

 

 


훈련과정 : R·파이썬 기반 빅데이터 분석 전문가 양성과정

교과목 평가 : 통계학

성명 : 호지수

점수 : 85 / 90 (1번 제외하고 나머지 다 맞았습니다.)

Q1. 모집단의 특성을 의미하며 그리스 문자 뮤(μ), 시그마(σ)로 표현하는 것은 무엇입니까?

답 : 뮤 : 평균, 시그마 : 표준편차 (X)

-> 모수 (O)

Q2. 표본의 특성을 나타내는 수치로 모수를 추정하는데 사용되는 것은 무엇입니까? (표본특성)

답 : 통계량

 

Q3. "( )은 모수가 평균이 μ이고 표준편차가 σ인 연속확률 분포입니다." ( )에 적합한 용어를 기술하세요.

답 : 정규분포

 

Q4. "서로 다른 모수값을 가진 집단들을 비교하기 위하여 정규분포를 ( ) 한다." ( )에 적합한 용어를 기술하세요.

답 : 표준화

 

Q5. "평균값에서 표준편차의 몇 배 정도 떨어져 있다."는 것을 평가하는 수치는?

답 : Z-score

 

Q6. "표준정규분표에서는 평균 0에서 ±3 범위 내 전체의 ( )% 의 데이터가 있다." ()을 채우세요.

답 : 99%

 

Q7. "좌표평면을 펼쳐놓고 x 축은 변인 x 를, y 축은 변인 y 를 나타내게 한 뒤 각각의 관찰값들을 산점도 형태로 찍어놓으면, 그 결과 두 변인이 어떤 관계가 있는지 시각적으로 나타나게 된다. 양(+)의 상관이 나타날 경우 관찰값들은 우상향하는 방향으로 모이게 되고, 음(-)의 상관이 나타날 경우 관찰값들은 우하향하는 방향으로 모이게 된다. 관찰값들이 더욱 빽빽하게 밀집해서 모이는 경우가 있고, 조금은 대충대충(?) 흩어져 분포하는 경우가 있는데,전자의 경우 ( )가 높다고 말할 수 있고, 후자의 경우 ( )가 낮다고 말할 수 있다." ( )을 채우세요.

답 : 상관관계

 

Q8. 데이터프레임의 기술 통계 정보를 요약하는 함수는?

답 : .describe()

 

Q8.다음중 연속형으로 사용될 수 없는 데이터는? ( )

몸무게

성적

국가

답 : 없음. 4가지 모두 연속형과 범주형으로 사용 가능하다.

키 : 큰키, 작은 키(원하는 대로 지정하여 범주화 가능, 수치별로 연속형도 가능)

몸무게 : 저체중, 보통체중, 고체중으로 범주화도 가능하며, 수치별로 연속형도 가능

성적 : 등급별(범주화), 수치별(연속형)

국가 : 숫자를 부여하여 연속형으로도 가능하며, 대륙별로 범주화도 가능하다.

(정답에 가장 가까운 것은 4번 국가)

 

Q9. 다음중 범주형으로 사용될 가능성이 가장 적은 데이터는? ( )

1.키 2.몸무게 3.성적 4.자동차 생산량

답 : 4번(자동차 생산량을 범주화하는 것은 불가능 하기 때문, 키, 몸무게, 성적은 비만도, 등급 등에 따라 나눌 수 있음)

 

Q10. H사는 자동차 생산라인을 3개를 가동하고 있다. 최근 6개월간 월별 생산대수의 평균과 표준편차를 조사한 결과 아래와 같았다. H사 A, B, C 라인중 가장 안전성이 있는 라인은 어느 라인인가? ( )

A라인 - 평균 1000, 표준편차 10 B라인 - 평균 1000, 표준편차 5 C라인 - 평균 1000, 표준편차 15

답 : B 라인 : 평균은 모두 동일할 때, 표준편차가 5로 가장 작은 산포를 가지고 있기 때문

 


훈련과정 : R·파이썬 기반 빅데이터 분석 전문가 양성과정

교과목 평가 : 통계기반 데이터 분석

성명 : 호지수

점수 : 70 / 80 (3번, 7번 틀렸습니다.)

In [1]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# df 생성

import pandas as pd

df = pd.read_csv('../auto-mpg.csv', header=None)

df.columns = ['mpg','cylinders','displacement','horsepower','weight',

'acceleration','model year','origin','name']

df.head()

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Out[1]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 6열 선택6열 다음에 열 추가
  • 7열 선택7열 다음에 열 추가
  • 8열 선택8열 다음에 열 추가
  • 9열 선택9열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

mpg

cylinders

displacement

horsepower

weight

acceleration

model year

origin

name

0

18.0

8

307.0

130.0

3504.0

12.0

70

1

chevrolet chevelle malibu

1

15.0

8

350.0

165.0

3693.0

11.5

70

1

buick skylark 320

2

18.0

8

318.0

150.0

3436.0

11.0

70

1

plymouth satellite

3

16.0

8

304.0

150.0

3433.0

12.0

70

1

amc rebel sst

4

17.0

8

302.0

140.0

3449.0

10.5

70

1

ford torino

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Q1. df 데이터프레임에 대하여 아래 사항을 수행하세요. --- (15점)

'mpg','cylinders','displacement','weight','acceleration','model year','origin','name' 컬럼의 통계요약표를 출력

mpg 컬럼의 평균값, 중간값, 최대값, 최소값, 표준편차 각각 개별 출력

mpg 컬럼과 weight컬럼간 상관계수 출력

In [2]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

df2 = df.drop(df.columns[[3,3]], axis=1, inplace=False)

display(df2.describe())

print('평균',df2.mpg.mean())

print('중간',df2.mpg.median())

print('최대',df2.mpg.max())

print('최소',df2.mpg.min())

print('표준편차',df2.mpg.std())

df3 = df2[['mpg','weight']]

display(df3.corr(),'mpg컬럼과 weight컬럼간 상관계수')

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 6열 선택6열 다음에 열 추가
  • 7열 선택7열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가
  • 6행 선택6행 다음에 행 추가
  • 7행 선택7행 다음에 행 추가
  • 8행 선택8행 다음에 행 추가

열 너비 조절

행 높이 조절

 

mpg

cylinders

displacement

weight

acceleration

model year

origin

count

398.000000

398.000000

398.000000

398.000000

398.000000

398.000000

398.000000

mean

23.514573

5.454774

193.425879

2970.424623

15.568090

76.010050

1.572864

std

7.815984

1.701004

104.269838

846.841774

2.757689

3.697627

0.802055

min

9.000000

3.000000

68.000000

1613.000000

8.000000

70.000000

1.000000

25%

17.500000

4.000000

104.250000

2223.750000

13.825000

73.000000

1.000000

50%

23.000000

4.000000

148.500000

2803.500000

15.500000

76.000000

1.000000

75%

29.000000

8.000000

262.000000

3608.000000

17.175000

79.000000

2.000000

max

46.600000

8.000000

455.000000

5140.000000

24.800000

82.000000

3.000000

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

평균 23.514572864321607 중간 23.0 최대 46.6 최소 9.0 표준편차 7.815984312565782

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가

열 너비 조절

행 높이 조절

 

mpg

weight

mpg

1.000000

-0.831741

weight

-0.831741

1.000000

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

'mpg컬럼과 weight컬럼간 상관계수'

Q2. df.horsepower의 통계요약표를 출력하세요. ----- (10점)

In [3]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

df['horsepower'].describe()

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Out[3]:

count 398 unique 94 top 150.0 freq 22 Name: horsepower, dtype: object

Q3. 아래 사항을 처리 하세요. --- (5점) - 틀림

df.origin 열의 고유값을 출력하세요.

df.origin 열에 대하여 정수형 데이터를 문자형 데이터로 변환한 후 고유값을 출력하세요.

In [4]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

print('df.origin 고유값',df.origin.unique())

dfo = df.origin.astype('object')

print('df.origin열을 문자형 데이터로 변환한 후 고유값 출력',dfo.unique())

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

df.origin 고유값 [1 3 2] df.origin열을 문자형 데이터로 변환한 후 고유값 출력 [1 3 2]

In [5]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

print((df.origin).dtype)

# origin 열의 고유값 확인

print(df['origin'].unique())

 

# 정수형 데이터를 문자형 데이터로 변환

df['origin'].replace({1:'USA', 2:'EU', 3:'JAPAN'}, inplace=True)

 

print(df['origin'].unique())

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

int64 [1 3 2] ['USA' 'JAPAN' 'EU']

Q4. origin 열의 자료형을 확인하고 범주형으로 변환하여 출력하세요. --- (5점)

In [6]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

print(df['origin'].dtypes)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

object

In [7]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

print('origin 열 타입 :',type(df['origin']))

dfc = df['origin'].astype('category')

display(dfc.head())

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

origin 열 타입 : <class 'pandas.core.series.Series'>

0 USA 1 USA 2 USA 3 USA 4 USA Name: origin, dtype: category Categories (3, object): [EU, JAPAN, USA]

Q5. origin 열을 범주형에서 문자열로 변환한 후 자료형을 출력하세요. --- (5점)

In [8]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

dfs = df['origin'].astype('object')

display(dfs.dtypes)

display(type(dfs))

display(type(dfs.dtypes))

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

dtype('O')

pandas.core.series.Series

numpy.dtype

Q6. df.horsepower를 범주형(카테고리) 데이터 처리한 후 아래와 같이 출력하세요. --- (5점)

horsepower hp_bin\ 0 130.0 보통출력\ 1 165.0 보통출력\ 2 150.0 보통출력\ 3 150.0 보통출력\ 4 140.0 보통출력

In [9]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

import numpy as np

 

df['horsepower'].replace('?', np.nan, inplace=True)

df.dropna(subset=['horsepower'], axis=0, inplace=True)

df['horsepower'] = df['horsepower'].astype('float') 

df['hp'] = df['horsepower'].astype('int')

 

count, bin_dividers = np.histogram(df['horsepower'], bins=3)

print(count)

# display(bin_dividers)

print()

 

bin_names = ['저출력', '보통출력', '고출력']

 

df['hp_bin'] = pd.cut(x=df['horsepower'], bins=bin_dividers, labels=bin_names, include_lowest=True)

 

display(df[['horsepower', 'hp_bin']].head())

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

[257 103 32]

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가

열 너비 조절

행 높이 조절

 

horsepower

hp_bin

0

130.0

보통출력

1

165.0

보통출력

2

150.0

보통출력

3

150.0

보통출력

4

140.0

보통출력

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Q7. hp_bin 열의 범주형 데이터를 숫자형 범주로 변환하여 앞에서 15개만 출력하세요. --- (5점) - 틀림

In [10]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

horsepower_dummies = pd.get_dummies(df['hp_bin'])

horsepower_dummies.head(15)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Out[10]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가
  • 6행 선택6행 다음에 행 추가
  • 7행 선택7행 다음에 행 추가
  • 8행 선택8행 다음에 행 추가
  • 9행 선택9행 다음에 행 추가
  • 10행 선택10행 다음에 행 추가
  • 11행 선택11행 다음에 행 추가
  • 12행 선택12행 다음에 행 추가
  • 13행 선택13행 다음에 행 추가
  • 14행 선택14행 다음에 행 추가
  • 15행 선택15행 다음에 행 추가

열 너비 조절

행 높이 조절

 

저출력

보통출력

고출력

0

0

1

0

1

0

1

0

2

0

1

0

3

0

1

0

4

0

1

0

5

0

0

1

6

0

0

1

7

0

0

1

8

0

0

1

9

0

0

1

10

0

0

1

11

0

1

0

12

0

1

0

13

0

0

1

14

1

0

0

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

In [11]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# 풀이

from sklearn import preprocessing

 

# 전처리를 위한 encoder 객체 만들기

le = preprocessing.LabelEncoder()

result = le.fit_transform(df.hp_bin.head(15))

print(result)

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

[1 1 1 1 1 0 0 0 0 0 0 1 1 0 2]

Q8. stock-data.csv를 불러와서 아래사항을 수행하세요. --- (10점)

object 자료형으로 되어있는 Date 컬럼을 datetime64 자료형으로 변환

new_Date 컬럼을 생성한 후 다시 인덱스로 셋팅하고 기존 Date는 삭제한 후 출력

In [12]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

df = pd.read_csv('../stock-data.csv')

df['Date'] = pd.to_datetime(df['Date'])

display(df.info()) # datetime64 자료형으로 변환

 

df['new_Date'] = pd.to_datetime(df['Date'])

display(df.info()) # new_Date 컬럼 생성 확인

 

df.set_index('new_Date', inplace=True) # new_Date 컬럼을 인덱스로 지정

df.drop('Date', axis=1, inplace=True) # 기존 Date 컬럼 삭제

display(df.head()) # 출력

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

<class 'pandas.core.frame.DataFrame'> RangeIndex: 20 entries, 0 to 19 Data columns (total 6 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Date 20 non-null datetime64[ns] 1 Close 20 non-null int64 2 Start 20 non-null int64 3 High 20 non-null int64 4 Low 20 non-null int64 5 Volume 20 non-null int64 dtypes: datetime64[ns](1), int64(5) memory usage: 1.1 KB

None

<class 'pandas.core.frame.DataFrame'> RangeIndex: 20 entries, 0 to 19 Data columns (total 7 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Date 20 non-null datetime64[ns] 1 Close 20 non-null int64 2 Start 20 non-null int64 3 High 20 non-null int64 4 Low 20 non-null int64 5 Volume 20 non-null int64 6 new_Date 20 non-null datetime64[ns] dtypes: datetime64[ns](2), int64(5) memory usage: 1.2 KB

None

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가
  • 5행 선택5행 다음에 행 추가
  • 6행 선택6행 다음에 행 추가

열 너비 조절

행 높이 조절

 

Close

Start

High

Low

Volume

new_Date

 

 

 

 

 

2018-07-02

10100

10850

10900

10000

137977

2018-06-29

10700

10550

10900

9990

170253

2018-06-28

10400

10900

10950

10150

155769

2018-06-27

10900

10800

11050

10500

133548

2018-06-26

10800

10900

11000

10700

63039

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Q9. stock-data.csv를 불러와서 아래 사항을 수행한 후 월별 데이터를 작성하여 출력하세요. --- (10점)

object 자료형으로 되어있는 Date 컬럼을 datetime64 자료형으로 변환하여 new_Date 컬럼을 생성

dt 속성을 이용하여 period로 변환, 월단위 기간을 의미하는 Date_m 컬럼을 생성하고 인덱스로 지정

In [13]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

# 날짜 데이터 분리

import pandas as pd

# read_csv() 함수로 파일 읽어와서 df로 변환

df = pd.read_csv('../stock-data.csv')

 

# 문자열인 날짜 데이터를 판다스 Timestamp 로 변환

df['new_Date'] = pd.to_datetime(df['Date']) # df에 새로운 열로 추가

 

# dt 속성을 이용하여 new_Date 열의 정보를 월로 구분

df['Month'] = df['new_Date'].dt.month

display(df.head(3))

 

# Timestamp를 Period로 변환하여 월 표기 변경하기

df['Date_m'] = df['new_Date'].dt.to_period(freq='M')

display(df.head(3))

 

# 원하는 열을 새로운 행 인덱스로 지정

df.set_index('Date_m', inplace=True)

display(df.head(3))

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 6열 선택6열 다음에 열 추가
  • 7열 선택7열 다음에 열 추가
  • 8열 선택8열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가

열 너비 조절

행 높이 조절

 

Date

Close

Start

High

Low

Volume

new_Date

Month

0

2018-07-02

10100

10850

10900

10000

137977

2018-07-02

7

1

2018-06-29

10700

10550

10900

9990

170253

2018-06-29

6

2

2018-06-28

10400

10900

10950

10150

155769

2018-06-28

6

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 6열 선택6열 다음에 열 추가
  • 7열 선택7열 다음에 열 추가
  • 8열 선택8열 다음에 열 추가
  • 9열 선택9열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가

열 너비 조절

행 높이 조절

 

Date

Close

Start

High

Low

Volume

new_Date

Month

Date_m

0

2018-07-02

10100

10850

10900

10000

137977

2018-07-02

7

2018-07

1

2018-06-29

10700

10550

10900

9990

170253

2018-06-29

6

2018-06

2

2018-06-28

10400

10900

10950

10150

155769

2018-06-28

6

2018-06

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 1열 선택1열 다음에 열 추가
  • 2열 선택2열 다음에 열 추가
  • 3열 선택3열 다음에 열 추가
  • 4열 선택4열 다음에 열 추가
  • 5열 선택5열 다음에 열 추가
  • 6열 선택6열 다음에 열 추가
  • 7열 선택7열 다음에 열 추가
  • 8열 선택8열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가
  • 1행 선택1행 다음에 행 추가
  • 2행 선택2행 다음에 행 추가
  • 3행 선택3행 다음에 행 추가
  • 4행 선택4행 다음에 행 추가

열 너비 조절

행 높이 조절

 

Date

Close

Start

High

Low

Volume

new_Date

Month

Date_m

 

 

 

 

 

 

 

 

2018-07

2018-07-02

10100

10850

10900

10000

137977

2018-07-02

7

2018-06

2018-06-29

10700

10550

10900

9990

170253

2018-06-29

6

2018-06

2018-06-28

10400

10900

10950

10150

155769

2018-06-28

6

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

Q10. df.mpg를 정규화 수행한 후 수행전과 후의 통계요약표를 출력하세요. --- (10점)

In [14]:

셀 전체 선택

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

열 너비 조절

행 높이 조절

df = pd.read_csv('../auto-mpg.csv', header=None)

df.columns = ['mpg','cylinders','displacement','horsepower','weight',

'acceleration','model year','origin','name']

display(df.mpg.describe()) # 정규화 수행 전 통계요약표

 

df.mpg = df.mpg / abs(df.mpg.max())

display(df.mpg.describe()) # 정규화 수행 후 통계요약표

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

count 398.000000 mean 23.514573 std 7.815984 min 9.000000 25% 17.500000 50% 23.000000 75% 29.000000 max 46.600000 Name: mpg, dtype: float64

count 398.000000 mean 0.504605 std 0.167725 min 0.193133 25% 0.375536 50% 0.493562 75% 0.622318 max 1.000000 Name: mpg, dtype: float64

 

728x90
반응형

댓글