library("tidyverse")
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 4.0.0 ✔ tibble 3.3.0
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.1.0
## ── 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
#melakukan input data World-data-2023.csv yang diberi nama country_data
country_data <- read_csv('C:/Users/Rosita/Documents/TUGAS SAINS DATA/world-data-2023.csv',show_col_types = FALSE)
head(country_data)
## # A tibble: 6 × 35
## Country `Density\n(P/Km2)` Abbreviation `Agricultural Land( %)`
## <chr> <dbl> <chr> <chr>
## 1 Afghanistan 60 AF 58.10%
## 2 Albania 105 AL 43.10%
## 3 Algeria 18 DZ 17.40%
## 4 Andorra 164 AD 40.00%
## 5 Angola 26 AO 47.50%
## 6 Antigua and Barbuda 223 AG 20.50%
## # ℹ 31 more variables: `Land Area(Km2)` <dbl>, `Armed Forces size` <dbl>,
## # `Birth Rate` <dbl>, `Calling Code` <dbl>, `Capital/Major City` <chr>,
## # `Co2-Emissions` <dbl>, CPI <dbl>, `CPI Change (%)` <chr>,
## # `Currency-Code` <chr>, `Fertility Rate` <dbl>, `Forested Area (%)` <chr>,
## # `Gasoline Price` <chr>, GDP <chr>,
## # `Gross primary education enrollment (%)` <chr>,
## # `Gross tertiary education enrollment (%)` <chr>, …
Menampilkan 10 negara yang memiliki Armed Forces size terbesar didunia dengan menggunakan fungsi slice_max. Hasil tampilannya terdiri dari dua kolom saja yaitu Country dan Fertility Rate
#Memilih kolom Country dan `Armed Forces size` dari dataset country_data, kemudian menampilkan 10 negara yang memiliki `Armed Forces size` terbesar didunia dengan menggunakan fungsi slice_max dan n=10 artinya 10 nilai terbesar
top10country <- country_data %>% select(Country, `Armed Forces size`) %>%
slice_max(`Armed Forces size`, n=10)
top10country
## # A tibble: 10 × 2
## Country `Armed Forces size`
## <chr> <dbl>
## 1 India 3031000
## 2 China 2695000
## 3 North Korea 1469000
## 4 Russia 1454000
## 5 United States 1359000
## 6 Pakistan 936000
## 7 Egypt 836000
## 8 Brazil 730000
## 9 Indonesia 676000
## 10 South Korea 634000
Menampilkan negara-negara yang Fertility Rate-nya lebih
kecil dibandingkan Indonesia. kemudian mengurutkan
Fertility Rate dari besar ke kecil. Hasil tampilannya
terdiri dari dua kolom yaitu Country dan Fertility Rate
#Memilih kolom Country dan `Fertility Rate` dari dataset country_data, kemudian melakukan filter terhadap negara yang mempunyai nilai `Fertility Rate` yang lebih kecil dari Indonesia kemudian `Fertility Rate` diurutkan dari terbesar ke terkecil
country_data %>% select(Country,`Fertility Rate`) %>%
filter(`Fertility Rate`<`Fertility Rate`[Country=="Indonesia"]) %>%
arrange(desc(`Fertility Rate`))
## # A tibble: 98 × 2
## Country `Fertility Rate`
## <chr> <dbl>
## 1 Cape Verde 2.27
## 2 Venezuela 2.27
## 3 Argentina 2.26
## 4 Peru 2.25
## 5 Libya 2.24
## 6 India 2.22
## 7 Palau 2.21
## 8 Sri Lanka 2.2
## 9 Tunisia 2.2
## 10 Myanmar 2.15
## # ℹ 88 more rows
Menghitung Statistika 5 serangkai dari kolom
Armed Forces size dan Fertility Rate. dan
Menampilkan hasilnya dengan format data long
#Membuat 'summarydata' yang menyimpan hasil statistik 5 serangkai(Minimum,Q1,median,Q3,Maksimum) dari `Armed Forces size` dan `Fertility Rate` yanng dihitung dengan fungsi summarize( ), hasilnya kemudian ditampilkan dalam bentuk Long dengan fungsi pivot_longer
summarydata<-country_data %>%
summarize( across( c(`Armed Forces size`,`Fertility Rate`),
list(
Minimum = ~min(.x,na.rm = TRUE),
Q1 = ~quantile(.x,probs = 0.25,na.rm = TRUE),
Median = ~median(.x,na.rm = TRUE),
Q3 = ~quantile(.x, probs = 0.75,na.rm = TRUE),
Maksimum = ~max(.x, na.rm = TRUE)
),
.names = "{.col}_{.fn}"
) )
summarydata %>% pivot_longer(
everything(),
names_to = c("Variabel","Statistik 5 Serangkai"),
names_sep = "_"
)
## # A tibble: 10 × 3
## Variabel `Statistik 5 Serangkai` value
## <chr> <chr> <dbl>
## 1 Armed Forces size Minimum 0
## 2 Armed Forces size Q1 11000
## 3 Armed Forces size Median 31000
## 4 Armed Forces size Q3 142000
## 5 Armed Forces size Maksimum 3031000
## 6 Fertility Rate Minimum 0.98
## 7 Fertility Rate Q1 1.70
## 8 Fertility Rate Median 2.24
## 9 Fertility Rate Q3 3.60
## 10 Fertility Rate Maksimum 6.91
summarydata
## # A tibble: 1 × 10
## `Armed Forces size_Minimum` `Armed Forces size_Q1` `Armed Forces size_Median`
## <dbl> <dbl> <dbl>
## 1 0 11000 31000
## # ℹ 7 more variables: `Armed Forces size_Q3` <dbl>,
## # `Armed Forces size_Maksimum` <dbl>, `Fertility Rate_Minimum` <dbl>,
## # `Fertility Rate_Q1` <dbl>, `Fertility Rate_Median` <dbl>,
## # `Fertility Rate_Q3` <dbl>, `Fertility Rate_Maksimum` <dbl>
Menunjukkan 5 Nilai mata uang (Currency-Code) yang
paling banyak digunakan di dunia
#Menghing banyaknya `Currency-Code`dengan count( ) dari variabel Currency-Code tanpa NA. diurutkan dari terbesar sampai yang terkecil dan menampilkan 5 terbesar dengan slice_head
country_data %>% drop_na(`Currency-Code`) %>% count(`Currency-Code`, sort = TRUE) %>% slice_head(n=5)
## # A tibble: 5 × 2
## `Currency-Code` n
## <chr> <int>
## 1 EUR 23
## 2 XOF 8
## 3 USD 6
## 4 XCD 6
## 5 XAF 5
Diantara negara-negara yang tergabung dalam ASEAN, ditampilkan 3
negara yang miliki Infant mortality tertinggi dan 3 negara
yang memiliki Infant mortality terendah.
Tiga negara yang miliki Infant mortality tertinggi,
yaitu:
#membuat vektor asean yang berisi negara-negara yang merupakan anggota ASEAN, kemudian memilih kolom Country dan `Infant mortality` dari dataset country_data, dilanjutkan dengan memfilter Country berdasarkan vektor asean kemudian menampilkan 3 negara yang miliki Infant mortality tertinggi dan 3 negara yang memiliki Infant mortality terendah dengan memanfaatkan slice_min dan slice_max
asean <- c("Brunei", "Cambodia","Laos","Indonesia","Malysia","Myanmar","Philippines","Singapore","Thailand","Vietnam")
#Tiga negara yang miliki Infant mortality tertinggi, yaitu:
top3<-country_data %>% select(Country,`Infant mortality`) %>% filter(Country%in%asean) %>% slice_max(`Infant mortality`,n=3)
top3
## # A tibble: 3 × 2
## Country `Infant mortality`
## <chr> <dbl>
## 1 Laos 37.6
## 2 Myanmar 36.8
## 3 Cambodia 24
#Tiga negara yang miliki Infant mortality terendah, yaitu:
last3 <- country_data %>% select(Country,`Infant mortality`) %>% filter(Country%in%asean) %>% slice_min(`Infant mortality`,n=3)
last3
## # A tibble: 3 × 2
## Country `Infant mortality`
## <chr> <dbl>
## 1 Singapore 2.3
## 2 Thailand 7.8
## 3 Brunei 9.8
# menghitung total missing value yang ada pada dataset country_data menggunakan menu sum(is.na(namadataset))
sum(is.na(country_data))
## [1] 337
# menggunakan fungsi drop_na untuk menghapus semua baris yang mengandung NA, kemudian menyimpan hasil drop NA ke dalam dataset baru agar tidak menghilangkan dataset awal
country_data_noNA <- drop_na(country_data)
# memeriksa dataset setelah menghapus NA
sum(is.na(country_data_noNA))
## [1] 0
# menampilkan nama kolom, tipe data dan sebagian isi dari masing-masing variabel pada dataset country_data_noNA dengan menggunakan fungsi glimpse
glimpse(country_data_noNA)
## Rows: 110
## Columns: 35
## $ Country <chr> "Afghanistan", "Albania", …
## $ `Density\n(P/Km2)` <dbl> 60, 105, 18, 26, 17, 104, …
## $ Abbreviation <chr> "AF", "AL", "DZ", "AO", "A…
## $ `Agricultural Land( %)` <chr> "58.10%", "43.10%", "17.40…
## $ `Land Area(Km2)` <dbl> 652230, 28748, 2381741, 12…
## $ `Armed Forces size` <dbl> 323000, 9000, 317000, 1170…
## $ `Birth Rate` <dbl> 32.49, 11.78, 24.28, 40.73…
## $ `Calling Code` <dbl> 93, 355, 213, 244, 54, 374…
## $ `Capital/Major City` <chr> "Kabul", "Tirana", "Algier…
## $ `Co2-Emissions` <dbl> 8672, 4536, 150006, 34693,…
## $ CPI <dbl> 149.90, 119.05, 151.36, 26…
## $ `CPI Change (%)` <chr> "2.30%", "1.40%", "2.00%",…
## $ `Currency-Code` <chr> "AFN", "ALL", "DZD", "AOA"…
## $ `Fertility Rate` <dbl> 4.47, 1.62, 3.02, 5.52, 2.…
## $ `Forested Area (%)` <chr> "2.10%", "28.10%", "0.80%"…
## $ `Gasoline Price` <chr> "$0.70", "$1.36", "$0.28",…
## $ GDP <chr> "$19,101,353,833", "$15,27…
## $ `Gross primary education enrollment (%)` <chr> "104.00%", "107.00%", "109…
## $ `Gross tertiary education enrollment (%)` <chr> "9.70%", "55.00%", "51.40%…
## $ `Infant mortality` <dbl> 47.9, 7.8, 20.1, 51.6, 8.8…
## $ `Largest city` <chr> "Kabul", "Tirana", "Algier…
## $ `Life expectancy` <dbl> 64.5, 78.5, 76.7, 60.8, 76…
## $ `Maternal mortality ratio` <dbl> 638, 15, 112, 241, 39, 26,…
## $ `Minimum wage` <chr> "$0.43", "$1.12", "$0.95",…
## $ `Official language` <chr> "Pashto", "Albanian", "Ara…
## $ `Out of pocket health expenditure` <chr> "78.40%", "56.90%", "28.10…
## $ `Physicians per thousand` <dbl> 0.28, 1.20, 1.72, 0.21, 3.…
## $ Population <dbl> 38041754, 2854191, 4305305…
## $ `Population: Labor force participation (%)` <chr> "48.90%", "55.70%", "41.20…
## $ `Tax revenue (%)` <chr> "9.30%", "18.60%", "37.20%…
## $ `Total tax rate` <chr> "71.40%", "36.60%", "66.10…
## $ `Unemployment rate` <chr> "11.12%", "12.33%", "11.70…
## $ Urbanpopulation <dbl> 9797273, 1747593, 31510100…
## $ Latitude <dbl> 33.939110, 41.153332, 28.0…
## $ Longitude <dbl> 67.709953, 20.168331, 1.65…
# membuat dataset baru dari dataset sebelumnya, kemudian membaca semua kolom bertipe karakter, jika terdapat kolom yang bertipe karakter serta mengandung $ dan % maka $ dan % akan dihapus, lalu mengubah tipe data tersebut menjadi numerik atau dbl, selainnya (jika tidak mengandung $ dan %) maka tetap bertipe karakter. Lalu tampilkan kembali nama kolom, tipe data dan sebagian isi dari masing-masing kolom dengan fungsi glimpse
country_data_clean <- country_data_noNA %>%
mutate(
across(
.cols = where(is.character),
.fns = ~ if(all(grepl("[$,%]", .x))) {as.numeric(gsub("[$,%]", "", .x))} else {.x}
)
)
glimpse(country_data_clean)
## Rows: 110
## Columns: 35
## $ Country <chr> "Afghanistan", "Albania", …
## $ `Density\n(P/Km2)` <dbl> 60, 105, 18, 26, 17, 104, …
## $ Abbreviation <chr> "AF", "AL", "DZ", "AO", "A…
## $ `Agricultural Land( %)` <dbl> 58.1, 43.1, 17.4, 47.5, 54…
## $ `Land Area(Km2)` <dbl> 652230, 28748, 2381741, 12…
## $ `Armed Forces size` <dbl> 323000, 9000, 317000, 1170…
## $ `Birth Rate` <dbl> 32.49, 11.78, 24.28, 40.73…
## $ `Calling Code` <dbl> 93, 355, 213, 244, 54, 374…
## $ `Capital/Major City` <chr> "Kabul", "Tirana", "Algier…
## $ `Co2-Emissions` <dbl> 8672, 4536, 150006, 34693,…
## $ CPI <dbl> 149.90, 119.05, 151.36, 26…
## $ `CPI Change (%)` <dbl> 2.3, 1.4, 2.0, 17.1, 53.5,…
## $ `Currency-Code` <chr> "AFN", "ALL", "DZD", "AOA"…
## $ `Fertility Rate` <dbl> 4.47, 1.62, 3.02, 5.52, 2.…
## $ `Forested Area (%)` <dbl> 2.1, 28.1, 0.8, 46.3, 9.8,…
## $ `Gasoline Price` <dbl> 0.70, 1.36, 0.28, 0.97, 1.…
## $ GDP <dbl> 1.910135e+10, 1.527808e+10…
## $ `Gross primary education enrollment (%)` <dbl> 104.0, 107.0, 109.9, 113.5…
## $ `Gross tertiary education enrollment (%)` <dbl> 9.7, 55.0, 51.4, 9.3, 90.0…
## $ `Infant mortality` <dbl> 47.9, 7.8, 20.1, 51.6, 8.8…
## $ `Largest city` <chr> "Kabul", "Tirana", "Algier…
## $ `Life expectancy` <dbl> 64.5, 78.5, 76.7, 60.8, 76…
## $ `Maternal mortality ratio` <dbl> 638, 15, 112, 241, 39, 26,…
## $ `Minimum wage` <dbl> 0.43, 1.12, 0.95, 0.71, 3.…
## $ `Official language` <chr> "Pashto", "Albanian", "Ara…
## $ `Out of pocket health expenditure` <dbl> 78.4, 56.9, 28.1, 33.4, 17…
## $ `Physicians per thousand` <dbl> 0.28, 1.20, 1.72, 0.21, 3.…
## $ Population <dbl> 38041754, 2854191, 4305305…
## $ `Population: Labor force participation (%)` <dbl> 48.9, 55.7, 41.2, 77.5, 61…
## $ `Tax revenue (%)` <dbl> 9.3, 18.6, 37.2, 9.2, 10.1…
## $ `Total tax rate` <dbl> 71.4, 36.6, 66.1, 49.1, 10…
## $ `Unemployment rate` <dbl> 11.12, 12.33, 11.70, 6.89,…
## $ Urbanpopulation <dbl> 9797273, 1747593, 31510100…
## $ Latitude <dbl> 33.939110, 41.153332, 28.0…
## $ Longitude <dbl> 67.709953, 20.168331, 1.65…
# menetapkan kurs sebagai nilai konversi dari dollar ke rupiah, asumsikan nilai konversi dollar ke rupiah sebesar 16400
kurs <- 16400
# membuat dataset baru dari dataset country_data_noNA (dataset yang sudah dibersikan missing value) kemudian membaca semua kolom bertipe karakter, jika terdapat kolom yang bertipe karakter dan mengandung $, maka ubah tipe data tersebut menjadi numerik atau dbl, selainnya (jika tidak mengandung $) maka tetap bertipe karakter. Selanjutnya kolom tersebut dikali dengan kurs rupiah (16400), menu select untuk memilih kolom yang ingin ditampilkan
country_data_rp <- country_data_noNA %>%
mutate(
across(
.cols = where(is.character),
.fns = ~ if(all(grepl("[$,%]", .x))) {as.numeric(gsub("[$,%]", "", .x)) * kurs} else {.x},
.names = "{.col}_rp"
)
)
country_data_rp %>% select(Country, `Gasoline Price_rp`, GDP_rp, `Minimum wage_rp`)
## # A tibble: 110 × 4
## Country `Gasoline Price_rp` GDP_rp `Minimum wage_rp`
## <chr> <dbl> <dbl> <dbl>
## 1 Afghanistan 11480 3.13e14 7052
## 2 Albania 22304 2.51e14 18368
## 3 Algeria 4592 2.79e15 15580
## 4 Angola 15908 1.55e15 11644
## 5 Argentina 18040 7.37e15 54940
## 6 Armenia 12628 2.24e14 10824
## 7 Australia 15252 2.28e16 222876
## 8 Azerbaijan 9184 6.43e14 7708
## 9 Bangladesh 18368 4.96e15 8364
## 10 Barbados 29684 8.54e13 51332
## # ℹ 100 more rows
# menambahkan varibel baru yaitu country status dengan kondisi jika Unemployment rate kurang dari 1% maka country dikategorikan rich, jika Unemployment rate lebih dari sama dengan 1% dan kurang dari sama dengan 5% maka country dikategorikan developing, dan jika Unemployment rate lebih dari 5% maka country dikategorikan poor. Kemudian tambahkan menu select untuk menampilkan kolom yang ingin ditampilkan
country_data_clean <-
country_data_clean %>%
mutate(
country_status = case_when(`Unemployment rate` < 1 ~ "rich",
`Unemployment rate` >= 1 & `Unemployment rate` <= 5 ~ "developing",
`Unemployment rate` > 5 ~ "poor"
),
)
country_data_clean %>% select(Country, `Unemployment rate`, country_status)
## # A tibble: 110 × 3
## Country `Unemployment rate` country_status
## <chr> <dbl> <chr>
## 1 Afghanistan 11.1 poor
## 2 Albania 12.3 poor
## 3 Algeria 11.7 poor
## 4 Angola 6.89 poor
## 5 Argentina 9.79 poor
## 6 Armenia 17.0 poor
## 7 Australia 5.27 poor
## 8 Azerbaijan 5.51 poor
## 9 Bangladesh 4.19 developing
## 10 Barbados 10.3 poor
## # ℹ 100 more rows
# mengkategorikan country status menggunakan fungsi factor, dengan urutan kategori poor < developing < rich. Kemudian menghitung mean dan max dari kolom GDP dan CPI. Selanjutnya mengelompokkan berdasarkan country status serta menambahkan kolom jumlah negara pada masing-masing country status, lalu menyimpan hasil output tersebut sebagai data frame baru agar dapat digunakan kembali jika diperlukan
country_data_clean$country_status <- factor(country_data_clean$country_status, levels = c("poor", "developing", "rich"), ordered = TRUE)
country_status_GDP_CPI <- country_data_clean %>%
group_by(country_status) %>%
summarise(
mean_GDP = mean(GDP),
max_GDP = max(GDP),
mean_CPI = mean(CPI),
max_CPI = max(CPI),
jumlah_negara = n()
)
country_status_GDP_CPI
## # A tibble: 3 × 6
## country_status mean_GDP max_GDP mean_CPI max_CPI jumlah_negara
## <ord> <dbl> <dbl> <dbl> <dbl> <int>
## 1 poor 647889907874. 2.14e13 177. 1344. 61
## 2 developing 820523892191. 1.99e13 145. 268. 46
## 3 rich 191583986805. 5.44e11 119. 136. 3
# mengubah hasil dari data frame pada soal nomor 6 menjadi bentuk long menggunakan fungsi pivot_longer
country_status_GDP_CPI %>%
pivot_longer(cols = -country_status,
names_to = "variable",
values_to = "value")
## # A tibble: 15 × 3
## country_status variable value
## <ord> <chr> <dbl>
## 1 poor mean_GDP 6.48e11
## 2 poor max_GDP 2.14e13
## 3 poor mean_CPI 1.77e 2
## 4 poor max_CPI 1.34e 3
## 5 poor jumlah_negara 6.1 e 1
## 6 developing mean_GDP 8.21e11
## 7 developing max_GDP 1.99e13
## 8 developing mean_CPI 1.45e 2
## 9 developing max_CPI 2.68e 2
## 10 developing jumlah_negara 4.6 e 1
## 11 rich mean_GDP 1.92e11
## 12 rich max_GDP 5.44e11
## 13 rich mean_CPI 1.19e 2
## 14 rich max_CPI 1.36e 2
## 15 rich jumlah_negara 3 e 0
Tampilkan negara yang berstatus “rich” dan urutkan GDP dari terbesar ke yang terkecil.
#memilih kolom Country, country_status, dan GDP dari datasert country_data_clean kemudian melakukan filter pada country_status "rich" dan selanjutnya mengurutkan GDP dari terbesar sampai terkecil
country_data_clean %>% select(Country,country_status,GDP) %>% filter(country_status=="rich") %>% arrange(desc(GDP))
## # A tibble: 3 × 3
## Country country_status GDP
## <chr> <ord> <dbl>
## 1 Thailand rich 543649976166
## 2 Laos rich 18173839128
## 3 Niger rich 12928145120