#('create_datasets.R')
library(readr)
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
library(ggplot2)
library(openintro)
## Loading required package: airports
## Loading required package: cherryblossom
## Loading required package: usdata
cars <- read.csv("https://assets.datacamp.com/production/course_1796/datasets/cars04.csv")
comics <- read.csv("https://assets.datacamp.com/production/course_1796/datasets/comics.csv")
life <- read.csv("https://assets.datacamp.com/production/course_1796/datasets/life_exp_raw.csv")
head(comics)
##                                    name      id   align        eye       hair
## 1             Spider-Man (Peter Parker)  Secret    Good Hazel Eyes Brown Hair
## 2       Captain America (Steven Rogers)  Public    Good  Blue Eyes White Hair
## 3 Wolverine (James \\"Logan\\" Howlett)  Public Neutral  Blue Eyes Black Hair
## 4   Iron Man (Anthony \\"Tony\\" Stark)  Public    Good  Blue Eyes Black Hair
## 5                   Thor (Thor Odinson) No Dual    Good  Blue Eyes Blond Hair
## 6            Benjamin Grimm (Earth-616)  Public    Good  Blue Eyes    No Hair
##   gender  gsm             alive appearances first_appear publisher
## 1   Male <NA> Living Characters        4043       Aug-62    marvel
## 2   Male <NA> Living Characters        3360       Mar-41    marvel
## 3   Male <NA> Living Characters        3061       Oct-74    marvel
## 4   Male <NA> Living Characters        2961       Mar-63    marvel
## 5   Male <NA> Living Characters        2258       Nov-50    marvel
## 6   Male <NA> Living Characters        2255       Nov-61    marvel

#Explanation : Dataset comics berisikan 11 kolom, dengan 10 kolom memiliki tipe data karakter, dan 1 kolom yakni appearances bertipe data integer. Name adalah nama dari karakter comics, id menunjukkan identitasnya, rahasia atau terbuka. Align adalah peran dari karakter. Eye adalah warna mata karakter. Hair warna rambut, gender, gsm, alive whether the characters deceased or living. First appear, the date when they appear at first, and last publisher name.

#check levels of align
levels(comics$align)
## NULL
comics$align <- as.factor(comics$align)
levels(comics$align)
## [1] "Bad"                "Good"               "Neutral"           
## [4] "Reformed Criminals"

#Explanation : Align (Keselerasan) dalam datasets comics terdiri atas bad, neutral, good, atau reformed criminals.

#check levels of gender
gender <- as.factor(comics$gender)
levels(gender)
## [1] "Female" "Male"   "Other"

#Explanation : Gender dalam comics terdiri atas female, male dan juga other.

#create 2 way contigency table
table(comics$align, comics$gender)
##                     
##                      Female Male Other
##   Bad                  1573 7561    32
##   Good                 2490 4809    17
##   Neutral               836 1799    17
##   Reformed Criminals      1    2     0

#Explanation : Most of female character has bad good align, most of male character has bad aligns and gender other has bad aligns.

# Print tab
tab <- table(comics$align, comics$gender)
tab
##                     
##                      Female Male Other
##   Bad                  1573 7561    32
##   Good                 2490 4809    17
##   Neutral               836 1799    17
##   Reformed Criminals      1    2     0
# Remove align level
comics <- comics %>% filter(align != 'Reformed Criminals') %>%
  droplevels()

levels(comics$align)
## [1] "Bad"     "Good"    "Neutral"
# %>% = forward pipe operator

#Explanation : Menghapus elemen reformed criminals untuk membuat proses analisis lebih ringkas. Jika dibandingkan dengan align lain, reformed Criminals tidak memiliki banyak elemen sehingga tidak berpengaruh besar terhadap hasil akhir dataset.

Side-by-side barcharts

# Create side-by-side barchart of gender by alignment
ggplot(comics, aes(x = align, fill = gender)) + 
  geom_bar(position = 'dodge')

Terdapat 3 align, bad, good dan neutral. Dari setiap align, semuanya didominasi oleh gender male. Kemudian diikuti tingginya bar chart gender female, NA dan terakhir other.

# Create side-by-side barchart of alignment by gender
ggplot(comics, aes(x=gender, fill = align)) +
  geom_bar(position = 'dodge') + 
  theme(axis.text.x = element_text(angle = 90))

