줄리아에서 데이터프레임 사이즈 확인하는 법

줄리아에서 데이터프레임 사이즈 확인하는 법

How to Get the Size of DataFrame in julia

개요

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
────────┼─────────────────────────────────────────────────────
      10.474921   0.942137  0.0523668  0.588696  0.0176242
      20.842828   0.910385  0.216194   0.794668  0.664883
      30.0350312  0.96542   0.837923   0.920311  0.748409
      40.613249   0.731643  0.941826   0.688649  0.161736
   ⋮    │     ⋮         ⋮          ⋮         ⋮          ⋮
  999980.767794   0.242687  0.965885   0.557483  0.723849
  999990.743936   0.67815   0.529923   0.247698  0.861302
 1000000.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
댓글