Я пытаюсь составить график количества действий пользователей (в данном случае «лайков») с течением времени.
Таким образом, у меня есть «Количество действий» в качестве моей оси Y, моя ось X - время (недели), и каждая строка представляет одного пользователя.
Моя проблема в том, что я хочу посмотреть на эти данные около 100 пользователей. Линейный график быстро превращается в беспорядок с 100 линиями. Есть ли лучший тип графика, который я могу использовать для отображения этой информации? Или я должен смотреть на возможность включения / выключения отдельных линий?
Я хотел бы видеть все данные одновременно, но возможность различать количество действий с высокой точностью не очень важна.
Почему я это делаю
Для подмножества моих пользователей (топ-пользователей) я хочу выяснить, кому из них может не понравиться новая версия приложения, выпущенная в определенный день. Я ищу существенное снижение количества действий отдельных пользователей.
источник
facet_wrap
функцию ggplot2 для создания блока 4х5 диаграмм (4 строки, 5 столбцов - корректировка в зависимости от желаемого соотношения сторон) с ~ 5 пользователями на диаграмму. Это должно быть достаточно ясно, и вы можете масштабировать его примерно до 10 пользователей на график, предоставляя место для 200 с графиком 4x5 или 360 с графиком 6x6.Ответы:
Я хотел бы предложить (стандартный) предварительный анализ, чтобы устранить основные последствия (а) различий между пользователями, (б) типичного ответа всех пользователей на изменение и (в) типичного отклонения от одного периода времени к следующему ,
Простой (но ни в коем случае не лучший) способ сделать это - выполнить несколько итераций «полировки среднего значения» для данных, чтобы вычистить медианы пользователя и медианы периода времени, а затем сгладить невязки во времени. Определите сглаживания, которые сильно меняются: это пользователи, которых вы хотите подчеркнуть на графике.
Поскольку это данные подсчета, хорошей идеей является их повторное выражение с использованием квадратного корня.
В качестве примера того, что может привести, приведем смоделированный 60-недельный набор данных из 240 пользователей, которые обычно выполняют от 10 до 20 действий в неделю. Изменения во всех пользователях произошли после 40 недели. Трем из них «сказали» негативно отреагировать на изменение. На левом графике показаны необработанные данные: количество действий пользователя (с выделением пользователей по цвету) с течением времени. Как утверждается в вопросе, это беспорядок. Правый график показывает результаты этого EDA - в тех же цветах, что и раньше - с необычно отзывчивыми пользователями, автоматически идентифицированными и выделенными. Идентификация - хотя она и является специальной, - является полной и правильной (в этом примере).
Вот
R
код, который произвел эти данные и провел анализ. Это может быть улучшено несколькими способами, в том числеИспользование полной средней полировки для поиска остатков, а не только одна итерация.
Сглаживание остатков отдельно до и после точки изменения.
Возможно, с использованием более сложного алгоритма обнаружения выбросов. Текущий просто помечает всех пользователей, чей диапазон остатков более чем в два раза превышает средний диапазон. Несмотря на простоту, он надежен и работает хорошо. (Настраиваемое пользователем значение
threshold
может быть скорректировано, чтобы сделать эту идентификацию более или менее строгой.)Тем не менее, тестирование показывает, что это решение хорошо работает для широкого диапазона пользователей, от 12 до 240 и более.
источник
threshold
n.users <- 500
n.outliers <- 100
threshold <- 2.5
Обычно я обнаруживаю, что более двух или трех строк на одном фасете сюжета становится трудночитаемым (хотя я все еще делаю это все время). Так что это интересный пример того, что делать, когда у вас есть что-то, что концептуально может быть 100-гранным сюжетом. Один из возможных способов - нарисовать все 100 граней, но вместо того, чтобы пытаться отобразить их все на странице сразу, просматривая их по одному в анимации.
Мы фактически использовали эту технику в своей работе - мы изначально создали анимацию, показывающую 60 различных линейных графиков в качестве фона для события (запуск новой серии данных), а затем обнаружили, что при этом мы фактически подобрали некоторые особенности данных это не было видно на граненых графиках с 15 или 30 гранями на страницу.
Итак, вот альтернативный способ представления необработанных данных перед тем, как вы начнете удалять пользователя и типичные временные эффекты, как рекомендовано @whuber. Это представляется просто как дополнительная альтернатива его представлению необработанных данных - я полностью рекомендую вам затем продолжить анализ в соответствии с теми, что он предлагает.
Одним из способов решения этой проблемы является создание 100 (или 240 в примере @ whuber) временных рядов по отдельности и их объединение в анимацию. Приведенный ниже код создаст 240 отдельных изображений такого рода, а затем вы можете использовать бесплатное программное обеспечение для создания фильмов, чтобы превратить его в фильм. К сожалению, единственным способом, которым я мог сделать это и сохранить приемлемое качество, был файл размером 9 МБ, но если вам не нужно отправлять его через Интернет, это не может быть проблемой, и в любом случае я уверен, что есть способы обойти это с немного большим количеством анимация подкованная. Анимационный пакет в R может быть полезен здесь (позволяет делать все это при вызове из R), но я оставил это простым для этой иллюстрации.
Я сделал анимацию так, чтобы она рисовала каждую линию жирным черным цветом, а затем оставляла бледную полупрозрачную зеленую тень позади, чтобы глаз получал постепенную картину накапливающихся данных. В этом есть как риски, так и возможности - порядок добавления строк оставит другое впечатление, поэтому вам следует подумать о том, чтобы сделать его осмысленным.
Вот некоторые кадры из фильма, в которых используются те же данные, что и @whuber:
источник
windows()
илиquartz()
, а затем вложить свойfor()
цикл в него. NB, вам нужно поместитьSys.sleep(1)
в конец цикла, чтобы вы могли увидеть итерации. Конечно, эта стратегия на самом деле не сохраняет файл фильма - вам просто нужно перезапускать его каждый раз, когда вы захотите посмотреть его снова.Одна из самых простых вещей - это коробочный сюжет. Вы можете сразу увидеть, как движутся ваши выборочные медианы и какие дни имеют наибольшее количество выбросов.
Для индивидуального анализа я предлагаю взять небольшую случайную выборку из ваших данных и проанализировать отдельные временные ряды.
источник
Конечно. Сначала отсортируем по среднему количеству действий. Затем составьте, скажем, 4 графика, каждый из которых содержит 25 строк, по одному на каждый квартиль. Это означает, что вы можете уменьшить оси Y (но сделать метку оси Y прозрачной). И с 25 линиями, вы можете варьировать их по типу линии и цвету и, возможно, нанесению символа и получить некоторую ясность
Затем сложите графики вертикально с одной временной осью.
Это было бы довольно легко в R или SAS (по крайней мере, если у вас v. 9 из SAS).
источник
Я обнаружил, что когда у вас заканчиваются опции, касающиеся типа, если график и графические настройки, введение времени через анимацию является лучшим способом отображения, поскольку оно дает вам дополнительное измерение для работы и позволяет отображать больше информации в удобном для понимания виде. , Ваше основное внимание должно быть сосредоточено на опыте конечного пользователя.
источник
Если вас больше всего интересуют изменения для отдельных пользователей, возможно, это хорошая ситуация для коллекции Sparklines (как в этом примере из The Pudding ):
Они довольно подробные, но вы можете показать гораздо больше графиков одновременно, удалив метки осей и единицы измерения.
Они встроены во многие инструменты для работы с данными (в Microsoft Excel есть спарклайны ), но я предполагаю, что вы захотите собрать пакет для их сборки в R.
источник