03. missingvalues (한글)
Introduction to DataFrames¶
Bogumił Kamiński, 2018년 5월 23일
출처¶
함께보기¶
- https://deepstat.tistory.com/69 (01. constructors)(in English)
- https://deepstat.tistory.com/70 (01. constructors)(한글)
- https://deepstat.tistory.com/71 (02. basicinfo)(in English)
- https://deepstat.tistory.com/72 (02. basicinfo)(한글)
- https://deepstat.tistory.com/73 (03. missingvalues)(in English)
- https://deepstat.tistory.com/74 (03. missingvalues)(한글)
using DataFrames # 패키지 불러오기
결측치(missing values) 다루기¶
Missings.Missing
타입(tyoe)은 결측치(missingv alue)를 다룰 수 있게 해준다.
missing, typeof(missing)
배열(Array)는 적절한 union type을 자동적으로 만든다.
x = [1, 2, missing, 3]
ismissing
을 이용하면 결측인지 아닌지 확인할 수 있다.
ismissing(1), ismissing(missing), ismissing(x), ismissing.(x)
Missings.T(eltype())을 이용하면 Union
에서 Missing 타입과 결합된 타입을 추출할 수 있다.
eltype(x), Missings.T(eltype(x))
missing
과 대소비교한 결과는 missing
이다.
missing == missing, missing != missing, missing < missing
다른 타입과의 비교도 마찬가지로 missing
이다.
1 == missing, 1 != missing, 1 < missing
isequal
, isless
, ===
이 세 가지를 사용하면 논리(Bool)
타입을 반환한다.
isequal(missing, missing), missing === missing, isequal(1, missing), isless(1, missing)
결측치는 어떤 수치값보다 크다 (무한대보다도 더!).
isless(Inf,missing)
다음 몇 가지 예는, 많은 함수들이 missing
을 다루고 있음을 알 수 있다.
map(x -> x(missing), [sin, cos, zero, sqrt]) # part 1
map(x -> x(missing, 1), [+, - , *, /, div]) # part 2
using Statistics
map(x -> x([1,2,missing]), [minimum, maximum, extrema, mean, float]) # part 3
skipmissing
은 결측치를 없앤 결과를 반환한다. collect
와 skipmissing
을 이용해서 결측치가 없는 배열을 만들 수 있다.
skipmissing([1, missing, 2, missing])
collect(skipmissing([1, missing, 2, missing]))
마찬가지로, collect
와 Missing.replace
를 이용해서 결측치를 특정 값으로 바꾼 배열을 얻을 수 있다. (이 경우에는 NaN
으로 바꿨다.)
collect(Missings.replace([1.0, missing, 2.0, missing], NaN))
같은 작업을 coalesce
로 할 수 있다.
coalesce.([1.0, missing, 2.0, missing], NaN)
recode
를 이용해도 같은 작업을 할 수 있다.
recode([1.0, missing, 2.0, missing], missing=>NaN)
unique
를 이용하면 missing이 있는 유일값을, levels
를 이용하면 missing이 없는 유일값을 얻을 수 있다.
unique([1, missing, 2, missing]), levels([1, missing, 2, missing])
allowmissing
을 이용해서 x
에 missing을 허용하도록 하고,
x = [1,2,3]
y = allowmissing(x)
disallowmissing
을 이용해서 다시 missing을 허용하지 않도록 한다.
z = disallowmissing(y)
x,y,z
이 다음 예제에서는 x
의 각 열의 타입이 처음에는 Int64
임을 보여준다. allowmissing!
를 사용하여 1행과 3행에서 결측치를 허용한 후에, 행 타입은 Int64
과 Missings.Missing
의 Union
이 된다.
x = DataFrame(Int, 2, 3)
println("Before: ", eltypes(x))
allowmissing!(x, 1) # 1행이 missing을 허용하도록
allowmissing!(x, :x3) # :x3 행이 missing을 허용하도록
println("After: ", eltypes(x))
다음 예제에서는 completecases
를 써서 데이터프레임
의 열 데이터가 완전한지 알 수 있게 해준다.
x = DataFrame(A=[1, missing, 3, 4], B=["A", "B", missing, "C"])
println(x)
println("Complete cases:\n", completecases(x))
dropmissing
이나 dropmissing!
을 써서 missing이 있는 행은 모두 다 지울 수 있다.
y = dropmissing(x)
dropmissing!(x)
[x, y]
eltypes
를 통해서 데이터프레임
을 보면 missing 을 허용하는지 아닌지는 알 수 있다.
eltypes(x)
결측치를 없앴으므로, disallowmissing!
을 써서 더 이상 결측치를 허용하지 않도록 하자.
disallowmissing!(x)
eltypes(x)