Как получить размер памяти фрейма данных Julia?

#dataframe #memory #julia #size

#фрейм данных #память #джулия #размер

Вопрос:

Я хотел бы оптимизировать (столбцы в) фрейме данных Julia. Для этого я хотел бы получить размер фрейма данных до и после оптимизации.

Вот пример фрейма данных:

 rows, columns = 10_000, 50
df = rand([x for x in "ABCDE"], rows, columns) |> DataFrame
 

Размер этого df объекта…

 sizeof(df)
 

Размер равен 24.

Однако, когда я суммирую размеры столбцов, размер отличается…

 sum([sizeof(df[x]) for x in names(df)])
 

Сумма размеров столбцов равна 2000000.

Вот оптимизация…

 for i = names(df)
    df[i] = CategoricalArray(df[i], ordered=false)
end
 

Результаты:

 sizeof(df)
 

Размер равен 24.

 sum([sizeof(df[x]) for x in names(df)])
 

Сумма размеров столбцов равна 800.

Есть предложения, как получить точный размер фрейма данных?

Ответ №1:

Вот способ, которым вы можете это сделать:

 julia> df = DataFrame(rand([x for x in "ABCDE"], rows, columns), :auto);

julia> Base.summarysize(df)
2007456

julia> Base.summarysize(mapcols(PooledArray, df)) # this will change in the next release of PooledArrays.jl as the default size of refarray element will be UInt32
525656

julia> Base.summarysize(mapcols(categorical, df))
2037256

julia> Base.summarysize(mapcols(x -> categorical(x, compress=true), df))
534856
 

Обратите внимание, однако, что в данном случае это не так много, так как все ваши столбцы имеют Char тип элемента. Вы получили бы гораздо больше пользы, если бы имели столбцы, содержащие длинные строки.