Salah satu keterampilan yang paling mendasar bagi seorang Data Scientist adalah Persiapan Data (Memanipulasi Data). Untuk menjadi benar - benar efektif, Anda harus menguasai dalam memanipulasi data - data yang penting. Karena sebagian besar pekerjaan Anda hanya akan melibatkan pengambilan dan pembersihan data.
Data scientist menghabiskan 60% waktunya untuk membersihkan dan merapikan data. Mengumpulkan dataset yang berada di urutan kedua dengan 19% waktunya, yang berarti Data Scientist menghabiskan sekitar 80% waktunya untuk menyiapkan dan mengelola data untuk menganalisis.
Di bagian ini, Anda akan mempelajari bagaimana cara melakukan persiapan data dengan mudah menggunakan R. Kami akan membahas beberapa kata kerja data manipulasi mendasar yang akan sering Anda gunakan dalam pekerjaan.
read_csv() Mengimpor data (anda bisa mengikuti yang lain)
str() Struktur Data
apply() Untuk memeriksa dan mengganti data yang hilang
select() Memilih kolum mana yang akan dimasukkan
filter() Memilih subset dari data yang ditentukan
arrange() Menyusun data, dari ukuran variabel kontinu, berdasarkan tanggal, atau secara alfabet
rename() Mengganti nama kolom
mutate() Membuat kolom baru pada data, atau mengganti kolom yang sudah ada
bind_rows() Menggabungkan dua data frame menjadi satu, mengkombinasikan data dari kolom yang namanya sama
group_by() Mengelompokkan data berdasarkan kategori variabelnya
summarize() Menyimpulkan, atau mengumpulan data (untuk masing-masing group jika menggunakan group_by).
Biasa digunakan penghubung dengan beberapa fungsi termasuk :
mean() Mencari rata - rata sebuah datamedian() Mencari nilai tengah sebuah datamax() Mencari nilai maksimal atau tertinggi sebuah datamin() Mencari nilai minimal atau terkecil sebuah datasum() Menjumlahkan atau total semua nilai secara bersamaann() Menghitung angka pada dataSaya merekomendasikan Anda untuk menginstall package tidyverse. Karena inti dari tidyverse termasuk package yang sering Anda gunakan di setiap menganalisis data.
install.packages("tidyverse")
Kita terutama akan bekerja dengan dua paket yang sangat berguna yang dikembangkan oleh Hadley Wickham, kepala scientist di RStudio :
readr untuk membaca dan menulis CSV dan teks file lainnya.dplyr untuk memproses dan memanipulasi data.Data yang akan kita gunakan untuk bagian ini adalah pfizer.csv dan fda.csv, silakan download dan simpan di desktop Anda. Sebagai opsional, Anda dapat memuat data ke sesi R saat ini dengan memilih Impor Set Data> Dari File Teks ... di tab Environment. Tapi, dalam kasus ini, kita akan menggunakan fungsi read_csv () dari paket readr. Salin kode berikut ke dalam skrip Anda dan Jalankan :
## Warning: package 'tidyverse' was built under R version 4.0.3
#setwd("C:/Users/Siana/Downloads") # Ingat untuk mengatur working directory
Pfizer <- read_csv("C:/Users/Siana/Downloads/pfizer.csv") # Memuat data `pfizer` ## Parsed with column specification:
## cols(
## org_indiv = col_character(),
## first_plus = col_character(),
## first_name = col_character(),
## last_name = col_character(),
## city = col_character(),
## state = col_character(),
## category = col_character(),
## cash = col_double(),
## other = col_double(),
## total = col_double()
## )
## Parsed with column specification:
## cols(
## name_last = col_character(),
## name_first = col_character(),
## name_middle = col_character(),
## issued = col_date(format = ""),
## office = col_character()
## )
Perhatikan bahwa Anda memerlukan pemahaman yang mendalam tentang jenis data dasar dan struktur data serta cara mengoperasikannya. Fungsi str () akan memberi tahu lebih banyak tentang kolom dalam data, termasuk tipe datanya. Salin kode ini ke skrip dan Jalankan perintahnya :
## tibble [10,087 x 10] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ org_indiv : chr [1:10087] "3-D MEDICAL SERVICES LLC" "AA DOCTORS, INC." "ABBO, LILIAN MARGARITA" "ABBO, LILIAN MARGARITA" ...
## $ first_plus: chr [1:10087] "STEVEN BRUCE" "AAKASH MOHAN" "LILIAN MARGARITA" "LILIAN MARGARITA" ...
## $ first_name: chr [1:10087] "STEVEN" "AAKASH" "LILIAN" "LILIAN" ...
## $ last_name : chr [1:10087] "DEITELZWEIG" "AHUJA" "ABBO" "ABBO" ...
## $ city : chr [1:10087] "NEW ORLEANS" "PASO ROBLES" "MIAMI" "MIAMI" ...
## $ state : chr [1:10087] "LA" "CA" "FL" "FL" ...
## $ category : chr [1:10087] "Professional Advising" "Expert-Led Forums" "Business Related Travel" "Meals" ...
## $ cash : num [1:10087] 2625 1000 0 0 1800 ...
## $ other : num [1:10087] 0 0 448 119 0 0 47 0 0 396 ...
## $ total : num [1:10087] 2625 1000 448 119 1800 ...
## - attr(*, "spec")=
## .. cols(
## .. org_indiv = col_character(),
## .. first_plus = col_character(),
## .. first_name = col_character(),
## .. last_name = col_character(),
## .. city = col_character(),
## .. state = col_character(),
## .. category = col_character(),
## .. cash = col_double(),
## .. other = col_double(),
## .. total = col_double()
## .. )
## tibble [272 x 5] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ name_last : chr [1:272] "ADELGLASS" "ADKINSON" "ALLEN" "AMSTERDAM" ...
## $ name_first : chr [1:272] "JEFFREY" "N." "MARK" "DANIEL" ...
## $ name_middle: chr [1:272] "M." "FRANKLIN" "S." NA ...
## $ issued : Date[1:272], format: "1999-05-25" "2000-04-19" ...
## $ office : chr [1:272] "Center for Drug Evaluation and Research" "Center for Biologics Evaluation and Research" "Center for Devices and Radiological Health" "Center for Biologics Evaluation and Research" ...
## - attr(*, "spec")=
## .. cols(
## .. name_last = col_character(),
## .. name_first = col_character(),
## .. name_middle = col_character(),
## .. issued = col_date(format = ""),
## .. office = col_character()
## .. )
Hal ini sangat penting untuk di mengerti karena ini adalah objek yang akan anda manipulasikan dari hari ke hari dalam basis R. Jika anda perlu untuk mengubah tipe data dari kolom tertentu, maka gunakan fungsi berikut :
as.character() - Mengubah menjadi teks string.as.numeric() - Mengubah menjadi numerik.as.factor() - Mengubah menjadi variabel kategorikal.as.integer() - Mengubah menjadi integer.as.Date() - Mengubah menjadi tanggal.as.POSIXct() - Mengubah menjadi tanggal dan waktu secara lengkap.Contohnya, tambahkan kode berikut ke R skrip untuk mengonversi total yang dikonversi dalam data pfizer menjadi variabel numerik (yang akan memungkinkannya menyimpan nilai desimal jika ada).
Pfizer$total <- as.numeric(Pfizer$total) # Mengkonversi Total ke variabel numerik
str(Pfizer$total) # Maengecek kembali struktur datanya## num [1:10087] 2625 1000 448 119 1800 ...
Tidak seperti pemograman biasa, saat bekerja dengan data di kehidupan nyata, Anda mungkin memiliki nilai yang hilang : Pengukuran data yang tidak direkam/disimpan dll. R memiliki mekanisme yang cukup canggih untuk mengatasi missing value. Ini dibedakan antara berikut:
NA : Entri yang tidak tersedia (nilai NA juga memiliki kelas, jadi ada bilangan bulat NA, karakter NA, dll.)NaN : Bukan Angka (nilai NaN juga NA tetapi konversinya tidak benar).Mencari nmissing value dari kolom pada data frame pfizer.
is.na(Pfizer) # Cara klasik untuk memeriksa `NA`
sum(is.na(Pfizer)) # Menghitung total `NA`
apply(is.na(Pfizer),2, which) # Yang mana indeks `NA` (hanya `df`)
which(complete.cases(Pfizer)) # Mengidentifikasi nilai lengkap yang diamatiMekanisme yang lebih umum adalah menghapusnya secara manual :
clean.vector <- na.omit(Pfizer$first_name) # Menghapus vektor `NA`
clean.df <- na.omit(Pfizer) # Menghapus dataframe `NA`
apply(is.na(clean.df),2, which) # Memastikan jika ada `Missing Value`## integer(0)
Kita juga bisa mengganti nilai yang hilang dengan Mean (median). Praktik yang baik adalah membuat dua variabel terpisah untuk Mean. Setelah dibuat, kita dapat mengganti Missing Value dengan variabel yang baru dibentuk. Selanjutnya upload data dan verifikasi data yang hilang.
PATH <- "https://raw.githubusercontent.com/Bakti-Siregar/dataset/master/Bookdown-Data-Science-for-Beginners/Missing_Values.csv"
Titanic <- read.csv(PATH, sep = ",")
List_NA <- colnames(Titanic)[ apply(Titanic, 2, anyNA) ]
List_NA## [1] "Age" "Fare"
Dalam kasus ini, kita tidak menghapus semua Missing Value, tetapi kita menggunakan metode apply() untuk menghitung rata-rata kolom dengan NA. Pertama, kita perlu menghitung Mean dengan argumen na.rm = TRUE. Argumen ini wajib karena kolom memiliki data yang hilang, dan ini memberitahu R untuk mengabaikannya.
Average_Missing <- apply(Titanic[,colnames(Titanic) %in% List_NA],
2,
mean,
na.rm = TRUE)
Average_Missing## Age Fare
## 30.27259 35.62719
Penjelasan Code : Kita memiliki 4 argumen dalam metode Apply.
df titanic[,colnames(Titanic) %in% List_Na]. Code ini akan mengembalikan nama kolom dari objek List_Na (yaitu, “Age” dan “Fare”).2 Menghitung fungsi pada kolom.Mean Menghitung rata - rata data.na.rm = TRUE berarti mengabaikan nilai yang hilang.Selanjutnya, kita dapat mengganti nilai NA. Kata kerja ‘mutate’ dari pustaka dplyr berguna dalam membuat variabel baru. Kita tidak perlu mengubah kolom asli sehingga kita dapat membuat variabel baru tanpa NA. ‘mutate’ mudah digunakan, kita hanya perlu memilih nama variabel dan menentukan cara membuat variabelnya. Berikut kode lengkapnya :
Titanic_Replace <- Titanic %>%
mutate(age = ifelse(is.na(Age), Average_Missing[1], Age),
fare = ifelse(is.na(Fare), Average_Missing[2], Fare))
sum(is.na(Titanic_Replace$Age))## [1] 86
## [1] 1
## [1] 0
## [1] 0
Pada kolom umur yang original, terdapat 86 nilai yang hilang dimana pada variabel yang baru dibuat menggantikannya dengan Mean dan variabel age. Anda dapat mencoba sendiri untuk mengganti observasi yang hilang dengan Median juga.
Pada bagian ini, Anda akan mempelajari bagaimana cara memilih atau mensubset kolom data frame berdasarkan Nama dan Posisi menggunakan fungsi R select() pada package dplyr. Anda akan mempelajari cara menggunakan fungsi fungsi berikut :
pull() : Mengekstrak nilai kolom sebagai vektor. Kolom Interest dapat ditentukan berdasarkan nama atau indeks.select() : Mengekstrak satu atau beberapa kolom sebagai Data Tabel. Ini juga bisa digunakan untuk menghapus kolom dari Data Frame.select_if() : Memilih kolom berdasarkan kondisi tertentu. Fungsi ini dapat digunakan untuk misalnya memilih kolom jika bentuknya numerik.starts_with(), ends_with(), contains(), matches() : Memilih kolom atau variabel berdasarkan namanya.library(tidyverse) # Menjalankan `tidyverse`, yang termasuk dalam `dplyr`
Pfizer %>% pull(state) %>% head() # Mengekstrak nilai kolom 'state' sebagai vektor## [1] "LA" "CA" "FL" "FL" "FL" "MI"
## # A tibble: 10,087 x 3
## org_indiv first_plus first_name
## <chr> <chr> <chr>
## 1 3-D MEDICAL SERVICES LLC STEVEN BRUCE STEVEN
## 2 AA DOCTORS, INC. AAKASH MOHAN AAKASH
## 3 ABBO, LILIAN MARGARITA LILIAN MARGARITA LILIAN
## 4 ABBO, LILIAN MARGARITA LILIAN MARGARITA LILIAN
## 5 ABBO, LILIAN MARGARITA LILIAN MARGARITA LILIAN
## 6 ABDULLAH RAFFEE MD PC ABDULLAH ABDULLAH
## 7 ABEBE, SHEILA Y SHEILA Y SHEILA
## 8 ABEBE, SHEILA Y SHEILA Y SHEILA
## 9 ABILENE FAMILY FOOT CENTER GALEN CHRIS GALEN
## 10 ABOLNIK, IGOR Z IGOR Z IGOR
## # ... with 10,077 more rows
## # A tibble: 10,087 x 2
## org_indiv first_name
## <chr> <chr>
## 1 3-D MEDICAL SERVICES LLC STEVEN
## 2 AA DOCTORS, INC. AAKASH
## 3 ABBO, LILIAN MARGARITA LILIAN
## 4 ABBO, LILIAN MARGARITA LILIAN
## 5 ABBO, LILIAN MARGARITA LILIAN
## 6 ABDULLAH RAFFEE MD PC ABDULLAH
## 7 ABEBE, SHEILA Y SHEILA
## 8 ABEBE, SHEILA Y SHEILA
## 9 ABILENE FAMILY FOOT CENTER GALEN
## 10 ABOLNIK, IGOR Z IGOR
## # ... with 10,077 more rows
## # A tibble: 10,087 x 5
## state category cash other total
## <chr> <chr> <dbl> <dbl> <dbl>
## 1 LA Professional Advising 2625 0 2625
## 2 CA Expert-Led Forums 1000 0 1000
## 3 FL Business Related Travel 0 448 448
## 4 FL Meals 0 119 119
## 5 FL Professional Advising 1800 0 1800
## 6 MI Expert-Led Forums 750 0 750
## 7 IN Educational Items 0 47 47
## 8 IN Expert-Led Forums 825 0 825
## 9 TX Professional Advising 3000 0 3000
## 10 UT Business Related Travel 0 396 396
## # ... with 10,077 more rows
## # A tibble: 10,087 x 2
## state total
## <chr> <dbl>
## 1 LA 2625
## 2 CA 1000
## 3 FL 448
## 4 FL 119
## 5 FL 1800
## 6 MI 750
## 7 IN 47
## 8 IN 825
## 9 TX 3000
## 10 UT 396
## # ... with 10,077 more rows
## # A tibble: 10,087 x 3
## cash other total
## <dbl> <dbl> <dbl>
## 1 2625 0 2625
## 2 1000 0 1000
## 3 0 448 448
## 4 0 119 119
## 5 1800 0 1800
## 6 750 0 750
## 7 0 47 47
## 8 825 0 825
## 9 3000 0 3000
## 10 0 396 396
## # ... with 10,077 more rows
## # A tibble: 10,087 x 7
## org_indiv first_plus first_name last_name city state category
## <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 3-D MEDICAL SE~ STEVEN BRUCE STEVEN DEITELZWE~ NEW OR~ LA Professiona~
## 2 AA DOCTORS, IN~ AAKASH MOHAN AAKASH AHUJA PASO R~ CA Expert-Led ~
## 3 ABBO, LILIAN M~ LILIAN MARG~ LILIAN ABBO MIAMI FL Business Re~
## 4 ABBO, LILIAN M~ LILIAN MARG~ LILIAN ABBO MIAMI FL Meals
## 5 ABBO, LILIAN M~ LILIAN MARG~ LILIAN ABBO MIAMI FL Professiona~
## 6 ABDULLAH RAFFE~ ABDULLAH ABDULLAH RAFFEE FLINT MI Expert-Led ~
## 7 ABEBE, SHEILA Y SHEILA Y SHEILA ABEBE INDIAN~ IN Educational~
## 8 ABEBE, SHEILA Y SHEILA Y SHEILA ABEBE INDIAN~ IN Expert-Led ~
## 9 ABILENE FAMILY~ GALEN CHRIS GALEN ALBRITTON ABILENE TX Professiona~
## 10 ABOLNIK, IGOR Z IGOR Z IGOR ABOLNIK PROVO UT Business Re~
## # ... with 10,077 more rows
## # A tibble: 10,087 x 2
## first_plus first_name
## <chr> <chr>
## 1 STEVEN BRUCE STEVEN
## 2 AAKASH MOHAN AAKASH
## 3 LILIAN MARGARITA LILIAN
## 4 LILIAN MARGARITA LILIAN
## 5 LILIAN MARGARITA LILIAN
## 6 ABDULLAH ABDULLAH
## 7 SHEILA Y SHEILA
## 8 SHEILA Y SHEILA
## 9 GALEN CHRIS GALEN
## 10 IGOR Z IGOR
## # ... with 10,077 more rows
## # A tibble: 10,087 x 2
## first_name last_name
## <chr> <chr>
## 1 STEVEN DEITELZWEIG
## 2 AAKASH AHUJA
## 3 LILIAN ABBO
## 4 LILIAN ABBO
## 5 LILIAN ABBO
## 6 ABDULLAH RAFFEE
## 7 SHEILA ABEBE
## 8 SHEILA ABEBE
## 9 GALEN ALBRITTON
## 10 IGOR ABOLNIK
## # ... with 10,077 more rows
## # A tibble: 10,087 x 2
## first_plus first_name
## <chr> <chr>
## 1 STEVEN BRUCE STEVEN
## 2 AAKASH MOHAN AAKASH
## 3 LILIAN MARGARITA LILIAN
## 4 LILIAN MARGARITA LILIAN
## 5 LILIAN MARGARITA LILIAN
## 6 ABDULLAH ABDULLAH
## 7 SHEILA Y SHEILA
## 8 SHEILA Y SHEILA
## 9 GALEN CHRIS GALEN
## 10 IGOR Z IGOR
## # ... with 10,077 more rows
## # A tibble: 10,087 x 4
## org_indiv first_plus first_name last_name
## <chr> <chr> <chr> <chr>
## 1 3-D MEDICAL SERVICES LLC STEVEN BRUCE STEVEN DEITELZWEIG
## 2 AA DOCTORS, INC. AAKASH MOHAN AAKASH AHUJA
## 3 ABBO, LILIAN MARGARITA LILIAN MARGARITA LILIAN ABBO
## 4 ABBO, LILIAN MARGARITA LILIAN MARGARITA LILIAN ABBO
## 5 ABBO, LILIAN MARGARITA LILIAN MARGARITA LILIAN ABBO
## 6 ABDULLAH RAFFEE MD PC ABDULLAH ABDULLAH RAFFEE
## 7 ABEBE, SHEILA Y SHEILA Y SHEILA ABEBE
## 8 ABEBE, SHEILA Y SHEILA Y SHEILA ABEBE
## 9 ABILENE FAMILY FOOT CENTER GALEN CHRIS GALEN ALBRITTON
## 10 ABOLNIK, IGOR Z IGOR Z IGOR ABOLNIK
## # ... with 10,077 more rows
## # A tibble: 10,087 x 5
## org_indiv first_plus first_name last_name city
## <chr> <chr> <chr> <chr> <chr>
## 1 3-D MEDICAL SERVICES LLC STEVEN BRUCE STEVEN DEITELZWEIG NEW ORLEANS
## 2 AA DOCTORS, INC. AAKASH MOHAN AAKASH AHUJA PASO ROBLES
## 3 ABBO, LILIAN MARGARITA LILIAN MARGARITA LILIAN ABBO MIAMI
## 4 ABBO, LILIAN MARGARITA LILIAN MARGARITA LILIAN ABBO MIAMI
## 5 ABBO, LILIAN MARGARITA LILIAN MARGARITA LILIAN ABBO MIAMI
## 6 ABDULLAH RAFFEE MD PC ABDULLAH ABDULLAH RAFFEE FLINT
## 7 ABEBE, SHEILA Y SHEILA Y SHEILA ABEBE INDIANAPOL~
## 8 ABEBE, SHEILA Y SHEILA Y SHEILA ABEBE INDIANAPOL~
## 9 ABILENE FAMILY FOOT CENT~ GALEN CHRIS GALEN ALBRITTON ABILENE
## 10 ABOLNIK, IGOR Z IGOR Z IGOR ABOLNIK PROVO
## # ... with 10,077 more rows
## # A tibble: 10,087 x 8
## org_indiv first_plus first_name last_name city category cash other
## <chr> <chr> <chr> <chr> <chr> <chr> <dbl> <dbl>
## 1 3-D MEDICAL ~ STEVEN BRUCE STEVEN DEITELZW~ NEW O~ Professio~ 2625 0
## 2 AA DOCTORS, ~ AAKASH MOHAN AAKASH AHUJA PASO ~ Expert-Le~ 1000 0
## 3 ABBO, LILIAN~ LILIAN MARG~ LILIAN ABBO MIAMI Business ~ 0 448
## 4 ABBO, LILIAN~ LILIAN MARG~ LILIAN ABBO MIAMI Meals 0 119
## 5 ABBO, LILIAN~ LILIAN MARG~ LILIAN ABBO MIAMI Professio~ 1800 0
## 6 ABDULLAH RAF~ ABDULLAH ABDULLAH RAFFEE FLINT Expert-Le~ 750 0
## 7 ABEBE, SHEIL~ SHEILA Y SHEILA ABEBE INDIA~ Education~ 0 47
## 8 ABEBE, SHEIL~ SHEILA Y SHEILA ABEBE INDIA~ Expert-Le~ 825 0
## 9 ABILENE FAMI~ GALEN CHRIS GALEN ALBRITTON ABILE~ Professio~ 3000 0
## 10 ABOLNIK, IGO~ IGOR Z IGOR ABOLNIK PROVO Business ~ 0 396
## # ... with 10,077 more rows
Sekarang, kita akan filter() dan arrange() data dengan cara yang spesifik. Untuk setiap contoh berikut, salin code berikut ke R script dan lihat hasilnya. Perhatikan bagaimana kita membuat objek baru untuk menampung data yang diproses.
Temukan dokter di California yang dibayar $10,000 atau lebih oleh Pfizer untuk menjalankan “Professional Advising”!
CA_Expert_10000 <- Pfizer %>% # Menjalankan semua `pfizer`
filter(state == "CA" & # Menjalankan semua `pfizer` yang di filter berdasarkan `state`
total >= 10000 & # Di filter berdasarkan `total` >= 10000
category == "Professional Advising") # Lalu filter bersadarkan 'category'
CA_Expert_10000 # Menprint hasilnya## # A tibble: 35 x 10
## org_indiv first_plus first_name last_name city state category cash other
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <dbl> <dbl>
## 1 CUMMINGS~ JEFFREY L~ JEFFREY CUMMINGS LOS ~ CA Profess~ 13500 0
## 2 FONAROW,~ GREGG CUR~ GREGG FONAROW LOS ~ CA Profess~ 15750 0
## 3 GANZ, PE~ PETER PETER GANZ SAN ~ CA Profess~ 22000 0
## 4 GT AND A~ GEORGE GEORGE TRIADAFI~ SAN ~ CA Profess~ 33705 0
## 5 HANAHAN,~ DOUGLAS DOUGLAS HANAHAN SAN ~ CA Profess~ 37500 0
## 6 HERBERT ~ HERBERT HERBERT CRUZ FRES~ CA Profess~ 13250 0
## 7 HU, RONA~ RONA JANE RONA HU PALO~ CA Profess~ 22500 0
## 8 KAPLOWIT~ NEIL NEIL KAPLOWITZ LOS ~ CA Profess~ 12000 0
## 9 KIZER, K~ KENNETH W~ KENNETH KIZER ALIS~ CA Profess~ 10000 0
## 10 KOO, EDW~ EDWARD HA~ EDWARD MANG LA J~ CA Profess~ 12500 0
## # ... with 25 more rows, and 1 more variable: total <dbl>
Sekarang tambahkan sort di akhir code untuk mengurutkan daftar dokter secara menurun berdasarkan pembayaran yang diterima!
CA_Expert_10000 <- Pfizer %>% # Menjalankan semua `pfizer`
filter(state == "CA" & # Memfilter berdasarkan `state` di California
total >= 10000 & # Difilter berdasarkan `total` >= 10000
category == "Professional Advising")%>% # Difilter lagi berdasarkan `category`
arrange(desc(total)) # Mengurutkan order berdasarkan pembayaran yang diterima secara menurun
CA_Expert_10000 # Memprint hasilnya## # A tibble: 35 x 10
## org_indiv first_plus first_name last_name city state category cash other
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <dbl> <dbl>
## 1 MALENKA,~ ROBERT CH~ ROBERT MALENKA STAN~ CA Profess~ 75566 0
## 2 REGENTS ~ DAVID RAY~ DAVID GANDARA IRVI~ CA Profess~ 38500 0
## 3 PTACEK, ~ LOUIS JOHN LOUIS PTACEK SAN ~ CA Profess~ 37588 0
## 4 HANAHAN,~ DOUGLAS DOUGLAS HANAHAN SAN ~ CA Profess~ 37500 0
## 5 REGENTS ~ JOHN POWER JOHN KANE IRVI~ CA Profess~ 37500 0
## 6 RISCH, S~ SAMUEL CR~ SAMUEL RISCH SAN ~ CA Profess~ 36000 0
## 7 GT AND A~ GEORGE GEORGE TRIADAFI~ SAN ~ CA Profess~ 33705 0
## 8 SANDROCK~ CHRISTIAN~ CHRISTIAN SANDROCK SACR~ CA Profess~ 33000 0
## 9 MATTHEW ~ MATTHEW J~ MATTHEW BUDOFF MANH~ CA Profess~ 31500 0
## 10 OLEFSKY,~ JERROLD M~ JERROLD OLEFSKY SOLA~ CA Profess~ 27746 0
## # ... with 25 more rows, and 1 more variable: total <dbl>
Temukan dokter di California atau Newyork yang dibayar $10.000 atau lebih menggunakan Pfizer untuk menjalankan “Professional Advising”!
Perhatikan, dalam hal ini kita menggunakan | Operator Boolean, dan tanda kurung di sekitar bagian querynya. Ini memastikan bahwa bagian Query ini dijalankan pertama kali. Lihat apa yang terjadi jika Anda mengecualikan mereka.
CA_NY_Expert_10000 <- Pfizer %>% # Menjalankan semua `pfizer`
filter((state == "CA" | state == "NY") & # Difilter berdasarkan `state` California atau New York
total >= 10000 & # Difilter berdasarkan `total` sama dengan/ lebih dari 10000
category == "Professional Advising") %>% # Difilter lagi berdasarkan `category`
arrange(desc(total)) # Mengurutkan order berdasarkan pembayaran yang diterima secara menurun
CA_NY_Expert_10000 # Memprint hasilnya## # A tibble: 46 x 10
## org_indiv first_plus first_name last_name city state category cash other
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <dbl> <dbl>
## 1 SAWYERS,~ CHARLES L~ CHARLES SAWYERS NEW ~ NY Profess~ 100000 0
## 2 MALENKA,~ ROBERT CH~ ROBERT MALENKA STAN~ CA Profess~ 75566 0
## 3 REGENTS ~ DAVID RAY~ DAVID GANDARA IRVI~ CA Profess~ 38500 0
## 4 PTACEK, ~ LOUIS JOHN LOUIS PTACEK SAN ~ CA Profess~ 37588 0
## 5 HANAHAN,~ DOUGLAS DOUGLAS HANAHAN SAN ~ CA Profess~ 37500 0
## 6 JAVITT, ~ DANIEL CO~ DANIEL JAVITT ORAN~ NY Profess~ 37500 0
## 7 REGENTS ~ JOHN POWER JOHN KANE IRVI~ CA Profess~ 37500 0
## 8 RISCH, S~ SAMUEL CR~ SAMUEL RISCH SAN ~ CA Profess~ 36000 0
## 9 GT AND A~ GEORGE GEORGE TRIADAFI~ SAN ~ CA Profess~ 33705 0
## 10 SANDROCK~ CHRISTIAN~ CHRISTIAN SANDROCK SACR~ CA Profess~ 33000 0
## # ... with 36 more rows, and 1 more variable: total <dbl>
Temukan dokter di negara bagian selain California yang dibayar $10,000 atau lebih berdasarkan Pfizer untuk menjalankan “Professional Advising”!
Not_CA_Expert_10000 <- Pfizer %>% # Menjalankan semua `pfizer`
filter(state != "CA" & # Filter berdasarkan `state` selain California
total >= 10000 & # Difilter berdasarkan `total` >= dari 10000
category == "Professional Advising") %>% # Difilter lagi berdasarkan `category`
arrange(desc(total)) # Mengurutkan order berdasarkan pembayaran yang diterima secara menurun
Not_CA_Expert_10000 # Memprint hasilnya## # A tibble: 135 x 10
## org_indiv first_plus first_name last_name city state category cash other
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <dbl> <dbl>
## 1 BAILES, ~ JOSEPH SW~ JOSEPH BAILES AUST~ TX Profess~ 105000 0
## 2 SAWYERS,~ CHARLES L~ CHARLES SAWYERS NEW ~ NY Profess~ 100000 0
## 3 MARDER, ~ HAROLD KAY HAROLD MARDER PHIL~ PA Profess~ 87610 0
## 4 WILLIAMS~ GRANT GRANT WILLIAMS WAYNE PA Profess~ 85621 0
## 5 THE SCHE~ PHILIP SA~ PHILIP SCHEIN BRYN~ PA Profess~ 75609 0
## 6 GORDON, ~ JEFFREY I~ JEFFREY GORDON SAIN~ MO Profess~ 75108 0
## 7 KOLLEF, ~ MARIN HRI~ MARIN KOLLEF SAIN~ MO Profess~ 72750 0
## 8 JOSEPH, ~ WARREN S WARREN JOSEPH HUNT~ PA Profess~ 71875 0
## 9 SHORR, A~ ANDREW FR~ ANDREW SHORR WASH~ DC Profess~ 62000 0
## 10 MAYO FOU~ PETER JAM~ PETER DYCK ROCH~ MN Profess~ 61175 0
## # ... with 125 more rows, and 1 more variable: total <dbl>
Temukan 20 dokter yang ada di 4 negara bagian terbesar (CA, TX, FL, NY) yang dibayar terbanyak untuk “Expert-Led Forums”!
FourCountry_Prof_Top20 <- Pfizer %>%
filter((state == "CA" |
state == "NY" |
state == "TX" |
state == "FL") &
category == "Expert-Led Forums") %>%
arrange(desc(total)) %>%
head(20)
FourCountry_Prof_Top20## # A tibble: 20 x 10
## org_indiv first_plus first_name last_name city state category cash other
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <dbl> <dbl>
## 1 SACKS, G~ GERALD MI~ GERALD SACKS SANT~ CA Expert-~ 146500 0
## 2 NIDES, M~ MITCHELL MITCHELL NIDES LOS ~ CA Expert-~ 70500 0
## 3 ROBERT B~ ROBERT BU~ ROBERT NETT SAN ~ TX Expert-~ 60750 0
## 4 SOLERA C~ STEVEN AB~ STEVEN KAPLAN CHAP~ NY Expert-~ 56500 0
## 5 GRIFFIN,~ JAMES DALE JAMES GRIFFIN DALL~ TX Expert-~ 54250 0
## 6 STUBBLEF~ MICHAEL D MICHAEL STUBBLEF~ NEW ~ NY Expert-~ 50500 0
## 7 POTKIN, ~ STEVEN GA~ STEVEN POTKIN ORAN~ CA Expert-~ 48350 0
## 8 GINSBERG~ DAVID ALAN DAVID GINSBERG LOS ~ CA Expert-~ 45750 0
## 9 LOUIE, S~ SAMUEL SAMUEL LOUIE SACR~ CA Expert-~ 41250 0
## 10 INSTITUT~ GURKIPAL GURKIPAL SINGH WOOD~ CA Expert-~ 40000 0
## 11 NEURONLI~ JEFFREY B~ JEFFREY GELBLUM MIAMI FL Expert-~ 39200 0
## 12 HENNEKEN~ CHARLES H CHARLES HENNEKENS BOCA~ FL Expert-~ 33250 0
## 13 SOBHY EL~ SAAD A SAAD SOBHY SYRA~ NY Expert-~ 31500 0
## 14 COHEN, L~ LEE STEVEN LEE COHEN HAST~ NY Expert-~ 30500 0
## 15 BAROYA, ~ IVAN STEP~ IVAN BAROYA BONI~ CA Expert-~ 26400 0
## 16 JONES, S~ STEPHEN E~ STEPHEN JONES DALL~ TX Expert-~ 26250 0
## 17 CRANE, D~ DANIEL LI~ DANIEL CRANE NEW ~ NY Expert-~ 25500 0
## 18 AXONZ INC STANLEY J STANLEY KROLCZYK WESL~ FL Expert-~ 24750 0
## 19 MATTHEW ~ MATTHEW J~ MATTHEW BUDOFF MANH~ CA Expert-~ 24000 0
## 20 QUANG H ~ QUANG H QUANG NGUYEN LA J~ CA Expert-~ 22500 0
## # ... with 1 more variable: total <dbl>
Filter data Pfizer untuk semua pembayaran untuk menjalankan “Expert-Led Forums” atau “Professional Advising”, dan susun berdasarkan abjad dokter (nama belakang, lalu nama depan)
Expert_Professional_Advice <- Pfizer %>%
filter(category == "Expert-Led Forums" |
category == "Professional Advising") %>%
arrange(last_name, first_name)
Expert_Professional_Advice## # A tibble: 4,382 x 10
## org_indiv first_plus first_name last_name city state category cash other
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <dbl> <dbl>
## 1 ABBO, LI~ LILIAN MA~ LILIAN ABBO MIAMI FL Profess~ 1800 0
## 2 ABEBE, S~ SHEILA Y SHEILA ABEBE INDI~ IN Expert-~ 825 0
## 3 NEW YORK~ JUDITH ANN JUDITH ABERG NEW ~ NY Profess~ 1750 0
## 4 ABOLNIK,~ IGOR Z IGOR ABOLNIK PROVO UT Expert-~ 1750 0
## 5 ABRAKSIA~ SAMIR SAMIR ABRAKSIA BEAC~ OH Expert-~ 2000 0
## 6 ABRAKSIA~ SAMIR SAMIR ABRAKSIA BEAC~ OH Profess~ 2500 0
## 7 ABRAMSON~ STEVEN BA~ STEVEN ABRAMSON NEW ~ NY Profess~ 4400 0
## 8 ABUZZAHA~ FARUK S FARUK ABUZZAHAB MINN~ MN Profess~ 1750 0
## 9 ABUZZAHA~ MARY JENN~ MARY ABUZZAHAB SAIN~ MN Expert-~ 1000 0
## 10 ACCACHA,~ SIHAM DON~ SIHAM ACCACHA MINE~ NY Expert-~ 1250 0
## # ... with 4,372 more rows, and 1 more variable: total <dbl>
Pada bagian ini, Anda akan mempelajari bagaimana cara mengganti nama kolom pada sebuah Data Frame di R. Selanjutnya, Anda akan belajar cara menghitung dan menambahkan variabel baru dalam Data Frame di R. Anda akan belajar fungsi R dari paket dplyr R berikut :
rename() Kode ini digunakan untuk mengganti nama kolom dari sebuah Data Frame di R.mutate() Menghitung dan menambah variabel baru kedalam Data Table. Ini mempertahankan variabel yang ada.transmute() Menghitung kolom baru tetapi menghilangkan variabel yang ada.# Mengubah nama kolom data `pfizer` dengan fungsi dasar R:
names(Pfizer)[names(Pfizer) == "org_indiv"] <- "rename1"
names(Pfizer)[1] <- "rename2"
names(Pfizer)[names(Pfizer) == names(Pfizer)] <- c("rename3",
"rename4",
"first_name",
"last_name",
"city",
"state",
"category",
"cash",
"other",
"total")# Mengubah nama kolom data `pfizer` dengan packages `dplyr::rename()`:
Pfizer %>%
rename(
org_indiv = rename3 ,
first_plus = rename4
)## # A tibble: 10,087 x 10
## org_indiv first_plus first_name last_name city state category cash other
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <dbl> <dbl>
## 1 3-D MEDI~ STEVEN BR~ STEVEN DEITELZW~ NEW ~ LA Profess~ 2625 0
## 2 AA DOCTO~ AAKASH MO~ AAKASH AHUJA PASO~ CA Expert-~ 1000 0
## 3 ABBO, LI~ LILIAN MA~ LILIAN ABBO MIAMI FL Busines~ 0 448
## 4 ABBO, LI~ LILIAN MA~ LILIAN ABBO MIAMI FL Meals 0 119
## 5 ABBO, LI~ LILIAN MA~ LILIAN ABBO MIAMI FL Profess~ 1800 0
## 6 ABDULLAH~ ABDULLAH ABDULLAH RAFFEE FLINT MI Expert-~ 750 0
## 7 ABEBE, S~ SHEILA Y SHEILA ABEBE INDI~ IN Educati~ 0 47
## 8 ABEBE, S~ SHEILA Y SHEILA ABEBE INDI~ IN Expert-~ 825 0
## 9 ABILENE ~ GALEN CHR~ GALEN ALBRITTON ABIL~ TX Profess~ 3000 0
## 10 ABOLNIK,~ IGOR Z IGOR ABOLNIK PROVO UT Busines~ 0 396
## # ... with 10,077 more rows, and 1 more variable: total <dbl>
# Menambahkan kolom baru (year*) dengan mempertahankan data `fda` yang ada :
Letters_Year <- Fda %>%
mutate(year = format(issued, "%Y")) %>%
group_by(year)
Letters_Year## # A tibble: 272 x 6
## # Groups: year [15]
## name_last name_first name_middle issued office year
## <chr> <chr> <chr> <date> <chr> <chr>
## 1 ADELGLASS JEFFREY M. 1999-05-25 Center for Drug Evaluatio~ 1999
## 2 ADKINSON N. FRANKLIN 2000-04-19 Center for Biologics Eval~ 2000
## 3 ALLEN MARK S. 2002-01-28 Center for Devices and Ra~ 2002
## 4 AMSTERDAM DANIEL <NA> 2004-11-17 Center for Biologics Eval~ 2004
## 5 AMSTUTZ HARLAN C. 2004-07-19 Center for Devices and Ra~ 2004
## 6 ANDERSON C. JOSEPH 2000-02-25 Center for Devices and Ra~ 2000
## 7 ANDREWS DAVID W. 2000-07-19 Center for Biologics Eval~ 2000
## 8 AQEL RAED <NA> 2002-10-30 Center for Devices and Ra~ 2002
## 9 ARROWSMITH PETER N. 2004-01-21 Center for Devices and Ra~ 2004
## 10 BARR JOHN D. 2000-01-14 Center for Devices and Ra~ 2000
## # ... with 262 more rows
# Menambahkan kolom baru (year*) dan (last_name*) dengan menghilangkan data yang ada `fda`:
Fda %>%
transmute(
year = format(issued, "%Y"),
last_name = name_last
)## # A tibble: 272 x 2
## year last_name
## <chr> <chr>
## 1 1999 ADELGLASS
## 2 2000 ADKINSON
## 3 2002 ALLEN
## 4 2004 AMSTERDAM
## 5 2004 AMSTUTZ
## 6 2000 ANDERSON
## 7 2000 ANDREWS
## 8 2002 AQEL
## 9 2004 ARROWSMITH
## 10 2000 BARR
## # ... with 262 more rows
Terdapat juga sejumlah fungsi join atau gabungan dalam dplyr untuk menggabungkan data dari dua data frame. Berikut ini fungsi join yang sering digunakan:
inner_join() Mengembalikan nilai dari kedua tabel hanya jika ada yang sesuai.left_join() Mengembalikan semua nilai yang disebutkan dari awal tabel, ditambah dari tabel kedua yang sesuai.semi_join() Melakukan filter nilai yang disebutkan dari awal tabel hanya jika terdapat nilai yang sesuai dengan tabel kedua.anti_join() Melakukan filter nilai yang disebutkan dari awal tabel hanya jika terdapat nilai yang tidak sesuai dengan tabel kedua.Untuk ilustrasi, fungsi join ini akan menemukan dokter-dokter yang dibayar oleh pfizer untuk menjalankan forum yang dipimpin ahli (Expert-led forums) dimana juga telah menerima surat peringatan dari fda :
Expert_Warned_Inner <- inner_join(Pfizer, Fda,
by=c("first_name" = "name_first",
"last_name" = "name_last")) %>%
filter(category == "Expert-Led Forums")
Expert_Warned_Semi <- semi_join(Pfizer, Fda,
by=c("first_name" = "name_first",
"last_name" = "name_last")) %>%
filter(category == "Expert-Led Forums")Kode pada by=c() mengartikan bagaimana join harus dibuat. Jika intruksi bagaimana menggabungkan tabel tidak disediakan, dplyr akan mencari kolom dengan nama yang cocok, dan menampilkan gabungannya berdasarkan itu. Perbedaan antara kedua join diatas yaitu pertama, inner_join mengandung semua kolom yang ada pada kedua data frame, sedangkan yang kedua, semi_join hanya memberi kolom dari data frame pfizer.
Pada praktiknya, Anda mungkin bisa menggunakan inner_join kemudian gunakan fungsi select() yang ada pada dplyr, untuk memilih kolom yang Anda ingin pertahankan, sebagai contoh :
Expert_Warned <- inner_join(Pfizer, Fda,
by=c("first_name" = "name_first",
"last_name" = "name_last")) %>%
filter(category=="Expert-Led Forums") %>%
select(last_name,
city,
state,
total,
issued)
Expert_Warned <- inner_join(Pfizer, Fda,
by=c("first_name" = "name_first",
"last_name" = "name_last")) %>%
filter(category=="Expert-Led Forums") %>%
select(2:5,10,12)
Expert_Warned## # A tibble: 4 x 6
## rename4 first_name last_name city total issued
## <chr> <chr> <chr> <chr> <dbl> <date>
## 1 RONALD MATHEW RONALD BUKOWSKI CLEVELAND 22500 2009-03-30
## 2 JEFFREY RONALD JEFFREY LEVENSON SAINT PETERSBURG 1500 2000-09-27
## 3 THOMAS DAVID THOMAS GAZDA SCOTTSDALE 1000 2009-11-24
## 4 DOUGLAS JAMES DOUGLAS WARD WASHINGTON 1500 1997-11-20
Klik disini untuk lebih banyak referensi yang berguna untuk mengelola fungsi join dengan dplyr.
Bagian ini menjelaskan bagaimana menghitung perhitungan statistik dengan mudah di R menggunakan package dplyr. Anda akan mempelajari :
summarise() dan group_by().summarise_all() Menerapkan fungsi summary ke setiap kolom pada Data Frame.summarise_at() Menerapkan fungsi summary ke kolom yang lebih spesifik dengan karakter vektor.summarise_if() Menerapkan fungsi summary ke kolom yang dipilih dengan fungsi predikat mengembalikan TRUE (BENAR).Hitung total pembayaran dari data pfizer, bagian negara dengan urutan menurun!
## `summarise()` ungrouping output (override with `.groups` argument)
## # A tibble: 52 x 2
## state sum
## <chr> <dbl>
## 1 CA 4737807
## 2 TX 2802196
## 3 FL 2564047
## 4 PA 2484505
## 5 NC 2328435
## 6 NY 2065042
## 7 MA 1764771
## 8 IL 1256825
## 9 MI 1146285
## 10 OH 1019450
## # ... with 42 more rows
Hitung beberapa tambahan ringkasan statistik dari pfizer data, menurut status secara menurun!
State_Summary <- Pfizer %>%
group_by(state) %>%
summarize(sum = sum(total),
average = mean(total),
median = median(total),
min = min(total),
max = max(total),
count = n()) %>%
arrange(desc(sum))## `summarise()` ungrouping output (override with `.groups` argument)
## # A tibble: 52 x 7
## state sum average median min max count
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <int>
## 1 CA 4737807 4042. 886. 25 323122 1172
## 2 TX 2802196 4491. 802 25 479314 624
## 3 FL 2564047 3474. 669 25 1185466 738
## 4 PA 2484505 4661. 669 25 672263 533
## 5 NC 2328435 6079. 777 0 857698 383
## 6 NY 2065042 2479. 750 25 100000 833
## 7 MA 1764771 6814. 1250 29 617548 259
## 8 IL 1256825 2805. 661 25 160984 448
## 9 MI 1146285 3352. 750 26 152466 342
## 10 OH 1019450 2207. 685 25 107292 462
## # ... with 42 more rows
Kelompokkan dan ringkaslah data pfizer untuk beberapa kategori secara naik!
State_Summary <- Pfizer %>%
group_by(state, category) %>%
summarize(sum = sum(total),
average = mean(total),
median = median(total),
min = min(total),
max = max(total),
count = n()) %>%
arrange(state, category)## `summarise()` regrouping output by 'state' (override with `.groups` argument)
## # A tibble: 319 x 8
## # Groups: state [52]
## state category sum average median min max count
## <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <int>
## 1 AK Expert-Led Forums 1750 1.75e3 1.75e3 1750 1750 1
## 2 AL Business Related Travel 29123 9.39e2 3.31e2 39 8041 31
## 3 AL Educational Items 431 6.16e1 6.70e1 47 78 7
## 4 AL Expert-Led Forums 129850 4.06e3 2.00e3 550 26250 32
## 5 AL Investigator-Initiated Resear~ 55937 5.59e4 5.59e4 55937 55937 1
## 6 AL Meals 10217 2.69e2 1.86e2 26 1385 38
## 7 AL Pfizer Sponsored Research ini~ 279485 1.40e5 1.40e5 46494 232991 2
## 8 AL Pfizer Sponsored Research ini~ 66096 6.61e4 6.61e4 66096 66096 1
## 9 AL Professional Advising 110560 5.53e3 2.00e3 702 35000 20
## 10 AR Business Related Travel 3783 2.70e2 1.41e2 27 1017 14
## # ... with 309 more rows
Filter data fda untuk surat-surat yang dikirim dari awal tahun 2006 dan seterusnya dan ringkaslah!
Year_Summary <- Fda %>%
filter(issued >= "2005-01-01") %>%
arrange(issued) %>%
mutate(year = format(issued, "%Y")) %>%
group_by(year) %>%
summarize(letters=n())## `summarise()` ungrouping output (override with `.groups` argument)
## # A tibble: 6 x 2
## year letters
## <chr> <int>
## 1 2005 31
## 2 2006 25
## 3 2007 11
## 4 2008 23
## 5 2009 25
## 6 2010 5
Peringatan : Menggunakan kembali variabel dapat menyebabkan hasil yang tidak diharapkan, tetapi jangan khawatir. R akan memberi peringatan seperti summarise() ungrouping output (override with .groups argument).
Seperti yang telah disebutkan di bab Pemograman R tentang fungsi penulisan untuk membagi data pelatihan dan pengujian. Di sini, kita akan belajar lebih banyak tentang bagaimana menggunakan beberapa packages untuk membagi data. Karena bagian ini sangat penting bagi Data Scientist terutama saat Anda menggunakan Machine Learning untuk menganalisis data. Pada bagian ini biasanya kita perlu membagi Data Set antara Train Set dan Test Set. Train set memungkinkan algoritma untuk belajar dari data. Untuk menguji kinerja model kita, kita dapat menggunakan set pengujian untuk mengembalikan ukuran kinerja. Jadi, lihat beberapa package yang dapat Anda gunakan untuk pembagian data :
Anda bisa menggunakan dplyr untuk membuatnya menjadi sangat sederhana. Hal ini memang membutuhkan variabel id pada Data Set anda, yang merupakan ide yang bagus, tidak hanya untuk membuat set tetapi juga untuk keterlacakan selama proyek. Tambahkan jika belum ada didalam data.
library(dplyr) # Memuat package `dplyr`
data(mtcars) # Gunakan data dari R environment
set.seed(123) # untuk memastikan kita menghasilkan data yang sama
mtcars$id <- 1:nrow(mtcars) # Tambahkan `id` kedalam data jika belum ada
train <- mtcars %>% dplyr::sample_frac(.75) # Tetapkan train set
test <- dplyr::anti_join(mtcars, train, by = 'id') # Tetapkan test set
dim(train) # Cek dimensi dari Train Set## [1] 24 12
## [1] 8 12
Catatan : Pada Data Set ini, misalnya, tidak cocok untuk tugas Machine Learning karena datanya terlalu kecil.
Ada banyak pendekatan untuk melakukan partisi data. Untuk pendekatan yang lebih lengkap, lihat fungsi createDataPartition dalam package caTools.
## Warning: package 'caTools' was built under R version 4.0.3
data(mtcars) # Gunakan data dari R environment
set.seed(123) # untuk memastikan kita menghasilkan data yang sama
smp_size <- floor(0.75 * nrow(mtcars)) # 75% dari ukuran sampel
train_ind <- sample(seq_len(nrow(mtcars)),
size = smp_size)
train <- mtcars[train_ind,] # Tetapkan Train Set
test <- mtcars[-train_ind,] # Tetapkan Test Set
dim(train) # Cek dimensi dari Train Set## [1] 24 11
## [1] 8 11
Package keren lainnya yang dapat kita gunakan untuk Split atau pembagian data yaitu caret.
## Warning: package 'caret' was built under R version 4.0.3
## Loading required package: lattice
##
## Attaching package: 'caret'
## The following object is masked from 'package:purrr':
##
## lift
data(mtcars) # Menggunakan data dari R
set.seed(123) # Untuk memastikan kita menjalankan data yang sama
intrain<-createDataPartition(mtcars$mpg,
p=0.75,list=FALSE)
train<-mtcars[intrain,]
test<-mtcars[-intrain,]
dim(train) # Mengecek dimensi dari Train Set## [1] 25 11
## [1] 7 11