Ładne mapy ciepła

image3

Czy wiecie, na których skoczniach Kamil Stoch zdobył najwięcej punktów w poprzednim sezonie?

Jakiś czas temu natknąłem się na pakiet pheatmaps dla programu R, który generuje ładniejsze mapy ciepła niż standardowy heatmap z R. Stąd też jego nazwa p(retty)heatmaps.

Zobaczmy te mapy na przykładzie. Zazwyczaj pakiet pheatmaps jest wykorzystywany w genomice, ale my poniżej użyjemy go do prezentacji wyników w skokach narciarskich w sezonie 2013/2014 (Zbiór danych użyty w konkursie na wizualizacje danych podczas konferencji PAZUR, zobacz zgłoszenia tutaj).
Dla każdego ze skoczków, który zdobył przynajmniej 400 punktów w klasyfikacji generalnej policzymy ile zdobył punktów na każdej ze skoczni.

Następnie tę macierz (skoczek vs. skocznia) przedstawiamy za pomocą mapy ciepła.

Mapa ciepła to wizualizacja macierzy liczb, w której wartość liczbowa danej komórki macierzy przedstawiona jest kolorem, a podobieństwo wierszy i kolumn przedstawione jest za pomocą dendrogramów.

Dane o skokach wczytamy z pakietu SmarterPoland. Są to dane użyte w konkursie na najlepszą wizualizację podczas konferencji PAZUR 2014.
Na początek trochę dplyr’owej magii aby policzyć liczbę punktów zdobytych do klasyfikacji generalnych uzyskanych na poszczególnych skoczniach przez poszczególnych skoczków.

Czytaj dalej Ładne mapy ciepła

Projekt akcelerometr a Matematyka dla Ciekawych Świata

W marcu, w ramach Matematyki dla Ciekawych Świata będę prowadził kilka spotkań o analizie danych kierowanych do licealistów i gimnazjalistów.

Co im pokazać by ich porwać? Aby pokazać, że analiza danych jest fajna i nie polega wyłącznie na liczeniu ile jest chłopców a ile dziewczyn w klasie / szkole / bloku?

Ostatnio rozmawiałem o tym z Bartkiem Męglickim, który na ostatnim SERze pokazywał robota zrobionego z LEGO komunikującego się przez wifi z R. Od słowa do słowa zeszło na czujniki i kontrolery, takie jak np. przyspieszeniomierz, czyli akcelerometr, które generują sygnały, których analiza jest niebanalna. Z robota zeszło na telefon i tak…

Użytkownicy smartfonów mogą pobrać sobie bezpłatną apkę SensorLog, rejestrującą wartości z wielu czujników dostępnych w telefonie (kompas, akcelerometr, żyroskop, lokalizacja, itp). Takie logi można rejestrować i wysyłać mailem.

Później można je oglądać i próbować robić jakieś analizy.

Na tej stronie umieściłem trzy próbki nagrane podczas swobodnego marszu, wchodzenia po schodach i podskakiwania. Zobaczmy jak wygląda suma kwadratów każdej ze współrzędnych akcelerometru (pomiary dotyczą wymiaru X, Y i Z, klikając możemy powiększyć obrazek).

marszschodyskoki

Czytaj dalej Projekt akcelerometr a Matematyka dla Ciekawych Świata

PISA – analiza z wykorzystaniem pakietu survey

Podczas warsztatów towarzyszących konferencji PAZUR Maciej Beręsewicz (Katedra Statystyki, Uniwersytet Ekonomiczny w Poznaniu) przedstawiał pakiet survey, świetne narzędzie do analizy danych sondażowych. Zgodził się dla nas przygotować krótki opis tego pakietu na przykładzie danych PISA 2009.

Tak więc dziś gościnny wpis, będzie R, będzie statystyka, będzie ciekawie.

[Pomysł na wstawki z użyciem gista zaczerpnąłem z innego polskiego bloga o R, pozdrawiamy].

PISA – analiza z wykorzystaniem pakietu survey

Maciej Beręsewicz

Wstęp

