logo

ジュリアでデータフレームのサイズを確認する方法 📂ジュリア

ジュリアでデータフレームのサイズを確認する方法

概要

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