Kalendarz z Policją

W jednym z ostatnich odcinków “Ucha prezesa” było coś o tym, że teraz rząd ma mówić o tym, że jest bezpiecznie (zamiast “Przez osiem lat Polki i Polacy…”). Sprawdzimy zatem bezpieczeństwo na polskich drogach. Ale punktem wyjścia będzie specyficzny sposób pokazania danych dziennych.

Widok kalendarza

Dane dzienne (takie, które mają jedną wartość dla każdego dnia – na przykład średnia temperatura, liczba osób robiących zakupy w sklepie) można pokazać na różne sposoby. Można pokazać je jako wykres punktowy (lub liniowy, kiedy punkty są połączone) – wówczas widać na przykład “falkę” (o ile są cykliczne, na przykład w weekendy jest mniej kupujących niż w tygodniu). Można policzyć średnie (lub zastosować inne miary agregujące) dla każdego dnia tygodnia i wykorzystać najprostszy (i często najlepszy) wykres słupkowy. A można pokazać to samo w formie swego rodzaju heat-mapy rozpiętej na kalendarzu.

Wykres taki ma sens jeśli chcemy pokazać, że w danym dniu tygodnia (i być może poszczególnych tygodniach roku) coś odbiega od normy z całego tygodnia (albo innych miesięcy). Czyli przykładowe weekendy są inne niż dni od poniedziałku do piątku.

Jeśli interesują Cię tylko wyniki przeglądu statystyk policyjnych – przejdź do analizy.

Jak zbudować taki kalendarz?

Wystarczy odpowiednio (jak zawsze ;) narysować kratki dla kolejnych dni i je pokolorować w zależności od wartości. Na osi poziomej potrzebujemy tygodni, na osi pionowej – dni tygodnia. Wszystko sprowadza się do określenia tygodnia w roku do którego należy konkretny dzień (na podstawie daty). Zróbmy to zatem w R.

Na początek przygotujemy losowe dane dla sporej liczby dni:

Żeby wyróżnić weekendy zmieńmy dane dla sobót i niedziel (niech będą mniejsze) i dla czwartków (większe):

Funkcja wday() z pakietu lubridate działa po amerykańsku: niedziela jest pierwszym dniem tygodnia, sobota ostatnim. Stąd 1 (niedziela) i 7 (sobota) w powyższym kodzie. Później poradzimy sobie z tym zmieniając dni na normalną, prawdziwie polską, kolejność w tygodniu.

Zacznijmy od najprostszego wykresu – słupkowego. Policzymy średnie dla każdego z dni tygodnia (pierwszy dzień to nadal niedziela):

Widać, że słupki dla weekendu są niższe i dla czwartków większe – mamy to o co nam chodziło w przykładowych danych. Swoją drogą widać jak ładnie uśrednił się rozkład normalny dla poszczególnych dni.

Czas na wykres w formie kalendarza. Kolejne kroki opisane są w komentarzach do kodu:

Widzimy efekt naszych prac:

  • soboty i niedziele są bardziej niebieskie (według przyjętej skali kolorów mają mniejsze wartości)
  • czwartki przechodzą w kierunku czerwieni (mają wartości większe)

Świetnie. Skoro wiemy jak to zrobić weźmy jakieś rzeczywiste dane i przeanalizujmy je w ujęciu czasowym. Fajne są

Statystyki policyjne

W sieci można znaleźć dane o przestępczości dla Chicago i Los Angeles. I są to świetne dane do nauki, zawierają między innymi informacje o:

  • czasie (data i godzina) zajścia zdarzenia
  • miejscu (współrzędne geograficzne, czasem adres)
  • kategorii zajścia typu włamanie, napaść, kradzież

Na tych danych można nie tylko zrobić wykresiki gdzie i kiedy popełniane są jakieś przestępstwa, ale także próbować przewidywać wykroczenia w przyszłości i tym samym im zapobiegać. Bo skoro w nocy z piątku na sobotę w danej dzielnicy było zazwyczaj dużo pobić to warto posłać tam więcej partoli policyjnych. Zdaje się, że nawet były na te tematy konkursy na Kaggle.com.

Niestety polska rzeczywistość jest inna i dostęp do danych (bądź co bądź publicznych) nie jest taki prosty, musimy poradzić sobie inaczej. Mamy co prawda serwisy z danymi publicznymi – na przykład ogólnopolskie Dane publiczne i dane dla Warszawy, ale nie znalazłem informacji o rodzajach wykroczeń i miejscu ich popełnienia dla całego kraju (a nawet na poziomie komend wojewódzkich czy miejskich). Dla Warszawy mamy położenie komisariatów czy jednostek straży pożarnej – tylko co nam do daje? Niewiele. Może coś ciekawego jest w 19115 API?

