Salah satu skill yang paling mendasar dalam Data Science adalah Data Preparation (Data Manipulation). Efektifnya, kamu harus lebih pandai dalam melakukan manipulasi data. Ini karena sebagian besar pekerjaan mu akan berkutat dengan mendapat dan membersihkan data.

Seorang Data Scientist menghabiskan 60% waktunya dalam membersihkan dan merapikan data. Mengumpulkan data set muncul di urutan ke-dua yaitu 19% dari waktunya, artinya sebanyak 80% waktu Data Scientist dihabiskan untuk menyiapkan dan mengatur data untuk analisis.

Pada bagian ini kita akan mempelajari bagaimana menampilkan Data Preparation menggunakan R dengan mudah. Kita akan membahas beberapa hal mendasar dalam Data Manipulation yang mana akan sering digunakan di pekerjaan anda nantinya.

  • read_csv() Import data (Memasukkan data, bisa juga gunakan yang lain selain csv)
  • str() Data Structures (Struktur Data)
  • apply() Untuk mengecek dan memindahkan nilai yang hilang
  • select() Memilih kolom mana yang dimasukkan
  • filter() Memilih subset dari data
  • arrange() Mengurutkan data, dalam ukuran untuk data yang kontinu, dalam tanggal, atau alfabet
  • rename() Menggantikan nama kolom
  • mutate() Menambahkan kolom baru dalam data atau menggantikan kolom yang tersedia
  • bind_rows() Menggabungkan dua data frame menjadi satu, menggabungkan data berdasarkan kolom dengan nama yang sama
  • group_by() Mengkelompokkan data berdasarkan kategori
  • summarize() Merangkum, atau pengumpulan(untuk setiap grup jika diikuti group_by()). Sering digunakan yang mana berhubungan dengan fungsi berikut:
    • mean() Menghitung rata-rata
    • median() Menghitung nilai tengah
    • max() Menghitung nilai maximum
    • min() Menghitung nilai minimum
    • sum() Total dari seluruh nilainya
    • n() Menghitung banyak data

Saya merekomendasikan untuk menginstal packages tidyverse. Karena inti dari tidyverse meliputi packages yang kamu akan sering gunakan setiap hari untuk analisis data.

Kita biasanya akan sering bekerja menggunakan dua packages hebat ini yang dikembangkan oleh Hadley Wickham, Kepala Ilmuwan di RStudio:

  • readr untuk membaca dan menulis file CSV dan file teks lainnya.
  • dplyr untuk memproses dan memanipulasi data.

1 Import Data (Memasukkan Data)

Data yang akan kita gunakan pada bagian ini yaitu pfizer.csv dan fda.csv, tolong untuk men-download dan simpan di desktop anda. Kita juga bisa memuat data ke R session saat ini dengan cara memilih Import Dataset>From Text File... didalam Environment tab. Tetapi, untuk kasus ini kita akan gunakan read_csv() dari packages readr. Salin code dibawah ini dan jalankan di R Script mu.

## 
## -- 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()
## )
## 
## -- Column specification --------------------------------------------------------
## cols(
##   name_last = col_character(),
##   name_first = col_character(),
##   name_middle = col_character(),
##   issued = col_date(format = ""),
##   office = col_character()
## )

2 Data Structures (Struktur Data)

Sadar bahwa kita perlu sangatt mengerti tentang dasar tipe data dan struktur data dan bagaimana mengoperasikan mereka. Fungsi str() akan memberitahu kita banyak mengenai kolom data kita, termasuk tipe datanya. Salin code dibawah ini dan jalankan di R Script mu:

## 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()
##   .. )

Sangatlah penting untuk memahaminya karena akan ada objek yang kita manipulasikan dalam R. Jika kamu harus mengubah tipe data dari kolom apapun, gunakan fungsi berikut:

  • as.character() ubah menjadi rangkaian teks.
  • as.numeric() ubah menjadi angka.
  • as.factor() ubah menjadi variabel kategori.
  • as.integer() ubah menjadi integer (bilangan bulat).
  • as.Date() ubah menjadi tanggal.
  • as.POSIXct() ubah menjadi tanggal dan waktu keseluruhan.

