고래밥 이야기

10.2 주택 데이터셋 탐색 본문

데이터 분석/머신러닝 교과서 with 파이썬, 사이킷런, 텐서플로

10.2 주택 데이터셋 탐색

Whale_Rice 2022. 1. 18. 21:57

머신러닝 교과서 with 파이썬, 사이킷런, 텐서플로를 참고하여 작성하였습니다.

 

# 안보고 코드를 구현하려고 노력하였기에 변수가 각각 틀릴 수도 있습니다..

# 코드 다 암기하기. 실력이 급하다. 

 

  • 데이터 불러오기
import pandas as pd
df1 = pd.read_csv('https://raw.githubusercontent.com/rickiepark/' 'python-machine-learning-book-3rd-edition' '/master/ch10/housing.data.txt',sep="\s+",header=None)
# header = None은 column이름을 지정하지 않겠다는 소리이며, sep="\s+"는 빈칸(space bar)을 기준으로 나누겠다는 소리이다.
print(df1)
print(df1.shape)

          0     1      2   3      4   ...     9     10      11    12    13
0    0.00632  18.0   2.31   0  0.538  ...  296.0  15.3  396.90  4.98  24.0
1    0.02731   0.0   7.07   0  0.469  ...  242.0  17.8  396.90  9.14  21.6
2    0.02729   0.0   7.07   0  0.469  ...  242.0  17.8  392.83  4.03  34.7
3    0.03237   0.0   2.18   0  0.458  ...  222.0  18.7  394.63  2.94  33.4
4    0.06905   0.0   2.18   0  0.458  ...  222.0  18.7  396.90  5.33  36.2
..       ...   ...    ...  ..    ...  ...    ...   ...     ...   ...   ...
501  0.06263   0.0  11.93   0  0.573  ...  273.0  21.0  391.99  9.67  22.4
502  0.04527   0.0  11.93   0  0.573  ...  273.0  21.0  396.90  9.08  20.6
503  0.06076   0.0  11.93   0  0.573  ...  273.0  21.0  396.90  5.64  23.9
504  0.10959   0.0  11.93   0  0.573  ...  273.0  21.0  393.45  6.48  22.0
505  0.04741   0.0  11.93   0  0.573  ...  273.0  21.0  396.90  7.88  11.9

[506 rows x 14 columns]
(506, 14)

만일 sep를 지정안한다면,,?

df2 = pd.read_csv('https://raw.githubusercontent.com/rickiepark/' 'python-machine-learning-book-3rd-edition' '/master/ch10/housing.data.txt',header=None)
# 만일 sep을 넣지 않는다면,, 데이터가 이렇게 쏠려있게 되어버린다.
print(df2) 
print(df2.shape)

                                                     0
0     0.00632  18.00   2.310  0  0.5380  6.5750  65...
1     0.02731   0.00   7.070  0  0.4690  6.4210  78...
2     0.02729   0.00   7.070  0  0.4690  7.1850  61...
3     0.03237   0.00   2.180  0  0.4580  6.9980  45...
4     0.06905   0.00   2.180  0  0.4580  7.1470  54...
..                                                 ...
501   0.06263   0.00  11.930  0  0.5730  6.5930  69...
502   0.04527   0.00  11.930  0  0.5730  6.1200  76...
503   0.06076   0.00  11.930  0  0.5730  6.9760  91...
504   0.10959   0.00  11.930  0  0.5730  6.7940  89...
505   0.04741   0.00  11.930  0  0.5730  6.0300  80...

[506 rows x 1 columns]
(506, 1)

 

  • 산점도 행렬
!pip install mlxtend

import matplotlib.pyplot as plt
from mlxtend.plotting import scatterplotmatrix # 산점도 행렬
scatterplotmatrix(df1.values, figsize= (10,8), alpha = 0.5) # df1.values는 해당 값들을 array화 해주는 것이다.(아래에 코드를 돌려보았다.) figsize는 그래프의 크기, alpha는 색이 나오는 투명도를 의미한다.
plt.tight_layout() # 서브 플롯간에 올바른 간격을 자동으로 유지하게 해준다. 여기서 화면이 깨지는 이유는 figszie를 (10,8)로 정해ㅗ나서 그렇다.
plt.show()

