Narzędzia i analiza danych

Podstawy dziennikarstwa danych

Autor
Afiliacja

Ben Stanley

Wydział Nauk Społecznych, Uniwersytet SWPS

Opublikowano

25 kwietnia 2026

Ć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:

  1. Podstawową analizę opisową danych przestępczości we wszystkich 380 powiatach Polski, wykonaną w jamovi.
  2. 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 minCzęść 1: analiza w jamovi
  • 20 minCzęść 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_powiatuNominal
  • teryt, powiatID
  • 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ść (maxmin)?
  • 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

  1. Upload data — wklejcie CSV (Ctrl+V) lub wgrajcie plik.
  2. Check & describe — sprawdźcie, że Datawrapper poprawnie rozpoznał typy kolumn (liczby jako number, nazwy jako text).
  3. Visualize — wybierzcie typ wykresu, dopasujcie sortowanie/kolor/skalę, napiszcie tytuł komunikujący wniosek (nie opisujący dane).
  4. 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:

  1. Wasz zestaw narzędzi dla czterech etapów
  2. 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:

  1. Wypełnioną Część A — tabela narzędzi + luki kompetencyjne
  2. Wypełnioną Część B — mapa ryzyk + największe zagrożenie

Dodatkowo każdy z was wysyła indywidualnie:

  1. Link do opublikowanego wykresu w Datawrapper (z Ćwiczenia I)