Terdapat NA sebagai nilai yang tidak diketahui. Male merupakan bar tertinggi di setiap jenis align, diikuti gender female kemudian NA. Sedangkan other adalah gender dengan bar terendah di setiap align. Dapat disimpulkan, gender laki-laki menjadi mayoritas di setiap align.

#Count vs Proportions

# simplify display format
options(scipen = 999, digits = 3)

## create table of counts
tbl_cnt <- table(comics$id, comics$align)
tbl_cnt
##          
##            Bad Good Neutral
##   No Dual  474  647     390
##   Public  2172 2930     965
##   Secret  4493 2475     959
##   Unknown    7    0       2

Tabel menunjukkan banyaknya variabel align yang memiliki variabel id. Karakter yang memiliki align bad, kebanyakan merahasiakan identitasnya. Kemudian, karakter yang memiliki align good (peran baik, ex. superhero) kebanyakan tidak merahasiakan identitasnya (public). Terakhir karakter dengan neutral align (peran netral) paling banyak tidak merahasiakan identitasnya (public).

# Proportional table
# All values add up to 1
prop.table(tbl_cnt)
##          
##                Bad     Good  Neutral
##   No Dual 0.030553 0.041704 0.025139
##   Public  0.140003 0.188862 0.062202
##   Secret  0.289609 0.159533 0.061815
##   Unknown 0.000451 0.000000 0.000129

#Explanation : Banyaknya karakter komik yang memiliki align bad(peran buruk) dan merahasiakan identitasnya mencapai hampir 29%. Kemudian 18% dari keseluruhan dimiliki oleh karakter dengan align good(peran baik) dan identitas yang dipublikasikan. Lalu mayoritas dari karakter dengan peran netral memiliki identitas yang dipublikasi, yaitu sebanyak lebih dari 6%.

sum(prop.table(tbl_cnt))
## [1] 1

#Explanation : Tabel proporsi di atas secara keseluruhan berjumlah 1 sehingga dapat dideklarasikan dalam bentuk persentase.

prop.table(tbl_cnt, 1)
##          
##             Bad  Good Neutral
##   No Dual 0.314 0.428   0.258
##   Public  0.358 0.483   0.159
##   Secret  0.567 0.312   0.121
##   Unknown 0.778 0.000   0.222

#Explanation : Berbeda dengan tabel sebelumnya, proporsi tabel kali ini dihitung berdasarkan baris / variabel identity(id). Berdasarkan tabel, mayoritas dari no dual berasal dari karakter dengan align good(peran baik), yakni mencapai 42,8% dari keseluruhan no dual. Mayoritas dari public, adalah karakter dengan peran baik dengan persentase 48,3%. Kemudian karakter dengan bad align yang menjadi mayoritas identitas secret (56,7%). Terakhir untuk variabel unknown didominasi karakter dengan bad align (7,78%).

prop.table(tbl_cnt, 2)
##          
##                Bad     Good  Neutral
##   No Dual 0.066331 0.106907 0.168394
##   Public  0.303946 0.484137 0.416667
##   Secret  0.628743 0.408956 0.414076
##   Unknown 0.000980 0.000000 0.000864

#Explanation : Proporsi tabel kali ini dihitung berdasarkan kolom/variabel align. Align Bad didominasi oleh karakter yang identitasnya dirahasiakan, good paling banyak diisi oleh karakter dengan identitas publik, dan karakter terbanyak dengan peran netral memiliki identitas yang dipublikasi.

ggplot(comics, aes(x = id, fill = align)) + 
  geom_bar(position = "fill") + 
  ylab("proportion")

#Explanation : Berdasarkan geombar, kita dapat mengetahui data paling banyak di setiap variabel id dengan melihat besarnya area yang dimiliki setiap elemen align. Bad align adalah data paling banyak di setiap elemen variabel id, kecuali public dengan Good align sebagai data terbanyak.

ggplot(comics, aes(x = align, fill = id)) + 
  geom_bar(position = "fill") + 
  ylab("proportion")

#Explanation : Geom bar di atas menunjukkan banyaknya data id dalam variabel align. Geom bar menunjukkan proporsi data dengan area yang digambarkan. Semakin besar areanya, maka semakin banyak datanya. Identitas secret memiliki bad align terbanyak, dan identitas publik memiliki good align dan neutral align paling banyak dibanding yang lain.

