Próbuję przedstawić liczbę działań użytkowników (w tym przypadku „polubień”) w czasie.
Mam więc „liczbę działań” jako moją oś y, moją oś x to czas (tygodnie), a każda linia reprezentuje jednego użytkownika.
Mój problem polega na tym, że chcę spojrzeć na te dane dla zestawu około 100 użytkowników. Wykres liniowy szybko staje się pomieszanym bałaganem ze 100 liniami. Czy istnieje lepszy rodzaj wykresu, którego można użyć do wyświetlenia tych informacji? Czy powinienem patrzeć na możliwość włączania / wyłączania poszczególnych linii?
Chciałbym zobaczyć wszystkie dane naraz, ale możliwość precyzyjnego rozpoznania liczby działań nie jest szczególnie ważna.
Dlaczego to robię
W przypadku podzbioru moich użytkowników (najlepszych użytkowników) chcę dowiedzieć się, którzy z nich nie polubili nowej wersji aplikacji, która została wdrożona w określonym dniu. Szukam znacznych spadków liczby działań poszczególnych użytkowników.
źródło
facet_wrap
funkcji ggplot2 w celu utworzenia bloku 4 x 5 wykresów (4 rzędy, 5 kolumn - dostosuj w zależności od pożądanego współczynnika proporcji) z ~ 5 użytkownikami na wykresie. To powinno być wystarczająco jasne i można skalować do około 10 użytkowników na wykresie, dając miejsce dla 200 z działką 4x5 lub 360 z działką 6x6.Odpowiedzi:
Chciałbym zasugerować (standardową) wstępną analizę w celu usunięcia głównych skutków (a) zmienności wśród użytkowników, (b) typowej reakcji wszystkich użytkowników na zmianę oraz (c) typowej zmienności z jednego okresu na następny .
Prostym (ale nie najlepszym) sposobem na wykonanie tego jest wykonanie kilku iteracji „mediany dopracowania” na danych, aby zmieść mediany użytkownika i mediany okresu, a następnie wygładzić resztki w miarę upływu czasu. Zidentyfikuj gładkie, które bardzo się zmieniają: są to użytkownicy, których chcesz podkreślić w grafice.
Ponieważ są to dane zliczające, dobrze jest ponownie wyrazić je za pomocą pierwiastka kwadratowego.
Jako przykład tego, co może wyniknąć, oto symulowany 60-tygodniowy zestaw danych 240 użytkowników, którzy zazwyczaj podejmują od 10 do 20 działań tygodniowo. Zmiana u wszystkich użytkowników nastąpiła po 40 tygodniu. Trzech z nich „powiedziano”, by zareagowali negatywnie na zmianę. Lewy wykres pokazuje nieprzetworzone dane: liczby działań według użytkownika (użytkownicy wyróżniają się kolorem) w czasie. Jak stwierdzono w pytaniu, to bałagan. Właściwa fabuła pokazuje wyniki EDA - w tych samych kolorach, co poprzednio - z wyjątkowo reagującymi użytkownikami automatycznie identyfikowanymi i wyróżnianymi. Identyfikacja - choć jest nieco ad hoc - jest kompletna i poprawna (w tym przykładzie).
Oto
R
kod, który wygenerował te dane i przeprowadził analizę. Można to poprawić na kilka sposobów, w tymUżywanie pełnego środkowego połysku do znalezienia resztek, a nie tylko jednej iteracji.
Wygładzanie resztek osobno przed i po punkcie zmiany.
Być może przy użyciu bardziej zaawansowanego algorytmu wykrywania wartości odstających. Obecny oznacza jedynie wszystkich użytkowników, których zakres reszt jest ponad dwukrotnie większy niż mediana. Choć prosty, jest solidny i wydaje się działać dobrze. (Wartość ustawiana przez użytkownika
threshold
, może zostać dostosowana, aby uczynić tę identyfikację mniej lub bardziej rygorystyczną.)Testy sugerują jednak, że to rozwiązanie działa dobrze w szerokim zakresie liczby użytkowników, od 12 do 240 lub więcej.
źródło
threshold
n.users <- 500
n.outliers <- 100
threshold <- 2.5
Ogólnie stwierdzam, że więcej niż dwie lub trzy linie na jednym fragmencie fabuły stają się trudne do odczytania (chociaż ciągle to robię). Jest to więc interesujący przykład tego, co zrobić, gdy masz coś, co koncepcyjnie może być fabułą o 100 aspektach. Jednym z możliwych sposobów jest narysowanie wszystkich 100 aspektów, ale zamiast próbować umieścić je wszystkie na stronie na raz, oglądając je pojedynczo w animacji.
W mojej pracy wykorzystaliśmy tę technikę - pierwotnie stworzyliśmy animację pokazującą 60 różnych wykresów liniowych jako tło dla zdarzenia (uruchomienie nowej serii danych), a następnie stwierdziliśmy, że robiąc to, rzeczywiście wybraliśmy niektóre funkcje danych które nie były widoczne na wykresach fasetowanych z 15 lub 30 fasetami na stronę.
Oto więc alternatywny sposób prezentacji surowych danych, zanim zaczniesz usuwać użytkownika i typowe efekty czasowe zalecane przez @whuber. Jest to przedstawione jako dodatkowa alternatywa dla jego prezentacji surowych danych - w pełni zalecam, aby następnie przejść do analizy zgodnie z tymi, które on sugeruje.
Jednym ze sposobów obejścia tego problemu jest osobne utworzenie 100 (lub 240 w przykładzie @ Whubera) wykresów czasowych i połączenie ich w animację. Poniższy kod wygeneruje 240 oddzielnych obrazów tego rodzaju, a następnie możesz użyć bezpłatnego oprogramowania do tworzenia filmów, aby przekształcić je w film. Niestety, jedynym sposobem, w jaki mogłem to zrobić i zachować akceptowalną jakość, był plik 9 MB, ale jeśli nie musisz przesyłać go przez Internet, może to nie stanowić problemu, a poza tym jestem pewien, że można to zrobić z nieco większą ilością doświadczony animator. Pakiet animacji w R może być tutaj przydatny (pozwala to zrobić wszystko w rozmowie z R), ale dla tej ilustracji jest to proste.
Stworzyłem animację tak, że rysuje każdą linię na grubą czerń, a następnie pozostawia za sobą blady półprzezroczysty zielony cień, aby oko uzyskało stopniowy obraz gromadzących się danych. Są w tym zarówno zagrożenia, jak i szanse - kolejność dodawania wierszy pozostawi inne wrażenie, więc powinieneś rozważyć nadanie mu pewnego znaczenia.
Oto niektóre zdjęcia z filmu, który korzysta z tych samych danych, które wygenerował @whuber:
źródło
windows()
lubquartz()
, a następnie zagnieździćfor()
w nim pętlę. Uwaga: musisz umieścićSys.sleep(1)
na dole pętli, aby rzeczywiście zobaczyć iteracje. Oczywiście ta strategia nie zapisuje pliku filmowego - wystarczy go ponownie uruchomić za każdym razem, gdy chcesz go obejrzeć ponownie.Jedną z najłatwiejszych rzeczy jest fabuła. Możesz natychmiast zobaczyć, w jaki sposób poruszają się twoje mediany próbek i które dni mają największe wartości odstające.
Do analizy indywidualnej sugeruję pobranie małej przypadkowej próbki z danych i przeanalizowanie oddzielnych szeregów czasowych.
źródło
Pewnie. Najpierw posortuj według średniej liczby działań. Następnie utwórz (powiedzmy) 4 wykresy, każdy z 25 liniami, po jednym dla każdego kwartylu. Oznacza to, że możesz zmniejszyć osie y (ale wyczyść etykietę osi y). Za pomocą 25 linii możesz różnicować je według rodzaju i koloru linii, a być może także symbolu kreślenia i uzyskać większą przejrzystość
Następnie ułóż wykresy w pionie za pomocą pojedynczej osi czasu.
Byłoby to dość łatwe w R lub SAS (przynajmniej jeśli masz v. 9 SAS).
źródło
Uważam, że gdy zabraknie Ci opcji dotyczących typu, jeśli wykres i ustawienia wykresu wprowadzenie czasu za pomocą animacji jest najlepszym sposobem wyświetlania, ponieważ daje dodatkowy wymiar do pracy i pozwala wyświetlać więcej informacji w łatwy sposób . Główny nacisk należy położyć na wrażenia użytkownika końcowego.
źródło
Jeśli najbardziej interesuje Cię zmiana dla indywidualnych użytkowników, być może jest to dobra sytuacja dla kolekcji Sparkline (jak ten przykład z The Pudding ):
Są one dość szczegółowe, ale można wyświetlić jednocześnie więcej wykresów, usuwając etykiety osi i jednostki.
Wiele narzędzi danych ma je wbudowane ( program Microsoft Excel ma wykresy przebiegu w czasie ), ale domyślam się, że chcesz pobrać pakiet, aby zbudować je w R.
źródło