Znalazłem za to stronę ze statystykami dziennymi (idealnie nadającymi się do widoku kalendarza, prawda? O to chodziło!), głównie dotyczącymi zatrzymań i wypadków. Skorzystamy z tych danych (jak to się mówi: z braku laku dobry kit) – znowu wykorzystując web scrapping. Poniższy kod to może być jeden oddzielny skrypt, który raz uruchomiony pobierze potrzebne nam informacje:

Teraz możemy przygotować kolejny skrypt, który będzie odpowiedzialny za przygotowanie wykresów. Potrzebujemy tych samych pakietów co wcześniej (tidyverse zapewni nam załadowanie dplyr i ggplot2, dodatkowo przyda się lubridate i forcats). Dane zebrane z sieci wczytamy sobie z lokalnego pliku:

Sprawdźmy ile danych udało się pobrać:

Różnica to około 50 dni (z ponad trzech tysięcy – to i tak 8 lat). Można poszukać jakich dni brakuje i je uzupełnić (na przykład wykonując web scrapping dla określonych stron raz jeszcze), można też odpuścić. Ja korzystam z tego drugiego rozwiązania, bo i tak dalej będziemy głównie uśredniać wartości (do średnich dla całego miesiąca).

Zanim coś porysujemy przygotujemy sobie dane do dalszej pracy:

Poza ostatnią linią (filter()) wszystkie operacje przećwiczyliśmy z losowymi danymi dla przygotowanego widoku kalendarza.

Przejdźmy do analizy statystyk policyjnych.

Wypadki drogowe

Zaczniemy od widoku kalendarza:

Widać bardzo delikatnie jaśniejszy niebieski dla letnich miesięcy (czerwiec – wrzesień), szczególnie do 2014 roku. Pojedyncze dni są mocno czerwone (ostatnia niedziela sierpnia 2009, początkowe poniedziałki w październiku tego samego roku) – mam wrażenie, że to jakieś błędy w danych. Można się ich pozbyć na przykład wartości odstające (np. określone jako średnia + trzy odchylenia standardowe; poniżej powinno być 99.7% danych) sprowadzając do wartości maksymalnej (czyli mean() + 3*sd()). Wartości można też zlogarytmować. Zobaczmy zatem:

Dynamika kolorów od razu lepsza! Okolice Bożego Narodzenia (szczególnie w 2014) już wyglądają dość prawdopodobnie – większy ruch na drogach to i więcej wypadków. Podobnie widać Boże Ciało (zwróćcie uwagę na czwartki w maju i czerwcu kolejnych lat) czy Wielkanoc (weekendy w końcówkach marca i w kwietniu).

Zobaczmy (uśredniając wartości miesięcznie) czy jest jakaś sezonowość w ciągu roku. Trochę to widać już na powyższym wykresie, ale warto sprawdzić w innej formie:

Mamy potwierdzenie wcześniejszej obserwacji: w cieplejszych miesiącach jest więcej wypadków. Widać też zmianę z roku na rok – linie nie są nałożone na siebie, rozpiętość dla lipca to różnica prawie 20 (średnio) wypadków dziennie!

Pokażmy to samo jeszcze inaczej, wykorzystując wykres słupkowy, gdzie każdy słupek to rok, a wszystko podzielone na kolejne miesiące:

Dla większości miesięcy widać spadek z kolejnymi latami. Tam gdzie jest mniej wypadków (styczeń – marzec) różnica nie jest tak drastyczna, ale w okresach lipiec – listopad już widać wyraźną poprawę bezpieczeństwa na drogach.

Wypadki wypadkami, ale co z ofiarami wypadków? Ograniczymy się do wykresu słupkowego i linii trendu:

Wysokość słupka to średnia (ze wszystkich dni w roku) dla danego roku dla stosunku liczby zabitych do liczby wypadków, linia niebieska to trend dzień po dniu. Liczby na słupkach oznaczają co który wypadek mamy do czynienia z ofiarą śmiertelną (czyli jest odwrotnością wysokości słupka).

Na niebieskiej linii widać pocieszający trend: średnio w wypadkach ginie coraz mniej osób. Chociaż jedna ofiara na 12 wypadków (w 2017) to i tak sporo…

Sprawdźmy czy możemy mówić, że jest bezpieczniej biorąc pod uwagę liczbę rannych w wypadkach:

Tutaj też widać spadek (o około 4.7% pomiędzy 2009 a 2017). Zestawiając ze sobą wszystkie trzy parametry jakie przeanalizowaliśmy:

  • liczbę wypadków (spada z roku na rok, szczególnie widać to w cieplejszych miesiącach)
  • liczbę ofiar śmiertelnych (coraz rzadziej dochodzi do takich wypadków)
  • liczbę rannych w wypadkach (spadek o wspomniane niecałe 5%)