#Conditional Proportions

tab <- table(comics$align, comics$gender)
options(scipen = 999, digits = 3) # Print fewer digits
prop.table(tab)     # Joint proportions
##          
##             Female     Male    Other
##   Bad     0.082210 0.395160 0.001672
##   Good    0.130135 0.251333 0.000888
##   Neutral 0.043692 0.094021 0.000888

#Explanation : Proporsi ini merupakan joint/gabungan, sehingga keseluruhan dari data adalah 1 atau 100%. Data tersebut menunjukkan banyaknya karakter dengan gender female yang memiliki align good adalah 13% dari keseluruhan, kemudian male dengan align bad berjumlah 39,5%, dan 25% dari data adalah male dengan good align.

prop.table(tab, 2)
##          
##           Female  Male Other
##   Bad      0.321 0.534 0.485
##   Good     0.508 0.339 0.258
##   Neutral  0.171 0.127 0.258

#Explanation : Proporsi tabel dihitung berdasarkan kolom/variabel gender. Pada gender Female, lebih dari 50% memiliki align good, kemudian pada gender male, lebih dari 50% berisikan karakter dengan bad align, dan gender other didominasi oleh karakter dengan peran buruk(bad align).

# Plot of gender by align
ggplot(comics, aes(x = align, fill = gender)) +
  geom_bar()

#Explanation : Geom bar di atas menunjukkan banyaknya data gender dalam variabel align berdasarkan jumlahnya, bukan areanya. Gender male memiliki data terbanyak di setiap elemen variabel align.

# Plot proportion of gender, conditional on align
ggplot(comics, aes(x = align, fill = gender)) + 
  geom_bar(position = "fill")

#Explanation : Geom bar di atas menunjukkan banyaknya data gender dalam variabel align. Geom bar menunjukkan proporsi data dengan area yang digambarkan. Semakin besar areanya, maka semakin banyak datanya. Gender male memiliki data terbanyak di setiap elemen variabel align.

# Can use table function on just one variable
# This is called a marginal distribution
table(comics$id)
## 
## No Dual  Public  Secret Unknown 
##    1511    6067    7927       9

#Explanation : Identitas secret merupakan identitas yang paling banyak digunakan dalam dataset.

# Simple barchart
ggplot(comics, aes(x = id)) + 
  geom_bar()

#Explanation : Geom bar di atas ini menunjukkan banyaknya data berdasarkan variabel identitasnya. Bar tertinggi adalah secret, dan bar terendah adalah unknown.

ggplot(comics, aes(x = id)) + 
  geom_bar() + 
  facet_wrap(~align)

#Explanation : Geom bar di atas menunjukkan banyaknya data dengan variabel identitas yang dikelompokkan berdasarkan variabel align. Pada align bad, secret merupakan bar tertinggi dan unknown sebagai bar terendah. Pada align good, bar tertinggi adalah identitas public dan bar terendah no dual, serta tidak ada data unknown. Dan pada align neutral, data public mendominasi diikuti dengan data secret yang memiliki selisih tidak jauh, dan data terendah adalah unknown.

# Change the order of the levels in align
comics$align <- factor(comics$align, 
                       levels = c("Bad", "Neutral", "Good"))

# Create plot of align
ggplot(comics, aes(x = align)) + 
  geom_bar()

#Explanation : Dari geom bar, diketahui bad align sebagai mayoritas memiliki jumlah lebih dari 7500, dan neutral data terendah dengan jumlah tidak lebih dari 5000.

# Plot of alignment broken down by gender
ggplot(comics, aes(x = align)) + 
  geom_bar() +
  facet_wrap(~ gender)

#Explanation : Geom bar diatas menunjukkan jumlah setiap variabel align yang dikelompokkan berdasarkan variabel gender. Female didominasi oleh elemen good, Male, other dan NA didominasi oleh elemen bad.

pies <- data.frame(flavors = as.factor(rep(c("apple", "blueberry", "boston creme", "cherry", "key lime", "pumpkin", "strawberry"), times = c(17, 14, 15, 13, 16, 12, 11))))
# Put levels of flavor in decending order
lev <- c("apple", "key lime", "boston creme", "blueberry", "cherry", "pumpkin", "strawberry")
pies$flavor <- factor(pies$flavor, levels = lev)

