줄리아에서 데이터프레임 사이즈 확인하는 법
개요
nrow()
, ncol()
, size()
등을 사용할 수 있다. R과 달리 length()
는 에러를 낸다.
코드
julia> df = DataFrame(rand(100000,5), :auto)
100000×5 DataFrame
Row │ x1 x2 x3 x4 x5
│ Float64 Float64 Float64 Float64 Float64
────────┼─────────────────────────────────────────────────────
1 │ 0.474921 0.942137 0.0523668 0.588696 0.0176242
2 │ 0.842828 0.910385 0.216194 0.794668 0.664883
3 │ 0.0350312 0.96542 0.837923 0.920311 0.748409
4 │ 0.613249 0.731643 0.941826 0.688649 0.161736
⋮ │ ⋮ ⋮ ⋮ ⋮ ⋮
99998 │ 0.767794 0.242687 0.965885 0.557483 0.723849
99999 │ 0.743936 0.67815 0.529923 0.247698 0.861302
100000 │ 0.628269 0.252583 0.985485 0.24541 0.942741
99993 rows omitted
df
는 행이 10만개고 열이 5개인 데이터프레임이다.
julia> nrow(df)
100000
julia> ncol(df)
5
julia> size(df)
(100000, 5)
nrow()
와 ncol()
는 각각 행과 열의 수를 반환하고, size()
는 행,열의 크기를 튜플로 반환해준다. 이를 행, 열 순서대로 참조하면 행과 열의 크기를 따로 알 수 있다. 언뜻 보기엔 size()
가 훨씬 유용해보이지만, 그 성능을 비교해보자.
최적화
julia> @time for i in 1:10^6
nrow(df)
end
0.051730 seconds (1000.00 k allocations: 15.259 MiB)
julia> @time for i in 1:10^6
size(df)[1]
end
0.536297 seconds (3.00 M allocations: 61.035 MiB, 5.44% gc time)
위는 nrow()
와 size()
의 속도를 비교한 것이다. 당연하지만 하나의 기능만 하는 nrow()
가 더 빠르다. 벤치마크를 위해 다소 억지스러울 정도로 많이 돌리긴 했는데, 데이터프레임이 훨씬 큰 경우―빅데이터를 다루거나 별로 차이가 나지 않을 줄 알고 size()
를 사용하면 쓸데없는 시간을 낭비할 수 있다.
또한 코드의 가독성 면에서도 큰 차이가 있다. nrow()
와 ncol()
는 다른 언어에서도 흔히 사용되는 함수명이고 의심의 여지 없이 행,열의 수지만 size()
는 뒤에 붙는 인덱스 때문에 코드의 가독성을 크게 저하시킨다. 가능하다면 nrow()
와 ncol()
를 사용하도록 하자.
전체코드
using DataFrames
df = DataFrame(rand(100000,5), :auto)
nrow(df)
ncol(df)
size(df)
@time for i in 1:10^6
nrow(df)
end
@time for i in 1:10^6
size(df)[1]
end
환경
- OS: Windows
- julia: v1.6.3