Kiva (umumnya dikenal dengan nama domainnya, Kiva.org) adalah organisasi nirlaba yang berkantor pusat di San Francisco, California yang memungkinkan orang meminjamkan uang melalui Internet kepada wirausahawan berpenghasilan rendah dan siswa di 77 negara. Misi Kiva adalah “untuk memperluas akses keuangan untuk membantu komunitas yang kurang terlayani berkembang.”
Sejak 2005, Kiva telah mendanai lebih dari 1,6 juta pinjaman, dengan total lebih dari $ 1,33 miliar, dengan tingkat pembayaran antara 96 dan 97 persen. Lebih dari 1,8 juta pemberi pinjaman di seluruh dunia menggunakan platform Kiva. Pemberi pinjaman tidak menerima bunga atas uang yang mereka pinjamkan. Kiva menyertakan cerita pribadi setiap orang yang mengajukan pinjaman sehingga pemberi pinjaman dapat terhubung dengan peminjam pada tingkat manusia.
Kiva mengandalkan jaringan mitra lapangan untuk mengelola pinjaman di lapangan. Mitra lapangan ini dapat berupa lembaga keuangan mikro, bisnis berdampak sosial, sekolah, atau organisasi nirlaba. Peminjam membayar bunga atas sebagian besar pinjaman kepada mitra lapangan, dan mitra lapangan dikenai biaya kecil oleh Kiva. Kiva didukung oleh hibah, pinjaman, dan donasi dari para penggunanya, perusahaan, dan lembaga nasional.
Sumber : https://en.wikipedia.org/wiki/Kiva_(organization)
Setelah kita membaca profil tentang Kiva, kita akan mengevaluasi data Kiva yang disimpan pada file: loan_kiva.csv. Pertama Import data loan_kiva
pada folder data_input kemudian diberi nama object sebagai kiva
:
read.csv("data_input/loan_kiva.csv") kiva <-
Berikut ini adalah deskripsi dari variabel data kiva:
id
: Unique ID for loan (Loan ID)funded_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
: Full country name of 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
: Interval for the repayment of the loanCara inspect 6 data pertama
head(kiva)
Missing value
Cek kelengkapan data, apakah terdapat missing value/data kosong?
anyNA(kiva)
## [1] FALSE
colSums(is.na(kiva))
## id funded_amount loan_amount activity
## 0 0 0 0
## sector country region currency
## 0 0 0 0
## partner_id posted_time funded_time term_in_months
## 0 0 0 0
## lender_count repayment_interval
## 0 0
Cek structure data
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 : chr "Fruits & Vegetables" "Rickshaw" "Transportation" "Embroidery" ...
## $ sector : chr "Food" "Transportation" "Transportation" "Arts" ...
## $ country : chr "Pakistan" "Pakistan" "India" "Pakistan" ...
## $ region : chr "Lahore" "Lahore" "Maynaguri" "Lahore" ...
## $ currency : chr "PKR" "PKR" "INR" "PKR" ...
## $ partner_id : int 247 247 334 247 245 334 245 245 247 247 ...
## $ posted_time : chr "2014-01-01 06:12:39" "2014-01-01 06:51:08" "2014-01-01 09:58:07" "2014-01-01 08:03:11" ...
## $ funded_time : chr "2014-01-02 10:06:32" "2014-01-02 09:17:23" "2014-01-01 16:01:36" "2014-01-01 13:00:00" ...
## $ 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: chr "irregular" "irregular" "bullet" "irregular" ...
Perbaiki tipe data yang belum sesuai
posted time
funded time
Mengubah tipe data ke tipe date dapat menggunakan as.Date()
. Pertama-tama, cek format tanggal pada variabel tersebut.
tail(kiva)
Format tanggal:
%Y: untuk tahun dengan 4 digit
%y: untuk tahun dengan 2 digit
%m: untuk bulan dengan angka
%b: untuk bulan dengan nama bulan “January”
%d: untuk tanggal 2 digit
Mengubah tipe date
$posted_time <- as.Date(kiva$posted_time, format = "%Y-%m-%d %H:%M:%S") kiva
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 : chr "Fruits & Vegetables" "Rickshaw" "Transportation" "Embroidery" ...
## $ sector : chr "Food" "Transportation" "Transportation" "Arts" ...
## $ country : chr "Pakistan" "Pakistan" "India" "Pakistan" ...
## $ region : chr "Lahore" "Lahore" "Maynaguri" "Lahore" ...
## $ currency : chr "PKR" "PKR" "INR" "PKR" ...
## $ partner_id : int 247 247 334 247 245 334 245 245 247 247 ...
## $ posted_time : Date, format: "2014-01-01" "2014-01-01" ...
## $ funded_time : chr "2014-01-02 10:06:32" "2014-01-02 09:17:23" "2014-01-01 16:01:36" "2014-01-01 13:00:00" ...
## $ 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: chr "irregular" "irregular" "bullet" "irregular" ...
Mengubah tipe data funded_time
$funded_time <- as.Date(kiva$funded_time, format = "%Y-%m-%d %H:%M:%S") kiva
Lakukan feature engineering, buatlah kolom baru bernama range_time yang diperoleh dari selisih funded_time
dan posted_time
$range_time <- kiva$funded_time - kiva$posted_time kiva
head(kiva)
Membuat kolom funded_month
dari variable funded_time
$funded_month <- months(x = kiva$funded_time,abbreviate = TRUE) kiva
Inspect data
head(kiva)
Untuk menampilkan variabel sesuai urutan
c("loan_amount","funded_amount")] kiva[,
Untuk memperoleh summary data gunakan function summary()
summary(kiva)
## id funded_amount loan_amount activity
## Min. : 653047 Min. : 25.0 Min. : 25.0 Length:323279
## 1st Qu.: 737420 1st Qu.: 275.0 1st Qu.: 275.0 Class :character
## Median : 827056 Median : 500.0 Median : 500.0 Mode :character
## Mean : 826774 Mean : 828.8 Mean : 828.8
## 3rd Qu.: 915291 3rd Qu.: 1000.0 3rd Qu.: 1000.0
## Max. :1002884 Max. :100000.0 Max. :100000.0
## sector country region currency
## Length:323279 Length:323279 Length:323279 Length:323279
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
## partner_id posted_time funded_time term_in_months
## Min. : 9.0 Min. :2014-01-01 Min. :2014-01-01 Min. : 2.0
## 1st Qu.:125.0 1st Qu.:2014-07-11 1st Qu.:2014-07-24 1st Qu.: 8.0
## Median :145.0 Median :2015-01-12 Median :2015-01-24 Median : 13.0
## Mean :166.7 Mean :2015-01-08 Mean :2015-01-23 Mean : 13.9
## 3rd Qu.:199.0 3rd Qu.:2015-07-09 3rd Qu.:2015-07-24 3rd Qu.: 14.0
## Max. :469.0 Max. :2015-12-31 Max. :2016-02-25 Max. :158.0
## lender_count repayment_interval range_time funded_month
## Min. : 1.00 Length:323279 Length:323279 Length:323279
## 1st Qu.: 8.00 Class :character Class :difftime Class :character
## Median : 15.00 Mode :character Mode :numeric Mode :character
## Mean : 22.85
## 3rd Qu.: 28.00
## Max. :2986.00
Mengubah tipe data funded_month menjadi factor
$funded_month <- as.factor(kiva$funded_month) kiva
Mengecek kolom funded_amount dan loan_amount memiliki data yang sama atau tidak
head(kiva)
nrow(kiva[kiva$funded_amount == kiva$loan_amount,])
## [1] 323279
levels(kiva$sector)
$sector == "Retail" & kiva$loan_amount > 1000,] kiva[kiva
funded_amount
menampilkan informasi yang sama dengan variabel loan_amount
untuk semua observasi?nrow(kiva[kiva$funded_amount == kiva$loan_amount,])
## [1] 323279
loan_amount
lebih rendah dari 500 USD$range_time > 30 & kiva$loan_amount < 500,] kiva[kiva
bullet
$repayment_interval == "bullet", c("sector","country")] kiva[kiva
c("Beverages","Cafe","Catering","Food", "Restaurant") fnb <-
kiva[kiva$activity %in% fnb,]
data2 <- droplevels(data2) #untuk membuang level yang jumlah observasinya 0
data3 <-$activity <- as.factor(data3$activity)
data3levels(data3$activity)
## [1] "Beverages" "Cafe" "Catering" "Food" "Restaurant"
Ingin mengambil activity yang mengandung kata “Food” menggunakan function str_detect()
library(stringr)
str_detect(string = kiva$activity,pattern = "Food"),] kiva[
Contoh cara membuat sampling:
c("Wisma Asia","BLI Sentul","Menara BCA", "Pondok Indah", "Bekasi")
dat <-set.seed(1)
sample(dat,2)
## [1] "Wisma Asia" "Pondok Indah"
Kemudian kita lakukan sampling untuk 5 observasi data kiva
set.seed(1)
5 <- kiva[sample(nrow(kiva),5),]
data_5 data_
Cara untuk menyimpan file .csv
write.csv(x = data_5,file = "data_input/datakiva5.csv",row.names = F)
Kemudian cara untuk import data
read.csv("data_input/datakiva5.csv")
datakiva5 <- datakiva5
table()
akan menampilkan frekuensi tiap kategori dari data
Menampilkan banyaknya pinjaman pada data kiva
dari masing-masing sector
table(kiva$sector)
##
## Agriculture Arts Clothing Construction Education
## 86509 5324 15840 3377 15752
## Entertainment Food Health Housing Manufacturing
## 373 68752 3686 16318 3656
## Personal Use Retail Services Transportation Wholesale
## 12836 62118 20550 7831 357
Menampilkan proporsi dari masing-masing sector dan bulatkan dua angka dibelakang koma
round(prop.table(table(kiva$sector)),2)
##
## Agriculture Arts Clothing Construction Education
## 0.27 0.02 0.05 0.01 0.05
## Entertainment Food Health Housing Manufacturing
## 0.00 0.21 0.01 0.05 0.01
## Personal Use Retail Services Transportation Wholesale
## 0.04 0.19 0.06 0.02 0.00
Menampilkan proporsi tipe pembayaran yang dipilih peminjam
round(prop.table(table(kiva$repayment_interval)),2)
##
## bullet irregular monthly
## 0.1 0.4 0.5
Additional:
-Mengurutkan table dari yang paling besar hingga terkecil
Cara 1 Menggunakan sort
sort(round(prop.table(table(kiva$sector)),2), decreasing = T)
##
## Agriculture Food Retail Services Clothing
## 0.27 0.21 0.19 0.06 0.05
## Education Housing Personal Use Arts Transportation
## 0.05 0.05 0.04 0.02 0.02
## Construction Health Manufacturing Entertainment Wholesale
## 0.01 0.01 0.01 0.00 0.00
Cara2 Menggunakan order
round(prop.table(table(kiva$sector)),2)
sector <- data.frame(sector)
table_sector <-order(table_sector$Freq,decreasing = T),] table_sector[
Menampilkan 3 sector dengan frequency terbesar
head(table_sector[order(table_sector$Freq,decreasing = T),],3)
Menampilkan banyaknya peminjam berdasarkan sector dan bulan diberikan pinjaman
table(kiva$funded_month, kiva$sector)
##
## Agriculture Arts Clothing Construction Education Entertainment Food
## Agu 7809 492 1249 247 1279 40 5338
## Apr 6340 396 1214 262 917 18 5010
## Des 8486 570 1623 322 2145 40 6800
## Feb 5521 365 1118 262 1226 32 5233
## Jan 5906 319 1341 254 1112 30 5344
## Jul 8391 383 1477 315 1296 25 6168
## Jun 7878 426 1166 299 1142 21 5274
## Mar 8091 491 1425 335 1227 27 6703
## Mei 7464 441 1342 288 1029 28 5400
## Nov 6612 511 1305 237 1438 36 5936
## Okt 7190 434 1367 277 1552 31 5953
## Sep 6821 496 1213 279 1389 45 5593
##
## Health Housing Manufacturing Personal Use Retail Services Transportation
## Agu 311 1278 277 935 4860 1615 533
## Apr 197 1147 316 639 4487 1541 578
## Des 583 1529 350 2412 5785 1965 721
## Feb 239 1089 333 554 4333 1551 620
## Jan 297 1089 234 857 4721 1690 676
## Jul 335 1708 270 927 5972 1926 679
## Jun 243 1497 303 633 4896 1707 625
## Mar 299 1596 347 825 6077 2018 841
## Mei 298 1433 288 574 4898 1790 635
## Nov 293 1286 296 1821 5436 1560 646
## Okt 317 1408 320 1387 5669 1639 664
## Sep 274 1258 322 1272 4984 1548 613
##
## Wholesale
## Agu 21
## Apr 29
## Des 34
## Feb 30
## Jan 20
## Jul 30
## Jun 40
## Mar 34
## Mei 27
## Nov 30
## Okt 42
## Sep 20
xtab()
menampilkan jumlah variabel numerik untuk tiap kategori.
xtab(formula=..., data=...)
Ket:
formula = numerik ~ kategorik
data = data yang digunakan
Menampilkan loan_amount berdasarkan sector dan repayment_interval
xtabs(formula = loan_amount ~ sector + repayment_interval,data = kiva)
## repayment_interval
## sector bullet irregular monthly
## Agriculture 17032775 13625400 37422300
## Arts 817925 1715400 3090800
## Clothing 265100 7640325 9891725
## Construction 82225 730000 2655725
## Education 925125 2967025 11616425
## Entertainment 30425 66075 307350
## Food 1544775 28533200 28181500
## Health 62525 1473250 2764825
## Housing 299300 1185175 9972950
## Manufacturing 217375 987525 2015125
## Personal Use 1130575 757100 4566300
## Retail 1559975 24151100 21039750
## Services 1522500 5781500 13531175
## Transportation 117550 1731575 3384825
## Wholesale 57325 153225 336950
plot(xtabs(formula = loan_amount ~ sector + repayment_interval,data = kiva))
heatmap(xtabs(formula = loan_amount ~ sector + repayment_interval,data = kiva),
Rowv = NA, Colv = NA, cexCol = 0.8)
Gunakan fungsi aggregate()
untuk aggregasi data lebih fleksibel, dapat menggunakan beragam nilai statistik.
aggreagete(formula=..., data=..., FUN=...)
Ket:
Menampilkan rata-rata pinjaman berdasarkan sector dan repayment_interval
aggregate(loan_amount ~ sector + repayment_interval,data = kiva,FUN = mean)
Urutkan loan_amount dari yang paling besar hingga paling kecil
aggregate(loan_amount ~ sector + repayment_interval,data = kiva,FUN = mean)
agg_sector <-order(agg_sector$loan_amount,decreasing = T),] agg_sector[
Contoh Soal
1.Menampilkan rata rata pinjaman yang diberikan oleh kiva dari masing-masing sector
# assign <-
aggregate(loan_amount ~ sector, data = kiva, FUN = mean)
mean_pinjaman <- mean_pinjaman
mean_pinjaman[order(mean_pinjaman$loan_amount, decreasing = T), ]
sort_mean_pinj <- sort_mean_pinj
head(sort_mean_pinj,3)
top3 <- top3
Arts
di setiap activity. Kemudian menampilkan 5 activity yang memiliki jumlah pinjaman paling besar kiva[kiva$sector == "Arts",] data_arts <-
aggregate(loan_amount ~ activity,data = data_arts,FUN = sum) data_arts_agg <-
head(data_arts_agg[order(data_arts_agg$loan_amount, decreasing = T),],5)
-aggregate
aggregate(loan_amount ~ funded_month,data = kiva,FUN = sum) data_loan <-
-urutkan
head(data_loan[order(data_loan$loan_amount, decreasing = T),],1)
aggregate(range_time ~ sector,data = kiva,FUN = mean) waktu_tunggu <-
head(waktu_tunggu[order(waktu_tunggu$range_time, decreasing = T),],5)
read.csv("data_input/loan.csv")
loan <-head(loan)
Buatlah 3 pertanyaan dari data loan, kemudian berikan insight dari output tersebut
no
loan[loan$default == "no",] loan_no <-
aggregate( amount ~ job,data = loan_no,FUN = sum) loan_agg <-
order(loan_agg$amount, decreasing = T),] loan_agg[
critical
dan purpose nya car
levels(loan$credit_history)
loan[loan$credit_history == "critical" & loan$purpose == "car",]
loan_critical <- loan_critical
mean(loan_critical$amount)
## [1] 3592.974
filter kondisi months_loan_duration > 48, age > 50
3 <- loan[ loan$months_loan_duration > 48 & loan$age > 50,]
loan_3 loan_
aggregate(amount ~ purpose,data = loan_3,FUN = sum)
Ketika ingin mengubah isi purpose car0 menjadi car
library(stringr)
$purpose <- str_replace(string = loan$purpose,pattern = "car0", replacement = "car")
loan$purpose <- as.factor(loan$purpose)
loanlevels(loan$purpose)
## [1] "business" "car" "education"
## [4] "furniture/appliances" "renovations"
Kita sudah sampai pada tahap akhir dalam evaluasi data KIVA. Sebagai tambahan, untuk menjalankan chunk bisa gunakan shortcut: ctrl + alt + p.
Membuat function head dan tail
function(x){
headtail <- head(x)
dat_head <- tail(x)
dat_tail <-
rbind(dat_head, dat_tail)
}
headtail(x = kiva)
function(){
dailyreport <- read.csv("data_input/loan_kiva.csv")
kiva <-
$posted_time <- as.Date(kiva$posted_time, format = "%Y-%m-%d %H:%M:%S")
kiva
$funded_time <- as.Date(kiva$funded_time, format = "%Y-%m-%d %H:%M:%S")
kiva
$range_time <- kiva$funded_time - kiva$posted_time
kiva
aggregate(range_time ~ sector,data = kiva,FUN = mean)
result <-
head(result[order(result$range_time, decreasing = T),],5)
}
dailyreport()
Menjalankan function dari rscript
source("dailyreport.R")
dailyreport()
parameter pada chunk:
echo:TRUE, maka chunk akan dijalankan namun tidak ditampilkan pada html.
warning: FALSE, tidak akan memunculkan warning messages.
include: TRUE, chunk akan menjalankan dan menampilkan outputnya pada html.
eval: FALSE, tidak akan menjalankan chunk tersebut.
Setelah melakukan evaluasi pada data KIVA seperti yang dilakukan di atas, perlu juga dilakukan custom RMarkdown untuk mempercantik laporan yang akan ditampikan. Untuk custom RMarkdown, bisa lihat petunjuknya di :
Help - Cheatsheets - RMarkdown Cheatsheet
Sebagai tambahan, berikut link buku untuk lebih memperdalam mengenai RMarkdown
Reference:
1. https://bookdown.org/ndphillips/YaRrr/
2. https://r4ds.had.co.nz/
3. Date Formats in R
4. foragoodstrftime
5. RMarkdown
6. Template Reporting