head(pies$flavor)
## [1] apple apple apple apple apple apple
## Levels: apple key lime boston creme blueberry cherry pumpkin strawberry
# Create barchart of flavor
ggplot(pies, aes(x = flavor)) + 
  geom_bar(fill = "chartreuse") + 
  theme(axis.text.x = element_text(angle = 90))

#Explanation : Berdasarkan barchart, rasa yang paling banyak adalah apel dan paling sedikit adalah stroberi.

#Exploring Numerical Data

# Learn data structure
str(cars)
## 'data.frame':    428 obs. of  19 variables:
##  $ name       : chr  "Chevrolet Aveo 4dr" "Chevrolet Aveo LS 4dr hatch" "Chevrolet Cavalier 2dr" "Chevrolet Cavalier 4dr" ...
##  $ sports_car : logi  FALSE FALSE FALSE FALSE FALSE FALSE ...
##  $ suv        : logi  FALSE FALSE FALSE FALSE FALSE FALSE ...
##  $ wagon      : logi  FALSE FALSE FALSE FALSE FALSE FALSE ...
##  $ minivan    : logi  FALSE FALSE FALSE FALSE FALSE FALSE ...
##  $ pickup     : logi  FALSE FALSE FALSE FALSE FALSE FALSE ...
##  $ all_wheel  : logi  FALSE FALSE FALSE FALSE FALSE FALSE ...
##  $ rear_wheel : logi  FALSE FALSE FALSE FALSE FALSE FALSE ...
##  $ msrp       : int  11690 12585 14610 14810 16385 13670 15040 13270 13730 15460 ...
##  $ dealer_cost: int  10965 11802 13697 13884 15357 12849 14086 12482 12906 14496 ...
##  $ eng_size   : num  1.6 1.6 2.2 2.2 2.2 2 2 2 2 2 ...
##  $ ncyl       : int  4 4 4 4 4 4 4 4 4 4 ...
##  $ horsepwr   : int  103 103 140 140 140 132 132 130 110 130 ...
##  $ city_mpg   : int  28 28 26 26 26 29 29 26 27 26 ...
##  $ hwy_mpg    : int  34 34 37 37 37 36 36 33 36 33 ...
##  $ weight     : int  2370 2348 2617 2676 2617 2581 2626 2612 2606 2606 ...
##  $ wheel_base : int  98 98 104 104 104 105 105 103 103 103 ...
##  $ length     : int  167 153 183 183 183 174 174 168 168 168 ...
##  $ width      : int  66 66 69 68 69 67 67 67 67 67 ...

#Explanation : Terdapat 19 variabel, 7 diantaranya bertipe data logi, 1 variabel karakter, 1 variabel numerik dan sisanya variabel integer.

# A dot plot shows all the datapoints
ggplot(cars, aes(x = weight)) + 
  geom_dotplot(dotsize = 0.4)
## Bin width defaults to 1/30 of the range of the data. Pick better value with `binwidth`.
## Warning: Removed 2 rows containing non-finite values (stat_bindot).

#Explanation : geom bar di atas menunjukkan jumlah weight yang dimiliki setiap mobil. Berat mobil yang paling banyak dimiliki mobil berkisar antara 3000 - 4000.

# A histogram groups the points into bins so it does not get overwhelming
ggplot(cars, aes(x = weight)) + 
  geom_histogram(dotsize = 0.4, binwidth = 500)
## Warning: Ignoring unknown parameters: dotsize
## Warning: Removed 2 rows containing non-finite values (stat_bin).

#Explanation : Berdasarkan histogram di atas, mayoritas berat mobil pada dataset berada pada kisaran 3000-4000.

# A density plot gives a bigger picture representation of the distribution
# It more helpful when there is a lot of data
ggplot(cars, aes(x = weight)) + 
  geom_density()
## Warning: Removed 2 rows containing non-finite values (stat_density).

#Explanation : Density plot menunjukkan distribusi dataset, selain itu density plot juga menunjukkan mayoritas data, yakni berada pada 3000-4000.

# A boxplot is a good way to just show the summary info of the distriubtion
ggplot(cars, aes(x = 1, y = weight)) + 
  geom_boxplot() +
  coord_flip()
## Warning: Removed 2 rows containing non-finite values (stat_boxplot).

#Explanation : Dari boxplot, ditunjukkan mayoritas data berat mobil berada pada 3000-4000.

# Create faceted histogram
ggplot(cars, aes(x = city_mpg)) +
  geom_histogram() +
  facet_wrap(~ suv)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 14 rows containing non-finite values (stat_bin).

#Explanation : mayoritas mobil dengan suv(sport utility vehicle) tidak memiliki city mpg(miles per galon)

unique(cars$ncyl)
## [1]  4  6  3  8  5 12 10 -1

#Explanation : Mobil pada datset memiliki silinder -1, 3, 4, 5, 6, 8, 10, atau 12.

table(cars$ncyl)
## 
##  -1   3   4   5   6   8  10  12 
##   2   1 136   7 190  87   2   3

#Explanation : Mayoritas mobil memiliki 4, 6 atau 8 silinder.

# Filter cars with 4, 6, 8 cylinders
common_cyl <- filter(cars, ncyl %in% c(4,6,8))

# Create box plots of city mpg by ncyl
ggplot(common_cyl, aes(x = as.factor(ncyl), y = city_mpg)) +
  geom_boxplot()
## Warning: Removed 11 rows containing non-finite values (stat_boxplot).

#Explanation : Menggunakan data silinder 4, 6 dan 8 karena data yang lain hanya sedikit sehingga tidak memberikan perubahan besar jika dihapus.Dari boxplot, 4 merupakan banyaknya silinder yang paling banyak dipakai berkisar antara 20-30.

# Create overlaid density plots for same data
ggplot(common_cyl, aes(x = city_mpg, fill = as.factor(ncyl))) +
  geom_density(alpha = .3)
## Warning: Removed 11 rows containing non-finite values (stat_density).

#Explanation : silinder 4 memiliki distribusi yang paling bagus dibanding yang lain.

# Create hist of horsepwr
cars %>%
  ggplot(aes(horsepwr)) +
  geom_histogram() +
  ggtitle("Horsepower distribution")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

#Explanation : Mayoritas mobil memiliki horsepower di antara 200-250.

# Create hist of horsepwr for affordable cars
cars %>% 
  filter(msrp < 25000) %>%
  ggplot(aes(horsepwr)) +
  geom_histogram() +
  xlim(c(90, 550)) +
  ggtitle("Horsepower distribtion for msrp < 25000")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 1 rows containing non-finite values (stat_bin).
## Warning: Removed 2 rows containing missing values (geom_bar).

#Explanation : Untuk harga yang lebih terjangkau, mayoritas mobilnya memiliki horsepower antara 100-200.

# Create hist of horsepwr with binwidth of 3
cars %>%
  ggplot(aes(horsepwr)) +
  geom_histogram(binwidth = 3) +
  ggtitle("binwidth = 3")

# Create hist of horsepwr with binwidth of 30
cars %>%
  ggplot(aes(horsepwr)) +
  geom_histogram(binwidth = 30) +
  ggtitle("binwidth = 30")

#Explanation : Mayoritas mobil menggunakan horsepower 200-250.

# Create hist of horsepwr with binwidth of 60
cars %>%
  ggplot(aes(horsepwr)) +
  geom_histogram(binwidth = 60) +
  ggtitle("binwidth = 60")

# Construct box plot of msrp
cars %>%
  ggplot(aes(x=1, y=msrp))+geom_boxplot()

cars %>%
  ggplot(aes(x = 1, y = msrp)) +
  geom_boxplot()

#Explanation :

cars %>%
  ggplot(aes(x = width)) +
  geom_density()
## Warning: Removed 28 rows containing non-finite values (stat_density).

#Explanation : Density plot menunjukkan mayoritas lebar(width) mobil berada pada kisaran 70-72,5.

# Facet hists using hwy mileage and ncyl
common_cyl %>%
  ggplot(aes(x = hwy_mpg)) +
  geom_histogram() +
  facet_grid(ncyl ~ suv) +
  ggtitle("hwy_mpg by ncyl and suv")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 11 rows containing non-finite values (stat_bin).

