ArgumentError: квантили не определены при наличии NaN или отсутствующих значений

Я хотел бы создать коробку, содержащую некоторые пропущенные значения в Джулии. Вот некоторый воспроизводимый код:

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 вы должны удалить эти пропущенные значения и как это сделать?

boxplot(filter(!isnan, df[!, "y"]))
Dan Getz 23.12.2022 18:00

Иногда ошибка похожа на предупреждение. Почему у вас есть NaN ценности? Какими они должны быть? Как это влияет на коробочную диаграмму? Возможно, значения missing более уместны

Dan Getz 23.12.2022 18:02
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

поэтому мне было интересно, почему в Джулии вы должны удалить эти пропущенные значения

Таким образом, общая причина заключается в разнице в философии дизайна 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)).

Другие вопросы по теме