뭐,, 그냥 한번 다 넣어버렸다.

 

  • 상관계수
# 상관관계 행렬 여기서는 행렬 보다는 numpy에 상관계수를 구하는 method가 있다는 사실을 보여줄 것이다.
import numpy as np
cm = np.corrcoef(df1.values.T) 
# 왜 Transpose를 할까? df1.values.shape는 (506,14)이다. 우리는 '열' 기준으로 상관계수를 구하기 위해 transpse를 진행한다. 만약 T를 안붙인다면 506 * 506 크기의 행렬이 나올것이다.
print(cm)
print(cm.shape)

[[ 1.         -0.20046922  0.40658341 -0.05589158  0.42097171 -0.2192467
   0.35273425 -0.37967009  0.62550515  0.58276431  0.28994558 -0.38506394
   0.45562148 -0.38830461]
 [-0.20046922  1.         -0.53382819 -0.04269672 -0.51660371  0.31199059
  -0.56953734  0.66440822 -0.31194783 -0.31456332 -0.39167855  0.17552032
  -0.41299457  0.36044534]
 [ 0.40658341 -0.53382819  1.          0.06293803  0.76365145 -0.39167585
   0.64477851 -0.70802699  0.59512927  0.72076018  0.38324756 -0.35697654
   0.60379972 -0.48372516]
 [-0.05589158 -0.04269672  0.06293803  1.          0.09120281  0.09125123
   0.08651777 -0.09917578 -0.00736824 -0.03558652 -0.12151517  0.04878848
  -0.0539293   0.17526018]
 [ 0.42097171 -0.51660371  0.76365145  0.09120281  1.         -0.30218819
   0.7314701  -0.76923011  0.61144056  0.6680232   0.18893268 -0.38005064
   0.59087892 -0.42732077]
 [-0.2192467   0.31199059 -0.39167585  0.09125123 -0.30218819  1.
  -0.24026493  0.20524621 -0.20984667 -0.29204783 -0.35550149  0.12806864
  -0.61380827  0.69535995]
 [ 0.35273425 -0.56953734  0.64477851  0.08651777  0.7314701  -0.24026493
   1.         -0.74788054  0.45602245  0.50645559  0.26151501 -0.27353398
   0.60233853 -0.37695457]
 [-0.37967009  0.66440822 -0.70802699 -0.09917578 -0.76923011  0.20524621
  -0.74788054  1.         -0.49458793 -0.53443158 -0.23247054  0.29151167
  -0.49699583  0.24992873]
 [ 0.62550515 -0.31194783  0.59512927 -0.00736824  0.61144056 -0.20984667
   0.45602245 -0.49458793  1.          0.91022819  0.46474118 -0.44441282
   0.48867633 -0.38162623]
 [ 0.58276431 -0.31456332  0.72076018 -0.03558652  0.6680232  -0.29204783
   0.50645559 -0.53443158  0.91022819  1.          0.46085304 -0.44180801
   0.54399341 -0.46853593]
 [ 0.28994558 -0.39167855  0.38324756 -0.12151517  0.18893268 -0.35550149
   0.26151501 -0.23247054  0.46474118  0.46085304  1.         -0.1773833
   0.37404432 -0.50778669]
 [-0.38506394  0.17552032 -0.35697654  0.04878848 -0.38005064  0.12806864
  -0.27353398  0.29151167 -0.44441282 -0.44180801 -0.1773833   1.
  -0.3660869   0.33346082]
 [ 0.45562148 -0.41299457  0.60379972 -0.0539293   0.59087892 -0.61380827
   0.60233853 -0.49699583  0.48867633  0.54399341  0.37404432 -0.3660869
   1.         -0.73766273]
 [-0.38830461  0.36044534 -0.48372516  0.17526018 -0.42732077  0.69535995
  -0.37695457  0.24992873 -0.38162623 -0.46853593 -0.50778669  0.33346082
  -0.73766273  1.        ]]
(14, 14)

 

Comments