Halloween în rundă | R-BLOGGERS

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

(Acest articol a fost publicat pentru prima dată pe R pe kieranhealy.orgși a contribuit cu drag la R-Bloggers). (Puteți raporta problema despre conținutul de pe această pagină aici)


Doriți să vă împărtășiți conținutul pe R-Bloggers? Faceți clic aici dacă aveți un blog sau aici dacă nu.

Anul trecut am scris despre curățarea unor date din baza de date FARS NHTSA, sistemul care urmărește informațiile despre accidentele rutiere din Statele Unite. Am făcut asta din nou anul acesta pentru clasa mea modernă de calcul de text. Nu voi repeta detaliile de curățare, care sunt mai mult sau mai puțin la fel. O întrebare este cum să agregăm date de genul acesta, dacă este deloc, și cum să desenați o imagine a acesteia. Există, ca întotdeauna, o mulțime de opțiuni. Datele obținute (cu un ușor întrebări diferite de anul trecut; O mică lecție în sine despre măsuri repetate) ajunge ca număr de decese pietonale (în accidente de autovehicule) pentru fiecare zi a anului, în decurs de luni, pentru fiecare an din 2009 până în 2023.

Datele din foaia de calcul pe care o obțineți după o interogare specifică către FARS de pe web.

Datele din foaia de calcul pe care o obțineți după o interogare specifică către FARS de pe web.

Ceea ce m -a interesat a fost tiparele numărului zilnic, așa că am vrut să mediez de -a lungul anilor. Acest tip de agregare, desigur, scapă de alte lucruri de care ne -am putea interesa, cum ar fi tendințele de -a lungul timpului. În medie, înseamnă că nu vom vedea, de exemplu, nicio tendință pentru ca numărul de decese pietonale să scadă în timp. O modalitate de a desena acest lucru este un grafic de coloane cu timpul (ca o zi a anului) pe axa X și numărul mediu de axa y.

Versiune largă.Versiune largă.

Versiune largă.

Acest lucru funcționează bine. Frumos și compact. Un lucru pe care oamenii tind să subestimeze cu privire la grafice de acest gen (fie ca bare sau linii) este că de multe ori puteți comprima mult axa verticală mult fără pierderea informațiilor. Într -adevăr, de multe ori cu serii de timp îndelungate, ceea ce este corect de făcut, pentru că nu este nimic mai bun pentru a face tendințele tale să pară dramatice decât restrângerea părții orizontale a raportului de aspect. Aici, accentul nu este pus pe o tendință, ci pe o zi care se remarcă cu adevărat de ceilalți. În orice caz, larg este bine.

Pe de altă parte, majoritatea oamenilor se uită la lucrurile pe telefoanele lor. Poate că o vedere verticală poate fi mai bună acolo? Am putea face așa ceva, ca anul trecut:

Versiune înaltă.Versiune înaltă.

Versiune înaltă.

Aici facem față pe lună și le stivăm. Funcționează OK. Acest lucru ar fi mai util pentru datele în care vă așteptați un pic mai multă structură pe rânduri, precum și de -a lungul coloanelor tabelului pe care îl graficați. De exemplu, accidentele variază în funcție de ziua săptămânii, în special accidentele pietonale. Sunt mai mulți oameni în weekend. Și apoi pentru unele părți ale țării, sezonalitatea activității pietonale ar fi mai puternică decât în ​​altele, pentru că este mai frumos să fii în afara câteva luni ale anului decât altele. (De fapt, puteți obține număr de zi a săptămânii de la Fars, dar nu am făcut; exerciții fizice pentru cititor, etc.) Chiar și în aceasta puteți vedea unele dovezi în acest sens, întrucât vara și (înapoi la școală) căderea au mai multe fatalități decât ianuarie, de exemplu.

