웹에서 자료를 호출하고 호출된 자료를 조절하기 위해 다음의 모듈이 필요하다. 
import numpy as np
import pandas as pd
from datetime import datetime
from pandas_datareader import data, wb #웹에서 데이터 호출
import pandas_datareader.data as web
import matplotlib.pyplot as plt #그래프 작성을 위해 필요
%matplotlib inline
from sklearn.linear_model import LinearRegression
startD=datetime(2016, 1,1)
endD=datetime(2017, 3, 31)
d=web.DataReader('KRX:kospi', 'google', startD, endD)
print(d.head(3))
print(d.tail(3))
              Open     High      Low    Close     Volume
Date                                                     
2016-01-04  1954.47  1954.52  1918.76  1918.76  359018000
2016-01-05  1911.93  1937.57  1911.93  1930.53  446548000
2016-01-06  1934.25  1934.25  1911.61  1925.43  594612000
               Open     High      Low    Close     Volume
Date                                                     
2017-03-29  2172.31  2172.31  2162.04  2166.98  626792000
2017-03-30  2170.18  2174.16  2159.16  2164.64  643563000
2017-03-31  2166.62  2166.93  2159.80  2160.23  441640000
d1=np.array(d)
d1[:3]
array([[  1.95447000e+03,   1.95452000e+03,   1.91876000e+03,
          1.91876000e+03,   3.59018000e+08],
       [  1.91193000e+03,   1.93757000e+03,   1.91193000e+03,
          1.93053000e+03,   4.46548000e+08],
       [  1.93425000e+03,   1.93425000e+03,   1.91161000e+03,
          1.92543000e+03,   5.94612000e+08]])
결측지 조절(missing value control)
np.isnan() : 데이터내의 각 원소값을 조사하여 Nan 값이 존재하면 True, 아니면 False를 반환(pandas 모듈에서 pd.isnull()과 유사),반대의 결과 즉, nan 아니면 True의 결과를 반환하기 위해서는 ~np.isnan() np.isinf(): 무한값이 존재하면 True np.isfinite(): 유한값에서 True(pandas 모듈에서 pd.notnull()와 유사)
np.nan_to-num(객체) : nan 값을 0으로 치환하고 무한값(infinite value)을 유한 값으로 치환한다. 이와 유사하지만 보다 자세한 기능을 pandas 모듈에서 지원한다. 
pd.fillna(value=None, method=None, axis=None…): 데이터 중의 Na값을 특정 값(매개변수 value에 지정된 값)으로 치환한다. 이 방식은 매개변수 method로 지정한다. method의 인수는 backfill=bfill, ffill=pad로 각각 na에 이어지는 값, na의 이전값으로 대치한다.
x=np.floor(np.random.randn(12)*10).reshape(3,4)
x[0,2]=np.nan
x[1,1]=np.nan
x[2,2]=np.nan
x
array([[  7.,  -3.,  nan,  -7.],
       [ -8.,  nan,  -4.,   5.],
       [ 12.,  -5.,  nan, -19.]])
print(np.isnan(x))
[[False False  True False]
 [False  True False False]
 [False False  True False]]
print(pd.isnull(x))
[[False False  True False]
 [False  True False False]
 [False False  True False]]
#위의 두 함수는 동일한 결과를 반환하고 아래의 함수는 반대의 결과를 반환한다. 
print(pd.notnull(x))
[[ True  True False  True]
 [ True False  True  True]
 [ True  True False  True]]
np.nan_to_num(x)
array([[  7.,  -3.,   0.,  -7.],
       [ -8.,   0.,  -4.,   5.],
       [ 12.,  -5.,   0., -19.]])
#pandas 모듈을 사용하기 위해서는 np 배열을 pd DataFrame 또는 Series 구조로 전환
x1=pd.DataFrame(x)
x1
 
|  | 
0 | 
1 | 
2 | 
3 | 
| 
0 | 
7.0 | 
-3.0 | 
NaN | 
-7.0 | 
| 
1 | 
-8.0 | 
NaN | 
-4.0 | 
5.0 | 
| 
2 | 
12.0 | 
-5.0 | 
NaN | 
-19.0 | 
 
#위와 같이 nan을 0으로 치환하기 위해 pa.fillna()에서 매개변수 value=0으로 지정
x1.fillna(0)
|  | 
0 | 
1 | 
2 | 
3 | 
| 
0 | 
7.0 | 
-3.0 | 
0.0 | 
-7.0 | 
| 
1 | 
-8.0 | 
0.0 | 
-4.0 | 
5.0 | 
| 
2 | 
12.0 | 
-5.0 | 
0.0 | 
-19.0 | 
 
#method 지정의 변화에 따른 결과 
print(x1.fillna(method='bfill', axis=1))#이어지는 값으로 치환
     0    1     2     3
0   7.0 -3.0  -7.0  -7.0
1  -8.0 -4.0  -4.0   5.0
2  12.0 -5.0 -19.0 -19.0
print(x1.fillna(method='ffill', axis=1))#직전의 값으로 치환 
      0    1    2     3
0   7.0 -3.0 -3.0  -7.0
1  -8.0 -8.0 -4.0   5.0
2  12.0 -5.0 -5.0 -19.0
print(x1.fillna(method='pad', axis=1))#위와 동일
      0    1    2     3
0   7.0 -3.0 -3.0  -7.0
1  -8.0 -8.0 -4.0   5.0
2  12.0 -5.0 -5.0 -19.0
NaN 값을 제거하기 위해 np.delete, pd.dropna함수를 사용 np.delete(객체, 위치): 객체중의 지정된 위치에 있는 값을 제거한다.
pd.dropna(axis=0, how=’any’,…): NaN값을 삭제한다. axis의 인수 0은 index, 1은 column을 의미한다. 매개변수 how의 인수는 any, all이 있다. any는 Nan이 존재하는 라벨을 제거하고 all은 모든 값들이 nan이라면 그 라벨을 제거한다.
print(x)
[[  7.  -3.  nan  -7.]
 [ -8.  nan  -4.   5.]
 [ 12.  -5.  nan -19.]]
print(np.isnan(x[0]))
[False False  True False]
np.delete(x[0], 2)
array([ 7., -3., -7.])
print(x1.dropna(axis=1))#NaN이 존재하는 부분을 제거한다. 
     0     3
0   7.0  -7.0
1  -8.0   5.0
2  12.0 -19.0
#NaN이 공통적으로 존재하는 부분의 라벨을 제거한다.
#객체 x1은 NaN이 일치되는 행 또는 열이 존재하지 않으므로 어떤 변화도 없다.  
print(x1.dropna(axis=1, how="all"))
      0    1    2     3
0   7.0 -3.0  NaN  -7.0
1  -8.0  NaN -4.0   5.0
2  12.0 -5.0  NaN -19.0
객체의 원소중에 0을 포함하는 경우 상관계수등의 계산 결과가 합리적이지 못합니다. 이 경우 객체중에 0의 제외하고 자 합니다. 이 과정은 두단계로 이루어 질수 있습니다. 
1) 객체 중의 원소 0을 np.nan으로 전환합니다. 
2) 객체중의 nan을 제거합니다. 
trgD=trgD.replace(0, np.nan) #객체 중 값이 0인 원소들을 np.nan으로 대체 합니다. 
trgD=trgD.dropna()#nan이 포함된 행을 제거합니다.  
 
 
 
 
 
댓글
댓글 쓰기