TOPIC: 1. DATA WRANGLING 2. DATA VISUALIZATION
Kiva.org adalah sebuah platform crowdfunding online non-profit internasional yang didirikan pada tahun 2005 di San Fransisco. Crowdfunding (urun dana) adalah kegiatan penggalangan dana modal dari beberapa individu untuk membiayai usaha bisnis baru. Misi dari Kiva adalah untuk menghubungkan masyarakat melalui pemberian pinjaman dan meningkatkan kesejahteraan warga marginal (terutama pengusaha berpenghasilan rendah maupun pelajar).
# Please run code down below
<- read.csv("loan_kiva.csv", stringsAsFactors = T) kiva
Additional: Pada fungsi read.csv()
terdapat
paramater stringsAsFactors =
yang dapat kita manfaatkan
untuk mengubah tipe data pada setiap kolom yang sifatnya memiliki
pengulangan menjadi tipe data factor.
Deskripsi kolom:
id
: Unique ID for loanfunded_amount
: The amount disbursed by Kiva to the
field agent (USD)loan_amount
: The amount disbursed by the field agent to
the borrower (USD)activity
: More granular categorysector
: High level categorycountry
: Country in which loan was disbursedregion
: Full region name within the countrycurrency
: The currency in which the loan was
disbursedpartner_id
: ID of partner organizationposted_time
: The time at which the loan is posted on
Kiva by the field agentfunded_time
: The time at which the loan posted to Kiva
gets funded by lenders completelyterm_in_months
: The duration for which the loan was
disbursed in monthslender_count
: The total number of lenders that
contributed to this loanrepayment_interval
: Types of repayment from a lender in
accordance with a loan’s terms
irregular
: no equally spaced intervalbullet
: lump sum payment, paid at maturitymonthly
: regular payment at each monthSetelah melakukan import dataframe yang ingin digunakan jangan lupa untuk melakukan inspeksi tipe data, untuk memastikan tipe data sudah sesuai.
# Please run code down below
str(kiva)
#> 'data.frame': 323279 obs. of 14 variables:
#> $ id : int 653051 653053 653068 653063 653084 653067 653078 653082 653048 653060 ...
#> $ funded_amount : num 300 575 150 200 400 200 400 475 625 200 ...
#> $ loan_amount : num 300 575 150 200 400 200 400 475 625 200 ...
#> $ activity : Factor w/ 154 levels "Adult Care","Agriculture",..: 62 127 140 50 90 42 11 87 60 127 ...
#> $ sector : Factor w/ 15 levels "Agriculture",..: 7 14 14 2 7 1 13 10 7 14 ...
#> $ country : Factor w/ 82 levels "Afghanistan",..: 52 52 27 52 52 27 52 52 52 52 ...
#> $ region : Factor w/ 9204 levels "","\"\"The first May\"\" village",..: 4375 4375 5170 4375 114 5170 2645 4375 4375 4375 ...
#> $ currency : Factor w/ 66 levels "ALL","AMD","AZN",..: 44 44 22 44 44 22 44 44 44 44 ...
#> $ partner_id : int 247 247 334 247 245 334 245 245 247 247 ...
#> $ posted_time : Factor w/ 322089 levels "2014-01-01 04:49:26",..: 5 7 22 17 38 21 32 36 2 14 ...
#> $ funded_time : Factor w/ 261846 levels "2014-01-01 12:18:55",..: 63 60 7 3 18 11 1138 15 204 1 ...
#> $ term_in_months : int 12 11 43 11 14 43 14 14 11 11 ...
#> $ lender_count : int 12 14 6 8 16 8 8 19 24 3 ...
#> $ repayment_interval: Factor w/ 3 levels "bullet","irregular",..: 2 2 1 2 3 1 3 3 2 2 ...
Apa saja kolom yang tipe datanya belum sesuai?
Notes: Kenapa melakukan inspeksi tipe data itu penting sebelum melanjutkan ke tahap selanjutnya? Untuk memastikan bahwa semua tipe data yang ada pada dataframe tersebut sudah sesuai dan bisa diolah lebih lanjut.
lubridate
# Please run code down below
#install.packages("lubridate")
library(lubridate)
Penggunaan lubridate secara singkat dapat dilihat di
cheatsheet
: https://raw.githubusercontent.com/rstudio/cheatsheets/main/lubridate.pdf
posted_time
& funded_time
:Format waktu dari kolom posted_time
&
funded_time
: Year-Month-Day Hour-Minute-Second
Cara as.Date()/as.POSIXct
%Y
= tahun empat digit, contoh: 2022%y
= tahun dua digit, contoh: 22%B
= nama bulan, contoh: January%b
= nama bulan singkatan, contoh: Jan%m
= bulan dua digit, contoh: 01%A
= nama hari, contoh: Monday%d
= tanggal, contoh: 01 sampai 31%H
: Untuk jam%M
: Untuk menit%S
: Untuk Detik# Please run the code for column posted_time
head(as.POSIXct(kiva$posted_time, format = "%Y-%m-%d %H:%M:%S"))
#> [1] "2014-01-01 06:12:39 +07" "2014-01-01 06:51:08 +07"
#> [3] "2014-01-01 09:58:07 +07" "2014-01-01 08:03:11 +07"
#> [5] "2014-01-01 11:53:19 +07" "2014-01-01 09:51:02 +07"
class(as.POSIXct(kiva$posted_time, format = "%Y-%m-%d %H:%M:%S"))
#> [1] "POSIXct" "POSIXt"
Cara Lubridate
# Please type your code
head(ymd_hms(kiva$posted_time))
#> [1] "2014-01-01 06:12:39 UTC" "2014-01-01 06:51:08 UTC"
#> [3] "2014-01-01 09:58:07 UTC" "2014-01-01 08:03:11 UTC"
#> [5] "2014-01-01 11:53:19 UTC" "2014-01-01 09:51:02 UTC"
class(ymd_hms(kiva$posted_time))
#> [1] "POSIXct" "POSIXt"
Additional: Merubah timezone (zona waktu)
List time zone: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
# Change into Jakarata timezone
head(ymd_hms(kiva$posted_time, tz = "Asia/Jakarta"))
#> [1] "2014-01-01 06:12:39 WIB" "2014-01-01 06:51:08 WIB"
#> [3] "2014-01-01 09:58:07 WIB" "2014-01-01 08:03:11 WIB"
#> [5] "2014-01-01 11:53:19 WIB" "2014-01-01 09:51:02 WIB"
# Change into New York timezone
head(ymd_hms(kiva$posted_time, tz = "America/New_York"))
#> [1] "2014-01-01 06:12:39 EST" "2014-01-01 06:51:08 EST"
#> [3] "2014-01-01 09:58:07 EST" "2014-01-01 08:03:11 EST"
#> [5] "2014-01-01 11:53:19 EST" "2014-01-01 09:51:02 EST"
lubridate
Mari kita coba implementasikan fungsi dari library
lubridate
yang sudah kita tahu.
Opsi 1: Mengubah satu-per-satu
# Please type your code
$posted_time <- ymd_hms(kiva$posted_time)
kiva$funded_time <- ymd_hms(kiva$funded_time) kiva
Opsi 2: Mengubah bersamaan
Ketika kita ingin merubah beberapa kolom sekaligus, kita bisa
menggunakan function lapply()
.
# Please type your code
c("posted_time", "funded_time")] <- lapply(kiva[ , c("posted_time", "funded_time")], ymd_hms)
kiva[ ,
class(kiva$posted_time)
#> [1] "POSIXct" "POSIXt"
class(kiva$funded_time)
#> [1] "POSIXct" "POSIXt"
Feature engineering adalah membuat kolom/variabel baru berdasarkan data yang ada. Hal ini berguna untuk mengekstrak informasi tambahan yang bisa digunakan untuk eksplorasi data dan modeling.
range_time
yaitu selisih dari
funded_time
dan posted_time
# Please run the code
$range_time <- difftime(time1 = kiva$funded_time, # time akhir
kivatime2 = kiva$posted_time, # time awal
units = "days")
$range_time <- round(as.numeric(kiva$range_time)) # round & ubah menjadi numeric
kiva
head(kiva)
lubridate
Kita akan mencoba untuk mengambil nama hari dari kolom
posted_time
& funded_time
, lalu kita akan
coba simpan ke kolom baru dengan nama day_posted
&
day_funded
.
# Please type your code
$day_posted <- wday(kiva$posted_time, label = T, abbr = F)
kiva$day_funded <- wday(kiva$funded_time, label = T, abbr = F) kiva
Note: pada fungsi wday()
,
argumen label
untuk menampilkan nama hari
argumen abbr
untuk menyingkat nama hari
Meng-ekstrak informasi bulan
Sekarang kita akan mencoba mengambil informasi bulan dari kolom
posted_time
dan kita akan simpan kedalam sebuah kolom
month_posted
.
# Please type your code
$month_posted <- month(kiva$posted_time, label = T, abbr = F) kiva
Terakhir, kita akan mencoba menambahkan informasi jam dari pinjaman
tersebut dipost dan kita akan menyimpannya ke kolom
posted_hour
.
# Please type your code
$posted_hour <- hour(kiva$posted_time) kiva
head(kiva)
Exploratory Data Analysis Bertujuan untuk mendapat informasi dari data (explorasi). EDA biasa dilakukan menggunakan base plot.
Fungsi yang akan digunakan untuk melakukan base plot adalah
plot()
, jenis plot yang dihasilkan berubah sesuai tipe data
yang dimasukkan, jika:
hist()
boxplot()
General Business Case:
Kita sebagai tim analisis Kiva, ktia diminta untuk melakukan analisa
dari beberapa pertanyaan yang ditanyakan oleh atasan kita, untuk data
pinjaman yang berasal dari negara Indonesia
&
Vietnam
.
# Please run the code
<- kiva[kiva$country %in% c("Indonesia", "Vietnam"),]
kiva_ind_vie unique(kiva_ind_vie$country)
#> [1] Vietnam Indonesia
#> 82 Levels: Afghanistan Albania Armenia Azerbaijan Belize Benin ... Zimbabwe
Berapa kisaran/distribusi loan_amount
yang berasal dari
kedua negara tersebut?
Untuk melihat secara general secara distribusi dari kedua negara tersebut, kita dapat memanfaatkan plot histogram.
# Histogram
hist(kiva_ind_vie$loan_amount)
Insight:
Sedangkan ketika kita ingin melihatnya lebih detail lagi, untuk masing-masing negara, kita bisa mencoba untuk memanfaatkan plot boxplot.
# Boxplot
plot(x = kiva_ind_vie$country, y = kiva_ind_vie$loan_amount)
Dikarenakan level dari unique valuenya masih ada, kita dapat
menghilangkannya dengan menggunakan fungsi droplevels()
# Boxplot
$country <- droplevels(kiva_ind_vie$country)
kiva_ind_vieunique(kiva_ind_vie$country)
#> [1] Vietnam Indonesia
#> Levels: Indonesia Vietnam
plot(x = kiva_ind_vie$country, y = kiva_ind_vie$loan_amount)
Insight:
Sector
mana yang memiliki jumlah peminjam paling
banyak dari kedua negara tersebut?
Untuk melihat rangking dari setiap sector yang melakukan peminjaman paling banyak, mari kita coba manfaatkan bar plot.
# Bar plot
plot(x = kiva_ind_vie$sector, las = 2)
Insight:
Apakah jumlah pemberi pinjaman (lender_count
)
berhubungan dengan besaran dana yang akan dipinjam
(loan_amount
)?
Dalam mencari tahu hubungan antara 2 numerik variabel, kita dapat memanfaatkan scatter plot.
# Scatter plot
plot(kiva_ind_vie$loan_amount, kiva_ind_vie$lender_count)
Plot sudah terbentuk tapi kita kekurangan informasi kita tidak tahu
titik mana yang mewakili negara Indonesia
&
Philippines
. Kita juga ingin menambahkan garis tren
hubungan antara 2 variabel.
Additional Step: Menambahkan Legend
Untuk memberikan lagenda pada scatter plot kita bisa menambahkan
fungsi legend()
, pada fungsi tersebut nantinya kita bisa
mengisi beberapa parameter + x
= mengatur posisi legend +
legend
= unique value dari kolom yang ingin ditampilkan +
fill
= untuk memberikan warna, sesuai dengan jumlah unique
value dari kolom yang ingin ditampilkan
# Menambahkan legend
plot(kiva_ind_vie$loan_amount, kiva_ind_vie$lender_count,
col = kiva_ind_vie$country,
pch = 13)
legend(x = "right",
legend = levels(kiva_ind_vie$country),
fill = 1:2)
Additional Step: Menambahkan garis tren
Untuk memberikan garis yang menunjukan apakah ada tren positif
ataupun negatif kita bisa menambahkan fungsi abline()
+
Pada fungsi tersebut nantinya bisa di isi dengan fungsi
lm()
yang akan membuat garis linear berdasarkan perhitungan
linear model, dengan mengisi beberapa parameter berikut ini -
formula
= parameter ini bisa diisi dengan
numerik sumbu y ~ numerik sumbu x
- data
=
dataframe yang digunakan
# Menambahkan garis trenn
plot(kiva_ind_vie$loan_amount, kiva_ind_vie$lender_count,
col = kiva_ind_vie$country,
pch = 13)
legend(x = "right",
legend = levels(kiva_ind_vie$country),
fill = 1:2)
abline(lm(lender_count ~ loan_amount,
data = kiva_ind_vie))
Insight:
Bagaimana tren rata-rata pinjaman (loan_amount
) setiap
bulannya (month_posted
) untuk negara Indonesia
saja?
# Conditional subseting
<- kiva[kiva$country %in% "Indonesia",]
kiva_indo
# Menghitung rata-rata pinjaman
<- aggregate(loan_amount ~ month_posted, data = kiva_indo, FUN = mean) loan_trend_indo
# Line Plot
plot(loan_trend_indo$loan_amount, type = "l")
Insight:
Kapan menggunakan base plot:
ggplot2
Base plot amat berguna untuk melakukan eksplorasi data di awal dimana codingannya cukup sederhana. Ia dapat menyampaikan informasi mengenai data (distribusi/pola data) dan hubungan antar data secara cepat.
Sistem grammar yang digunakan pada base plot adalah membuat fungsi secara berurutan dan harus dijalankan bersamaan sehingga tidak begitu fleksibel dalam kostumisasi plot.
#install.packages("ggplot2")
library(ggplot2)
Apa itu ggplot2? ggplot2 adalah sebuah libary yang akan menyediakan sebuah kanvas kosong yang dapat digunakan untuk membuat visualisasi. Sistem pembuatannya akan berdasarkan grammar formula of visualization dan layer by layer. Kedua sistem pembuatannya sangat bisa untuk dikutomisasi sehingga plot yang disajikan nantinya sangat cocok jika ingin ditampilkan kepada audiens.
Grammar formula of ggplot2
ggplot(data = ..., mapping = aes(x=..., y=...)) + geom_... + ...
ggplot(data = , mapping = aes(x=, y=))
Untuk lebih kenal dengan library ggplot2 mari kita coba melakukan visualisasi!
Contoh: Visualisasikan distribusi nilai
loan_amount
untuk sector Agriculture
&
Education
dari negara Indonesia.
# Conditonal subseting
<- kiva[kiva$country %in% "Indonesia" & kiva$sector %in% c("Agriculture", "Education"), ]
indo_agri_edu
# Menghilangkan level
$country <- droplevels(indo_agri_edu$country)
indo_agri_edu$sector <- droplevels(indo_agri_edu$sector)
indo_agri_edu
unique(indo_agri_edu$country)
#> [1] Indonesia
#> Levels: Indonesia
unique(indo_agri_edu$sector)
#> [1] Agriculture Education
#> Levels: Agriculture Education
Step 1: Masukan parameter yang diperlukan untuk fungsi
ggplot()
data
= dataframe yang ingin digunakan
mapping
= parameter ini akan di isi dengan
Aesthetic / aes(), aes() adalah fungsi yang bisa diisi dengan
elemen-elemen yang penting dalam grafik, meliputi sumbu x, sumbu
y.
# Please Type Your Code Down Below
# Main layer
ggplot(data = indo_agri_edu, mapping = aes(x = sector, y = loan_amount))
Layer 1 - Boxplot
Untuk menambahkan layer pada main layer, kita bisa menggunakan simbol
+
# Please Type Your Code Down Below
ggplot(data = indo_agri_edu, mapping = aes(x = sector, y = loan_amount)) +
geom_boxplot()
Layer 2- scatterplot
geom_point
# Please Type Your Code Down Below
ggplot(data = indo_agri_edu, mapping = aes(x = sector, y = loan_amount)) +
geom_boxplot() +
geom_point()
geom_jitter
# Please Type Your Code Down Below
ggplot(data = indo_agri_edu, mapping = aes(x = sector, y = loan_amount)) +
geom_boxplot() +
geom_jitter()
Notes: geom_jitter
: scatterplot dengan titik
yang random bergeser ke kiri/kanan, agar tidak tumpang tindih
# Please Type Your Code Down Below
ggplot(data = indo_agri_edu, mapping = aes(x = sector, y = loan_amount)) +
geom_jitter() +
geom_boxplot()
Untuk memberikan warna pada plot kita, kita bisa memanfaatkan
parameter color
atau fill
pada fungsi
aes()
fill
# Please Type Your Code Down Below
ggplot(data = indo_agri_edu, mapping = aes(x = sector, y = loan_amount, fill = sector)) +
geom_boxplot() +
geom_jitter()
color
# Please Type Your Code Down Below
ggplot(data = indo_agri_edu, mapping = aes(x = sector, y = loan_amount, color = sector)) +
geom_boxplot() +
geom_jitter()
aes()
Ditempatkan pada fungsi salah satu geom_
# Please Type Your Code Down Below
ggplot(data = indo_agri_edu, mapping = aes(x = sector, y = loan_amount)) +
geom_boxplot(mapping = aes(color = sector)) +
geom_jitter()
Business Case: Sebagai seorang Analyst kita ingin menganalisa 10 Sektor yang memiliki jumlah pinjaman paling banyak dari negara Indonesia.
# Melakukan agregasi data
<- aggregate(loan_amount ~ sector, kiva_indo, FUN = sum)
agg_sector
# Mengurutkan dari yang paling banyak ke rendah
<- agg_sector[order(agg_sector$loan_amount, decreasing = T),]
agg_sector
# Mengambil top 10
<- head(agg_sector, 10)
agg_sector
agg_sector
geom_col
# Please type your code down below
ggplot(data = agg_sector, mapping = aes(x = sector, y = loan_amount)) +
geom_col() +
scale_x_discrete(guide = guide_axis(angle = 45))
aes()
# Please type your code down below
ggplot(data = agg_sector, mapping = aes(y = sector, x = loan_amount)) +
geom_col()
Step 4: Menambahkan parameter reorder()
disumbu y
reorder()
adalah sebuh parameter yang dapat
dimanfaatkan untuk mengurutkan freq
# Please type your code down below
ggplot(data = agg_sector, mapping = aes(y = reorder(sector, loan_amount), x = loan_amount)) +
geom_col()
Step 5: Mengubah warna dalam plot dengan menabahkan
fungsi scale_fill_gradient()
scale_fill_gradient()
adalah sebuah fungsi untuk
meberikan gradasi warna pada setiap bar dalam geom_col()
,
parameter yang dapat digunakan adalah
low
= parameter untuk warna yang paling bawahhigh
= parameter untuk warna yang paling atas# Please type your code down below
ggplot(data = agg_sector, mapping = aes(y = reorder(sector, loan_amount), x = loan_amount)) +
geom_col(aes(fill = loan_amount)) +
scale_fill_gradient(low = "orange", high = "red")
Step 6: Menambahkan geom_text()
geom_text()
adalah sebuah fungsi untuk memberikan
keteragan angka didalam bar plot
color
= Untuk memberikan warna ke textsize
= untuk mengatur ukuran text# Please type your code down below
library(scales)
ggplot(data = agg_sector, mapping = aes(y = reorder(sector, loan_amount), x = loan_amount)) +
geom_col(aes(fill = loan_amount)) +
geom_text(mapping = aes(label = paste("$", comma(loan_amount))),
color = "black",
size = 2,
nudge_x = 1)+
scale_fill_gradient(low = "orange", high = "red")
# Please Type Your Code Down Below
ggplot(data = agg_sector, mapping = aes(y = reorder(sector, loan_amount), x = loan_amount)) +
geom_col(aes(fill = loan_amount)) +
scale_fill_gradient(low = "orange", high = "red") +
geom_text(mapping = aes(label = paste("$", comma(loan_amount))),
hjust = "left", size = 2.5)+
theme_bw() +
theme(legend.position = "none") +
scale_x_continuous(labels = dollar_format(prefix = "$", big.mark = ","))
Insight:
Bussines Case: Bagaimana tren frekuensi pengajuan pinjaman setiap harinya untuk negara Indonesia saja, pada bulan Januari 2014?
# Menambahkan kolom baru
$posted_date <- date(kiva$posted_time)
kiva
# Conditional subseting
<- kiva[kiva$country %in% "Indonesia" & kiva$posted_date <= "2014-01-31",]
kiva_indo_jan
# Menghitung frekuensi pinjaman
<- as.data.frame(table(kiva_indo_jan$posted_date))
trend_freq
head(trend_freq)
# Mengubah tipe data Var1 menjadi date
$Var1 <- ymd(trend_freq$Var1)
trend_freqclass(trend_freq$Var1)
#> [1] "Date"
geom_line()
# Please type your code down below
ggplot(data = trend_freq, mapping = aes(x = Var1, y = Freq)) +
geom_line(group = 1)
geom_point()
# Please type your code down below
ggplot(data = trend_freq, mapping = aes(x = Var1, y = Freq)) +
geom_line(group = 1) +
geom_point()
Note: gunakan argumen group = 1
saat
menggunakan geom_line -> hanya membuat 1 line
scale_x_date()
Parameter yang dapat digunakan: - date breaks = ...days
... week
...month
- date_labels = format
tanggal
Contoh:
scale_x_date(date_breaks = "1 week", date_labels = "%m-%d")
# Please type your code down below
ggplot(data = trend_freq, mapping = aes(x = Var1, y = Freq)) +
geom_line(group = 1) +
geom_point() +
scale_x_date(date_breaks = "3 days", date_labels = "%m-%d")
scale_y_continous()
Parameter yang dapat digunakan: -
breaks(seq(..,..,..))
Contoh: scale_y_continuous(breaks = seq(3, 27, 3))
# Please type your code down below
ggplot(data = trend_freq, mapping = aes(x = Var1, y = Freq)) +
geom_line(group = 1) +
geom_point() +
scale_x_date(date_breaks = "3 days", date_labels = "%m-%d")+
scale_y_continuous(breaks = seq(3, 20, 3))
labs()
# Please type your code down below
ggplot(data = trend_freq, mapping = aes(x = Var1, y = Freq)) +
geom_line(group = 1) +
geom_point(color = "red") +
scale_x_date(date_breaks = "3 days", date_labels = "%m-%d")+
scale_y_continuous(breaks = seq(3, 20, 3)) +
labs(x = "Date",
y = "Freq",
title = "Trend",
subtitle = "...")
Business Case 1: Kita diminta untuk menunjukan 5 sector yang
memiliki jumlah partisipasi peminjam (lender_count
) paling
sedikit dari keseluruhan data kita.
# Persiapan Data
# Melakukan perhitungan jumlah pinjaman
<- aggregate(lender_count ~ sector, data = kiva, FUN = sum)
total_lender
# Mengurutkan hasil penjumlahan
<- total_lender[order(total_lender$lender_count, decreasing = T),]
total_lender
# Mengambil 5 sector paling bawah
<- tail(total_lender, 5) bottom_5_sector
# Membuat visual
ggplot(data = bottom_5_sector, aes(x = lender_count, y = reorder(sector, lender_count))) +
geom_col()
Business Case 2: Kita diminta untuk melihat trend pengajuan pinjam setiap harinya pada bulan Januari 2014, untuk negara Philippines dan Vietnam.
# Persiapan Data
# Conditional Subseting
<- kiva[kiva$country %in% c("Indonesia", "Philippines", "Vietnam") & kiva$posted_date <= "2014-01-31", ]
kiva_ipv
# Melakukan perhitungan freq
<- aggregate(x = id ~ posted_date +country, data = kiva_ipv, FUN = length)
freq_loan_ipv
# Mengubah tipe data menjadi date
$posted_date <- ymd(freq_loan_ipv$posted_date) freq_loan_ipv
# Membuat visual
ggplot(data = freq_loan_ipv, aes(x = posted_date, y = id)) +
geom_line(aes(col = country))+
geom_point()
Multivariate plot adalah sebuah plot yang digunakan untuk menampilkan nilai dari beragam variabel secara bersamaan.
Business Case: Kita diminta untuk melakukan analisa tipe
repayment_interval
apakah yang paling sering dipilih oleh
para peminjam dari negara Indonesia, Philippines & Vietnam.
# Melakukan aggregasi
<- aggregate(id ~ country + repayment_interval,
agg_kiva_ind_vie data = kiva_ind_vie,
FUN = length)
agg_kiva_ind_vie
geom_col()
Pada fungsi geom_col()
ada sebuah parameter yang bernama
position
dan didalam postion itu bisa memasukan sebuah
value bernama dodge
.
# Please Type Your Code Down Below
ggplot(data = agg_kiva_ind_vie, mapping = aes(x = id, y = country)) +
geom_col(aes(fill = repayment_interval), position = "dodge") +
scale_fill_manual(values = c("yellow", "orange", "red"),
labe = c("Bullet", "Irregular", "Monthly")) +
geom_text(aes(label = id, group = repayment_interval),
position = position_dodge(width = 1),
size = 3,
hjust = -0.05)
Pada fungsi geom_col()
ada sebuah parameter yang bernama
position
dan didalam postion itu bisa memasukan sebuah
value bernama fill
.
# Please Type Your Code Down Below
ggplot(data = agg_kiva_ind_vie, mapping = aes(x = id, y = country)) +
geom_col(aes(fill = repayment_interval), position = "fill")
Step 3: Mengubah warna dalam plot dengan menabahkan
fungsi scale_fill_manual()
scale_fill_manual()
adalah sebuah fungsi untuk
meberikan gradasi warna pada setiap bar dalam geom_col()
,
parameter yang dapat digunakan adalah
values
= parameter untuk menentukan warna apa saja yang
akan digunakanContoh:
scale_fill_manual(values = c("yellow", "orange", "red"))
# Please Type Your Code Down Below
ggplot(data = agg_kiva_ind_vie, mapping = aes(x = id, y = country)) +
geom_col(aes(fill = repayment_interval), position = "dodge") +
scale_fill_manual(values = c("yellow", "orange", "red")) +
geom_text(aes(label = id, group = repayment_interval),
position = position_dodge(width = 1),
size = 3,
hjust = -0.05)
Memplotkan variabel di panel terpisah, sehingga visual menjadi lebih
jelas. Fungsi yang dapat digunakan adalah facet_wrap()
Parameter yang bisa digunakan pada fungsi
facet_wrap()
facets
= parameter yang menentukan kolom apa yang mau
dipisahscales
= ada 3 value yang bisa diisi pada parameter ini
yaiut free_x
, free_y
&
free
Contoh:
facet_wrap(facets = ~ name, scales = "free_x")
# Tambahkan facet untuk scales = free_x
ggplot(data = agg_kiva_ind_vie, mapping = aes(x = id, y = country)) +
geom_col(aes(fill = repayment_interval), position = "dodge") +
scale_fill_manual(values = c("yellow", "orange", "red")) +
facet_wrap(facets = ~ country, scales = "free_x")
# Tambahkan facet untuk scales = free_y
ggplot(data = agg_kiva_ind_vie, mapping = aes(x = id, y = country)) +
geom_col(aes(fill = repayment_interval), position = "dodge") +
scale_fill_manual(values = c("yellow", "orange", "red")) +
facet_wrap(facets = ~ country, scales = "free_y")
# Tambahkan facet untuk scales = free
ggplot(data = agg_kiva_ind_vie, mapping = aes(x = id, y = country)) +
geom_col(aes(fill = repayment_interval), position = "dodge") +
scale_fill_manual(values = c("yellow", "orange", "red")) +
facet_wrap(facets = ~ country, scales = "free")
ggplot(data = agg_kiva_ind_vie, mapping = aes(x = id, y = country)) +
geom_col(aes(fill = repayment_interval), position = "dodge") +
scale_fill_manual(values = c("yellow", "orange", "red")) +
facet_wrap(facets = repayment_interval ~ country, scales = "free")
Hint:
kiva_indo_agri
geom_smooth
untuk membuat garis hubungan antar
x dan y# preparasi data
<- kiva_indo[kiva_indo$sector == "Agriculture",]
kiva_indo_agri
# visualisasi
ggplot(kiva_indo_agri, aes(x = loan_amount, y = lender_count)) +
geom_smooth(col = "navy", fill = "skyblue") +
geom_point() +
labs(title = "Correlation of Loan Amount vs Lender Count",
subtitle = "Country: Indonesia",
x = "Loan Amount (in USD)",
y = "Lender Count",
caption = "Source: Kiva Database") +
scale_x_continuous(labels = dollar_format())
Business Case: Kita diminta untuk melakukan analisa jumlah
loan_amount
untuk sector Education
dan
Health
, untuk negara Philippines
,
India
dan Vietnam
. Hasil dari analisa kita,
akan ditampilkan dengan Multivariate Bar plot
.
Hint:
<- kiva[kiva$country %in% c("Philippines", "India", "Vietnam") & kiva$sector %in% c("Education", "Health"), ]
cond_subseting
<- aggregate(loan_amount ~ country + sector,
agg_dd data = cond_subseting,
FUN = sum)
agg_dd
ggplot(data = agg_dd, mapping = aes(x = loan_amount, y = reorder(country, loan_amount, FUN = sum))) +
geom_col(aes(fill = sector), position = "dodge") +
scale_fill_manual(values = c("yellow", "orange", "red")) +
geom_text(aes(label = loan_amount, group = sector),
position = position_dodge(width = 1),
size = 3,
hjust = -0.05)
leaflet
Kita dapat membuat interactive map dengan bantuan package
leaflet
. Leaflet sendiri adalah open-source JavaScript
library untuk pembuatan interactive maps.
Contoh sederhana:
# install.packages("leaflet")
library(leaflet)
# get icon
<- makeIcon(
ico iconUrl = "https://algorit.ma/wp-content/uploads/2017/07/logo_light_trans.png",
iconWidth=177/2, iconHeight=41/2
)
# make dummy data
set.seed(418)
<- data.frame(lat=runif(5, min = -6.24, max=-6.23),
loca lng=runif(5, min=106.835, max=106.85))
# check data
loca
# create a leaflet map widget
<- leaflet()
map1
# add tiles from open street map
<- addTiles(map1)
map1
# add markers
<- addMarkers(map1, data = loca, icon=ico)
map1
map1
# prepare pop-up
<- c(
pops "<h3>Algoritma Main HQ</h3><p>Visit us here!</p>",
"<strong>Algoritma Business Campus</strong>",
"<h3>In-Construction</h3><p>New Secondary Campus</p>",
"<strong>Secondary Campus</strong>",
"<strong>The Basecamp (business-school)</strong>"
)
# make new leaflet
<- leaflet()
map2 <- addTiles(map2)
map2 <- addMarkers(map2, data = loca, icon=ico, popup = pops)
map2
map2
Berikut adalah website dan referensi yang dapat mempermudah pemahaman kita mengenai leaflet:
Berikut adalah referensi-referensi lain dan website yang dapat memudahkan kita untuk mengekplorasi seputar data visualisasi di R: