Przygotujmy sobie przestrzeń do pracy. Najpierw ustawmy odpowiednią
ścieżkę poleceniemsetwd(), a następnie wczytajmy (jeśli nie
mamy zainstalujmy) niezbędne pakiety. W kolejnym kroku wczytajmy dane,
które posłużą nam do nauki kolejnych poleceń (funkcji) w
R
# install.packages("dplyr")
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
# albo całe "combo"
# install.packages("tidyverse") # https://www.tidyverse.org/
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats 1.0.1 ✔ readr 2.1.5
## ✔ ggplot2 4.0.0 ✔ stringr 1.5.2
## ✔ lubridate 1.9.4 ✔ tibble 3.2.1
## ✔ purrr 1.1.0 ✔ tidyr 1.3.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
tidyverse_logo()
## ⬢ __ _ __ . ⬡ ⬢ .
## / /_(_)__/ /_ ___ _____ _______ ___
## / __/ / _ / // / |/ / -_) __(_-</ -_)
## \__/_/\_,_/\_, /|___/\__/_/ /___/\__/
## ⬢ . /___/ ⬡ . ⬢
# https://r-data.pmagunia.com/dataset/county
# counties <- read.csv("https://r-data.pmagunia.com/system/files/datasets/admin/dataset-47806.csv")
# glimpse(counties)
Skąd możemy wziąć dane? Pamiętamy, że choćby z różnych pakietów. Dla inspiracji, pod kątem przyszłych projektów, zobaczmy kilka.
# install.packages("usdata")
library(usdata)
data("county") # na tym data set'cie chwile popracujemy
Bądź taki zestaw zbiorów danych.
# install.packages("openintro")
library(openintro)
## Loading required package: airports
## Loading required package: cherryblossom
(package_data <-
data(package = "openintro") # może nie być zbyt wygodne w przeglądaniu dziesiątek zbiorów
)
listaZbiorowDanych <- as.data.frame(
package_data$results
) # dla wygodnego przeglądania a'la Excel
i co tam mamy?
cia_factbook # brzmi dobrze i szpiegowsko
## # A tibble: 259 × 11
## country area birth_rate death_rate infant_mortality_rate internet_users
## <fct> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Russia 1.71e7 11.9 13.8 7.08 40853000
## 2 Canada 9.98e6 10.3 8.31 4.71 26960000
## 3 United Sta… 9.83e6 13.4 8.15 6.17 245000000
## 4 China 9.60e6 12.2 7.44 14.8 389000000
## 5 Brazil 8.51e6 14.7 6.54 19.2 75982000
## 6 Australia 7.74e6 12.2 7.07 4.43 15810000
## 7 India 3.29e6 19.9 7.35 43.2 61338000
## 8 Argentina 2.78e6 16.9 7.34 9.96 13694000
## 9 Kazakhstan 2.72e6 19.6 8.31 21.6 5299000
## 10 Algeria 2.38e6 24.0 4.31 21.8 NA
## # ℹ 249 more rows
## # ℹ 5 more variables: life_exp_at_birth <dbl>, maternal_mortality_rate <int>,
## # net_migration_rate <dbl>, population <int>, population_growth_rate <dbl>
burger # "Burger preferences" :)
## # A tibble: 500 × 2
## best_burger_place gender
## <fct> <fct>
## 1 Five Guys Burgers Male
## 2 Five Guys Burgers Male
## 3 Five Guys Burgers Male
## 4 Five Guys Burgers Male
## 5 Five Guys Burgers Male
## 6 Five Guys Burgers Female
## 7 Five Guys Burgers Female
## 8 Five Guys Burgers Female
## 9 Five Guys Burgers Female
## 10 Five Guys Burgers Female
## # ℹ 490 more rows
# etc.
# Instalacja potrzebnych pakietów
install.packages(c("nycflights13",
"ggplot2movies",
"babynames", "fivethirtyeight", "palmerpenguins",
"datasets", "MASS", "titanic", "dslabs"))
NYCFLIGHTS13 - Loty z NYC (336,776 obserwacji) Szczegółowe dane o wszystkich lotach z NYC w 2013.
library(nycflights13)
glimpse(flights) # 336,776 lotów - opóźnienia, trasy, czasy
## Rows: 336,776
## Columns: 19
## $ year <int> 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2…
## $ month <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
## $ day <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
## $ dep_time <int> 517, 533, 542, 544, 554, 554, 555, 557, 557, 558, 558, …
## $ sched_dep_time <int> 515, 529, 540, 545, 600, 558, 600, 600, 600, 600, 600, …
## $ dep_delay <dbl> 2, 4, 2, -1, -6, -4, -5, -3, -3, -2, -2, -2, -2, -2, -1…
## $ arr_time <int> 830, 850, 923, 1004, 812, 740, 913, 709, 838, 753, 849,…
## $ sched_arr_time <int> 819, 830, 850, 1022, 837, 728, 854, 723, 846, 745, 851,…
## $ arr_delay <dbl> 11, 20, 33, -18, -25, 12, 19, -14, -8, 8, -2, -3, 7, -1…
## $ carrier <chr> "UA", "UA", "AA", "B6", "DL", "UA", "B6", "EV", "B6", "…
## $ flight <int> 1545, 1714, 1141, 725, 461, 1696, 507, 5708, 79, 301, 4…
## $ tailnum <chr> "N14228", "N24211", "N619AA", "N804JB", "N668DN", "N394…
## $ origin <chr> "EWR", "LGA", "JFK", "JFK", "LGA", "EWR", "EWR", "LGA",…
## $ dest <chr> "IAH", "IAH", "MIA", "BQN", "ATL", "ORD", "FLL", "IAD",…
## $ air_time <dbl> 227, 227, 160, 183, 116, 150, 158, 53, 140, 138, 149, 1…
## $ distance <dbl> 1400, 1416, 1089, 1576, 762, 719, 1065, 229, 944, 733, …
## $ hour <dbl> 5, 5, 5, 5, 6, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 6, 6, 6…
## $ minute <dbl> 15, 29, 40, 45, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0…
## $ time_hour <dttm> 2013-01-01 05:00:00, 2013-01-01 05:00:00, 2013-01-01 0…
glimpse(airlines) # Linie lotnicze
## Rows: 16
## Columns: 2
## $ carrier <chr> "9E", "AA", "AS", "B6", "DL", "EV", "F9", "FL", "HA", "MQ", "O…
## $ name <chr> "Endeavor Air Inc.", "American Airlines Inc.", "Alaska Airline…
glimpse(airports) # Lotniska
## Rows: 1,458
## Columns: 8
## $ faa <chr> "04G", "06A", "06C", "06N", "09J", "0A9", "0G6", "0G7", "0P2", "…
## $ name <chr> "Lansdowne Airport", "Moton Field Municipal Airport", "Schaumbur…
## $ lat <dbl> 41.13047, 32.46057, 41.98934, 41.43191, 31.07447, 36.37122, 41.4…
## $ lon <dbl> -80.61958, -85.68003, -88.10124, -74.39156, -81.42778, -82.17342…
## $ alt <dbl> 1044, 264, 801, 523, 11, 1593, 730, 492, 1000, 108, 409, 875, 10…
## $ tz <dbl> -5, -6, -6, -5, -5, -5, -5, -5, -5, -8, -5, -6, -5, -5, -5, -5, …
## $ dst <chr> "A", "A", "A", "A", "A", "A", "A", "A", "U", "A", "A", "U", "A",…
## $ tzone <chr> "America/New_York", "America/Chicago", "America/Chicago", "Ameri…
glimpse(planes) # Szczegóły samolotów
## Rows: 3,322
## Columns: 9
## $ tailnum <chr> "N10156", "N102UW", "N103US", "N104UW", "N10575", "N105UW…
## $ year <int> 2004, 1998, 1999, 1999, 2002, 1999, 1999, 1999, 1999, 199…
## $ type <chr> "Fixed wing multi engine", "Fixed wing multi engine", "Fi…
## $ manufacturer <chr> "EMBRAER", "AIRBUS INDUSTRIE", "AIRBUS INDUSTRIE", "AIRBU…
## $ model <chr> "EMB-145XR", "A320-214", "A320-214", "A320-214", "EMB-145…
## $ engines <int> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, …
## $ seats <int> 55, 182, 182, 182, 55, 182, 182, 182, 182, 182, 55, 55, 5…
## $ speed <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ engine <chr> "Turbo-fan", "Turbo-fan", "Turbo-fan", "Turbo-fan", "Turb…
glimpse(weather) # Dane pogodowe
## Rows: 26,115
## Columns: 15
## $ origin <chr> "EWR", "EWR", "EWR", "EWR", "EWR", "EWR", "EWR", "EWR", "EW…
## $ year <int> 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013,…
## $ month <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ day <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ hour <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, …
## $ temp <dbl> 39.02, 39.02, 39.02, 39.92, 39.02, 37.94, 39.02, 39.92, 39.…
## $ dewp <dbl> 26.06, 26.96, 28.04, 28.04, 28.04, 28.04, 28.04, 28.04, 28.…
## $ humid <dbl> 59.37, 61.63, 64.43, 62.21, 64.43, 67.21, 64.43, 62.21, 62.…
## $ wind_dir <dbl> 270, 250, 240, 250, 260, 240, 240, 250, 260, 260, 260, 330,…
## $ wind_speed <dbl> 10.35702, 8.05546, 11.50780, 12.65858, 12.65858, 11.50780, …
## $ wind_gust <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 20.…
## $ precip <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ pressure <dbl> 1012.0, 1012.3, 1012.5, 1012.2, 1011.9, 1012.4, 1012.2, 101…
## $ visib <dbl> 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,…
## $ time_hour <dttm> 2013-01-01 01:00:00, 2013-01-01 02:00:00, 2013-01-01 03:00…
Przykładowe analizy:
Które linie lotnicze mają najwięcej opóźnień?
Jak pogoda wpływa na opóźnienia?
Która pora roku jest najlepsza do latania?
GGPLOT2MOVIES - 58,000 filmów z IMDB 58,788 filmów z ocenami, budżetami, gatunkami
glimpse(movies)
## Rows: 140
## Columns: 5
## $ movie <chr> "2Fast2Furious", "28DaysLater", "AGuyThing", "AManApart", "…
## $ genre <chr> "action", "horror", "rom-comedy", "action", "comedy", "acti…
## $ score <dbl> 48.9, 78.2, 39.5, 42.9, 79.9, 57.9, 35.1, 50.7, 62.6, 63.3,…
## $ rating <chr> "PG-13", "R", "PG-13", "R", "PG-13", "PG", "PG-13", "R", "P…
## $ box_office <dbl> 127.146, 45.065, 15.545, 26.248, 17.781, 47.811, 14.219, 10…
Przykładowe analizy:
Jak zmieniały się oceny filmów przez lata?
Który gatunek ma najwyższe oceny?
Zależność między budżetem a oceną
BABYNAMES - Imiona dzieci w USA (1880-2017) 1,924,665 rekordów - popularność imion przez 137 lat
library(babynames)
##
## Attaching package: 'babynames'
## The following object is masked from 'package:openintro':
##
## births
glimpse(babynames)
## Rows: 1,924,665
## Columns: 5
## $ year <dbl> 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,…
## $ sex <chr> "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", …
## $ name <chr> "Mary", "Anna", "Emma", "Elizabeth", "Minnie", "Margaret", "Ida",…
## $ n <int> 7065, 2604, 2003, 1939, 1746, 1578, 1472, 1414, 1320, 1288, 1258,…
## $ prop <dbl> 0.07238359, 0.02667896, 0.02052149, 0.01986579, 0.01788843, 0.016…
Przykładowe analizy:
Jak zmieniała się popularność Twojego imienia?
Najmodniejsze imiona w różnych dekadach
Różnice między imionami męskimi i żeńskimi
FIVETHIRTYEIGHT - Dane z artykułów dziennikarskich Wiele ciekawych zbiorów z prawdziwych analiz
library(fivethirtyeight)
##
## Attaching package: 'fivethirtyeight'
## The following object is masked from 'package:openintro':
##
## drug_use
Test Bechdel w filmach
glimpse(bechdel) # Test sprawdzający czy w filmie dwie kobiety rozmawiają ze sobą o czymś innym niż mężczyzna.
## Rows: 1,794
## Columns: 15
## $ year <int> 2013, 2012, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 20…
## $ imdb <chr> "tt1711425", "tt1343727", "tt2024544", "tt1272878", "tt0…
## $ title <chr> "21 & Over", "Dredd 3D", "12 Years a Slave", "2 Guns", "…
## $ test <chr> "notalk", "ok-disagree", "notalk-disagree", "notalk", "m…
## $ clean_test <ord> notalk, ok, notalk, notalk, men, men, notalk, ok, ok, no…
## $ binary <chr> "FAIL", "PASS", "FAIL", "FAIL", "FAIL", "FAIL", "FAIL", …
## $ budget <int> 13000000, 45000000, 20000000, 61000000, 40000000, 225000…
## $ domgross <dbl> 25682380, 13414714, 53107035, 75612460, 95020213, 383624…
## $ intgross <dbl> 42195766, 40868994, 158607035, 132493015, 95020213, 1458…
## $ code <chr> "2013FAIL", "2012PASS", "2013FAIL", "2013FAIL", "2013FAI…
## $ budget_2013 <int> 13000000, 45658735, 20000000, 61000000, 40000000, 225000…
## $ domgross_2013 <dbl> 25682380, 13611086, 53107035, 75612460, 95020213, 383624…
## $ intgross_2013 <dbl> 42195766, 41467257, 158607035, 132493015, 95020213, 1458…
## $ period_code <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ decade_code <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
Statystyki wypadków drogowych w USA
glimpse(bad_drivers)
## Rows: 51
## Columns: 8
## $ state <chr> "Alabama", "Alaska", "Arizona", "Arkansas", "Calif…
## $ num_drivers <dbl> 18.8, 18.1, 18.6, 22.4, 12.0, 13.6, 10.8, 16.2, 5.…
## $ perc_speeding <int> 39, 41, 35, 18, 35, 37, 46, 38, 34, 21, 19, 54, 36…
## $ perc_alcohol <int> 30, 25, 28, 26, 28, 28, 36, 30, 27, 29, 25, 41, 29…
## $ perc_not_distracted <int> 96, 90, 84, 94, 91, 79, 87, 87, 100, 92, 95, 82, 8…
## $ perc_no_previous <int> 80, 94, 96, 95, 89, 95, 82, 99, 100, 94, 93, 87, 9…
## $ insurance_premiums <dbl> 784.55, 1053.48, 899.47, 827.34, 878.41, 835.50, 1…
## $ losses <dbl> 145.08, 133.93, 110.35, 142.39, 165.63, 139.91, 16…
Tweety (iXy) Donalda Trumpa
glimpse(trump_twitter)
## Rows: 448
## Columns: 3
## $ id <dbl> 7.656299e+17, 7.587319e+17, 7.583505e+17, 7.575775e+17, 7.5…
## $ created_at <dttm> 2016-08-16 19:22:57, 2016-07-28 18:32:31, 2016-07-27 17:16…
## $ text <chr> "It's just a 2-point race, Clinton 38%, Trump 36%' https://…
Ranking słodyczy
glimpse(candy_rankings)
## Rows: 85
## Columns: 13
## $ competitorname <chr> "100 Grand", "3 Musketeers", "One dime", "One quarter…
## $ chocolate <lgl> TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, F…
## $ fruity <lgl> FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE…
## $ caramel <lgl> TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE,…
## $ peanutyalmondy <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, …
## $ nougat <lgl> FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE,…
## $ crispedricewafer <lgl> TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE…
## $ hard <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALS…
## $ bar <lgl> TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, F…
## $ pluribus <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE…
## $ sugarpercent <dbl> 0.732, 0.604, 0.011, 0.011, 0.906, 0.465, 0.604, 0.31…
## $ pricepercent <dbl> 0.860, 0.511, 0.116, 0.511, 0.511, 0.767, 0.767, 0.51…
## $ winpercent <dbl> 66.97173, 67.60294, 32.26109, 46.11650, 52.34146, 50.…
Przestępstwa z nienawiści
glimpse(hate_crimes)
## Rows: 51
## Columns: 13
## $ state <chr> "Alabama", "Alaska", "Arizona", "Arkansas"…
## $ state_abbrev <chr> "AL", "AK", "AZ", "AR", "CA", "CO", "CT", …
## $ median_house_inc <int> 42278, 67629, 49254, 44922, 60487, 60940, …
## $ share_unemp_seas <dbl> 0.060, 0.064, 0.063, 0.052, 0.059, 0.040, …
## $ share_pop_metro <dbl> 0.64, 0.63, 0.90, 0.69, 0.97, 0.80, 0.94, …
## $ share_pop_hs <dbl> 0.821, 0.914, 0.842, 0.824, 0.806, 0.893, …
## $ share_non_citizen <dbl> 0.02, 0.04, 0.10, 0.04, 0.13, 0.06, 0.06, …
## $ share_white_poverty <dbl> 0.12, 0.06, 0.09, 0.12, 0.09, 0.07, 0.06, …
## $ gini_index <dbl> 0.472, 0.422, 0.455, 0.458, 0.471, 0.457, …
## $ share_non_white <dbl> 0.35, 0.42, 0.49, 0.26, 0.61, 0.31, 0.30, …
## $ share_vote_trump <dbl> 0.63, 0.53, 0.50, 0.60, 0.33, 0.44, 0.41, …
## $ hate_crimes_per_100k_splc <dbl> 0.12583893, 0.14374012, 0.22531995, 0.0690…
## $ avg_hatecrimes_per_100k_fbi <dbl> 1.8064105, 1.6567001, 3.4139280, 0.8692089…
# Lista wszystkich zbiorów:
data(package = "fivethirtyeight")
PALMERPENGUINS - Pingwiny z Antarktydy (alternatywa
dla iris) 344 pingwiny, 3 gatunki, pomiary biologiczne.
library(palmerpenguins)
glimpse(penguins)
## Rows: 344
## Columns: 8
## $ species <fct> Adelie, Adelie, Adelie, Adelie, Adelie, Adelie, Adel…
## $ island <fct> Torgersen, Torgersen, Torgersen, Torgersen, Torgerse…
## $ bill_length_mm <dbl> 39.1, 39.5, 40.3, NA, 36.7, 39.3, 38.9, 39.2, 34.1, …
## $ bill_depth_mm <dbl> 18.7, 17.4, 18.0, NA, 19.3, 20.6, 17.8, 19.6, 18.1, …
## $ flipper_length_mm <int> 181, 186, 195, NA, 193, 190, 181, 195, 193, 190, 186…
## $ body_mass_g <int> 3750, 3800, 3250, NA, 3450, 3650, 3625, 4675, 3475, …
## $ sex <fct> male, female, female, NA, female, male, female, male…
## $ year <int> 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007…
Przykładowe analizy:
Klasyfikacja gatunków na podstawie pomiarów
Różnice między płciami
Machine learning i klasyfikacja
TITANIC - Pasażerowie Titanica 891 pasażerów z informacją o przeżyciu
library(titanic)
glimpse(titanic_train)
## Rows: 891
## Columns: 12
## $ PassengerId <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,…
## $ Survived <int> 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1…
## $ Pclass <int> 3, 1, 3, 1, 3, 3, 1, 3, 3, 2, 3, 1, 3, 3, 3, 2, 3, 2, 3, 3…
## $ Name <chr> "Braund, Mr. Owen Harris", "Cumings, Mrs. John Bradley (Fl…
## $ Sex <chr> "male", "female", "female", "female", "male", "male", "mal…
## $ Age <dbl> 22, 38, 26, 35, 35, NA, 54, 2, 27, 14, 4, 58, 20, 39, 14, …
## $ SibSp <int> 1, 1, 0, 1, 0, 0, 0, 3, 0, 1, 1, 0, 0, 1, 0, 0, 4, 0, 1, 0…
## $ Parch <int> 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 1, 0, 0, 5, 0, 0, 1, 0, 0, 0…
## $ Ticket <chr> "A/5 21171", "PC 17599", "STON/O2. 3101282", "113803", "37…
## $ Fare <dbl> 7.2500, 71.2833, 7.9250, 53.1000, 8.0500, 8.4583, 51.8625,…
## $ Cabin <chr> "", "C85", "", "C123", "", "", "E46", "", "", "", "G6", "C…
## $ Embarked <chr> "S", "C", "S", "S", "S", "Q", "S", "S", "S", "C", "S", "S"…
Przykładowe analizy:
Kto miał większe szanse przeżycia?
Wpływ klasy, płci, wieku na przeżycie
Modelowanie predykcyjne
DSLABS - Zbiory do nauki Data Science
library(dslabs)
##
## Attaching package: 'dslabs'
## The following object is masked from 'package:openintro':
##
## murders
Morderstwa w USA
glimpse(murders)
## Rows: 51
## Columns: 5
## $ state <chr> "Alabama", "Alaska", "Arizona", "Arkansas", "California", "…
## $ abb <chr> "AL", "AK", "AZ", "AR", "CA", "CO", "CT", "DE", "DC", "FL",…
## $ region <fct> South, West, West, South, West, West, Northeast, South, Sou…
## $ population <dbl> 4779736, 710231, 6392017, 2915918, 37253956, 5029196, 35740…
## $ total <dbl> 135, 19, 232, 93, 1257, 65, 97, 38, 99, 669, 376, 7, 12, 36…
Wzrost i płeć
glimpse(heights)
## Rows: 1,050
## Columns: 2
## $ sex <fct> Male, Male, Male, Male, Male, Female, Female, Female, Female, M…
## $ height <dbl> 75, 70, 68, 74, 61, 65, 66, 62, 66, 67, 72, 72, 69, 68, 69, 66,…
Skład chemiczny oliwy z oliwek
glimpse(olive)
## Rows: 572
## Columns: 10
## $ region <fct> Southern Italy, Southern Italy, Southern Italy, Southern I…
## $ area <fct> North-Apulia, North-Apulia, North-Apulia, North-Apulia, No…
## $ palmitic <dbl> 10.75, 10.88, 9.11, 9.66, 10.51, 9.11, 9.22, 11.00, 10.82,…
## $ palmitoleic <dbl> 0.75, 0.73, 0.54, 0.57, 0.67, 0.49, 0.66, 0.61, 0.60, 0.55…
## $ stearic <dbl> 2.26, 2.24, 2.46, 2.40, 2.59, 2.68, 2.64, 2.35, 2.39, 2.13…
## $ oleic <dbl> 78.23, 77.09, 81.13, 79.52, 77.71, 79.24, 79.90, 77.28, 77…
## $ linoleic <dbl> 6.72, 7.81, 5.49, 6.19, 6.72, 6.78, 6.18, 7.34, 7.09, 6.33…
## $ linolenic <dbl> 0.36, 0.31, 0.31, 0.50, 0.50, 0.51, 0.49, 0.39, 0.46, 0.26…
## $ arachidic <dbl> 0.60, 0.61, 0.63, 0.78, 0.80, 0.70, 0.56, 0.64, 0.83, 0.52…
## $ eicosenoic <dbl> 0.29, 0.29, 0.29, 0.35, 0.46, 0.44, 0.29, 0.35, 0.33, 0.30…
Dane do rozpoznawania cyfr
glimpse(mnist_27)
## List of 5
## $ train :'data.frame': 800 obs. of 3 variables:
## ..$ y : Factor w/ 2 levels "2","7": 1 1 2 1 2 2 2 1 2 2 ...
## ..$ x_1: num [1:800] 0.1392 0.0909 0.1964 0.2727 0.1556 ...
## ..$ x_2: num [1:800] 0.316 0.299 0.196 0.336 0.2 ...
## $ test :'data.frame': 200 obs. of 3 variables:
## ..$ y : Factor w/ 2 levels "2","7": 1 1 1 1 2 2 2 1 2 2 ...
## ..$ x_1: num [1:200] 0.023 0.0617 0.0465 0.046 0.175 ...
## ..$ x_2: num [1:200] 0.264 0.272 0.314 0.322 0.4 ...
## $ index_train: int [1:800] 5167 53374 44258 19964 45808 43920 49362 2333 42549 14742 ...
## $ index_test : int [1:200] 30347 17556 43450 32036 869 27984 12782 54710 54543 15940 ...
## $ true_p :'data.frame': 15625 obs. of 3 variables:
## ..$ x_1: num [1:15625] 0 0.00422 0.00845 0.01267 0.0169 ...
## ..$ x_2: num [1:15625] 0 0 0 0 0 0 0 0 0 0 ...
## ..$ p : num [1:15625] 0.702 0.712 0.721 0.73 0.738 ...
## ..- attr(*, "out.attrs")=List of 2
## .. ..$ dim : Named int [1:2] 125 125
## .. .. ..- attr(*, "names")= chr [1:2] "x_1" "x_2"
## .. ..$ dimnames:List of 2
Sondaże wyborcze 2016
glimpse(polls_us_election_2016)
## Rows: 4,208
## Columns: 15
## $ state <fct> U.S., U.S., U.S., U.S., U.S., U.S., U.S., U.S., New M…
## $ startdate <date> 2016-11-03, 2016-11-01, 2016-11-02, 2016-11-04, 2016…
## $ enddate <date> 2016-11-06, 2016-11-07, 2016-11-06, 2016-11-07, 2016…
## $ pollster <fct> "ABC News/Washington Post", "Google Consumer Surveys"…
## $ grade <fct> A+, B, A-, B, B-, A, A-, A-, NA, A-, A+, A-, A+, B+, …
## $ samplesize <int> 2220, 26574, 2195, 3677, 16639, 1295, 1426, 1282, 843…
## $ population <chr> "lv", "lv", "lv", "lv", "rv", "lv", "lv", "lv", "lv",…
## $ rawpoll_clinton <dbl> 47.00, 38.03, 42.00, 45.00, 47.00, 48.00, 45.00, 44.0…
## $ rawpoll_trump <dbl> 43.00, 35.69, 39.00, 41.00, 43.00, 44.00, 41.00, 40.0…
## $ rawpoll_johnson <dbl> 4.00, 5.46, 6.00, 5.00, 3.00, 3.00, 5.00, 6.00, 6.00,…
## $ rawpoll_mcmullin <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ adjpoll_clinton <dbl> 45.20163, 43.34557, 42.02638, 45.65676, 46.84089, 49.…
## $ adjpoll_trump <dbl> 41.72430, 41.21439, 38.81620, 40.92004, 42.33184, 43.…
## $ adjpoll_johnson <dbl> 4.626221, 5.175792, 6.844734, 6.069454, 3.726098, 3.0…
## $ adjpoll_mcmullin <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
# Lista wszystkich:
data(package = "dslabs")
Marvel
# install.packages("fivethirtyeightdata",
# repos = "https://fivethirtyeightdata.github.io/drat/",
# type = "source")
library(fivethirtyeightdata)
data(package = "fivethirtyeightdata")
# Avengers (Mściciele)
avengers <- read.csv("https://raw.githubusercontent.com/fivethirtyeight/data/master/avengers/avengers.csv")
Wracając do zbioru, którym będziemy się dziś zajmować.
# nowy sposób na podejrzenie zbioru,
glimpse(county)
## Rows: 3,142
## Columns: 15
## $ name <chr> "Autauga County", "Baldwin County", "Barbour County"…
## $ state <fct> Alabama, Alabama, Alabama, Alabama, Alabama, Alabama…
## $ pop2000 <dbl> 43671, 140415, 29038, 20826, 51024, 11714, 21399, 11…
## $ pop2010 <dbl> 54571, 182265, 27457, 22915, 57322, 10914, 20947, 11…
## $ pop2017 <int> 55504, 212628, 25270, 22668, 58013, 10309, 19825, 11…
## $ pop_change <dbl> 1.48, 9.19, -6.22, 0.73, 0.68, -2.28, -2.69, -1.51, …
## $ poverty <dbl> 13.7, 11.8, 27.2, 15.2, 15.6, 28.5, 24.4, 18.6, 18.8…
## $ homeownership <dbl> 77.5, 76.7, 68.0, 82.9, 82.0, 76.9, 69.0, 70.7, 71.4…
## $ multi_unit <dbl> 7.2, 22.6, 11.1, 6.6, 3.7, 9.9, 13.7, 14.3, 8.7, 4.3…
## $ unemployment_rate <dbl> 3.86, 3.99, 5.90, 4.39, 4.02, 4.93, 5.49, 4.93, 4.08…
## $ metro <fct> yes, yes, no, yes, yes, no, no, yes, no, no, yes, no…
## $ median_edu <fct> some_college, some_college, hs_diploma, hs_diploma, …
## $ per_capita_income <dbl> 27841.70, 27779.85, 17891.73, 20572.05, 21367.39, 15…
## $ median_hh_income <int> 55317, 52562, 33368, 43404, 47412, 29655, 36326, 436…
## $ smoking_ban <fct> none, none, partial, none, none, none, NA, NA, none,…
# alternatywa do:
summary(county)
## name state pop2000 pop2010
## Length:3142 Texas : 254 Min. : 67 Min. : 82
## Class :character Georgia : 159 1st Qu.: 11224 1st Qu.: 11114
## Mode :character Virginia: 133 Median : 24621 Median : 25872
## Kentucky: 120 Mean : 89650 Mean : 98262
## Missouri: 115 3rd Qu.: 61775 3rd Qu.: 66780
## Kansas : 105 Max. :9519338 Max. :9818605
## (Other) :2256 NA's :3
## pop2017 pop_change poverty homeownership
## Min. : 88 Min. :-33.6300 Min. : 2.40 Min. : 0.00
## 1st Qu.: 10976 1st Qu.: -1.9700 1st Qu.:11.30 1st Qu.:69.50
## Median : 25857 Median : -0.0600 Median :15.20 Median :74.60
## Mean : 103763 Mean : 0.5339 Mean :15.97 Mean :73.27
## 3rd Qu.: 67756 3rd Qu.: 2.3750 3rd Qu.:19.40 3rd Qu.:78.40
## Max. :10163507 Max. : 37.1900 Max. :52.00 Max. :91.30
## NA's :3 NA's :3 NA's :2
## multi_unit unemployment_rate metro median_edu
## Min. : 0.00 Min. : 1.620 no :1974 below_hs : 2
## 1st Qu.: 6.10 1st Qu.: 3.520 yes :1165 hs_diploma :1397
## Median : 9.70 Median : 4.360 NA's: 3 some_college:1695
## Mean :12.32 Mean : 4.611 bachelors : 46
## 3rd Qu.:15.90 3rd Qu.: 5.355 NA's : 2
## Max. :98.50 Max. :19.070
## NA's :3
## per_capita_income median_hh_income smoking_ban
## Min. :10467 Min. : 19264 none :1927
## 1st Qu.:21772 1st Qu.: 41126 partial : 635
## Median :25445 Median : 48073 complete: 0
## Mean :26093 Mean : 49765 NA's : 580
## 3rd Qu.:29276 3rd Qu.: 55771
## Max. :69533 Max. :129588
## NA's :2 NA's :2
No dobrze, a czym są counties?
select()Ile jest tak w ogóle stanów w zbiorze?
length(unique(county$state))
## [1] 51
# or
count(distinct(county, state))
## # A tibble: 1 × 1
## n
## <int>
## 1 51
county %>%
summarise("# States" = n_distinct(state))
## # A tibble: 1 × 1
## `# States`
## <int>
## 1 51
Wybierzmy ze zbioru tylko zmienne: nazwa stanu, nazwa hrabstwa,
populację w roku 2010 oraz zmienna dot. poziomu ubóstwa i stwórzmy nowy
zbiór o nazwie counties_selected. Użyj funkcji
plot() do zwizualizowania jak populacja i procent osób
żyjących poniżej granicy ubóstwa, wyglądały w poszczególnych stanach
(niekoniecznie na jednym rysunku).
names(county) # "wy`print()`ujmy" sobie wszystkie nazwy zmiennych, żeby mieć je "pod ręką"
## [1] "name" "state" "pop2000"
## [4] "pop2010" "pop2017" "pop_change"
## [7] "poverty" "homeownership" "multi_unit"
## [10] "unemployment_rate" "metro" "median_edu"
## [13] "per_capita_income" "median_hh_income" "smoking_ban"
(counties_selected <- county %>%
select(state,
name,
pop2010,
poverty)
)
## # A tibble: 3,142 × 4
## state name pop2010 poverty
## <fct> <chr> <dbl> <dbl>
## 1 Alabama Autauga County 54571 13.7
## 2 Alabama Baldwin County 182265 11.8
## 3 Alabama Barbour County 27457 27.2
## 4 Alabama Bibb County 22915 15.2
## 5 Alabama Blount County 57322 15.6
## 6 Alabama Bullock County 10914 28.5
## 7 Alabama Butler County 20947 24.4
## 8 Alabama Calhoun County 118572 18.6
## 9 Alabama Chambers County 34215 18.8
## 10 Alabama Cherokee County 25989 16.1
## # ℹ 3,132 more rows
plot(x = counties_selected$state,
y = counties_selected$poverty)
plot(counties_selected$state,
counties_selected$pop2010)
arrange()Proszę posortować dane, tak, żeby układały się rosnąco od najmniej
zaludnionych po te najliczniej zamieszkałe i wyprint’tować
tylko 13 pierwszych wierszy (za rok 2017)
head(county %>%
arrange(pop2017),
13)
## # A tibble: 13 × 15
## name state pop2000 pop2010 pop2017 pop_change poverty homeownership
## <chr> <fct> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
## 1 Kalawao County Hawa… 147 90 88 -1.12 12.7 0
## 2 Loving County Texas 67 82 134 26.4 17.1 45.5
## 3 King County Texas 356 286 296 8.03 3.5 38.9
## 4 Kenedy County Texas 414 416 417 -4.14 24.8 38
## 5 Arthur County Nebr… 444 460 457 0.66 10.9 63.5
## 6 Blaine County Nebr… 583 478 482 2.55 9.8 65.3
## 7 McPherson Cou… Nebr… 533 539 499 -5.67 16 58.8
## 8 Petroleum Cou… Mont… 493 494 523 2.55 10.1 68.6
## 9 Yakutat City … Alas… 808 662 605 -7.07 6.2 61.1
## 10 Loup County Nebr… 712 632 609 3.75 8.9 85.1
## 11 Grant County Nebr… 747 614 649 2.53 21.1 62.8
## 12 Borden County Texas 729 641 673 4.18 2.8 62.7
## 13 Hooker County Nebr… 783 736 674 -7.8 17.4 84.7
## # ℹ 7 more variables: multi_unit <dbl>, unemployment_rate <dbl>, metro <fct>,
## # median_edu <fct>, per_capita_income <dbl>, median_hh_income <int>,
## # smoking_ban <fct>
filter()Wybierzmy ze zbioru tylko counties w Kalifornii, posortowane malejąco względem zmiennej populacyjnej - rok 2000 i wyrzućmy w konsoli powiedzmy 7 pierwszych wierszy.
head(county %>%
arrange(desc(pop2000)) %>%
filter(state == "California"),
7)
## # A tibble: 7 × 15
## name state pop2000 pop2010 pop2017 pop_change poverty homeownership
## <chr> <fct> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
## 1 Los Angeles Co… Cali… 9519338 9818605 1.02e7 1.45 17 48.2
## 2 Orange County Cali… 2846289 3010232 3.19e6 2.46 12.1 60.8
## 3 San Diego Coun… Cali… 2813833 3095313 3.34e6 3.77 13.3 55.9
## 4 San Bernardino… Cali… 1709434 2035210 2.16e6 3.39 18.2 65.1
## 5 Santa Clara Co… Cali… 1682585 1781642 1.94e6 3.59 8.6 59.2
## 6 Riverside Coun… Cali… 1545387 2189641 2.42e6 5.75 15.6 70
## 7 Alameda County Cali… 1443741 1510271 1.66e6 5.07 11.3 55.1
## # ℹ 7 more variables: multi_unit <dbl>, unemployment_rate <dbl>, metro <fct>,
## # median_edu <fct>, per_capita_income <dbl>, median_hh_income <int>,
## # smoking_ban <fct>
# vs
county %>%
filter(state == "California") %>%
arrange(desc(pop2000)) %>%
head(7)
## # A tibble: 7 × 15
## name state pop2000 pop2010 pop2017 pop_change poverty homeownership
## <chr> <fct> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
## 1 Los Angeles Co… Cali… 9519338 9818605 1.02e7 1.45 17 48.2
## 2 Orange County Cali… 2846289 3010232 3.19e6 2.46 12.1 60.8
## 3 San Diego Coun… Cali… 2813833 3095313 3.34e6 3.77 13.3 55.9
## 4 San Bernardino… Cali… 1709434 2035210 2.16e6 3.39 18.2 65.1
## 5 Santa Clara Co… Cali… 1682585 1781642 1.94e6 3.59 8.6 59.2
## 6 Riverside Coun… Cali… 1545387 2189641 2.42e6 5.75 15.6 70
## 7 Alameda County Cali… 1443741 1510271 1.66e6 5.07 11.3 55.1
## # ℹ 7 more variables: multi_unit <dbl>, unemployment_rate <dbl>, metro <fct>,
## # median_edu <fct>, per_capita_income <dbl>, median_hh_income <int>,
## # smoking_ban <fct>
Proszę wybrać ze zbioru hrabstwa, w których nie ma problemu ubóstwa.
county %>%
filter(poverty == 0)
## # A tibble: 0 × 15
## # ℹ 15 variables: name <chr>, state <fct>, pop2000 <dbl>, pop2010 <dbl>,
## # pop2017 <int>, pop_change <dbl>, poverty <dbl>, homeownership <dbl>,
## # multi_unit <dbl>, unemployment_rate <dbl>, metro <fct>, median_edu <fct>,
## # per_capita_income <dbl>, median_hh_income <int>, smoking_ban <fct>
n()
Funkcja n() w dplyr jest używana do zliczania
liczby wierszy w każdej grupie po zastosowaniu funkcji
group_by(). To jest podstawowy licznik, który nie wymaga
podawania żadnych argumentów i zwraca liczbę obserwacji (de
facto wierszy) w danej grupie.
Proszę sprawdzić i zapisać w osobnym obiekcie jakie są proporcje zakazu palenia w poszczególnych hrabstwach. Następnie proszę narysować tę tabelę używając pie chart’u.
# Podsumowanie kategorii zmiennej `smoking_ban`
smoking_summary <- county %>%
group_by(smoking_ban) %>%
summarise(count = n()) %>%
mutate(percentage = count / sum(count) * 100)
# pokazywałem na jednych z pierwszych zajęć funkcję tabyl()
smoking_summary2 <- janitor::tabyl(county$smoking_ban) # dlaczego wyniki są "inne" niż w smoking_summary?
# Wyświetlenie wyniku
print(smoking_summary)
## # A tibble: 3 × 3
## smoking_ban count percentage
## <fct> <int> <dbl>
## 1 none 1927 61.3
## 2 partial 635 20.2
## 3 <NA> 580 18.5
# Tworzenie najprostszego wykresu kołowego
pie(smoking_summary$count,
labels = paste0(smoking_summary$smoking_ban,
" (",
round(smoking_summary$percentage, 1),
"%)"),
main = "Udział kategorii zmiennej 'smoking_ban'")
Wybierzmy ze zbioru tylko hrabstwa z Alabamy, które mają odsetek ubóstwa mniejszy niż mediana tego wskaźnika w całych Stanach Zjednoczonych.
county %>%
filter(state == "Alabama") %>%
filter(poverty < median(poverty)) # coś nie tak, dlaczego?
## # A tibble: 33 × 15
## name state pop2000 pop2010 pop2017 pop_change poverty homeownership
## <chr> <fct> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
## 1 Autauga County Alab… 43671 54571 55504 1.48 13.7 77.5
## 2 Baldwin County Alab… 140415 182265 212628 9.19 11.8 76.7
## 3 Bibb County Alab… 20826 22915 22668 0.73 15.2 82.9
## 4 Blount County Alab… 51024 57322 58013 0.68 15.6 82
## 5 Calhoun County Alab… 112249 118572 114728 -1.51 18.6 70.7
## 6 Chambers Coun… Alab… 36583 34215 33713 -1.2 18.8 71.4
## 7 Cherokee Coun… Alab… 23988 25989 25857 -0.6 16.1 77.5
## 8 Clay County Alab… 14254 13932 13367 -0.29 19.1 72.8
## 9 Cleburne Coun… Alab… 14123 14972 14900 -0.51 19.1 74.9
## 10 Coffee County Alab… 43615 49948 51874 2.42 16.1 69.7
## # ℹ 23 more rows
## # ℹ 7 more variables: multi_unit <dbl>, unemployment_rate <dbl>, metro <fct>,
## # median_edu <fct>, per_capita_income <dbl>, median_hh_income <int>,
## # smoking_ban <fct>
# a teraz?
county %>%
filter(poverty < median(poverty)) %>%
filter(state == "Alabama") # w ogóle nic?
## # A tibble: 0 × 15
## # ℹ 15 variables: name <chr>, state <fct>, pop2000 <dbl>, pop2010 <dbl>,
## # pop2017 <int>, pop_change <dbl>, poverty <dbl>, homeownership <dbl>,
## # multi_unit <dbl>, unemployment_rate <dbl>, metro <fct>, median_edu <fct>,
## # per_capita_income <dbl>, median_hh_income <int>, smoking_ban <fct>
# dla pewności chciałbym mieć na boku tę medianę
(poverty_median <- median(county$ poverty)) # dlaczego NA?
## [1] NA
(poverty_median <- median(county$ poverty, na.rm = T)) # teraz ok
## [1] 15.2
county %>%
filter(poverty < poverty_median) %>%
filter(state == "Alabama")
## # A tibble: 9 × 15
## name state pop2000 pop2010 pop2017 pop_change poverty homeownership
## <chr> <fct> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
## 1 Autauga County Alab… 43671 54571 55504 1.48 13.7 77.5
## 2 Baldwin County Alab… 140415 182265 212628 9.19 11.8 76.7
## 3 Coosa County Alab… 12202 11539 10754 -4.43 14.4 83.7
## 4 Elmore County Alab… 65874 79303 81677 1.39 13.5 77.6
## 5 Henry County Alab… 16310 17302 17147 0.1 13.7 81.9
## 6 Limestone Coun… Alab… 65676 82782 94402 6.19 14.8 77.1
## 7 Madison County Alab… 276700 334811 361046 4.24 13.6 70.4
## 8 St. Clair Coun… Alab… 64742 83593 88199 2.52 13.7 82.2
## 9 Shelby County Alab… 143293 195085 213605 4.76 8.3 80.6
## # ℹ 7 more variables: multi_unit <dbl>, unemployment_rate <dbl>, metro <fct>,
## # median_edu <fct>, per_capita_income <dbl>, median_hh_income <int>,
## # smoking_ban <fct>
Ilu mieszkańców ma Warszawa? W przybliżeni! Proszę wybrać ze zbioru hrabstwa wraz z przynależnością do stanu i informacją o liczbie mieszkańców, które były co najmniej tak samo liczne w roku 2010.
Warszawa <- 2000000
county %>%
filter(pop2010 > Warszawa) %>%
select(name, state, pop2010)
## # A tibble: 12 × 3
## name state pop2010
## <chr> <fct> <dbl>
## 1 Maricopa County Arizona 3817117
## 2 Los Angeles County California 9818605
## 3 Orange County California 3010232
## 4 Riverside County California 2189641
## 5 San Bernardino County California 2035210
## 6 San Diego County California 3095313
## 7 Miami-Dade County Florida 2496435
## 8 Cook County Illinois 5194675
## 9 Kings County New York 2504700
## 10 Queens County New York 2230722
## 11 Dallas County Texas 2368139
## 12 Harris County Texas 4092459
W jakim hrabstwie (i stanie) nikt nie jest właścicielem swojego mieszkania
county %>%
filter(homeownership == 0) %>%
select(name, state)
## # A tibble: 1 × 2
## name state
## <chr> <fct>
## 1 Kalawao County Hawaii
mutate()Proszę stworzyć nową zmienną, gdzie wyliczymy nominalną liczbę osób objętych ubóstwem w każdym powiecie, po czym posortujmy wynik malejąco względem nowo utworzonej zmiennej i dodajmy do zbioru. Pamiętajmy, że nie ma pół, czy ćwierć osoby, zatem sensownie zaokrąglijmy wyniki obliczeń. Dodajmy nową zmienną do zbioru.
county <- county %>%
mutate(poverty_pop = round(pop2010 * poverty / 100, 0)) %>% # Liczba osób żyjących w ubóstwie w danym hrabstwie (w wartościach bezwzględnych, a nie procentach)
arrange(desc(poverty_pop))
Proszę stworzyć nową zmienną, pop_increase, gdzie
wyliczymy (w procentach) zmianę liczby mieszkańców hrabstwa względem
ostatnich 10 lat. Proszę odpowiedzieć na pytanie, w których dziesięciu
hrabstwach ten przyrost był największy (użyj funkcji
top_n)?
county %>%
mutate(pop_increase = round((pop2010 - pop2000) / pop2000 * 100, 1)) %>%
arrange(desc(pop_increase)) %>%
select(name, state, pop_increase) %>%
top_n(10)
## Selecting by pop_increase
## # A tibble: 10 × 3
## name state pop_increase
## <chr> <fct> <dbl>
## 1 Kendall County Illinois 110.
## 2 Pinal County Arizona 109.
## 3 Flagler County Florida 92
## 4 Lincoln County South Dakota 85.8
## 5 Loudoun County Virginia 84.1
## 6 Rockwall County Texas 81.8
## 7 Forsyth County Georgia 78.4
## 8 Sumter County Florida 75.1
## 9 Paulding County Georgia 74.3
## 10 Sublette County Wyoming 73.1
# top_n(10, wt = pop_increase)
Proszę policzyć ile jest hrabstw w USA.
length(unique(county$name)) # na pewno?
## [1] 1877
length(unique(paste(county$state, county$name)))
## [1] 3142
# "alternatywnie" wiedząc, że wiersze to unikalne obserwacje
nrow(county)
## [1] 3142
# "alternatywnie"
county %>%
summarise(Liczba.hrabstw = n()) # n() gives the current group size
## # A tibble: 1 × 1
## Liczba.hrabstw
## <int>
## 1 3142
# albo po prostu...
county %>%
count()
## # A tibble: 1 × 1
## n
## <int>
## 1 3142
count()Funkcja, która może posłużyć nam do grupowania obserwacji (właściwie
ich zliczania). Najprostszym przykładem był właśnie kod
counties %>% count(), który zwrócił nam de
facto liczbę obserwacji w zbiorze.
Gdy funkcji count() damy jako argument konkretną
zmienną, policzy nam liczbę obserwacji w ramach tej zmiennej.
Proszę policzyć ile jest hrabstw w poszczególnych stanach i posortować wyniki malejąco. Który stan ma najwięcej counties?
county %>%
group_by(state) %>%
summarise(Liczba.powiatow = n()) %>%
arrange(desc(Liczba.powiatow))
## # A tibble: 51 × 2
## state Liczba.powiatow
## <fct> <int>
## 1 Texas 254
## 2 Georgia 159
## 3 Virginia 133
## 4 Kentucky 120
## 5 Missouri 115
## 6 Kansas 105
## 7 Illinois 102
## 8 North Carolina 100
## 9 Iowa 99
## 10 Tennessee 95
## # ℹ 41 more rows
# z użyciem count()
county %>%
count(state, sort = T)
## # A tibble: 51 × 2
## state n
## <fct> <int>
## 1 Texas 254
## 2 Georgia 159
## 3 Virginia 133
## 4 Kentucky 120
## 5 Missouri 115
## 6 Kansas 105
## 7 Illinois 102
## 8 North Carolina 100
## 9 Iowa 99
## 10 Tennessee 95
## # ℹ 41 more rows
Proszę policzyć ilu jest mieszkańców w poszczególnych stanach USA i posortować wyniki malejąco.
county %>%
group_by(state) %>%
summarise(Liczba.mieszkancow = sum(pop2010)) %>%
arrange(desc(Liczba.mieszkancow))
## # A tibble: 51 × 2
## state Liczba.mieszkancow
## <fct> <dbl>
## 1 California 37253956
## 2 Texas 25145561
## 3 New York 19378102
## 4 Florida 18801310
## 5 Illinois 12830632
## 6 Pennsylvania 12702379
## 7 Ohio 11536504
## 8 Michigan 9883640
## 9 Georgia 9687653
## 10 North Carolina 9535483
## # ℹ 41 more rows
# z użyciem count()
county %>%
count(state,
wt = pop2010,
sort = T)
## # A tibble: 51 × 2
## state n
## <fct> <dbl>
## 1 California 37253956
## 2 Texas 25145561
## 3 New York 19378102
## 4 Florida 18801310
## 5 Illinois 12830632
## 6 Pennsylvania 12702379
## 7 Ohio 11536504
## 8 Michigan 9883640
## 9 Georgia 9687653
## 10 North Carolina 9535483
## # ℹ 41 more rows
# argument wt służy do "przeważenia" kolumny n populacją
Proszę policzyć ilu jest nominalnie mieszkańców w poszczególnych stanach USA, którzy posiadają na własność mieszkanie lub dom.
county %>%
mutate(Liczba.wlascicieli = round(pop2010 * homeownership / 100, 0)) %>%
group_by(state) %>%
summarise(Liczba.wlascicieli = sum(Liczba.wlascicieli)) %>%
arrange(desc(Liczba.wlascicieli))
## # A tibble: 51 × 2
## state Liczba.wlascicieli
## <fct> <dbl>
## 1 California 21402616
## 2 Texas 16337912
## 3 Florida 13044295
## 4 New York 10799189
## 5 Pennsylvania 9020897
## 6 Illinois 8900375
## 7 Ohio 8002479
## 8 Michigan 7328298
## 9 Georgia 6541480
## 10 North Carolina 6488489
## # ℹ 41 more rows
# z użyciem count()
county %>%
mutate(Liczba.wlascicieli = round(pop2010 * homeownership / 100, 0)) %>%
count(state, wt = Liczba.wlascicieli, sort = T)
## # A tibble: 51 × 2
## state n
## <fct> <dbl>
## 1 California 21402616
## 2 Texas 16337912
## 3 Florida 13044295
## 4 New York 10799189
## 5 Pennsylvania 9020897
## 6 Illinois 8900375
## 7 Ohio 8002479
## 8 Michigan 7328298
## 9 Georgia 6541480
## 10 North Carolina 6488489
## # ℹ 41 more rows
# argument wt służy do "przeważenia" kolumny n liczbą właścicieli
summarize()Proszę policzyć ilu było mieszkańców USA w roku 2000.
county %>%
summarize(Liczba.ludnosci = sum(pop2000)) # jak to?
## # A tibble: 1 × 1
## Liczba.ludnosci
## <dbl>
## 1 NA
county %>%
summarize(Liczba.ludnosci = sum(pop2000, na.rm = T)) # no i git
## # A tibble: 1 × 1
## Liczba.ludnosci
## <dbl>
## 1 281411318
county %>%
count(wt = pop2000)
## # A tibble: 1 × 1
## n
## <dbl>
## 1 281411318
A jak by Państwo policzyli różnicę w liczbie mieszkańców USA w roku 2010 i 2000?
(Roznica <- sum(county$pop2010) - sum(county$pop2000, na.rm = T))
## [1] 27327998
county %>%
summarize(Liczba.ludnosci2000 = sum(pop2000, na.rm = T),
Liczba.ludnosci2010 = sum(pop2010)) %>%
mutate(Roznica = Liczba.ludnosci2010 - Liczba.ludnosci2000)
## # A tibble: 1 × 3
## Liczba.ludnosci2000 Liczba.ludnosci2010 Roznica
## <dbl> <dbl> <dbl>
## 1 281411318 308739316 27327998
Proszę znaleźć - z użyciem funkcji summarize() liczbę
mieszkańców USA w roku 2010 oraz średni roczny dochód
county %>%
summarise(Liczba.mieszkancow2010 = sum(pop2010),
Sredni.dochod = mean(median_hh_income)) # :(
## # A tibble: 1 × 2
## Liczba.mieszkancow2010 Sredni.dochod
## <dbl> <dbl>
## 1 308739316 NA
county %>%
summarise(Liczba.mieszkancow2010 = sum(pop2010),
Sredni.dochod = mean(median_hh_income, na.rm = T))
## # A tibble: 1 × 2
## Liczba.mieszkancow2010 Sredni.dochod
## <dbl> <dbl>
## 1 308739316 49765.
group_by()Proszę policzyć liczbę mieszkańców w roku 2010 oraz średnią dochodu na mieszkańca dla każdego ze stanów i posortować zbiór malejąco względem liczby ludności.
county %>%
group_by(state) %>%
summarise(Liczba.mieszkancow2010 = sum(pop2010),
Sredni.dochod = mean(median_hh_income)) %>%
arrange(desc(Sredni.dochod))
## # A tibble: 51 × 3
## state Liczba.mieszkancow2010 Sredni.dochod
## <fct> <dbl> <dbl>
## 1 District of Columbia 601723 77649
## 2 New Jersey 8791894 77048.
## 3 Connecticut 3574097 74496
## 4 Maryland 5773552 72541.
## 5 Massachusetts 6547629 71031.
## 6 Rhode Island 1052567 69906.
## 7 Hawaii 1360301 68663
## 8 New Hampshire 1316470 64902.
## 9 Delaware 897934 61295.
## 10 California 37253956 61047.
## # ℹ 41 more rows
Proszę stworzyć mały data.frame i wyrzucić go do
konsoli, zawierający podsumowanie o: minimalnej liczbie ludności w 2010,
maksymalnym wskaźniku ubóstwa i medianie dochodu
county %>%
summarise(min_pop = min(pop2010),
max_poverty = max(poverty, na.rm = T),
median_income = median(median_hh_income, na.rm = T)
)
## # A tibble: 1 × 3
## min_pop max_poverty median_income
## <dbl> <dbl> <dbl>
## 1 82 52 48072.
Jak wyżej, ale dla poszczególnych stanów.
county %>%
group_by(state) %>%
summarise(min_pop = min(pop2010),
max_poverty = max(poverty),
median_income = median(median_hh_income)
)
## # A tibble: 51 × 4
## state min_pop max_poverty median_income
## <fct> <dbl> <dbl> <dbl>
## 1 Alabama 9045 41.9 39293
## 2 Alaska 662 NA NA
## 3 Arizona 8437 35.9 47847
## 4 Arkansas 5368 33 37982
## 5 California 1175 27.1 56818.
## 6 Colorado 699 29.6 51457
## 7 Connecticut 118428 12.1 73187
## 8 Delaware 162310 13 57901
## 9 District of Columbia 601723 17.4 77649
## 10 Florida 8365 31.9 46511
## # ℹ 41 more rows
slice_max()Funkcja zwracająca najliczniejsze (największe) wartości obserwacji w każdej z grup. Przyjmuje dwa argumenty: zmienną, po której chcemy sortować oraz liczbę obserwacji, którą chcemy zwrotnie otrzymać. Przykład:
head(county %>%
group_by(state) %>%
slice_max(pop2010, n = 3),
9)
## # A tibble: 9 × 16
## # Groups: state [3]
## name state pop2000 pop2010 pop2017 pop_change poverty homeownership
## <chr> <fct> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
## 1 Jefferson Coun… Alab… 662047 658466 659197 0.07 17.6 66.8
## 2 Mobile County Alab… 399843 412992 413955 0.01 19.3 68.4
## 3 Madison County Alab… 276700 334811 361046 4.24 13.6 70.4
## 4 Anchorage Muni… Alas… 260283 291826 294356 -2.23 8.1 61.7
## 5 Fairbanks Nort… Alas… 82840 97581 99703 -1.18 7.7 59.8
## 6 Matanuska-Susi… Alas… 59322 88995 106532 11.1 9.8 79.2
## 7 Maricopa County Ariz… 3072149 3817117 4307033 7.51 15.7 66.3
## 8 Pima County Ariz… 843746 980263 1022769 2.82 18.3 64.6
## 9 Pinal County Ariz… 179727 375770 430237 12.0 15.5 77.7
## # ℹ 8 more variables: multi_unit <dbl>, unemployment_rate <dbl>, metro <fct>,
## # median_edu <fct>, per_capita_income <dbl>, median_hh_income <int>,
## # smoking_ban <fct>, poverty_pop <dbl>
slice_min()Analogicznie działa funkcja slice_min() zwracając jednak
wartości najmniejsze.
W sytuacji, w której mamy sporo zmiennych, które dotyczą podobnych,
interesujących nas cech, a w dodatku nazwy zmiennych zawierają słowa
kluczowe, po których rozpoznajemy, że są w zakresie naszych
zainteresowań, możemy się wspomóc select helpers’ami. Zachęcam
zajrzeć ?select_helpers Rozważmy poniższy przykład:
county %>%
select(state, contains("pop")) %>%
top_n(5) # wykorzystane zamiast head(), nie ma znaczenia merytorycznego w tym ćwiczeniu
## Selecting by poverty_pop
## # A tibble: 5 × 6
## state pop2000 pop2010 pop2017 pop_change poverty_pop
## <fct> <dbl> <dbl> <int> <dbl> <dbl>
## 1 California 9519338 9818605 10163507 1.45 1669163
## 2 Illinois 5376741 5194675 5211263 -0.75 825953
## 3 Texas 3400578 4092459 4652980 6.88 687533
## 4 Arizona 3072149 3817117 4307033 7.51 599287
## 5 New York 2465326 2504700 2648771 1.65 548529
Inny przykład:
county %>%
select(state, starts_with("pop")) %>%
top_n(5)
## Selecting by pop_change
## # A tibble: 5 × 5
## state pop2000 pop2010 pop2017 pop_change
## <fct> <dbl> <dbl> <int> <dbl>
## 1 Texas 97589 157107 214485 21.8
## 2 Texas 3344 3476 4408 32.1
## 3 Tennessee 7259 7870 10083 29.2
## 4 North Dakota 5737 6360 12724 37.2
## 5 Texas 67 82 134 26.4
Inny przykład:
county %>%
select(state, ends_with("income")) %>%
top_n(5)
## Selecting by median_hh_income
## # A tibble: 5 × 3
## state per_capita_income median_hh_income
## <fct> <dbl> <int>
## 1 Virginia 51812. 117515
## 2 Virginia 65872. 112138
## 3 Maryland 50492. 115576
## 4 Virginia 49457. 129588
## 5 Virginia 64175. 114795
Proszę wyrzucić do konsoli nazwy kolumn zbioru county, a następnie usunąć zmienną pop2000 ze zbioru.
names(county)
## [1] "name" "state" "pop2000"
## [4] "pop2010" "pop2017" "pop_change"
## [7] "poverty" "homeownership" "multi_unit"
## [10] "unemployment_rate" "metro" "median_edu"
## [13] "per_capita_income" "median_hh_income" "smoking_ban"
## [16] "poverty_pop"
county %>%
select(-pop2000) %>%
names()
## [1] "name" "state" "pop2010"
## [4] "pop2017" "pop_change" "poverty"
## [7] "homeownership" "multi_unit" "unemployment_rate"
## [10] "metro" "median_edu" "per_capita_income"
## [13] "median_hh_income" "smoking_ban" "poverty_pop"
Proszę zmienić nazwę kolumn pop2000 oraz
pop2010 na (kolejno) populacja2000 oraz
populacja2010
county %>%
rename(populacja2000 = pop2000,
populacja2010 = pop2010) %>%
top_n(5)
## Selecting by poverty_pop
## # A tibble: 5 × 16
## name state populacja2000 populacja2010 pop2017 pop_change poverty
## <chr> <fct> <dbl> <dbl> <int> <dbl> <dbl>
## 1 Los Angeles Coun… Cali… 9519338 9818605 1.02e7 1.45 17
## 2 Cook County Illi… 5376741 5194675 5.21e6 -0.75 15.9
## 3 Harris County Texas 3400578 4092459 4.65e6 6.88 16.8
## 4 Maricopa County Ariz… 3072149 3817117 4.31e6 7.51 15.7
## 5 Kings County New … 2465326 2504700 2.65e6 1.65 21.9
## # ℹ 9 more variables: homeownership <dbl>, multi_unit <dbl>,
## # unemployment_rate <dbl>, metro <fct>, median_edu <fct>,
## # per_capita_income <dbl>, median_hh_income <int>, smoking_ban <fct>,
## # poverty_pop <dbl>
# inaczej...
names(county)[3:4] <- c("populacja2000", "populacja2010")
# przywróćmy stare
names(county)[3:4] <- c("pop2000", "pop2010")
select() + rename()Gdybyśmy w trakcie wyboru kolumn chcieli w jednym kroku nadać im inne, bardziej intuicyjne dla nas nazwy, możemy zrobić tak:
county %>%
select(state,
populacja2000 = pop2000,
populacja2010 = pop2010) %>%
top_n(5)
## Selecting by populacja2010
## # A tibble: 5 × 3
## state populacja2000 populacja2010
## <fct> <dbl> <dbl>
## 1 California 9519338 9818605
## 2 Illinois 5376741 5194675
## 3 Texas 3400578 4092459
## 4 Arizona 3072149 3817117
## 5 California 2813833 3095313
transmute()Funkcja transmute() działa jak mutate(),
ale zachowuje tylko te kolumny, które wymienisz w funkcji - reszta
zostaje usunięta. Jest skrótem dla mutate() + select().
Przydatna, gdy chcemy stworzyć nowe zmienne i od razu pozbyć się
starych.
Rozważmy taki przykład. Liczyliśmy zmienną ile osób pozostaje w ubóstwie. Powtórzmy to ćwiczenie, przycinając jednocześnie nasza ramkę do niezbędnych zmiennych.
county %>%
transmute(state,
poverty_pop = round(pop2010 * poverty / 100, 0)) %>%
top_n(10)
## Selecting by poverty_pop
## # A tibble: 10 × 2
## state poverty_pop
## <fct> <dbl>
## 1 California 1669163
## 2 Illinois 825953
## 3 Texas 687533
## 4 Arizona 599287
## 5 New York 548529
## 6 Florida 474323
## 7 Michigan 431478
## 8 Texas 419161
## 9 California 411677
## 10 New York 411377
Wcześniejszy przykład z zadania, gdy nie znamy funkcji
transmiute():
county %>%
mutate(pop_increase = round((pop2010 - pop2000) / pop2000 * 100, 1)) %>%
select(name, state, pop_increase) %>%
arrange(desc(pop_increase)) %>%
top_n(10)
## Selecting by pop_increase
## # A tibble: 10 × 3
## name state pop_increase
## <chr> <fct> <dbl>
## 1 Kendall County Illinois 110.
## 2 Pinal County Arizona 109.
## 3 Flagler County Florida 92
## 4 Lincoln County South Dakota 85.8
## 5 Loudoun County Virginia 84.1
## 6 Rockwall County Texas 81.8
## 7 Forsyth County Georgia 78.4
## 8 Sumter County Florida 75.1
## 9 Paulding County Georgia 74.3
## 10 Sublette County Wyoming 73.1
W wersji nieco uproszczonej, gdy już ją znamy.
county %>%
transmute(name, # biorę
state, # to też
pop_increase = round((pop2010 - pop2000) / pop2000 * 100, 1)) %>% # tu liczę
arrange(desc(pop_increase)) %>% # tu posortuję
top_n(10) # i 10 najwyższych
## Selecting by pop_increase
## # A tibble: 10 × 3
## name state pop_increase
## <chr> <fct> <dbl>
## 1 Kendall County Illinois 110.
## 2 Pinal County Arizona 109.
## 3 Flagler County Florida 92
## 4 Lincoln County South Dakota 85.8
## 5 Loudoun County Virginia 84.1
## 6 Rockwall County Texas 81.8
## 7 Forsyth County Georgia 78.4
## 8 Sumter County Florida 75.1
## 9 Paulding County Georgia 74.3
## 10 Sublette County Wyoming 73.1
Hrabstwo Jefferson w stanie Alabama prowadzi program mający na
celu poprawę jakości życia mieszkańców. Zastanawiają się, jak ich
sytuacja wygląda na tle innych hrabstw Alabamy, zwłaszcza w kwestiach
ekonomicznych i społecznych. Chcieliby dowiedzieć się:
Czy ich wskaźnik ubóstwa oraz stopa bezrobocia są niższe, wyższe czy na poziomie średniej dla Alabamy.
Jak wygląda ich sytuacja w porównaniu do innych hrabstw pod względem dochodu na mieszkańca i medianowego dochodu gospodarstwa domowego.
Chcieliby także dowiedzieć się, czy wskaźnik posiadania własnego
domu (homeownership) oraz odsetek mieszkańców żyjących w
budynkach wielorodzinnych (multi_unit) różnią się znacząco
od średnich wartości dla stanu.
Poniżej kod, który wykona takie porównanie, dostarczając hrabstwu Jefferson odpowiedzi na ich pytania.
# Filtrowanie danych dla hrabstw w stanie Alabama
alabama_counties <- county %>%
filter(state == "Alabama")
# Wyliczanie średnich wskaźników dla hrabstw w stanie Alabama
alabama_averages <- alabama_counties %>%
summarise(
avg_poverty = mean(poverty, na.rm = TRUE),
avg_unemployment_rate = mean(unemployment_rate, na.rm = TRUE),
avg_per_capita_income = mean(per_capita_income, na.rm = TRUE),
avg_median_hh_income = mean(median_hh_income, na.rm = TRUE),
avg_homeownership = mean(homeownership, na.rm = TRUE),
avg_multi_unit = mean(multi_unit, na.rm = TRUE)
)
# Wybieranie danych dla hrabstwa Jefferson w Alabamie
jefferson_county <- county %>%
filter(state == "Alabama", name == "Jefferson County")
# Porównanie wskaźników hrabstwa Jefferson z średnimi dla Alabamy
comparison <- jefferson_county %>%
select(poverty, unemployment_rate,
per_capita_income, median_hh_income,
homeownership, multi_unit) %>%
mutate(
poverty_vs_avg = poverty - alabama_averages$avg_poverty,
unemployment_vs_avg = unemployment_rate - alabama_averages$avg_unemployment_rate,
per_capita_income_vs_avg = per_capita_income - alabama_averages$avg_per_capita_income,
median_hh_income_vs_avg = median_hh_income - alabama_averages$avg_median_hh_income,
homeownership_vs_avg = homeownership - alabama_averages$avg_homeownership,
multi_unit_vs_avg = multi_unit - alabama_averages$avg_multi_unit
)
# Wyświetlenie wyników porównania
print(comparison)
## # A tibble: 1 × 12
## poverty unemployment_rate per_capita_income median_hh_income homeownership
## <dbl> <dbl> <dbl> <int> <dbl>
## 1 17.6 4.24 29260. 49321 66.8
## # ℹ 7 more variables: multi_unit <dbl>, poverty_vs_avg <dbl>,
## # unemployment_vs_avg <dbl>, per_capita_income_vs_avg <dbl>,
## # median_hh_income_vs_avg <dbl>, homeownership_vs_avg <dbl>,
## # multi_unit_vs_avg <dbl>
babynames <- as_tibble(
read.csv("https://data.cityofnewyork.us/api/views/25th-nujf/rows.csv?accessType=DOWNLOAD")
) # source: https://catalog.data.gov/dataset/popular-baby-names
glimpse(babynames)
## Rows: 77,287
## Columns: 6
## $ Year.of.Birth <int> 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 201…
## $ Gender <chr> "FEMALE", "FEMALE", "FEMALE", "FEMALE", "FEMALE", "…
## $ Ethnicity <chr> "HISPANIC", "HISPANIC", "HISPANIC", "HISPANIC", "HI…
## $ Child.s.First.Name <chr> "GERALDINE", "GIA", "GIANNA", "GISELLE", "GRACE", "…
## $ Count <int> 13, 21, 49, 38, 36, 26, 126, 14, 17, 17, 13, 10, 15…
## $ Rank <int> 75, 67, 42, 51, 53, 62, 8, 74, 71, 71, 75, 78, 73, …
Proszę wybrać ze zbioru tylko dwa imiona, Bruno i Lena, i przypisać
wyniki do ramki LenaBruno.
LenaBruno <- babynames %>%
filter(Child.s.First.Name %in% c("Lena", "LENA", "Bruno"))
LenaBruno %>%
top_n(10)
## Selecting by Rank
## # A tibble: 11 × 6
## Year.of.Birth Gender Ethnicity Child.s.First.Name Count Rank
## <int> <chr> <chr> <chr> <int> <int>
## 1 2012 FEMALE WHITE NON HISP LENA 15 78
## 2 2012 FEMALE WHITE NON HISP LENA 15 78
## 3 2012 FEMALE WHITE NON HISP LENA 15 78
## 4 2017 MALE HISPANIC Bruno 11 88
## 5 2012 FEMALE WHITE NON HISP LENA 15 78
## 6 2016 FEMALE WHITE NON HISPANIC Lena 16 78
## 7 2015 MALE HISPANIC Bruno 10 99
## 8 2012 FEMALE WHITE NON HISP LENA 15 78
## 9 2012 FEMALE WHITE NON HISP LENA 15 78
## 10 2012 FEMALE WHITE NON HISP LENA 15 78
## 11 2012 FEMALE WHITE NON HISP LENA 15 78
Proszę wybrać najpopularniejsze imiona w danym roku
najpopularniejszeImiona <- babynames %>%
group_by(Year.of.Birth) %>%
top_n(1, Count) # wybieramy jeden wiersz z najwyższą wartością zmiennej `Count`
# czego przy okazji dowiadujemy się o zbiorze?
# na jakim poziomie nadawany jest rank?
# czy zbiór ma unikalne wiersze?
# babynames2 <- unique(babynames)
# nrow(babynames) - nrow(babynames2)
Proszę wybrać najpopularniejsze 10 imion w roku 2011 (użyj funkcji
top_n() w odpowiednim kontekście)
babynames %>%
filter(Year.of.Birth == 2011) %>%
# arrange(desc(Count))
top_n(10, Count)
## # A tibble: 15 × 6
## Year.of.Birth Gender Ethnicity Child.s.First.Name Count Rank
## <int> <chr> <chr> <chr> <int> <int>
## 1 2011 FEMALE HISPANIC ISABELLA 331 1
## 2 2011 FEMALE HISPANIC ISABELLA 331 1
## 3 2011 MALE HISPANIC JAYDEN 426 1
## 4 2011 FEMALE HISPANIC ISABELLA 331 1
## 5 2011 MALE HISPANIC JAYDEN 426 1
## 6 2011 FEMALE HISPANIC ISABELLA 331 1
## 7 2011 MALE HISPANIC JAYDEN 426 1
## 8 2011 FEMALE HISPANIC ISABELLA 331 1
## 9 2011 MALE HISPANIC JAYDEN 426 1
## 10 2011 FEMALE HISPANIC ISABELLA 331 1
## 11 2011 MALE HISPANIC JAYDEN 426 1
## 12 2011 MALE HISPANIC JAYDEN 426 1
## 13 2011 FEMALE HISPANIC ISABELLA 331 1
## 14 2011 MALE HISPANIC JAYDEN 426 1
## 15 2011 FEMALE HISPANIC ISABELLA 331 1
i jeszcze takie dwa przykłady utrwalające i pokazujące różnicę w funkcjach
Możemy stworzyć podsumowanie liczby urodzonych dzieci w danym
roku…
babynames %>%
group_by(Year.of.Birth) %>%
summarise(lacznie = sum(Count))
## # A tibble: 11 × 2
## Year.of.Birth lacznie
## <int> <int>
## 1 2011 541525
## 2 2012 557042
## 3 2013 540062
## 4 2014 544078
## 5 2015 69600
## 6 2016 68740
## 7 2017 65395
## 8 2018 63314
## 9 2019 60696
## 10 2020 53309
## 11 2021 52603
Ale również możemy sobie dodać tę zmienną do każdego wiersza. Będzie potrzebna, jeśli przyszłoby nam do głowy policzyć np. udziały poszczególnych imion wśród wszystkich nadanych
babynames %>%
group_by(Year.of.Birth) %>%
mutate(lacznie = sum(Count)) %>%
select(Year.of.Birth, Child.s.First.Name, Count, Rank, lacznie)
## # A tibble: 77,287 × 5
## # Groups: Year.of.Birth [11]
## Year.of.Birth Child.s.First.Name Count Rank lacznie
## <int> <chr> <int> <int> <int>
## 1 2011 GERALDINE 13 75 541525
## 2 2011 GIA 21 67 541525
## 3 2011 GIANNA 49 42 541525
## 4 2011 GISELLE 38 51 541525
## 5 2011 GRACE 36 53 541525
## 6 2011 GUADALUPE 26 62 541525
## 7 2011 HAILEY 126 8 541525
## 8 2011 HALEY 14 74 541525
## 9 2011 HANNAH 17 71 541525
## 10 2011 HAYLEE 17 71 541525
## # ℹ 77,277 more rows
Dawniej, żeby jednak zrobić to sensownie, musieliśmy zastosować
funkcję ungroup()
babynames %>%
group_by(Year.of.Birth) %>%
mutate(lacznie = sum(Count)) %>%
ungroup() %>% # to ta rzeczona nowość
mutate(odsetek = Count / lacznie) %>%
select(Year.of.Birth, Child.s.First.Name, Count, Rank, lacznie)
## # A tibble: 77,287 × 5
## Year.of.Birth Child.s.First.Name Count Rank lacznie
## <int> <chr> <int> <int> <int>
## 1 2011 GERALDINE 13 75 541525
## 2 2011 GIA 21 67 541525
## 3 2011 GIANNA 49 42 541525
## 4 2011 GISELLE 38 51 541525
## 5 2011 GRACE 36 53 541525
## 6 2011 GUADALUPE 26 62 541525
## 7 2011 HAILEY 126 8 541525
## 8 2011 HALEY 14 74 541525
## 9 2011 HANNAH 17 71 541525
## 10 2011 HAYLEE 17 71 541525
## # ℹ 77,277 more rows
Jak wykażemy zaraz empirycznie, pozbawienie kodu funkcji
ungroup() nie zmienia teraz wiele w wynikach.
babynames %>%
group_by(Year.of.Birth) %>%
mutate(lacznie = sum(Count)) %>%
mutate(odsetek = Count / lacznie) %>%
select(Year.of.Birth, Child.s.First.Name, Count, Rank, lacznie)
## # A tibble: 77,287 × 5
## # Groups: Year.of.Birth [11]
## Year.of.Birth Child.s.First.Name Count Rank lacznie
## <int> <chr> <int> <int> <int>
## 1 2011 GERALDINE 13 75 541525
## 2 2011 GIA 21 67 541525
## 3 2011 GIANNA 49 42 541525
## 4 2011 GISELLE 38 51 541525
## 5 2011 GRACE 36 53 541525
## 6 2011 GUADALUPE 26 62 541525
## 7 2011 HAILEY 126 8 541525
## 8 2011 HALEY 14 74 541525
## 9 2011 HANNAH 17 71 541525
## 10 2011 HAYLEE 17 71 541525
## # ℹ 77,277 more rows
Okazuje się bowiem, że w przypadku najnowszych wersji
dplyr (od wersji 1.0.0) zmieniło się zachowanie grupowania
po wykonaniu operacji mutate(). Teraz, po
wywołaniumutate() na grupowanych danych, dplyr domyślnie
usuwa grupowanie po wykonaniu operacji, co oznacza, że w wielu
przypadkach nie musimy już wywoływać ungroup(). Kiedyś brak
rozgrupowania powodował, że grupowanie było wykonywane milcząco, w
trakcie dalszego używania ramki danych raz zgrupowanej.
Znajdź najbardziej popularne imię wszech czasów dla każdego roku, płci i grupy etnicznej.
babynames %>%
group_by(Year.of.Birth, Gender) %>%
top_n(1, Count) %>%
arrange(Year.of.Birth, Ethnicity, Gender)
## # A tibble: 72 × 6
## # Groups: Year.of.Birth, Gender [22]
## Year.of.Birth Gender Ethnicity Child.s.First.Name Count Rank
## <int> <chr> <chr> <chr> <int> <int>
## 1 2011 FEMALE HISPANIC ISABELLA 331 1
## 2 2011 FEMALE HISPANIC ISABELLA 331 1
## 3 2011 FEMALE HISPANIC ISABELLA 331 1
## 4 2011 FEMALE HISPANIC ISABELLA 331 1
## 5 2011 FEMALE HISPANIC ISABELLA 331 1
## 6 2011 FEMALE HISPANIC ISABELLA 331 1
## 7 2011 FEMALE HISPANIC ISABELLA 331 1
## 8 2011 FEMALE HISPANIC ISABELLA 331 1
## 9 2011 MALE HISPANIC JAYDEN 426 1
## 10 2011 MALE HISPANIC JAYDEN 426 1
## # ℹ 62 more rows
# lub
babynames %>%
group_by(Year.of.Birth, Gender) %>%
slice_max(Count, n = 1, with_ties = FALSE) %>% # lepszy wariant jeśli chcemy dokładnie 1 wiersz na grupę, nawet przy remisach
arrange(Year.of.Birth, Ethnicity, Gender)
## # A tibble: 22 × 6
## # Groups: Year.of.Birth, Gender [22]
## Year.of.Birth Gender Ethnicity Child.s.First.Name Count Rank
## <int> <chr> <chr> <chr> <int> <int>
## 1 2011 FEMALE HISPANIC ISABELLA 331 1
## 2 2011 MALE HISPANIC JAYDEN 426 1
## 3 2012 FEMALE HISPANIC ISABELLA 327 1
## 4 2012 MALE HISPANIC JAYDEN 364 1
## 5 2013 FEMALE HISPANIC Isabella 326 1
## 6 2013 MALE HISPANIC Jayden 352 1
## 7 2014 FEMALE HISPANIC Isabella 331 1
## 8 2014 MALE HISPANIC Liam 312 1
## 9 2015 FEMALE HISPANIC Isabella 307 1
## 10 2015 MALE HISPANIC Liam 356 1
## # ℹ 12 more rows
Sprawdź imię “Elsa”, które miało gwałtowny wzrost popularności tuż po premierze popularnego filmu Frozen w 2013 roku.
babynames %>%
filter(Child.s.First.Name == "Elsa" & Year.of.Birth >= 2010) %>%
arrange(Year.of.Birth) %>%
mutate(Change = Count - lag(Count, default = 0)) %>% # ?lag()
filter(Change > 0) %>% # Imię rosło na popularności
select()
## # A tibble: 9 × 0
datacamp.com Data Manipulation with dplyr
datacamp.com Introduction to the Tidyverse
datacamp.com Data Manipulation with dplyr
Materiały z warsztatów Data Science w zastosowaniach biznesowych - Warsztaty z wykorzystaniem programu R Uniwersytet Warszawski, Wydział Nauk Ekonomicznych
DataCamp.com Introduction to R
DataCamp.com Writing Efficient R Code
Eugene O’Loughlin tutorial
Materiały dr Bartosza Maćkiewicza:
Biecek, Przemysław, “Przewodnik po pakiecie R” http://www.biecek.pl/R/ https://cran.r-project.org/doc/contrib/Biecek-R-basics.pdf
Gągolewski, Marek, “Programowanie w języku R”, “Deep R Programming”, etc. https://deepr.gagolewski.com/index.html
Crawley, Michael J. The R book. John Wiley & Sons, 2012 https://onlinelibrary.wiley.com/doi/book/10.1002/9781118448908
Kabacoff, Robert. R in action: data analysis and graphics with R. Manning Publications Co., 2015 https://www.cs.uni.edu/~jacobson/4772/week11/R_in_Action.pdf
Fox, John, Michael Friendly, and Sanford Weisberg. “Hypothesis tests for multivariate linear models using the car package.” R J 5.1 (2013) https://www.researchgate.net/publication/285736465_Hypothesis_Tests_for_Multivariate_Linear_Models_Using_the_car_Package
Hothorn, Torsten, et al. “Package ‘multcomp’.” Simultaneous inference in general parametric models. Project for Statistical Computing, Vienna, Austria (2016) https://cran.r-project.org/web/packages/multcomp/vignettes/generalsiminf.pdf
claude.ai
chatgpt.com