Untuk lebih jelasnya, tambahkan kode berikut ke script mu untuk mengubah total pada data pfizer menjadi variabel numerik (dimana bisa mengandung nilai desimal).

##  num [1:10087] 2625 1000 448 119 1800 ...

3 Missing Value (Nilai Yang Hilang)

Tidak seperti programming biasanya, ketika bekerja dengan data asli, kita mungkin akan mempunyai nilai yang hilang: perhitungan yang tidak tercatat/tersimpan/dll. R mempunyai mekanisme yang cukup canggih untuk mengatasi nilai yang hilang. Itu dibagikan menjadi beberapa tipe berikut:

  • NA:Tidak ada masukan (Nilai NA juga memiliki kelas antara lain, integer NA, character NA, dll)
  • NaN:Bukan angka (NaN juga termasuk NA tetapi konteksnya sudah tidak benar)

Mencari nilai yang hilang dari data frame pfizer

Mekanisme yang lebih dasar yaitu dengan cara menghapus secara manual:

## integer(0)

4 Replace Missing Values (Memindahkan Nilai Yang Hilang)

Kita juga bisa memindahkan nilai yang hilang dengan rata-rata(nilai tengah). Cara yang baik yaitu dengan membuat 2 variabel berbeda dari rata-ratanya. Setelah dibuat, kita bisa memindahkan nilai yang hilang dengan variabel baru. Mari unggah data dan verifikasi data yang hilang.

## [1] "Age"  "Fare"

Dalam kasus ini, kita tidak menghapus semua nilai yang hilang, tetapi kita menggunakan metode apply() untuk menghitung rata-rata dari kolom yang mengandung NA. Pertama, kita perlu menghitung rata-rata dengan argumen na.rm = TRUE. Argument ini wajib karena kolom nya mengandung data yang hilang, dan ini memberitahu R untuk mengabaikan mereka.

##      Age     Fare 
## 30.27259 35.62719

Penjelasan Kode: Kita menggunakan 4 argumen dalam metode apply().

  • df titanic[,colnames(titanic) %in% list_na]. Kode ini akan me-return nama kolom berdasarkan objek list_na (yaitu “age” and “fare”)
  • 2 Menghitung fungsi yang ada pada kolom
  • mean Menghitung rata-rata
  • na.rm = TRUE Mengabaikan nilai yang hilang

Selanjutnya, kita bisa memindahkan nilai NA. ‘mutate’ pada library dplyr ini sangat berguna untuk membuat variabel baru. Kita tidak perlu mengubah kolom aslinya jadi kita bisa membuat variabel baru tanpa NA. ‘mutate’ mudah digunakan, kita hanya perlu memilih nama variabel dan menetapkan bagaimana membuat variabel ini. Dibawah ini merupakan kode nya.

## [1] 86
## [1] 1
## [1] 0
## [1] 0

Kolom umur aslinya memiliki 86 nilai yang hilang, sementara variabel yang baru saja di buat sudah memindahkan mereka dengan rata-rata dari variabel umur. Demikian juga, kamu bisa mencoba sendiri untuk memindahkan observasi yang hilang dengan median.

5 Select Data (Memilih Data)

Pada bagian ini, kamu akan belajar bagaimana memilih atau subset kolom data frame berdasarkan nama dan posisi menggunakan fungsi R select() pada packages dplyr. Kamu akan mempelajari fungsi berikut:

  • pull() Mengekstrak nilai kolom menjadi vektor. Kolom yang diinginkan bisa ditentukan dari nama ataupun indeks.
  • select() Mengekstrak satu atau lebih kolom menjadi data table. Itu bisa juga digunakan untuk menghapus kolom dari data frame.
  • select_if() Memilih kolom berdasarkan kondisi tertentu. Fungsi ini bisa digunakan, sebagai contoh, memilih kolom jika mereka adalah numerik.
  • Fungsi Bantuan: starts_with(), ends_with(), contains(), matches(): Memilih kolom/variabel berdasarkan nama mereka.

