줄리아에서 데이터프레임 사이즈 확인하는 법
개요
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

저희들의 저서 「줄리아 프로그래밍」이 2024 세종도서 학술부문에 선정되었습니다!