Poniższy wpis ma na celu przybliżenie wykorzystania pakietu survey do analizy danych pochodzących z badania PISA. W szczególności następujące cele mają zostać osiągnięte:

  • przybliżenie pakietu survey,
  • przybliżenie podejścia wykorzystanego w badaniu PISA do estymacji wariancji,
  • wykorzystanie pakietu survey w badaniu PISA.

Czytaj dalej PISA – analiza z wykorzystaniem pakietu survey

Wizualizacja danych PISA – eksperyment na MINI PW i MIM UW

pisa-torre_76253

Trochę wzorując się na Randym Pauschu, trochę z ciekawości, zrobiłem w tym semestrze taki oto eksperyment:

Na dwóch bardzo dobrych wydziałach, czyli MIM na Uniwersytecie Warszawskim i MINI na Politechnice Warszawskiej, dla chętnych studentów poprowadziłem kurs Techniki Wizualizacji Danych. Podczas kursu większość czasu spędziliśmy z pakietem ggplot2, ale było też trochę czasu na shiny, rCharts, ggvis i knitra. Pracowaliśmy na danych o skokach narciarskich, cenach aut, wynikach wyborów, statystykach imion i innych ciekawych danych. Przede wszystkim jednak, pracowaliśmy nad tym by tworzyć wykresy, które coś mówią, a nie są tylko wesołą plątaniną kresek.

Projekt zaliczeniowy dotyczy wizualizacji danych PISA. Został on podzielony na trzy części: przygotowanie szkicu, przygotowanie pierwszej wersji i etap ostateczny – przygotowanie wizualizacji w postaci plakatu A3.

W czwartek na wydziale MINI (Koszykowa 75) w sali 329 od godziny 10:00 do 12:00 odbędzie się wielki finał – prezentacja plakatów grup z obu wydziałów.

Gdyby ktoś był ciekawy, co też udało się tym grupom wyłuskać z danych PISA 2012 oraz jak studentom z tych uczelni pójdzie prezentacja swoich prac, serdecznie zapraszamy.

Czy prosta regresja liniowa może pobić na głowę SVM i Random Forest?

Znajomy brał udział w projekcie, w którym na podstawie historii należało wykonać predykcję w przód cechy Y. Problem polegał na tym, że cecha Y wykazywała tendencje do wzrostu. Na potrzeby tego wpisu Y to może być mleczność krów lub zapotrzebowanie na energię czy cokolwiek innego co z czasem średnio rośnie.

Rozmawialiśmy trochę o tym co może się sprawdzić w tego typu analizach. Jako benchmark wykorzystaliśmy współczesne techniki pozwalające na podgrzanie procesora typu lasy losowe czy SVM. Okazuje się jednak (po fakcie, jest to nawet zgodne z intuicją ;-), że jeżeli występuje w miarę stabilny trend to zakres wartości obserwowanych w przyszłości może być inny niż zakres wartości obserwowanych w przeszłości. W tym przypadku techniki takie jak zwykła regresja liniowa mogą dać lepsze wyniki niż wspomniane SVM i RF.

Rozważmy taki przykład. Mamy do dyspozycji N predyktorów, chcemy przewidzieć rozwój cechy Y. W rzeczywistości ta cecha zależy tylko od pierwszego z N predyktorów. W szranki postawimy SVM, RandomForest, regresję liniową i regresję z regularyzacją typu lasso.

Przykład będzie czysto symulacyjny.

Zacznijmy od wylosowania danych, po 100 obserwacji i N=25 predyktorów. Zbiór testowy będzie poza domeną zbioru uczącego, wszystkie zmienne przesuwamy o +1.

library(dplyr)
library(lasso2)
library(e1071)
library(randomForest)
library(ggplot2)
 
# will be useful in simulations
getData <- function(n = 100, N = 25 ){
  x <- runif(N*n) %>%
    matrix(n, N)
  # artificial out-of-domain [0-1]
  x_test <- x + 1
 
  list(x = x, 
       y = x[,1] * 5 + rnorm(n), 
       x_test = x_test, 
       y_test = x_test[,1] * 5 + rnorm(n))  
}
 
# let's draw a dataset
gdata <- getData()
head(gdata$y)
# [1] -0.5331184  3.1140116  4.9557897  3.2433499  2.8986888  5.2478431
dim(gdata$x)
# [1] 100  25