6 Filter and Sort Data (Filter dan Mengurutkan Data)

Sekarang kita akan filter() dan arrange() data dengan cara yang spesifik. Untuk setiap contoh berikut, salin kode berikut ke dalam script mu dan lihat hasilnya. Sadar bahwa kita membuat objek baru untuk data tersebut.

6.1 Contoh 1

Temukan dokter-dokter di dalam California yang dibayar $10,000 atau lebih dari data Pfizer untuk menjalankan “Professional Advising”!

## # 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>

6.2 Contoh 2

Sekarang tambahkan urutan pada bagian akhir kode, untuk mendaftarkan dokter dalam urutan menurun berdasarkan pembayaran yang diterima!

## # 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>

6.3 Contoh 3

Temukan dokter-dokter di dalam California atau New York yang dibayar $10,000 atau lebih dari data Pfizer untuk menjalankan “Professional Advising”!

Sadar bahwa dalam kasus ini kita perlu gunakan Boolean operator |, dan kurung pada variabel yang diinginkan. Itu artinya menandakan bahwa variabel mana yang dijalankan terlebih dahulu. Lihatlah apa yang terjadi pada kode dibawah ini.

## # 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>

6.4 Contoh 4

Temukan dokter-dokter selain California yang dibayar $10,000 atau lebih dari data Pfizer untuk menjalankan “Professional Advising”!

## # 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 ADAMS, S~ SANDRA GA~ SANDRA     ADAMS     SAN ~ TX    Profess~  12840     0
##  2 AGRAWAL,~ NAURANG    NAURANG    AGRAWAL   KANS~ KS    Profess~  12300     0
##  3 ANTHENEL~ ROBERT MI~ ROBERT     ANTHENEL~ CINC~ OH    Profess~  15520     0
##  4 AYYASH, ~ MAHER OMAR MAHER      AYYASH    PITT~ PA    Profess~  25750     0
##  5 AZAROV, ~ NICK       NICK       AZAROV    ODES~ TX    Profess~  16000     0
##  6 BAILES, ~ JOSEPH SW~ JOSEPH     BAILES    AUST~ TX    Profess~ 105000     0
##  7 BALLAS, ~ CHRISTOS ~ CHRISTOS   BALLAS    GLAD~ PA    Profess~  11000     0
##  8 BEUTLER,~ BRUCE ALAN BRUCE      BEUTLER   DALL~ TX    Profess~  50000     0
##  9 BIRNBAUM~ MORRIS J   MORRIS     BIRNBAUM  NEW ~ NY    Profess~  25000     0
## 10 BRAD D S~ BRAD DAVID BRAD       SIMONS    JUPI~ FL    Profess~  19500     0
## # ... with 125 more rows, and 1 more variable: total <dbl>

6.5 Contoh 5

Temukan 20 dokter dari empat negara terbesar (CA,TX,FL,NY) yang mana paling banyak membayar untuk “Expert-Led Forums”!

## # 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>

6.6 Contoh 6

Filter data pfizer semua pembayaran untuk kategori “Expert-Led Forums” atau “Professional Advising”, dan urutkan dokter-dokter berdasarkan abjad (nama terakhir, lalu nama awal)

## # 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>

7 Rename and Mutate (Ganti Nama dan Ubah)

Pada bagian ini, kamu akan mempelajari bagaimana mengganti nama kolom pada data frame R. Selanjutnya, kamu akan mempelajari bagaimana menghitung dan menambahkan variabel baru ke data frame R. Kamu akan mempelajari fungsi R berikut dari packages dplyr:

  • rename() kode ini digunakan untuk mengganti nama kolom pada data frame R.
  • mutate() menghitung dan menambahkan variabel baru ke data table. Hal ini mempertahankan variabel yang ada.
  • transmute() menghitung kolom baru tetapi menjatuhkan variabel yang ada.
## # 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>
## # 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
## # 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

