Я хотел бы создать коробку, содержащую некоторые пропущенные значения в Джулии. Вот некоторый воспроизводимый код:
using DataFrames
using StatsPlots
df = DataFrame(y = [1,2,3,2,1,2,4,NaN,NaN,2,1])
boxplot(df[!, "y"])
Выход:
ArgumentError: quantiles are undefined in presence of NaNs or missing values
Я знаю, что ошибка возникает из-за значений NaN
, но нет ли в boxplot
возможности отображать значения вместо предварительного удаления отсутствующих значений? Я бы предположил, что он может быть разработан таким образом, чтобы он работал при наличии пропущенных значений. В R он по-прежнему будет строить диаграмму, поэтому мне было интересно, почему в Julia
вы должны удалить эти пропущенные значения и как это сделать?
Иногда ошибка похожа на предупреждение. Почему у вас есть NaN
ценности? Какими они должны быть? Как это влияет на коробочную диаграмму? Возможно, значения missing
более уместны
поэтому мне было интересно, почему в Джулии вы должны удалить эти пропущенные значения
Таким образом, общая причина заключается в разнице в философии дизайна R и Julia.
R был разработан, чтобы быть максимально удобным, хотя иногда есть риск сделать что-то неправильное. Он пытается угадать, что вы, скорее всего, хотите, и делает это. В этом случае вы, скорее всего, хотите, чтобы значения NaN
игнорировались.
Julia разработана для безопасного и производственного использования. Если у вас есть NaN
в ваших данных, это означает, что в процессе подготовки данных возникла серьезная проблема (например, деление 0 на 0). В производственных сценариях вы хотите, чтобы ваш код выдавал ошибку в таких случаях, иначе трудно определить основную причину проблемы.
Теперь, поддерживая то, что прокомментировал Дэн Гетц - скорее всего, ваш NaN
на самом деле missing
(поскольку вы называете его отсутствующим). Эти два не следует смешивать и иметь существенно различную интерпретацию. NaN
— это неопределенное или непредставимое значение, особенно в арифметике с плавающей запятой (например, 0 делится на 0). В то время как missing
— это значение, которое отсутствует (например, мы не собрали измерение).
Тем не менее, даже если ваши данные содержат missing
, вы получите сообщение об ошибке по той же причине безопасности.
каков правильный способ сделать это?
NaN
очень редко встречаются на практике, поэтому Дэн Гетц рекомендовал типичный способ их фильтрации. Другое было бы [x for x in df.y if !isnan(x)]
.
Если в ваших данных были значения missing
(поскольку это, скорее всего, то, что вам нужно), вы должны написать boxplot(skipmissing(df.y))
.
boxplot(filter(!isnan, df[!, "y"]))