możemy powiedzieć, że w ciągu ostatnich 8-9 lat bezpieczeństwo na drogach wzrosło.

Pytanie tylko kiedy? Kto nam to zapewnił? Patrząc na ostatni wykres widać, że krzywa wypłaszcza się po 2014 roku. Patrząc na wykresy słupkowe (Liczba wypadków w poszczególnych miesiącach ze słupkami rok po roku) wyraźny skok widać pomiędzy 2010 a 2011 rokiem (popatrzcie na lipiec albo listopad).

Komunikat dla prasy w wersji pierwszej: bezpieczeństwo znacznie poprawiło się pomiędzy 2010 a 2014 rokiem (upraszczając w stylu pasków z Wiadomości TVP: zasługa PO).

W 2016 słupki nieco podskoczyły i teraz znowu spadły. Można to również sprzedać jako sukces… Komunikat dla prasy w wersji drugiej: poprawiło się bezpieczeństwo na drogach w porównaniu do zeszłego roku (w domyśle: od kiedy rządzi PiS).

Oba prawdziwe, wszystko zależy od intencji. Idźmy jednak dalej.

Pijani na drogach

a konkretnie liczba zatrzymanych pijanych kierowców. Wróćmy na chwilę do wykresu kalendarzowego (obcinając wartości odstające, żeby nadać więcej dramatyzmu – tylko na potrzeby tego wykresu):

Czy coś Wam to przypomina? Jest podobnie jak na wykresie z liczbą wypadków: w latach przed 2014 mamy więcej czerwonego i żółtego, szczególnie w ciepłych miesiącach. Ale tutaj już wyraźniej widać weekendy, szczególnie latem (są bardziej czerwone od tygodni).

Zobaczmy czy liczba zatrzymanych nietrzeźwych zmieniła się w czasie:

Pomiędzy 2012 a 2016 spadek o połowę! Ogromny sukces, jeździ dwa razy mniej pijanych kierowców! A może tylko dwa razy mniej jest zatrzymanych, bo patroli jest dwa razy mniej? Tego nie wiemy – nie mamy danych o liczbie kontroli… a szkoda. Spróbujmy coś wywnioskować z tego co mamy. Kiedy liczba pijanych za kółkiem zmalała? Taki wykres już widzieliśmy, dotyczył czegoś innego:

Widać spadek pomiędzy 2013 a 2014 (analogicznie do średniej liczby rannych w wypadkach) – można upatrywać tutaj jakiejś zmiany.

A kiedy pijani jeżdżą (są zatrzymywani) najwięcej?

Jak jest ciepło i w weekend, do tego dochodzą soboty w marcu i poniedziałki w kwietniu (Wielkanoc?) oraz maju (majówka?). Znowu postawię pytanie: czy tak jest rzeczywiście czy wówczas jest więcej patroli i sito ma mniejsze oczka? Zapewne jedno i drugie.

Pijani a liczba wypadków

Zestawmy ze sobą dwie wartości: liczba wypadków i liczba zatrzymanych pijanych kierowców. Miesiąc po miesiącu, rok po roku:

Zaskakujące prawda? Wcześniej zaobserwowaliśmy, że obie wartości spadły. Ale tutaj widzimy różnicę w tym spadku! Jak duża to różnica? Policzmy wskaźnik będący stosunkiem liczby wypadków do liczby zatrzymanych nietrzeźwych:

Wskaźnik ten spada. Pamiętamy, że liczba wypadków oraz liczba zatrzymanych pijanych spadały – tutaj mamy dowód na to, że spadek nie był jednakowy. Jeździmy nieco bezpieczniej (wolny spadek liczby wypadków) i jednocześnie coraz bardziej unikamy jazdy na podwójnym gazie (szybszy spadek zatrzymanych pijanych)? Albo znowu patroli mniej – bez jednej liczby nie jesteśmy w stanie powiedzieć czy jeździ coraz mniej pijanych czy też zatrzymywanych jest coraz mniej pijanych. Delikatna, a znacząca różnica.

Zostawmy drogi i z innej strony sprawdźmy czy jest w Polsce coraz bardziej bezpiecznie.

Zatrzymani na gorącym uczynku

W statystykach policyjnych mamy też takie dane. Z tego co myślę powinny mówić o skuteczności działań Policji. Zobaczmy je w takim układzie:

Znowu widzimy spadek po 2014 roku. I co to oznacza? Coraz mniejsza przestępczość czy coraz mniejsza skuteczność (bo mniej łapią)? Pozostawię Was z tym pytaniem. Może znajdziecie inne dane, które w połączeniu z przedstawionymi wyżej dadzą pełniejszy obraz?

Dodaj komentarz