Czytaj dalej Czy prosta regresja liniowa może pobić na głowę SVM i Random Forest?

Czy wykształcenie przedłuża życie?

Screen Shot 2015-01-11 at 02.20.26
[Wykres z raportu Health at a Glance. Dla wybranych krajów i dla obu płci przedstawiono różnicę w oczekiwanej długości trwania życia pomiędzy osobami o wyższym wykształceniu i podstawowym wykształceniu]

Trafiłem ostatnio na artykuł Lekcje zdrowia, który odnosił się prawdopodobnie do raportu OECD z którego pochodzi powyższy wykres. Temat wydał mi się ciekawy, jednak pierwsze dwa zdania były jak cios obuchem. Obok siebie (nad i pod tytułem) zestawiono dwa zdania:

A: Wykształcenie przedłuża życie.

i

B: Wykształceni żyją dłużej.

Czy te dwa zdania oznaczają to samo?

Nie. Pierwsze sugeruje zależność przyczynowo-skutkową, oznaczającą, że efektem wykształcenia jest dłuższe życie. Drugie obrazuje korelacje pomiędzy długością życia a wykształceniem. Czy to jedno i to samo? Nie! Łatwo to zauważyć gdy skonstruuje się zdanie sugerujące zależność przyczynowo skutkową w drugą stronę.

C: Dłuższe życie daje lepszą edukację.

Więc jak jest? Czy istnieje silna zależność przyczynowo skutkowa czy nie?

Czytaj dalej Czy wykształcenie przedłuża życie?

Gamifikacja/grywalizacja a nauka prostej algorytmiki lub pythona

W internecie można znaleźć coraz więcej rozwiązań, które w ramach zabawy uczą dzieciaki programowania czy przynajmniej myślenia w sposób algorytmiczny.

Screen Shot 2015-01-07 at 21.11.53

Najbardziej znany jest chyba projekt MIT: Scratch http://scratch.mit.edu/. Osobiście jakoś mi nie przypadł do gustu, ale jest dosyć popularny ponieważ ma wiele możliwości, które pozwalają uczniowi pierwszych klas podstawówki zbudować grę ze sterowaniem głosem lub gestami (,,prawie jak kinect” a wystarczy kamerka w laptopie).

Można posłuchać ciekawego wystąpienia twórcy Scratcha na TED http://www.ted.com/talks/mitch_resnick_let_s_teach_kids_to_code. Są miejsca gdzie zabawa ze scartchem jest wpisana w program nauki wczesnoszkolnej. Z pewnością warto spróbować (tj jeżeli ma się dziecko w odpowiednim wieku).

Czytaj dalej Gamifikacja/grywalizacja a nauka prostej algorytmiki lub pythona

Rozbieramy choinkę – część pierwsza: ggplot2

Przed świętami w tym wpisie pokazaliśmy interaktywną choinkę napędzaną statystykami popularności imion nadawanych dzieciom w Warszawie. Ale święta się już skończyły, czas choinkę rozebrać. W ramach akcji 'rozbieranie choinki’ pokażemy jak można ją zrobić krok po kroku.

Dziś część pierwsza – choinka w ggplot2.

Choinka przedstawia statystyki dla chłopców i dziewcząt. Zacznijmy od prawej części 'dla chłopców’. Punktem wyjścia będzie ramka danych z imieniem, płcią, liczbą wystąpień oraz pozycją na choince, na które dane imię powinno zawisnąć.

# data from
# https://github.com/pbiecek/SmarterPoland_blog/tree/master/2014/choinka
# head(chlopcy)
      imie plec liczba       row        col
1 Amadeusz    M      1 0.9444444 0.05555556
2   Anatol    M      1 0.8888889 0.11111111
3   Arnold    M      1 0.8888889 0.05555556
4   August    M      1 0.8333333 0.16666667
5 Augustyn    M      1 0.8333333 0.11111111
6   Bazyli    M      1 0.8333333 0.05555556

Użyjmy geometrii geom_point() aby pokazać współrzędne do zawieszenia imion.

ggplot(chlopcy, aes(x=col, y=row)) + 
  geom_point()

v1

Czytaj dalej Rozbieramy choinkę – część pierwsza: ggplot2