Ł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.

library(pheatmap)
library(tidyr)
library(dplyr)          # operator %>%
library(PogromcyDanych) # zbiór danych, zainstaluj: 
# library(devtools); install_github("pbiecek/PogromcyDanych")
library(RColorBrewer)
library(SmarterPoland)
 
country_jumper_points <- skiJumps2013 %>% 
                mutate(jumper = paste(jumperSurname, jumperName)) %>%
                group_by(jumper, compName) %>%
                summarise(max.points = sum(classPoints, na.rm=TRUE)) %>%
                group_by(jumper) %>%
                filter(sum(max.points, na.rm=TRUE) > 400) %>%
                spread(compName, max.points) %>%
                as.data.frame()
rownames(country_jumper_points) <- country_jumper_points[,1]
country_jumper_points <- country_jumper_points[,-1]
# how this table looks like
country_jumper_points[1:5,1:5]
#                 Bischofshofen Engelberg Falun Garmisch-Partenkirchen Innsbruck
# AMMANN SIMON               50        38    32                     60        80
# BARDAL ANDERS              40       105    40                     20        18
# DAMJAN JERNEJ               0        NA    24                      9        NA
# DIETHART THOMAS           100        90    14                    100        45
# FREUND SEVERIN             26        11   100                      0        16

A później prezentacja brzydkich standardowych map ciepła (ang. heatmaps) i znacznie ładniejszych map ciepła z pakietu pheatmap.

heatmap(as.matrix(country_jumper_points))

image1

Domyślnie przedstawiana legenda, czytelniejsza kratownica, lepiej dobrane domyślnie kolory i lepiej dobrane marginesy. To wszystko jest na plus dla pakietu pheatmaps.

pheatmap(country_jumper_points,
         main="Where they've got points")

image2

pheatmap(country_jumper_points, border="white",
         color = brewer.pal(9,"Blues"),
         main="Where they've got points")

image3

Wpisy z kategorii Duże i złożone powstają przy współpracy z firmą CodiLime.

3 thoughts on “Ładne mapy ciepła”

  1. Error: could not find function „%>%”

    Faktycznie trzeba najpierw zdefiniowac ten „special operator” czy teoretycznie jest to wbudowana funkcja?

  2. Ach,
    moja wersja SmarterPoland ładuje ten pakiet sama, ale ta CRANowa tego nie robi, dzięŻi za zwrócenie na to uwagi

    Trzeba załadować dplyr i PogromcyDanych

    czyli aby działało trzeba jeszcze:
    library(dplyr)
    library(PogromcyDanych)

    aby to ostatnie zadziałało trzeba wcześniej:

    library(devtools)
    install_github(„pbiecek/PogromcyDanych”)

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *