ジュリアでデータフレームのサイズを確認する方法
概要
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