Salah satu skill yang mendasar untuk seorang Data Scientist adalah Persiapan Data (Manupulasi data). Agar benar-benar efektif, anda harus benar-benar menguasai untuk memanipulasi data yang penting. Karena sebagian besar pekerjaan anda hanya akan melibatkan pengambilan dan pembersihan data.

Data scientist menggunakan 60% waktunya untuk membersihkan dan merapikan data. Mengumpulkan dataset berada di urutan kedua dengan 19% waktunya, yang berarti data scientist menghabiskan sekitar 80% waktunya untuk menyiapkan dan mengelola data untuk analisis.

Di bagian ini, anda akan mempelajari cara melakukan persiapan data dengan mudah menggunakan R. Kami akan membahas beberapa kata kerja manipulasi data mendasar yang paling sering anda gunakan dalam pekerjaan anda.

  • 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 di konjungsi dengan beberapa fungsi termasuk:
    • mean() Mencari mean, atau rata-rata
    • median() Mencari median atau nilai tengah
    • max() Mencari nilai maksimum
    • min() Mencari nilai minimun
    • sum() Menjumlahkan semua nilai secara bersamaan
    • n() Menghitung angka pada catatan

Saya merekomendasikan anda untuk menginstall package tidyverse. Karena inti dari tidyverse termasuk packages yang kemungkinan besar akan anda gunakan setiap menganalisis data.

install.packages("tidyverse") 

Kita terutama akan bekerja menggunakan dua packages yang sangat berguna yang dikembangkan oleh Hadley Wickham, kepala ilmuwan di Rstudio:

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

1 Import Data

Data yang akan kita gunakan di bagian ini adalah pfizer.csv dan fda.csv, silahkan download dan letakkan di dekstop anda. Sebagai opsional, anda dapat memuat data ke R session saat ini dengan memilih Import Dataset > From text File... di Encironent tab. Tetapi, dalam kasur ini, kita akan menggunakan fungsi read_csv() dari package readr. Salin kode berikut kedalam script anda dan jalankan:

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

Perhatikan bahwa anda perlu pemahaman yang kuat mengenai jenis data dasar dan struktur data serta cara mengoprasikannya. Fungsi str() akan memberi tahu anda lebih banyak tentang kolom dalam data anda beserta tipe datanya. Salin kode ini ke script anda dan jalankan:

## 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 dimengerti karena ini adalah objek yang akan anda manipulasi dari hari ke hari berbasis R. Jika anda perlu untuk mengubah tipe data dari kolom tertentu, 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 tangagl
  • as.POSIXct() mengubah menjadi tanggal dan waktu secara lengkap

Misalnya, tambahkan kode berikut ke skrip anda untuk mengonversi total yang dikonversi dalam data pfizer menjadi variabel numerik (yang akan memungkinkannya menyimpan nilai desimal jika ada).

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

3 Missing Value (Nilai yang Hilang)

Tidak seperti pemograman biasa, saat bekerja dengan data di kehidupan nyata, mungkin anda memiliki nilai yang hilang: pengukuran data yang tidak direkam/ disimpan/ dll. R memiliki mekanisme yang cukup canggih untuk mengatasi nilai yang hilang. Ini membedakan antara jenis berikut:

  • NA: Entri tidak tersedia (nilai NA juga memiliki kelas, jadi ada bilangan bulat NA, karakter NA, dan sebagainya)
  • NaN: Bukan angka (nilai NaN juga NA tetapi konversinya tidak benar)

Mencari nilai yang hilang dari kolom pada data frame pfizer

Mekanisme yang lebih umum adalah menghapusnya secara manual:

## integer(0)

4 Mereplace Nilai yang Hilang

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 nilai yang hilang dengan variabel yang baru dibentuk. 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 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.

##      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/mean
  • na.rm = TRUE Mengabaikan nilai yang hilang

Selanjutnya, kita dapat mengganti nilai NA. Kata kerja ‘mutate’ dari pustaka dplyr berguna dalam membuat variabel baru. Kami tidak perlu mengubah kolom asli sehingga kami dapat membuat variabel baru tanpa NA. ‘mutate’ mudah digunakan, kita hanya tinggal memilih nama variabel dan menentukan cara membuat variabelnnya. Berikut kode lengkapnya:

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

5 Select Data

Pada bagian ini, anda akan mempelajari bagaimana cara memilih atau mensubset kolom dataframe 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 tabel data. Ini juga bisa digunakan untuk menghapus kolom dari dataframe.
  • select_if() Memilih kolom berdasarkan kondisi tertentu. Fungsi ini dapat digunakan untuk misalnya memilih kolom jika bentuknya numerik.
  • Helper functions: starts_with(), ends_with(), contains(), matches() : Memilih kolom atau variabel berdasarkan namanya.

6 Filter dan Mengurutkan Data

Sekarang, kita akan filter() dan arrange() data dengan cara yang spesifik. Untuk setiap contoh berikut, salin code berikut ke script anda dan lihat hasilnya. Perhatikan bagaimana kita membuat objek baru untuk menampung data yang diproses.

6.1 Contoh 1

Temukan dokter di California yang dibayar $10,000 atau lebih oleh 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 sort di akhir code untuk mengurutkan membuat daftar dokter secara 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 di California atau Newyork yang dibayar $10.000 atau lebih menggunakan Pfizer untuk menjalankan “Professional Advising”!

