1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
# -*- coding: utf-8 -*-
"""Day 03_01_Replacement.ipynb
Automatically generated by Colaboratory.
Original file is located at

https://colab.research.google.com/drive/1j7fz_7h2hVUqhCJPzlHBhH_35OEztVkS

"""
 
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler, RobustScaler
import io
from google.colab import files
 
uploaded = files.upload()
 
for fn in uploaded.keys():
  print('User uploaded file "{name}" with length {length} bytes'.format(name=fn, length=len(uploaded[fn])))
 
df = pd.read_csv(io.StringIO(uploaded['train.csv'].decode('utf-8')))
 
"""#보간법을 적용한 NA값 대체"""
 
df = pd.DataFrame(np.random.randn(53), columns = ['c1''c2''c3'])
 
df
 
## 단순 문자열 리스트
dfdate = ['07/3/2019''07/4/2019''07/5/2019''07/6/2019']
dfdate
 
## 날짜형식 타입 // 년 - 월 - 일 순서의 날짜로 인식
myDate = pd.to_datetime(dfdate)
myDate
 
times = pd.Series([1, np.nan, np.nan ,20], index = myDate)
times
 
"""####NaN을 채울때 단순히 채우는것이 아니라 보간법을 적용 앞과 뒤의 선형적인 중앙값으로 대체"""
 
ti = times.interpolate()
ti
 
## 시간에 대해서 보간법, 인덱스가 시계열 날짜인경우만 가능 , 3일 ~ 10일의 차이 7일을 1부터 20까지의 차이 약 20 으로 나눠서 
## 평균 증가값이 3.x 라는 가정을 해서 n번쨰의 경우 n * 3.x  으로 대체
 
 
dfdate = ['07/3/2019''07/4/2019''07/5/2019''07/10/2019']
dfdate
 
myDate = pd.to_datetime(dfdate)
myDate
times = pd.Series([1, np.nan, np.nan ,20], index = myDate)
 
times.interpolate(method = "time")
 
"""###DataFrame의 경우   Method = values"""
 
df = pd.DataFrame({"C1":[1,2,np.nan, np.nan, 5],
          "C2":[6,8,10,np.nan, 20 ]})
 
## 결측치의 앞과 뒤의 선형적관계를 따져서 중앙값으로 대체
 
df.interpolate(method = 'values' )
 
## 하나만 바꾸겠다
df.interpolate(method = 'values' , limit = 1)
 
## 밑에서 위로 하나만 바꾸겠다
df.interpolate(method = 'values' , limit = 1, limit_direction = 'backward')
 
"""####NaN값에 대해서 이런식으로 대략적으로 채우는 방법은 적절하지 못하다
## 결측값과 동시에 특정 값을 조건에 맞는 부분만 대체 Replace 함수
"""
 
= pd.Series([ 123 , 4, np.nan ])
S
 
## nan 값을 대체
S.replace(np.nan, 10)
S.replace( 3100 )
 
#시리즈의 첫번째 인수를 두번째 인수로 대체
S.replace( [1,2,3], [5,6,7] )
 
 
## 리스트가 아니라 1:1 관계로 1 을 10으로 바꾸도록 할 수도 있다.
S.replace( {1:10} )
 
S.replace( { 1:10, np.nan : 999 } )
 
"""##중복값에 대한 처리"""
 
## duplicated = > 중복값 찾기 , duplicats => 중복값 처리 , 몇개나 처리할지 옵션 있음.
## 묶었을때 유일하게 표현할 수 있는 값이 무엇인지 생각할것.
 
 
df = pd.DataFrame( { 'k1'  : ['a''b''c''c','b' ],
                     'k2'  : ['v''w''w''x''y'],
                      'c'  : [ 1,2,3,4,5 ]})
 
df.info()
 
##  어떠한 키를 기준으로 중복이 됬는지 아닌지 확인할 것인지 열 이름을 입력
##  0번 인덱스부터 순회하되, 첫번째로 만나는 요소는 false, 두번째로 만나는 요소 부터는  True를 리턴.
 
