Narzędzia i analiza danych
Podstawy dziennikarstwa danych
Ćwiczenie I: analiza i wizualizacja danych o przestępczości
Forma: indywidualnie. Czas: ~40 minut na zajęciach.
Pytanie redakcyjne
„Gdzie w Polsce jest najwięcej przestępstw — i czy to, co widzimy w nagłówkach, zmienia się, kiedy policzymy to per capita?“
W polskich mediach regularnie pojawiają się nagłówki typu „Warszawa najbardziej niebezpiecznym miastem Polski” — na podstawie liczb bezwzględnych. Wasze zadanie: sprawdzić w danych, czy to prawda, i zdecydować, jaką historię naprawdę warto opowiedzieć.
Cel
Do końca tej części każdy z was ma:
- Podstawową analizę opisową danych przestępczości we wszystkich 380 powiatach Polski, wykonaną w jamovi.
- Link do opublikowanego wykresu w Datawrapper, który komunikuje wniosek z tej analizy — nie tylko pokazuje dane.
Dane
- Plik:
przestepstwa-powiaty-2025.csv— fikcyjne dane dydaktyczne, wszystkie 380 powiatów Polski (314 ziemskich + 66 miast na prawach powiatu). - Kolumny:
- teryt — 4-cyfrowy kod TERYT (klucz do mapy w Datawrapper)
- powiat, województwo, typ_powiatu (miejski / ziemski), ludność
- przestępstwa_ogółem — suma wszystkich zdarzeń w 2025 r.
- przestępstwa_na_100k — wskaźnik na 100 tys. mieszkańców
- kryminalne, drogowe, gospodarcze, przeciwko_rodzinie, inne — rozbicie na kategorie
Dlaczego kolumna teryt? 10 par powiatów ma te same nazwy w różnych województwach (brzeski, grodziski, świdnicki…). Łączenie po nazwie daje błędy; kod TERYT jest unikalny. To realna lekcja z warsztatu dziennikarstwa danych.
Dane są dydaktyczne, nie rzeczywiste. W opublikowanym wykresie w polu Source napiszcie: „Dane dydaktyczne — kurs Podstawy dziennikarstwa danych, UniwersytetSWPS”.
Tempo pracy
- 5 min — pokaz workflow przez prowadzącego
- 15 min — Część 1: analiza w jamovi
- 20 min — Część 2: wizualizacja w Datawrapper
Część 1: analiza w jamovi
Otwórzcie jamovi i wczytajcie CSV (File → Open). Zanim zaczniecie analizę, w nagłówkach kolumn ustawcie typy pomiaru:
- województwo, typ_powiatu → Nominal
- teryt, powiat → ID
- wszystkie zmienne liczbowe (ludność, przestępstwa_…) → Continuous
Bez tego Split by w kolejnych krokach nie zadziała.
Krok 1: ogólny opis rozkładu
Analyses → Exploration → Descriptives. Wrzućcie do Variables: przestępstwa_ogółem oraz przestępstwa_na_100k. W panelu Statistics zaznaczcie: Mean, Median, Minimum, Maximum, Std. deviation, Skewness.
Zapiszcie sobie odpowiedzi:
- Jaka jest mediana liczby przestępstw ogółem? Jaka średnia? Co mówi o rozkładzie ta różnica?
- Która zmienna ma silniej prawoskośny rozkład (Skewness): liczby bezwzględne czy wskaźnik per capita? Dlaczego to ma znaczenie przy wyborze skali na wykresie?
Krok 2: podział na typ powiatu
Ponownie Descriptives, tym razem do Split by wrzućcie typ_powiatu.
Zapiszcie sobie:
- Która grupa (miejskie / ziemskie) ma wyższą medianę wskaźnika na 100k?
- Która grupa ma większą rozpiętość (max − min)?
- Wartości odstające: w której grupie się skupiają?
Krok 3: rankingi
Posortujcie dane ręcznie w jamovi (ikona strzałki w nagłówku kolumny) albo skopiujcie do Excela:
- Top 10 powiatów po przestępstwa_ogółem
- Top 10 powiatów po przestępstwa_na_100k
Zapiszcie sobie:
- Ile powiatów znajduje się w obu listach top 10?
- W top 10 per capita: ile to powiaty miejskie, a ile ziemskie?
- Gdybyście mieli napisać jedno zdanie nagłówka oparte na tej analizie — jakie?
To zdanie będzie waszym tytułem wykresu w Datawrapper.
Część 2: wizualizacja w Datawrapper
Zalogujcie się na datawrapper.de. Macie do wyboru trzy formaty wizualizacji — wybierzcie jeden, który najlepiej pasuje do wniosku z Części 1:
- Wykres słupkowy poziomy, top 15 — dobry, jeśli chcecie pokazać ranking. Wybór zmiennej sortującej (ogółem vs na_100k) to wasza decyzja redakcyjna, nie techniczna.
- Mapa choropleth powiatów Polski — dobra, jeśli chcecie pokazać rozkład geograficzny. Datawrapper ma gotową mapę wszystkich 380 powiatów; łączcie po kolumnie teryt, nie po powiat (10 par powiatów ma identyczne nazwy, łączenie po nazwie zepsuje mapę).
- Scatter plot ludność vs przestępstwa_ogółem, z kolorem wg typ_powiatu — dobry, jeśli chcecie pokazać, że to skala populacji, a nie niebezpieczeństwo, tłumaczy nagłówki tabloidów.
Cztery kroki Datawrapper
- Upload data — wklejcie CSV (Ctrl+V) lub wgrajcie plik.
- Check & describe — sprawdźcie, że Datawrapper poprawnie rozpoznał typy kolumn (liczby jako number, nazwy jako text).
- Visualize — wybierzcie typ wykresu, dopasujcie sortowanie/kolor/skalę, napiszcie tytuł komunikujący wniosek (nie opisujący dane).
- Publish & embed — opublikujcie i zapiszcie link.
Szczegółowe instrukcje (w tym jak obsłużyć mapę powiatów, jak sortować, jak wyróżnić słupek) znajdziecie w handoucie Datawrapper.
Self-check przed publikacją — pięć pułapek
Zanim klikniecie Publish, sprawdźcie własny wykres według pięciopunktowej checklisty z wykładu. Każdy hak powinien być ✅ zielony:
| # | Pułapka | Test |
|---|---|---|
| 1 | Korelacja vs przyczynowość | Czy tytuł nie sugeruje, że coś powoduje coś innego bez podstaw? |
| 2 | Cherry-picking | Czy pokazujecie pełny zakres (wszystkie powiaty / top 15 jawnie), nie tylko wybór pod tezę? |
| 3 | Oszukujący wykres | Oś od zera (chyba że jest powód i jest podpisany)? Paleta daltonizm-friendly? |
| 4 | Agregacja | Czy wybór między ogółem a na 100k jest widoczny w tytule? Czytelnik musi wiedzieć, co ogląda. |
| 5 | Oficjalne ≠ prawdziwe | Czy jest nota metodologiczna? (Tu: „dane dydaktyczne”.) |
Jeśli dwa lub więcej punktów nie przechodzi testu — wróćcie do Datawrapper i poprawcie. Nie publikujecie wykresu, który sami byście skrytykowali.
Oddajecie na Classroom
- Link do opublikowanego wykresu w Datawrapper
Ćwiczenie II: plan narzędzi + mapa ryzyk
Forma: w grupie. Rytm: część narzędziowa na zajęciach (~25 min, po ćwiczeniu Datawrapper), mapa ryzyk w domu.
Cel
Dopełnijcie plan projektu z seminarium 2 o konkretny plan operacyjny: jakimi narzędziami zrealizujecie każdy z czterech etapów, kto je obsługuje, czego musi się nauczyć — a następnie, które ryzyka zagrażają realizacji i co z każdym zrobicie.
Efektem jest jeden dokument towarzyszący, który będzie wam towarzyszył przez resztę semestru.
Część A: dobór narzędzi (na zajęciach, ~25 min)
Przypomnijcie sobie swój projekt
Odpowiedzcie krótko (z planu z seminarium 2):
- Temat i pytanie badawcze (1 zdanie)
- Główne źródło danych i jego format
- Szacowana wielkość zbioru: mały (dziesiątki wierszy) / średni (setki–tysiące) / duży (dziesiątki tysięcy wierszy lub więcej)
- Kompetencje techniczne w grupie: tylko GUI / podstawy Python/R (≥ 1 osoba) / dobry Python/R (≥ 1 osoba)
Etap 1: pozyskiwanie danych
Z planu z seminarium 2 (sekcja „Plan pozyskania danych”) już wiecie skąd pobieracie dane. Teraz zdecydujcie czym i kto.
Dla każdej metody, która jest potrzebna:
- Bezpośrednie pobieranie ze strony — URL, format pliku, kto pobiera
- API — nazwa, czy klucz, narzędzie (Google Sheets / Python requests / R), osoba
- Wniosek o informację publiczną — status (złożony / planowany na), osoba odpowiedzialna
- Web scraping — strona, narzędzie (Python BeautifulSoup / Scrapy / inne), osoba
- PDF z tabelami — Tabula / Camelot / inne, osoba
Zapiszcie wybrane narzędzie i jedno zdanie uzasadnienia — dlaczego właśnie to, nie coś innego.
Etap 2: czyszczenie
Jakich problemów spodziewacie się w danych? (zaznaczcie realistyczne, nie „na wszelki wypadek”):
- Braki wartości (NA, puste komórki, zera jako NA)
- Niespójne nazwy (Warszawa vs m. st. Warszawa)
- Różne formaty dat
- Dane w wielu plikach do połączenia
- Zbędne kolumny i wiersze nagłówkowe
- Dane w PDF lub niestrukturyzowane
- Inne (konkretnie)
Wybrane narzędzie do czyszczenia + uzasadnienie + osoba odpowiedzialna. (Dla >95% projektów semestralnych: OpenRefine lub Google Sheets.)
Gdzie zapisujecie surowe dane (oryginał)? — plik, folder, repozytorium. Zasada: nigdy nie nadpisujemy surowych danych; transformacje na kopiach.
Etap 3: analiza
Wypiszcie 3–5 konkretnych pytań analitycznych — nie tematycznych, lecz takich, na które odpowiada konkretna operacja na danych.
Dobre pytania analityczne:
- „Które województwo ma najwyższy wskaźnik X w 2024?”
- „Jak zmieniał się wskaźnik X między 2015 a 2024?”
- „Czy istnieje korelacja między A i B, kontrolując C?”
Wybrane narzędzie do analizy (najczęściej: Google Sheets z pivot tables / Jamovi / Python pandas / R tidyverse) + osoba.
Wasza „newsowa liczba”: jedna liczba, która — jeśli ją znajdziecie — stanie się sercem artykułu. Bez tej liczby materiał nie istnieje.
Etap 4: wizualizacja
Wypiszcie 2–3 konkretne wizualizacje, z uzasadnieniem wyboru typu.
Dla każdej:
- Typ: liniowy / słupkowy / mapa choropleth / scatter plot / inne
- Co pokazuje: (1 zdanie)
- Dlaczego ten typ: (1 zdanie)
Wybrane narzędzie wizualizacyjne:
Po dzisiejszej praktyce w Datawrapper macie realne pojęcie o tym, co on potrafi. Czy wystarczy waszemu projektowi, czy trzeba czegoś zaawansowanego (QGIS dla skomplikowanych map, ggplot2 dla nietypowych wizualizacji)?
Podsumowanie: plan narzędzi
Zapiszcie tabelę, która podsumowuje cały plan:
| Etap | Narzędzie | Kto odpowiada? |
|---|---|---|
| Pozyskiwanie | ||
| Czyszczenie | ||
| Analiza | ||
| Wizualizacja |
Prezentacja grupy (60 sek na zajęciach)
Każda grupa w 60 sekundach:
- Wasz zestaw narzędzi dla czterech etapów
- Największa luka kompetencyjna i plan jej uzupełnienia
Pozostałe grupy: czy widzicie lepszą opcję?
Część B: mapa ryzyk projektu (praca domowa, do 08.05)
Zidentyfikujcie 3–5 konkretnych ryzyk dla waszego projektu — nie ogólnych („dane mogą być złe”), lecz specyficznych dla waszego tematu, waszych źródeł i waszych planowanych narzędzi.
Skala oceny
- Prawdopodobieństwo: N (niskie) / Ś (średnie) / W (wysokie)
- Wpływ na projekt: N (nieznaczny) / Ś (poważny) / W (blokujący)
Kategorie ryzyk
- Dane — jakość i dostępność (braki, nieaktualność, niewłaściwy poziom agregacji)
- Interpretacja — korelacja jako przyczynowość, cherry-picking, błędna agregacja (liczby bezwzględne vs wskaźniki)
- Wizualizacja — dezorientacja (oś, kolor, typ wykresu)
- Prawne / etyczne — RODO, prywatność, zgody
- Techniczne — utrata danych, błędy w kodzie, brak backup’u
- Projekt — rozpad grupy, brak jednej osoby, harmonogram
Dla każdego ryzyka zapiszcie
- Opis (co konkretnie może pójść nie tak? — nie „dane mogą być złej jakości”, tak „kodowanie polskich znaków w CSV z NFZ może powodować błędy dla 30% wierszy”)
- Kategoria
- Prawdopodobieństwo (N / Ś / W)
- Wpływ (N / Ś / W)
- Plan zapobiegania lub łagodzenia (konkretny: co i kto)
Największe zagrożenie
Na podstawie mapy ryzyk wskażcie ryzyko o najwyższym iloczynie prawdopodobieństwa i wpływu:
- Które ryzyko?
- Dlaczego najważniejsze? (2–3 zdania)
- Czy jest sytuacja, w której zmusi was do zmiany tematu lub pytania? Jeśli tak — pod jakim warunkiem (to uzupełnia kill criteria z seminarium 2).
Deliverables do 08.05
Każda grupa wysyła na Classroom jeden dokument zawierający:
- Wypełnioną Część A — tabela narzędzi + luki kompetencyjne
- Wypełnioną Część B — mapa ryzyk + największe zagrożenie
Dodatkowo każdy z was wysyła indywidualnie:
- Link do opublikowanego wykresu w Datawrapper (z Ćwiczenia I)