În cele din urmă, și punctul acestui post, putem experimenta și cu faptul că anul este ciclic și să folosim coordonate polare. Când facem acest lucru, ne luăm axa X și o înfășurăm în jurul unui cerc. Poziția pe axa x măsurată ca distanță devine poziția pe o axă polară sau radială măsurată ca un unghi. O numim theta și măsurăm în grade sau radiani sau orice altceva. În ggplot coord_polar() este disponibil ca transformare pentru a face acest lucru. Unul dintre lucrurile frumoase despre abordarea gramatică a gramaticii GGPLOT este că este mai ușor să arate cum același grafic se poate schimba sub diverse transformări. Un complot XY standard își are coordonatele înființate de coord_cartesian() funcţie. De obicei, nu scriem niciodată acest lucru decât dacă dorim în mod explicit să reglați un aspect al acestuia, dar este acolo. Dar îl putem înlocui cu totul cu o transformare diferită de coordonate. Acesta poate fi un sistem polar sau altceva, ca atunci când desenăm o hartă și transformăm sistematic punctele pe o sferă într -o suprafață plană printr -o anumită proiecție.

Versiunea 4 a GGPLOT a apărut luna trecută și a fost introdusă coord_radial() ca o versiune îmbunătățită a coord_polar(). Îl putem folosi pentru a ne atrage complotul. Aici vom folosi un set de date FARS care arată prăbușiri fatale care implică pietoni cu vârsta de 17 ani și mai mică. (Diferența față de cele de mai sus este că pietonii au fost „implicați” în accident, dar nu au fost neapărat uciși.) Scriem un cod care arată astfel:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
m_breaks <- cumsum(as.integer(diff(seq(as.Date("2016-01-01"),
                                       as.Date("2017-01-01"), by = "month")))) - 16  

arrow_segment_df <- tibble(
  x = 10, y = 3.4, xend = 61, yend = 3.2)
  

p_out  <- ggplot(data = fars_involved_agg,
       mapping = aes(x = day_ind, y = n, color = flag, fill = flag)) +
    geom_point(group = 1, size = 2.5, shape = 21) +
    geom_textsegment(
      data = arrow_segment_df, 
      mapping = aes(x = x, y = y, xend = xend, yend = yend), 
      label = "Calendar Day", color = "cornflowerblue",
      family = "Socviz Condensed",
      arrow = arrow(length = unit(0.2, "cm"), type = "closed"), 
      inherit.aes = FALSE, linewidth = 0.5) + 
    annotate("text", x = 305, 
                y = 4, label = "Halloween", size=5, hjust = -0.12,
                color="darkorange2", family = "Socviz Condensed",
             ) + 
    scale_color_manual(values = c("gray10", "gray5")) +    
    scale_fill_manual(values = c(NA, "darkorange2")) + 
    coord_radial(expand = FALSE, rlim = c(0,4.25), inner.radius = 0.25, 
                 r.axis.inside = TRUE) + 
    scale_x_continuous(breaks = m_breaks, labels = month.name, minor_breaks = m_breaks - 15) +
    guides(color = "none", fill = "none", theta = "axis_textpath") + 
    labs(x = NULL,
         y = NULL,
         title = "Fatal Motor Vehicle Crashes involving Child Pedestrians",
         subtitle = "Daily Means, 2009-2023",
         caption = "Figure: Kieran Healy / Data: NHTSA Fatality Analysis Reporting System") + 
  theme(panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_line(color = "gray10"),
        panel.grid.major.y = element_line(color = "gray50"),
        panel.grid.minor.y = element_blank(),
        axis.text = element_text(face = "bold"), 
        axis.ticks.theta = element_blank())

Acest lucru este mult dincolo de minimul necesar pentru a obține un complot de servit, dar am fost îndepărtat de lustruire. Bitul cheie este apelul la coord_radial():

1
2
3
4
coord_radial(expand = FALSE, 
             rlim = c(0,4.25), 
             r.axis.inside = TRUE, 
             inner.radius = 0.25)