df.duplicated(['k1'])
 
 
## 두개의 컬럼을 묶었을때 동시에 같은 행이 있는지 확인.
 
df.duplicated(['k1''k2'])
 
## 모든 중복을 다 True로 반환 하거나 앞에서 부터 만나는 것을 True로 리턴하는 옵션이 있다.
 
 
## 기본 -> 두번째로 나오는거부터 Ture
df.duplicated(['k1'], keep = 'first')
 
 
## last -> 마지막에 나오는 것만 False 나머지는다 True
df.duplicated(['k1'], keep = 'last')
 
## 중복된 모든것을 다 True로 하겠다
df.duplicated(['k1'], keep = False )
 
## Duplicates - > 유니크한 요소는 남겨놓고 나머지를 다 날리겠다.
 
## 기본적으로 Duplicated와 마찬가지로 first가 디폴트 , 첫번째로 나오는것만 살리겠다
df.drop_duplicates( ['k1'] , keep = 'first')
df.drop_duplicates( ['k1'] , keep = 'last')
df.drop_duplicates( ['k1'] , keep = False )
 
"""###Unique = > 유일한 값을 찾겠다 , Value Counts =>  유니크한 값이 몇개가 있는가
###=> 데이터가 몇건인지에 상관없이 몇 종이 있는지 갯수를 세고자 할때 사용
"""
 
df = pd.DataFrame({
    "S":['f','m','m','f','m'   ],
    "D":['a','a','a','a',np.nan],
    "C":[  1,  1,  3,  44    ]
})
 
df.info()
 
## 'S' 컬럼에 대해서 어떤 값으로 이루어져 있는지 확인.
 
df['S'].unique()
 
## 'D' 컬럼에 대해서 어떤 값으로 이루어져 있는지 확인. NaN도 확인 가능하다.
 
df['D'].unique()
 
##  Unique 함수는 Serise에 있는 메소드. Value counts 또한 Series에 있다.
##  Values counts는 각 행에 대해서 각 요소가 몇개가 있는지 확인 가능. table()과 같다.
 
df['S'].value_counts()
 
 
## NaN이 몇개인지는 확인이 안된다...!
df['D'].value_counts()
 
 
## 전체 행수대비 비율을 보고자 할때, NaN은 집계에서 제외
df['S'].value_counts(normalize = True )
 
## 결과가 내림차순으로 정렬 ( 갯수에 대해서 )
 
df['C'].value_counts( sort = True)
 
## ascending = False 가 기본값
df['C'].value_counts( sort = True, ascending = False )
df['C'].value_counts( sort = True, ascending = True  )
 
## NaN은 기본적으로 포함되지 않는다, dropna = True가 기본,  dropna 하고나서 함수를 적용하겠다.
df['D'].value_counts(dropna = False)
 
 
 
## 구간별 value_counts => bins ,  연속형 변수에 대해서 사용가능하다.
## 0 ~ 1 까지 , 1 ~ 4 까지 몇개가 들어있는지를 확인한다.
 
df['C'].value_counts( sort = False , bins = [ 014 ] )
df['C'].value_counts( sort = False , bins = [ 01234 ] )
 
## 카운트는 안하고 구간만 나눈다.
 
res = pd.cut( df['C'], bins = [ 012345 ] )
 
 
### 이렇게 해야 나눠진 구간별로 Count를 할 수 있다.
pd.value_counts(res)
 
 
cs


'딥러닝 모델 설계 > Machine Learning' 카테고리의 다른 글

Day 4. binomializing [ OneHotEncoding ]  (0) 2019.07.06
Day 03. Scaler  (0) 2019.07.03
Day 02. Pandas Review - 2  (0) 2019.07.02
Day 02. Pandas Review - 1  (0) 2019.07.02
Day 01. Numpy Fundamental Operations Review  (0) 2019.07.01

+ Recent posts