8 Join Data (Menggabung Data)

Terdapat juga angka pada fungsi join dalam dplyr untuk menyatukan data dari dua data frame. Ini merupakan fungsi join yang banyak digunakan:

  • inner_join() Mengembalikan nilai dari kedua tabel hanya jika ada yang sesuai.
  • left_join() Mengembalikan semua nilai yang disebutkan dari awal tabel, dan yang dari tabel kedua yang sesuai.
  • semi_join() Melakukan filter nilai yang disebutkan dari awal tabel untuk hanya mengandung nilai yang sesuai dengan tabel kedua.
  • anti_join() Melakukan filter nilai yang disebutkan dari awal tabel untuk hanya mengandung 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:

Kode pada by=c() mengartikan bagaimana join harus dibuat. Jika intruksi dalam bagaimana menggabungkan tabel tidak disediakan, dplyr akan melihat ke kolom dengan nama yang sesuai, dan menampilkan gabungannya berdasarkan hal tersebut. 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, kamu mungkin bisa menggunakan inner_join kemudian gunakan fungsi select() yang ada pada dplyr, untuk memilih kolom yang kamu ingin tahan, sebagai contoh:

Klik disini jika ingin referensi yang lebih berguna untuk mengatur join dengan dplyr.

9 Group and Summarize (Mengelompokkan dan Rangkum)

Bagian ini menjelaskan bagaimana menghitung perhitungan statistik dengan mudah di R menggunakan package dplyr. Kamu akan belajar:

  • Menghitung ringkasan statistik untuk data yang tidak dikelompokkan serta untuk data yang dikelommpokkan dengan satu atau lebih variabel. Fungsi R nya: summarise() dan group_by().
  • Meringkaskan beberapa kolom variabel. Fungsi R nya:
    • summarise_all() Menerapkan fungsi summary ke setiap kolom di data frame.
    • summarise_at() Menerapkan fungsi summary ke kolom yang lebih spesifik dengan vektor karakter.
    • summarise_if() Menerapkan fungsi summary ke kolom yang dipilih dengan fungsi predikat mengembalikan TRUE (BENAR).

9.1 Contoh 7

Hitung total pembayaran dari data pfizer, dengan urutan menurun!

## `summarise()` ungrouping output (override with `.groups` argument)

9.2 Contoh 8

Hitung beberapa ringkasan statistik dari data pfizer, dengan urutan menurun!

## # 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

9.3 Contoh 9

Group dan summarize dari data pfizer untuk beberapa kategori naik!

## # 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

9.4 Contoh 10

Filter data fda untuk surat yang dikirim mulai tahun 2006 hingga seterusnya, dan summarize!

## # 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

Hati-hati: menggunakan kembali variabel akan menghasilkan hasil yang tak terduga, tetapi tak perlu khawatir. R akan memberikan peringatan seperti summarise() ungrouping output (override with .groups argument).

10 Split Data (Membagi Data)

Seperti yang sudah saya sebutkan di bab R Programming mengenai menulis fungsi untuk pelatihan split dan pengujian data. Sekarang kita akan pelajari lebih lanjut bagaimana menggunakan beberapa package dengan tujuan untuk membagi data (split data). Karena bagian ini sangat penting bagi Data Scientist khususnya ketika kamu menggunakannya untuk Machine Learning untuk analisis data. Bagian ini biasanya, kita perlu membagi dataset antara train set dan test set untuk mengembalikan ukuran kinerja. Jadi, mari kita lihat beberapa package yang dapat kamu gunakan untuk split data:

10.1 dplyr

Kamu bisa gunakan dplyr untuk ini, membuat lebih sederhana. Ini memerlukan variabel Id di data kamu, dimana merupakan ide yang bagus, bukan hanya untuk membuat set tetapi juga untuk ketertelusuran selama projekmu. Tambahkan itu jika belum ada didalam data.

## [1] 24 12
## [1]  8 12

Catatan: Data ini hanya sebagai contoh, tidak cocok untuk machine learning karena data terlalu kecil.