head(life)
##     State         County fips Year Female.life.expectancy..years.
## 1 Alabama Autauga County 1001 1985                           77.0
## 2 Alabama Baldwin County 1003 1985                           78.8
## 3 Alabama Barbour County 1005 1985                           76.0
## 4 Alabama    Bibb County 1007 1985                           76.6
## 5 Alabama  Blount County 1009 1985                           78.9
## 6 Alabama Bullock County 1011 1985                           75.1
##   Female.life.expectancy..national..years.
## 1                                     77.8
## 2                                     77.8
## 3                                     77.8
## 4                                     77.8
## 5                                     77.8
## 6                                     77.8
##   Female.life.expectancy..state..years. Male.life.expectancy..years.
## 1                                  76.9                         68.1
## 2                                  76.9                         71.1
## 3                                  76.9                         66.8
## 4                                  76.9                         67.3
## 5                                  76.9                         70.6
## 6                                  76.9                         66.6
##   Male.life.expectancy..national..years. Male.life.expectancy..state..years.
## 1                                   70.8                                69.1
## 2                                   70.8                                69.1
## 3                                   70.8                                69.1
## 4                                   70.8                                69.1
## 5                                   70.8                                69.1
## 6                                   70.8                                69.1

#Explanation : Terdapat 10 kolom, 6 bertipe data double, 2 variabel integer, dan 2 variabel karakter. Terdiri atas kolom state, negara, fips, tahun, harapan hidup perempuan per tahun, harapan hidup perempuan secara nasional per tahun, harapan hidup perempuan per negara setiap tahun, harapan hidup laki-laki per tahun, harapan hidup laki-laki secara nasional per tahun, harapan hidup laki-laki per negara setiap tahun.

x <- head(round(life$Female.life.expectancy..years.), 11)
x
##  [1] 77 79 76 77 79 75 77 77 77 78 77

#Explanation : Dari 11 data teratas, terlihat harapan hidup perempuan berada di kisaran 75 - 79 tahun.

sum(x)/11
## [1] 77.2
mean(x)
## [1] 77.2

#Explanation : Dari 11 data teratas, terlihat harapan hidup perempuan berada di rata-rata 77,2 tahun.

sort(x)
##  [1] 75 76 77 77 77 77 77 77 78 79 79
median(x)
## [1] 77

#Explanation : 77 tahun merupakan angka median dari harapan hidup 11 data perempuan teratas.

table(x)
## x
## 75 76 77 78 79 
##  1  1  6  1  2
library(gapminder)
str(gapminder)
## tibble [1,704 x 6] (S3: tbl_df/tbl/data.frame)
##  $ country  : Factor w/ 142 levels "Afghanistan",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ continent: Factor w/ 5 levels "Africa","Americas",..: 3 3 3 3 3 3 3 3 3 3 ...
##  $ year     : int [1:1704] 1952 1957 1962 1967 1972 1977 1982 1987 1992 1997 ...
##  $ lifeExp  : num [1:1704] 28.8 30.3 32 34 36.1 ...
##  $ pop      : int [1:1704] 8425333 9240934 10267083 11537966 13079460 14880372 12881816 13867957 16317921 22227415 ...
##  $ gdpPercap: num [1:1704] 779 821 853 836 740 ...

#Explanation :

Terdapat atas 6 kolom, 2 variabel faktor, 2 variabel integer dan 2 variabel numerik. Terdiri atas negara, benua, tahun, harapan hidup, pop dan gdp perkapita.

# Create dataset of 2007 data
gap2007 <- filter(gapminder, year == 2007)

# Compute groupwise mean and median lifeExp
gap2007 %>%
  group_by(continent) %>%
  summarize(mean(lifeExp),
            median(lifeExp))
## # A tibble: 5 x 3
##   continent `mean(lifeExp)` `median(lifeExp)`
##   <fct>               <dbl>             <dbl>
## 1 Africa               54.8              52.9
## 2 Americas             73.6              72.9
## 3 Asia                 70.7              72.4
## 4 Europe               77.6              78.6
## 5 Oceania              80.7              80.7

#Explanation : Terdapat 3 kolom, 2 variabel double dan 1 variabel faktor, terdiri atas continent(benua), mean/rata-rata harapan hidup, dan median/nilai tengah dari harapan hidup.