Acest lucru spune: trageți axa x ca un cerc; Nu extindeți marjele (aceasta are ca efect să păstreze ianuarie în partea de sus, mai degrabă decât să fie ușor decentă); Setați limitele axei y (adică lungimea razei) să fie puțin mai mult decât maximul datelor; Puneți axa radială în interiorul parcelei, mai degrabă decât lângă ea; și faceți cercul mai mult ca o gogoașă, punând o „gaură” circulară în mijlocul graficului, care este de 25 % din lungimea totală a razei. Versiunile în stilul gogoașilor ale parcelelor polare sunt adesea mai ușor de citit, spre deosebire de faptul că totul se duce în centrul cercului.

Cuvântul „Halloween” este pus cu annotate(). Apelul la geom_textsegment() este din pachetul GeomTextPath foarte util. Acest lucru ne permite să punem text sau etichete pe sau alături de linii într -un mod care să le urmeze forma. Puteți face acest lucru pentru linii obișnuite de tendință în parcele XY, dar înțelege și coordonatele polare. În plus, sistemul radial GGPlot 4 știe despre GeomTextPath. Dacă utilizați coordonate radiale și geomtextPath este încărcat, puteți scrie guides(theta = "axis_textpath"). Acest lucru va schimba etichetele theta axa (adică axa x transformată polar). În loc să se lipească orizontal, ei vor urma cu plăcere calea cercului. Frumos. De asemenea, folosim distincția dintre punctele de întrerupere minore și cele majore pentru etichete și linii de grilă de panou pentru a pune numele de lună pe minor pauze și lasă pauzele majore goale (și oprește -le semnele de căpușă). Acest lucru pune numele de lună în mijlocul fiecărei pană lunară, ceea ce este mai bine decât să le ai la început. Singurul alt lucru ușor fantezist este să aleg în mod deliberat o formă pentru punctele care îmi permit să le fac inele goale, cu excepția punctului de Halloween, care este umplut. Iată ce obținem.

Versiunea rotundă.Versiunea rotundă.

Versiunea rotundă.

Nu-i rău. Trebuie să fii atent cu coordonatele polare. Oamenii sunt mult mai buni la judecarea lungimilor relative decât unghiurile relative. Acesta este motivul pentru care graficele de plăcintă sunt urâte de tocilarii DataViz. Un grafic de plăcintă este, până la urmă, doar o bară sau o diagramă de coloană a cărei axă X a fost rotită într-un cerc. În acest caz, complotul nostru umil pe coloană cu aspect larg se descurcă perfect pentru mult mai puțin efort și are avantajul de a fi imediat inteligibil de mai mulți oameni. Există cazuri în care datele cu adevărat sezoniere pot beneficia cu adevărat de a fi reprezentate pe sau într -un cerc. Aceste date nu sunt chiar una dintre acestea, deoarece spunem doar „Hei, uite cum este diferită această zi de toate celelalte”. Dar, în același timp, nu cerem cu adevărat privitorului să judece compensările unghiulare sau să estimeze zona unei pană de plăcintă. În schimb, este la doar o distanță de cercul interior. Văzând punctele pentru toate celelalte zile clusterul aproape de inelul interior, în timp ce Halloween -ul iese în evidență, o modalitate de lucru decent de a obține conținutul și poate într -un mod mai prietenos cu oamenii care se uită la complotul de pe un telefon.

PS: Un alt lucru. Amintiți -vă, așa cum am menționat și anul trecut, că orice inferență despre cât de periculoasă este Halloween -ul pentru pietonii pentru copii nu ar trebui să depindă doar de numărul de fatalități observate, ci și de expunere, pe care nu le vedem direct. Există mult mai mulți copii – poate ordine de mărime mai mult – care se duc în seara de Halloween decât într -o noapte tipică, ceea ce va schimba sensul numărului de fatalități pietonale.

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.