Perhatikan bahwa, dalam hal ini kita menggunakan | Operator Boolean, dan t anda kurung di sekitar bagian querynya. Ini memastikan bahwa bagian Query ini dijalankan pertama kali. Lihat apa yang terjadi jika Anda mengecualikan mereka.

## # 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 di negara bagian selain California yang dibayar $10,000 atau lebih berdasarkan 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 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>

6.5 Contoh 5

Temukan 20 dokter yang ada di empat negara bagian terbesar (CA, TX, FL, NY) yang dibayar terbanyak 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 untuk semua pembayaran untuk menjalankan “Expert-Led Forums” atau “Professional Advising”, dan susun berdasarkan abjad dokter (nama belakang, lalu nama depan)

## # 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 Mengganti nama dan Mutasi

Pada bagian ini, anda akan mempelajari bagaimana cara mengganti nama kolom pada sebuah dataframe di R. Anda akan mempelajari fungsi R berikut dari package dplyr pada R:

  • rename() Kode ini digunakan untuk mengganti nama kolom dari sebuah dataframe R.
  • mutate() Menghitung dan menambah variabel baru kedalam data table. Ini mempertahankan variabel yang ada.
  • transmute() Menghitung kolom baru tetapi menghilang 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 (Menggabungkan data)

Ada juga sejumlah fungsi gabungan di dplyr untuk menggabungkan data dari dua dataframe. Berikut ini yang paling berguna:

  • inner_join() Mengembalikan nilai dari kedua table hanya jika terdapat kecocokan.
  • left_join() Mengembalikan semua nilai dari tabel yang disebutkan pertama, ditambah nilai dari tabel kedua yang cocok.
  • semi_join() Memfilter tabel yang disebutkan pertama untuk menyertakan hanya nilai yang memiliki kecocokan pada tabel kedua.
  • anti_join() Memfilter tabel yang disebutkan pertama untuk menyertakan hanya nilai yang tidak memiliki kecocokan di tabel kedua.

Sebagai ilustrasi, gabungan ini akan menemukan dokter yang dibayar oleh Pfizer untuk menjalankan forum yang dipimpin oleh ahli yang juga telah menerima surat peringatan dari fda:

Kode by=c() mendefinisikan bagaimana gabungan harus dibuat. Jika instruksi tentang cara menggabungkan tabel tidak disediakan, dplyr akan mencari kolom dengan nama yang cocok, dan melakukan penggabungan berdasarkan itu. Perbedaan antara dua gabungan di atas adalah yang pertama berisi semua kolom dari kedua dataframe, sedangkan yang kedua hanya memberikan kolom dari dataframe pfizer.

Dalam praktiknya, Anda mungkin ingin menggunakan inner_join dan kemudian menggunakan fungsi select dplyr untuk memilih kolom yang ingin Anda pertahankan, misalnya:

Tekan disini untuk lebih banyak referensi yang berguna untuk mengelola gabungan dengan dplyr.

9 Kelompok dan Kesimpulan

Bagian ini memperkenalkan cara mudah menghitung ringkasan statistik dalam R menggunakan paket dplyr. Anda akan mempelajari, bagaimana:

  • Menghitung ringkasan statistik untuk data yang tidak dikelompokkan, serta untuk data yang dikelompokkan oleh satu atau beberapa variabel. Fungsi R: summarise() dan group_by().
  • Meringkas beberapa kolom variabel. Fungsi R:
    • summarise_all() Terapkan fungsi ringkasan ke setiap kolom di dataframe.
    • summarise_at() Menerapkan fungsi ringkasan ke kolom tertentu yang dipilih dengan vektor karakter
    • summarise_if() Menerapkan fungsi ringkasan ke kolom yang dipilih dengan fungsi predikat yang mengembalikan TRUE

9.1 Contoh 7

Hitung total pembayaran data pfizer, berdasarkan negara bagian secara menurun.

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

9.2 Contoh 8

Hitung beberapa tambahan ringkasan statistik dari pfizer data, menurut status secara 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

Kelompokkan dan ringkaslah data pfizer untuk beberapa kategori secara 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-surat yang dikirim dari awal tahun 2006 dan seterusnya dan ringkaslah!

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

10 Memisahkan Data

Seperti yang telah saya sebutkan 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 menerapkan tugas Machine Learning untuk menganalisis data. Pada bagian ini biasanya kita perlu membagi dataset 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, mari kita lihat beberapa package yang dapat Anda gunakan untuk membagi data:

10.1 dplyr

Anda dapat menggunakan dplyr untuk membuatnya menjadi sangat sederhana. Hal ini memang membutuhkan variabel id pada data set anda, yang merupakan ide bagus, tidak hanya untuk membuat set tetapi juga untuk keterlacakan selama proyek anda. Tambahkan jika belum berisi.

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

Catatan: Pada dataset(kumpulan data) ini, misalnya, tidak cocok untuk tugas Machine Learning karena datanya terlalu kecil.

10.3 caret

Paket hebat lainnya yang dapat anda gunakan untuk membagi dataset adalah caret.

## Loading required package: lattice
## 
## Attaching package: 'caret'
## The following object is masked from 'package:purrr':
## 
##     lift
## [1] 25 11
## [1]  7 11

Lebih lagi.