Widziałem ten post w Moz, który przedstawiał segmentowy lejek marketingowy:
Tego rodzaju rzeczy miałyby w mojej pracy dużą wartość. Nie mam pojęcia, jak wizualizować nieprzetworzone dane, aby pokazać taki segmentowy lejek. Chodzi o to, że potencjalni klienci pochodzą z różnych źródeł (których używamy do segmentacji danych) i przechodzą przez kilka etapów, zanim przekształcą się w umowę. Z każdego etapu do drugiego niektóre odpadają. Szerokość każdego wycinka zależy od bezwzględnej liczby odprowadzeń w każdym z nich. [ EDYCJA : Zwróć uwagę, że obraz użyty tutaj jako odniesienie wprowadza w błąd, jeśli chodzi o liczby określone po prawej stronie każdego plasterka. Wydaje się, że nie ma związku między szerokością wycinka a liczbą. Zdjęcie należy traktować wyłącznie jako odniesienie do projektu segmentowanego lejka].
W każdym razie jakiś pomysł, jak to zwizualizować? Jeśli to możliwe, chciałbym mieć taką możliwość w Pythonie.
Oto dokument Google z danymi pozornymi, jeśli ktoś potrzebuje trochę ...
Czekamy na twoje spostrzeżenia. Dzięki!
źródło
Odpowiedzi:
Ten wykres wyświetla dwukierunkową tabelę zdarzeń awaryjnych, której dane są w przybliżeniu następujące:
Istnieją niezliczone sposoby na zbudowanie tej fabuły. Na przykład, możesz obliczyć pozycje każdej prostokątnej łaty koloru i osobno wstawić każdą łatkę. Ogólnie jednak pomaga znaleźć zwięzły opis tego, jak wykres reprezentuje dane.
Jako punkt wyjścia możemy postrzegać ten wariant jako odmianę skumulowanego wykresu słupkowego.
Ten wykres nie wymaga opisu: dzięki znajomości wiemy, że każdy rząd prostokątów odpowiada każdemu rzędowi tabeli awaryjnej; że długości prostokątów są wprost proporcjonalne do ich liczby; aby się nie nakładały; i że kolory odpowiadają kolumnom tabeli.
Jeśli przekonwertujemy tę tabelę na „ramkę danych” lub „tabelę danych” posiadającą jeden wiersz na liczbę z polami wskazującymi nazwę wiersza, nazwę kolumny i liczbę, wówczas wykreślenie zwykle oznacza wywołanie odpowiedniej funkcji i określenie, gdzie znaleźć nazwy wierszy, nazwy kolumn i liczby. Przy użyciu implementacji gramatyki grafiki ( pakietu dla ) wyglądałoby to mniej więcej takX
ggplot2
R
Szczegóły grafiki, takie jak szerokość rzędu pasków i jakich kolorów użyć, zwykle muszą być wyraźnie określone. To, jak to się dzieje, zależy od środowiska kreślenia (i dlatego jest stosunkowo mało interesujące: wystarczy go poszukać).
Ta konkretna implementacja gramatyki grafiki zapewnia niewielką elastyczność w ustawianiu pasków. Jednym ze sposobów na uzyskanie pożądanego wyglądu, przy minimalnym wysiłku, jest wstawienie niewidocznej kategorii u podstawy każdego paska, tak aby paski były wyśrodkowane. Trochę myślenia sugeruje, że fałszywa liczba potrzebna do wyśrodkowania każdego słupka musi być średnią z całkowitej długości paska i długości najdłuższego paska. W tym przykładzie byłaby to początkowa kolumna z wartościami
Oto wynikowy skumulowany wykres słupkowy pokazujący fałszywe dane w kolorze jasnoszarym:
Pożądaną liczbę tworzy się, czyniąc grafikę fałszywej kolumny niewidoczną:
Opis fabuły w gramatyce grafiki nie musi się zmieniać: po prostu dostarczyliśmy inną tabelę zdarzeń, która ma być renderowana zgodnie z tym samym opisem (i przesłoniliśmy domyślne przypisanie kolorów dla fałszywej kolumny).
Komentarze
Te grafiki są uczciwe: poziomy zasięg każdej kolorowej łaty jest wprost proporcjonalny do podstawowych danych, bez zniekształceń. Porównanie ich z oryginałem (w pytaniu) pokazuje, jak ekstremalne jest jego zniekształcenie ( czynnik Lie Tufte'a ).
Jeśli chcesz wyświetlić szczegóły na dole „ścieżki”, rozważ przedstawienie liczb według powierzchni, a nie długości. Możesz ustawić długości prętów proporcjonalnie do pierwiastków kwadratowych całkowitych długości i ich szerokości (w kierunku pionowym) również proporcjonalne do pierwiastków kwadratowych. Teraz dolna część „lejka” będzie miała około jednej dwudziestej najdłuższej długości, a nie jednej cztersetnej, co pozwoli na pokazanie szczegółów. Niestety
ggplot2
implementacja nie pozwala zmapować zmiennej na szerokość pręta, dlatego potrzebne jest bardziej zaangażowane obejście (takie, które rzeczywiście opisuje każdy prostokąt osobno). Być może istnieje implementacja w języku Python, która jest bardziej elastyczna.Bibliografia
Edward Tufte, Wizualne wyświetlanie informacji ilościowych . Cheshire Press 1984.
Leland Wilkinson, The Grammar of Graphics. Springer 2005.
źródło
Możesz spróbować użyć lejka segmentowanego w Pythonie, aby go zbudować. Oto samouczek: https://moderndata.plot.ly/segmented-funnel-charts-in-python-using-plotly/
Mam nadzieję że to pomoże.
źródło