# Generate box plots of lifeExp for each continent
gap2007 %>%
  ggplot(aes(x = continent, y = lifeExp)) +
  geom_boxplot()

#Explanation : Oceania merupakan benua dengan harapan hidup paling tinggi yakni di atas 80 tahun. Kemudian afrika sebagai benua dengan harapan hidup paling rendah yakni berada pada kisaran 45-60.

Measures of variability

x
##  [1] 77 79 76 77 79 75 77 77 77 78 77
# Look at the difference between each point and the mean
sum(x - mean(x))
## [1] -0.0000000000000568

#Explanation :

# Square each difference to get rid of negatives then sum
sum((x - mean(x))^2)
## [1] 13.6

#Explanation :

sum((x - mean(x))^2)/(length(x) - 1)
## [1] 1.36

#Explanation :

var(x)
## [1] 1.36
sqrt(sum((x - mean(x))^2)/(length(x) - 1))
## [1] 1.17
sd(x)
## [1] 1.17

Inter Quartile Range

summary(x)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    75.0    77.0    77.0    77.2    77.5    79.0
IQR(x)
## [1] 0.5

Range

max(x)
## [1] 79
min(x)
## [1] 75
diff(range(x))
## [1] 4

– Calculate spread measures

str(gap2007)
## tibble [142 x 6] (S3: tbl_df/tbl/data.frame)
##  $ country  : Factor w/ 142 levels "Afghanistan",..: 1 2 3 4 5 6 7 8 9 10 ...
##  $ continent: Factor w/ 5 levels "Africa","Americas",..: 3 4 1 1 2 5 4 3 3 4 ...
##  $ year     : int [1:142] 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 ...
##  $ lifeExp  : num [1:142] 43.8 76.4 72.3 42.7 75.3 ...
##  $ pop      : int [1:142] 31889923 3600523 33333216 12420476 40301927 20434176 8199783 708573 150448339 10392226 ...
##  $ gdpPercap: num [1:142] 975 5937 6223 4797 12779 ...

#Explanation : Terdiri atas 6 kolom, country(negara), benua, tahun, harapan hidup, populasi, gdp perkapita.

# Compute groupwise measures of spread
gap2007 %>%
  group_by(continent) %>%
  summarize(sd(lifeExp),
            IQR(lifeExp),
            n())
## # A tibble: 5 x 4
##   continent `sd(lifeExp)` `IQR(lifeExp)` `n()`
##   <fct>             <dbl>          <dbl> <int>
## 1 Africa            9.63          11.6      52
## 2 Americas          4.44           4.63     25
## 3 Asia              7.96          10.2      33
## 4 Europe            2.98           4.78     30
## 5 Oceania           0.729          0.516     2

#Explanation :

# Generate overlaid density plots
gap2007 %>%
  ggplot(aes(x = lifeExp, fill = continent)) +
  geom_density(alpha = 0.3)

#Explanation : Dari ke 5 benua yang ada pada data, tidak ada yang memiliki distribusi cenderung normal.

Choose measures for center and spread

# Compute stats for lifeExp in Americas
head(gap2007)
## # A tibble: 6 x 6
##   country     continent  year lifeExp      pop gdpPercap
##   <fct>       <fct>     <int>   <dbl>    <int>     <dbl>
## 1 Afghanistan Asia       2007    43.8 31889923      975.
## 2 Albania     Europe     2007    76.4  3600523     5937.
## 3 Algeria     Africa     2007    72.3 33333216     6223.
## 4 Angola      Africa     2007    42.7 12420476     4797.
## 5 Argentina   Americas   2007    75.3 40301927    12779.
## 6 Australia   Oceania    2007    81.2 20434176    34435.
gap2007 %>%
  filter(continent == "Americas") %>%
  summarize(mean(lifeExp),
            sd(lifeExp))
## # A tibble: 1 x 2
##   `mean(lifeExp)` `sd(lifeExp)`
##             <dbl>         <dbl>
## 1            73.6          4.44
# Compute stats for population
gap2007 %>%
  summarize(median(pop),
            IQR(pop))
## # A tibble: 1 x 2
##   `median(pop)` `IQR(pop)`
##           <dbl>      <dbl>
## 1      10517531  26702008.