Ilmu Data
Ilmu Data
Ilmu Data
ILMU DATA
(Data Science)
YP
YAYASAN PRIMA AGUS TEKNIK
ILMU DATA
(Data Science)
Oleh:
Dr. Joseph Santoso, S.Kom, M.Kom
PENERBIT :
YAYASAN PRIMA AGUS TEKNIK
YP Jl. Majapahit No. 605 Semarang
Telp. (024) 6723456. Fax. 024-6710144
YAYASAN PRIMA AGUS TEKNIK
Email : [email protected]
ILMU DATA (Data Science)
9 786238 120505
, S.Ds., M.Kom
Universitas STEKOM
Dil
KATA PENGANTAR
Puji syukur penulis panjatkan atas terselesaikannya buku yang berjudul “Ilmu data
(Data Science) dapat terselesaikan dengan baik. Ilmu data merujuk pada bidang interdisipliner
yang melibatkan pengumpulan, analisis, interpretasi, pengolahan, dan pemahaman data
untuk mengambil wawasan dan mendukung pengambilan keputusan. Ilmu data
menggabungkan konsep-konsep dari berbagai disiplin ilmu seperti statistik, ilmu komputer,
matematika, dan domain pengetahuan spesifik. Langkah-langkah ilmu data yang dijelaskan
dalam buku ini mencakup pengumpulan data, pembersihan data, eksplorasi data,
permodelan, pengembangan, visualisasi data hingga interpretasi dan pengambilan keputusan.
Ilmu data merubah kita beralih ke mesin untuk melakukan sebagian pekerjaan untuk kita:
mengenali pola, membuat koneksi, dan memberi kita jawaban atas banyak pertanyaan kita.
Mengandalkan komputer untuk melakukan sebagian pekerjaan bagi kita.
Buku ini dibagi dalam 9 bab. Bab 1 dan 2 menawarkan latar belakang dan kerangka
teori umum yang diperlukan untuk memahami sisa buku ini, bab 1 adalah pengantar ilmu data
dan data besar, diakhiri dengan contoh praktis Hadoop. Bab 2 membahas tentang proses ilmu
data, mencakup langkah-langkah yang ada di hampir setiap proyek ilmu data.
Di bab 3 hingga 5, kami menerapkan pembelajaran mesin pada set data yang semakin
besar. Bab 3 membuatnya tetap kecil. Data masih mudah masuk ke dalam memori komputer
rata-rata. Bab 4 menambah tantangan dengan melihat “data besar.” Data ini cocok dengan
mesin Anda, tetapi sulit untuk memasukkannya ke dalam RAM, menjadikannya tantangan
untuk diproses tanpa cluster komputasi. Bab 5 akhirnya melihat data besar. Untuk ini buku ini
tidak dapat bekerja dengan banyak komputer. Bab 6 hingga 9 membahas beberapa materi
menarik dalam ilmu data dalam masalah yang kurang lebih independent, bab 6 membahas
tentang NoSQL dan perbedaannya dengan database relasional. Bab 7 menerapkan ilmu data
untuk mengalirkan data. Di sini masalah utamanya bukanlah ukuran, melainkan kecepatan
pembuatan data dan data lama menjadi usang.
Bab 8 membahas tentang penambangan teks. Tidak semua data dimulai sebagai angka.
Text mining dan text analytics menjadi penting ketika data dalam format tekstual seperti
email, blog, website, dan sebagainya. Bab 9 berfokus pada bagian terakhir dari proses ilmu
data serta visualisasi data dan pembuatan aplikasi prototipe. Akhir kata semoga buku ini
berguna bagi para pembaca.
ii
DAFTAR ISI
iii
6.1. Pengatar Nosql .................................................................................................. 145
6.2. Studi Kasus: Penyakit Apakah Itu? ..................................................................... 156
6.3. Ringkasan ........................................................................................................... 180
BAB 7 DATABASE GRAFIK ............................................................................................ 182
7.1. Database Data Dan Grafik Yang Terhubung ...................................................... 182
7.2. Memperkenalkan Neo4j: Database Grafik ........................................................ 187
7.3. Contoh Data Terhubung .................................................................................... 195
7.4. Ringkasan ........................................................................................................... 206
BAB 8 PENAMBANGAN TEKS DAN ANALISIS TEKS ..................................................... 208
8.1. Penambangan Teks Di Dunia Nyata ................................................................... 209
8.2. Teknik Penambangan Teks ................................................................................ 215
8.3. Studi Kasus: Mengklasifikasikan Kiriman Reddit ............................................... 220
8.4. Ringkasan ........................................................................................................... 241
BAB 9 VISUALISASI DATA KE PENGGUNA AKHIR ........................................................ 242
9.1. Opsi Visualisasi Data .......................................................................................... 243
9.2. Crossfilter, Pustaka Javascript Mapreduce ........................................................ 245
9.3. Membuat Dasbor Interaktif Dengan Dc.Js ........................................................ 254
9.4. Alat Pengembangan Dasbor .............................................................................. 259
9.5. Ringkasan ........................................................................................................... 261
DAFTAR PUSTAKA ........................................................................................................... 263
iv
1
BAB 1
ILMU DATA DALAM DATA BESAR
karena memiliki banyak pustaka ilmu data yang tersedia, dan didukung secara luas oleh
perangkat lunak khusus. Misalnya, hampir setiap database NoSQL populer memiliki API khusus
Python. Karena fitur-fitur ini dan kemampuan untuk membuat prototipe dengan cepat dengan
Python sambil mempertahankan kinerja yang dapat diterima, pengaruhnya terus berkembang
di dunia ilmu data.
Karena jumlah data terus bertambah dan kebutuhan untuk memanfaatkannya
menjadi semakin penting, setiap data scientist akan menemukan proyek data besar sepanjang
karier mereka.
Amerika dan Markas Besar Komunikasi Pemerintah Inggris yang menunjukkan dengan jelas
bagaimana mereka menggunakan ilmu data dan data besar untuk memantau jutaan individu.
Organisasi tersebut mengumpulkan 5 miliar catatan data dari aplikasi yang tersebar luas
seperti Google Maps, Angry Birds, email, dan pesan teks, di antara banyak sumber data
lainnya. Kemudian mereka menerapkan teknik ilmu data untuk menyaring informasi.
Lembaga swadaya masyarakat (LSM) juga sudah tidak asing lagi dalam menggunakan
data. Mereka menggunakannya untuk mengumpulkan uang dan membela tujuan mereka.
World Wildlife Fund (WWF), misalnya, mempekerjakan ilmuwan data untuk meningkatkan
efektivitas upaya penggalangan dana mereka. Banyak ilmuwan data mengabdikan sebagian
waktunya untuk membantu LSM, karena LSM seringkali kekurangan sumber daya untuk
mengumpulkan data dan mempekerjakan ilmuwan data. DataKind adalah salah satu
kelompok ilmuwan data yang mengabdikan waktunya untuk kepentingan umat manusia.
Universitas menggunakan ilmu data dalam penelitian mereka tetapi juga untuk
meningkatkan pengalaman belajar siswa mereka. Munculnya kursus online terbuka besar -
besaran (MOOC) menghasilkan banyak data, yang memungkinkan universitas mempelajari
bagaimana jenis pembelajaran ini dapat melengkapi kelas tradisional. MOOC adalah aset yang
tak ternilai jika Anda ingin menjadi ilmuwan data dan profesional data besar, jadi lihatlah
beberapa yang lebih terkenal: Coursera, Udacity, dan edX. Lanskap data besar dan ilmu data
berubah dengan cepat, dan MOOC memungkinkan Anda untuk tetap mendapatkan informasi
terbaru dengan mengikuti kursus dari universitas terkemuka. Jika Anda belum mengenal
mereka, luangkan waktu untuk melakukannya sekarang; Anda akan mencintai mereka seperti
kami.
keluarga adalah salah satu contohnya. Namun, dunia tidak terdiri dari data terstruktur; itu
dipaksakan oleh manusia dan mesin. Lebih sering, data datang tidak terstruktur.
Gambar 1.2 Email sekaligus merupakan contoh data tidak terstruktur dan data bahasa
alami.
Ilmu Data (Data Science) – Dr. Joseph Santoso
5
Data yang dihasilkan mesin menjadi sumber data utama dan akan terus demikian.
Wikibon memperkirakan bahwa nilai pasar industri Internet (istilah yang diciptakan oleh Frost
& Sullivan untuk merujuk pada integrasi mesin fisik kompleks dengan sensor jaringan dan
perangkat lunak) akan menjadi sekitar Rp. 8 Triliun pada tahun 2020. IDC (International Data
Corporation) memperkirakan akan ada 26 kali lebih banyak hal yang terhubung daripada
orang pada tahun 2020. Jaringan ini biasa disebut sebagai internet of things.
Analisis data mesin bergantung pada alat yang sangat dapat diskalakan, karena volume
dan kecepatannya yang tinggi. Contoh data mesin adalah log server web, catatan detail
panggilan, log peristiwa jaringan, dan telemetri (gambar 1.3). Data mesin yang ditunjukkan
pada gambar 1.3 akan cocok dengan database terstruktur tabel klasik. Ini bukan pendekatan
terbaik untuk data yang sangat saling terhubung atau "berjaringan", di mana hubungan antar
entitas memiliki peran yang berharga.
1.2.5 Data berbasis grafik atau jaringan
"Data grafik" bisa menjadi istilah yang membingungkan karena data apa pun dapat
ditampilkan dalam grafik. "Grafik" dalam hal ini menunjuk pada teori grafik matematika.
Dalam teori graf, graf adalah struktur matematis untuk memodelkan hubungan berpasangan
antar objek. Singkatnya, data grafik atau jaringan adalah data yang berfokus pada hubungan
atau kedekatan objek. Struktur grafik menggunakan node, tepi, dan properti untuk mewakili
dan menyimpan data grafis. Data berbasis grafik adalah cara alami untuk merepresentasikan
jejaring sosial, dan strukturnya memungkinkan Anda menghitung metrik tertentu seperti
pengaruh seseorang dan jalur terpendek antara dua orang.
Doni Wulan
Dwi
Risky
Anjar Ayub
Veri
Sarwo
Gambar 1.4 Teman di jejaring sosial adalah contoh data berbasis grafik.
Contoh data berbasis grafik dapat ditemukan di banyak situs media sosial (gambar 1.4).
Misalnya, di LinkedIn Anda dapat melihat siapa yang Anda kenal di perusahaan mana. Daftar
pengikut Anda di Twitter adalah contoh lain dari data berbasis grafik. Kekuatan dan
kecanggihan berasal dari beberapa grafik yang tumpang tindih dari node yang sama. Misalnya,
Ilmu Data (Data Science) – Dr. Joseph Santoso
7
besar dan Anda akan mendapatkan gambaran tentang kemungkinan tujuan penelitian yang
berbeda.
2. Mengambil Data
3. Persiapan Data
4. Eksplorasi Data
5. Permodelan data
Sistem dapat diskalakan dengan mudah: Anda tidak lagi terikat oleh batasan memori
atau penyimpanan dari satu server.
Di masa lalu, skala ditingkatkan dengan memindahkan semuanya ke server dengan lebih
banyak memori, penyimpanan, dan CPU yang lebih baik (penskalaan vertikal). Saat ini Anda
dapat menambahkan server kecil lainnya (penskalaan horizontal). Prinsip ini membuat potensi
penskalaan hampir tidak terbatas.
Sistem file terdistribusi yang paling terkenal saat ini adalah Hadoop File System (HDFS).
Ini adalah implementasi sumber terbuka dari Sistem File Google. Dalam buku ini kami fokus
pada Sistem File Hadoop karena ini yang paling umum digunakan. Namun, ada banyak sistem
file terdistribusi lainnya: Sistem File Red Hat Cluster, Sistem File Ceph, dan Sistem File Tachyon,
untuk menyebutkan tiga.
Gambar 1.6 Teknologi big data dapat diklasifikasikan menjadi beberapa komponen utama.
Ilmu Data (Data Science) – Dr. Joseph Santoso
11
Anda dapat langsung masuk ke mesin atau menggunakan SSH untuk masuk. Untuk
aplikasi ini Anda akan menggunakan antarmuka web. Arahkan browser Anda ke alamat
http://127.0.0.1:8000 dan Anda akan disambut dengan layar yang ditunjukkan pada gambar
1.9. Hortonworks telah mengunggah dua set sampel, yang dapat Anda lihat di HCatalog. Cukup
klik tombol HCat di layar dan Anda akan melihat tabel yang tersedia untuk Anda (gambar 1.10).
Gambar 1.12 Anda dapat menjalankan perintah HiveQL di editor Beeswax HiveQL. Di
belakang layar itu diterjemahkan ke dalam pekerjaan MapReduce.
Untuk melihat isi data, klik tombol Browse Data di sebelah entri sample_07 untuk
mendapatkan layar berikutnya (gambar 1.11). Ini terlihat seperti tabel biasa, dan Hive adalah
alat yang memungkinkan Anda mendekatinya seperti database biasa dengan SQL. Itu benar:
di Hive Anda mendapatkan hasil menggunakan HiveQL, dialek SQL lama. Untuk membuka
editor Beeswax HiveQL, klik tombol Beeswax pada menu (gambar 1.12).
Setelah beberapa saat hasilnya muncul. Kerja bagus! Kesimpulan dari hal ini, seperti
yang ditunjukkan pada gambar 1.14, adalah pergi ke sekolah kedokteran adalah investasi yang
bagus. Dengan tabel ini kami menyimpulkan tutorial pengantar Hadoop kami. Meskipun bab
ini hanyalah permulaan, terkadang terasa sedikit berlebihan. Disarankan untuk
membiarkannya sekarang dan kembali ke sini lagi ketika semua konsep telah dijelaskan secara
menyeluruh. Ilmu data adalah bidang yang luas sehingga dilengkapi dengan kosakata yang
luas. Kami berharap dapat memberi Anda gambaran sekilas tentang sebagian besar waktu kita
bersama. Setelah itu, Anda memilih dan mengasah keterampilan Anda ke arah mana pun yang
paling Anda minati. Itulah yang dimaksud dengan "Memperkenalkan Ilmu Data" dan kami
harap Anda akan menikmati perjalanan bersama kami.
1.6 RINGKASAN
Dalam bab ini Anda mempelajari hal-hal berikut:
• Data besar adalah istilah umum untuk setiap kumpulan kumpulan data yang begitu besar
atau kompleks sehingga menjadi sulit untuk memprosesnya menggunakan teknik
pengelolaan data tradisional. Mereka dicirikan oleh empat V: kecepatan, variasi, volume,
dan kebenaran.
• Ilmu data melibatkan penggunaan metode untuk menganalisis kumpulan data kecil hingga
kumpulan data besar yang sangat besar.
• Meskipun proses ilmu data tidak linier, proses ini dapat dibagi menjadi beberapa langkah:
1. Menetapkan tujuan penelitian
2. Mengumpulkan data
3. Persiapan data
4. Eksplorasi data
5. Pemodelan
6. Presentasi dan otomatisasi
• Lanskap big data lebih dari sekadar Hadoop. Ini terdiri dari banyak teknologi berbeda yang
dapat dikategorikan sebagai berikut:
– Berkas sistem
– Kerangka pemrograman terdistribusi
– Integrasi data
– Database
– Pembelajaran mesin
– Keamanan
– Penjadwalan
– Tolok ukur
– Penyebaran sistem
– Pemrograman layanan
• Tidak semua kategori data besar banyak digunakan oleh ilmuwan data. Mereka berfokus
terutama pada sistem file, kerangka kerja pemrograman terdistribusi, basis data, dan
pembelajaran mesin. Mereka bersentuhan dengan komponen lain, tetapi ini adalah
domain dari profesi lain.
• Data bisa datang dalam berbagai bentuk. Bentuk utamanya adalah
– Data terstruktur
– Data tidak terstruktur
– Data bahasa alami
– Data mesin
– Data berbasis grafik
– Streaming data
BAB 2
PROSES ILMU DATA
wawasan atau membuat prediksi yang dinyatakan dalam piagam proyek Anda. Sekarang
saatnya mengeluarkan senjata berat, tetapi ingat penelitian telah mengajarkan kita bahwa
seringkali (namun tidak selalu) kombinasi model sederhana cenderung mengungguli satu
model rumit. Jika Anda telah melakukan fase ini dengan benar, Anda hampir selesai.
6. Langkah terakhir dari model ilmu data adalah mempresentasikan hasil Anda dan
mengotomatiskan analisis, jika diperlukan. Salah satu tujuan proyek adalah mengubah
proses dan/atau membuat keputusan yang lebih baik. Anda mungkin masih perlu
meyakinkan bisnis bahwa temuan Anda memang akan mengubah proses bisnis seperti
yang diharapkan. Di sinilah Anda bisa bersinar dalam peran influencer Anda. Pentingnya
langkah ini lebih terlihat dalam proyek-proyek di tingkat strategis dan taktis. Proyek
tertentu mengharuskan Anda untuk melakukan proses bisnis berulang kali, sehingga
mengotomatiskan proyek akan menghemat waktu.
Pada kenyataannya Anda tidak akan maju secara linier dari langkah 1 ke langkah 6.
Sering kali Anda akan mundur dan beralih di antara fase yang berbeda. Mengikuti enam
langkah ini terbayar dalam hal rasio keberhasilan proyek yang lebih tinggi dan peningkatan
dampak hasil penelitian. Proses ini memastikan Anda memiliki rencana penelitian yang
terdefinisi dengan baik, pemahaman yang baik tentang pertanyaan bisnis, dan pengiriman
yang jelas bahkan sebelum Anda mulai melihat data. Langkah pertama dari proses Anda
berfokus pada mendapatkan data berkualitas tinggi sebagai input untuk model Anda. Dengan
cara ini model Anda akan bekerja lebih baik di kemudian hari. Dalam ilmu data ada pepatah
terkenal: Sampah masuk sama dengan sampah keluar. Manfaat lain dari mengikuti
pendekatan terstruktur adalah Anda bekerja lebih banyak dalam mode prototipe saat Anda
mencari model terbaik. Saat membuat prototipe, Anda mungkin akan mencoba beberapa
model dan tidak terlalu berfokus pada masalah seperti kecepatan program atau penulisan
kode yang bertentangan dengan standar. Hal ini memungkinkan Anda untuk fokus membawa
nilai bisnis. Tidak setiap proyek diprakarsai oleh bisnis itu sendiri. Wawasan yang dipelajari
selama analisis atau kedatangan data baru dapat menelurkan proyek baru. Saat tim ilmu data
menghasilkan ide, pekerjaan telah dilakukan untuk membuat proposisi dan menemukan
sponsor bisnis.
Membagi proyek menjadi tahapan yang lebih kecil juga memungkinkan karyawan
untuk bekerja sama sebagai satu tim. Tidak mungkin menjadi spesialis dalam segala hal. Anda
perlu mengetahui cara mengunggah semua data ke semua basis data yang berbeda,
menemukan skema data optimal yang berfungsi tidak hanya untuk aplikasi Anda tetapi juga
untuk proyek lain di dalam perusahaan Anda, dan kemudian melacak semua statistik dan data-
teknik penambangan, sekaligus ahli dalam alat presentasi dan politik bisnis. Itu tugas yang
sulit, dan itulah sebabnya semakin banyak perusahaan mengandalkan tim spesialis daripada
mencoba menemukan satu orang yang dapat melakukan semuanya.
Proses yang kami jelaskan di bagian ini paling cocok untuk proyek ilmu data yang hanya
berisi beberapa model. Itu tidak cocok untuk setiap jenis proyek. Misalnya, proyek yang berisi
jutaan model real-time memerlukan pendekatan yang berbeda dari alur yang kami jelaskan di
sini. Namun, seorang ilmuwan data pemula harus mengikuti cara kerja ini.
2.1.1 Jangan menjadi budak proses
Tidak setiap proyek akan mengikuti cetak biru ini, karena proses Anda tunduk pada
preferensi ilmuwan data, perusahaan, dan sifat proyek yang Anda kerjakan. Beberapa
perusahaan mungkin meminta Anda untuk mengikuti protokol yang ketat, sedangkan yang
lain memiliki cara kerja yang lebih informal. Secara umum, Anda memerlukan pendekatan
terstruktur saat mengerjakan proyek yang kompleks atau saat banyak orang atau sumber daya
terlibat.
Model proyek tangkas adalah alternatif dari proses berurutan dengan iterasi. Karena
metodologi ini memenangkan lebih banyak tempat di departemen TI dan di seluruh
perusahaan, metodologi ini juga diadopsi oleh komunitas ilmu data. Meskipun metodologi
tangkas cocok untuk proyek ilmu data, banyak kebijakan perusahaan akan mendukung
pendekatan yang lebih kaku terhadap ilmu data. Merencanakan setiap detail proses ilmu data
di muka tidak selalu memungkinkan, dan lebih sering daripada tidak Anda akan beralih di
Ilmu Data (Data Science) – Dr. Joseph Santoso
24
antara langkah-langkah proses yang berbeda. Misalnya, setelah pengarahan Anda memulai
aliran normal Anda hingga Anda berada dalam fase analisis data eksplorasi. Grafik Anda
menunjukkan perbedaan perilaku antara dua kelompok—pria dan wanita mungkin? Anda
tidak yakin karena Anda tidak memiliki variabel yang menunjukkan apakah pelanggan pria
atau wanita. Anda perlu mengambil kumpulan data tambahan untuk mengonfirmasi ini. Untuk
ini, Anda harus melalui proses persetujuan, yang menunjukkan bahwa Anda (atau bisnis) perlu
memberikan semacam piagam proyek. Di perusahaan besar, mendapatkan semua data yang
Anda butuhkan untuk menyelesaikan proyek Anda bisa menjadi siksaan.
3. Persiapan Data
4. Eksplorasi Data
5. Permodelan data
2.2.1 Luangkan waktu untuk memahami tujuan dan konteks penelitian Anda
Hasil penting adalah tujuan penelitian yang menyatakan tujuan tugas Anda secara jelas
dan terfokus. Memahami tujuan dan konteks bisnis sangat penting untuk keberhasilan proyek.
Lanjutkan mengajukan pertanyaan dan merancang contoh sampai Anda memahami harapan
bisnis yang tepat, mengidentifikasi bagaimana proyek Anda sesuai dengan gambaran yang
lebih besar, hargai bagaimana penelitian Anda akan mengubah bisnis, dan pahami bagaimana
mereka akan menggunakan hasil Anda. Tidak ada yang lebih membuat frustrasi daripada
menghabiskan waktu berbulan-bulan untuk meneliti sesuatu sampai Anda memiliki satu
momen kecemerlangan dan menyelesaikan masalah, tetapi ketika Anda melaporkan temuan
Anda kembali ke organisasi, semua orang segera menyadari bahwa Anda salah memahami
pertanyaan mereka. Jangan mengabaikan fase ini dengan enteng. Banyak ilmuwan data gagal
di sini: terlepas dari kecerdasan matematis dan kecemerlangan ilmiah mereka, mereka
tampaknya tidak pernah memahami tujuan dan konteks bisnis.
2.2.2 Membuat piagam proyek
Klien ingin mengetahui di awal apa yang mereka bayar, jadi setelah Anda memiliki
pemahaman yang baik tentang masalah bisnis, cobalah untuk mendapatkan kesepakatan
formal tentang hasil kerja. Semua informasi ini sebaiknya dikumpulkan dalam piagam proyek.
Untuk proyek penting apa pun, ini wajib. Piagam proyek membutuhkan kerja tim, dan
masukan Anda setidaknya mencakup hal-hal berikut:
– Tujuan penelitian yang jelas
– Misi dan konteks proyek
– Bagaimana Anda akan melakukan analisis Anda
– Sumber daya apa yang ingin Anda gunakan
– Bukti bahwa ini adalah proyek yang dapat dicapai, atau bukti konsep
– Hasil dan ukuran keberhasilan
– Garis waktu
Klien Anda dapat menggunakan informasi ini untuk memperkirakan biaya proyek dan da ta
serta orang yang diperlukan agar proyek Anda berhasil.
Data Eksternal
2. Mengambil Data
Data Internal
Pemulihan Data
3. Persiapan Data
Kepemilikan Data
4. Eksplorasi Data
5. Permodelan data
Data dapat disimpan dalam berbagai bentuk, mulai dari file teks sederhana hingga
tabel dalam database. Tujuannya sekarang adalah memperoleh semua data yang Anda
butuhkan. Ini mungkin sulit, dan bahkan jika Anda berhasil, data sering kali seperti berlian
dalam bentuk kasar: perlu dipoles agar bisa berguna bagi Anda.
2.3.1 Mulailah dengan data yang disimpan di dalam perusahaan
Tindakan pertama Anda adalah menilai relevansi dan kualitas data yang tersedia di
perusahaan Anda. Sebagian besar perusahaan memiliki program untuk memelihara data
kunci, sehingga sebagian besar pekerjaan pembersihan mungkin sudah dilakukan. Data ini
dapat disimpan dalam repositori data resmi seperti database, data mart, gudang data, dan
data lake yang dikelola oleh tim profesional TI. Tujuan utama database adalah penyimpanan
data, sementara gudang data dirancang untuk membaca dan menganalisis data tersebut. Data
mart adalah bagian dari gudang data dan diarahkan untuk melayani unit bisnis tertentu.
Sementara data warehouse dan data mart adalah rumah bagi data yang diproses sebelumnya,
data lake berisi data dalam format natural atau mentah. Namun ada kemungkinan bahwa data
Anda masih berada di file Excel di desktop pakar domain.
Menemukan data bahkan di dalam perusahaan Anda sendiri terkadang bisa menjadi
tantangan. Seiring pertumbuhan perusahaan, data mereka tersebar di banyak tempat.
Pengetahuan tentang data dapat tersebar saat orang berganti posisi dan meninggalkan
perusahaan. Dokumentasi dan metadata tidak selalu menjadi prioritas utama manajer
pengiriman, jadi mungkin Anda perlu mengembangkan beberapa keterampilan seperti
Sherlock Holmes untuk menemukan semua bagian yang hilang.
Mendapatkan akses ke data adalah tugas sulit lainnya. Organisasi memahami nilai dan
kepekaan data dan seringkali memiliki kebijakan sehingga setiap orang memiliki akses ke apa
yang mereka butuhkan dan tidak lebih. Kebijakan ini diterjemahkan menjadi penghalang fisik
dan digital yang disebut tembok Cina. “Dinding” ini bersifat wajib dan diatur dengan baik
untuk data pelanggan di sebagian besar negara. Ini juga untuk alasan yang bagus; bayangkan
semua orang di perusahaan kartu kredit memiliki akses ke kebiasaan belanja Anda.
Mendapatkan akses ke data mungkin memerlukan waktu dan melibatkan politik perusahaan.
2.3.2 Jangan takut untuk berbelanja
Jika data tidak tersedia di dalam organisasi Anda, lihat di luar dinding organisasi Anda.
Banyak perusahaan berspesialisasi dalam mengumpulkan informasi berharga. Misalnya,
Nielsen dan GFK terkenal akan hal ini di industri retail. Perusahaan lain menyediakan data
sehingga Anda, pada gilirannya, dapat memperkaya layanan dan ekosistem mereka. Seperti
halnya dengan Twitter, LinkedIn, dan Facebook.
Meskipun data dianggap sebagai aset yang lebih berharga daripada minyak oleh
perusahaan tertentu, semakin banyak pemerintah dan organisasi membagikan data mereka
secara gratis kepada dunia. Data ini bisa berkualitas sangat baik; itu tergantung pada institusi
yang membuat dan mengelolanya. Informasi yang mereka bagikan mencakup berbagai topik
seperti jumlah kecelakaan atau jumlah penyalahgunaan narkoba di wilayah tertentu dan
demografinya. Data ini berguna saat Anda ingin memperkaya data hak milik, tetapi juga
nyaman saat melatih keterampilan ilmu data Anda di rumah. Tabel 2.1 hanya menunjukkan
sedikit pilihan dari semakin banyak penyedia data terbuka.
Tabel 2.1 Daftar penyedia data terbuka yang sebaiknya Anda gunakan untuk memulai
Buka situs data Keterangan
Data.gov Rumah data terbuka Pemerintah AS
https://open-data.europa.eu/ Pusat data terbuka Komisi Eropa
Freebase.org Basis data terbuka yang mengambil
informasinya dari situs-situs seperti
Wikipedia, MusicBrains, dan arsip SEC
Data.worldbank.org Inisiatif data terbuka dari Bank Dunia
Aiddata.org Data terbuka untuk pembangunan
internasional
Open.fda.gov Buka data dari Food and Drug
Administration AS
2.3.3 Lakukan pemeriksaan kualitas data sekarang untuk mencegah masalah di kemudian
hari
Berharap untuk menghabiskan sebagian besar waktu proyek Anda melakukan koreksi
dan pembersihan data, terkadang hingga 80%. Pengambilan data adalah pertama kalinya
Anda akan memeriksa data dalam proses ilmu data. Sebagian besar kesalahan yang akan Anda
temui selama fase pengumpulan data mudah dikenali, tetapi terlalu ceroboh akan membuat
Anda menghabiskan waktu berjam-jam untuk menyelesaikan masalah data yang seharusnya
dapat dicegah selama impor data.
Anda akan menyelidiki data selama fase impor, persiapan data, dan eksplorasi.
Perbedaannya terletak pada tujuan dan kedalaman penyelidikan. Selama pengambilan data,
Anda memeriksa apakah data sama dengan data di dokumen sumber dan melihat apakah
Ilmu Data (Data Science) – Dr. Joseph Santoso
28
Anda memiliki tipe data yang tepat. Ini seharusnya tidak memakan waktu terlalu lama; ketika
Anda memiliki cukup bukti bahwa data tersebut serupa dengan data yang Anda temukan di
dokumen sumber, Anda berhenti. Dengan persiapan data, Anda melakukan pemeriksaan yang
lebih rumit. Jika Anda melakukan pekerjaan dengan baik selama fase sebelumnya, kesalahan
yang Anda temukan sekarang juga ada di dokumen sumber. Fokusnya adalah pada konten
variabel: Anda ingin menghilangkan kesalahan ketik dan kesalahan entri data lainnya serta
membawa data ke standar umum di antara kumpulan data. Misalnya, Anda dapat mengoreksi
USQ ke AS dan Inggris ke Inggris. Selama fase eksplorasi, fokus Anda beralih ke apa yang dapat
Anda pelajari dari data. Sekarang Anda menganggap data bersih dan melihat properti statistik
seperti distribusi, korelasi, dan outlier. Anda akan sering mengulangi fase ini. Misalnya, ketika
Anda menemukan outlier dalam fase eksplorasi, mereka dapat menunjukkan kesalahan entri
data. Sekarang setelah Anda memahami bagaimana kualitas data ditingkatkan selama proses
berlangsung, kita akan melihat lebih dalam ke langkah persiapan data.
Gambar 2.5 Titik yang dilingkari sangat memengaruhi model dan perlu diselidiki karena
dapat menunjuk ke wilayah di mana Anda tidak memiliki cukup data atau mungkin
menunjukkan kesalahan dalam data, tetapi juga dapat menjadi titik data yang valid.
Terkadang Anda akan menggunakan metode yang lebih canggih, seperti pemodelan
sederhana, untuk menemukan dan mengidentifikasi kesalahan data; plot diagnostik bisa
sangat berwawasan. Misalnya, pada gambar 2.5 kami menggunakan ukuran untuk
mengidentifikasi titik data yang tampaknya tidak pada tempatnya. Kami melakukan regresi
untuk mengenal data dan mendeteksi pengaruh pengamatan individu pada garis regresi.
Ketika satu pengamatan memiliki terlalu banyak pengaruh, ini bisa menunjukkan kesalahan
dalam data, tapi juga bisa menjadi poin yang valid. Namun, pada tahap pembersihan data,
metode canggih ini jarang diterapkan dan sering dianggap oleh ilmuwan data tertentu sebagai
sesuatu yang berlebihan. Sekarang setelah kami memberikan ikhtisar, saatnya menjelaskan
kesalahan ini secara lebih mendetail.
Tabel 2.3 Mendeteksi outlier pada variabel sederhana dengan tabel frekuensi
Nilai Menghitung
Bagus 1598647
Buruk 1354468
Godo 15
Bade 1
Sebagian besar kesalahan jenis ini mudah diperbaiki dengan pernyataan penugasan sederhana
dan aturan if-then-else:
if x == "Godo";
x = "Good"
if x == "Bade";
x == "Bad"
Misalnya, di Python Anda dapat menggunakan fungsi strip() untuk menghapus spasi awal dan
akhir.
Memperbaiki Kesalahan Huruf Kapital
Ketidaksesuaian huruf kapital sering terjadi. Sebagian besar bahasa pemrograman
membedakan antara “Brasil” dan “Brasil”. Dalam hal ini Anda dapat menyelesaikan masalah
dengan menerapkan fungsi yang mengembalikan kedua string dalam huruf kecil, seperti
.lower() dengan Python. “Brazil”.lower() == “brazil”.lower() harus
menghasilkan true.
Nilai-Nilai Mustahil dan Pemeriksaan Sanitasi
Pemeriksaan kewarasan adalah jenis pemeriksaan data lain yang berharga. Di sini Anda
membandingkan nilai dengan nilai yang tidak mungkin secara fisik atau teoritis seperti orang
yang lebih tinggi dari 3 meter atau seseorang dengan usia 299 tahun. Pemeriksaan kewarasan
dapat langsung dinyatakan dengan aturan:
Outlier
Outlier adalah pengamatan yang tampak jauh dari pengamatan lain atau, lebih khusus
lagi, satu pengamatan yang mengikuti logika atau proses generatif yang berbeda dari
pengamatan lainnya. Cara termudah untuk menemukan outlier adalah dengan menggunakan
plot atau tabel dengan nilai minimum dan maksimum. Contohnya ditunjukkan pada gambar
2.6. Plot di atas tidak menunjukkan outlier, sedangkan plot di bawah menunjukkan
kemungkinan outlier di sisi atas ketika diharapkan distribusi normal. Distribusi normal, ata u
distribusi Gaussian, adalah distribusi paling umum dalam ilmu alam.
Ini menunjukkan sebagian besar kasus terjadi di sekitar rata-rata distribusi dan
kejadiannya menurun ketika semakin jauh darinya. Nilai tinggi di grafik bawah dapat
menunjukkan outlier saat mengasumsikan distribusi normal. Seperti yang kita lihat
sebelumnya dengan contoh regresi, outlier dapat sangat memengaruhi pemodelan data Anda,
jadi selidiki terlebih dahulu.
Gambar 2.6 Plot distribusi sangat membantu dalam mendeteksi outlier dan membantu
Anda memahami variabelnya.
Teknik mana yang digunakan pada jam berapa tergantung pada kasus khusus Anda.
Jika, misalnya, Anda tidak memiliki pengamatan untuk dicadangkan, menghilangkan
Ilmu Data (Data Science) – Dr. Joseph Santoso
34
pengamatan mungkin bukanlah suatu pilihan. Jika variabel dapat dijelaskan dengan distribusi
yang stabil, Anda dapat menghitung berdasarkan ini. Namun, mungkinkah nilai yang hilang
sebenarnya berarti "nol"? Ini dapat terjadi dalam penjualan misalnya: jika tidak ada promosi
yang diterapkan pada keranjang pelanggan, promo pelanggan tersebut hilang, tetapi
kemungkinan besar juga 0, tidak ada potongan harga.
Penyimpangan Dari Buku Kode
Mendeteksi kesalahan dalam kumpulan data yang lebih besar terhadap buku kode
atau terhadap nilai standar dapat dilakukan dengan bantuan operasi himpunan. Buku kode
adalah deskripsi data Anda, suatu bentuk metadata. Ini berisi hal-hal seperti jumlah variabel
per pengamatan, jumlah pengamatan, dan apa arti setiap pengkodean dalam variabel.
(Misalnya "0" sama dengan "negatif", "5" adalah singkatan dari "sangat positif".) Buku kode
juga memberi tahu jenis data yang Anda lihat: apakah hierarkis, grafik, atau hal lain?
Anda melihat nilai-nilai yang ada di set A tetapi tidak di set B. Ini adalah nilai yang harus
diperbaiki. Bukan kebetulan bahwa set adalah struktur data yang akan kita gunakan saat
bekerja dalam kode. Merupakan kebiasaan yang baik untuk memberikan pemikiran tambahan
pada struktur data Anda; itu dapat menghemat pekerjaan dan meningkatkan kinerja program
Anda.
Jika Anda memiliki beberapa nilai untuk diperiksa, lebih baik memasukkannya dari
buku kode ke dalam tabel dan menggunakan operator perbedaan untuk memeriksa
perbedaan antara kedua tabel. Dengan cara ini, Anda bisa mendapatkan keuntungan dari
kekuatan database secara langsung. Lebih lanjut tentang ini di bab 5.
Unit Pengukuran Yang Berbeda
Saat mengintegrasikan dua set data, Anda harus memperhatikan unit pengukurannya
masing-masing. Contohnya adalah ketika Anda mempelajari harga bensin di dunia. Untuk
melakukan ini, Anda mengumpulkan data dari berbagai penyedia data. Kumpulan data dapat
berisi harga per galon dan lainnya dapat berisi harga per liter. Konversi sederhana akan
berhasil dalam kasus ini.
Tingkat Agregasi yang Berbeda
Memiliki tingkat agregasi yang berbeda serupa dengan memiliki jenis pengukuran yang
berbeda. Contohnya adalah kumpulan data yang berisi data per minggu versus kumpulan data
yang berisi data per minggu kerja. Jenis kesalahan ini umumnya mudah dideteksi, dan
meringkas (atau kebalikannya, memperluas) kumpulan data akan memperbaikinya. Setelah
membersihkan kesalahan data, Anda menggabungkan informasi dari sumber data yang
berbeda. Namun sebelum kita membahas topik ini, kita akan mengambil sedikit jalan
memutar dan menekankan pentingnya membersihkan data sedini mungkin.
2.4.2 Perbaiki kesalahan sedini mungkin
Praktik yang baik adalah memediasi kesalahan data sedini mungkin dalam rantai
pengumpulan data dan memperbaiki sesedikit mungkin di dalam program Anda sambil
memperbaiki asal mula masalahnya. Mengambil data adalah tugas yang sulit, dan organisasi
menghabiskan jutaan dolar untuk itu dengan harapan dapat membuat keputusan yang lebih
baik. Proses pengumpulan data rawan kesalahan, dan dalam organisasi besar melibatkan
banyak langkah dan tim.
Ilmu Data (Data Science) – Dr. Joseph Santoso
35
Kami fokus pada data dalam struktur tabel dalam bab ini demi singkatnya. Sangat mudah
untuk mengisi seluruh buku tentang topik ini saja, dan kami memilih untuk fokus pada proses
ilmu data daripada menyajikan skenario untuk setiap jenis data. Namun perlu diingat bahwa
ada jenis sumber data lain, seperti penyimpanan nilai kunci, penyimpanan dokumen, dan
sebagainya, yang akan kami tangani di tempat yang lebih sesuai di buku ini.
Cara Yang Berbeda Untuk Menggabungkan Data
Anda dapat melakukan dua operasi untuk menggabungkan informasi dari set data yang
berbeda. Operasi pertama adalah bergabung: memperkaya pengamatan dari satu tabel
dengan informasi dari tabel lain. Operasi kedua adalah menambahkan atau menumpuk:
menambahkan pengamatan dari satu tabel ke tabel lain.
Saat Anda menggabungkan data, Anda memiliki opsi untuk membuat tabel fisik baru
atau tabel virtual dengan membuat tampilan. Keuntungan dari tampilan adalah tidak
menghabiskan lebih banyak ruang disk. Mari kita uraikan sedikit tentang metode ini.
Tabel Bergabung
Menggabungkan tabel memungkinkan Anda menggabungkan informasi dari satu
pengamatan yang ditemukan di satu tabel dengan informasi yang Anda temukan di tabel lain.
Fokusnya adalah pada memperkaya pengamatan tunggal. Katakanlah tabel pertama berisi
informasi tentang pembelian pelanggan dan tabel lainnya berisi informasi tentang wilayah
tempat tinggal pelanggan Anda. Menggabungkan tabel memungkinkan Anda menggabungkan
informasi sehingga Anda dapat menggunakannya untuk model Anda, seperti yang ditunjukkan
pada gambar 2.7.
Untuk menggabungkan tabel, Anda menggunakan variabel yang mewakili objek yang
sama di kedua tabel, seperti tanggal, nama negara, atau nomor Jaminan Sosial. Bidang umum
ini dikenal sebagai kunci. Ketika kunci ini juga secara unik menentukan catatan dalam tabel,
mereka disebut kunci primer. Satu tabel mungkin memiliki perilaku pembelian dan tabel
lainnya mungkin memiliki informasi demografis seseorang. Pada gambar 2.7 kedua tabel berisi
nama klien, dan ini memudahkan untuk memperkaya pengeluaran klien dengan wilayah klien.
Orang yang terbiasa dengan Excel akan melihat kesamaan dengan menggunakan fungsi
pencarian.
Gambar 2.7 Menggabungkan dua tabel pada kunci Item dan Region
Jumlah baris yang dihasilkan dalam tabel keluaran tergantung pada jenis gabungan
yang tepat yang Anda gunakan. Kami memperkenalkan berbagai jenis gabungan nanti di buku
ini.
Tabel Penyimpanan
Menambahkan atau menumpuk tabel secara efektif menambahkan pengamatan dari
satu tabel ke tabel lainnya. Gambar 2.8 menunjukkan contoh penambahan tabel. Satu tabel
berisi observasi dari bulan Januari dan tabel kedua berisi observasi dari bulan Februari. Hasil
menambahkan tabel ini lebih besar dengan pengamatan dari Januari serta Februari.
Gambar 2.8 Menambahkan data dari tabel adalah operasi umum tetapi membutuhkan
struktur yang sama dalam tabel yang ditambahkan.
Operasi yang setara dalam teori himpunan akan menjadi penyatuan, dan ini juga
merupakan perintah dalam SQL, bahasa umum dari basis data relasional. Operator himpunan
lain juga digunakan dalam ilmu data, seperti perbedaan himpunan dan irisan.
Menggunakan Tampilan Untuk Simulasi Data Gabung Dan Tambahkan
Untuk menghindari duplikasi data, Anda secara virtual menggabungkan data dengan
tampilan. Pada contoh sebelumnya kami mengambil data bulanan dan menggabungkannya
dalam tabel fisik baru. Masalahnya adalah kami menggandakan data dan karena itu
membutuhkan lebih banyak ruang penyimpanan. Dalam contoh yang sedang kita kerjakan, hal
itu mungkin tidak menimbulkan masalah, tetapi bayangkan bahwa setiap tabel terdiri dari
terabyte data; maka menjadi masalah untuk menggandakan data. Untuk alasan ini, konsep
tampilan diciptakan. Tampilan berperilaku seolah-olah Anda sedang mengerjakan tabel, tetapi
tabel ini hanyalah lapisan virtual yang menggabungkan tabel untuk Anda. Gambar 2.9
menunjukkan bagaimana data penjualan dari bulan yang berbeda digabungkan secara virtual
menjadi tabel penjualan tahunan alih-alih menduplikasi data. Namun, tampilan memang
memiliki kelemahan. Meskipun gabungan tabel hanya dilakukan sekali, gabungan yang
membuat tampilan dibuat ulang setiap kali kueri, menggunakan lebih banyak daya
pemrosesan daripada yang dimiliki tabel yang telah dihitung sebelumnya.
Gambar 2.10 Pertumbuhan, penjualan berdasarkan kelas produk, dan peringkat penjualan
adalah contoh pengukuran turunan dan agregat.
masalah estimasi secara dramatis. Gambar 2.11 menunjukkan bagaimana mengubah variabel
input sangat menyederhanakan masalah estimasi. Lain kali Anda mungkin ingin
menggabungkan dua variabel menjadi variabel baru.
Gambar 2.11 Transformasi x ke log x membuat hubungan antara x dan y linier (kanan),
dibandingkan dengan non-log x (kiri).
Ilmuwan data menggunakan metode khusus untuk mengurangi jumlah variabel tetapi
mempertahankan jumlah data maksimum. Kami akan membahas beberapa metode ini di bab
3. Gambar 2.12 menunjukkan bagaimana pengurangan jumlah variabel memudahkan untuk
memahami nilai kunci. Ini juga menunjukkan bagaimana dua variabel menyumbang 50,6% dari
variasi dalam kumpulan data (komponen1 = 27,8% + komponen2 = 22,8%). Variabel-variabel
ini, yang disebut "component1" dan "component2", keduanya merupakan kombinasi dari
variabel asli. Mereka adalah komponen utama dari struktur data yang mendasarinya. Jika saat
ini belum begitu jelas, jangan khawatir, analisis komponen utama (PCA) akan dijelaskan lebih
menyeluruh di bab 3. Yang juga bisa Anda lihat adalah adanya variabel ketiga (tidak diketahui)
yang memisahkan kelompok pengamatan menjadi dua.
Mengubah Variabel Menjadi Dummies
Variabel dapat diubah menjadi variabel dummy (gambar 2.13). Variabel dummy hanya
dapat mengambil dua nilai: true(1) atau false(0). Mereka digunakan untuk menunjukkan tidak
adanya efek kategoris yang dapat menjelaskan pengamatan. Dalam hal ini Anda akan
membuat kolom terpisah untuk kelas yang disimpan dalam satu variabel dan menandainya
dengan 1 jika kelas tersebut ada dan 0 sebaliknya. Contohnya adalah mengubah satu kolom
bernama Hari Kerja menjadi kolom Senin hingga Minggu. Anda menggunakan indikator untuk
menunjukkan apakah pengamatan dilakukan pada hari Senin; Anda menempatkan 1 pada hari
Senin dan 0 di tempat lain. Mengubah variabel menjadi boneka adalah teknik yang digunakan
dalam pemodelan dan populer, tetapi tidak eksklusif bagi, ekonom.
Di bagian ini, kami memperkenalkan langkah ketiga dalam proses ilmu data—
membersihkan, mengubah, dan mengintegrasikan data—yang mengubah data mentah Anda
menjadi input yang dapat digunakan untuk fase pemodelan. Langkah selanjutnya dalam
proses ilmu data adalah mendapatkan pemahaman yang lebih baik tentang isi data dan
hubungan antara variabel dan pengamatan; kami mengeksplorasi ini di bagian selanjutnya.
Gambar 2.13 Mengubah variabel menjadi boneka adalah transformasi data yang memecah
variabel yang memiliki banyak kelas menjadi beberapa variabel, masing-masing hanya
memiliki dua kemungkinan nilai: 0 atau 1.
2. Mengambil Data
Teknik visualisasi yang Anda gunakan dalam fase ini berkisar dari grafik garis sederhana
atau histogram, seperti yang ditunjukkan pada gambar 2.15, hingga diagram yang lebih
kompleks seperti Sankey dan grafik jaringan. Terkadang berguna untuk membuat grafik
komposit dari grafik sederhana untuk mendapatkan lebih banyak wawasan tentang data. Di
lain waktu grafik dapat dianimasikan atau dibuat interaktif untuk membuatnya lebih mudah
dan, mari kita akui, jauh lebih menyenangkan.
Mike Bostock memiliki contoh interaktif dari hampir semua jenis grafik. Layak
menghabiskan waktu di situs webnya, meskipun sebagian besar contohnya lebih berguna
untuk presentasi data daripada eksplorasi data.
Plot ini dapat digabungkan untuk memberikan lebih banyak wawasan, seperti yang
ditunjukkan pada gambar 2.16. Melapisi beberapa plot adalah praktik umum. Pada gambar
2.17 kita menggabungkan graf sederhana menjadi diagram Pareto, atau diagram 80-20.
Gambar 2.18 menunjukkan teknik lain: brushing dan linking. Dengan menyikat dan
menautkan Anda menggabungkan dan menautkan grafik dan tabel (atau tampilan) yang
berbeda sehingga perubahan dalam satu grafik secara otomatis ditransfer ke grafik lainnya.
Contoh terperinci dari hal ini dapat ditemukan di bab 9. Eksplorasi data yang interaktif ini
memfasilitasi penemuan wawasan baru.
Gambar 2.15 Dari atas ke bawah, diagram batang, plot garis, dan distribusi adalah
beberapa grafik yang digunakan dalam analisis eksplorasi.
Gambar 2.18 menunjukkan skor rata-rata per negara untuk pertanyaan. Hal ini tidak
hanya menunjukkan korelasi yang tinggi antara jawaban, tetapi mudah untuk melihat bahwa
saat Anda memilih beberapa titik pada subplot, titik tersebut akan sesuai dengan titik serupa
pada grafik lainnya. Dalam hal ini titik-titik yang dipilih pada grafik kiri sesuai dengan titik-titik
pada grafik tengah dan kanan, meskipun keduanya lebih sesuai pada grafik tengah dan kanan.
Gambar 2.16 Menggambar beberapa plot secara bersamaan dapat membantu Anda
memahami struktur data Anda pada beberapa variabel.
Gambar 2.17 Diagram Pareto merupakan kombinasi dari nilai dan distribusi kumulatif.
Sangat mudah untuk melihat dari diagram ini bahwa 50% negara pertama mengandung
sedikit kurang dari 80% dari jumlah total. Jika grafik ini mewakili daya beli pelanggan dan
kami menjual produk mahal, kami mungkin tidak perlu menghabiskan anggaran
pemasaran kami di setiap negara; kita bisa mulai dengan 50% pertama.
Gambar 2.18 Tautan dan kuas memungkinkan Anda untuk memilih pengamatan di satu
plot dan menyorot pengamatan yang sama di plot lainnya.
Dua grafik penting lainnya adalah histogram yang ditunjukkan pada gambar 2.19 dan
boxplot yang ditunjukkan pada gambar 2.20. Dalam histogram, sebuah variabel dipotong
menjadi kategori-kategori diskrit dan jumlah kejadian dalam setiap kategori dirangkum dan
ditampilkan dalam grafik. Boxplot, di sisi lain, tidak menunjukkan berapa banyak pengamatan
yang ada tetapi menawarkan kesan distribusi dalam kategori. Itu dapat menunjukkan ukuran
maksimum, minimum, median, dan karakterisasi lainnya pada saat yang bersamaan.
Gambar 2.19 Contoh histogram: jumlah penduduk pada kelompok umur dengan interval 5
tahun
Teknik yang kami jelaskan dalam fase ini sebagian besar bersifat visual, tetapi dalam
praktiknya tentu saja tidak terbatas pada teknik visualisasi. Tabulasi, pengelompokan, dan
teknik pemodelan lainnya juga dapat menjadi bagian dari analisis eksplorasi. Bahkan membuat
model sederhana pun bisa menjadi bagian dari langkah ini. Sekarang setelah Anda
menyelesaikan fase eksplorasi data dan Anda telah memahami data Anda dengan baik,
saatnya untuk beralih ke fase berikutnya: membuat model.
Gambar 2.20 Contoh boxplot: setiap kategori pengguna memiliki distribusi apresiasi
masing-masing untuk gambar tertentu di situs web fotografi.
2. Mengambil Data
3. Persiapan Data
Model dan Pemilihan Variabel
4. Eksplorasi Data Model yang dibuat
Diagnostic Model dan
Perbandingan Model
5. Permodelan data
Teknik yang akan Anda gunakan sekarang dipinjam dari bidang pembelajaran mesin,
penambangan data, dan/atau statistik. Dalam bab ini kita hanya mengeksplorasi puncak
gunung es dari teknik yang ada, sedangkan bab 3 memperkenalkannya dengan benar. Ini di
luar cakupan buku ini untuk memberi Anda lebih dari sekadar pengantar konseptual, tetapi
itu cukup untuk membantu Anda memulai; 20% dari teknik akan membantu Anda dalam 80%
kasus karena teknik tumpang tindih dalam apa yang ingin mereka capai. Mereka sering
mencapai tujuan mereka dengan cara yang serupa tetapi sedikit berbeda.
Membangun model adalah proses berulang. Cara Anda membuat model bergantung
pada apakah Anda menggunakan statistik klasik atau sekolah pembelajaran mesin yang lebih
baru, dan jenis teknik yang ingin Anda gunakan. Either way, sebagian besar model terdiri dari
langkah-langkah utama berikut:
1. Pemilihan teknik pemodelan dan variabel yang akan dimasukkan dalam model
2. Eksekusi model
3. Diagnosis dan perbandingan model
2.6.1 Pemilihan model dan variabel
Anda harus memilih variabel yang ingin Anda sertakan dalam model dan teknik
pemodelan. Temuan Anda dari analisis eksplorasi seharusnya sudah memberikan gambaran
yang adil tentang variabel apa yang akan membantu Anda membangun model yang baik.
Banyak teknik pemodelan tersedia, dan memilih model yang tepat untuk suatu masalah
memerlukan penilaian Anda. Anda harus mempertimbangkan kinerja model dan apakah
proyek Anda memenuhi semua persyaratan untuk menggunakan model Anda, serta faktor
lainnya:
• Haruskah model dipindahkan ke lingkungan produksi dan, jika demikian, apakah akan
mudah diimplementasikan?
• Seberapa sulit pemeliharaan model: berapa lama akan tetap relevan jika tidak disentuh?
• Apakah model harus mudah dijelaskan? Ketika pemikiran selesai, saatnya untuk bertindak.
2.6.2 Eksekusi model
Setelah memilih model, Anda harus menerapkannya dalam kode. Untungnya, sebagian besar
bahasa pemrograman, seperti Python, sudah memiliki pustaka seperti StatsModels atau Scikit-
learn. Paket-paket ini menggunakan beberapa teknik yang paling populer. Pengkodean model
ad alah tugas yang tidak sepele dalam banyak kasus, sehingga ketersediaan pustaka ini dapat
mempercepat prosesnya. Seperti yang Anda lihat pada kode berikut, cukup mudah untuk
menggunakan regresi linier (gambar 2.22) dengan StatsModels atau Scikit-learn. Melakukan
ini sendiri akan membutuhkan lebih banyak usaha bahkan untuk teknik sederhana. Daftar
berikut menunjukkan pelaksanaan model prediksi linier.
Gambar 2.22 Regresi linier mencoba menyesuaikan garis sambil meminimalkan jarak ke
setiap titik
Dakam buku ini menciptakan nilai prediktor yang dimaksudkan untuk memprediksi bagaimana
perilaku variabel target. Untuk regresi linier, sebuah “hubungan linier” antara masing -masing
variabel x (prediktor) dan y (target) diasumsikan, seperti yang ditunjukkan pada gambar 2.22.
Bagaimanapun, membuat variabel target, berdasarkan prediktor dengan menambahkan
sedikit keacakan. Seharusnya tidak mengejutkan bahwa ini memberi kita model yang pas.
results.summary() menampilkan tabel pada gambar 2.23. Pikiran Anda, hasil yang tepat
tergantung pada variabel acak yang Anda dapatkan.
Mari abaikan sebagian besar keluaran yang kita dapatkan di sini dan fokus pada bagian
terpenting:
• Kecocokan model—Untuk ini digunakan R-kuadrat atau R-kuadrat yang disesuaikan.
Ukuran ini merupakan indikasi jumlah variasi data yang ditangkap oleh model. Perbedaan
antara R-kuadrat yang disesuaikan dan R-kuadrat minimal di sini karena yang disesuaikan
adalah yang normal + penalti untuk kompleksitas model. Sebuah model menjadi kompleks
ketika banyak variabel (atau fitur) diperkenalkan. Anda tidak memerlukan model yang
kompleks jika model sederhana tersedia, sehingga R-squared yang disesuaikan
menghukum Anda karena terlalu rumit. Bagaimanapun, 0,893 tinggi, dan itu seharusnya
karena kita curang. Ada aturan praktis, tetapi untuk model dalam bisnis, model di atas 0,85
sering dianggap baik. Jika Anda ingin memenangkan kompetisi yang Anda butuhkan di
tahun 90-an. Namun untuk penelitian, sering ditemukan model yang sangat rendah (<0,2
bahkan). Yang lebih penting adalah pengaruh variabel prediktor yang diperkenalkan.
• Variabel prediktor memiliki koefisien—Untuk model linier, ini mudah untuk ditafsirkan.
Dalam contoh kami jika Anda menambahkan "1" ke x1, itu akan mengubah y menjadi
"0,7658". Sangat mudah untuk melihat bagaimana menemukan prediktor yang baik dapat
menjadi jalan Anda menuju Hadiah Nobel meskipun model Anda secara keseluruhan
adalah sampah. Jika, misalnya, Anda menentukan bahwa gen tertentu signifikan sebagai
penyebab kanker, ini adalah pengetahuan penting, bahkan jika gen itu sendiri tidak
menentukan apakah seseorang akan terkena kanker. Contoh di sini adalah klasifikasi,
bukan regresi, tetapi intinya tetap sama: mendeteksi pengaruh lebih penting dalam studi
ilmiah daripada model yang pas (belum lagi lebih realistis). Tapi kapan kita tahu gen
memiliki dampak itu? Ini disebut signifikansi.
• Signifikansi prediktor — Koefisiennya besar, tetapi terkadang tidak cukup bukti untuk
menunjukkan bahwa pengaruh itu ada. Inilah yang dimaksud dengan nilai-p. Penjelasan
panjang tentang kesalahan tipe 1 dan tipe 2 dimungkinkan di sini tetapi penjelasan
singkatnya adalah: jika nilai p lebih rendah dari 0,05, variabel tersebut dianggap signifikan
bagi kebanyakan orang. Sebenarnya, ini adalah nomor arbitrer. Artinya ada 5%
kemungkinan prediktor tidak memiliki pengaruh. Apakah Anda menerima peluang 5% ini
untuk salah? Terserah Anda. Beberapa orang memperkenalkan ambang batas yang sangat
signifikan (p<0,01) dan sedikit signifikan (p<0,1).
Regresi linier berfungsi jika Anda ingin memprediksi suatu nilai, tetapi bagaimana jika Anda
ingin mengklasifikasikan sesuatu? Kemudian Anda pergi ke model klasifikasi, yang paling
terkenal di antara mereka adalah k-tetangga terdekat. Seperti yang ditunjukkan pada gambar
2.24, k-nearest neighbor melihat titik berlabel di dekat titik tak berlabel dan, berdasarkan ini,
membuat prediksi seperti apa seharusnya label itu.
Gambar 2.24 Teknik K-nearest neighbor melihat titik k-nearest untuk melakukan prediksi.
Mari kita coba dengan kode Python menggunakan pustaka belajar Scikit, seperti pada daftar
berikut ini.
Sekarang kita bisa menggunakan prediksi dan membandingkannya dengan yang sebenarnya
menggunakan matriks kebingungan.
Kami mendapatkan matriks 3-kali-3 seperti yang ditunjukkan pada gambar 2.25.
Gambar 2.25 Confusion matrix: menunjukkan berapa banyak kasus yang diklasifikasikan
dengan benar dan salah diklasifikasikan dengan membandingkan prediksi dengan nilai
sebenarnya. Keterangan: kelas (0,1,2) ditambahkan pada gambar untuk klarifikasi.
berperforma terbaik. Sampel holdout adalah bagian dari data yang Anda keluarkan dari
pembuatan model sehingga dapat digunakan untuk mengevaluasi model sesudahnya .
Prinsipnya di sini sederhana: model harus bekerja pada data yang tidak terlihat. Anda hanya
menggunakan sebagian kecil dari data Anda untuk memperkirakan model dan bagian lainnya,
sampel ketidaksesuaian, dijauhkan dari persamaan. Model tersebut kemudian dilepaskan
pada data yang tidak terlihat dan ukuran kesalahan dihitung untuk mengevaluasinya. Berbagai
ukuran kesalahan tersedia, dan pada gambar 2.26 kami menunjukkan gagasan umum tentang
membandingkan model. Ukuran kesalahan yang digunakan dalam contoh adalah mean square
error.
𝑛
1 2
MSE = ∑(𝑌̂𝑖 − 𝑌𝑖 )
𝑛
𝑖−1
Gambar 2.26 Formula mean square error
Gambar 2.27 Sampel holdout membantu Anda membandingkan model dan memastikan
bahwa Anda dapat menggeneralisasikan hasil ke data yang belum dilihat oleh model.
Ilmu Data (Data Science) – Dr. Joseph Santoso
53
2. Mengambil Data
3. Persiapan Data
4. Eksplorasi Data
5. Permodelan data
Penyajian Data
6. Presentasi dan otomatisasi
Otomatisasi analisis data
Terkadang orang sangat bersemangat dengan pekerjaan Anda sehingga Anda perlu
mengulanginya lagi dan lagi karena mereka menghargai prediksi model Anda atau wawasan
yang Anda hasilkan. Untuk alasan ini, Anda perlu mengotomatiskan model Anda. Ini tidak
selalu berarti bahwa Anda harus mengulang semua analisis Anda setiap saat. Terkadang cukup
hanya menerapkan penilaian model; di lain waktu Anda mungkin membuat aplikasi yang
secara otomatis memperbarui laporan, spreadsheet Excel, atau presentasi PowerPoint. Tahap
terakhir dari proses ilmu data adalah di mana soft skill Anda akan sangat berguna, dan ya, itu
sangat penting. Nyatanya, kami menyarankan Anda menemukan buku khusus dan informasi
lain tentang subjek tersebut dan mengerjakannya, karena mengapa repot-repot melakukan
semua kerja keras ini jika tidak ada yang mendengarkan apa yang Anda katakan?
Jika Anda melakukannya dengan benar, Anda sekarang memiliki model kerja dan
pemangku kepentingan yang puas, jadi kita dapat menyimpulkan bab ini di sini.
2.8 RINGKASAN
Dalam bab ini Anda mempelajari proses ilmu data yang terdiri dari enam langkah:
• Menetapkan tujuan penelitian—Mendefinisikan apa, mengapa, dan bagaimana proyek
Anda dalam piagam proyek.
BAB 3
PEMBELAJARAN MESIN
“Pembelajaran mesin adalah bidang studi yang memberi komputer kemampuan untuk
belajar tanpa diprogram secara eksplisit.”
—Arthur Samuel
Definisi pembelajaran mesin yang diciptakan oleh Arthur Samuel sering dikutip dan
jenius dalam keluasannya, tetapi menimbulkan pertanyaan tentang bagaimana komputer
belajar. Untuk mencapai pembelajaran mesin, para ahli mengembangkan algoritma tujuan
umum yang dapat digunakan pada kelas besar masalah pembelajaran. Saat Anda ingin
menyelesaikan tugas tertentu, Anda hanya perlu memberi algoritme data yang lebih spesifik.
Di satu sisi, Anda memprogram dengan contoh. Dalam kebanyakan kasus komputer akan
menggunakan data sebagai sumber informasi dan membandingkan keluarannya dengan
keluaran yang diinginkan dan kemudian memperbaikinya. Semakin banyak data atau
"pengalaman" yang didapat komputer, semakin baik pekerjaan yang ditunjuknya, seperti yang
dilakukan manusia.
Ketika pembelajaran mesin dilihat sebagai sebuah proses, definisi berikut ini sangat
berguna:
“Pembelajaran mesin adalah proses di mana komputer dapat bekerja lebih akurat saat
mengumpulkan dan belajar dari data yang diberikan.”
—Mike Roberts
Misalnya, saat pengguna menulis lebih banyak pesan teks di ponsel, ponsel akan belajar lebih
banyak tentang kosa kata umum pesan tersebut dan dapat memprediksi (pelengkapan
otomatis) kata-kata mereka dengan lebih cepat dan lebih akurat.
Dalam bidang sains yang lebih luas, pembelajaran mesin adalah subbidang kecerdasan
buatan dan terkait erat dengan matematika terapan dan statistik. Semua ini mungkin
terdengar agak abstrak, tetapi pembelajaran mesin memiliki banyak penerapan dalam
kehidupan sehari-hari.
3.1.1 Aplikasi pembelajaran mesin dalam ilmu data
Regresi dan klasifikasi sangat penting bagi seorang ilmuwan data. Untuk mencapai tujuan
tersebut, salah satu alat utama yang digunakan ilmuwan data adalah pembelajaran mesin.
Penggunaan regresi dan klasifikasi otomatis sangat luas, seperti berikut ini:
• Menemukan ladang minyak, tambang emas, atau situs arkeologi berdasarkan situs yang
ada (klasifikasi dan regresi)
• Menemukan nama tempat atau orang dalam teks (klasifikasi)
• Mengidentifikasi orang berdasarkan gambar atau rekaman suara (klasifikasi)
• Mengenali burung berdasarkan siulannya (klasifikasi)
• Mengidentifikasi pelanggan yang menguntungkan (regresi dan klasifikasi)
• Secara proaktif mengidentifikasi bagian-bagian mobil yang cenderung rusak (regresi)
• Mengidentifikasi tumor dan penyakit (klasifikasi)
• Memprediksi jumlah uang yang akan dikeluarkan seseorang untuk produk X (regresi)
• Memprediksi jumlah letusan gunung berapi dalam satu periode (regresi)
• Memprediksi pendapatan tahunan perusahaan Anda (regresi)
• Memprediksi tim mana yang akan memenangkan Liga Champions dalam sepak bola
(klasifikasi)
Kadang-kadang ilmuwan data membangun model (abstraksi realitas) yang memberikan
wawasan tentang proses yang mendasari suatu fenomena. Ketika tujuan model bukanlah
prediksi tetapi interpretasi, itu disebut analisis akar penyebab. Berikut beberapa contohnya:
• Memahami dan mengoptimalkan proses bisnis, seperti menentukan produk mana yang
menambah nilai pada lini produk
• Menemukan apa yang menyebabkan diabetes
• Menentukan penyebab kemacetan lalu lintas
Daftar aplikasi pembelajaran mesin ini hanya dapat dilihat sebagai hidangan pembuka karena
ada di mana-mana dalam ilmu data. Regresi dan klasifikasi adalah dua teknik penting, tetapi
repertoar dan aplikasinya tidak berakhir, dengan pengelompokan sebagai salah satu contoh
lain dari teknik yang berharga. Teknik pembelajaran mesin dapat digunakan selama proses
ilmu data, seperti yang akan kita bahas di bagian selanjutnya.
3.1.2 Di mana pembelajaran mesin digunakan dalam proses ilmu data
Meskipun pembelajaran mesin terutama terkait dengan langkah pemodelan data dari
proses sains data, ini dapat digunakan di hampir setiap langkah. Untuk menyegarkan ingatan
Anda dari bab-bab sebelumnya, proses data science ditunjukkan pada gambar 3.1.
Fase pemodelan data tidak dapat dimulai sampai Anda memiliki data mentah kualitatif
yang dapat Anda pahami. Namun sebelumnya, fase persiapan data dapat memanfaatkan
penggunaan pembelajaran mesin. Contohnya adalah membersihkan daftar string teks;
pembelajaran mesin dapat mengelompokkan string serupa sehingga menjadi lebih mudah
untuk memperbaiki kesalahan ejaan.
2. Mengambil Data
3. Persiapan Data
Model dan Pemilihan Variabel
4. Eksplorasi Data Model yang dibuat
Diagnostic Model dan
Perbandingan Model
5. Permodelan data
Pembelajaran mesin juga berguna saat menjelajahi data. Algoritma dapat membasmi
pola dasar dalam data yang sulit ditemukan hanya dengan bagan. Mengingat bahwa
pembelajaran mesin berguna selama proses ilmu data, tidak mengejutkan bahwa sejumlah
besar pustaka Python dikembangkan untuk membuat hidup Anda sedikit lebih mudah.
3.1.3 Alat Python yang digunakan dalam pembelajaran mesin
Python memiliki banyak sekali paket yang dapat digunakan dalam pengaturan
pembelajaran mesin. Ekosistem pembelajaran mesin Python dapat dibagi menjadi tiga jenis
paket utama, seperti yang ditunjukkan pada gambar 3.2.
Gambar 3.2 Ringkasan paket Python yang digunakan selama fase pembelajaran mesin
Jenis paket pertama yang ditunjukkan pada gambar 3.2 terutama digunakan dalam
tugas-tugas sederhana dan saat data masuk ke dalam memori. Jenis kedua digunakan untuk
mengoptimalkan kode Anda ketika Anda telah menyelesaikan pembuatan prototipe dan
mengalami masalah kecepatan atau memori. Tipe ketiga khusus untuk menggunakan Python
dengan teknologi data besar.
Paket Untuk Bekerja Dengan Data Di Memory
Saat membuat prototipe, paket berikut dapat membantu Anda memulai dengan
menyediakan fungsionalitas tingkat lanjut dengan beberapa baris kode:
• SciPy adalah perpustakaan yang mengintegrasikan paket dasar yang sering digunakan
dalam komputasi ilmiah seperti NumPy, matplotlib, Pandas, dan SymPy.
• NumPy memberi Anda akses ke fungsi array yang kuat dan fungsi aljabar linier.
• Matplotlib adalah paket perencanaan 2D yang populer dengan beberapa fungsionalitas
3D.
• Panda adalah paket data-wrangling yang berkinerja tinggi, tetapi mudah digunakan. Ini
memperkenalkan kerangka data ke Python, sejenis tabel data dalam memori. Ini adalah
konsep yang terdengar akrab bagi pengguna reguler R.
• SymPy adalah paket yang digunakan untuk matematika simbolik dan aljabar komputer.
• StatsModels adalah paket untuk metode dan algoritme statistik.
• Scikit-learn adalah perpustakaan yang berisi algoritma pembelajaran mesin.
Ilmu Data (Data Science) – Dr. Joseph Santoso
59
• RPy2 memungkinkan Anda memanggil fungsi R dari dalam Python. R adalah program
statistik open source yang populer.
• NLTK (Natural Language Toolkit) adalah toolkit Python dengan fokus pada analitik teks.
Pustaka ini bagus untuk memulai, tetapi begitu Anda membuat keputusan untuk menjalankan
program Python tertentu pada interval yang sering, kinerja akan berperan.
Mengoptimalkan Operasi
Setelah aplikasi Anda beralih ke produksi, pustaka yang tercantum di sini dapat
membantu Anda memberikan kecepatan yang Anda perlukan. Terkadang hal ini melibatkan
koneksi ke infrastruktur big data seperti Hadoop dan Spark.
• Numba dan NumbaPro — Ini menggunakan kompilasi just-in-time untuk mempercepat
aplikasi yang ditulis langsung dengan Python dan beberapa anotasi. NumbaPro juga
memungkinkan Anda menggunakan kekuatan unit prosesor grafis (GPU) Anda.
• PyCUDA —Ini memungkinkan Anda untuk menulis kode yang akan dijalankan pada GPU
alih-alih CPU Anda dan karenanya ideal untuk aplikasi yang berat perhitungan. Ini bekerja
paling baik dengan masalah yang cenderung diparalelkan dan membutuhkan sedikit input
dibandingkan dengan jumlah siklus komputasi yang diperlukan. Contohnya adalah
mempelajari kekokohan prediksi Anda dengan menghitung ribuan hasil berbeda
berdasarkan satu status awal.
• Cython, atau C untuk Python — Ini membawa bahasa pemrograman C ke Python. C adalah
bahasa tingkat rendah, jadi kodenya lebih dekat dengan apa yang akhirnya digunakan
komputer (bytecode). Semakin dekat kode dengan bit dan byte, semakin cepat dijalankan.
Komputer juga lebih cepat ketika mengetahui jenis variabel (disebut pengetikan statis).
Python tidak dirancang untuk melakukan ini, dan Cython membantu Anda mengatasi
kekurangan ini.
• Blaze —Blaze memberi Anda struktur data yang bisa lebih besar dari memori utama
komputer Anda, memungkinkan Anda bekerja dengan kumpulan data besar.
• Dispy dan IPCluster —Paket ini memungkinkan Anda untuk menulis kode yang dapat
didistribusikan melalui sekumpulan komputer.
• PP —Python dijalankan sebagai satu proses secara default. Dengan bantuan PP Anda
dapat memparalelkan perhitungan pada satu mesin atau lebih dari cluster.
• Pydoop dan Hadoopy—Ini menghubungkan Python ke Hadoop, kerangka data besar yang
umum.
• PySpark—Ini menghubungkan Python dan Spark, kerangka data besar dalam memori.
Sekarang setelah Anda melihat ikhtisar pustaka yang tersedia, mari kita lihat proses
pemodelan itu sendiri.
mencampurkan obat antijamur seperti Sporanox dengan jeruk bali memiliki efek samping
yang serius.
Kadang-kadang Anda harus menggunakan teknik pemodelan untuk mendapatkan
fitur: keluaran model menjadi bagian dari model lain. Ini tidak biasa, terutama dalam
penambangan teks. Dokumen dapat diberi anotasi terlebih dahulu untuk mengklasifikasikan
konten ke dalam kategori, atau Anda dapat menghitung jumlah tempat geografis atau orang
dalam teks. Penghitungan ini seringkali lebih sulit daripada kedengarannya; model pertama
kali diterapkan untuk mengenali kata-kata tertentu sebagai orang atau tempat. Semua
informasi baru ini kemudian dituangkan ke dalam model yang ingin Anda bangun. Salah satu
kesalahan terbesar dalam konstruksi model adalah bias ketersediaan: fitur Anda hanyalah fitur
yang dapat Anda peroleh dengan mudah dan model Anda secara konsekuen mewakili
"kebenaran" sepihak ini. Model yang menderita bias ketersediaan sering gagal saat divalidasi
karena menjadi jelas bahwa model tersebut bukan representasi kebenaran yang valid.
Dalam Perang Dunia II, setelah pengeboman terjadi di wilayah Jerman, banyak
pesawat Inggris kembali dengan lubang peluru di sayap, di sekitar hidung, dan di dekat ekor
pesawat. Hampir tidak ada dari mereka yang memiliki lubang peluru di kokpit, kemudi ekor,
atau blok mesin, jadi teknisi memutuskan pelapisan lapis baja tambahan harus ditambahkan
ke sayap. Ini tampak seperti ide yang bagus sampai seorang matematikawan bernama
Abraham Wald menjelaskan kesalahan mereka yang jelas: mereka hanya memperhitungkan
pesawat yang kembali. Lubang peluru di sayap sebenarnya tidak menjadi perhatian mereka,
karena setidaknya pesawat dengan kerusakan seperti ini bisa pulang untuk diperbaiki.
Fortifikasi pesawat karenanya ditingkatkan di tempat-tempat yang tidak terluka saat pesawat
kembali. Alasan awal mengalami bias ketersediaan: para insinyur mengabaikan bagian penting
dari data karena lebih sulit diperoleh. Dalam hal ini mereka beruntung, karena penalarannya
bisa dibalik untuk mendapatkan hasil yang diinginkan tanpa mendapatkan data dari pesawat
yang jatuh. Saat fitur awal dibuat, model dapat dilatih ke data.
3.2.2 Melatih model Anda
Dengan prediktor yang tepat dan teknik pemodelan, Anda dapat melanjutkan ke
pelatihan model. Pada fase ini Anda mempresentasikan data model Anda yang dapat
dipelajari.
Teknik pemodelan yang paling umum memiliki implementasi siap industri di hampir
setiap bahasa pemrograman, termasuk Python. Ini memungkinkan Anda untuk melatih model
Anda dengan menjalankan beberapa baris kode. Untuk teknik ilmu data yang lebih canggih,
Anda mungkin akan melakukan perhitungan matematis yang berat dan menerapkannya
dengan teknik ilmu komputer modern. Setelah model dilatih, saatnya untuk menguji apakah
model tersebut dapat diekstrapolasi menjadi kenyataan: validasi model.
3.2.3 Memvalidasi model
Ilmu data memiliki banyak teknik pemodelan, dan pertanyaannya adalah mana yang
tepat untuk digunakan. Model yang baik memiliki dua sifat: ia memiliki daya prediksi yang baik
dan menggeneralisasi dengan baik data yang belum dilihatnya. Untuk mencapai ini, Anda
menentukan ukuran kesalahan (seberapa salah modelnya) dan strategi validasi.
Dua ukuran kesalahan umum dalam pembelajaran mesin adalah tingkat kesalahan
klasifikasi untuk masalah klasifikasi dan kesalahan kuadrat rata-rata untuk masalah regresi.
Tingkat kesalahan klasifikasi adalah persentase pengamatan dalam kumpulan data uji yang
diberi label salah oleh model Anda; lebih rendah lebih baik. Kesalahan kuadrat rata -rata
mengukur seberapa besar kesalahan rata-rata prediksi Anda. Mengkuadratkan kesalahan
rata-rata memiliki dua konsekuensi: Anda tidak dapat membatalkan prediksi yang salah di satu
arah dengan prediksi yang salah di arah yang lain. Misalnya, melebih-lebihkan omset masa
depan untuk bulan depan sebesar 5.000 tidak membatalkan perkiraan yang terlalu rendah
sebesar 5.000 untuk bulan berikutnya. Sebagai konsekuensi kedua dari pengkuadratan,
kesalahan yang lebih besar mendapatkan bobot yang lebih besar daripada yang seharusnya.
Kesalahan kecil tetap kecil atau bahkan bisa menyusut (jika <1), sedangkan kesalahan besar
diperbesar dan pasti akan menarik perhatian Anda.
Ada banyak strategi validasi, termasuk yang umum berikut ini:
• Membagi data Anda ke dalam kumpulan pelatihan dengan X% dari pengamatan dan
menyimpan sisanya sebagai kumpulan data penyimpanan (kumpulan data yang tidak
pernah digunakan untuk pembuatan model)—Ini adalah teknik yang paling umum.
• Validasi silang K-folds—Strategi ini membagi kumpulan data menjadi k bagian dan
menggunakan setiap bagian satu kali sebagai kumpulan data pengujian sambil
menggunakan yang lain sebagai kumpulan data pelatihan. Ini memiliki keuntungan bahwa
Anda menggunakan semua data yang tersedia di kumpulan data.
• Abaikan-1 —Pendekatan ini sama dengan lipatan-k tetapi dengan k=1. Anda selalu
meninggalkan satu pengamatan dan melatih data lainnya. Ini hanya digunakan pada
kumpulan data kecil, jadi lebih berharga bagi orang yang mengevaluasi eksperimen
laboratorium daripada analis data besar.
Istilah populer lainnya dalam pembelajaran mesin adalah regularisasi. Saat menerapkan
regularisasi, Anda dikenai penalti untuk setiap variabel tambahan yang digunakan untuk
membangun model. Dengan regularisasi L1, Anda meminta model dengan prediktor sesedikit
mungkin. Ini penting untuk kekokohan model: solusi sederhana cenderung berlaku dalam
lebih banyak situasi. Regularisasi L2 bertujuan untuk menjaga varian antara koefisien
prediktor sekecil mungkin. Varian yang tumpang tindih antara prediktor membuat sulit untuk
mengetahui dampak sebenarnya dari masing-masing prediktor. Menjaga varians mereka dari
tumpang tindih akan meningkatkan interpretabilitas. Sederhananya: regularisasi terutama
digunakan untuk menghentikan model menggunakan terlalu banyak fitur dan dengan
demikian mencegah pemasangan yang berlebihan.
Validasi sangat penting karena menentukan apakah model Anda berfungsi dalam
kondisi kehidupan nyata. Terus terang, apakah model Anda bernilai sepeser pun. Meski
begitu, kadang-kadang orang mengirim makalah ke jurnal ilmiah terkemuka (dan kadang-
kadang bahkan berhasil menerbitkannya) dengan validasi yang salah. Akibatnya mereka
ditolak atau perlu mencabut kertas karena semuanya salah. Situasi seperti ini berdampak
buruk bagi kesehatan mental Anda, jadi ingatlah selalu hal ini: uji model Anda pada data yang
belum pernah dilihat oleh model yang dibangun dan pastikan data ini adalah representasi
sebenarnya dari apa yang akan ditemuinya ketika diterapkan pada pengamatan baru oleh
Ilmu Data (Data Science) – Dr. Joseph Santoso
63
orang lain. Untuk model klasifikasi, instrumen seperti matriks kebingungan (diperkenalkan
pada bab 2 tetapi dijelaskan secara menyeluruh nanti pada bab ini) adalah emas; merangkul
mereka. Setelah Anda membuat model yang bagus, Anda dapat (opsional) menggunakannya
untuk memprediksi masa depan.
3.2.4 Memprediksi pengamatan baru
Jika Anda telah berhasil menerapkan tiga langkah pertama, Anda sekarang memiliki
model performa yang digeneralisasikan ke data yang tidak terlihat. Proses menerapkan model
Anda ke data baru disebut penilaian model. Faktanya, penilaian model adalah sesuatu yang
Anda lakukan secara implisit selama validasi, hanya sekarang Anda tidak mengetahui hasil
yang benar. Sekarang Anda harus cukup memercayai model Anda untuk menggunakannya
secara nyata.
Penilaian model melibatkan dua langkah. Pertama, Anda menyiapkan kumpulan data
yang memiliki fitur persis seperti yang ditentukan oleh model Anda. Ini bermuara pada
pengulangan persiapan data yang Anda lakukan pada langkah pertama proses pemodelan
tetapi untuk kumpulan data baru. Kemudian Anda menerapkan model pada kumpulan data
baru ini, dan ini menghasilkan prediksi. Sekarang mari kita lihat berbagai jenis teknik
pembelajaran mesin: masalah yang berbeda memerlukan pendekatan yang berbeda.
Gambar 3.3 Kontrol Captcha sederhana dapat digunakan untuk mencegah spam otomatis
dikirim melalui formulir web online.
Dengan bantuan pengklasifikasi Naïve Bayes, algoritme sederhana namun kuat untuk
mengkategorikan pengamatan ke dalam kelas yang dijelaskan lebih detail di sidebar, Anda
dapat mengenali digit dari gambar tekstual. Gambar-gambar ini tidak berbeda dengan
pemeriksaan Captcha yang dilakukan banyak situs web untuk memastikan Anda bukan
komputer yang mencoba meretas akun pengguna. Mari kita lihat betapa sulitnya membiarkan
komputer mengenali gambar angka. Tujuan penelitian kami adalah membiarkan komputer
mengenali gambar angka (langkah pertama dari proses ilmu data). Data yang akan kami
kerjakan adalah kumpulan data MNIST, yang sering digunakan dalam literatur sains data untuk
pengajaran dan pembandingan.
Memperkenalkan pengklasifikasi Naïve Bayes dalam konteks filter spam
Tidak setiap email yang Anda terima memiliki niat jujur. Kotak masuk Anda dapat berisi
email komersial atau massal yang tidak diminta, alias spam. Tidak hanya mengganggu, spam
juga sering digunakan dalam penipuan dan sebagai pembawa virus. Kaspersky3
memperkirakan bahwa lebih dari 60% email di dunia adalah spam. Untuk melindungi
pengguna dari spam, sebagian besar klien email menjalankan program di latar belakang yang
mengklasifikasikan email sebagai spam atau aman.
Teknik populer dalam pemfilteran spam menggunakan pengklasifikasi yang
menggunakan kata-kata di dalam email sebagai prediktor. Ini menampilkan kemungkinan
bahwa email tertentu adalah spam mengingat kata-kata yang menyusunnya (dalam istilah
matematika, P(spam|kata-kata) ). Untuk mencapai kesimpulan ini menggunakan tiga
perhitungan:
• P(spam)—Tingkat rata-rata spam tanpa mengetahui kata-katanya. Menurut Kaspersky,
60% email adalah spam.
• P(kata)—Seberapa sering kombinasi kata ini digunakan terlepas dari spam.
• P(words | spam)—Seberapa sering kata-kata ini terlihat saat email pelatihan diberi label
sebagai spam.
Untuk menentukan kemungkinan email baru adalah spam, Anda akan menggunakan rumus
berikut: P(spam|words) = P(spam)P(words|spam) / P(words)
Ini adalah penerapan aturan P(B|A) = P(B) P(A|B) / P(A), yang dikenal sebagai aturan
Bayes dan yang meminjamkan namanya ke classifier ini. Bagian "naif" berasal dari asumsi
pengklasifikasi bahwa keberadaan satu fitur tidak memberi tahu Anda apa pun tentang fitur
lain (independensi fitur, juga disebut tidak adanya multikolinearitas). Pada kenyataannya, fitur
seringkali terkait, terutama dalam teks. Misalnya kata “beli” akan sering diikuti dengan
“sekarang”. Terlepas dari asumsi yang tidak realistis, pengklasifikasi naif bekerja dengan
sangat baik dalam praktiknya.
Dengan sedikit teori di sidebar, Anda siap melakukan pemodelan itu sendiri. Pastikan
untuk menjalankan semua kode yang akan datang dalam lingkup yang sama karena setiap
bagian membutuhkan kode sebelumnya. File IPython dapat diunduh untuk bab ini dari
halaman unduhan Manning buku ini. Gambar MNIST dapat ditemukan di paket kumpulan data
Scikit-learn dan sudah dinormalisasi untuk Anda (semua diskalakan ke ukuran yang sama:
64x64 piksel), jadi kami tidak memerlukan banyak persiapan data (langkah ketiga dari proses
ilmu data ). Tapi pertama-tama mari kita ambil data kita sebagai langkah kedua dari proses
ilmu data, dengan daftar berikut.
Bekerja dengan gambar tidak jauh berbeda dengan bekerja dengan kumpulan data lainnya.
Dalam kasus gambar abu-abu, Anda memberi nilai di setiap entri matriks yang
menggambarkan nilai abu-abu yang akan ditampilkan. Kode berikut menunjukkan proses ini
dan merupakan langkah keempat dari proses ilmu data: eksplorasi data.
setiap elemen dalam vektor adalah bagian dari gambar. Sejauh ini mudah, bukan? Ada, tentu
saja, sedikit lebih banyak pekerjaan yang harus dilakukan. Pengklasifikasi Naïve Bayes
mengharapkan daftar nilai, tetapi pl.matshow() mengembalikan larik dua dimensi (matriks)
yang mencerminkan bentuk gambar. Untuk meratakannya ke dalam daftar, kita perlu
memanggil reshape() pada digits.images. Hasil bersihnya akan menjadi array satu dimensi
yang terlihat seperti ini:
Gambar 3.4 Representasi abu-abu kabur dari angka 0 dengan matriks yang sesuai. Semakin
tinggi angkanya, semakin mendekati putih; semakin rendah angkanya, semakin dekat ke
hitam.
Gambar 3.5 Kami akan mengubah gambar menjadi sesuatu yang dapat digunakan oleh
pengklasifikasi Naïve Bayes dengan mendapatkan nilai skala abu-abu untuk setiap
pikselnya (ditampilkan di sebelah kanan) dan memasukkan nilai tersebut ke dalam daftar.
Hasil akhir dari kode ini disebut matriks konfusi, seperti yang ditunjukkan pada gambar
3.6. Dikembalikan sebagai larik dua dimensi, ini menunjukkan seberapa sering angka yang
diprediksi adalah angka yang benar pada diagonal utama dan juga di entri matriks (i,j), di mana
j diprediksi tetapi gambar menunjukkan i. Melihat gambar 3.6 kita dapat melihat bahwa model
memprediksi angka 2 dengan benar sebanyak 17 kali (pada koordinat 3,3), tetapi model juga
memprediksi angka 8 sebanyak 15 kali padahal sebenarnya angka 2 pada gambar (pada 9, 3).
Gambar 3.6 Confusion matrix dihasilkan dengan memprediksi angka apa yang
digambarkan oleh gambar buram
Matriks konfusi
Matriks konfusi adalah matriks yang menunjukkan seberapa salah (atau benar)
prediksi model, seberapa banyak model tersebut menjadi "bingung". Dalam bentuknya yang
paling sederhana, ini akan menjadi tabel 2x2 untuk model yang mencoba mengklasifikasikan
pengamatan sebagai A atau B. Katakanlah kita memiliki model klasifikasi yang memprediksi
apakah seseorang akan membeli produk terbaru kita: puding ceri goreng. Kami dapat
memprediksi: "Ya, orang ini akan membeli" atau "Tidak, pelanggan ini tidak akan membeli".
Setelah kami membuat prediksi untuk 100 orang, kami dapat membandingkannya dengan
perilaku mereka yang sebenarnya, menunjukkan kepada kami berapa kali kami melakukannya
dengan benar. Contohnya ditunjukkan pada tabel 3.1.
paling bermasalah. Dalam hal ini kita cenderung terlalu percaya diri dengan produk kita dan
terlalu mudah mengklasifikasikan pelanggan sebagai calon pembeli (false positive).
Dari matriks konfusi, kita dapat menyimpulkan bahwa untuk sebagian besar gambar,
prediksinya cukup akurat. Dalam model yang baik, Anda akan mengharapkan jumlah angka
pada diagonal utama matriks (juga dikenal sebagai jejak matriks) menjadi sangat tinggi
dibandingkan dengan jumlah semua entri matriks, yang menunjukkan bahwa prediksi paling
benar untuk sebagian besar bagian.
Anggaplah kita ingin memamerkan hasil kita dengan cara yang lebih mudah dimengerti
atau kita ingin memeriksa beberapa gambar dan prediksi yang telah dibuat oleh program kita:
kita dapat menggunakan kode berikut untuk menampilkan satu di samping yang lain.
Kemudian kita dapat melihat di mana program tersebut salah dan membutuhkan lebih banyak
pelatihan. Jika kita puas dengan hasilnya, pembuatan model berakhir di sini dan kita sampai
pada langkah enam: menyajikan hasilnya.
Gambar 3.7 menunjukkan bagaimana semua prediksi tampaknya benar kecuali untuk
digit angka 2, yang diberi label sebagai 8. Kita harus memaafkan kesalahan ini karena angka 2
ini memiliki kesamaan visual dengan 8. Angka kiri bawah bersifat ambigu, bahkan untuk
manusia; ini 5 atau 3? Ini masih bisa diperdebatkan, tetapi algoritme menganggapnya 3.
Dengan membedakan gambar mana yang disalahartikan, kita dapat melatih model
lebih lanjut dengan memberi label dengan nomor yang benar yang ditampilkan dan
memasukkannya kembali ke dalam model sebagai set pelatihan baru (langkah 5 dari proses
ilmu data). Ini akan membuat model lebih akurat, sehingga siklus belajar, memprediksi,
mengoreksi terus berlanjut dan prediksi menjadi lebih akurat. Ini adalah kumpulan data
terkontrol yang kami gunakan sebagai contoh. Semua contoh memiliki ukuran yang sama dan
semuanya dalam 16 warna abu-abu. Perluas hingga gambar ukuran variabel string panjang
variabel warna variabel karakter alfanumerik yang ditampilkan di kontrol Captcha, dan Anda
dapat menghargai mengapa model yang cukup akurat untuk memprediksi gambar Captcha
apa pun belum ada.
Dalam contoh pembelajaran yang diawasi ini, jelas bahwa tanpa label yang terkait
dengan setiap gambar yang memberi tahu program angka yang ditunjukkan gambar tersebut,
model tidak dapat dibuat dan prediksi tidak dapat dibuat. Sebaliknya, pendekatan
pembelajaran tanpa pengawasan tidak memerlukan datanya untuk diberi label dan dapat
digunakan untuk memberi struktur pada kumpulan data yang tidak terstruktur.
Gambar 3.7 Untuk setiap gambar buram, sebuah angka diprediksi; hanya angka 2 yang
disalahartikan sebagai 8. Kemudian angka yang ambigu diprediksi menjadi 3 tetapi bisa
juga menjadi 5; bahkan bagi mata manusia ini tidak jelas.
variabel laten. Itu pasti memengaruhi penilaian mereka terhadap Anda tetapi nilainya tidak
jelas.
Memperoleh atau menyimpulkan variabel laten dan nilainya berdasarkan konten
sebenarnya dari kumpulan data adalah keterampilan yang berharga untuk dimiliki karena
• Variabel laten dapat menggantikan beberapa variabel yang sudah ada dalam kumpulan
data.
• Dengan mengurangi jumlah variabel dalam kumpulan data, kumpulan data menjadi lebih
mudah dikelola, setiap algoritme lebih lanjut yang berjalan di atasnya akan bekerja lebih
cepat, dan prediksi dapat menjadi lebih akurat.
• Karena variabel laten dirancang atau ditargetkan untuk tujuan penelitian yang
ditentukan, Anda kehilangan sedikit informasi penting dengan menggunakannya.
Jika kita dapat mengurangi kumpulan data dari 14 variabel yang dapat diamati per baris
menjadi 5 atau 6 variabel laten, misalnya, kita memiliki kesempatan yang lebih baik untuk
mencapai tujuan penelitian kita karena struktur kumpulan data yang disederhanakan. Seperti
yang akan Anda lihat dari contoh di bawah, ini bukan kasus pengurangan set data yang ada
menjadi sesedikit mungkin variabel laten. Anda harus menemukan sweet spot di mana jumlah
variabel laten yang dihasilkan menghasilkan nilai terbanyak. Mari kita praktikkan ini dengan
studi kasus kecil.
Studi Kasus: Menemukan Variabel Laten Dalam Set Data Kualitas Anggur
Dalam studi kasus singkat ini, Anda akan menggunakan teknik yang dikenal sebagai
Principal Component Analysis (PCA) untuk menemukan variabel laten dalam kumpulan data
yang menggambarkan kualitas anggur. Kemudian Anda akan membandingkan seberapa baik
serangkaian variabel laten bekerja dalam memprediksi kualitas anggur dengan rangkaian asli
yang dapat diamati. Anda akan belajar
1. Bagaimana mengidentifikasi dan menurunkan variabel laten tersebut.
2. Bagaimana menganalisis di mana sweet spot—berapa banyak variabel baru yang
mengembalikan utilitas paling banyak—dengan menghasilkan dan menginterpretasikan
plot scree yang dihasilkan oleh PCA. (Kita akan melihat plot scree sebentar lagi.)
Mari kita lihat komponen utama dari contoh ini.
• Kumpulan data—Universitas California, Irvine (UCI) memiliki repositori online berisi 325
kumpulan data untuk latihan pembelajaran mesin di http://archive.ics.uci.edu/ml/. Kami
akan menggunakan Kumpulan Data Kualitas Anggur untuk anggur merah yang dibuat oleh
P. Cortez, A. Cerdeira, F. Almeida, T. Matos, dan J. Reis4. Panjangnya 1.600 baris dan
memiliki 11 variabel per baris, seperti yang ditunjukkan pada tabel 3.2.
• Analisis Komponen Utama—Teknik untuk menemukan variabel laten dalam kumpulan
data Anda sambil mempertahankan informasi sebanyak mungkin.
• Scikit-learn—Kami menggunakan perpustakaan ini karena sudah mengimplementasikan
PCA untuk kami dan merupakan cara untuk menghasilkan plot scree.
Bagian pertama dari proses ilmu data adalah untuk menetapkan tujuan penelitian kami: Kami
ingin menjelaskan umpan balik subyektif "kualitas anggur" menggunakan properti anggur
yang berbeda.
Pekerjaan pertama kami kemudian adalah mengunduh kumpulan data (langkah kedua:
memperoleh data), seperti yang ditunjukkan dalam daftar berikut, dan menyiapkannya untuk
analisis (langkah ketiga: persiapan data). Kemudian kami dapat menjalankan algoritme PCA
dan melihat hasilnya untuk melihat opsi kami.
Tabel 3.2 Tiga baris pertama Kumpulan Data Kualitas Anggur Merah
Keasa Keasaman Asam Gula Klorida Sulfur Sulfur Kepada pH Sulfat Alkohol Kualitas
man yang sitrat sisa dioksida dioksida tan
tetap mudah bebas total
menguap
7.4 0.7 0 1.9 0.076 11 34 0.9978 3.51 0.56 9.4 5
7.8 0.88 0 2.6 0.098 25 67 0.9968 3.2 0.68 9.8 5
7.8 0.76 0.04 2.3 0.092 15 54 0.997 3.26 0.65 9.8 5
Dengan persiapan data awal di belakang Anda, Anda dapat menjalankan PCA. Plot
scree yang dihasilkan (yang akan segera dijelaskan) ditunjukkan pada gambar 3.8. Karena PCA
adalah teknik eksploratif, sekarang kita sampai pada langkah keempat dari proses ilmu data:
eksplorasi data, seperti yang ditunjukkan pada daftar berikut.
Gambar 3.8 Plot scree PCA menunjukkan jumlah marginal informasi dari setiap variabel
baru yang dapat dibuat PCA. Variabel pertama menjelaskan sekitar 28% varian dalam
data, variabel kedua menjelaskan 17% lainnya, variabel ketiga sekitar 15%, dan
seterusnya.
2 17% 45%
3 14% 59%
4 10% 69%
5 8% 77%
6 7% 84%
7 5% 89%
8 - 11 … 100%
Bentuk siku-siku dalam plot menunjukkan bahwa lima variabel dapat menampung
sebagian besar informasi yang ditemukan di dalam data. Sebagai gantinya, Anda dapat
memperdebatkan batasan pada enam atau tujuh variabel, tetapi kami akan memilih
kumpulan data yang lebih sederhana dibandingkan dengan varian data yang lebih sedikit
dibandingkan kumpulan data asli.
Pada titik ini, kita dapat melanjutkan dan melihat apakah kumpulan data asli yang
dikodekan ulang dengan lima variabel laten cukup baik untuk memprediksi kualitas anggur
secara akurat, tetapi sebelum kita melakukannya, kita akan melihat bagaimana kita dapat
mengidentifikasi apa yang diwakilinya.
Menafsirkan Variabel Baru
Dengan keputusan awal dibuat untuk mengurangi kumpulan data dari 11 variabel asli
menjadi 5 variabel laten, kita dapat memeriksa untuk melihat apakah mungkin untuk
menafsirkan atau menamainya berdasarkan hubungannya dengan aslinya. Nama sebenarnya
lebih mudah digunakan daripada kode seperti lv1, lv2, dan seterusnya. Kita dapat
menambahkan baris kode di daftar berikut untuk menghasilkan tabel yang menunjukkan
bagaimana dua set variabel berkorelasi.
Baris-baris pada tabel hasil (tabel 3.4) menunjukkan korelasi matematis. Atau, dalam
bahasa Inggris, variabel laten pertama lv1, yang menangkap kira-kira 28% dari total informasi
dalam himpunan, memiliki rumus berikut.
Tabel 3.4 Bagaimana PCA menghitung korelasi 11 variabel asli dengan 5 variabel laten
Keasaman Sulfur Sulfur
Keasaman Asam
yang mudah Gula sisa Klorida dioksida dioksida Kepadatan pH Alkohol
tetap sitrat Sulfat
menguap bebas total
0 0.4893 - 0.2385 0.4636 0.1461 0.2122 - 0.0361 0.0236 0.3953 -0.4385 0.2429 - 0.1132
1 - 0.1105 0.2749 - 0.1518 0.2720 0.1480 0.5135 0.5695 0.2336 0.0067 - 0.0375 - 0.3861
2 0.1233 0.4499 - 0.2382 - 0.1012 0.0926 - 0.4287 -0.3224 0.3389 - 0.0576 - 0.2797 - 0.4716
3 - 0.2296 0.0789 - 0.0794 - 0.3727 0.6662 - 0.0435 - 0.0345 - 0.1745 -0.0038 0.5508 - 0.1221
4 0.0826 - 0.2187 0.0586 - 0.7321 - 0.2465 0.1591 0.2224 - 0.1571 - 0.2675 - 0.2259 - 0.3506
Memberikan nama yang bisa digunakan untuk setiap variabel baru sedikit lebih rumit dan
mungkin memerlukan konsultasi dengan pakar anggur yang sebenarnya untuk keakuratannya.
Namun, karena kami tidak memiliki ahli anggur, kami akan memanggil mereka sebagai berikut
(tabel 3.5).
Kita sekarang dapat mengode ulang kumpulan data asli hanya dengan lima variabel
laten. Melakukan ini adalah persiapan data lagi, jadi kami meninjau kembali langkah ketiga
dari proses ilmu data: persiapan data. Seperti disebutkan dalam bab 2, proses ilmu data
bersifat rekursif dan ini terutama terjadi antara langkah ketiga: persiapan data dan langkah 4:
eksplorasi data. Tabel 3.6 menunjukkan tiga baris pertama dengan ini selesai.
Tabel 3.6 Tiga baris pertama dari Kumpulan Data Kualitas Anggur Merah dikode ulang
dalam lima variabel laten
Keasaman yang terus- Keasaman yang
Sulfida Klorida Kurangnya sisa gula
menerus mudah menguap
0 -1.619530 0.450950 1.774454 0.043740 -0.067014
1 -0.799170 1.856553 0.911690 0.548066 0.018392
2 2.357673 -0.269976 -0.243489 -0.928450 1.499149
Kita sudah dapat melihat nilai tinggi untuk anggur 0 dalam keasaman yang mudah
menguap, sedangkan anggur 2 sangat tinggi dalam keasaman yang persisten. Sama sekali tidak
terdengar seperti anggur yang enak!
Sekarang kita akan menjalankan tes prediksi yang sama, tetapi dimulai dengan hanya
1 variabel laten, bukan 11 variabel asli. Kemudian kita akan menambahkan yang lain, melihat
hasilnya, menambahkan yang lain, dan seterusnya untuk melihat bagaimana performa
prediksi meningkat. Daftar berikut menunjukkan bagaimana hal ini dilakukan.
Gambar 3.9 Plot hasil menunjukkan bahwa menambahkan lebih banyak variabel laten ke
model (sumbu x) sangat meningkatkan daya prediksi (sumbu y) hingga titik tertentu tetapi
kemudian berkurang. Keuntungan dalam kekuatan prediktif dari penambahan variabel
pada akhirnya akan hilang.
Plot yang dihasilkan ditunjukkan pada gambar 3.9. Plot pada gambar 3.9 menunjukkan
bahwa dengan hanya 3 variabel laten, pengklasifikasi melakukan pekerjaan yang lebih baik
dalam memprediksi kualitas anggur dibandingkan dengan 11 variabel asli. Selain itu,
menambahkan lebih banyak variabel laten di luar 5 tidak menambah kekuatan prediksi
sebanyak 5 variabel pertama. Ini menunjukkan bahwa pilihan kami untuk memotong 5
variabel adalah pilihan yang bagus, seperti yang kami harapkan. Kami melihat cara
mengelompokkan variabel serupa, tetapi juga memungkinkan untuk mengelompokkan
pengamatan.
Mengelompokkan Pengamatan Serupa Untuk Mendapatkan Wawasan Dari Distribusi Data
Anda
Misalkan sejenak Anda sedang membangun situs web yang merekomendasikan film
kepada pengguna berdasarkan preferensi yang telah mereka masukkan dan film yang telah
mereka tonton. Kemungkinan besar jika mereka menonton banyak film horor, mereka
cenderung ingin tahu tentang film horor baru dan bukan tentang film roman remaja baru.
Dengan mengelompokkan pengguna yang telah menonton film yang kurang lebih sama dan
menetapkan preferensi yang kurang lebih sama, Anda dapat memperoleh banyak wawasan
tentang apa lagi yang mungkin ingin mereka rekomendasikan.
Teknik umum yang kami jelaskan di sini dikenal sebagai pengelompokan. Dalam proses
ini, kami mencoba untuk membagi kumpulan data kami menjadi subset pengamatan, atau
kelompok, di mana pengamatan harus serupa dengan yang ada di kelompok yang sama tetapi
sangat berbeda dari pengamatan di kelompok lain. Gambar 3.10 memberi Anda gambaran
visual tentang apa yang ingin dicapai oleh pengelompokan. Lingkaran di kiri atas gambar
terlihat jelas berdekatan satu sama lain namun lebih jauh dari yang lain. Hal yang sama berlaku
untuk salib di kanan atas.
Gambar 3.10 Tujuan pengelompokan adalah untuk membagi kumpulan data menjadi
himpunan bagian yang “cukup berbeda”. Dalam plot ini misalnya, pengamatan telah
dibagi menjadi tiga kelompok.
Gambar 3.11 menunjukkan output dari klasifikasi iris. Gambar ini menunjukkan bahwa
bahkan tanpa menggunakan label, Anda akan menemukan klaster yang mirip dengan
klasifikasi iris resmi dengan hasil 134 (50+48+36) klasifikasi yang benar dari 150. Anda tidak
selalu harus memilih antara diawasi dan tidak diawasi; terkadang menggabungkannya adalah
sebuah pilihan.
Gambar 3.12 Plot ini hanya memiliki dua observasi berlabel—terlalu sedikit untuk
observasi terawasi, tetapi cukup untuk memulai dengan pendekatan tak terawasi atau
semi terawasi.
Teknik pembelajaran semi-diawasi yang umum adalah propagasi label. Dalam teknik
ini, Anda mulai dengan kumpulan data berlabel dan memberikan label yang sama ke titik data
yang serupa. Ini mirip dengan menjalankan algoritme pengelompokan pada kumpulan data
dan memberi label pada setiap kluster berdasarkan label yang dikandungnya. Jika kita
menerapkan pendekatan ini pada kumpulan data pada gambar 3.12, kita mungkin akan
mendapatkan sesuatu seperti gambar 3.13.
Salah satu pendekatan khusus untuk pembelajaran semi-diawasi yang perlu
disebutkan di sini adalah pembelajaran aktif. Dalam pembelajaran aktif, prog ram
menunjukkan pengamatan yang ingin dilihatnya diberi label untuk putaran pembelajaran
berikutnya berdasarkan beberapa kriteria yang telah Anda tentukan. Misalnya, Anda dapat
mengaturnya untuk mencoba dan memberi label pengamatan yang paling tidak pasti tentang
algoritme, atau Anda dapat menggunakan beberapa model untuk membuat prediksi dan
memilih titik di mana model paling tidak setuju.
Gambar 3.13 Gambar sebelumnya menunjukkan bahwa data hanya memiliki dua
pengamatan berlabel, terlalu sedikit untuk pembelajaran yang diawasi.
3.5 RINGKASAN
Di bab ini, Anda mempelajarinya
• Ilmuwan data sangat bergantung pada teknik dari statistik dan pembelajaran mesin untuk
melakukan pemodelan mereka. Ada banyak aplikasi kehidupan nyata untuk pembelajaran
mesin, mulai dari mengklasifikasikan siulan burung hingga memprediksi letusan gunung
berapi.
• Proses pemodelan terdiri dari empat fase:
1. Rekayasa fitur, persiapan data, dan parameterisasi model —Kami menentukan
parameter input dan variabel untuk model kami.
2. Pelatihan model—Model diisi dengan data dan mempelajari pola yang tersembunyi di
dalam data.
3. Pemilihan dan validasi model—Sebuah model dapat bekerja dengan baik atau buruk;
berdasarkan kinerjanya, kami memilih model yang paling masuk akal.
4. Penskoran model—Jika model kami dapat dipercaya, model tersebut akan merilis data
baru. Jika kita melakukan pekerjaan kita dengan baik, itu akan memberi kita wawasan
tambahan atau memberi kita prediksi yang baik tentang apa yang akan terjadi di masa
depan.
BAB 4
MENANGANI DATA BESAR DALAM SATU KOMPUTER
memori. Tetapi hanya beberapa algoritme yang dirancang untuk menangani kumpulan data
besar; kebanyakan dari mereka memuat seluruh kumpulan data ke dalam memori sekaligus,
yang menyebabkan kesalahan kehabisan memori. Algoritme lain perlu menyimpan banyak
salinan data dalam memori atau menyimpan hasil antara. Semua ini memperburuk masalah.
Masalah
Solusi
Tips Umum
Gambar 4.1 Tinjauan masalah yang dihadapi saat bekerja dengan lebih banyak data
daripada yang dapat ditampung dalam memori
Bahkan saat Anda menyembuhkan masalah ingatan, Anda mungkin perlu berurusan
dengan sumber daya terbatas lainnya: waktu. Meskipun komputer mungkin mengira Anda
hidup selama jutaan tahun, pada kenyataannya Anda tidak akan melakukannya (kecuali jika
Anda masuk ke cryostasis sampai PC Anda selesai). Algoritme tertentu tidak
memperhitungkan waktu; mereka akan terus berjalan selamanya. Algoritme lain tidak dapat
berakhir dalam jumlah waktu yang masuk akal ketika mereka hanya perlu memproses
beberapa megabyte data.
Hal ketiga yang akan Anda amati ketika berhadapan dengan kumpulan data besar
adalah bahwa komponen komputer Anda dapat mulai membentuk hambatan sementara
membiarkan sistem lain menganggur. Meskipun ini tidak separah algoritme yang tidak pernah
berakhir atau kesalahan kehabisan memori, ini masih menimbulkan biaya yang serius. Pikirkan
penghematan biaya dalam hal hari orang dan infrastruktur komputasi untuk kelaparan CPU.
Program tertentu tidak memasukkan data dengan cukup cepat ke prosesor karena harus
membaca data dari hard drive, yang merupakan salah satu komponen paling lambat di
komputer. Ini telah diatasi dengan diperkenalkannya solid state drive (SSD), tetapi SSD masih
jauh lebih mahal daripada teknologi hard disk drive (HDD) yang lebih lambat dan lebih luas.
menjadi tiga kategori: menggunakan algoritma yang tepat, memilih struktur data yang tepat,
dan menggunakan alat yang tepat (gambar 4.2).
Masalah
Solusi
Tips Umum
Gambar 4.2 Gambaran umum solusi untuk menangani kumpulan data besar
Tidak ada pemetaan satu-ke-satu yang jelas antara masalah dan solusi karena banyak
solusi mengatasi kekurangan memori dan kinerja komputasi. Misalnya, kompresi kumpulan
data akan membantu Anda mengatasi masalah memori karena kumpulan data menjadi lebih
kecil. Tapi ini juga mempengaruhi kecepatan komputasi dengan pergeseran dari hard disk
yang lambat ke CPU yang cepat. Berlawanan dengan RAM (memori akses acak), hard disk akan
menyimpan semuanya bahkan setelah daya padam, tetapi menulis ke disk membutuhkan
lebih banyak waktu daripada mengubah informasi dalam RAM yang cepat berlalu. Ketika
terus-menerus mengubah informasi, RAM lebih disukai daripada hard disk (lebih tahan lama).
Dengan kumpulan data yang belum dikemas, banyak operasi baca dan tulis (I/O) terjadi, tetapi
CPU sebagian besar tetap menganggur, sedangkan dengan kumpulan data terkompresi, CPU
mendapatkan bagian yang adil dari beban kerja. Ingatlah hal ini sementara kami menjelajahi
beberapa solusi.
4.2.1 Memilih algoritma yang tepat
Memilih algoritma yang tepat dapat memecahkan lebih banyak masalah daripada
menambahkan perangkat keras yang lebih banyak atau lebih baik. Algoritme yang cocok untuk
menangani data besar tidak perlu memuat seluruh kumpulan data ke dalam memori untuk
membuat prediksi. Idealnya, algoritma juga mendukung perhitungan paralel. Pada bagian ini
kita akan menggali tiga jenis algoritme yang dapat melakukannya: algoritme online, algoritme
blok, dan algoritme MapReduce, seperti yang ditunjukkan pada gambar 4.3.
Aloritma Online
Masalah
Blok Matrix
Solusi
MapReduce
Memilih Algoritma
Tips Umum
Gambar 4.3 Tinjauan teknik untuk mengadaptasi algoritma ke set data besar
Kami akan memperbesar bagian kode yang mungkin tidak begitu jelas untuk dipahami
tanpa penjelasan lebih lanjut. Kami akan mulai dengan menjelaskan cara kerja fungsi
train_observation(). Fungsi ini memiliki dua bagian besar. Yang pertama adalah menghitung
prediksi dari suatu pengamatan dan membandingkannya dengan nilai sebenarnya. Bagian
kedua adalah mengubah bobot jika prediksi tampaknya salah.
Prediksi (y) dihitung dengan mengalikan vektor masukan variabel bebas dengan bobot
masing-masing dan menjumlahkan suku-sukunya (seperti dalam regresi linier). Kemudian nilai
ini dibandingkan dengan ambang batas. Jika lebih besar dari ambang batas, algoritme akan
memberikan 1 sebagai keluaran, dan jika lebih kecil dari ambang batas, algoritme akan
memberikan 0 sebagai keluaran. Menetapkan ambang adalah hal yang subjektif dan
bergantung pada kasus bisnis Anda. Katakanlah Anda memprediksi apakah seseorang memiliki
penyakit mematikan tertentu, dengan 1 positif dan 0 negatif. Dalam hal ini, lebih baik memiliki
ambang batas yang lebih rendah: tidak seburuk ditemukan positif dan melakukan
penyelidikan kedua daripada mengabaikan penyakit dan membiarkan pasien meninggal.
Kesalahan dihitung, yang akan memberikan arah perubahan bobot.
Bobot diubah sesuai dengan tanda kesalahan. Pembaruan dilakukan dengan aturan
pembelajaran untuk perceptrons. Untuk setiap bobot dalam vektor bobot, Anda memperbarui
nilainya dengan aturan berikut:
dimana Δwi adalah jumlah bobot yang perlu diubah, 𝛼 adalah learning rate, 𝜀 adalah error,
dan xi adalah nilai ke-i pada vektor input (variabel prediktor ke-i). Penghitungan kesalahan
adalah variabel untuk melacak berapa banyak pengamatan yang salah diprediksi pada zaman
ini dan dikembalikan ke fungsi pemanggilan. Anda menambahkan satu pengamatan ke
penghitung kesalahan jika prediksi aslinya salah. Zaman adalah pelatihan tunggal yang
dijalankan melalui semua pengamatan.
Fungsi kedua yang akan kita bahas lebih detail adalah fungsi train(). Fungsi ini memiliki
loop internal yang terus melatih perceptron hingga dapat memprediksi dengan sempurna atau
hingga mencapai sejumlah putaran pelatihan (zaman), seperti yang ditunjukkan pada daftar
berikut.
Sebagian besar algoritme online juga dapat menangani batch mini; dengan cara ini,
Anda dapat memberi mereka kumpulan 10 hingga 1.000 pengamatan sekaligus sambil
menggunakan jendela geser untuk memeriksa data Anda. Anda memiliki tiga opsi:
• Pembelajaran batch penuh (juga disebut pembelajaran statistik)—Masukkan algoritme
semua data sekaligus. Inilah yang kami lakukan di bab 3.
• Pembelajaran mini-batch—Masukkan algoritme sesendok penuh (100, 1000, …,
tergantung pada apa yang dapat ditangani perangkat keras Anda) pengamatan pada satu
waktu.
• Pembelajaran online—Masukkan algoritme satu pengamatan pada satu waktu.
Teknik pembelajaran online terkait dengan algoritme streaming, di mana Anda melihat setiap
titik data hanya sekali. Pikirkan tentang data Twitter yang masuk: data tersebut dimuat ke
dalam algoritme, dan kemudian pengamatan (tweet) dibuang karena banyaknya data tweet
yang masuk mungkin akan segera membanjiri perangkat keras. Algoritma pembelajaran online
berbeda dari algoritma streaming karena mereka dapat melihat pengamatan yang sama
berkali-kali. Benar, algoritma pembelajaran online dan algoritma streaming sama-sama bisa
belajar dari pengamatan satu per satu. Perbedaannya adalah bahwa algoritme online juga
Ilmu Data (Data Science) – Dr. Joseph Santoso
91
digunakan pada sumber data statis dan juga pada sumber data streaming dengan menyajikan
data dalam batch kecil (sekecil pengamatan tunggal), yang memungkinkan Anda memeriksa
data berkali-kali. Ini tidak terjadi pada algoritme streaming, di mana data mengalir ke sistem
dan Anda biasanya perlu segera melakukan penghitungan. Mereka serupa karena mereka
hanya menangani beberapa pada satu waktu.
Membagi Matriks Besar Menjadi Banyak Matriks Kecil
Sedangkan di bab sebelumnya kita hampir tidak perlu berurusan dengan seberapa
tepatnya algoritma memperkirakan parameter, menyelami ini terkadang bisa membantu.
Misalnya, dengan memotong tabel data besar menjadi matriks kecil, kita masih bisa
melakukan regresi linier. Logika di balik pemisahan matriks ini dan bagaimana regresi linier
dapat dihitung dengan matriks dapat ditemukan di sidebar. Cukup untuk mengetahui untuk
saat ini bahwa pustaka Python yang akan kita gunakan akan menangani pemisahan matriks,
dan bobot variabel regresi linier dapat dihitung menggunakan kalkulus matriks.
Matriks blok dan formula matriks estimasi koefisien regresi linier Algoritma tertentu
dapat diterjemahkan ke dalam algoritma yang menggunakan blok matriks, bukan matriks
penuh. Saat Anda mempartisi matriks menjadi matriks blok, Anda membagi seluruh matriks
menjadi beberapa bagian dan bekerja dengan bagian yang lebih kecil daripada matriks penuh.
Dalam hal ini Anda dapat memuat matriks yang lebih kecil ke dalam memori dan melakukan
perhitungan, sehingga menghindari kesalahan kehabisan memori. Gambar 4.4 menunjukkan
bagaimana Anda dapat menulis ulang penjumlahan matriks A + B menjadi submatriks.
Rumus pada gambar 4.4 menunjukkan bahwa tidak ada perbedaan antara
menjumlahkan matriks A dan B sekaligus dalam satu langkah atau terlebih dahulu
menjumlahkan bagian atas matriks dan kemudian menjumlahkan bagian bawah. Semua
operasi matriks dan vektor umum, seperti perkalian, inversi, dan dekomposisi nilai singular
(teknik pengurangan variabel seperti PCA), dapat ditulis dalam bentuk matriks blok.1 Operasi
matriks blok menghemat memori dengan memecah masalah menjadi blok yang lebih kecil dan
mudah diparalelkan.
Gambar 4.4 Matriks blok dapat digunakan untuk menghitung jumlah matriks A dan B.
Meskipun sebagian besar paket numerik memiliki kode yang sangat optimal, mereka
hanya bekerja dengan matriks yang dapat masuk ke dalam memori dan akan menggunakan
matriks blok dalam memori bila menguntungkan. Dengan matriks kehabisan memori, mereka
tidak mengoptimalkan ini untuk Anda dan terserah Anda untuk mempartisi matriks menjadi
matriks yang lebih kecil dan menerapkan versi matriks blok. Regresi linier adalah cara untuk
memprediksi variabel kontinu dengan kombinasi linear dari prediktornya; salah satu cara
paling dasar untuk melakukan perhitungan adalah dengan teknik yang disebut kuadrat terkecil
biasa. Rumus dalam bentuk matriks adalah
𝜷 = (𝑿−𝑻 𝑿)−𝟏 𝑿𝑻 𝒚
di mana 𝛽 adalah koefisien yang ingin diambil, X adalah prediktor, dan y adalah variabel target.
Alat Python yang kami miliki untuk menyelesaikan tugas kami adalah sebagai berikut:
• bcolz adalah pustaka Python yang dapat menyimpan larik data secara ringkas dan
menggunakan hard drive saat larik tidak lagi muat ke dalam memori utama.
• Dask adalah pustaka yang memungkinkan Anda untuk mengoptimalkan aliran perhitungan
dan membuat perhitungan secara paralel lebih mudah dilakukan. Itu tidak dikemas
dengan pengaturan Anaconda default jadi pastikan untuk menggunakan conda install dask
di lingkungan virtual Anda sebelum menjalankan kode di bawah ini. Catatan: beberapa
kesalahan telah dilaporkan saat mengimpor Dask saat menggunakan Python 64bit. Dask
bergantung pada beberapa pustaka lain (seperti toolz), tetapi ketergantungan tersebut
harus ditangani secara otomatis oleh pip atau conda.
Daftar berikut menunjukkan perhitungan matriks blok dengan perpustakaan ini.
Perhatikan bahwa Anda tidak perlu menggunakan inversi matriks blok karena XTX
adalah matriks persegi dengan ukuran nr. prediktor * nr. dari prediktor. Ini beruntung karena
Dask belum mendukung inversi matriks blok.
Mapreduce
Algoritma MapReduce mudah dipahami dengan analogi: Bayangkan Anda diminta
menghitung semua suara untuk pemilu nasional. Negara Anda memiliki 25 partai, 1.500 kantor
pemungutan suara, dan 2 juta orang. Anda dapat memilih untuk mengumpulkan semua tiket
pemungutan suara dari setiap kantor satu per satu dan menghitungnya secara terpusat, atau
Anda dapat meminta kantor lokal untuk menghitung suara untuk 25 partai dan menyerahkan
hasilnya kepada Anda, dan kemudian Anda dapat mengumpulkannya berdasarkan partai.
Pengurang peta mengikuti proses yang mirip dengan cara kerja kedua. Mereka pertama-tama
memetakan nilai ke kunci dan kemudian melakukan agregasi pada kunci tersebut selama fase
pengurangan. Lihat kode semu daftar berikut untuk mendapatkan perasaan yang lebih baik
untuk ini.
Salah satu keuntungan dari algoritme MapReduce adalah mudah untuk diparalelkan dan
didistribusikan. Ini menjelaskan keberhasilan mereka dalam lingkungan terdistribusi seperti
Hadoop, tetapi mereka juga dapat digunakan pada komputer individu. Kita akan melihatnya
Ilmu Data (Data Science) – Dr. Joseph Santoso
94
lebih mendalam di bab berikutnya, dan contoh implementasi (JavaScript) juga disediakan di
bab 9. Saat mengimplementasikan MapReduce dengan Python, Anda tidak perlu memulai dari
awal. Sejumlah perpustakaan telah melakukan sebagian besar pekerjaan untuk Anda, seperti
Hadoopy, Octopy, Disco, atau Dumbo.
4.2.2 Memilih struktur data yang tepat
Algoritma dapat membuat atau menghancurkan program Anda, tetapi cara Anda
menyimpan data sama pentingnya. Struktur data memiliki persyaratan penyimpanan yang
berbeda, tetapi juga memengaruhi kinerja CRUD (buat, baca, perbarui, dan hapus) dan operasi
lain pada kumpulan data. Gambar 4.5 menunjukkan bahwa Anda memiliki banyak struktur
data yang berbeda untuk dipilih, tiga di antaranya akan kita bahas di sini: data jarang, data
pohon, dan data hash. Pertama mari kita lihat kumpulan data jarang.
Data Jangkau
Kumpulan data jarang berisi informasi yang relatif sedikit dibandingkan dengan entri
(pengamatan). Lihat gambar 4.6: hampir semuanya adalah "0" dengan hanya satu "1" yang
ada pada pengamatan kedua pada variabel 9.
Data seperti ini mungkin terlihat konyol, tetapi sering kali ini yang Anda dapatkan saat
mengonversi data tekstual menjadi data biner. Bayangkan satu set 100.000 tweet Twitter yang
sama sekali tidak berhubungan. Sebagian besar dari mereka mungkin memiliki kurang dari 30
kata, tetapi bersama-sama mereka mungkin memiliki ratusan atau ribuan kata yang berbeda.
Dalam bab tentang penambangan teks, kita akan melalui proses pemotongan dokumen teks
menjadi kata-kata dan menyimpannya sebagai vektor. Tapi untuk saat ini bayangkan apa yang
akan Anda dapatkan jika setiap kata diubah menjadi variabel biner, dengan "1" berarti "ada di
tweet ini", dan "0" berarti "tidak ada di tweet ini". Ini memang akan menghasilkan data yang
jarang. Matriks besar yang dihasilkan dapat menyebabkan masalah memori meskipun hanya
berisi sedikit informasi.
Masalah
Solusi
.. .. ...
Tips Umum
Gambar 4.5 Sekilas tentang struktur data yang sering diterapkan dalam ilmu data saat
bekerja dengan data berukuran besar
Gambar 4.6 Contoh matriks jarang: hampir semuanya 0; nilai lain adalah pengecualian
dalam matriks jarang
Untungnya, data seperti ini bisa disimpan secara kompak. Dalam kasus gambar 4.6 bisa
terlihat seperti ini:
Baris 2, kolom 9 memuat nilai 1. Dukungan untuk bekerja dengan matriks jarang tumbuh di
Python. Banyak algoritme sekarang mendukung atau menampilkan matriks renggang.
Struktur Pohon
Pohon adalah kelas struktur data yang memungkinkan Anda mengambil informasi
lebih cepat daripada memindai melalui tabel. Sebuah pohon selalu memiliki nilai akar dan
subpohon dari anak-anak, masing-masing dengan anak-anaknya, dan seterusnya. Contoh
sederhananya adalah silsilah keluarga Anda sendiri atau silsilah biologis dan caranya
membelah menjadi cabang, ranting, dan daun. Aturan keputusan sederhana memudahkan
untuk menemukan pohon anak tempat data Anda berada. Lihat gambar 4.7 untuk melihat
bagaimana struktur pohon memungkinkan Anda mendapatkan informasi yang relevan dengan
cepat.
Pada gambar 4.7 Anda memulai pencarian di bagian atas dan memilih kategori usia
terlebih dahulu, karena ternyata itulah faktor yang paling banyak memotong alternatif. Ini
terus berlanjut sampai Anda mendapatkan apa yang Anda cari. Bagi siapa pun yang tidak
mengenal Akinator, kami sarankan untuk mengunjungi http://en.akinator.com/. Akinator
adalah jin dalam lampu ajaib yang mencoba menebak seseorang dalam pikiran Anda dengan
menanyakan beberapa pertanyaan tentang dia. Cobalah dan kagumi. . . atau lihat bagaimana
keajaiban ini adalah pencarian pohon.
Gambar 4.7 Contoh struktur data pohon: aturan keputusan seperti kategori usia dapat
digunakan untuk menemukan seseorang dengan cepat dalam pohon keluarga
Pohon juga populer di database. Database memilih untuk tidak memindai tabel dari
baris pertama hingga terakhir, tetapi menggunakan perangkat yang disebut indeks untuk
menghindari hal ini. Indeks seringkali didasarkan pada struktur data seperti pohon dan tabel
hash untuk menemukan pengamatan lebih cepat. Penggunaan indeks sangat mempercepat
proses pencarian data. Mari kita lihat tabel hash ini.
Tabel Hash
Tabel hash adalah struktur data yang menghitung kunci untuk setiap nilai dalam data
Anda dan memasukkan kunci ke dalam ember. Dengan cara ini Anda dapat dengan cepat
mengambil informasi dengan melihat di keranjang yang tepat saat Anda menemukan data.
Kamus di Python adalah implementasi tabel hash, dan mereka adalah kerabat dekat dari
penyimpanan nilai kunci. Anda akan menemukannya di contoh terakhir bab ini saat Anda
membangun sistem pemberi rekomendasi di dalam database. Tabel hash digunakan secara
luas dalam database sebagai indeks untuk pengambilan informasi yang cepat.
4.2.3 Memilih alat yang tepat
Dengan kelas algoritma dan struktur data yang tepat, saatnya memilih alat yang tepat
untuk pekerjaan itu. Alat yang tepat dapat berupa pustaka Python atau setidaknya alat yang
dikendalikan dari Python, seperti yang ditunjukkan pada gambar 4.8. Jumlah alat bermanfaat
yang tersedia sangat banyak, jadi kami hanya akan melihat beberapa di antaranya.
Masalah
Solusi
Memilih Algoritma
Numexpr
Memilih Struktur Data Bcotz
Menangani Data Besar Memilih Komponen Numba
Phyton Tool Blazo
Theano
Tips Umum
Chyton
Gambar 4.8 Gambaran alat yang dapat digunakan saat bekerja dengan data besar
Alat Python
Python memiliki sejumlah pustaka yang dapat membantu Anda menangani data besar.
Mulai dari struktur data yang lebih cerdas di atas pengoptimal kode hingga kompiler just-in-
time. Berikut ini adalah daftar pustaka yang ingin kami gunakan saat berhadapan dengan data
besar:
• Cython—Semakin dekat Anda dengan perangkat keras komputer yang sebenarnya,
semakin penting bagi komputer untuk mengetahui jenis data apa yang harus diproses.
Untuk komputer, menjumlahkan 1 + 1 berbeda dengan menjumlahkan 1,00 + 1,00. Contoh
pertama terdiri dari bilangan bulat dan yang kedua terdiri dari float, dan perhitungan ini
dilakukan oleh berbagai bagian CPU. Di Python Anda tidak perlu menentukan tipe data apa
yang Anda gunakan, jadi kompiler Python harus menyimpulkannya. Tetapi menyimpulkan
tipe data adalah operasi yang lambat dan sebagian mengapa Python bukan salah satu
bahasa tercepat yang tersedia. Cython, superset dari Python, memecahkan masalah ini
dengan memaksa pemrogram untuk menentukan tipe data saat mengembangkan
program. Setelah kompiler memiliki informasi ini, ia menjalankan program lebih cepat.
• Numexpr—Numexpr adalah inti dari banyak paket big data, seperti halnya NumPy untuk
paket dalam memori. Numexpr adalah evaluator ekspresi numerik untuk NumPy tetapi
bisa berkali-kali lebih cepat daripada NumPy asli. Untuk mencapai ini, itu menulis ulang
ekspresi Anda dan menggunakan kompiler internal (tepat waktu).
• Numba—Numba membantu Anda mencapai kecepatan yang lebih tinggi dengan
mengompilasi kode tepat sebelum Anda mengeksekusinya, juga dikenal sebagai kompilasi
just-in-time. Ini memberi Anda keuntungan menulis kode tingkat tinggi tetapi mencapai
kecepatan yang mirip dengan kode C.
• Bcolz—Bcolz membantu Anda mengatasi masalah kehabisan memori yang dapat terjadi
saat menggunakan NumPy. Itu dapat menyimpan dan bekerja dengan array dalam bentuk
terkompresi yang optimal. Ini tidak hanya mengurangi kebutuhan data Anda tetapi juga
Ilmu Data (Data Science) – Dr. Joseph Santoso
98
Masalah
Solusi
Gambar 4.9 Tinjauan praktik terbaik pemrograman umum saat bekerja dengan data besar
“Jangan menemukan kembali roda” lebih mudah diucapkan daripada dilakukan ketika
dihadapkan dengan masalah tertentu, tetapi pikiran pertama Anda harus selalu, 'Orang lain
pasti pernah menghadapi masalah yang sama ini sebelum saya.
4.3.1 Jangan menemukan kembali roda
"Jangan ulangi siapa pun" mungkin lebih baik daripada "jangan ulangi dirimu sendiri".
Tambahkan nilai dengan tindakan Anda: pastikan itu penting. Memecahkan masalah yang
sudah dipecahkan adalah buang-buang waktu. Sebagai ilmuwan data, Anda memiliki dua
aturan besar yang dapat membantu Anda menangani data besar dan membuat Anda jauh
lebih produktif, misalnya:
• Memanfaatkan kekuatan database. Reaksi pertama yang dimiliki sebagian besar ilmuwan
data saat bekerja dengan kumpulan data besar adalah menyiapkan tabel dasar analitik
mereka di dalam database. Cara ini bekerja dengan baik ketika fitur yang ingin Anda
siapkan terbilang sederhana. Saat persiapan ini melibatkan pemodelan tingkat lanjut, cari
tahu apakah mungkin menggunakan fungsi dan prosedur yang ditentukan pengguna.
Contoh terakhir dari bab ini adalah tentang mengintegrasikan database ke dalam alur kerja
Anda.
• Gunakan pustaka yang dioptimalkan. Membuat perpustakaan seperti Mahout, Weka, dan
algoritme pembelajaran mesin lainnya membutuhkan waktu dan pengetahuan. Mereka
sangat dioptimalkan dan menggabungkan praktik terbaik dan teknologi canggih. Habiskan
waktu Anda untuk menyelesaikan sesuatu, bukan untuk menemukan kembali dan
mengulangi upaya orang lain, kecuali demi memahami cara kerja sesuatu.
Maka Anda harus mempertimbangkan batasan perangkat keras Anda.
4.3.2 Dapatkan hasil maksimal dari perangkat keras Anda
Sumber daya di komputer dapat menganggur, sedangkan sumber daya lainnya
digunakan secara berlebihan. Ini memperlambat program dan bahkan dapat membuatnya
Ilmu Data (Data Science) – Dr. Joseph Santoso
100
gagal. Terkadang mungkin (dan perlu) untuk mengalihkan beban kerja dari sumber daya yang
kelebihan beban ke sumber daya yang kurang dimanfaatkan dengan menggunakan teknik
berikut:
• Beri makan data terkompresi CPU. Trik sederhana untuk menghindari kelaparan CPU
adalah dengan memberi makan data terkompresi CPU alih-alih data (mentah) yang
digelembungkan. Ini akan mengalihkan lebih banyak pekerjaan dari hard disk ke CPU,
persis seperti yang ingin Anda lakukan, karena hard disk tidak dapat mengikuti CPU di
sebagian besar arsitektur komputer modern.
• Manfaatkan GPU. Terkadang CPU Anda dan bukan memori Anda yang menjadi
penghambat. Jika komputasi Anda dapat diparalelkan, Anda dapat memanfaatkan
peralihan ke GPU. Ini memiliki throughput yang jauh lebih tinggi untuk perhitungan
daripada CPU. GPU sangat efisien dalam pekerjaan yang dapat diparalelkan tetapi memiliki
lebih sedikit cache daripada CPU. Tetapi tidak ada gunanya beralih ke GPU jika masalahnya
adalah hard disk Anda. Beberapa paket Python, seperti Theano dan NumbaPro, akan
menggunakan GPU tanpa banyak usaha pemrograman. Jika ini tidak cukup, Anda dapat
menggunakan paket CUDA (Compute Unified Device Architecture) seperti PyCUDA. Ini
juga merupakan trik terkenal dalam penambangan bitcoin, jika Anda tertarik untuk
menghasilkan uang sendiri.
• Gunakan banyak utas. Masih mungkin untuk memparalelkan perhitungan pada CPU Anda.
Anda dapat mencapai ini dengan utas Python normal.
4.3.3 Kurangi kebutuhan komputasi Anda
“Bekerja cerdas + keras = prestasi.” Ini juga berlaku untuk program yang Anda tulis.
Cara terbaik untuk menghindari masalah data yang besar adalah dengan menghapus sebanyak
mungkin pekerjaan di depan dan membiarkan komputer bekerja hanya pada bagian yang tidak
dapat dilewati. Daftar berikut berisi metode untuk membantu Anda mencapai hal ini:
• Buat profil kode Anda dan pulihkan potongan kode yang lambat. Tidak setiap bagian dari
kode Anda perlu dioptimalkan; gunakan profiler untuk mendeteksi bagian yang lambat di
dalam program Anda dan perbaiki bagian ini.
• Gunakan kode yang telah dikompilasi jika memungkinkan, terutama jika melibatkan loop.
Kapan pun memungkinkan, gunakan fungsi dari paket yang dioptimalkan untuk komputasi
numerik alih-alih mengimplementasikan semuanya sendiri. Kode dalam paket ini seringkali
sangat dioptimalkan dan dikompilasi.
• Jika tidak, kompilasi sendiri kodenya. Jika Anda tidak dapat menggunakan paket yang
sudah ada, gunakan kompiler just-in-time atau implementasikan bagian paling lambat dari
kode Anda dalam bahasa tingkat rendah seperti C atau Fortran dan integrasikan ini dengan
basis kode Anda. Jika Anda mengambil langkah ke bahasa tingkat rendah (bahasa yang
lebih dekat dengan kode byte komputer universal), pelajari cara bekerja dengan pustaka
komputasi seperti LAPACK, BLAST, Intel MKL, dan ATLAS. Ini sangat dioptimalkan, dan sulit
untuk mencapai kinerja yang serupa dengannya.
• Hindari menarik data ke dalam memori. Saat Anda bekerja dengan data yang tidak sesuai
dengan memori Anda, hindari memasukkan semuanya ke dalam memori. Cara sederhana
untuk melakukan ini adalah dengan membaca data dalam potongan dan mem-parsing
Ilmu Data (Data Science) – Dr. Joseph Santoso
101
data dengan cepat. Ini tidak akan berfungsi pada setiap algoritme tetapi memungkinkan
penghitungan pada kumpulan data yang sangat besar.
• Gunakan generator untuk menghindari penyimpanan data perantara. Generator
membantu Anda mengembalikan data per observasi, bukan dalam batch. Dengan cara ini
Anda menghindari menyimpan hasil antara.
• Gunakan data sesedikit mungkin. Jika tidak ada algoritme skala besar yang tersedia dan
Anda tidak ingin mengimplementasikan sendiri teknik seperti itu, Anda masih dapat
melatih data Anda hanya pada sampel data asli.
• Gunakan keterampilan matematika Anda untuk menyederhanakan perhitungan sebanyak
mungkin. Ambil persamaan berikut, misalnya: (a + b) 2 = a2 + 2ab + b2. Ruas kiri akan
dihitung lebih cepat daripada ruas kanan persamaan; bahkan untuk contoh sepele ini, bisa
membuat perbedaan ketika berbicara tentang potongan data yang besar.
Daftar berikut dan gambar 4.10 menunjukkan apa yang terjadi ketika Anda mencoba
membaca dalam 1 file dari 120 dan membuat matriks normal seperti yang diharapkan oleh
sebagian besar algoritme. Metode todense() mengubah data dari format file khusus menjadi
matriks normal di mana setiap entri berisi nilai.
Gambar 4.10 Kesalahan memori saat mencoba mengambil kumpulan data besar ke dalam
memori
Kami mendapatkan kesalahan kehabisan memori. Artinya, kecuali Anda menjalankan kode ini
di mesin besar. Setelah beberapa trik, Anda tidak akan lagi mengalami masalah memori ini
dan akan mendeteksi 97% situs berbahaya.
Alat Dan Teknik
Kami mengalami kesalahan memori saat memuat satu file—masih 119 lagi.
Untungnya, kami memiliki beberapa trik di lengan baju kami. Mari kita coba teknik ini selama
studi kasus:
• Gunakan representasi data yang jarang.
• Beri makan data terkompresi algoritme alih-alih data mentah.
• Gunakan algoritme online untuk membuat prediksi.
Kami akan membahas lebih dalam setiap "trik" saat kami menggunakannya. Sekarang kita
memiliki data kita secara lokal, mari kita akses. Langkah 3 dari proses ilmu data, penyiapan
dan pembersihan data, tidak diperlukan dalam kasus ini karena URL telah dibersihkan
sebelumnya. Namun, kami membutuhkan suatu bentuk eksplorasi sebelum melepaskan
algoritme pembelajaran kami.
4.4.3 Langkah 4: Eksplorasi data
Untuk melihat apakah kita bahkan dapat menerapkan trik pertama kita (representasi
jarang), kita perlu mencari tahu apakah data memang mengandung banyak angka nol. Kita
dapat memeriksa ini dengan potongan kode berikut:
Ilmu Data (Data Science) – Dr. Joseph Santoso
103
Data yang mengandung sedikit informasi dibandingkan dengan nol disebut data jarang. Ini
dapat disimpan dengan lebih ringkas jika Anda menyimpan data sebagai [(0,0,1),(4,4,1)] alih-
alih
Salah satu format file yang menerapkan ini adalah SVMLight, dan itulah alasan kami
mengunduh data dalam format ini. Kami belum selesai, karena kami perlu merasakan dimensi
dalam data. Untuk mendapatkan informasi ini kita sudah perlu menjaga agar data tetap
terkompresi sambil memeriksa jumlah maksimum pengamatan dan variabel. Kita juga perlu
membaca data file demi file. Dengan cara ini Anda mengkonsumsi lebih sedikit memori. Trik
Ilmu Data (Data Science) – Dr. Joseph Santoso
104
kedua adalah memberi makan file terkompresi CPU. Dalam contoh kami, ini sudah dikemas
dalam format tar.gz. Anda membongkar file hanya saat Anda membutuhkannya, tanpa
menulisnya ke hard disk (bagian paling lambat dari komputer Anda). Untuk contoh kami,
ditampilkan dalam daftar 4.6, kami hanya akan bekerja pada 5 file pertama, tetapi jangan ragu
untuk menggunakan semuanya.
Bagian dari kode membutuhkan penjelasan tambahan. Dalam kode ini kita mengulang
file svm di dalam arsip tar. Kami membongkar file satu per satu untuk mengurangi memori
yang dibutuhkan. Karena file-file ini dalam format SVM, kami menggunakan helper,
functionload_svmlight_file() untuk memuat file tertentu. Kemudian kita dapat melihat berapa
banyak pengamatan dan variabel yang dimiliki file tersebut dengan memeriksa bentuk
kumpulan data yang dihasilkan. Berbekal informasi ini, kita dapat beralih ke pembuatan
model.
4.4.4 Langkah 5: Pembuatan model
Sekarang kita menyadari dimensi data kita, kita dapat menerapkan dua trik yang sama
(representasi renggang dari file terkompresi) dan menambahkan yang ketiga (menggunakan
algoritma online), dalam daftar berikut. Ayo temukan situs web berbahaya itu!
Kode dalam daftar sebelumnya terlihat cukup mirip dengan yang kita lakukan
sebelumnya, selain dari pengklasifikasi penurunan gradien stokastik SGDClassifier(). Di sini,
kami melatih algoritme secara iteratif dengan menampilkan pengamatan dalam satu file
dengan fungsi partial_fit() . Mengulangi hanya 5 file pertama di sini memberikan hasil yang
ditunjukkan pada tabel 4.1. Tabel menunjukkan tindakan diagnostik klasifikasi: presisi, recall,
skor F1, dan acceptance.
Ilmu Data (Data Science) – Dr. Joseph Santoso
105
Tabel 4.1 Klasifikasi masalah: Apakah sebuah website dapat dipercaya atau tidak?
presisi recall skor-f1 acceptance
-1 0,97 0,99 0,98 14045
1 0,97 0,94 0,96 5955
rata-rata/total 0,97 0,97 0,97 20000
Hanya 3% (1 - 0,97) dari situs jahat yang tidak terdeteksi (presisi), dan 6% (1 - 0,94)
situs yang terdeteksi salah dituduh (recall). Ini adalah hasil yang layak, jadi kami dapat
menyimpulkan bahwa metodologinya berhasil. Jika kami menjalankan kembali analisis,
hasilnya mungkin sedikit berbeda, karena algoritme dapat menyatu sedikit berbeda. Jika Anda
tidak keberatan menunggu beberapa saat, Anda dapat menggunakan kumpulan data lengkap.
Anda sekarang dapat menangani semua data tanpa masalah. Kami tidak akan memiliki langkah
keenam (presentasi atau otomatisasi) dalam studi kasus ini.
Sekarang mari kita lihat aplikasi kedua dari teknik kita; kali ini Anda akan membuat
sistem pemberi rekomendasi di dalam database. Untuk contoh sistem pemberi rekomendasi
yang terkenal, kunjungi situs web Amazon. Saat menjelajah, Anda akan segera dihadapkan
pada rekomendasi: “Orang yang membeli produk ini juga membeli…”
Perintah berikut yang dimasukkan ke dalam baris perintah Windows berfungsi untuk kami
(setelah mengaktifkan lingkungan Python):
Sekali lagi, jangan ragu untuk menggunakan perpustakaan SQLAlchemy jika itu adalah sesuatu
yang membuat Anda lebih nyaman.
• Kita juga membutuhkan library pandas python, tetapi seharusnya sudah terinstal
sekarang.
Dengan infrastruktur yang tersedia, mari selami beberapa tekniknya.
Teknik
Sistem pemberi rekomendasi sederhana akan mencari pelanggan yang telah menyewa
film serupa seperti yang Anda miliki dan kemudian menyarankan film yang telah ditonton
orang lain tetapi belum Anda tonton. Teknik ini disebut k-nearest neighbor dalam machine
learning.
Pelanggan yang berperilaku serupa dengan Anda belum tentu merupakan pelanggan
yang paling mirip. Anda akan menggunakan teknik untuk memastikan bahwa Anda dapat
menemukan pelanggan serupa (optimal lokal) tanpa jaminan bahwa Anda telah menemukan
pelanggan terbaik (optimal global). Sebuah teknik umum yang digunakan untuk memecahkan
ini disebut Hashing Sensitif Lokalitas.
Gagasan di balik Pencirian Sensitif-Lokal sederhana: Bangun fungsi yang memetakan
pelanggan serupa secara berdekatan (mereka dimasukkan ke dalam keranjang dengan label
yang sama) dan pastikan bahwa objek yang berbeda diletakkan di keranjang yang berbeda.
Inti dari ide ini adalah fungsi yang melakukan pemetaan. Fungsi ini disebut fungsi hash: fungsi
yang memetakan berbagai input ke output tetap. Fungsi hash paling sederhana
menggabungkan nilai dari beberapa kolom acak. Tidak masalah berapa banyak kolom (input
yang dapat diskalakan); itu membawanya kembali ke satu kolom (keluaran tetap).
Anda akan menyiapkan tiga fungsi hash untuk menemukan pelanggan serupa. Tiga
fungsi mengambil nilai dari tiga film:
• Fungsi pertama mengambil nilai film 10, 15, dan 28.
• Fungsi kedua mengambil nilai film 7, 18, dan 22.
• Fungsi terakhir mengambil nilai film 16, 19, dan 30.
Ini akan memastikan bahwa pelanggan yang berada di keranjang yang sama berbagi
setidaknya beberapa film. Tetapi pelanggan dalam satu keranjang mungkin masih berbeda
pada film yang tidak termasuk dalam fungsi hashing. Untuk mengatasi ini, Anda masih perlu
membandingkan pelanggan di dalam keranjang satu sama lain. Untuk ini, Anda perlu
membuat ukuran jarak baru. Jarak yang akan Anda gunakan untuk membandingkan pelanggan
disebut jarak hamming. Jarak hamming digunakan untuk menghitung berapa banyak dua
string berbeda. Jarak didefinisikan sebagai jumlah karakter yang berbeda dalam sebuah string.
Tabel 4.2 menawarkan beberapa contoh jarak hamming.
Membandingkan banyak kolom adalah operasi yang mahal, jadi Anda memerlukan trik
untuk mempercepatnya. Karena kolom berisi variabel biner (0 atau 1) untuk menunjukkan
apakah pelanggan telah membeli film atau tidak, Anda dapat menggabungkan informasi
tersebut sehingga informasi yang sama dimuat di kolom baru. Tabel 4.3 menunjukkan variabel
“film” yang berisi informasi sebanyak semua kolom film digabungkan.
Tabel 4.3 Menggabungkan informasi dari berbagai kolom ke dalam kolom film. Ini juga
cara kerja DNA: semua informasi dalam rangkaian panjang.
Kolom 1 Film 1 Film 2 Film 3 Film 4 Film
Pelanggan 1 1 0 1 1 1011
Pelanggan 2 0 0 0 1 0001
Ini memungkinkan Anda untuk menghitung jarak hamming jauh lebih efisien. Dengan
menangani operator ini sedikit, Anda dapat mengeksploitasi operator XOR. Hasil dari operator
XOR (^) adalah sebagai berikut:
Dengan ini, proses untuk menemukan pelanggan serupa menjadi sangat sederhana. Mari kita
lihat dulu dalam kode semu:
Prapemrosesan:
1. Tentukan fungsi p (misalnya, 3) yang memilih entri k (misalnya, 3) dari vektor film. Disini
kita mengambil 3 fungsi (p) yang masing-masing mengambil 3 (k) film.
2. Terapkan fungsi ini ke setiap titik dan simpan di kolom terpisah. (Dalam literatur setiap
fungsi disebut fungsi hash dan setiap kolom akan menyimpan ember.)
Titik pertanyaan q:
1. Terapkan fungsi p yang sama ke titik (pengamatan) q yang ingin Anda kueri.
2. Ambil untuk setiap fungsi titik-titik yang sesuai dengan hasil di keranjang yang sesuai.
Hentikan ketika Anda telah mengambil semua poin dalam keranjang atau mencapai 2p
poin (misalnya 10 jika Anda memiliki 5 fungsi).
3. Hitung jarak untuk setiap titik dan kembalikan titik dengan jarak minimum.
Mari kita lihat implementasi sebenarnya di Python untuk memperjelas semuanya.
4.5.2 Langkah 1: Pertanyaan penelitian
Katakanlah Anda bekerja di toko video dan manajer bertanya kepada Anda apakah
mungkin menggunakan informasi tentang film yang disewa orang untuk memprediksi film lain
yang mungkin mereka sukai. Bos Anda telah menyimpan data dalam database MySQL, dan
terserah Anda untuk melakukan analisis. Yang dia maksud adalah sistem pemberi
rekomendasi, sistem otomatis yang mempelajari preferensi orang dan merekomendasikan
film dan produk lain yang belum dicoba oleh pelanggan. Tujuan dari studi kasus kami adalah
untuk menciptakan sistem rekomendasi yang ramah memori. Kami akan mencapai ini
menggunakan database dan beberapa trik tambahan. Kami akan membuat sendiri data untuk
studi kasus ini sehingga kami dapat melewati langkah pengambilan data dan langsung beralih
ke persiapan data. Dan setelah itu kita dapat melewatkan langkah eksplorasi data dan
langsung menuju ke pembuatan model.
4.5.3 Langkah 2: Persiapan data
Data yang dikumpulkan bos Anda ditunjukkan pada tabel 4.4. Kami akan membuat
data ini sendiri untuk kepentingan demonstrasi.
Tabel 4.4 Kutipan dari database klien dan film yang disewa pelanggan
Pelanggan Film 1 Film 2 Film 3 … Film 32
Jack Dani 1 0 0 1
Wilhelmson 1 1 0 1
…
Jane Dane 0 0 1 0
Xi liu 0 0 0 1
Eros Mazo 1 1 0 1
…
Untuk setiap pelanggan, Anda mendapatkan indikasi apakah mereka pernah menyewa
film tersebut sebelumnya (1) atau tidak (0). Mari kita lihat apa lagi yang Anda perlukan agar
Anda dapat memberi atasan Anda sistem pemberi rekomendasi yang diinginkannya.
Pertama mari kita hubungkan Python ke MySQL untuk membuat data kita. Buat
koneksi ke MySQL menggunakan nama pengguna dan kata sandi Anda. Dalam daftar berikut
kami menggunakan database yang disebut "test". Ganti nama pengguna, kata sandi, dan
database dengan nilai yang sesuai untuk pengaturan Anda dan ambil koneksi dan kursor.
Kursor database adalah struktur kontrol yang mengingat di mana Anda saat ini berada di
database.
Kami membuat 100 pelanggan dan menetapkan secara acak apakah mereka menonton
film tertentu atau tidak, dan kami memiliki total 32 film. Data pertama kali dibuat dalam
kerangka data Pandas tetapi kemudian diubah menjadi kode SQL. Catatan: Anda mungkin
menemukan peringatan saat menjalankan kode ini. Peringatan menyatakan: Rasa "mysql"
dengan koneksi DBAPI sudah tidak digunakan lagi dan akan dihapus di versi mendatang.
MySQL akan didukung lebih lanjut dengan mesin SQLAlchemy. Jangan ragu untuk beralih ke
SQLAlchemy atau perpustakaan lain. Kami akan menggunakan SQLAlchemy di bab lain, tetapi
menggunakan MySQLdb di sini untuk memperluas contoh.
Untuk mengkueri database secara efisien nanti, kami memerlukan persiapan data
tambahan, termasuk hal-hal berikut:
• Membuat string bit. String bit adalah versi terkompresi dari konten kolom (nilai 0 dan 1).
Pertama, nilai biner ini digabungkan; kemudian string bit yang dihasilkan ditafsir kan
kembali sebagai angka. Ini mungkin terdengar abstrak sekarang tetapi akan menjadi lebih
jelas dalam kodenya.
• Mendefinisikan fungsi hash. Fungsi hash sebenarnya akan membuat string bit.
• Menambahkan indeks ke tabel, untuk mempercepat pengambilan data.
Membuat Bit String
Sekarang Anda membuat tabel perantara yang cocok untuk kueri, menerapkan fungsi
hash, dan merepresentasikan urutan bit sebagai angka desimal. Akhirnya, Anda bisa
menempatkannya di sebuah meja. Pertama, Anda perlu membuat string bit. Anda perlu
mengonversi string "11111111" menjadi nilai biner atau numerik agar fungsi hamming
berfungsi. Kami memilih representasi numerik, seperti yang ditunjukkan pada daftar
berikutnya.
Langkah selanjutnya adalah membuat fungsi hash, karena mereka akan memungkinkan kita
mengambil sampel data yang akan kita gunakan untuk menentukan apakah dua pelanggan
memiliki perilaku yang sama.
Gambar 4.11 2 informasi pelanggan pertama pada semua 32 film setelah string bit ke
konversi numerik
Fungsi hash menggabungkan nilai dari film yang berbeda menjadi nilai biner seperti
yang terjadi sebelumnya di fungsi createNum(), hanya saja kali ini kami tidak mengonversi ke
angka dan kami hanya mengambil 3 film, bukan 8 sebagai masukan. Fungsi penegasan
menunjukkan bagaimana menggabungkan 3 nilai untuk setiap pengamatan. Ketika klien telah
membeli film 10 tetapi bukan film 15 dan 28, itu akan mengembalikan b'100' untuk keranjang
1. Ketika klien membeli film 7 dan 18, tetapi bukan 22, itu akan mengembalikan b'110' untuk
ember 2. Jika kita melihat hasil saat ini kita melihat 4 variabel yang kita buat sebelumnya (bit1,
bit2, bit3, bit4) dari 9 film yang dipilih sendiri (gambar 4.12).
Gambar 4.12 Informasi dari bit string compression dan 9 sample film
Trik terakhir yang akan kami terapkan adalah mengindeks tabel pelanggan sehingga
pencarian terjadi lebih cepat.
Menambahkan Indeks Ke Tabel
Sekarang Anda harus menambahkan indeks untuk mempercepat pengambilan sesuai
kebutuhan dalam sistem real-time. Ini ditunjukkan dalam daftar berikutnya.
Ilmu Data (Data Science) – Dr. Joseph Santoso
112
Dengan data yang diindeks, kita sekarang dapat beralih ke "bagian pembuatan model".
Dalam studi kasus ini tidak ada pembelajaran mesin aktual atau model statistik yang
diterapkan. Sebagai gantinya, kami akan menggunakan teknik yang jauh lebih sederhana:
perhitungan jarak string. Dua senar dapat dibandingkan dengan menggunakan jarak hamming
seperti yang dijelaskan sebelumnya dalam pendahuluan teori studi kasus.
4.5.4 Langkah 5: Pembuatan model
Untuk menggunakan jarak hamming dalam database, kita perlu mendefinisikannya
sebagai fungsi.
Menciptakan Fungsi Jarak Hamming
Kami menerapkan ini sebagai fungsi yang ditentukan pengguna. Fungsi ini dapat
menghitung jarak untuk bilangan bulat 32-bit (sebenarnya 4*8), seperti yang ditunjukkan pada
daftar berikut.
Jika semuanya baik-baik saja, output dari kode ini seharusnya 3. Sekarang setelah kita
memiliki fungsi hamming distance, kita dapat menggunakannya untuk menemukan pelanggan
yang mirip dengan pelanggan tertentu, dan inilah yang kita ingin aplikasi kita lakukan. Mari
beralih ke bagian terakhir: memanfaatkan penyiapan kami sebagai semacam aplikasi.
Ilmu Data (Data Science) – Dr. Joseph Santoso
113
Tabel 4.5 menunjukkan pelanggan 2 dan 97 paling mirip dengan pelanggan 27. Jangan
lupa bahwa data dihasilkan secara acak, sehingga siapa pun yang mereplikasi contoh ini
mungkin mendapatkan hasil yang berbeda. Sekarang kami akhirnya dapat memilih film untuk
ditonton pelanggan 27.
pemeriksaan yang baik untuk melihat apakah fungsi jarak Anda bekerja dengan benar.
Meskipun ini mungkin bukan pelanggan terdekat, ini cocok dengan pelanggan 27. Dengan
menggunakan indeks yang di-hash, Anda mendapatkan kecepatan luar biasa saat menanyakan
database besar.
Tabel 4.6 menunjukkan bahwa Anda dapat merekomendasikan film 12, 15, atau 31
berdasarkan perilaku pelanggan 2.
Tabel 4.6 Film dari pelanggan 2 dapat dijadikan saran untuk pelanggan 27.
0 1 2
Cust_id 2 27 97
Film3 0 1 1
Film9 0 1 1
Film11 0 1 1
Film12 1 0 0
Film15 1 0 0
Film16 0 1 1
Film25 0 1 1
Film31 1 0 0
Pecandu film kami yang bahagia sekarang dapat memanjakan dirinya dengan film baru,
yang disesuaikan dengan kesukaannya. Di bab berikutnya kita akan melihat data yang lebih
besar dan melihat bagaimana kita dapat mengatasinya dengan menggunakan Horton Sandbo x
yang kita unduh di bab 1.
4.6 RINGKASAN
Bab ini membahas topik-topik berikut:
• Masalah utama yang dapat Anda hadapi saat bekerja dengan kumpulan data besar adalah
sebagai berikut:
– Tidak cukup memori
– Program yang berjalan lama
– Sumber daya yang membentuk kemacetan dan menyebabkan masalah kecepatan
• Ada tiga jenis solusi utama untuk masalah ini:
Ilmu Data (Data Science) – Dr. Joseph Santoso
115
BAB 5
MEMULAI BIG DATA
Ingatlah bahwa kita hanya akan menggores permukaan baik praktik maupun teori
dalam bab pengantar tentang teknologi data besar ini. Studi kasus akan menyentuh tiga
teknologi big data (Hadoop, Spark, dan Hive), tetapi hanya untuk manipulasi data, bukan
pembuatan model. Terserah Anda untuk menggabungkan teknologi data besar yang Anda
lihat di sini dengan teknik pembuatan model yang telah kita singgung di bab sebelumnya.
Gambar 5.2 Contoh dari ekosistem aplikasi yang muncul di sekitar Hadoop Core
Framework
Anda dapat menggunakan alat populer Impala untuk mengkueri data Hive hingga 100
kali lebih cepat. Kami tidak akan membahas Impala dalam buku ini, tetapi informasi lebih
lanjut dapat ditemukan di http:// impala.io/. Kita sudah memiliki pengantar singkat tentang
MapReduce di bab 4, tetapi mari kita uraikan sedikit di sini karena ini adalah bagian yang
sangat penting dari Hadoop.
Mapreduce: Bagaimana Hadoop Mencapai Parallelisme
Hadoop menggunakan metode pemrograman yang disebut MapReduce untuk
mencapai paralelisme. Algoritma MapReduce membagi data, memprosesnya secara paralel,
dan kemudian mengurutkan, menggabungkan, dan menggabungkan kembali hasilnya.
Namun, algoritme MapReduce tidak cocok untuk analisis interaktif atau program iteratif
karena algoritme tersebut menulis data ke disk di antara setiap langkah komputasi. Ini mahal
saat bekerja dengan kumpulan data besar.
Map Reduce
File 1 Hijau: 1
Gambar 5.3 Contoh aliran MapReduce yang disederhanakan untuk menghitung warna
dalam teks masukan
Mari kita lihat bagaimana MapReduce bekerja pada contoh fiktif kecil. Anda adalah
direktur sebuah perusahaan mainan. Setiap mainan memiliki dua warna, dan ketika klien
memesan mainan dari halaman web, halaman web menempatkan file pesanan di Hadoop
dengan warna mainan tersebut. Tugas Anda adalah mencari tahu berapa banyak unit warna
yang perlu Anda siapkan. Anda akan menggunakan algoritme gaya MapReduce untuk
menghitung warna. Pertama mari kita lihat versi yang disederhanakan pada gambar 5.3.
Seperti namanya, prosesnya kira-kira bermuara pada dua fase besar:
• Fase pemetaan—Dokumen dibagi menjadi pasangan kunci-nilai. Sampai kami mengurangi,
kami dapat memiliki banyak duplikat.
• Fase pengurangan—Ini tidak berbeda dengan SQL "group by." Kejadian unik yang berbeda
dikelompokkan bersama, dan bergantung pada fungsi pereduksi, hasil yang berbeda dapat
dibuat. Di sini kami menginginkan hitungan per warna, jadi itulah yang mengembalikan
fungsi pengurangan.
Pada kenyataannya ini sedikit lebih rumit dari ini.
Gambar 5.4 Contoh aliran MapReduce untuk menghitung warna pada teks masukan
Seluruh proses dijelaskan dalam enam langkah berikut dan digambarkan dalam gambar 5.4.
1. Membaca file masukan.
2. Melewati setiap baris ke pekerjaan mapper.
3. Pekerjaan mapper mem-parsing warna (kunci) dari file dan mengeluarkan file untuk setiap
warna dengan berapa kali ditemukan (nilai). Atau lebih tepatnya dikatakan, itu
memetakan kunci (warna) ke nilai (jumlah kejadian).
4. Kunci diacak dan diurutkan untuk memfasilitasi agregasi.
5. Fase pengurangan menjumlahkan jumlah kemunculan per warna dan menghasilkan satu
file per kunci dengan jumlah total kemunculan untuk setiap warna.
6. Kunci dikumpulkan dalam file keluaran.
CATATAN Meskipun Hadoop membuat bekerja dengan data besar menjadi mudah,
menyiapkan klaster kerja yang baik masih tidak sepele, tetapi manajer klaster seperti Apache
Mesos meringankan beban tersebut. Pada kenyataannya, banyak perusahaan (menengah)
Ilmu Data (Data Science) – Dr. Joseph Santoso
120
tidak memiliki kompetensi untuk memelihara instalasi Hadoop yang sehat. Inilah mengapa
kami akan bekerja dengan Hortonworks Sandbox, ekosistem Hadoop yang telah terinstal dan
terkonfigurasi. Instruksi instalasi dapat ditemukan di bagian 1.5: Contoh kerja pengantar
Hadoop. Sekarang, dengan mengingat cara kerja Hadoop, mari kita lihat Spark.
5.1.2 Spark: mengganti MapReduce untuk kinerja yang lebih baik
Ilmuwan data sering melakukan analisis interaktif dan mengandalkan algoritme yang
secara inheren berulang; perlu beberapa saat hingga suatu algoritme menyatu dengan solusi.
Karena ini adalah titik lemah dari framework MapReduce, kami akan memperkenalkan Spark
Framework untuk mengatasinya. Spark meningkatkan kinerja pada tugas-tugas tersebut
dengan urutan besarnya.
Apa Itu Spark?
Spark adalah kerangka kerja komputasi cluster yang mirip dengan MapReduce. Spark,
bagaimanapun, tidak menangani penyimpanan file pada sistem file (terdistribusi) itu sendiri,
juga tidak menangani manajemen sumber daya. Untuk ini bergantung pada sistem seperti
Hadoop File System, YARN, atau Apache Mesos. Hadoop dan Spark dengan demikian
merupakan sistem yang saling melengkapi. Untuk pengujian dan pengembangan, Anda
bahkan dapat menjalankan Spark di sistem lokal Anda.
Bagaimana Spark Memecahkan Masalah Mapreduce?
Meskipun kami sedikit menyederhanakan banyak hal demi kejelasan, Spark membuat
semacam memori RAM bersama di antara komputer di klaster Anda. Hal ini memungkinkan
pekerja yang berbeda untuk berbagi variabel (dan statusnya) dan dengan demikian
menghilangkan kebutuhan untuk menulis hasil perantara ke disk. Lebih teknis dan lebih benar
jika Anda menyukai hal itu: Spark menggunakan Resilient Distributed Datasets (RDD), yang
merupakan abstraksi memori terdistribusi yang memungkinkan pemrogram melakukan
perhitungan dalam memori pada kluster besar dengan cara yang toleran terhadap kesalahan.1
Karena ini merupakan -sistem memori, ini menghindari operasi disk yang mahal.
Komponen Berbeda Dari Ekosistem Spark
Spark core menyediakan lingkungan NoSQL yang cocok untuk analisis interaktif dan
eksplorasi. Spark dapat dijalankan dalam mode batch dan interaktif dan mendukung Python.
Gambar 5.5 Framework Spark digunakan dalam kombinasi dengan framework Hadoop
Ilmu Data (Data Science) – Dr. Joseph Santoso
121
Spark memiliki empat komponen besar lainnya, seperti tercantum di bawah ini dan
digambarkan dalam gambar 5.5.
1. Spark streaming adalah alat untuk analisis waktu nyata.
2. Spark SQL menyediakan antarmuka SQL untuk bekerja dengan Spark.
3. MLLib adalah alat untuk pembelajaran mesin di dalam kerangka kerja Spark.
4. GraphX adalah basis data grafik untuk Spark. Kami akan masuk lebih dalam ke database
grafik di bab 7.
Sekarang mari selami data pinjaman menggunakan Hadoop, Hive, dan Spark.
Di baris perintah Sandbox ada beberapa hal yang masih perlu Anda lakukan agar semua
ini berfungsi, jadi sambungkan ke baris perintah. Anda dapat melakukan ini menggunakan
program seperti Putty. Jika Anda tidak terbiasa dengan PuTTY, PuTTY menawarkan antarmuka
baris perintah ke server dan dapat diunduh secara gratis di
Ilmu Data (Data Science) – Dr. Joseph Santoso
122
swalayan sering diterapkan di organisasi berbasis data yang tidak memiliki analis untuk
cadangan. Siapa pun di organisasi dapat melakukan pemotongan dan pemotongan sederhana
sendiri sambil meninggalkan analitik yang lebih rumit untuk ilmuwan data.
Kami dapat melakukan studi kasus ini karena Lending Club menyediakan data anonim
tentang pinjaman yang ada. Di akhir studi kasus ini, Anda akan membuat laporan seperti
gambar 5.7.
Gambar 5.7 Hasil akhir dari latihan ini adalah dasbor penjelasan untuk membandingkan
peluang pinjaman dengan peluang serupa.
Namun, hal pertama yang pertama; mari kita dapatkan data diri kita sendiri.
5.2.2 Langkah 2: Pengambilan data
Saatnya bekerja dengan Sistem File Hadoop (atau hdfs). Pertama kami akan mengirim
perintah melalui baris perintah dan kemudian melalui bahasa skrip Python dengan bantuan
paket pywebhdfs. Sistem file Hadoop mirip dengan sistem file normal, kecuali file dan folder
disimpan di beberapa server dan Anda tidak tahu alamat fisik setiap file. Ini tidak asing jika
Anda pernah bekerja dengan alat seperti Dropbox atau Google Drive. File yang Anda masukkan
ke drive ini disimpan di suatu tempat di server tanpa Anda tahu persis di server mana. Seperti
pada sistem file normal, Anda dapat membuat, mengganti nama, dan menghapus file dan
folder.
Menggunakan Baris Perintah Untuk Berinteraksi Dengan Sistem File Hadoop
Mari kita ambil dulu daftar direktori dan file yang ada saat ini di folder root Hadoop
menggunakan baris perintah. Ketik perintah hadoop fs –ls / di Putty untuk mencapai ini.
Pastikan Anda menghidupkan mesin virtual Anda dengan Hortonworks Sandbox sebelum
mencoba koneksi. Di Putty Anda kemudian harus terhubung ke 127.0.0.1:2222, seperti yang
ditunjukkan sebelumnya pada gambar 5.6. Output dari perintah Hadoop ditunjukkan pada
gambar 5.8. Anda juga dapat menambahkan argumen seperti hadoop fs –ls –R / untuk
mendapatkan daftar rekursif dari semua file dan subdirektori.
Gambar 5.8 Output dari perintah Hadoop list: hadoop fs –ls /. Folder root Hadoop
Kami sekarang akan membuat direktori baru "bab 5" di hdfs untuk digunakan selama bab ini.
Perintah berikut akan membuat direktori baru dan memberi semua orang akses ke folder:
Anda mungkin memperhatikan pola di sini. Perintah Hadoop sangat mirip dengan perintah
sistem file lokal kami (gaya POSIX) tetapi mulai dengan Hadoop fs dan beri tanda hubung -
sebelum setiap perintah. Tabel 5.1 memberikan ikhtisar tentang perintah sistem file populer
di Hadoop dan mitra perintah sistem file lokalnya.
Ada dua perintah khusus yang sering Anda gunakan. Ini adalah
• Unggah file dari sistem file lokal ke sistem file terdistribusi (hadoop fs –put LOCALURI
REMOTEURI).
• Unduh file dari sistem file terdistribusi ke sistem file lokal (hadoop –get
REMOTEURI).
Mari kita perjelas ini dengan sebuah contoh. Misalkan Anda memiliki file .CSV di mesin
virtual Linux tempat Anda terhubung ke kluster Linux Hadoop. Anda ingin menyalin file .CSV
dari mesin virtual Linux Anda ke cluster hdfs. Gunakan perintah hadoop –put mycsv.csv /data.
Menggunakan Putty kita dapat memulai sesi Python di Horton Sandbox untuk
mengambil data kita menggunakan skrip Python. Keluarkan perintah "pyspark" di baris
perintah untuk memulai sesi. Jika semuanya baik-baik saja, Anda akan melihat layar selamat
datang yang ditunjukkan pada gambar 5.9.
Gambar 5.9 Layar pembuka Spark untuk penggunaan interaktif dengan Python
Sekarang kami menggunakan kode Python untuk mengambil data untuk kami, seperti
yang ditunjukkan pada daftar berikut.
Kami mengunduh file "LoanStats3d.csv.zip" dari situs web Lending Club di https://
resources.lendingclub.com/LoanStats3d.csv.zip dan mengekstraknya. Kami menggunakan
metode dari paket request, zipfile, dan stringio Python untuk mengunduh data, membuat file
virtual, dan mengekstraknya. Ini hanya satu file; jika Anda menginginkan semua data mereka,
Anda dapat membuat lingkaran, tetapi untuk tujuan demonstrasi ini akan berhasil. Seperti
yang kami sebutkan sebelumnya, bagian penting dari studi kasus ini adalah persiapan data
dengan teknologi big data. Namun, sebelum kita dapat melakukannya, kita perlu
meletakkannya di sistem file Hadoop. PyWebHdfs adalah paket yang memungkinkan Anda
berinteraksi dengan sistem file Hadoop dari Python. Itu menerjemahkan dan meneruskan
perintah Anda untuk menghentikan panggilan untuk antarmuka webhdfs. Ini berguna karena
Anda dapat menggunakan bahasa skrip favorit Anda untuk mengotomatiskan tugas, seperti
yang diperlihatkan dalam daftar berikut.
Kami telah mengunduh dan membuka ritsleting file dalam daftar 5.1; sekarang di
daftar 5.2 kami membuat sub-seleksi data menggunakan Panda dan menyimpannya secara
lokal. Kemudian kami membuat direktori di Hadoop dan mentransfer file lokal ke Hadoop.
Data yang diunduh dalam format .CSV dan karena agak kecil, kita dapat menggunakan pustaka
Pandas untuk menghapus baris pertama dan dua baris terakhir dari file. Ini berisi komentar
dan hanya akan membuat bekerja dengan file ini menjadi rumit di lingkungan Hadoop. Baris
pertama kode kita mengimpor paket Pandas, sedangkan baris kedua mem-parsing file ke
dalam memori dan menghapus dua baris data pertama dan terakhir. Baris kode ketiga
menyimpan data ke sistem file lokal untuk digunakan nanti dan pemeriksaan mudah.
Sebelum melanjutkan, kita dapat memeriksa file kita menggunakan baris kode berikut:
Konsol PySpark akan memberi tahu kami bahwa file kami aman dan baik di sistem Hadoop,
seperti yang ditunjukkan pada gambar 5.10.
Dengan file yang sudah siap dan menunggu kita di Hadoop, kita dapat beralih ke
persiapan data menggunakan Spark, karena tidak cukup bersih untuk langsung disimpan di
Hive.
5.2.3 Langkah 3: Persiapan data
Sekarang setelah kami mengunduh data untuk dianalisis, kami akan menggunakan
Spark untuk membersihkan data sebelum menyimpannya di Hive.
Dengan pengaturan lingkungan, kami siap untuk mulai mem-parsing file .CSV.
Perhatikan betapa miripnya ini dengan pendekatan pemrograman fungsional. Bagi mereka
yang belum pernah menjumpainya, Anda dapat dengan naif membaca lambda r:r.split(',')
sebagai "untuk setiap input r (baris dalam kasus ini), pisahkan input r ini saat menemukan
koma." Seperti dalam kasus ini, “untuk setiap masukan” berarti “untuk setiap baris”, tetapi
Anda juga dapat membacanya sebagai “pisahkan setiap baris dengan koma”. Sintaks mirip
fungsional ini adalah salah satu karakteristik favorit saya dari Spark.
Langkah 3: Pisahkan baris tajuk dari data
Untuk memisahkan header dari data, kita membaca di baris pertama dan
mempertahankan setiap baris yang tidak mirip dengan baris header:
Mengikuti praktik terbaik dalam data besar, kami tidak perlu melakukan langkah ini karena
baris pertama sudah disimpan dalam file terpisah. Pada kenyataannya, file .CSV sering berisi
baris header dan Anda harus melakukan operasi serupa sebelum dapat mulai membersihkan
data.
Langkah 4: Bersihkan data
Pada langkah ini kami melakukan pembersihan dasar untuk meningkatkan kualitas
data. Ini memungkinkan kami membuat laporan yang lebih baik. Setelah langkah kedua, data
kita terdiri dari array. Kami akan memperlakukan setiap masukan untuk fungsi lambda sebagai
larik sekarang dan mengembalikan larik. Untuk memudahkan tugas ini, kami membuat fungsi
pembantu yang membersihkan. Pembersihan kami terdiri dari memformat ulang input seperti
"10,4%" menjadi 0,104 dan menyandikan setiap string sebagai utf-8, serta mengganti garis
bawah dengan spasi dan menurunkan semua string. Baris kedua dari kode memanggil fungsi
helper kita untuk setiap baris dari array.
Data kami sekarang disiapkan untuk laporan, jadi kami perlu menyediakannya untuk alat
pelaporan kami. Hive sangat cocok untuk ini, karena banyak alat pelaporan yang dapat
terhubung dengannya. Mari kita lihat bagaimana melakukannya.
Simpan Data Di Hive
Untuk menyimpan data di Hive kita perlu menyelesaikan dua langkah:
1. Buat dan daftarkan metadata.
2. Jalankan pernyataan SQL untuk menyimpan data di Hive.
Di bagian ini, sekali lagi kita akan mengeksekusi potongan kode berikutnya di shell PySpark
kesayangan kita, seperti yang ditunjukkan pada daftar berikut.
Mari telusuri lebih dalam setiap langkah untuk klarifikasi lebih lanjut.
Dengan metadata yang siap, kami sekarang dapat memasukkan data ke Hive.
Dengan data yang disimpan di Hive, kami dapat menghubungkan alat visualisasi kami ke sana.
diarahkan ke halaman yang berisi beberapa video informasi tentang cara memasang dan
bekerja dengan Qlik Sense. Disarankan untuk menonton ini terlebih dahulu.
Kami menggunakan konektor Hive ODBC untuk membaca data dari Hive dan
membuatnya tersedia untuk Qlik. Tersedia tutorial pemasangan konektor ODBC di Qlik. Untuk
sistem operasi utama, ini dapat ditemukan di http://hortonworks.com/hdp/addons/.
CATATAN Di Windows, ini mungkin tidak berfungsi di luar kotak. Setelah Anda menginstal
ODBC, pastikan untuk memeriksa manajer ODBC Windows Anda (CTRL+F dan cari ODBC). Di
manajer, buka "System-DSN" dan pilih "Sample Hive Hortonworks DSN". Pastikan pengaturan
Anda sudah benar (seperti yang ditunjukkan pada gambar 5.11) atau Qlik tidak akan
terhubung ke Hortonworks Sandbox. Semoga Anda tidak lupa kata sandi Sandbox Anda;
seperti yang Anda lihat pada gambar 5.11, Anda membutuhkannya lagi.
Sekarang buka Qlik Sense. Jika diinstal di Windows, Anda seharusnya mendapatkan
opsi untuk menempatkan pintasan ke .exe di desktop Anda. Qlik bukan freeware; itu adalah
produk komersial dengan versi umpan untuk satu pelanggan, tetapi itu sudah cukup untuk
saat ini. Di bab terakhir kita akan membuat dasbor menggunakan pustaka JavaScript gratis.
Qlik dapat mengambil data langsung ke memori atau melakukan panggilan setiap kali
ke Hive. Kami telah memilih metode pertama karena bekerja lebih cepat.
Bagian ini memiliki tiga langkah:
1. Muat data di dalam Qlik dengan koneksi ODBC.
2. Buat laporan.
3. Jelajahi data.
Langkah 1: Muat data di Qlik
Saat Anda memulai Qlik Sense, Anda akan melihat layar selamat datang dengan laporan yang
ada (disebut aplikasi), seperti yang ditunjukkan pada gambar 5.12.
Untuk memulai aplikasi baru, klik tombol Buat aplikasi baru di sebelah kanan layar,
seperti yang ditunjukkan pada gambar 5.13. Ini membuka kotak dialog baru. Masukkan "bab
5" sebagai nama baru aplikasi kami.
Klik tombol Buka aplikasi dan layar baru akan meminta Anda untuk menambahkan
data ke aplikasi (gambar 5.15).
Klik tombol Tambah data dan pilih ODBC sebagai sumber data (gambar 5.16). Pada
layar berikutnya (gambar 5.17) pilih User DSN, Hortonworks, dan tentukan root sebagai
username dan hadoop sebagai password (atau yang baru Anda berikan saat login ke Sandbox
untuk pertama kali).
Gambar 5.15 Layar mulai menambahkan data muncul saat Anda membuka aplikasi baru.
CATATAN Opsi Hortonworks tidak muncul secara default. Anda perlu menginstal konektor
HDP 2.3 ODBC agar opsi ini muncul (seperti yang dinyatakan sebelumnya). Jika Anda belum
berhasil memasangnya saat ini, instruksi yang jelas untuk ini dapat ditemukan di
https://blogs.perficient.com/multi-shoring/ blog/2015/09/29/how-to-connect -hortonworks-
hive-from-qlikview-with-odbc-driver/.
Gambar 5.16 Pilih ODBC sebagai sumber data di layar Pilih sumber data
Gambar 5.17 Pilih Hortonworks pada User DSN dan tentukan username dan password.
Pilih Hive data, dan default as user pada layar berikutnya (gambar 5.18). Pilih mentah
sebagai Tabel untuk memilih dan memilih setiap kolom untuk diimpor; lalu klik tombol Muat
dan Selesai untuk menyelesaikan langkah ini. Setelah langkah ini, diperlukan beberapa detik
untuk memuat data di Qlik (gambar 5.19).
Sublangkah 1: Menambahkan filter pilihan ke laporan Hal pertama yang akan kita tambahkan
ke laporan adalah kotak pilihan yang menunjukkan mengapa setiap orang menginginkan
pinjaman. Untuk melakukannya, jatuhkan ukuran judul dari panel aset kiri pada panel laporan
dan berikan ukuran dan posisi yang nyaman (gambar 5.21). Klik pada tabel Bidang sehingga
Anda dapat menarik dan melepas bidang.
Gambar 5.21 Seret judul dari panel Bidang kiri ke panel laporan.
Ilmu Data (Data Science) – Dr. Joseph Santoso
137
Sublangkah 2: Menambahkan KPI ke laporan Bagan KPI menunjukkan jumlah agregat untuk
total populasi yang dipilih. Angka-angka seperti tingkat bunga rata-rata dan jumlah nasabah
ditunjukkan pada bagan ini (gambar 5.22). Menambahkan KPI ke laporan membutuhkan
empat langkah, seperti yang tercantum di bawah ini dan ditunjukkan pada gambar 5.23.
1. Pilih bagan—Pilih KPI sebagai bagan dan letakkan di layar laporan; mengubah ukuran dan
posisi sesuai keinginan Anda.
2. Tambahkan takaran—Klik tombol tambah takaran di dalam bagan dan pilih int_rate.
3. Pilih metode agregasi—Avg(int_rate).
4. Format grafik—Pada panel kanan, isikan suku bunga rata-rata sebagai Label.
Gambar 5.23 Empat langkah untuk menambahkan grafik KPI ke laporan Qlik
Secara total kami akan menambahkan empat bagan KPI ke laporan kami, jadi Anda harus
mengulangi langkah-langkah ini untuk KPI berikut:
Gambar 5.26 Contoh tabel pivot, menunjukkan tingkat bunga rata-rata yang dibayarkan
per jabatan/kombinasi tingkat risiko
Setelah mengubah ukuran dan memposisikan ulang, Anda akan mendapatkan hasil yang
serupa dengan gambar 5.28. Klik tombol Selesai di sebelah kiri dan Anda siap menjelajahi data.
Gambar 5.29 Ketika kita memilih direktur, kita dapat melihat bahwa mereka membayar
rata-rata 11,97% untuk pinjaman.
Gambar 5.30 Saat kami memilih artis, kami melihat bahwa mereka membayar tingkat
bunga rata-rata 13,32% untuk pinjaman.
Ilmu Data (Data Science) – Dr. Joseph Santoso
142
Kami akhirnya melakukannya: Kami membuat laporan yang diinginkan manajer kami,
dan dalam prosesnya kami membuka pintu bagi orang lain untuk membuat laporan mereka
sendiri menggunakan data ini. Langkah selanjutnya yang menarik untuk Anda renungkan
adalah menggunakan pengaturan ini untuk menemukan orang-orang yang cenderung gagal
membayar hutang mereka. Untuk ini, Anda dapat menggunakan kemampuan pembelajaran
Mesin Spark yang didorong oleh algoritme online seperti yang ditunjukkan di bab 4.
Dalam bab ini, kami mendapat pengantar langsung tentang kerangka kerja Hadoop dan
Spark. Kami membahas banyak hal, tetapi jujur saja, Python membuat bekerja dengan
teknologi data besar menjadi mudah. Di bab selanjutnya kita akan menggali lebih dalam dunia
database NoSQL dan berhubungan dengan lebih banyak teknologi big data.
5.3 RINGKASAN
Dalam bab ini Anda mempelajarinya
• Hadoop adalah kerangka kerja yang memungkinkan Anda menyimpan file dan
mendistribusikan perhitungan di banyak komputer.
• Hadoop menyembunyikan semua kerumitan bekerja dengan sekelompok komputer
untuk Anda.
• Ekosistem aplikasi mengelilingi Hadoop dan Spark, mulai dari basis data hingga kontrol
akses.
• Spark menambahkan struktur memori bersama ke Hadoop Framework yang lebih
sesuai untuk pekerjaan ilmu data.
• Dalam bab studi kasus kami menggunakan PySpark (library Python) untuk
berkomunikasi dengan Hive dan Spark dari Python. Kami menggunakan pustaka
Python pywebhdfs untuk bekerja dengan pustaka Hadoop, tetapi Anda juga dapat
melakukannya menggunakan baris perintah OS.
• Sangat mudah untuk menghubungkan alat BI seperti Qlik ke Hadoop.
BAB 6
DATABASE NOSQL
pengaruh (volume, variasi, kecepatan, dan terkadang kebenaran). Database grafik, misalnya,
dapat menangani data jaringan. Penggemar basis data grafik bahkan meng klaim bahwa
semuanya dapat dilihat sebagai jaringan. Misalnya, bagaimana Anda menyiapkan makan
malam? Dengan bahan-bahan. Bahan-bahan ini disatukan untuk membentuk hidangan dan
dapat digunakan bersama bahan lainnya untuk membentuk hidangan lainnya. Dilihat dari
sudut pandang ini, bahan dan resep merupakan bagian dari suatu jaringan. Tetapi resep dan
bahan juga dapat disimpan dalam basis data relasional atau penyimpanan dokumen Anda; itu
semua bagaimana Anda melihat masalahnya. Di sinilah letak kekuatan NoSQL: kemampuan
untuk melihat masalah dari sudut yang berbeda, membentuk struktur data ke kasus
penggunaan. Sebagai seorang ilmuwan data, tugas Anda adalah menemukan jawaban terbaik
untuk masalah apa pun. Meskipun terkadang hal ini masih lebih mudah dicapai dengan
menggunakan RDBMS, sering kali database NoSQL tertentu menawarkan pendekatan yang
lebih baik.
Apakah basis data relasional akan hilang di perusahaan dengan data besar karena
kebutuhan akan partisi? Tidak, platform NewSQL (jangan bingung dengan NoSQL) adalah
jawaban RDBMS untuk kebutuhan pengaturan cluster. Database NewSQL mengikuti model
relasional tetapi mampu dibagi menjadi cluster terdistribusi seperti database NoSQL. Ini bukan
akhir dari database relasional dan tentu saja bukan akhir dari SQL, kar ena platform seperti
Hive menerjemahkan SQL menjadi pekerjaan MapReduce untuk Hadoop. Selain itu, tidak
semua perusahaan membutuhkan big data; banyak yang melakukannya dengan baik dengan
database kecil dan database relasional tradisional sangat cocok untuk itu.
Jika Anda melihat peta pikiran data besar yang ditunjukkan pada gambar 6.1, Anda
akan melihat empat jenis database NoSQL. Keempat jenis ini adalah penyimpanan dokumen,
penyimpanan nilai kunci, basis data grafik, dan basis data kolom. Peta pikiran juga
menyertakan basis data relasional terpartisi NewSQL. Di masa depan, pemisahan besar antara
NoSQL dan NewSQL ini akan menjadi usang karena setiap jenis database akan memiliki
fokusnya sendiri, sambil menggabungkan elemen dari database NoSQL dan NewSQL. Garis
perlahan-lahan kabur karena tipe RDBMS mendapatkan fitur NoSQL seperti pengindeksan
berorientasi kolom yang terlihat di database kolom. Namun untuk saat ini, ini adalah cara yang
baik untuk menunjukkan bahwa database relasional lama telah melewati penyiapan node
tunggal, sementara tipe database lainnya muncul di bawah penyebut NoSQL. Mari kita lihat
apa yang dihadirkan NoSQL.
dokumen tanpa terlebih dahulu menyimpannya sebagai salinan. Jadi begitu seseorang
membukanya, versi terbaru sepenuhnya diisolasi dari siapa pun kecuali editor yang
mengunci dokumen tersebut.
• Ketahanan—Jika data telah masuk ke database, data tersebut akan bertahan secara
permanen. Kerusakan fisik pada hard disk akan menghancurkan rekaman, tetapi
pemadaman listrik dan kerusakan perangkat lunak seharusnya tidak terjadi.
ACID berlaku untuk semua database relasional dan database NoSQL tertentu, seperti database
grafik Neo4j. Kami akan membahas database grafik lebih lanjut nanti di bab ini dan di bab 7.
Untuk sebagian besar database NoSQL lainnya, prinsip lain berlaku: DASAR. Untuk memahami
BASE dan mengapa ini berlaku untuk sebagian besar database NoSQL, kita perlu melihat
Teorema CAP.
6.1.2 Teorema CAP: masalah dengan DB pada banyak node
Setelah database tersebar di server yang berbeda, sulit untuk mengikuti prinsip ACID
karena konsistensi yang dijanjikan ACID; Teorema CAP menunjukkan mengapa ini menjadi
masalah. Teorema CAP menyatakan bahwa database dapat berupa dua dari hal-hal berikut
tetapi tidak pernah ketiganya:
• Toleransi partisi—Basis data dapat menangani partisi jaringan atau kegagalan jaringan.
• Tersedia—Selama node yang Anda sambungkan aktif dan berjalan dan Anda dapat
menyambungkannya, node akan merespons, bahkan jika koneksi antara node database
yang berbeda terputus.
• Konsisten—Node mana pun yang Anda sambungkan, Anda akan selalu melihat data yang
sama persis.
Untuk database single-node, mudah untuk melihat bagaimana itu selalu tersedia dan
konsisten:
• Tersedia —Selama node aktif, itu tersedia. Itu semua janji ketersediaan CAP.
• Konsisten—Tidak ada node kedua, jadi tidak ada yang tidak konsisten.
Segalanya menjadi menarik setelah database dipartisi. Kemudian Anda perlu membuat pilihan
antara ketersediaan dan konsistensi, seperti yang ditunjukkan pada gambar 6.2.
Mari kita ambil contoh toko online dengan server di Eropa dan server di Amerika
Serikat, dengan satu pusat distribusi. Seorang Jerman bernama Fritz dan seorang Amerika
bernama Freddy sedang berbelanja pada waktu yang sama di toko online yang sama. Mereka
melihat sebuah barang dan hanya satu yang masih ada: meja kopi perunggu berbentuk gurita.
Terjadi bencana, dan komunikasi antara dua server lokal terputus untuk sementara. Jika Anda
adalah pemilik toko, Anda memiliki dua opsi:
• Ketersediaan—Anda mengizinkan server untuk terus melayani pelanggan, dan Anda
menyelesaikan semuanya setelahnya.
• Konsistensi—Anda menangguhkan semua penjualan sampai komunikasi terjalin kembali.
Dalam kasus pertama, Fritz dan Freddy sama-sama akan membeli meja kopi gurita, karena
nomor stok terakhir yang diketahui untuk kedua node adalah “satu” dan kedua node
diperbolehkan untuk menjualnya, seperti yang ditunjukkan pada gambar 6.3.
Jika meja kopi sulit didapat, Anda harus memberi tahu Fritz atau Freddy bahwa dia
tidak akan menerima mejanya pada tanggal pengiriman yang dijanjikan atau, lebih buruk lagi,
dia tidak akan pernah menerimanya. Sebagai pebisnis yang baik, Anda mungkin memberi
kompensasi kepada salah satu dari mereka dengan kupon diskon untuk pembelian
selanjutnya, dan semuanya mungkin baik-baik saja.
Gambar 6.2 Teorema CAP: saat mempartisi database, Anda harus memilih antara
ketersediaan dan konsistensi.
Gambar 6.3 Teorema CAP: jika node terputus, Anda dapat memilih untuk tetap tersedia,
tetapi data bisa menjadi tidak konsisten.
komunikasi node, Anda dapat menjual dua kali lipat jumlah yang diizinkan pada saat
komunikasi dibangun kembali. Dalam kasus seperti itu, mungkin lebih bijaksana untuk mencari
konsistensi dan mematikan node untuk sementara. Festival seperti Tomorrowland terjual
habis dalam beberapa jam pertama, jadi sedikit downtime tidak akan merugikan seperti harus
menarik ribuan tiket masuk.
Gambar 6.4 Teorema CAP: jika node terputus, Anda dapat memilih untuk tetap konsisten
dengan menghentikan akses ke database hingga koneksi dipulihkan
• Konsistensi akhir—Basis data akan menjadi konsisten dari waktu ke waktu. Dalam contoh
toko web, tabel dijual dua kali, yang mengakibatkan ketidakkonsistenan data. Setelah
koneksi antara masing-masing node dibangun kembali, mereka akan berkomunikasi dan
memutuskan bagaimana menyelesaikannya. Konflik ini dapat diselesaikan, misalnya,
berdasarkan siapa cepat dia dapat, atau dengan memilih pelanggan yang akan
menanggung biaya transportasi terendah. Database datang dengan perilaku default,
tetapi mengingat bahwa ada keputusan bisnis yang sebenarnya untuk dibuat di sini,
perilaku ini dapat ditimpa. Bahkan jika koneksi aktif dan berjalan, latensi dapat
menyebabkan node menjadi tidak konsisten. Seringkali, produk disimpan dalam keranjang
belanja online, tetapi memasukkan barang ke dalam keranjang tidak menguncinya untuk
pengguna lain. Jika Fritz mengalahkan Freddy di tombol checkout, akan ada masalah saat
Freddy pergi untuk check out. Ini dapat dengan mudah dijelaskan kepada pelanggan: dia
sudah terlambat. Tetapi bagaimana jika keduanya menekan tombol checkout pada
milidetik yang sama persis dan kedua penjualan terjadi?
Gambar 6.5 Sharding: setiap shard dapat berfungsi sebagai database mandiri, tetapi
mereka juga bekerja sama secara keseluruhan.
Contoh mewakili dua node, masing-masing berisi empat pecahan: dua pecahan utama
dan dua replika. Kegagalan satu node didukung oleh yang lain.
Gambar 6.6 ACID versus BASE: database relasional tradisional versus sebagian besar
database NoSQL. Nama-nama tersebut berasal dari konsep kimia skala pH. Nilai pH di
bawah 7 bersifat asam; lebih tinggi dari 7 adalah basa. Pada skala ini, air permukaan rata-
rata Anda berfluktuasi antara 6,5 dan 8,5.
Sebelum masuk ke database NoSQL yang berbeda, mari kita lihat database relasional
sehingga Anda memiliki sesuatu untuk dibandingkan. Dalam pemodelan data, banyak
pendekatan yang mungkin dilakukan. Database relasional umumnya berusaha menuju
normalisasi: memastikan setiap bagian data disimpan hanya sekali. Normalisasi menandai
pengaturan struktural mereka. Jika, misalnya, Anda ingin menyimpan data tentang seseorang
dan hobinya, Anda dapat melakukannya dengan dua tabel: satu tentang orang tersebut dan
satu lagi tentang hobinya. Seperti yang Anda lihat pada gambar 6.7, tabel tambahan
Gambar 6.8 Tata letak basis data berorientasi baris. Setiap entitas (orang) diwakili oleh
satu baris, tersebar di beberapa kolom.
Gambar 6.9 Pencarian berorientasi baris: dari atas ke bawah dan untuk setiap entri, semua
kolom dimasukkan ke dalam memori
Setiap kali Anda mencari sesuatu dalam database berorientasi baris, setiap baris dipindai,
terlepas dari kolom mana yang Anda perlukan. Katakanlah Anda hanya menginginkan daftar
ulang tahun di bulan September. Database akan memindai tabel dari atas ke bawah dan dari
kiri ke kanan, seperti yang ditunjukkan pada gambar 6.9, dan akhirnya mengembalikan daftar
ulang tahun.
Pengindeksan data pada kolom tertentu dapat secara signifikan meningkatkan
kecepatan pencarian, tetapi pengindeksan setiap kolom membawa biaya tambahan dan
database masih memindai semua kolom. Database kolom menyimpan setiap kolom secara
terpisah, memungkinkan pemindaian lebih cepat ketika hanya sejumlah kecil kolom yang
terlibat; lihat gambar 6.10.
Gambar 6.10 Database berorientasi kolom menyimpan setiap kolom secara terpisah
dengan nomor baris terkait. Setiap entitas (orang) dibagi menjadi beberapa tabel.
Tata letak ini terlihat sangat mirip dengan database berorientasi baris dengan indeks
pada setiap kolom. Indeks basis data adalah struktur data yang memungkinkan pencarian
cepat pada data dengan mengorbankan ruang penyimpanan dan penulisan tambahan
(pembaruan indeks). Indeks memetakan nomor baris ke data, sedangkan basis data kolom
memetakan data ke nomor baris; dengan cara itu menghitung menjadi lebih cepat, jadi mudah
untuk melihat berapa banyak orang yang menyukai panahan, misalnya. Menyimpan kolom
secara terpisah juga memungkinkan kompresi yang dioptimalkan karena hanya ada satu tipe
data per tabel.
Kapan Anda harus menggunakan database berorientasi baris dan kapan Anda harus
menggunakan database berorientasi kolom? Dalam database berorientasi kolom, mudah
untuk menambahkan kolom lain karena tidak ada kolom yang terpengaruh olehnya. Tetapi
menambahkan seluruh catatan membutuhkan penyesuaian semua tabel. Ini membuat basis
data berorientasi baris lebih disukai daripada basis data berorientasi kolom untuk pemrosesan
transaksi online (OLTP), karena ini menyiratkan penambahan atau perubahan catatan terus-
menerus. Basis data berorientasi kolom bersinar saat melakukan analitik dan pelaporan:
menjumlahkan nilai dan menghitung entri. Basis data berorientasi baris seringkali merupakan
basis data operasional pilihan untuk transaksi aktual (seperti penjualan). Pekerjaan batch
semalam memperbarui basis data berorientasi kolom, mendukung pencarian secepat kilat dan
agregasi menggunakan algoritme MapReduce untuk laporan. Contoh toko keluarga kolom
adalah Apache HBase, Cassandra Facebook, Hypertable, dan kakek dari toko kolom lebar,
Google BigTable.
Toko Nilai Kunci
Penyimpanan nilai kunci adalah yang paling kompleks dari database NoSQL. Mereka
adalah, seperti namanya, kumpulan pasangan kunci-nilai, seperti yang ditunjukkan pada
gambar 6.11, dan kesederhanaan ini menjadikannya tipe database NoSQL yang paling dapat
diskalakan, yang mampu menyimpan data dalam jumlah besar.
Gambar 6.11 Penyimpanan nilai kunci menyimpan semuanya sebagai kunci dan nilai.
Nilai dalam penyimpanan nilai kunci dapat berupa apa saja: string, angka, tetapi juga
kumpulan pasangan nilai kunci baru yang dikemas dalam objek. Gambar 6.12 menunjukkan
struktur nilai kunci yang sedikit lebih rumit. Contoh toko bernilai kunci adalah Redis,
Voldemort, Riak, dan Amazon's Dynamo.
Toko Dokumen
Penyimpanan dokumen adalah satu tingkat kerumitan dari penyimpanan nilai kunci:
penyimpanan dokumen mengasumsikan struktur dokumen tertentu yang dapat ditentukan
dengan skema. Penyimpanan dokumen tampak paling alami di antara jenis database NoSQL
karena dirancang untuk menyimpan dokumen sehari-hari sebagaimana adanya, dan
memungkinkan kueri dan penghitungan yang rumit pada bentuk data yang sering kali sudah
digabungkan ini. Cara hal-hal disimpan dalam database relasional masuk akal dari sudut
pandang normalisasi: semuanya harus disimpan hanya sekali dan terhubung melalui kunci
asing. Penyimpanan dokumen tidak terlalu peduli dengan normalisasi selama data berada
dalam struktur yang masuk akal. Model data relasional tidak selalu cocok dengan kasus bisnis
tertentu. Surat kabar atau majalah, misalnya, memuat artikel. Untuk menyimpan ini dalam
basis data relasional, Anda perlu memotongnya terlebih dahulu: teks artikel masuk ke satu
tabel, penulis dan semua informasi tentang penulis di tabel lain, dan komentar pada artikel
saat dipublikasikan di situs web masuk ke tabel lain. Seperti yang ditunjukkan pada gambar
6.13, sebuah artikel surat kabar juga dapat disimpan sebagai satu kesatuan; ini menurunkan
Ilmu Data (Data Science) – Dr. Joseph Santoso
154
beban kognitif bekerja dengan data bagi mereka yang terbiasa melihat artikel sepanjang
waktu. Contoh penyimpanan dokumen adalah MongoDB dan CouchDB.
Database Grafik
Jenis database NoSQL besar terakhir adalah yang paling kompleks, diarahkan untuk
menyimpan hubungan antar entitas secara efisien. Ketika data sangat saling terhubung,
seperti untuk jejaring sosial, kutipan makalah ilmiah, atau kelompok aset modal, database
grafik adalah jawabannya. Grafik atau data jaringan memiliki dua komponen utama:
Gambar 6.14 Contoh data grafik dengan empat tipe entitas (orang, hobi, perusahaan, dan
furnitur) dan relasinya tanpa informasi edge atau node tambahan
Kemungkinannya tidak terbatas, dan karena dunia menjadi semakin saling terhubung,
database grafik cenderung memenangkan medan dibandingkan jenis lainnya, termasuk
database relasional yang masih dominan.
Gambar 6.15 menunjukkan bahwa dengan 9 entri, database relasional masih mendominasi 15
teratas pada saat buku ini ditulis, dan dengan hadirnya NewSQL kita belum bisa
menghitungnya. Neo4j, database grafik paling populer, dapat ditemukan di posisi 23 pada saat
penulisan, dengan Titan di posisi 53. Sekarang setelah Anda melihat masing-masing tipe
database NoSQL, saatnya untuk mengotori tangan Anda dengan salah satunya.
Gambar 6.16 Awan kata sampel pada kata kunci diabetes tidak berbobot
CATATAN Kode untuk bab ini tersedia untuk diunduh dari situs web Manning untuk buku ini
di https://manning.com/books/introducing-data-science dan dalam format IPython.
Elasticsearch dengan cepat mengejar ketinggalan dan saat ini kemampuannya memiliki
kualitas yang sebanding.
6.2.1 Langkah 1: Menetapkan tujuan penelitian
Bisakah Anda mendiagnosa penyakit pada akhir bab ini, hanya menggunakan
komputer rumah Anda sendiri dan perangkat lunak gratis serta data di luar sana? Mengetahui
apa yang ingin Anda lakukan dan bagaimana melakukannya adalah langkah pertama dalam
proses ilmu data, seperti yang ditunjukkan pada gambar 6.17.
Gambar 6.17 Langkah 1 dalam proses ilmu data: menetapkan tujuan penelitian
• Tujuan utama Anda adalah membuat mesin pencari penyakit yang akan membantu dokter
umum dalam mendiagnosis penyakit.
• Tujuan kedua Anda adalah membuat profil suatu penyakit: Kata kunci apa yang
membedakannya dari penyakit lain?
Tujuan sekunder ini berguna untuk tujuan pendidikan atau sebagai masukan untuk
penggunaan yang lebih lanjut seperti mendeteksi penyebaran epidemi dengan memanfaatkan
media sosial. Dengan tujuan penelitian Anda dan rencana tindakan yang ditentukan, mari
beralih ke langkah pengambilan data.
6.2.2 Langkah 2 dan 3: Pengambilan dan persiapan data
Pengambilan data dan persiapan data adalah dua langkah berbeda dalam proses ilmu
data, dan meskipun ini tetap berlaku untuk studi kasus, kami akan mengeksplorasi keduanya
di bagian yang sama.
Dengan cara ini Anda dapat menghindari pengaturan penyimpanan intermedia lokal
dan segera melakukan persiapan data saat data sedang diambil. Mari kita lihat di mana kita
berada dalam proses ilmu data (lihat gambar 6.18).
Seperti yang ditunjukkan pada gambar 6.18, Anda memiliki dua kemungkinan sumber:
data internal dan data eksternal.
• Data internal—Anda tidak memiliki informasi penyakit. Jika saat ini Anda bekerja di
perusahaan farmasi atau rumah sakit, Anda mungkin lebih beruntung.
• Data eksternal—Yang dapat Anda gunakan untuk kasus ini hanyalah data eksternal. Anda
memiliki beberapa kemungkinan, tetapi Anda akan menggunakan Wikipedia.
• Saat Anda menarik data dari Wikipedia, Anda harus menyimpannya di indeks pencarian
Elastis lokal Anda, tetapi sebelum melakukannya, Anda harus menyiapkan datanya.
Setelah data memasuki indeks Elasticsearch, data tidak dapat diubah; yang dapat Anda
lakukan hanyalah menanyakannya. Lihat ikhtisar persiapan data pada gambar 6.19.
Seperti yang ditunjukkan pada gambar 6.19 ada tiga kategori persiapan data yang perlu
dipertimbangkan:
• Pembersihan data—Data yang Anda ambil dari Wikipedia bisa jadi tidak lengkap atau
salah. Kesalahan entri data dan kesalahan ejaan mungkin terjadi—bahkan informasi yang
salah pun tidak dikecualikan. Untungnya, Anda tidak memerlukan daftar penyakit yang
lengkap, dan Anda dapat menangani kesalahan pengejaan pada waktu pencarian; lebih
lanjut tentang itu nanti. Berkat pustaka Python Wikipedia, data tekstual yang akan Anda
terima sudah cukup bersih. Jika Anda mengikisnya secara manual, Anda perlu
menambahkan pembersihan HTML, menghapus semua tag HTML. Kebenaran dari
masalah ini adalah pencarian teks lengkap cenderung cukup kuat terhadap kesalahan
umum seperti nilai yang salah. Bahkan jika Anda membuang tag HTML dengan sengaja,
mereka tidak akan mempengaruhi hasil; tag HTML terlalu berbeda dari bahasa normal
untuk mengganggu.
• Transformasi data—Anda tidak perlu banyak mengubah data pada saat ini; Anda ingin
mencarinya apa adanya. Tapi Anda akan membuat perbedaan antara judul halaman, nama
penyakit, dan isi halaman. Perbedaan ini hampir wajib untuk interpretasi hasil pencarian.
• Menggabungkan data—Semua data diambil dari satu sumber dalam kasus ini, sehingga
Anda tidak perlu menggabungkan data. Perpanjangan yang mungkin untuk latihan ini
adalah mendapatkan data penyakit dari sumber lain dan mencocokkan penyakitnya. Ini
bukan tugas sepele karena tidak ada pengidentifikasi unik dan namanya seringkali sedikit
berbeda.
Anda dapat melakukan pembersihan data hanya dalam dua tahap: saat menggunakan
program Python yang menghubungkan Wikipedia ke Elasticsearch dan saat menjalankan
sistem pengindeksan internal Elasticsearch:
• Python—Di sini Anda menentukan data apa yang akan Anda izinkan untuk disimpan oleh
penyimpanan dokumen Anda, tetapi Anda tidak akan membersihkan data atau mengubah
data pada tahap ini, karena Elasticsearch lebih baik melakukannya dengan sedikit usaha.
2. Mengambil Data
Eror dari data yang dimasukan
Kemungkinan Nilai fisik
3. Persiapan Data Nilai hilang
Tanda Baca
Pembersihan Data Outlier
Spasi, Typo, …..
Terhadap buku Kode
Menjumlahkan Data
Extrapolasi Data
Transformasi Data Data Turunan
Menciptakan Dummies
Kehilangan nomer dari variabel
Struktur Data
Sekarang setelah Anda memiliki ikhtisar tentang langkah-langkah yang akan datang,
mari mulai bekerja. Jika Anda mengikuti petunjuk dalam apendiks, Anda seharusnya sudah
memiliki instans lokal Elastic-search dan berjalan. Pertama datang pengambilan data: Anda
memerlukan informasi tentang berbagai penyakit. Anda memiliki beberapa cara untuk
mendapatkan data semacam itu. Anda dapat meminta data perusahaan atau mendapatkan
data dari Freebase atau sumber data terbuka dan gratis lainnya. Mendapatkan data Anda bisa
menjadi tantangan, tetapi untuk contoh ini Anda akan menariknya dari Wikipedia. Ini agak
ironis karena pencarian di situs Wikipedia sendiri ditangani oleh Elasticsearch. Wikipedia dulu
memiliki sistemnya sendiri yang dibangun di atas Apache Lucene, tetapi menjadi tidak dapat
dipertahankan, dan mulai Januari 2014 Wikipedia mulai menggunakan Elasticsearch sebagai
gantinya.
Wikipedia memiliki halaman Daftar penyakit, seperti yang ditunjukkan pada gambar
6.20. Dari sini Anda dapat meminjam data dari daftar abjad.
Anda tahu data apa yang Anda inginkan; sekarang pergi ambil itu. Anda dapat
mengunduh seluruh dump data Wikipedia. Jika mau, Anda dapat mengunduhnya ke
http://meta.wikimedia.org/ wiki/Data_dump_torrents#enwiki.
Tentu saja, jika Anda mengindeks seluruh Wikipedia, indeks akan membutuhkan
sekitar 40 GB penyimpanan. Jangan ragu untuk menggunakan solusi ini, tetapi demi
mempertahankan penyimpanan dan lebar pita, kami akan membatasi diri dalam buku ini
hanya untuk menarik data yang ingin kami gunakan. Pilihan lainnya adalah menggores
halaman yang Anda butuhkan. Seperti Google, Anda dapat membuat program merayapi
halaman dan mengambil seluruh HTML yang dirender. Ini akan membantu, tetapi Anda akan
mendapatkan HTML yang sebenarnya, jadi Anda harus membersihkannya sebelum
mengindeksnya. Juga, kecuali Anda adalah Google, situs web tidak terlalu menyukai perayap
yang menggores halaman web mereka. Ini menciptakan jumlah lalu lintas yang tidak perlu,
dan jika cukup banyak orang mengirim perayap, itu dapat membuat server HTTP bertekuk
lutut, merusak kesenangan semua orang. Mengirim miliaran permintaan pada saat yang sama
juga merupakan salah satu cara serangan denial of service (DoA) dilakukan. Jika Anda memang
perlu mengikis situs web, buat skrip dalam jeda waktu antara setiap permintaan halaman.
Dengan cara ini, pengikis Anda lebih mirip dengan perilaku pengunjung situs web biasa dan
Anda tidak akan meledakkan server mereka.
Gambar 6.20 Halaman Daftar penyakit Wikipedia, titik awal untuk pengambilan data Anda
Untungnya, pencipta Wikipedia cukup pintar untuk mengetahui bahwa inilah yang
akan terjadi dengan semua informasi ini terbuka untuk semua orang. Mereka telah
menempatkan API di mana Anda dapat mengambil informasi Anda dengan aman. Anda dapat
membaca selengkapnya di http://www.mediawiki.org/wiki/API:Main_page. Anda akan
menggambar dari API. Dan Python tidak akan menjadi Python jika belum memiliki
perpustakaan untuk melakukan pekerjaan itu. Sebenarnya ada beberapa, tapi yang termudah
sudah cukup untuk kebutuhan Anda: Wikipedia. Aktifkan lingkungan virtual Python Anda dan
instal semua perpustakaan yang Anda perlukan untuk sisa buku ini:
Buka juru bahasa Python favorit Anda dan impor perpustakaan yang diperlukan:
Anda akan mengambil data dari API Wikipedia dan pada saat yang sama mengindeks pada
instans Elasticsearch lokal Anda, jadi pertama-tama Anda harus menyiapkannya untuk
penerimaan data.
Hal pertama yang Anda butuhkan adalah klien. Elasticsearch() dapat diinisialisasi
dengan alamat tetapi defaultnya adalah localhost:9200. Elasticsearch()dan Elasticsearch
('localhost:9200') adalah hal yang sama: klien Anda terhubung ke node Elasticsearch lokal
Anda. Kemudian Anda membuat indeks bernama "medical". Jika semua berjalan dengan baik,
Anda akan melihat jawaban "acknowledged:true" seperti yang ditunjukkan pada gambar 6.21.
Elasticsearch mengklaim tanpa skema, artinya Anda dapat menggunakan Elasticsearch
tanpa menentukan skema basis data dan tanpa memberi tahu Elasticsearch jenis data apa
yang perlu diharapkan. Meskipun ini berlaku untuk kasus sederhana, Anda tidak dapat
menghindari skema dalam jangka panjang, jadi mari kita buat, seperti yang ditunjukkan pada
daftar berikut.
Dengan cara ini Anda memberi tahu Elasticsearch bahwa indeks Anda akan memiliki
jenis dokumen yang disebut "disease", dan Anda menyediakannya dengan jenis bidang untuk
setiap bidang. Anda memiliki tiga bidang dalam dokumen penyakit: name, title, dan fulltext,
semuanya bertipe string. Jika Anda tidak menyediakan pemetaan, Elasticsearch akan menebak
jenisnya dengan melihat entri pertama yang diterimanya. Jika tidak mengenali bidang sebagai
boolean, double, float, long, integer, atau date, itu akan menyetelnya menjadi string. Dalam
hal ini, Anda tidak perlu menentukan pemetaan secara manual.
Sekarang mari beralih ke Wikipedia. Hal pertama yang ingin Anda lakukan adalah
mengambil halaman Daftar penyakit, karena ini adalah titik masuk Anda untuk eksplorasi lebih
lanjut:
Anda sekarang memiliki halaman pertama, tetapi Anda lebih tertarik pada halaman daftar
karena mengandung link ke penyakit. Lihat tautannya:
Halaman Daftar penyakit dilengkapi dengan lebih banyak tautan daripada yang akan Anda
gunakan. Gambar 6.22 menunjukkan daftar abjad dimulai dari mata rantai keenam belas.
Gambar 6.22 Tautan pada halaman Wikipedia Daftar penyakit. Ini memiliki lebih banyak
tautan daripada yang Anda perlukan.
Halaman ini memiliki banyak tautan, tetapi hanya daftar abjad yang menarik bagi
Anda, jadi simpan hanya yang:
Anda mungkin memperhatikan bahwa subset tersebut di-hardcode, karena Anda tahu itu
adalah entri ke-16 hingga ke-43 dalam array. Jika Wikipedia menambahkan bahkan satu
tautan sebelum yang Anda minati, itu akan membuang hasilnya. Praktik yang lebih baik adalah
menggunakan ekspresi reguler untuk tugas ini. Untuk tujuan eksplorasi, hardcoding nomor
entri baik-baik saja, tetapi jika ekspresi reguler adalah sifat kedua bagi Anda atau Anda
bermaksud mengubah kode ini menjadi pekerjaan batch, ekspresi reguler disarankan. Anda
dapat menemukan informasi lebih lanjut tentang mereka di
https://docs.python.org/2/howto/regex.html. Satu kemungkinan untuk versi regex adalah
potongan kode berikut.
Gambar 6.23 menunjukkan entri pertama dari apa yang Anda kejar: penyakit itu sendiri.
Saatnya mengindeks penyakit. Setelah diindeks, entri data dan persiapan data secara efektif
berakhir, seperti yang ditunjukkan dalam daftar berikut.
Karena setiap halaman daftar akan memiliki tautan yang tidak Anda perlukan, periksa
untuk melihat apakah suatu entri adalah penyakit. Anda menunjukkan untuk setiap daftar dari
karakter apa penyakit itu dimulai, jadi Anda memeriksanya. Selain itu, Anda mengecualikan
tautan yang dimulai dengan "daftar" karena ini akan muncul begitu Anda masuk ke daftar L
penyakit. Pengecekannya agak naif, tetapi biaya untuk memiliki beberapa entri yang tidak
diinginkan agak rendah karena algoritme pencarian akan mengecualikan hasil yang tidak
relevan begitu Anda mulai melakukan kueri. Untuk setiap penyakit, Anda mengindeks nama
penyakit dan teks lengkap halaman. Nama tersebut juga digunakan sebagai ID indeksnya; ini
berguna untuk beberapa fitur Elasticsearch tingkat lanjut tetapi juga untuk pencarian cepat di
browser. Misalnya, coba URL ini di browser Anda: http://localhost:9200/medical/diseases/
11%20beta%20hydroxylase%20deficiency. Judul diindeks secara terpisah; dalam kebanyakan
kasus, nama tautan dan judul halaman akan identik dan terkadang judul berisi nama alternatif
untuk penyakit tersebut.
Dengan setidaknya beberapa penyakit yang diindeks, Anda dapat menggunakan URI
Elasticsearch untuk pencarian sederhana. Lihatlah pencarian seluruh tubuh untuk kata sakit
kepala pada gambar 6.24. Anda sudah bisa melakukan ini saat mengindeks; Elasticsearch
dapat memperbarui indeks dan mengembalikan kueri untuknya secara bersamaan.
Jika Anda tidak menanyakan indeks, Anda masih bisa mendapatkan beberapa hasil
tanpa mengetahui apa pun tentang indeks tersebut. Menentukan http://localhost:9200/
medical/diseases/_search akan mengembalikan lima hasil pertama. Untuk tampilan data yang
lebih terstruktur, Anda dapat meminta pemetaan jenis dokumen ini di
http://localhost:9200/medical/penyakit/_mapping?pretty. Argumen pretty get menunjukkan
JSON yang dikembalikan dalam format yang lebih mudah dibaca, seperti dapat dilihat pada
gambar 6.25. Pemetaan tampaknya seperti yang Anda tentukan: semua bidang bertipe string.
URL Elasticsearch memang berguna, namun tidak cukup untuk kebutuhan Anda. Anda
masih memiliki penyakit untuk didiagnosis, dan untuk ini Anda akan mengirimkan permintaan
POST ke Elasticsearch melalui pustaka Elasticsearch Python Anda. Dengan pengambilan data
dan persiapan selesai, Anda dapat melanjutkan untuk mengeksplorasi data Anda.
Eksplorasi data menandai studi kasus ini, karena tujuan utama proyek (diagnostik
penyakit) adalah cara khusus untuk mengeksplorasi data dengan menanyakan gejala penyakit.
Gambar 6.26 menunjukkan beberapa teknik eksplorasi data, tetapi dalam kasus ini non-grafis:
menafsirkan hasil kueri penelusuran teks.
2. Mengambil Data
3. Persiapan Data
Grafik Sederhana
4. Eksplorasi Data Grafik kombinasi
Link dan Brush
Bukan Teknik grafik → Pencarian teks
5. Permodelan data
Momen kebenaran ada di sini: dapatkah Anda menemukan penyakit tertentu dengan
memberi makan gejalanya pada mesin pencari Anda? Mari pertama-tama pastikan Anda
memiliki dasar-dasarnya dan berjalan. Impor perpustakaan Elasticsearch dan tentukan
pengaturan pencarian global:
Anda hanya akan mengembalikan tiga hasil pertama; standarnya adalah lima. Elasticsearch
memiliki bahasa kueri JSON yang rumit; setiap pencarian adalah permintaan POST ke server
dan akan dijawab dengan jawaban JSON. Secara kasar, bahasa ini terdiri dari tiga bagian besar:
kueri, filter, dan agregasi. Kueri mengambil kata kunci pencarian dan menempatkannya
melalui satu atau lebih penganalisa sebelum kata-kata tersebut dicari di indeks. Kita akan
membahas lebih dalam tentang penganalisis nanti di bab ini. Filter mengambil kata kunci
seperti kueri tetapi tidak mencoba menganalisis apa yang Anda berikan; itu memfilter pada
kondisi yang kami berikan. Dengan demikian, filter tidak terlalu rumit tetapi berkali -kali lebih
Ilmu Data (Data Science) – Dr. Joseph Santoso
168
efisien karena filter juga disimpan sementara di dalam Elasticsearch jika Anda menggunakan
filter yang sama dua kali. Agregasi dapat dibandingkan dengan grup SQL; ember kata-kata
akan dibuat, dan untuk setiap ember statistik yang relevan dapat dihitung. Masing -masing dari
ketiga kompartemen ini memiliki banyak opsi dan fitur, membuat penjabaran seluruh bahasa
di sini menjadi tidak mungkin. Untungnya, tidak perlu membahas kerumitan yang dapat
diwakili oleh kueri pencarian Elastis. Kami akan menggunakan "Bahasa kueri string kueri", cara
untuk kueri data yang sangat mirip dengan bahasa kueri penelusuran Google. Jika, misalnya,
Anda ingin agar istilah pencarian bersifat wajib, tambahkan tanda tambah (+); jika Anda ingin
mengecualikan istilah pencarian, gunakan tanda minus (-). Meminta Elasticsearch tidak
disarankan karena menurunkan kinerja; mesin pencari pertama-tama harus menerjemahkan
string kueri ke dalam bahasa kueri JSON aslinya. Tapi untuk tujuan Anda itu akan bekerja
dengan baik; selain itu, kinerja tidak akan menjadi faktor pada beberapa ribu rekaman yang
Anda miliki di indeks. Sekarang saatnya untuk menanyakan data penyakit Anda.
Tujuan Utama Proyek: Mendiagnosis Penyakit Berdasarkan Gejalanya
Jika Anda pernah melihat serial televisi populer House M.D., kalimat “It’s never lupus”
mungkin terdengar asing. Lupus adalah salah satu jenis penyakit autoimun, dimana sistem
kekebalan tubuh menyerang bagian tubuh yang sehat. Mari kita lihat gejala apa yang
dibutuhkan mesin pencari Anda untuk menentukan bahwa Anda sedang mencari lupus.
Mulailah dengan tiga gejala: kelelahan, demam, dan nyeri sendi. Pasien imajiner Anda
memiliki ketiganya (dan lebih banyak lagi), jadi jadikan semuanya wajib dengan
menambahkan tanda tambah sebelum masing-masing:
Di searchBody, yang memiliki struktur JSON, Anda menentukan bidang yang ingin Anda
lihat kembali, dalam hal ini nama penyakit sudah cukup. Anda menggunakan sintaks string
kueri untuk mencari di semua bidang yang diindeks: teks lengkap, judul, dan nama. Dengan
menambahkan ^ Anda dapat memberi bobot pada setiap bidang. Jika suatu gejala muncul di
judul, itu lima kali lebih penting daripada di teks terbuka; jika itu terjadi pada nama itu sendiri,
itu dianggap sepuluh kali lebih penting. Perhatikan bagaimana "nyeri sendi" dibungkus dengan
tanda kutip. Jika Anda tidak memiliki tanda “ ”, persendian dan nyeri akan dianggap sebagai
dua kata kunci yang terpisah, bukan satu frasa. Di Elasticsearch ini disebut pencocokan frasa.
Mari kita lihat hasilnya pada gambar 6.27.
Gambar 6.27 menunjukkan tiga hasil teratas dari 34 penyakit yang cocok. Hasilnya
diurutkan berdasarkan skor pencocokannya, variabel _score. Skor yang cocok bukanlah hal
yang sederhana untuk dijelaskan; ini mempertimbangkan seberapa cocok penyakit tersebut
dengan kueri Anda dan berapa kali kata kunci ditemukan, bobot yang Anda berikan, dan
seterusnya. Saat ini, lupus bahkan tidak muncul di tiga hasil teratas. Beruntung bagi Anda,
lupus memiliki gejala lain yang berbeda: ruam. Ruam tidak selalu muncul di wajah seseorang,
tetapi itu memang terjadi dan dari sinilah lupus mendapatkan namanya: ruam wajah
membuat orang samar-samar menyerupai serigala. Pasien Anda mengalami ruam tetapi
Ilmu Data (Data Science) – Dr. Joseph Santoso
170
bukan ruam khas di wajah, jadi tambahkan "ruam" pada gejalanya tanpa menyebutkan
wajahnya.
Gambar 6.28 Upaya pencarian Lupus kedua dengan enam hasil dan lupus di posisi tiga
teratas
Hasil pencarian baru ditunjukkan pada gambar 6.28. Sekarang hasilnya dipersempit
menjadi enam dan lupus masuk tiga besar. Pada titik ini, mesin pencari mengatakan Human
Granulocytic Ehrlichiosis (HGE) lebih mungkin. HGE adalah penyakit yang disebarkan oleh
kutu, seperti penyakit Lyme yang terkenal. Sekarang seorang dokter yang cakap pasti sudah
mengetahui penyakit apa yang menjangkiti pasien Anda, karena dalam menentukan penyakit
banyak faktor yang berperan, lebih dari yang dapat Anda masukkan ke dalam mesin pencari
sederhana Anda. Misalnya, ruam hanya terjadi pada 10% pasien HGE dan 50% pasien lupus.
Lupus muncul perlahan, sedangkan HGE dipicu oleh gigitan kutu. Basis data pembelajaran
mesin tingkat lanjut yang diberi semua informasi ini dengan cara yang lebih terstruktur dapat
membuat diagnosis dengan kepastian yang jauh lebih besar. Mengingat Anda perlu puas
dengan halaman Wikipedia, Anda memerlukan gejala lain untuk mengonfirmasi bahwa itu
lupus. Pasien mengalami nyeri dada, jadi tambahkan ini ke dalam daftar.’’
Hasilnya ditunjukkan pada gambar 6.29. Sepertinya itu lupus. Butuh beberapa saat
untuk sampai pada kesimpulan ini, tetapi Anda sampai di sana. Tentu saja, cara Anda
mempresentasikan Elasticsearch dengan gejalanya terbatas. Anda hanya menggunakan istilah
tunggal (“kelelahan”) atau frasa literal (“nyeri sendi”). Ini berhasil untuk contoh ini, tetapi
Elasticsearch lebih fleksibel dari ini. Ini dapat mengambil ekspresi reguler dan melakukan
pencarian kabur, tetapi itu di luar cakupan buku ini, meskipun beberapa contoh disertakan
dalam kode yang dapat diunduh.
Gambar 6.29 Lupus pencarian ketiga: dengan gejala yang cukup untuk menentukan itu
pasti lupus
Gambar 6.30 Transposisi karakter yang berdekatan adalah salah satu operasi dalam jarak
Damerau-Levenshtein. Tiga lainnya adalah penyisipan, penghapusan, dan penggantian.
Hanya dengan ini, Anda telah mencapai tujuan pertama Anda: mendiagnosis penyakit.
Tapi jangan lupa tentang tujuan proyek sekunder Anda: profil penyakit.
Anda melihat kode baru di sini. Anda menyingkirkan pencarian string kueri dan
menggunakan filter sebagai gantinya. Filter dikemas dalam bagian kueri karena permintaan
pencarian dapat digabungkan dengan filter. Ini tidak terjadi dalam contoh ini, tetapi ketika ini
terjadi, Elastic-search pertama-tama akan menerapkan filter yang jauh lebih efisien sebelum
mencoba melakukan pencarian. Jika Anda ingin menelusuri subkumpulan data Anda,
sebaiknya tambahkan filter untuk terlebih dahulu membuat subkumpulan ini. Untuk
mendemonstrasikan ini, perhatikan dua potongan kode berikut. Mereka menghasilkan hasil
yang sama tetapi mereka bukan hal yang persis sama.
Meskipun tidak akan ditampilkan pada sejumlah kecil data yang Anda inginkan,
filternya jauh lebih cepat daripada pencarian. Permintaan pencarian akan menghitung skor
pencarian untuk masing-masing penyakit dan memberi peringkat yang sesuai, sedangkan filter
hanya menyaring semua penyakit yang tidak sesuai. Filter sejauh ini tidak sekompleks
pencarian yang sebenarnya: itu bisa "ya" atau "tidak" dan ini terbukti dalam output. Skornya
adalah 1 untuk semuanya; tidak ada perbedaan yang dibuat dalam set hasil. Output terdiri
dari dua bagian sekarang karena agregasi istilah yang signifikan. Sebelumnya Anda hanya
mendapatkan hit; sekarang Anda memiliki hits dan agregasi. Pertama, lihat hit pada gambar
6.31.
Gambar 6.31 Keluaran dari kueri terfilter dengan filter “diabetes” pada nama penyakit
Ini seharusnya terlihat akrab sekarang dengan satu pengecualian penting: semua hasil
memiliki skor 1. Selain lebih mudah dilakukan, filter di-cache oleh Elasticsearch untuk
sementara. Dengan cara ini, permintaan selanjutnya dengan filter yang sama bahkan l ebih
cepat, sehingga menghasilkan keunggulan performa yang sangat besar dibandingkan kueri
penelusuran.
Kapan sebaiknya Anda menggunakan filter dan kapan kueri penelusuran? Aturannya
sederhana: gunakan filter bila memungkinkan dan gunakan kueri penelusuran untuk
penelusuran teks lengkap saat peringkat di antara hasil diperlukan untuk mendapatkan hasil
yang paling menarik di atas. Sekarang perhatikan suku-suku penting pada gambar 6.32.
Gambar 6.32 Agregasi istilah signifikan diabetes, lima kata kunci pertama
Jika Anda melihat lima kata kunci pertama pada gambar 6.32, Anda akan melihat
bahwa empat kata kunci teratas terkait dengan asal mula diabetes. Paragraf Wikipedia berikut
menawarkan bantuan:
Kata diabetes (/ˌdaɪ.əˈbiːtiːz/ atau /ˌdaɪ.əˈbiːtɨs/) berasal dari bahasa Latin diabe–te–s,
yang selanjutnya berasal dari bahasa Yunani Kuno (diabe–te–s) yang secara
harfiah berarti berarti “pelintas; menyedot” [69]. Tabib Yunani kuno Aretaeus dari Cappadocia
(fl. Abad ke-1 M) menggunakan kata itu, dengan arti yang dimaksud “keluarnya urin yang
berlebihan,” sebagai nama penyakit [70, 71, 72]. Pada akhirnya, kata tersebut berasal dari
bahasa Yunani (diabainein), artinya “melalui”, [69] yang terdiri dari - (dia-
), artinya “melalui” dan (bainein), artinya “pergi” [70]. Kata “diabetes” pertama
kali tercatat dalam bahasa Inggris, dalam bentuk diabete, dalam sebuah teks kedokteran yang
ditulis sekitar tahun 1425.
—Halaman Wikipedia Diabetes_mellitus
Ini memberi tahu Anda dari mana kata diabetes berasal: “orang yang lewat; menyedot” dalam
bahasa Yunani. Itu juga menyebutkan diabainein dan bainein. Anda mungkin telah
mengetahui bahwa kata kunci yang paling relevan untuk suatu penyakit adalah definisi dan
asal sebenarnya. Untungnya kami meminta 30 kata kunci, jadi mari kita pilih beberapa kata
Ilmu Data (Data Science) – Dr. Joseph Santoso
175
kunci yang lebih menarik seperti ndi. ndi adalah versi huruf kecil dari NDI, atau “Nephrogenic
Diabetes Insipidus,” bentuk diabetes yang didapat paling umum. Kata kunci huruf kecil
dikembalikan karena begitulah cara mereka disimpan dalam indeks saat kami
memasukkannya melalui penganalisis standar saat mengindeks. Kami tidak menentukan apa
pun saat mengindeks, jadi penganalisis standar digunakan secara default. Kata kunci menarik
lainnya di 30 teratas adalah avp, gen yang berhubungan dengan diabetes; haus, gejala
diabetes; dan Amiloride, obat untuk diabetes. Kata kunci ini tampaknya memang
menggambarkan diabetes, tetapi kami kehilangan kata kunci multi-istilah; kami hanya
menyimpan istilah individu dalam indeks karena ini adalah perilaku default. Kata-kata tertentu
tidak akan pernah muncul dengan sendirinya karena tidak sering digunakan tetapi masih
signifikan bila digunakan bersama istilah lain. Saat ini kami kehilangan hubungan antara istilah-
istilah tertentu. Ambil avp, misalnya; jika avp selalu ditulis dalam bentuk lengkapnya "Diabetes
Insipidus Nefrogenik", itu tidak akan diambil. Menyimpan n-gram (kombinasi n jumlah kata)
menghabiskan ruang penyimpanan, dan menggunakannya untuk kueri atau agregasi
membebani server pencarian. Memutuskan di mana harus berhenti adalah latihan
keseimbangan dan bergantung pada data dan kasus penggunaan Anda.
Secara umum, bigram (kombinasi dari dua istilah) berguna karena bigram yang
bermakna ada dalam bahasa alami, meskipun 10 gram tidak terlalu banyak. Konsep kunci
Bigram akan berguna untuk pembuatan profil penyakit, tetapi untuk membuat agregasi istilah
penting bigram tersebut, Anda perlu menyimpannya sebagai bigram dalam indeks Anda.
Seperti yang sering terjadi dalam ilmu data, Anda harus mundur beberapa langkah untuk
membuat beberapa perubahan. Mari kembali ke tahap persiapan data.
6.2.4 Langkah 3 ditinjau kembali: Persiapan data untuk pembuatan profil penyakit
Seharusnya tidak mengejutkan bahwa Anda kembali ke persiapan data, seperti yang
ditunjukkan pada gambar 6.33. Bagaimanapun, proses ilmu data adalah proses yang berulang.
Saat Anda mengindeks data Anda, Anda hampir tidak melakukan pembersihan data atau
transformasi data. Anda dapat menambahkan pembersihan data sekarang, misalnya dengan
menghentikan pemfilteran kata. Stop word adalah kata-kata yang sangat umum sehingga
sering dibuang karena dapat mencemari hasil. Kami tidak akan menghentikan pemfilteran
kata (atau pembersihan data lainnya) di sini, tetapi jangan ragu untuk mencobanya sendiri.
Untuk mengindeks bigram, Anda perlu membuat filter token dan penganalisis teks
Anda sendiri. Filter token mampu melakukan transformasi pada token. Filter token khusus
Anda perlu menggabungkan token untuk membuat n-gram, juga disebut herpes zoster.
Tokenizer pencarian elastis default disebut tokenizer standar, dan itu akan mencari batas kata,
seperti ruang antar kata, untuk memotong teks menjadi token atau istilah yang berbeda. Lihat
pengaturan baru untuk indeks penyakit Anda, seperti yang ditampilkan dalam daftar berikut.
Anda membuat dua elemen baru: filter token yang disebut "filter sirap saya" dan
penganalisa baru yang disebut "my_shingle_analyzer." Karena n-gram sangat umum,
Elasticsearch hadir dengan tipe filter token sirap bawaan. Yang perlu Anda sampaikan adalah
bahwa Anda menginginkan bigram “min_shingle_size” : 2, “max_shingle_size” : 2, seperti yang
ditunjukkan pada gambar 6.34. Anda bisa menggunakan trigram dan lebih tinggi, tetapi untuk
tujuan demonstrasi ini sudah cukup.
Penganalisis yang ditunjukkan pada gambar 6.35 adalah kombinasi dari semua operasi
yang diperlukan untuk beralih dari teks input ke indeks. Ini menggabungkan filter sirap, tetapi
lebih dari ini. Tokenizer membagi teks menjadi token atau istilah; Anda kemudian dapat
menggunakan filter huruf kecil sehingga tidak ada perbedaan saat menelusuri "Diabetes"
versus "diabetes". Terakhir, Anda menerapkan filter sirap Anda, membuat bigram Anda.
Gambar 6.35 Penganalisis khusus dengan tokenisasi standar dan filter token sirap untuk
menghasilkan bigram
Dalam fulltext Anda sekarang memiliki parameter tambahan, fields. Di sini Anda dapat
menentukan semua isotop fulltext yang berbeda. Anda hanya memiliki satu; itu menggunakan
nama shingles dan akan menganalisis fulltext dengan my_shingle_analyzer baru Anda. Anda
masih memiliki akses ke fulltext asli Anda, dan Anda tidak menentukan penganalisis untuk ini,
jadi yang standar akan digunakan seperti sebelumnya. Anda dapat mengakses yang baru
dengan memberikan nama properti diikuti dengan nama bidangnya: fulltext.shingles. Yang
perlu Anda lakukan sekarang adalah melalui langkah-langkah sebelumnya dan mengindeks
data menggunakan API Wikipedia, seperti yang ditunjukkan pada daftar berikut.
Tidak ada yang baru di sini, hanya saja kali ini Anda akan mengindeks diseases2
doc_type, bukan diseases . Setelah ini selesai, Anda dapat melanjutkan lagi ke langkah 4,
eksplorasi data, dan memeriksa hasilnya.
6.2.5 Langkah 4 ditinjau kembali: Eksplorasi data untuk pembuatan profil penyakit
Anda sekali lagi sampai pada eksplorasi data. Anda dapat menyesuaikan kueri agregasi
dan menggunakan bidang baru Anda untuk memberi Anda konsep kunci bigram yang terkait
dengan diabetes:
Agregat baru Anda, yang disebut DiseaseBigrams, menggunakan bidang fulltext.shingles untuk
memberikan beberapa wawasan baru tentang diabetes. Istilah kunci baru ini muncul:
• Keputihan yang berlebihan—Pasien diabetes harus sering buang air kecil.
• Menyebabkan poliuria—Hal ini menunjukkan hal yang sama: diabetes menyebabkan
pasien sering buang air kecil.
• Tes deprivasi—Ini sebenarnya adalah trigram, “tes deprivasi air”, tetapi ini mengenali tes
deprivasi karena Anda hanya memiliki bigram. Ini adalah tes untuk menentukan apakah
seorang pasien menderita diabetes.
• Rasa haus yang berlebihan—Anda sudah menemukan "haus" dengan pencarian kata
kunci unigram Anda, tetapi secara teknis pada saat itu bisa berarti "tidak haus".
Ada bigram menarik lainnya, unigram, dan mungkin juga trigram. Secara keseluruhan, mereka
dapat digunakan untuk menganalisis teks atau kumpulan teks sebelum membacanya.
Perhatikan bahwa Anda mencapai hasil yang diinginkan tanpa sampai ke tahap pemodelan.
Kadang-kadang setidaknya ada informasi berharga dalam jumlah yang sama untuk ditemukan
dalam eksplorasi data seperti dalam pemodelan data. Sekarang setelah Anda sepenuhnya
mencapai tujuan sekunder Anda, Anda dapat melanjutkan ke langkah 6 proses ilmu data:
presentasi dan otomatisasi.
6.2.6 Langkah 6: Presentasi dan otomatisasi
Tujuan utama Anda, diagnosis penyakit, berubah menjadi alat diagnostik swalayan
dengan mengizinkan dokter untuk menanyakannya melalui, misalnya, aplikasi web. Anda tidak
akan membangun situs web dalam kasus ini, tetapi jika Anda berencana melakukannya, harap
baca sidebar “Elasticsearch aplikasi web.”
Gambar 6.36 Awan kata unigram pada kata kunci diabetes tidak berbobot dari
Elasticsearch
Menambahkan kata kunci Anda di situs web berbasis D3.js ini akan menghasilkan cloud
kata unigram seperti yang ditunjukkan pada gambar 6.36 yang dapat dimasukkan ke dalam
presentasi hasil proyek Anda. Istilah-istilah tersebut tidak diboboti oleh skor mereka dalam
Ilmu Data (Data Science) – Dr. Joseph Santoso
181
kasus ini, tetapi sudah memberikan representasi yang bagus dari temuan tersebut. Banyak
peningkatan yang dimungkinkan untuk aplikasi Anda, terutama di bidang persiapan data. Tapi
menyelami semua kemungkinan di sini akan membawa kita terlalu jauh; jadi kita telah sampai
pada akhir bab ini. Di bagian berikutnya kita akan melihat data streaming.
6.3 RINGKASAN
Dalam bab ini, Anda mempelajari hal berikut:
• NoSQL adalah singkatan dari "Not Only Structured Query Language" dan telah muncul dari
kebutuhan untuk menangani jumlah dan jenis data yang meningkat secara eksponensial,
serta meningkatnya kebutuhan akan skema yang lebih beragam dan fleksibel seperti
jaringan dan struktur hierarkis.
• Penanganan semua data ini memerlukan partisi basis data karena tidak ada satu mesin
pun yang mampu melakukan semua pekerjaan. Saat mempartisi, Teorema CAP berlaku:
Anda dapat memiliki ketersediaan atau konsistensi tetapi tidak pernah keduanya
sekaligus.
• Database relasional dan database grafik berpegang pada prinsip ACID: atomitas,
konsistensi, isolasi, dan daya tahan. Basis data NoSQL umumnya mengikuti prinsip BASE:
ketersediaan dasar, status lunak, dan konsistensi akhir.
• Empat jenis database NoSQL terbesar
– Penyimpanan nilai kunci—Pada dasarnya sekumpulan pasangan nilai kunci yang
disimpan dalam database. Basis data ini bisa sangat besar dan sangat serbaguna tetapi
kompleksitas datanya rendah. Contoh yang terkenal adalah Redis.
– Basis data kolom lebar—Basis data ini sedikit lebih kompleks daripada penyimpanan nilai
kunci karena mereka menggunakan kolom tetapi dengan cara yang lebih efisien daripada
RDBMS biasa. Kolom pada dasarnya dipisahkan, memungkinkan Anda mengambil data
dalam satu kolom dengan cepat. Database terkenal adalah Cassandra.
– Penyimpanan dokumen—Basis data ini sedikit lebih rumit dan menyimpan data sebagai
dokumen. Saat ini yang paling populer adalah MongoDB, tetapi dalam studi kasus kami,
kami menggunakan Elasticsearch, yang merupakan penyimpanan dokumen dan mesin
pencari.
– Database grafik—Database ini dapat menyimpan struktur data yang paling kompleks,
karena memperlakukan entitas dan relasi antar entitas dengan perhatian yang sama.
Kompleksitas ini menimbulkan biaya dalam kecepatan pencarian. Yang populer adalah
Neo4j, tetapi GraphX (basis data grafik yang terkait dengan Apache Spark) adalah
pemenangnya.
• Elasticsearch adalah penyimpanan dokumen dan mesin pencari teks lengkap yang
dibangun di atas Apache Lucene, mesin pencari sumber terbuka. Ini dapat digunakan
untuk membuat token, melakukan kueri agregasi, melakukan kueri dimensional (segi),
kueri pencarian profil, dan banyak lagi.
BAB 7
DATABASE GRAFIK
Gambar 7.1 Contoh data terhubung sederhana: dua entitas atau node (User1, User2),
masing-masing dengan properti (nama depan, nama belakang).
Ilmu Data (Data Science) – Dr. Joseph Santoso
183
Contoh menonjol dari data yang mengambil bentuk jaringan adalah data media sosial.
Media sosial memungkinkan kita untuk berbagi dan bertukar data dalam jaringan, sehingga
menghasilkan sejumlah besar data yang terhubung. Hal ini dapat kita ilustrasikan dengan
contoh sederhana. Anggaplah kita memiliki dua orang di data kita, Pengguna1 dan Pengguna2.
Selanjutnya kita mengetahui nama depan dan nama belakang User1 (nama depan: Paul dan
nama belakang: Beun) dan User2 (nama depan: Jelme dan nama belakang: Ragnar). Cara alami
untuk merepresentasikannya adalah dengan menggambarnya di papan tulis, seperti yang
ditunjukkan pada gambar 7.1.
Terminologi gambar 7.1 dijelaskan di bawah ini:
• Entitas—Kami memiliki dua entitas yang mewakili orang (Pengguna1 dan Pengguna2).
Entitas ini memiliki properti "nama" dan "nama belakang".
• Properti—Properti ditentukan oleh key-value pair. Dari grafik ini kita juga dapat
menyimpulkan bahwa User1 dengan properti “nama” Paul mengetahui User2 dengan
properti “nama” Jelme.
• Hubungan—Ini adalah hubungan antara Paul dan Jelme. Perhatikan bahwa hubungan itu
memiliki arah: Paullah yang "mengenal" Jelme dan bukan sebaliknya. User1 dan User2
keduanya mewakili orang dan karenanya dapat dikelompokkan.
• Label—Dalam database grafik, seseorang dapat mengelompokkan node dengan
menggunakan label. Pengguna1 dan Pengguna2 dalam hal ini dapat diberi label sebagai
"Pengguna".
Gambar 7.2 Contoh data terhubung yang lebih rumit di mana dua entitas lagi telah
disertakan (Negara1 dan Negara2) dan dua hubungan baru ("Has_been_in" dan
"Is_born_in")
Data yang terhubung seringkali berisi lebih banyak entitas dan koneksi. Pada gambar
7.2 kita dapat melihat grafik yang lebih luas. Dua entitas lagi disertakan: Negara1 dengan nama
Kamboja dan Negara2 dengan nama Swedia. Ada dua hubungan lagi: "Has_been_in" dan
"Is_born_in". Di grafik sebelumnya, hanya entitas yang menyertakan properti, kini relasinya
juga berisi properti. Grafik semacam itu dikenal sebagai grafik properti. Relasi yang
Ilmu Data (Data Science) – Dr. Joseph Santoso
184
menghubungkan node User1 dan Country1 bertipe “Has_been_in” dan memiliki properti
“Date” yang mewakili nilai data. Demikian pula, User2 terhubung ke Negara2 tetapi melalui
tipe hubungan yang berbeda, yaitu tipe “Is_born_in”. Perhatikan bahwa jenis hubungan
memberi kita konteks hubungan antar node. Node dapat memiliki banyak hubungan.
Representasi data kami semacam ini memberi kami cara intuitif untuk menyimpan
data yang terhubung. Untuk menjelajahi data kami, kami perlu melintasi grafik mengikuti jalur
yang telah ditentukan sebelumnya untuk menemukan pola yang kami cari. Bagaimana jika
seseorang ingin tahu di mana Paul berada? Diterjemahkan ke dalam terminologi basis data
grafik, kami ingin menemukan pola "Paul telah masuk". Untuk menjawab ini, kami akan mulai
dari simpul dengan nama "Paul" dan melintasi ke Kamboja melalui hubungan "Has_been_in".
Oleh karena itu traversal grafik, yang sesuai dengan kueri basis data, adalah sebagai berikut:
1. Node awal—Dalam hal ini node dengan nama properti "Paul"
2. Jalur traversal—Dalam hal ini jalur dimulai dari simpul Paul dan menuju ke Kamboja
3. Node akhir—Node negara dengan properti nama “Kamboja”
Untuk lebih memahami bagaimana database grafik berurusan dengan data yang terhubung,
sebaiknya memperluas sedikit lebih banyak tentang grafik secara umum. Grafik dipelajari
secara ekstensif dalam domain ilmu komputer dan matematika dalam bidang yang disebut
teori grafik. Teori graf adalah studi tentang graf, di mana graf mewakili struktur matematis
yang digunakan untuk memodelkan hubungan berpasangan antar objek, seperti yang
ditunjukkan pada gambar 7.3. Apa yang membuat mereka begitu menarik adalah bahwa
mereka memiliki struktur yang cocok untuk memvisualisasikan data yang terhubung. Grafik
ditentukan oleh simpul (juga dikenal sebagai simpul di dunia basis data grafik) dan tepi (juga
dikenal sebagai hubungan). Konsep-konsep ini membentuk dasar-dasar dasar yang menjadi
dasar struktur data grafik.
Gambar 7.3 Pada intinya sebuah graf terdiri dari node (juga dikenal sebagai simpul) dan
sisi (yang menghubungkan simpul), seperti yang diketahui dari definisi matematis dari
sebuah graf. Kumpulan objek ini mewakili grafik.
Dibandingkan dengan struktur data lainnya, fitur khusus dari data yang terhubung
adalah sifatnya yang non-linier: setiap entitas dapat dihubungkan ke entitas lain melalui
berbagai jenis relasi dan entitas perantara serta jalur. Dalam grafik, Anda dapat mem buat
Ilmu Data (Data Science) – Dr. Joseph Santoso
185
pembagian antara grafik berarah dan tidak berarah. Sisi-sisi graf berarah memiliki—
bagaimana bisa sebaliknya—sebuah arah. Meskipun orang dapat berargumen bahwa setiap
masalah entah bagaimana dapat direpresentasikan sebagai masalah grafik, penting untuk
memahami kapan ideal untuk melakukannya dan kapan tidak.
7.1.1 Mengapa dan kapan saya harus menggunakan database grafik?
Pencarian untuk menentukan basis data grafik mana yang harus digunakan bisa
menjadi proses yang terlibat untuk dilakukan. Salah satu aspek penting dalam proses
pengambilan keputusan ini adalah menemukan representasi yang tepat untuk data Anda.
Sejak awal 1970-an jenis database yang paling umum yang harus diandalkan adalah database
relasional. Kemudian, yang lain muncul, seperti database hierarkis (misalnya, IMS), dan
kerabat terdekat database grafik: database jaringan (misalnya, IDMS). Namun selama
beberapa dekade terakhir, bentang alam menjadi jauh lebih beragam, memberikan lebih
banyak pilihan kepada pengguna akhir tergantung pada kebutuhan khusus mereka.
Mempertimbangkan perkembangan terbaru dari data yang tersedia, dua karakteristik sangat
cocok untuk disorot di sini. Yang pertama adalah ukuran data dan yang lainnya kompleksitas
data, seperti yang ditunjukkan pada gambar 7.4.
Gambar 7.4 Gambar ini mengilustrasikan posisi basis data grafik pada ruang dua dimensi di
mana satu dimensi mewakili ukuran data yang sedang ditangani, dan dimensi lainnya
mewakili kompleksitas dalam hal bagaimana menghubungkan data tersebut.
Ketika database relasional tidak dapat lagi mengatasi kompleksitas kumpulan data
karena keterhubungannya, tetapi bukan ukurannya, database grafik mungkin menjadi pilihan
terbaik Anda. Seperti yang ditunjukkan oleh gambar 7.4, kita harus bergantung pada database
grafik ketika datanya kompleks tetapi masih kecil. Meskipun "kecil" adalah hal yang relatif di
sini, kita masih berbicara tentang ratusan juta node. Menangani kerumitan adalah aset utama
database grafik dan "alasan" utama Anda menggunakannya. Untuk menjelaskan kompleksitas
apa yang dimaksud di sini, pertama-tama pikirkan tentang cara kerja basis data relasional
tradisional.
Berlawanan dengan apa yang ditunjukkan oleh nama database relasional, tidak banyak
yang relasional tentangnya kecuali bahwa kunci asing dan kunci utama adalah yang
menghubungkan tabel. Sebaliknya, hubungan dalam database grafik adalah warga negara
kelas satu. Melalui aspek ini, mereka cocok untuk memodelkan dan menanyakan data yang
terhubung. Database relasional lebih suka berusaha untuk meminimalkan redundansi data.
Proses ini dikenal sebagai normalisasi basis data, di mana tabel didekomposisi menjadi tabel
yang lebih kecil (lebih sedikit redundan) sambil mempertahankan semua informasi tetap utuh.
Dalam database yang dinormalisasi seseorang perlu melakukan perubahan atribut hanya
dalam satu tabel. Tujuan dari proses ini adalah untuk mengisolasi perubahan data dalam satu
tabel. Sistem manajemen basis data relasional (RDBMS) adalah pilihan yang baik sebagai basis
data untuk data yang cocok dengan format tabular. Hubungan dalam data dapat diekspresikan
dengan menggabungkan tabel. Kecocokan mereka mulai diturunkan ketika gabungan menjadi
lebih rumit, terutama ketika mereka menjadi gabungan banyak-ke-banyak. Waktu kueri juga
akan meningkat ketika ukuran data Anda mulai meningkat, dan pemeliharaan database akan
menjadi tantangan yang lebih besar. Faktor-faktor ini akan menghambat kinerja database
Anda. Grafik database, di sisi lain, secara inheren menyimpan data sebagai node dan
hubungan. Meskipun basis data grafik diklasifikasikan sebagai jenis basis data NoSQL, ada
kecenderungan untuk menyajikannya sebagai kategori tersendiri. Seseorang mencari
pembenaran untuk ini dengan mencatat bahwa jenis database NoSQL lainnya berorientasi
pada agregasi, sedangkan database grafik tidak.
Database relasional mungkin, misalnya, memiliki tabel yang mewakili "orang" dan
propertinya. Setiap orang terkait dengan orang lain melalui kekerabatan (dan persahabatan,
dan seterusnya); setiap baris mungkin mewakili satu orang, tetapi menghubungkannya ke
baris lain di tabel orang akan menjadi pekerjaan yang sangat sulit. Apakah Anda
menambahkan variabel yang menyimpan pengidentifikasi unik anak pertama dan tambahan
untuk menyimpan ID anak kedua? Di mana Anda berhenti? Anak kesepuluh?
Alternatifnya adalah menggunakan tabel perantara untuk hubungan anak-orang tua,
tetapi Anda memerlukan tabel terpisah untuk jenis hubungan lain seperti persahabatan.
Dalam kasus terakhir ini Anda tidak mendapatkan proliferasi kolom tetapi proliferasi tabel:
satu tabel hubungan untuk setiap jenis hubungan. Bahkan jika Anda entah bagaimana berhasil
memodelkan data sedemikian rupa sehingga semua hubungan keluarga ada, Anda
memerlukan pertanyaan yang sulit untuk mendapatkan jawaban atas pertanyaan sederhana
seperti "Saya ingin cucu John McBain." Pertama, Anda perlu menemukan anak-anak John
McBain. Setelah Anda menemukan anak-anaknya, Anda perlu menemukan anak mereka. Pada
saat Anda menemukan semua cucu, Anda telah mencapai meja "orang" tiga kali:
1. Temukan McBain dan jemput anak-anaknya.
2. Cari anak-anak dengan ID yang Anda dapatkan dan dapatkan ID anak-anak mereka.
3. Temukan cucu McBain.
Gambar 7.5 menunjukkan pencarian rekursif dalam database relasi yang diperlukan
untuk mendapatkan dari John McBain ke cucunya jika semuanya ada dalam satu tabel.
Gambar 7.6 adalah cara lain untuk memodelkan data: hubungan orangtua-anak adalah tabel
terpisah.Pencarian rekursif seperti ini tidak efisien, untuk sedikitnya.
Gambar 7.5 Pencarian rekursif versi 1: semua data dalam satu tabel
Database grafik bersinar ketika jenis kerumitan ini muncul. Mari kita lihat yang paling
populer di antara mereka.
Neo4j adalah database grafik yang menyimpan data dalam grafik yang berisi node dan
hubungan (keduanya diperbolehkan mengandung properti). Jenis basis data grafik ini dikenal
sebagai grafik properti dan cocok untuk menyimpan data yang terhubung. Ini memiliki skema
fleksibel yang akan memberi kita kebebasan untuk mengubah struktur data kita jika
diperlukan, memberi kita kemampuan untuk menambahkan data baru dan hubungan baru
jika diperlukan. Ini adalah proyek sumber terbuka, teknologi matang, mudah dipasang, mudah
digunakan, dan didokumentasikan dengan baik. Neo4j juga memiliki antarmuka berbasis
browser yang memfasilitasi pembuatan grafik untuk tujuan visualisasi. Untuk mengikuti, ini
akan menjadi saat yang tepat untuk menginstal Neo4j.
Sekarang mari kita perkenalkan empat struktur dasar di Neo4j:
• Node—Mewakili entitas seperti dokumen, pengguna, resep, dan sebagainya. Properti
tertentu dapat ditugaskan ke node.
• Hubungan—Ada di antara node yang berbeda. Mereka dapat diakses baik berdiri sendiri
atau melalui node yang mereka lampirkan. Relasi juga dapat berisi properti, oleh karena
itu disebut model grafik properti. Setiap relasi memiliki nama dan arah, yang bersama -
sama menyediakan konteks semantik untuk node yang dihubungkan oleh relasi tersebut.
• Properti—Node dan relasi dapat memiliki properti. Properti ditentukan oleh pasangan
kunci-nilai.
• Label—Dapat digunakan untuk mengelompokkan node serupa untuk memfasilitasi
traversal yang lebih cepat melalui grafik.
Sebelum melakukan analisis, kebiasaan yang baik adalah merancang database Anda dengan
hati-hati agar sesuai dengan kueri yang ingin Anda jalankan saat melakukan analisis. Database
grafik memiliki karakteristik yang menyenangkan karena ramah papan tulis. Jika seseorang
mencoba menggambar pengaturan masalah di papan tulis, gambar ini akan sangat mirip
dengan desain database untuk masalah yang ditentukan. Oleh karena itu, gambar papan tulis
seperti itu akan menjadi titik awal yang baik untuk mendesain database kita.
Sekarang bagaimana cara mengambil datanya? Untuk menjelajahi data kami, kami
perlu melintasi grafik mengikuti jalur yang telah ditentukan untuk menemukan pola yang kami
telusuri. Peramban Neo4j adalah lingkungan yang ideal untuk membuat dan bermain-main
dengan data Anda yang terhubung hingga Anda mendapatkan jenis representasi yang tepat
untuk kueri yang optimal, seperti yang ditunjukkan pada gambar 7.7. Skema fleksibel dari basis
data grafik sangat cocok untuk kita di sini. Di browser ini Anda dapat mengambil data Anda
dalam baris atau sebagai grafik. Neo4j memiliki bahasa kueri sendiri untuk memudahkan
pembuatan dan kemampuan kueri grafik.
Cypher adalah bahasa yang sangat ekspresif yang cukup mirip dengan SQL untuk
meningkatkan proses pembelajaran bahasa. Di bagian berikut, kami akan membuat data kami
sendiri menggunakan Cypher dan memasukkannya ke Neo4j. Kemudian kita bisa bermain-
main dengan data.
Gambar 7.7 Antarmuka Neo4j 2.2.5 dengan kueri yang diselesaikan dari studi kasus bab
Gambar 7.8 Contoh grafik sosial sederhana dengan dua pengguna dan satu hubungan
Perhatikan hubungan yang erat tentang bagaimana kita merumuskan pertanyaan kita secara
lisan dan cara database grafik menerjemahkannya menjadi traversal. Di Neo4j, ekspresi yang
mengesankan ini dimungkinkan oleh bahasa kueri grafiknya, Cypher. Untuk membuat contoh
lebih menarik, mari kita asumsikan bahwa data kita diwakili oleh grafik pada gambar 7.9.
Gambar 7.9 Contoh data terkoneksi yang lebih rumit dengan beberapa node yang saling
terhubung dari tipe yang berbeda
Kita dapat memasukkan data yang terhubung pada gambar 7.9 ke dalam Neo4j dengan
menggunakan Cypher. Kita dapat menulis perintah Cypher secara langsung di antarmuka
Ilmu Data (Data Science) – Dr. Joseph Santoso
191
berbasis browser Neo4j, atau secara alternatif melalui driver Python (lihat
http://neo4j.com/developer/python/ untuk gambaran umum). Ini adalah cara yang baik
untuk merasakan langsung dengan data yang terhubung dan database grafik.
Untuk menulis pernyataan create yang sesuai di Cypher, pertama-tama kita harus
memiliki pemahaman yang baik tentang data mana yang ingin kita simpan sebagai node dan
mana yang sebagai relasi, seperti apa propertinya, dan apakah label akan berguna. Keputusan
pertama adalah memutuskan data mana yang harus dianggap sebagai node dan mana yang
sebagai hubungan untuk menyediakan konteks semantik untuk node ini. Pada gambar 7.9
kami telah memilih untuk mewakili pengguna dan negara tempat mereka berada sebagai
node. Data yang menyediakan informasi tentang node tertentu, misalnya nama yang
diasosiasikan dengan node, dapat direpresentasikan sebagai properti. Semua data yang
memberikan konteks tentang dua atau lebih node akan dianggap sebagai sebuah hubungan.
Node yang berbagi fitur umum, misalnya Kamboja dan Swedia keduanya merupakan negara,
juga akan dikelompokkan melalui label. Pada gambar 7.9 hal ini sudah dilakukan.
Dalam daftar berikut kami mendemonstrasikan bagaimana berbagai objek dapat
dikodekan di Cypher melalui satu pernyataan pembuatan besar. Ketahuilah bahwa Cypher
peka huruf besar-kecil.
setelah kami membuat data kami, kami dapat menanyakannya. Kueri berikut akan
mengembalikan semua node dan relasi dalam database:
Gambar 7.10 memperlihatkan database yang telah kita buat. Kita dapat membandingkan
grafik ini dengan grafik yang kita bayangkan di papan tulis kita. Di papan tulis kami, kami
mengelompokkan simpul orang dalam label "Pengguna" dan simpul negara dalam label
"Negara". Meskipun node dalam gambar ini tidak diwakili oleh labelnya, label tersebut ada di
database kami. Selain itu, kami juga melewatkan simpul (Hobby) dan hubungan berti pe
“Loves”. Ini dapat dengan mudah ditambahkan melalui pernyataan gabungan yang akan
membuat simpul dan hubungan jika belum ada:
Gambar 7.10 Grafik yang digambar pada gambar 7.9 sekarang telah dibuat di antarmuka
web Neo4j.
Node tidak diwakili oleh label mereka tetapi dengan nama mereka. Kami dapat
menyimpulkan dari grafik bahwa kami kehilangan label Hobby dengan nama Bepergian.
Alasannya adalah karena kita lupa menyertakan node ini dan hubungannya yang sesuai dalam
pernyataan buat.
Pertanyaan 2: Siapa yang pernah ke mana? Kode Cypher (dijelaskan pada gambar 7.12) adalah
Gambar 7.11 Hasil pertanyaan 1: Negara mana saja yang pernah dikunjungi Annelies? Kita
bisa melihat tiga negara yang pernah didatangi Annelies, menggunakan deretan presentasi
Neo4j. Penjelajahan hanya membutuhkan waktu 97 milidetik.
Saat kami menjalankan kueri ini, kami mendapatkan jawaban yang ditunjukkan pada gambar
7.13.
Gambar 7.13 Hasil pertanyaan 2: Siapa yang pernah ke mana? Hasil traversal kami
sekarang ditampilkan dalam representasi grafik Neo4j. Sekarang kita bisa melihat bahwa
Paul, selain Annelies, juga pernah ke Kamboja.
Dalam pertanyaan 2 kami telah memilih untuk tidak menentukan simpul awal. Oleh
karena itu, Cypher akan pergi ke semua node yang ada di database untuk menemukan node
yang memiliki hubungan keluar dengan tipe "Has_been_in". Seseorang harus menghindari
untuk tidak menentukan simpul awal karena, tergantung pada ukuran database Anda, kueri
seperti itu bisa memakan waktu lama untuk menyatu. Bermain-main dengan data untuk
mendapatkan database grafik yang tepat juga berarti banyak penghapusan data. Cypher
memiliki pernyataan hapus yang cocok untuk menghapus sejumlah kecil data. Kueri berikut
menunjukkan cara menghapus semua node dan hubungan dalam database:
Sekarang setelah kita mengenal data yang terhubung dan memiliki pengetahuan dasar
tentang bagaimana data tersebut dikelola dalam database grafik, kita dapat melangkah lebih
jauh dan melihat aplikasi nyata dan langsung dari data yang terhubung. Grafik sosia l, misalnya,
dapat digunakan untuk menemukan kumpulan node yang terhubung erat di dalam komunitas
grafik. Orang-orang dalam sebuah cluster yang tidak saling mengenal kemudian dapat
diperkenalkan satu sama lain. Konsep mencari node yang terhubung erat, node yang memiliki
banyak kesamaan fitur, adalah konsep yang banyak digunakan. Di bagian selanjutnya kita akan
Ilmu Data (Data Science) – Dr. Joseph Santoso
195
menggunakan ide ini, di mana tujuannya adalah untuk menemukan klaster di dalam jaringan
bahan.
Gambar 7.14 Ilmu data diterapkan pada model rekomendasi data terhubung
File JSON "openrecipes" berisi lebih dari seratus ribu resep dengan banyak properti seperti
tanggal publikasi, lokasi sumber, waktu persiapan, deskripsi, dan sebagainya. Kami hanya
tertarik pada nama dan daftar bahan. Resep sampel ditampilkan dalam daftar berikut.
Karena kita berurusan dengan data teks di sini, masalahnya ada dua: pertama,
menyiapkan data tekstual seperti yang dijelaskan dalam bab penambangan teks. Kemudian,
setelah data dibersihkan secara menyeluruh, data tersebut dapat digunakan untuk
menghasilkan rekomendasi resep berdasarkan jaringan bahan. Bab ini tidak berfokus pada
persiapan data teks karena ini dijelaskan di tempat lain, jadi kami akan membiarkan diri kami
menikmati jalan pintas selama persiapan data yang akan datang.
7.3.3 Langkah 3: Persiapan data
Kami sekarang memiliki dua file data yang dapat kami gunakan, dan kami perlu
menggabungkannya menjadi satu basis data grafik. Data resep “kotor” menimbulkan masalah
yang dapat kami atasi dengan menggunakan daftar bahan bersih kami dan penggunaan mesin
pencari dan database NoSQL Elasticsearch. Kita sudah mengandalkan Elasticsearch di bab
sebelumnya dan sekarang ini akan membersihkan data resep untuk kita secara implisit saat
membuat indeks. Kami kemudian dapat mencari data ini untuk menautkan setiap bahan ke
setiap resep di mana itu terjadi. Kita dapat membersihkan data teks menggunakan Python
murni, seperti yang kita lakukan di bab penambangan teks, tetapi ini menunjukkan bahwa ada
baiknya untuk mengetahui poin kuat dari setiap database NoSQL; jangan menyematkan diri
Anda pada satu teknologi, tetapi gunakan bersama-sama untuk kepentingan proyek.
Mari kita mulai dengan memasukkan data resep kita ke dalam Elasticsearch. Jika Anda
tidak mengerti apa yang terjadi, silakan periksa kembali studi kasus bab 6 dan itu akan menjadi
jelas. Pastikan untuk mengaktifkan instans Elasticsearch lokal Anda dan akti fkan lingkungan
Python dengan modul Elasticsearch terpasang sebelum menjalankan cuplikan kode di daftar
berikut. Direkomendasikan untuk tidak menjalankan kode ini "sebagaimana adanya" di
Ipython (atau Jupyter) karena kode ini mencetak setiap kunci resep ke layar dan browser Anda
hanya dapat menangani begitu banyak keluaran. Matikan pernyataan cetak atau jalankan di
IDE Python lain. Kode dalam potongan ini dapat ditemukan di "Persiapan Data Bagian 1.py".
Jika semuanya berjalan dengan baik, kami sekarang memiliki indeks Elasticsearch
dengan nama "gastronomical" yang dihuni oleh ribuan resep. Perhatikan bahwa kami
mengizinkan duplikat dari resep yang sama dengan tidak menetapkan nama resep sebagai
kunci dokumen. Jika, misalnya, sebuah resep disebut “lasagna” maka ini bisa berupa lasagna
salmon, lasagna daging sapi, lasagna ayam, atau jenis lainnya. Tidak ada satu resep pun yang
dipilih sebagai prototipe lasagna; semuanya diunggah ke Elasticsearch dengan nama yang
sama: "lasagna". Ini adalah pilihan, jadi jangan ragu untuk memutuskan sebaliknya. Ini akan
memiliki dampak yang signifikan, seperti yang akan kita lihat nanti. Pintu sekarang terbuka
untuk pengunggahan sistematis ke basis data grafik lokal kami. Pastikan instance database
grafik lokal Anda diaktifkan saat menerapkan kode berikut. Nama pengguna kami untuk
database ini adalah Neo4j default dan kata sandinya adalah Neo4ja; pastikan untuk
menyesuaikan ini untuk pengaturan lokal Anda. Untuk ini, kami juga memerlukan pustaka
Python khusus Neo4j yang disebut py2neo. Jika Anda belum melakukannya, sekarang saatnya
untuk menginstalnya ke lingkungan virtual Anda menggunakan pip install py2neo atau conda
install py2neo saat menggunakan Anaconda. Sekali lagi, maklum kode ini akan merusak
browser Anda saat dijalankan langsung di Ipython atau Jupiter. Kode dalam daftar ini dapat
ditemukan di "Persiapan Data Bagian 2.py".
Hebat, sekarang kami bangga menjadi pemilik database grafik yang penuh dengan
resep! Saatnya untuk eksplorasi data yang terhubung.
7.3.4 Langkah 4: Eksplorasi data
Tidak ada yang menghentikan Anda untuk menjalankan kode Cypher di lingkungan ini,
tetapi Cypher juga dapat dijalankan melalui pustaka py2neo. Satu pertanyaan menarik yang
dapat kami ajukan adalah bahan mana yang paling banyak muncul di semua resep? Apa yang
kemungkinan besar akan masuk ke sistem pencernaan kita jika kita memilih dan memakan
hidangan secara acak dari database ini?
Permintaan dibuat di Cypher dan mengatakan: untuk semua resep dan bahan-
bahannya, hitung jumlah relasi per bahan dan kembalikan sepuluh bahan dengan relasi
terbanyak dan jumlah masing-masing. Hasilnya ditunjukkan pada Gambar 7.15.
Sebagian besar daftar 10 teratas pada gambar 7.15 seharusnya tidak mengejutkan. Dengan
garam yang menempati urutan teratas dalam daftar kita, kita tidak perlu terkejut menemukan
penyakit pembuluh darah sebagai pembunuh nomor satu di sebagian besar negara barat.
Pertanyaan menarik lainnya yang muncul di benak sekarang adalah dari sudut pandang yang
berbeda: resep mana yang membutuhkan bahan paling banyak?
Gambar 7.16 10 hidangan teratas yang dapat dibuat dengan bahan paling beragam
Dalam daftar 7.6 penikmat makanan kami Ragnar ditambahkan ke database bersama dengan
preferensinya untuk beberapa hidangan. Jika kita memilih Ragnar di antarmuka Neo4j, kita
mendapatkan gambar 7.18. Kueri Cypher untuk ini adalah
Tidak ada kejutan di gambar 7.18: banyak orang menyukai Spaghetti Bolognese, begitu pula
ahli gastronomi Skandinavia kami, Ragnar.
Untuk mesin rekomendasi sederhana yang ingin kami buat, yang perlu kami lakukan
hanyalah meminta database grafik untuk memberi kami hidangan terdekat dalam hal bahan.
Sekali lagi, ini adalah pendekatan dasar untuk sistem pemberi rekomendasi karena tidak
memperhitungkan faktor-faktor seperti
• Tidak suka bahan atau hidangan.
• Jumlah suka atau tidak suka. Skor dari 10 bukannya biner suka atau tidak suka bisa
membuat perbedaan.
• Jumlah bahan yang ada di piring.
• Ambang batas untuk bahan tertentu menjadi jelas dalam rasanya. Bahan-bahan tertentu,
seperti cabai, akan memberikan dampak yang lebih besar untuk dosis yang lebih kecil
daripada bahan lainnya.
• Alergi makanan. Meskipun hal ini secara implisit dimodelkan dalam suka atau tidak suka
hidangan dengan bahan tertentu, alergi makanan bisa menjadi sangat penting sehingga
satu kesalahan saja bisa berakibat fatal. Menghindari alergen harus menimpa seluruh
sistem rekomendasi.
• Lebih banyak hal untuk Anda renungkan.
Ini mungkin sedikit mengejutkan, tetapi satu perintah Cypher sudah cukup.
Gambar 7.19 Hasil rekomendasi resep; 20 hidangan teratas yang mungkin disukai pengguna
Dari gambar 7.19 kita dapat menyimpulkan sudah waktunya bagi Ragnar untuk
mencoba Spaghetti and Meatballs, hidangan yang dibuat sangat terkenal oleh animasi Disney
Lady and the Tramp. Ini memang terdengar seperti rekomendasi yang bagus untuk seseorang
yang sangat menyukai hidangan yang mengandung pasta dan bakso, tetapi seperti yang dapat
kita lihat dari jumlah bahannya, lebih banyak bahan yang mendukung saran ini. Untuk
memberi kita sedikit petunjuk tentang apa yang ada di baliknya, kita dapat menunjukkan
hidangan yang disukai, rekomendasi teratas, dan beberapa bahan yang tumpang tindih dalam
satu gambar grafik ringkasan.
7.3.6 Langkah 6: Presentasi
Antarmuka web Neo4j memungkinkan kita untuk menjalankan model dan mengambil
grafik yang tampak bagus yang meringkas bagian dari logika di balik rekomendasi. Ini
menunjukkan bagaimana hidangan yang direkomendasikan terkait dengan hidangan yang
disukai melalui bahan-bahannya. Ini ditunjukkan pada gambar 7.20 dan merupakan hasil akhir
untuk studi kasus kami.
Dengan gambar grafik yang indah ini kita dapat menyimpulkan bab kita dalam
pengetahuan bahwa Ragnar memiliki beberapa hidangan lezat untuk dinantikan. Jangan lupa
untuk mencoba sendiri sistem rekomendasi dengan memasukkan preferensi Anda sendiri.
Gambar 7.20 Keterkaitan hidangan pilihan pengguna dan 10 hidangan teratas yang
direkomendasikan melalui sub-pilihan bahan yang tumpang tindih
7.4 RINGKASAN
Dalam bab ini Anda belajar
• Database grafik sangat berguna saat menghadapi data di mana hubungan antar entitas
sama pentingnya dengan entitas itu sendiri. Dibandingkan dengan database NoSQL
lainnya, mereka dapat menangani kompleksitas terbesar tetapi data paling sedikit.
• Struktur data grafik terdiri dari dua komponen utama:
– Node—Ini adalah entitas itu sendiri. Dalam studi kasus kami, ini adalah resep dan bahan.
– Tepi—Hubungan antar entitas. Hubungan, seperti node, bisa dari semua jenis jenis
(misalnya "berisi", "suka", "telah berkunjung") dan dapat memiliki properti spesifiknya
sendiri seperti nama, bobot, atau ukuran lainnya.
• Kami melihat Neo4j, database grafik paling populer saat ini. Untuk instruksi tentang cara
menginstalnya, Anda dapat melihat lampiran B. Kami melihat cara menambahkan data ke
Neo4j, menanyakannya menggunakan Cypher, dan cara mengakses antarmuka webnya.
• Cypher adalah bahasa kueri khusus basis data Neo4j, dan kami melihat beberapa contoh.
Kami juga menggunakannya dalam studi kasus sebagai bagian dari sistem rekomendasi
hidangan kami.
• Dalam studi kasus bab ini, kami menggunakan Elasticsearch untuk membersihkan
timbunan data resep yang sangat besar. Kami kemudian mengonversi data ini ke database
Neo4j dengan resep dan bahan. Tujuan dari studi kasus ini adalah untuk
merekomendasikan hidangan kepada orang-orang berdasarkan minat yang ditunjukkan
sebelumnya pada hidangan lain. Untuk ini kami memanfaatkan keterhubungan resep
melalui bahan-bahannya. Pustaka py2neo memungkinkan kami untuk berkomunikasi
dengan server Neo4j dari Python.
Ilmu Data (Data Science) – Dr. Joseph Santoso
207
BAB 8
PENAMBANGAN TEKS DAN ANALISIS TEKS
Menambahkan
Struktur
Analisis dan
Visualisasi
4
Index Pencurian
3
2
1
0
1 2 3 4 5 6 7 8 9 10 11 12
Bulan
Gambar 8.1 Dalam analitik teks, (biasanya) tantangan pertama adalah menyusun teks
masukan; kemudian dapat dianalisis secara menyeluruh.
Meskipun bahasa tidak terbatas pada bahasa alami, fokus bab ini adalah Pemrosesan
Bahasa Alami (NLP). Contoh bahasa non-alami adalah log mesin, matematika, dan kode
Morse. Secara teknis bahkan bahasa Esperanto, Klingon, dan Naga tidak termasuk dalam
bidang bahasa alami karena mereka diciptakan dengan sengaja alih-alih berkembang dari
waktu ke waktu; mereka tidak menjadi "alami" bagi kita. Bahasa terakhir ini tetap cocok untu k
komunikasi alami (ucapan, tulisan); mereka memiliki tata bahasa dan kosa kata seperti semua
bahasa alami, dan teknik penambangan teks yang sama dapat diterapkan pada mereka.
secara otomatis dengan nama seorang teman, itu dilakukan dengan bantuan teknik yang
disebut pengenalan entitas bernama, meskipun ini hanya salah satu komponen dari repertoar
mereka. Tujuannya tidak hanya untuk mendeteksi bahwa Anda sedang mengetik kata benda,
tetapi juga untuk menebak bahwa Anda merujuk pada seseorang dan mengenali siapa itu.
Contoh lain dari pengenalan entitas bernama ditunjukkan pada gambar 8.2. Google tahu
Chelsea adalah klub sepak bola tetapi merespons secara berbeda ketika ditanya tentang
seseorang.
Google menggunakan banyak jenis penambangan teks saat menampilkan hasil kueri
kepada Anda. Apa yang muncul di benak Anda ketika seseorang mengatakan “Chelsea”?
Chelsea bisa jadi banyak hal: seseorang; klub sepak bola; sebuah lingkungan di Manhattan,
New York atau London; pasar makanan; pertunjukan bunga; dan seterusnya. Google
mengetahui hal ini dan memberikan jawaban berbeda untuk pertanyaan "Siapa Chelsea?"
versus "Apa itu Chelsea?" Untuk memberikan jawaban yang paling relevan, Google harus
melakukan (antara lain) semua hal berikut:
• Praproses semua dokumen yang dikumpulkannya untuk entitas bernama
• Lakukan identifikasi bahasa
• Mendeteksi jenis entitas yang Anda maksud
• Mencocokkan kueri dengan hasil
• Mendeteksi jenis konten yang akan dikembalikan (PDF, peka dewasa)
Gambar 8.2 Berbagai jawaban untuk pertanyaan “Siapakah Chelsea?” dan "Apa itu
Chelsea?" menyiratkan bahwa Google menggunakan teknik penambangan teks untuk
menjawab pertanyaan ini.
Contoh ini menunjukkan bahwa penambangan teks tidak hanya tentang makna
langsung dari teks itu sendiri tetapi juga melibatkan atribut meta seperti bahasa dan jenis
dokumen. Google menggunakan penambangan teks lebih dari sekadar menjawab pertanyaan.
Selain melindungi pengguna Gmail dari spam, ia juga membagi email ke dalam berbagai
kategori seperti sosial, pembaruan, dan forum, seperti yang ditunjukkan pada gambar 8.3.
Mungkin untuk melangkah lebih jauh daripada menjawab pertanyaan sederhana saat Anda
menggabungkan teks dengan logika dan matematika lainnya.
Gambar 8.3 Email dapat secara otomatis dibagi menurut kategori berdasarkan konten dan
asal.
Hal ini memungkinkan pembuatan mesin penalaran otomatis yang digerakkan oleh kueri
bahasa alami. Gambar 8.4 menunjukkan bagaimana “Wolfram Alpha,” mesin pengetahuan
komputasional, menggunakan penambangan teks dan penalaran otomatis untuk menjawab
pertanyaan “Apakah populasi AS lebih besar dari China?”
Gambar 8.4 Mesin Wolfram Alpha menggunakan penambangan teks dan penalaran logis
untuk menjawab pertanyaan.
Jika ini tidak cukup mengesankan, IBM Watson mengejutkan banyak orang pada tahun
2011 ketika mesin tersebut dipasang melawan dua pemain manusia dalam permainan
Jeopardy. Jeopardy adalah acara kuis Amerika di mana orang menerima jawaban atas
pertanyaan dan poin dinilai untuk menebak pertanyaan yang benar untuk jawaban itu. Lihat
gambar 8.5. Aman untuk mengatakan putaran ini mengarah ke kecerdasan buatan. IBM
Watson adalah mesin kognitif yang dapat menafsirkan bahasa alami dan menjawab
pertanyaan berdasarkan basis pengetahuan yang luas.
Penambangan teks memiliki banyak aplikasi, termasuk, namun tidak terbatas pada, berikut
ini:
• Identifikasi entitas
• Deteksi plagiarisme
• Identifikasi topik
• Pengelompokan teks
• Terjemahan
• Peringkasan teks otomatis
• Deteksi penipuan
• Pemfilteran spam
• Analisis sentimen
Penambangan teks bermanfaat, tetapi apakah itu sulit? Maaf mengecewakan: Ya, benar. Saat
melihat contoh Wolfram Alpha dan IBM Watson, Anda mungkin mendapat kesan bahwa
penambangan teks itu mudah. Sayangnya tidak. Pada kenyataannya penambangan teks
adalah tugas yang rumit dan bahkan banyak hal yang tampaknya sederhana tidak dapat
dilakukan dengan memuaskan. Misalnya, ambil tugas menebak alamat yang benar. Gambar
8.6 menunjukkan betapa sulitnya mengembalikan hasil yang tepat dengan kepastian dan
bagaimana Google Maps meminta Anda untuk informasi lebih lanjut saat mencari
“Springfield.” Dalam hal ini manusia tidak akan melakukan yang lebih baik tanpa konteks
tambahan, tetapi ambiguitas ini adalah salah satu dari banyak masalah yang Anda hadapi
dalam aplikasi penambangan teks.
Gambar 8.6 Google Maps meminta lebih banyak konteks karena ambiguitas kueri
“Springfield.”
Masalah lainnya adalah kesalahan ejaan dan bentuk ejaan kata yang berbeda (benar).
Ambil tiga referensi berikut ke New York: "NY", "Neww York", dan "New York". Bagi manusia,
mudah untuk melihat bahwa mereka semua mengacu pada kota New York. Karena cara otak
kita menginterpretasikan teks, memahami teks dengan kesalahan ejaan menjadi hal yang
wajar bagi kita; orang bahkan mungkin tidak menyadarinya. Tetapi untuk komputer, ini adalah
string yang tidak terkait kecuali jika kami menggunakan algoritme untuk memberi tahu bahwa
string tersebut merujuk ke entitas yang sama. Masalah terkait adalah sinonim dan
penggunaan kata ganti. Coba tetapkan orang yang tepat untuk kata ganti “dia” di kalimat
berikutnya: “John memberikan bunga kepada orang tua Marleen saat pertama kali bertemu
orang tuanya. Dia sangat senang dengan sikap ini.” Cukup mudah, bukan? Bukan untuk
komputer.
Kita dapat memecahkan banyak masalah serupa dengan mudah, tetapi sering kali
terbukti sulit untuk sebuah mesin. Kita dapat melatih algoritme yang bekerja dengan baik pada
masalah tertentu dalam lingkup yang terdefinisi dengan baik, tetapi algoritme yang lebih
umum yang bekerja di semua kasus adalah monster yang sama sekali berbeda. Misalnya, kami
dapat mengajari komputer untuk mengenali dan mengambil nomor akun AS dari teks, tetapi
ini tidak dapat digeneralisasikan dengan baik ke nomor akun dari negara lain.
Algoritma bahasa juga peka terhadap konteks bahasa yang digunakan, meskipun
bahasa itu sendiri tetap sama. Model bahasa Inggris tidak akan berfungsi untuk bahasa Arab
dan sebaliknya, tetapi meskipun kita tetap menggunakan bahasa Inggris—algoritme yang
dilatih untuk data Twitter kemungkinan tidak akan bekerja dengan baik pada teks hukum. Mari
kita ingat ini ketika kita beralih ke bab studi kasus: tidak ada solusi yang sempurna dan cocok
untuk semua dalam penambangan teks.
Gambar 8.7 Sebuah teks diubah menjadi sekumpulan kata dengan memberi label pada
setiap kata (istilah) dengan "Benar" jika ada dalam dokumen dan "Salah" jika tidak ada.
Contoh dari gambar 8.7 memberi Anda gambaran tentang data terstruktur yang kita perlukan
untuk memulai analisis teks, tetapi ini sangat disederhanakan: tidak ada satu kata pun yang
disaring dan tidak ada stemming (kita akan membahasnya nanti) yang diterapkan. Korpus
besar dapat memiliki ribuan kata unik. Jika semua harus diberi label seperti ini tanpa
pemfilteran apa pun, mudah untuk melihat bahwa kami mungkin akan mendapatkan volume
data yang besar. Kumpulan kata kode biner seperti yang ditunjukkan pada gambar 8.7
hanyalah salah satu cara untuk menyusun data; ada teknik lain.
Frekuensi Term—Frekuensi Dokumen Terbalik (TF-IDF)
Formula yang terkenal untuk mengisi matriks term dokumen adalah TF-IDF atau Term
Frequency dikali Inverse Document Frequency. Kantung kata biner menetapkan Benar atau
Salah (istilah ada atau tidak), sementara frekuensi sederhana menghitung berapa kali istilah
itu muncul. TF-IDF sedikit lebih rumit dan memperhitungkan berapa kali istilah muncul dalam
Ilmu Data (Data Science) – Dr. Joseph Santoso
216
dokumen (TF). TF dapat berupa hitungan istilah sederhana, hitungan biner (Benar atau Salah),
atau hitungan istilah skala logaritmik. Itu tergantung pada apa yang terbaik untuk Anda. Jika
TF adalah frekuensi jangka, rumus TF adalah sebagai berikut:
𝑇𝐹 = 𝑓𝑡𝑑 , TF adalah frekuensi; (f) dari istilah (t) dalam dokumen (d).
Tetapi TF-IDF juga memperhitungkan semua dokumen lain karena Inverse Document
Frequency. IDF memberikan gambaran tentang seberapa umum kata tersebut di seluruh
korpus: semakin tinggi frekuensi dokumen semakin umum, dan semakin banyak kata umum
kurang informatif. Misalnya kata “a” atau “the” sepertinya tidak memberikan informasi
spesifik pada sebuah teks. Rumus IDF dengan penskalaan logaritmik adalah bentuk IDF yang
paling umum digunakan:
𝑁
𝐼𝐷𝐹 = log( )
|{𝑑 ∈ 𝐷: 𝑡 ∈ 𝑑 }|
dengan N adalah jumlah total dokumen dalam korpus, dan |{𝑑 ∈ 𝐷: 𝑡 ∈ 𝑑 }| menjadi jumlah
dokumen (d) di mana istilah (t) muncul.
Skor TF-IDF menyatakan hal ini tentang sebuah istilah: seberapa pentingkah kata ini
untuk membedakan dokumen ini dari yang lain dalam korpus? Rumus TF-IDF demikian
1𝐹 𝑁
= 𝑓𝑡𝑑 /log( )
𝐼𝐷𝐹 |{𝑑 ∈ 𝐷: 𝑡 ∈ 𝑑 }|
Kami tidak akan menggunakan TF-IDF, tetapi saat mengatur langkah selanjutnya dalam
penambangan teks, ini harus menjadi salah satu hal pertama yang akan Anda temui. TF-IDF
juga digunakan oleh Elasticsearch di belakang layar di bab 6. Ini adalah cara yang baik jika Anda
ingin menggunakan TF-IDF untuk analitik teks; tinggalkan penambangan teks ke perangkat
lunak khusus seperti SOLR atau Pencarian elastis dan ambil matriks dokumen/istilah untuk
analitik teks dari sana.
Sebelum masuk ke kumpulan kata-kata yang sebenarnya, banyak langkah manipulasi
data lainnya terjadi:
• Tokenisasi—Teks dipotong-potong disebut "token" atau "istilah". Token ini adalah unit
informasi paling dasar yang akan Anda gunakan untuk model Anda. Istilahnya sering
berupa kata-kata tetapi ini bukan keharusan. Seluruh kalimat dapat digunakan untuk
analisis. Kami akan menggunakan unigram: istilah yang terdiri dari satu kata. Namun,
seringkali berguna untuk menyertakan bigram (dua kata per token) atau trigram (tiga kata
per token) untuk menangkap makna tambahan dan meningkatkan kinerja model Anda. Ini
memang membutuhkan biaya, karena Anda membuat vektor istilah yang lebih besar
dengan memasukkan bigram dan/atau trigram ke dalam persamaan.
• Hentikan pemfilteran kata—Setiap bahasa dilengkapi dengan kata-kata yang nilainya kecil
dalam analitik teks karena sering digunakan. NLTK hadir dengan daftar pendek kata
berhenti berbahasa Inggris yang dapat kami filter. Jika teks dipatok menjadi kata-kata,
seringkali masuk akal untuk menghilangkan vektor kata dari kata-kata penghenti informasi
rendah ini.
• Huruf kecil—Kata-kata dengan huruf kapital muncul di awal kalimat, yang lain karena
merupakan kata benda atau kata sifat yang tepat. Kami tidak mendapatkan nilai tambah
dengan membuat perbedaan itu dalam matriks istilah kami, jadi semua istilah akan diatur
ke huruf kecil.
Teknik penyusunan data lainnya adalah stemming. Yang ini membutuhkan lebih banyak
elaborasi.
8.2.2 Stemming dan lemmatisasi
Stemming adalah proses mengembalikan kata-kata ke bentuk akarnya; dengan cara ini
Anda akan mendapatkan lebih sedikit variasi dalam data. Ini masuk akal jika kata-kata memiliki
arti yang mirip tetapi ditulis berbeda karena, misalnya, satu dalam bentuk jamak. Stemming
mencoba menyatukan dengan memotong bagian-bagian kata. Misalnya "pesawat" dan
"pesawat" keduanya menjadi "pesawat".
Teknik lain, yang disebut lemmatisasi, memiliki tujuan yang sama tetapi melakukannya
dengan cara yang lebih sensitif secara tata bahasa. Misalnya, sementara stemming dan
lemmatisasi akan mengurangi "mobil" menjadi "mobil", lemmatisasi juga dapat
mengembalikan kata kerja terkonjugasi ke bentuk tak terkonjugasinya seperti "are" menjadi
"be". Yang mana yang Anda gunakan bergantung pada kasus Anda, dan lemmatisasi sangat
diuntungkan dari Penandaan POS (Penandaan Bagian Ucapan). POS Tagging adalah proses
menghubungkan label gramatikal ke setiap bagian kalimat. Anda mungkin melakukannya
secara manual di sekolah sebagai latihan bahasa. Ambil kalimat “Game of Thrones adalah
serial televisi.” Jika kami menerapkan Penandaan POS di atasnya, kami dapatkan:
( {game":NN" } , {"of":"IN"}. {"thrones":"NNS"},{"is": "VBZ"} , {"a": "DTT"}, {"television": "NN"} , {"series": "NN"} )
NN adalah kata benda, IN adalah preposisi, NNS adalah kata benda dalam bentuk
jamak, VBZ adalah kata kerja orang ketiga tunggal, dan DT adalah penentu. Tabel 8.1 memiliki
daftar lengkapnya.
Penandaan POS adalah kasus penggunaan tokenisasi kalimat daripada tokenisasi kata.
Setelah Penandaan POS selesai, Anda masih dapat melanjutkan ke tokenisasi kata, tetapi
Penanda POS membutuhkan seluruh kalimat. Menggabungkan Penandaan POS dan
lemmatisasi cenderung memberikan data yang lebih bersih daripada hanya menggunakan
stemmer. Demi kesederhanaan, kami akan tetap berpegang pada studi kasus, tetapi
pertimbangkan ini sebagai kesempatan untuk menguraikan latihan.
Kami sekarang mengetahui hal terpenting yang akan kami gunakan untuk melakukan
pembersihan dan manipulasi data (penambangan teks). Untuk analitik teks kita, mari
tambahkan pengklasifikasi pohon keputusan ke repertoar kita.
8.2.3 Pengklasifikasi pohon keputusan
Bagian analisis data dari studi kasus kami juga akan dibuat sederhana. Kami akan
menguji pengklasifikasi Naïve Bayes dan pengklasifikasi pohon keputusan. Seperti yang
terlihat di bab 3, pengklasifikasi Naïve Bayes disebut demikian karena menganggap setiap
variabel masukan tidak bergantung satu sama lain, yang naif, terutama dalam penambangan
teks. Ambil contoh sederhana dari "ilmu data", "analisis data", atau "permainan singgasana".
Jika kita memotong data menjadi unigram, kita mendapatkan variabel terpisah berikut (jika
kita mengabaikan stemming dan semacamnya): “data”, “sains”, “analisis”, “permainan”,
“dari”, dan “tahta”. Jelas tautan akan hilang. Hal ini pada gilirannya dapat diatasi dengan
membuat bigram (ilmu data, analisis data) dan trigram (permainan singgasana).
Pengklasifikasi pohon keputusan, bagaimanapun, tidak menganggap variabel
independen satu sama lain dan secara aktif membuat variabel dan keranjang interaksi.
Variabel interaksi adalah variabel yang menggabungkan variabel lain. Misalnya "data" dan
"sains" mungkin merupakan prediktor yang baik dengan hak mereka sendiri, tetapi mungkin
keduanya terjadi bersamaan dalam teks yang sama mungkin memiliki nilainya sendiri. Ember
agak sebaliknya. Alih-alih menggabungkan dua variabel, sebuah variabel dipecah menjadi
beberapa variabel baru. Ini masuk akal untuk variabel numerik. Gambar 8.8 menunjukkan
seperti apa bentuk pohon keputusan dan di mana Anda dapat menemukan interaksi dan
pengelompokan.
Gambar 8.8 Model pohon keputusan fiktif. Pohon keputusan secara otomatis membuat
keranjang dan mengandaikan interaksi antara variabel input.
pohon keputusan mulai menyesuaikan data. Overfitting memungkinkan model untuk salah
mengira keacakan untuk korelasi nyata. Untuk mengatasi hal ini, sebuah pohon keputusan
dipangkas: cabang-cabangnya yang tidak berarti dikeluarkan dari model akhir.
Sekarang setelah kita melihat teknik baru yang paling penting, mari selami studi kasus.
Gambar 8.9 Pohon keputusan dengan satu variabel: kesimpulan dokter dari pemeriksaan
USG saat hamil. Berapa peluang janin tersebut berjenis kelamin perempuan?
sering digunakan untuk pekerjaan tingkat produksi, seperti perpustakaan lain seperti scikit-
learn.
Menginstal NLTK dan kumpulannya
Instal NLTK dengan penginstal paket favorit Anda. Jika Anda menggunakan Anaconda,
itu sudah terinstal dengan pengaturan Anaconda default. Kalau tidak, Anda bisa menggunakan
"pip" atau "easy_install". Ketika ini selesai, Anda masih perlu menginstal model dan corpora
yang disertakan agar berfungsi penuh. Untuk ini, jalankan kode Python berikut:
• impor nltk
• nltk.download()
Gambar 8.10 Pilih Semua Paket untuk menyelesaikan instalasi NLTK sepenuhnya.
Bergantung pada instalasi Anda, ini akan memberi Anda pop-up atau lebih banyak opsi
baris perintah. Gambar 8.10 menunjukkan kotak pop-up yang Anda dapatkan saat
mengeluarkan perintah nltk.download(). Anda dapat mengunduh semua corpora jika Anda
mau, tetapi untuk bab ini kami hanya akan menggunakan "punkt" dan "stopwords". Unduhan
ini akan disebutkan secara eksplisit dalam kode yang disertakan dengan buku ini.
Dua file notebook IPython tersedia untuk bab ini:
• Pengumpulan data—Berisi bagian pengumpulan data dari studi kasus bab ini.
• Persiapan dan analisis data—Data yang disimpan dimasukkan ke dalam persiapan data
dan kemudian dianalisis.
Semua kode dalam studi kasus yang akan datang dapat ditemukan di dua file ini dalam urutan
yang sama dan juga dapat dijalankan seperti itu. Selain itu, dua grafik interaktif tersedia untuk
diunduh:
• forceGraph.html—Mewakili 20 fitur teratas dari model Naïve Bayes kami
• Sunburst.html —Mewakili empat cabang teratas dari model pohon keputusan kami
Untuk membuka dua halaman HTML ini, diperlukan server HTTP, yang bisa Anda dapatkan
menggunakan Python dan jendela perintah:
• Buka jendela perintah (Linux, Windows, apa pun yang Anda suka).
• Pindah ke folder yang berisi file HTML dan file data JSON: decisionTreeData.json untuk
diagram sunburst dan NaiveBayesData.json untuk grafik gaya. File HTML harus tetap
berada di lokasi yang sama dengan file datanya atau Anda harus mengubah JavaScript di
file HTML.
• Buat server HTTP Python dengan perintah berikut: python –m Simple- HTTPServer 8000
• Buka browser dan buka localhost:8000; di sini Anda dapat memilih file HTML, seperti yang
ditunjukkan pada gambar 8.11.
Gambar 8.12 Ikhtisar proses sains data yang diterapkan pada studi kasus klasifikasi topik
Reddit
terhubung ke API Reddit untuk mendapatkan data kami. Kami secara efektif mengambil data
berlabel karena kami menganggap bahwa postingan di subreddit "gameofthrones" ada
hubungannya dengan "gameofthrones".
Untuk mendapatkan data kami, kami menggunakan pustaka Reddit Python API resmi
yang disebut PRAW. Setelah kami mendapatkan data yang kami butuhkan, kami akan
menyimpannya dalam file mirip database ringan yang disebut SQLite. SQLite sangat ideal
untuk menyimpan data dalam jumlah kecil karena tidak memerlukan penyiapan apa pun
untuk digunakan dan akan merespons kueri SQL seperti yang dilakukan database relasional
biasa. Media penyimpanan data lainnya bisa digunakan; jika Anda lebih suka database Oracle
atau Postgres, Python memiliki pustaka yang sangat bagus untuk berinteraksi dengannya
tanpa perlu menulis SQL. SQLAlchemy juga akan berfungsi untuk file SQLite. Gambar 8.13
menunjukkan langkah pengambilan data dalam proses ilmu data.
Data Internal
Reddit adalah data External yg dipakai.
2. Pengambilan Data Menggunakan PRAW untuk mengakses API data
Data Eksternal
Data disimpan di SQLite
Gambar 8.13 Langkah pengambilan data proses sains data untuk kasus klasifikasi topik
Reddit
Buka juru bahasa Python favorit Anda; saatnya beraksi, seperti yang ditunjukkan pada
daftar 8.1. Pertama, kami perlu mengumpulkan data kami dari situs web Reddit. Jika Anda
belum melakukannya, gunakan pip install praw atau conda install praw (Anaconda) sebelum
menjalankan skrip berikut.
CATATAN Kode untuk langkah 2 juga dapat ditemukan di file IPython “Pengumpulan data Bab
8.” Ini tersedia di bagian unduhan buku ini.
Pertama-tama mari impor pustaka yang diperlukan. Sekarang kita memiliki akses ke
kemampuan SQLite dan PRAW, kita perlu menyiapkan database lokal kecil kita untuk data
yang akan diterima. Dengan menentukan koneksi ke file SQLite, kami secara otomatis
membuatnya jika belum ada. Kami kemudian menentukan kursor data yang mampu
mengeksekusi pernyataan SQL apa pun, jadi kami menggunakannya untuk menentukan
struktur database kami. Basis data akan berisi dua tabel: tabel topik berisi topik Reddit, yang
mirip dengan seseorang yang memulai posting baru di forum, dan tabel kedua berisi komentar
dan ditautkan ke tabel topik melalui kolom “topicID”. Kedua tabel tersebut memiliki hubungan
satu (tabel topik) ke banyak (tabel komentar). Untuk studi kasus, kami akan membatasi diri
untuk menggunakan tabel topik, tetapi pengumpulan data akan menggabungkan keduanya
karena ini memungkinkan Anda untuk bereksperimen dengan data tambahan ini jika Anda
menginginkannya. Untuk mengasah keterampilan penambangan teks, Anda dapat melakukan
Ilmu Data (Data Science) – Dr. Joseph Santoso
225
analisis sentimen pada komentar topik dan mencari tahu topik apa yang menerima komentar
negatif atau positif. Anda kemudian dapat mengkorelasikannya dengan fitur model yang akan
kami hasilkan di akhir bab ini.
Kita perlu membuat klien PRAW untuk mendapatkan akses ke data. Setiap subreddit
dapat dikenali dari namanya, dan kami tertarik pada "ilmu data" dan "gameofthrones". Batas
tersebut mewakili jumlah maksimum topik (postingan, bukan komentar) yang akan kami ambil
dari Reddit. Seribu juga merupakan jumlah maksimum yang diizinkan API untuk kami ambil
pada setiap permintaan yang diberikan, meskipun kami dapat meminta lebih banyak nanti
ketika orang telah memposting hal baru. Bahkan kita bisa menjalankan permintaan API secara
berkala dan mengumpulkan data dari waktu ke waktu. Meskipun pada waktu tertentu Anda
dibatasi untuk seribu posting, tidak ada yang menghentikan Anda untuk mengembangkan
database Anda sendiri selama berbulan-bulan. Perlu dicatat bahwa skrip berikut mungkin
membutuhkan waktu sekitar satu jam untuk diselesaikan. Jika Anda tidak ingin menunggu,
silakan lanjutkan dan gunakan file SQLite yang dapat diunduh. Selain itu, jika Anda
menjalankannya sekarang, kemungkinan besar Anda tidak akan mendapatkan keluaran yang
sama persis seperti saat pertama kali dijalankan untuk membuat keluaran yang ditampilkan di
bab ini.
Mari kita lihat fungsi pengambilan data kami, seperti yang ditunjukkan pada daftar
berikut.
Kode yang akan datang tersedia online sebagai file IPython "Persiapan dan analisis data
Bab 8." Mari kita mulai dengan mengimpor pustaka yang diperlukan dan menyiapkan
database SQLite, seperti yang ditunjukkan pada daftar berikut.
Jika Anda belum mengunduh korpus NLTK lengkap, sekarang kami akan mengunduh
bagian yang akan kami gunakan. Jangan khawatir jika Anda sudah mengunduhnya, skrip akan
mendeteksi jika corpora Anda mutakhir. Data kita masih tersimpan di file Reddit SQLite jadi
mari buat koneksi ke sana. Bahkan sebelum menjelajahi data kami, kami mengetahui
setidaknya dua hal yang harus kami lakukan untuk membersihkan data: hentikan pemfilteran
kata dan huruf kecil. Fungsi filter kata umum akan membantu kita menyaring bagian yang
tidak bersih. Mari kita buat satu di daftar berikut.
Kata-kata berhenti bahasa Inggris akan menjadi yang pertama meninggalkan data kami. Kode
berikut akan memberi kita kata-kata berhenti ini:
Dengan semua komponen yang diperlukan, mari kita lihat fungsi pemrosesan data
pertama kami dalam daftar berikut.
dapat membaginya menjadi kalimat atau kata, Anda dapat membaginya dengan spasi dan
tanda baca, atau Anda dapat mempertimbangkan karakter lain, dan seterusnya. Di sini kami
memilih tokenizer kata NLTK standar. Tokenizer kata ini sederhana; yang dilakukannya
hanyalah membagi teks menjadi beberapa istilah jika ada spasi di antara kata -kata tersebut.
Kami kemudian huruf kecil vektor dan memfilter kata-kata berhenti. Perhatikan bagaimana
urutan itu penting di sini; kata berhenti di awal kalimat tidak akan difilter jika kita terlebih
dahulu memfilter kata berhenti sebelum huruf kecil. Misalnya dalam "Saya suka Game of
Thrones", "Saya" tidak akan ditulis dengan huruf kecil dan karenanya tidak akan disaring. Kami
kemudian membuat matriks kata (term-document matrix) dan daftar yang berisi semua kata.
Perhatikan bagaimana kami memperluas daftar tanpa memfilter ganda; dengan cara ini kita
dapat membuat histogram pada kemunculan kata selama eksplorasi data. Mari jalankan
fungsi untuk dua kategori topik kita. Gambar 8.15 menunjukkan vektor kata pertama dari
kategori “datascience”.
Gambar 8.15 Vektor kata pertama dari kategori “datascience” setelah percobaan
pengolahan data pertama
Ini pasti terlihat tercemar: tanda baca disimpan sebagai istilah terpisah dan beberapa kata
bahkan belum dipisah. Eksplorasi data lebih lanjut harus mengklarifikasi beberapa hal untuk
kita.
8.3.5 Langkah 4: Eksplorasi data
Kami sekarang memiliki semua persyaratan kami terpisah, tetapi ukuran data yang
tipis menghalangi kami untuk memahami dengan baik apakah itu cukup bersih untuk
penggunaan sebenarnya. Dengan melihat satu vektor, kita sudah menemukan beberapa
masalah: beberapa kata belum dipisahkan dengan benar dan vektor berisi banyak istilah
karakter tunggal. Istilah karakter tunggal mungkin merupakan pembeda topik yang baik dalam
kasus tertentu. Misalnya, teks ekonomi akan memuat lebih banyak tanda $, £, dan ¤ daripada
teks medis. Tetapi dalam kebanyakan kasus istilah satu karakter ini tidak berguna. Pertama,
mari kita lihat distribusi frekuensi istilah kita.
Dengan menggambar histogram dari distribusi frekuensi (gambar 8.16) kami segera
menyadari bahwa sebagian besar istilah kami hanya muncul dalam satu dokumen. Istilah
kemunculan tunggal seperti ini disebut hapax, dan dari segi model istilah tersebut tidak
berguna karena satu kemunculan fitur tidak pernah cukup untuk membuat model yang andal.
Ini adalah kabar baik bagi kita; memotong hapax ini akan secara signifikan mengecilkan data
kami tanpa merusak model akhir kami. Mari kita lihat beberapa istilah kemunculan tunggal
ini.
Istilah yang kami lihat di gambar 8.17 masuk akal, dan jika kami memiliki lebih banyak data,
istilah tersebut kemungkinan akan lebih sering muncul.
Gambar 8.16 Histogram frekuensi istilah ini menunjukkan matriks istilah "ilmu data" dan
"permainan singgasana" memiliki lebih dari 3.000 istilah yang muncul sekali.
Gambar 8.17 Istilah kemunculan tunggal “ilmu data” dan “permainan singgasana”
(hapaxes)
Banyak dari istilah ini adalah ejaan yang salah dari yang berguna, seperti: Jaimie adalah
Jaime (Lannister), Milisandre adalah Melisandre, dan seterusnya. Tesaurus khusus Game of
Thrones yang layak dapat membantu kami menemukan dan mengganti kesalahan ejaan ini
dengan algoritme pencarian fuzzy. Ini membuktikan pembersihan data dalam penambangan
teks dapat berlangsung tanpa batas waktu jika Anda menginginkannya; menjaga upaya dan
hasil seimbang sangat penting di sini.
Sekarang mari kita lihat kata-kata yang paling sering.
Gambar 8.18 menunjukkan hasil meminta 20 kata paling umum teratas untuk setiap kategori.
Gambar 8.18 Top 20 kata paling sering untuk postingan “data science” dan “game of
thrones”.
Sekarang ini terlihat menggembirakan: beberapa kata umum memang tampak spesifik
untuk topiknya. Kata-kata seperti “data”, “sains”, dan “musim” cenderung menjadi pembeda
yang baik. Hal penting lainnya yang perlu diperhatikan adalah banyaknya istilah karakter
Ilmu Data (Data Science) – Dr. Joseph Santoso
232
tunggal seperti “.” Dan ","; kami akan menyingkirkan ini. Dengan pengetahuan tambahan ini,
mari kita merevisi skrip persiapan data kita.
8.3.6 Langkah 3 ditinjau kembali: Persiapan data diadaptasi
Eksplorasi data singkat ini telah menarik perhatian kita pada beberapa perubahan
nyata yang dapat kita lakukan untuk menyempurnakan teks kita. Satu lagi yang penting adalah
membendung istilah.
Daftar berikut menunjukkan algoritma stemming sederhana yang disebut “snowball
stemming.” Stemmer bola salju ini bisa bahasa tertentu, jadi kami akan menggunakan bahasa
Inggris; namun, ini mendukung banyak bahasa.
(\w), jadi tidak ada lagi karakter khusus atau tanda baca. Kami juga menerapkan kata stemmer
dan menghapus daftar kata berhenti tambahan. Dan, semua hapax dihilangkan di bagian akhir
karena semuanya harus di-stem terlebih dahulu. Mari jalankan persiapan data kita lagi. Jika
kami melakukan analisis eksplorasi yang sama seperti sebelumnya, kami akan melihatnya
lebih masuk akal, dan kami tidak memiliki hapax lagi.
Mari kita ambil lagi 20 kata teratas dari setiap kategori (lihat gambar 8.19).
Gambar 8.19 Top 20 kata yang paling sering muncul di postingan Reddit “data science” dan
“game of thrones” setelah persiapan data
Kita dapat melihat pada Gambar 8.19 bagaimana kualitas data meningkat secara luar
biasa. Perhatikan juga bagaimana kata-kata tertentu dipersingkat karena stemming yang kita
terapkan. Misalnya, "sains" dan "sains" telah menjadi "sains;" "kursus" dan "kursus" telah
menjadi "kursus", dan seterusnya. Istilah yang dihasilkan bukan kata-kata yang sebenarnya
tetapi masih dapat ditafsirkan. Jika Anda bersikeras pada istilah Anda tetap kata -kata yang
sebenarnya, lemmatization akan menjadi cara untuk pergi.
Dengan proses pembersihan data “selesai” (komentar: latihan pembersihan
penambangan teks hampir tidak pernah dapat diselesaikan sepenuhnya), yang tersisa
hanyalah beberapa transformasi data untuk mendapatkan data dalam format kantong kata -
kata. Pertama, mari kita beri label pada semua data kita dan juga buat sampel 100
pengamatan per kategori, seperti yang ditunjukkan pada daftar berikut.
Sampel holdout akan digunakan untuk pengujian akhir model kami dan pembuatan
matriks kebingungan. Matriks konfusi adalah cara untuk memeriksa seberapa baik kinerja
model pada data yang sebelumnya tidak terlihat. Matriks menunjukkan berapa banyak
observasi yang diklasifikasikan dengan benar dan salah.
Sebelum membuat atau melatih dan menguji data, kita perlu melakukan satu langkah
terakhir: menuangkan data ke dalam format kumpulan kata-kata di mana setiap istilah diberi
label "Benar" atau "Salah" bergantung pada kehadirannya di pos tertentu. Kami juga perlu
melakukan ini untuk sampel ketidakhadiran yang tidak berlabel.
Data yang telah kita siapkan sekarang berisi setiap istilah untuk setiap vektor, seperti
yang ditunjukkan pada gambar 8.20.
Gambar 8.20 Kumpulan kata-kata biner yang siap untuk dimodelkan adalah data yang
sangat jarang.
Kami membuat matriks yang besar namun jarang, memungkinkan kami untuk
menerapkan teknik dari bab 5 jika terlalu besar untuk ditangani di mesin kami. Namun, dengan
tabel sekecil itu, tidak perlu untuk itu sekarang dan kami dapat melanjutkan untuk mengocok
dan membagi data menjadi set pelatihan dan pengujian.
Sementara bagian terbesar dari data Anda harus selalu digunakan untuk pelatihan
model, ada rasio pemisahan yang optimal. Di sini kami memilih pembagian 3-1, tetapi jangan
ragu untuk memainkannya. Semakin banyak pengamatan yang Anda miliki, semakin banyak
kebebasan yang Anda miliki di sini. Jika Anda memiliki sedikit pengamatan, Anda perlu
mengalokasikan lebih banyak untuk melatih model. Kami sekarang siap untuk beralih ke
bagian yang paling bermanfaat: analisis data.
8.3.7 Langkah 5: Analisis data
Untuk analisis kami, kami akan menyesuaikan dua algoritme klasifikasi ke data kami:
Naïve Bayes dan pohon keputusan. Naïve Bayes telah dijelaskan di bab 3 dan pohon keputusan
di awal bab ini. Pertama mari kita uji kinerja pengklasifikasi Naïve Bayes kita. NLTK hadir
dengan pengklasifikasi, tetapi jangan ragu untuk menggunakan algoritme dari paket lain
seperti SciPy.
Dengan pengklasifikasi yang dilatih, kita dapat menggunakan data uji untuk mengukur akurasi
secara keseluruhan.
Akurasi pada data uji diperkirakan lebih besar dari 90%, seperti yang terlihat pada
gambar 8.21. Akurasi klasifikasi adalah jumlah pengamatan yang diklasifikasikan dengan benar
sebagai persentase dari jumlah total pengamatan. Harap diperhatikan, bahwa ini bisa berbeda
dalam kasus Anda jika Anda menggunakan data yang berbeda.
Itu angka yang bagus. Sekarang kita bisa bersandar dan rileks, bukan? Tidak terlalu. Mari kita
uji lagi pada 200 sampel ketidakhadiran pengamatan dan kali ini buat matriks kebingungan.
Matriks konfusi pada gambar 8.22 menunjukkan kepada kita bahwa 97% mungkin
berlebihan karena kita memiliki 28 (23 + 5) kasus kesalahan klasifikasi. Sekali lagi, ini bisa
berbeda dengan data Anda jika Anda mengisi sendiri file SQLite.
Dua puluh delapan kesalahan klasifikasi berarti kami memiliki akurasi 86% pada sampel
ketidakhadiran. Ini perlu dibandingkan dengan menetapkan pos baru secara acak ke grup
"datascience" atau "gameofthrones". Jika kami menetapkannya secara acak, kami dapat
mengharapkan akurasi 50%, dan model kami tampaknya berperforma lebih baik dari itu. Mari
kita lihat apa yang digunakannya untuk menentukan kategori dengan menggali fitur model
yang paling informatif.
Gambar 8.23 menunjukkan 20 istilah teratas yang mampu membedakan kedua kategori
tersebut.
Istilah "data" diberikan bobot yang berat dan tampaknya menjadi indikator terpenting
apakah suatu topik termasuk dalam kategori ilmu data. Istilah seperti "adegan", "musim",
"raja", "tv", dan "bunuh" adalah indikasi yang baik bahwa topiknya adalah Game of Thrones,
bukan ilmu data. Semua hal ini sangat masuk akal, sehingga model lulus baik akurasi maupun
kewarasan. Naïve Bayes bekerja dengan baik, jadi mari kita lihat pohon keputusan dalam
daftar berikut.
Seperti terlihat pada gambar 8.24, akurasi yang dijanjikan adalah 93%. Kita sekarang
tahu lebih baik daripada hanya mengandalkan tes tunggal ini, jadi sekali lagi kita beralih ke
matriks kebingungan pada kumpulan data kedua, seperti yang ditunjukkan pada gambar 8.25.
Gambar 8.25 menunjukkan cerita yang berbeda. Pada 200 pengamatan sampel
ketidakhadiran ini, model pohon keputusan cenderung mengklasifikasikan dengan baik saat
postingan tentang Game of Thrones tetapi gagal total saat dihadapkan pada postingan ilmu
data. Tampaknya model tersebut lebih menyukai Game of Thrones, dan dapatkah Anda
menyalahkannya? Mari kita lihat model sebenarnya, meskipun dalam hal ini kita akan
menggunakan Naïve Bayes sebagai model terakhir kita.
Seperti namanya, pohon keputusan memiliki model seperti pohon, seperti yang ditunjukkan
pada Gambar 8.26.
Naïve Bayes mempertimbangkan semua istilah dan memiliki bobot yang dikaitkan,
tetapi model pohon keputusan melewatinya secara berurutan, mengikuti jalur dari akar ke
Ilmu Data (Data Science) – Dr. Joseph Santoso
239
cabang dan daun terluar. Gambar 8.26 hanya menunjukkan empat lapisan teratas, dimulai
dengan istilah "data". Jika "data" ada di postingan, itu selalu ilmu data. Jika "data" tidak dapat
ditemukan, ia akan memeriksa istilah "pelajari", dan seterusnya. Kemungkinan alasan
mengapa pohon keputusan ini tidak bekerja dengan baik adalah kurangnya pemangkasan.
Ketika sebuah pohon keputusan dibangun, ia memiliki banyak daun, seringkali terlalu banyak.
Sebuah pohon kemudian dipangkas ke tingkat tertentu untuk meminimalkan overfitting.
Keuntungan besar dari pohon keputusan adalah efek interaksi implisit antara kata-kata yang
diperhitungkan saat membangun cabang. Ketika beberapa istilah bersama membuat
klasifikasi yang lebih kuat daripada istilah tunggal, pohon keputusan akan mengungguli Naïve
Bayes. Kami tidak akan membahas detailnya di sini, tetapi pertimbangkan ini sebagai salah
satu langkah selanjutnya yang dapat Anda ambil untuk menyempurnakan model.
Kami sekarang memiliki dua model klasifikasi yang memberi kami wawasan tentang
perbedaan dua konten subreddit. Langkah terakhir adalah membagikan informasi yang baru
ditemukan ini kepada orang lain.
8.3.8 Langkah 6: Presentasi dan otomatisasi
Sebagai langkah terakhir, kita perlu menggunakan apa yang telah kita pelajari dan
mengubahnya menjadi aplikasi yang berguna atau mempresentasikan hasil kita kepada orang
lain. Bab terakhir dari buku ini membahas membangun sebuah aplikasi interaktif, karena ini
adalah sebuah proyek itu sendiri. Untuk saat ini kami akan puas dengan cara yang bagus untuk
menyampaikan temuan kami. Grafik yang bagus atau, lebih baik lagi, grafik interaktif, dapat
menarik perhatian; itu adalah lapisan gula pada kue presentasi. Meskipun mudah dan
menggoda untuk merepresentasikan angka-angka seperti itu atau grafik batang paling banyak,
alangkah baiknya untuk melangkah lebih jauh.
Misalnya, untuk merepresentasikan model Naïve Bayes, kita dapat menggunakan
grafik gaya (gambar 8.27), di mana gelembung dan ukuran tautan menunjukkan seberapa kuat
keterkaitan sebuah kata dengan subreddit “game of thrones” atau “ilmu data”. Perhatikan
bagaimana kata-kata pada gelembung sering terpotong; ingat ini karena stemming yang kami
terapkan.
Gambar 8.27 Grafik gaya interaktif dengan 20 suku signifikan Naïve Bayes teratas dan
bobotnya
Ilmu Data (Data Science) – Dr. Joseph Santoso
240
Meskipun gambar 8.27 itu sendiri statis, Anda dapat membuka file HTML
"forceGraph.html" untuk menikmati efek grafik gaya d3.js seperti yang dijelaskan sebelumnya
di bab ini. d3.js berada di luar cakupan buku ini, tetapi Anda tidak memerlukan pengetahuan
mendalam tentang d3.js untuk menggunakannya. Serangkaian contoh ekstensif dapat
digunakan dengan sedikit penyesuaian pada kode yang disediakan di
https://github.com/mbostock/d3/wiki/Gallery. Yang Anda butuhkan hanyalah akal sehat dan
sedikit pengetahuan tentang JavaScript. Kode untuk contoh grafik gaya dapat ditemukan di
http://bl.ocks.org/mbostock/4062045.
Kami juga dapat mewakili pohon keputusan kami dengan cara yang agak orisinal. Kita
bisa menggunakan versi mewah dari diagram pohon yang sebenarnya, tetapi diagram
sunburst berikut ini lebih orisinal dan sama-sama menyenangkan untuk digunakan. Gambar
8.28 menunjukkan lapisan atas diagram sunburst. Dimungkinkan untuk memperbesar dengan
mengeklik segmen lingkaran. Anda dapat memperkecil kembali dengan mengklik lingkaran
tengah. Kode untuk contoh ini dapat ditemukan di http://bl.ocks.org/metmajer/5480307.
Gambar 8.28 Diagram Sunburst dibuat dari empat cabang teratas model pohon keputusan
Ilmu Data (Data Science) – Dr. Joseph Santoso
241
Menampilkan hasil Anda dengan cara yang orisinal dapat menjadi kunci keberhasilan
proyek. Orang tidak pernah menghargai upaya yang Anda lakukan untuk mencapai hasil Anda
jika Anda tidak dapat mengomunikasikannya dan itu berarti bagi mereka. Visualisasi data asli
di sana-sini pasti membantu dalam hal ini.
8.4 RINGKASAN
• Penambangan teks banyak digunakan untuk hal-hal seperti identifikasi entitas, deteksi
plagiarisme, identifikasi topik, terjemahan, deteksi penipuan, pemfilteran spam, dan
banyak lagi.
• Python memiliki perangkat yang matang untuk penambangan teks yang disebut NLTK,
atau perangkat bahasa alami. NLTK bagus untuk bermain-main dan mempelajari tali; untuk
aplikasi kehidupan nyata, bagaimanapun, Scikit-learn biasanya dianggap lebih "siap
produksi". Scikit-learn banyak digunakan di bab-bab sebelumnya.
• Penyusunan data tekstual lebih intensif dari pada penyiapan data numerik dan melibatkan
teknik ekstra, seperti
– Stemming—Memotong akhir kata dengan cara yang cerdas sehingga dapat dicocokkan
dengan beberapa versi konjugasi atau jamak dari kata tersebut.
– Lemmatisasi — Seperti stemming, ini dimaksudkan untuk menghilangkan ganda, tetapi
tidak seperti stemming, ini melihat arti kata.
– Hentikan pemfilteran kata—Kata-kata tertentu muncul terlalu sering sehingga tidak
berguna dan memfilternya dapat meningkatkan model secara signifikan. Kata henti sering
kali spesifik untuk korpus.
– Tokenisasi—Memotong teks menjadi beberapa bagian. Token dapat berupa kata
tunggal, kombinasi kata (n-gram), atau bahkan seluruh kalimat.
– Penandaan POS—Penandaan sebagian ucapan. Terkadang berguna untuk mengetahui
apa fungsi kata tertentu dalam sebuah kalimat untuk memahaminya dengan lebih baik.
• Dalam studi kasus kami, kami berusaha membedakan postingan Reddit di "Game of
Thrones" versus postingan di "ilmu data". Dalam upaya ini kami mencoba Naïve Bayes dan
pengklasifikasi pohon keputusan. Naïve Bayes menganggap semua fitur tidak bergantung
satu sama lain; pengklasifikasi pohon keputusan mengasumsikan ketergantungan,
memungkinkan untuk model yang berbeda.
• Dalam contoh kita, Naïve Bayes menghasilkan model yang lebih baik, tetapi sangat sering
pengklasifikasi pohon keputusan melakukan pekerjaan yang lebih baik, biasanya ketika
lebih banyak data tersedia.
• Kami menentukan perbedaan kinerja menggunakan matriks kebingungan yang kami
hitung setelah menerapkan kedua model pada data baru (namun berlabel).
• Saat menyajikan temuan kepada orang lain, menyertakan visualisasi data menarik yang
mampu menyampaikan hasil Anda dengan cara yang mudah diingat dapat membantu.
BAB 9
VISUALISASI DATA KE PENGGUNA AKHIR
Gambar 9.1 Set data obat-obatan farmasi dibuka di Excel: 10 baris pertama data stok
ditingkatkan dengan variabel sensitivitas cahaya
Ilmu Data (Data Science) – Dr. Joseph Santoso
244
Seperti yang Anda lihat, informasinya adalah data deret waktu selama setahun penuh
pergerakan stok, sehingga setiap obat memiliki 365 entri dalam kumpulan data. Meskipun
studi kasus sudah ada dan obat-obatan dalam kumpulan data adalah nyata, nilai variabel lain
yang disajikan di sini dibuat secara acak, karena data asli diklasifikasikan. Juga, kumpulan data
terbatas pada 29 obat, sedikit lebih dari 10.000 baris data. Meskipun orang membuat laporan
menggunakan crossfilter.js (library MapReduce Javascript) dan dc.js (library dasbor Javascript)
dengan lebih dari satu juta baris data, sebagai contoh Anda akan menggunakan sebagian kecil
dari jumlah ini. Selain itu, tidak disarankan untuk memuat seluruh database Anda ke dalam
browser pengguna; browser akan membeku saat memuat, dan jika terlalu banyak data,
browser bahkan akan macet. Biasanya data dihitung sebelumnya di server dan sebagian
diminta menggunakan, misalnya, layanan REST.
Untuk mengubah data ini menjadi dasbor sebenarnya, Anda memiliki banyak opsi dan
Anda dapat menemukan ikhtisar singkat tentang alat tersebut nanti di bab ini. Di antara semua
opsi, untuk buku ini kami memutuskan untuk menggunakan dc.js, yang merupakan
perkawinan silang antara pustaka JavaScript MapReduce Crossfilter dan pustaka visualisasi
data d3.js. Crossfilter dikembangkan oleh Square Register, sebuah perusahaan yang
menangani transaksi pembayaran; itu sebanding dengan PayPal tetapi fokusnya adalah pada
seluler. Square mengembangkan Crossfilter untuk memungkinkan pelanggan mereka
memotong dan memotong riwayat pembayaran mereka dengan sangat cepat. Crossfilter
bukan satu-satunya library JavaScript yang mampu memproses Map-Reduce, tetapi yang pasti
melakukan tugasnya, open source, bebas digunakan, dan dikelola oleh perusahaan mapan
(Square). Contoh alternatif untuk Cross-filter adalah Map.js, Meguro, dan Underscore.js.
JavaScript mungkin tidak dikenal sebagai bahasa pemecah data, tetapi pustaka ini memang
memberi peramban web pukulan ekstra jika data perlu ditangani di peramban. Kami tidak
akan masuk ke bagaimana Java-Script dapat digunakan untuk perhitungan besar-besaran
dalam kerangka kerja terdistribusi kolaboratif, tetapi pasukan kerdil dapat menumbangkan
raksasa.
d3.js dapat dengan aman disebut perpustakaan visualisasi data JavaScript paling
serbaguna yang tersedia pada saat penulisan; itu dikembangkan oleh Mike Bostock sebagai
penerus perpustakaan Protovis-nya. Banyak pustaka JavaScript dibangun di atas d3.js. NVD3,
C3.js, xCharts, dan Dimple menawarkan hal yang kira-kira sama: lapisan abstraksi di atas d3.js,
yang mempermudah menggambar grafik sederhana. Mereka terutama berbeda dalam jenis
grafik yang mereka dukung dan desain standarnya. Jangan ragu untuk mengunjungi situs web
mereka dan temukan sendiri:
• NVD3 —http://nvd3.org/
• C3.js—http://c3js.org/
• xChart—http://tenxer.github.io/xcharts/
• Lesung Pipi—http://dimplejs.org/
Banyak pilihan yang ada. Jadi mengapa dc.js?
Alasan utama: dibandingkan dengan apa yang diberikannya, dasbor interaktif tempat
mengklik satu grafik akan membuat tampilan terfilter pada grafik terkait, dc.js secara
mengejutkan mudah diatur. Sangat mudah bahwa Anda akan memiliki contoh kerja pada akhir
Ilmu Data (Data Science) – Dr. Joseph Santoso
245
bab ini. Sebagai seorang ilmuwan data, Anda telah mencurahkan cukup waktu untuk analisis
aktual Anda; dasbor yang mudah diterapkan adalah hadiah selamat datang. Untuk
mendapatkan gambaran tentang apa yang akan Anda buat, Anda dapat mengunjungi situs
web berikut, http://dc-js.github.io/dc.js/, dan gulir ke bawah ke contoh NASDAQ, ditunjukkan
pada gambar 9.2.
Klik di sekitar dasbor dan lihat grafik bereaksi dan berinteraksi saat Anda memilih dan
membatalkan pilihan titik data. Namun, jangan menghabiskan waktu terlalu lama; saatnya
untuk membuat ini sendiri. Seperti yang dinyatakan sebelumnya, dc.js memiliki dua prasyarat
besar: d3.js dan crossfilter.js. d3.js memiliki kurva belajar yang curam dan ada beberapa buku
tentang topik yang layak dibaca jika Anda tertarik untuk menyesuaikan sepenuhnya visualisasi
Anda. Tetapi untuk bekerja dengan dc.js, tidak diperlukan pengetahuan tentangnya, jadi kami
tidak akan membahasnya di buku ini. Crossfilter.js adalah masalah lain; Anda harus memiliki
sedikit pemahaman tentang perpustakaan MapReduce ini untuk mengaktifkan dan
menjalankan dc.js pada data Anda. Tapi karena konsep MapReduce sendiri bukanlah hal baru,
ini akan terjadi berjalan lancar.
mengirim banyak sekali data melalui internet atau bahkan jaringan internal Anda, karena
alasan berikut:
• Mengirim sejumlah besar data akan membebani jaringan hingga mengganggu pengguna
lain.
• Browser berada di sisi penerima, dan saat memuat data, browser akan membeku untuk
sementara. Untuk sejumlah kecil data, ini tidak terlalu mencolok, tetapi saat Anda mulai
melihat 100.000 baris, ini bisa menjadi jeda yang terlihat. Saat Anda melewati 1.000.000
baris, tergantung pada lebar data Anda, browser Anda bisa menyerah pada Anda.
Kesimpulan: ini adalah latihan keseimbangan. Untuk data yang Anda kirim, ada Crossfilter
untuk menanganinya untuk Anda setelah tiba di browser. Dalam studi kasus kami, apoteker
meminta server pusat untuk data stok tahun 2015 untuk 29 obat yang sangat dia minati. Kami
sudah melihat datanya, jadi mari selami aplikasi itu sendiri.
9.2.1 Menyiapkan semuanya
Saatnya membangun aplikasi sebenarnya, dan bahan-bahan dari aplikasi dc.js kecil kita
adalah sebagai berikut:
• JQuery—Untuk menangani interaktivitas
• Crossfilter.js —Pustaka MapReduce dan prasyarat untuk dc.js
• d3.js—Pustaka visualisasi data yang populer dan prasyarat untuk dc.js
• dc.js—Pustaka visualisasi yang akan Anda gunakan untuk membuat dasbor interaktif
• Bootstrap—Pustaka tata letak yang banyak digunakan yang akan Anda gunakan untuk
membuat semuanya terlihat lebih baik
Anda hanya akan menulis tiga file:
• index.html—Halaman HTML yang berisi aplikasi Anda
• application.js—Untuk menampung semua kode JavaScript yang akan Anda tulis
• application.css—Untuk CSS Anda sendiri
Selain itu, Anda harus menjalankan kode kami di server HTTP. Anda dapat melalui upaya
menyiapkan server LAMP (Linux, Apache, MySQL, PHP), WAMP (Windows, Apache, MySQL,
PHP), atau XAMPP (Cross Environment, Apache, MySQL, PHP, Perl). Namun demi
kesederhanaan, kami tidak akan menyiapkan salah satu dari server tersebut di sini. Sebaliknya
Anda dapat melakukannya dengan satu perintah Python. Gunakan alat baris perintah Anda
(Linux shell atau Windows CMD) dan pindah ke folder yang berisi index.html Anda (setelah
ada). Anda harus menginstal Python untuk bab-bab lain dari buku ini sehingga perintah berikut
harus meluncurkan server HTTP Python di localhost Anda.
Seperti yang Anda lihat pada gambar 9.3, server HTTP dimulai pada port localhost
8000. Di browser Anda ini diterjemahkan menjadi “localhost:8000”; menempatkan
"0.0.0.0:8000" tidak akan berfungsi.
Ilmu Data (Data Science) – Dr. Joseph Santoso
247
Pastikan semua file yang diperlukan tersedia di folder yang sama dengan index.html Anda.
Anda dapat mengunduhnya dari situs web Manning atau dari situs web pembuatnya.
• dc.css dan dc.min.js—https://dc-js.github.io/dc.js/
• d3.v3.min.js—http://d3js.org/
• crossfilter.min.js—http://square.github.io/crossfilter/
Sekarang kita tahu cara menjalankan kode yang akan kita buat, jadi mari kita lihat halaman
index.html, yang ditampilkan di daftar berikut.
Tidak ada kejutan di sini. Header berisi semua pustaka CSS yang akan Anda gunakan,
jadi kami akan memuat JavaScript di bagian akhir badan HTML. Menggunakan penangan
onload JQuery, aplikasi Anda akan dimuat saat sisa halaman sudah siap. Anda memulai dengan
dua placeholder tabel: satu untuk menampilkan seperti apa data input Anda, <div id="input-
table"></div>, dan yang lainnya akan digunakan dengan Crossfilter untuk menampilkan tabel
yang difilter, <div id="filteredtable"></div>. Beberapa kelas CSS Bootstrap digunakan, seperti
"well", "container", sistem grid Bootstrap dengan “row” dan “col-xx-xx”, dan seterusnya.
Mereka membuat semuanya terlihat lebih bagus tetapi tidak wajib. Informasi lebih lanjut
tentang kelas CSS Bootstrap dapat ditemukan di situs web mereka di
http://getbootstrap.com/css/.
Sekarang setelah Anda menyiapkan HTML, saatnya menampilkan data Anda di layar. Untuk
ini, alihkan perhatian Anda ke file application.js yang Anda buat. Pertama, kami membungkus
seluruh kode "menjadi" dalam penangan onload JQuery.
Sekarang kami yakin aplikasi kami akan dimuat hanya ketika semuanya sudah siap. Ini penting
karena kami akan menggunakan pemilih JQuery untuk memanipulasi HTML. Saatnya memuat
data.
Anda belum memiliki layanan REST yang siap dan menunggu Anda, jadi sebagai contoh Anda
akan mengambil data dari file .csv. File ini tersedia untuk diunduh di situs web Manning. d3.js
menawarkan fungsi yang mudah untuk itu. Setelah memuat data, Anda menyerahkannya ke
fungsi aplikasi utama Anda di fungsi callback d3.csv.
Terlepas dari fungsi utama, Anda memiliki fungsi CreateTable, yang akan Anda
gunakan untuk membuat tabel Anda, seperti yang ditunjukkan pada daftar berikut.
Anda memulai dengan menampilkan data Anda di layar, tetapi sebaiknya tidak
semuanya; hanya lima entri pertama yang dapat melakukannya, seperti yang ditunjukkan
pada gambar 9.4. Anda memiliki variabel tanggal di data Anda dan Anda ingin memastikan
bahwa Crossfilter akan mengenalinya nanti, jadi pertama-tama Anda menguraikannya dan
membuat variabel baru bernama Hari. Anda menunjukkan yang asli, Tanggal, untuk muncul di
tabel untuk saat ini, tetapi nanti Anda akan menggunakan Hari untuk semua perhitungan
Anda.
Gambar 9.4 Tabel input obat ditampilkan di browser: lima baris pertama
Inilah yang Anda dapatkan: hal yang sama yang Anda lihat di Excel sebelumnya.
Sekarang setelah Anda mengetahui dasar-dasarnya berfungsi, Anda akan memasukkan
Crossfilter ke dalam persamaan.
9.2.2 Unleashing Crossfilter untuk memfilter kumpulan data obat
Sekarang mari masuk ke Crossfilter untuk menggunakan pemfilteran dan MapReduce.
Untuk selanjutnya Anda dapat meletakkan semua kode yang akan datang setelah kode bagian
9.2.1 di dalam fungsi main(). Hal pertama yang perlu Anda lakukan adalah mendeklarasikan
instance Crossfilter dan memulainya dengan data Anda.
Dari sini Anda bisa mulai bekerja. Pada contoh ini Anda dapat mendaftarkan dimensi, yang
merupakan kolom dari tabel Anda. Saat ini Crossfilter dibatasi hingga 32 dimensi. Jika Anda
menangani data yang lebih lebar dari 32 dimensi, Anda harus mempertimbangkan untuk
mempersempitnya sebelum mengirimkannya ke browser. Mari buat dimensi pertama kita,
dimensi nama obat:
Dimensi pertama Anda adalah nama obat-obatan, dan Anda sudah dapat menggunakan ini
untuk memfilter set data Anda dan menampilkan data yang difilter menggunakan fungsi
CreateTable()kami.
Anda hanya menampilkan lima pengamatan teratas (gambar 9.5); Anda memiliki 365 karena
Anda memiliki hasil dari satu obat selama satu tahun penuh.
Gambar 9.5 Data tersaring pada nama obat Grazax 75 000 SQ-T
Tabel ini tidak terlihat disortir tetapi memang begitu. Fungsi top() mengurutkannya
berdasarkan nama obat. Karena Anda hanya memilih satu obat, itu tidak masalah. Menyortir
tanggal cukup mudah menggunakan variabel Hari baru Anda. Mari daftarkan dimensi lain,
dimensi tanggal:
Hasilnya sedikit lebih menarik, seperti yang ditunjukkan pada gambar 9.6.
Gambar 9.6 Data yang difilter berdasarkan nama obat Grazax 75 000 SQ-T dan disortir
berdasarkan hari
Tabel ini memberi Anda tampilan jendela dari data Anda, tetapi belum meringkasnya
untuk Anda. Di sinilah kapabilitas Crossfilter MapReduce berperan. Katakanlah Anda ingin
mengetahui berapa banyak pengamatan yang Anda lakukan per obat. Logika menyatakan
Ilmu Data (Data Science) – Dr. Joseph Santoso
252
bahwa Anda harus mendapatkan angka yang sama untuk setiap obat: 365, atau 1 pengamatan
per hari pada tahun 2015.
Crossfilter hadir dengan dua fungsi MapReduce: reduceCount() dan reduceSum(). Jika Anda
ingin melakukan sesuatu selain menghitung dan menjumlahkan, Anda perlu menulis fungsi
pengurangan untuk itu. Variabel countPerMed sekarang berisi data yang dikelompokkan
menurut dimensi obat-obatan dan jumlah garis untuk setiap obat dalam bentuk kunci dan
nilai. Untuk membuat tabel, Anda perlu mengalamatkan kunci variabel alih-alih medName dan
nilai untuk hitungan (gambar 9.7).
Gambar 9.7 Tabel MapReduced dengan obat sebagai grup dan jumlah baris data sebagai
nilainya
• Fungsi reduceInit()—Yang ini menetapkan nilai awal untuk semua yang dihitung. Untuk
penjumlahan dan hitungan titik awal yang paling logis adalah 0.
Mari kita lihat masing-masing fungsi pengurangan yang Anda perlukan sebelum mencoba
memanggil metode Crossfilter .reduce() , yang menggunakan ketiga komponen ini sebagai
argumen. Fungsi pengurangan kustom memerlukan tiga komponen: inisiasi, fungsi tambah,
dan fungsi hapus. Fungsi pengurangan awal akan menetapkan nilai awal dari objek p:
Seperti yang Anda lihat, fungsi pengurangan itu sendiri mengambil dua argumen. Ini secara
otomatis diberikan kepada mereka dengan metode Crossfilter .reduce() :
• p adalah objek yang berisi situasi kombinasi sejauh ini; itu bertahan selama semua
pengamatan. Variabel ini melacak jumlah dan hitungan untuk Anda dan dengan demikian
mewakili tujuan Anda, hasil akhir Anda.
• v mewakili catatan data input dan semua variabelnya tersedia untuk Anda. Berlawanan
dengan p, itu tidak bertahan tetapi digantikan oleh baris data baru setiap kali fungsi
dipanggil. ReduceInit() dipanggil hanya sekali, tetapi reduceAdd() dipanggil setiap kali
record ditambahkan dan reduceRemove() setiap kali satu baris data dihapus.
• Fungsi reduceInit(), di sini disebut reduceInitAvg() karena Anda akan menghitung rata -
rata, pada dasarnya menginisialisasi objek p dengan mendefinisikan komponennya
(jumlah, jumlah, dan rata-rata) dan menyetel nilai awalnya. Mari kita lihat
penguranganAddAvg():
reduceAddAvg() mengambil argumen p dan v yang sama tetapi sekarang Anda benar-benar
menggunakan v; Anda tidak memerlukan data Anda untuk menyetel nilai awal p dalam kasus
ini, meskipun Anda bisa jika mau. Stok Anda dijumlahkan untuk setiap catatan yang Anda
tambahkan, lalu rata-rata dihitung berdasarkan jumlah akumulasi dan jumlah catatan:
Fungsi reduceRemoveAvg() terlihat mirip tetapi kebalikannya: saat record dihapus, hitungan
dan jumlah diturunkan. Rata-rata selalu menghitung dengan cara yang sama, jadi tidak perlu
mengubah rumus itu. Momen kebenaran: Anda menerapkan fungsi MapReduce buatan
sendiri ini ke kumpulan data:
Perhatikan bagaimana nama variabel output Anda berubah dari value menjadi
value.stockAvg. Karena Anda mendefinisikan sendiri fungsi pengurangan, Anda dapat
menampilkan banyak variabel jika Anda mau. Oleh karena itu, nilai telah berubah menjadi
objek yang berisi semua variabel yang Anda hitung; stockSum dan count juga ada di sana.
Hasilnya berbicara sendiri, seperti yang ditunjukkan pada gambar 9.8. Tampaknya kami telah
meminjam Cimalgex dari rumah sakit lain, dengan rata-rata stok negatif. Ini semua Crossfilter
yang perlu Anda ketahui untuk bekerja dengan dc.js, jadi mari lanjutkan dan tampilkan grafik
interaktif tersebut.
Kami memiliki pemformatan Bootstrap, tetapi elemen yang paling penting adalah tiga
tag <div> dengan ID dan tombol. Yang ingin Anda buat adalah representasi dari total stok dari
waktu ke waktu, <div id="StockOverTime"></div>, dengan kemungkinan memfilter obat-
obatan, <div id="StockPerMedicine"></div>, dan apakah sensitif terhadap cahaya atau tidak,
<div id="LightSensitiveStock"></div>. Anda juga menginginkan tombol untuk menyetel ulang
semua filter, <button class="btn btn-success">Setel Ulang Filter</button>. Elemen tombol
setel ulang ini tidak diperlukan, tetapi berguna.
Sekarang alihkan perhatian Anda kembali ke application.js. Di sini Anda dapat
menambahkan semua kode yang akan datang di fungsi main() Anda seperti sebelumnya.
Namun, ada satu pengecualian untuk aturan tersebut: dc.renderAll(); adalah perintah dc
untuk menggambar grafik. Anda perlu menempatkan perintah render ini hanya sekali, di
bagian bawah fungsi main() Anda. Grafik pertama yang Anda butuhkan adalah "total stok dari
waktu ke waktu", seperti yang ditunjukkan pada daftar berikut. Anda sudah memiliki dimensi
waktu yang dinyatakan, jadi yang Anda butuhkan hanyalah menjumlahkan stok Anda dengan
dimensi waktu.
Lihatlah semua yang terjadi di sini. Pertama, Anda perlu menghitung rentang sumbu x
sehingga dc.js akan mengetahui dari mana harus memulai dan mengakhiri bagan garis.
Kemudian bagan garis diinisialisasi dan dikonfigurasi. Metode yang paling tidak jelas di sini
adalah .group() dan .dimension(). .group() mengambil dimensi waktu dan mewakili sumbu x.
.dimension() adalah mitranya, yang mewakili sumbu y dan menggunakan data ringkasan Anda
sebagai input. Gambar 9.9 terlihat seperti bagan garis yang membosankan, tetapi tampilannya
bisa menipu.
Gambar 9.9 grafik dc.js: jumlah stok obat selama tahun 2015
Banyak hal berubah secara drastis setelah Anda memperkenalkan elemen kedua, jadi
mari buat bagan baris yang mewakili stok rata-rata per obat, seperti yang ditampilkan di daftar
berikutnya.
Ini seharusnya sudah tidak asing lagi karena merupakan representasi grafik dari tabel
yang Anda buat sebelumnya. Satu hal yang menarik: karena Anda menggunakan fungsi
pengurangan () yang ditentukan khusus kali ini, dc.js tidak tahu data apa yang harus diwakili.
Dengan metode .valueAccessor() Anda dapat menentukan p.value.stockAvg sebagai nilai
pilihan Anda. Warna font label bagan baris dc.js berwarna abu-abu; ini membuat bagan baris
Anda agak sulit dibaca. Anda dapat memperbaikinya dengan menimpa CSS-nya di file
application.css Anda:
Satu garis sederhana dapat membuat perbedaan antara grafik yang jelas dan tidak jelas
(gambar 9.10).
Ilmu Data (Data Science) – Dr. Joseph Santoso
258
Sekarang saat Anda memilih area di bagan garis, bagan baris secara otomatis
diadaptasi untuk mewakili data untuk periode waktu yang tepat. Sebaliknya, Anda dapat
memilih satu atau beberapa obat pada bagan baris, yang menyebabkan bagan garis
disesuaikan. Terakhir, mari kita tambahkan dimensi kepekaan cahaya sehingga apoteker
dapat membedakan antara stok obat peka cahaya dan yang tidak peka cahaya, seperti yang
ditunjukkan pada daftar berikut.
Kami belum memperkenalkan dimensi ringan, jadi Anda harus mendaftarkannya ke instans
Crossfilter Anda terlebih dahulu. Anda juga dapat menambahkan tombol setel ulang, yang
menyebabkan semua filter disetel ulang, seperti yang ditunjukkan pada daftar berikut.
Metode .filterAll() menghapus semua filter pada dimensi tertentu; dc.redraw- All()
kemudian secara manual memicu semua diagram dc untuk menggambar ulang. Hasil akhirnya
adalah dasbor interaktif (gambar 9.11), siap digunakan oleh apoteker kami untuk mengetahui
perilaku stoknya.
Gambar 9.11 Dashboard dc.js yang sepenuhnya interaktif tentang obat-obatan dan
stoknya di apotek rumah sakit
yang berkembang biak dengan pustaka JavaScript gratis untuk memplot data apa pun yang
Anda inginkan. Lanskapnya sangat besar:
• HighCharts—Salah satu pustaka grafik berbasis browser yang paling matang. Lisensi gratis
hanya berlaku untuk pengejaran nonkomersial. Jika Anda ingin menggunakannya dalam
konteks komersial, harganya berkisar antara $90 hingga $4000. Lihat
http://toko.highsoft.com/highcharts.html.
• Chartkick—Pustaka charting JavaScript untuk penggemar Ruby on Rails. Lihat http://ank-
ane.github.io/chartkick/.
• Google Charts—Pustaka charting gratis dari Google. Seperti banyak produk Google
lainnya, ini gratis untuk digunakan, bahkan secara komersial, dan menawarkan berbagai
macam grafik. Lihat https://developers.google.com/chart/.
• d3.js—Ini aneh karena ini bukan pustaka grafik tetapi pustaka visualisasi data.
Perbedaannya mungkin terdengar halus tetapi implikasinya tidak. Sedangkan pustaka
seperti HighCharts dan Google Charts dimaksudkan untuk menggambar bagan tertentu
yang telah ditentukan sebelumnya, d3.js tidak memberikan batasan seperti itu. d3.js saat
ini adalah perpustakaan visualisasi data JavaScript paling serbaguna yang tersedia. Anda
hanya perlu mengintip sekilas contoh interaktif di situs web resmi untuk memahami
perbedaan dari perpustakaan pembuat grafik biasa. Lihat http://d3js.org/.
Tentu saja, yang lain tersedia yang belum kami sebutkan. Anda juga bisa mendapatkan
perpustakaan visualisasi yang hanya datang dengan masa percobaan dan tidak ada edisi
komunitas gratis, seperti Wijmo, Kendo, dan FusionCharts. Mereka layak diperhatikan karena
mereka juga memberikan dukungan dan menjamin pembaruan rutin.
Tetapi mengapa atau kapan Anda bahkan mempertimbangkan untuk membangun
antarmuka Anda sendiri dengan HTML5 alih-alih menggunakan alternatif seperti
BusinessObjects SAP, SAS JMP, Tableau, Clickview, atau salah satu dari banyak lainnya?
Berikut beberapa alasannya:
• Tanpa anggaran—Saat Anda bekerja di startup atau perusahaan kecil lainnya, biaya
lisensi yang menyertai perangkat lunak semacam ini bisa tinggi.
• Aksesibilitas tinggi—Aplikasi ilmu data dimaksudkan untuk merilis hasil ke semua jenis
pengguna, terutama orang yang mungkin hanya memiliki browser—pelanggan Anda
sendiri, misalnya. Visualisasi data dalam HTML5 berjalan dengan lancar di perangkat
seluler.
• Sejumlah besar talenta di luar sana—Meskipun tidak banyak developer Tableau, banyak
orang yang memiliki keterampilan pengembangan web. Saat merencanakan sebuah
proyek, penting untuk mempertimbangkan apakah Anda dapat mengelolanya.
• Rilis cepat—Melalui seluruh siklus TI mungkin memakan waktu terlalu lama di
perusahaan Anda, dan Anda ingin orang-orang menikmati analisis Anda dengan cepat.
Setelah antarmuka Anda tersedia dan digunakan, TI dapat menghabiskan waktu yang
mereka inginkan untuk mengindustrialisasi produk.
9.5 RINGKASAN
• Bab ini berfokus pada bagian terakhir dari proses ilmu data, dan tujuan kami adalah
membangun aplikasi ilmu data di mana pengguna akhir dilengkapi dengan dasbor
interaktif. Setelah melalui semua langkah proses ilmu data, kami disajikan dengan data
yang bersih, seringkali padat atau padat informasi. Dengan cara ini kami dapat meminta
lebih sedikit data dan mendapatkan wawasan yang kami inginkan.
• Dalam contoh kami, data stok apotek dianggap telah dibersihkan dan disiapkan secara
menyeluruh dan hal ini harus selalu dilakukan pada saat informasi tersebut sampai ke
pengguna akhir.
• Dasbor berbasis JavaScript sempurna untuk memberikan akses cepat ke hasil ilmu data
Anda karena hanya mengharuskan pengguna untuk memiliki browser web. Ada alternatif
lain, seperti Qlik (bab 5).
• Crossfilter adalah pustaka MapReduce, salah satu dari banyak pustaka JavaScript
MapReduce, tetapi telah terbukti stabilitasnya dan sedang dikembangkan serta digunakan
oleh Square, sebuah perusahaan yang melakukan transaksi moneter. Menerapkan
MapReduce efektif, bahkan pada satu node dan di browser; itu meningkatkan kecepatan
perhitungan.
• dc.js adalah pustaka bagan yang dibangun di atas d3.js dan Crossfilter yang memungkinkan
pembuatan dasbor browser dengan cepat.
• Kami menjelajahi kumpulan data apotek rumah sakit dan membuat dasbor interaktif untuk
apoteker. Kekuatan dasbor adalah sifatnya yang melayani sendiri: mereka tidak selalu
membutuhkan reporter atau ilmuwan data untuk memberikan wawasan yang mereka
dambakan.
• Tersedia alternatif visualisasi data, dan sebaiknya luangkan waktu untuk menemukan
alternatif yang paling sesuai dengan kebutuhan Anda.
• Ada beberapa alasan mengapa Anda membuat laporan ubahsuaian sendiri alih-alih
memilih alat perusahaan (yang seringkali lebih mahal) di luar sana:
– Tanpa anggaran—Startup tidak selalu mampu membeli setiap alat
– Aksesibilitas tinggi—Setiap orang memiliki browser
– Bakat yang tersedia—(Relatif) akses mudah ke pengembang JavaScript
– Rilis cepat—siklus TI dapat memakan waktu cukup lama
– Pembuatan Prototipe—Aplikasi prototipe dapat menyediakan dan memberikan waktu
bagi TI untuk membuat versi produksi
– Dapat disesuaikan—Kadang-kadang Anda hanya menginginkannya persis seperti yang
Anda bayangkan.
• Tentu saja ada alasan untuk tidak mengembangkan aplikasi Anda sendiri:
– Kebijakan perusahaan—Proliferasi aplikasi bukanlah hal yang baik dan perusahaan
mungkin ingin mencegahnya dengan membatasi pengembangan lokal.
– Tim pelaporan yang matang—Jika Anda memiliki departemen pelaporan yang baik,
mengapa Anda masih repot?
– Kustomisasi memuaskan —Tidak semua orang menginginkan barang yang mengkilap;
dasar bisa cukup.
Selamat! Anda telah mencapai bagian akhir buku ini dan awal sebenarnya dari karier Anda
sebagai ilmuwan data. Kami harap Anda sangat senang membaca dan mempelajari contoh
dan studi kasus. Sekarang setelah Anda memiliki wawasan dasar tentang dunia ilmu data,
terserah Anda untuk memilih jalan. Cerita berlanjut, dan kami semua berharap Anda sukses
besar dalam pencarian Anda untuk menjadi ilmuwan data terhebat yang pernah hidup.
DAFTAR PUSTAKA
A. M. Law and W. D. Kelton. Simulation Modeling and Analysis. McGraw-Hill, New York, third
edition, 2000
Anonymous, “Big Data Analytics in Cyber Defenseâ€, Ponemon Institute Research Report,
2013.
B. D. Ripley. Stochastic Simulation. John Wiley & Sons, New York, 1987.
C. E. Rasmussen and C. K. I. Williams. Gaussian Processes for Machine Learning. MIT Press,
Cambridge, 2006.
C. Hayashi, K. Yajima, H. Bock, N, Ohsumi, Y, Tanaka, and Y, Baba, (Eds.), “Data Science,
Classification, and Related Methodsâ€, Proceedings of the Fifth Conference of the
International Federation of Classification Societies (IFCS-96), Kobe, Japan, March
27–30, 1996, Springer Science & Business Media, 2013.
D. Normawati and S. A. Prayogi, “Implementasi Naïve Bayes Classifier Dan Confusion Matrix
Pada Analisis Sentimen Berbasis Teks Pada Twitter,” J-SAKTI (Jurnal Sains Komput. dan
Inform., vol. 5, no. 2, pp. 697–711, Sep. 2021.
Faisal, Irwan Budiman, Erick Kurniawan. Belajar Data SciencePengenalan Azure Machine
Learning Studio. Vol. Cetakan 1. Banjarbaru, Kalimantan Selatan, Indonesia: Scripta
Cendekia, 2019.
G. H. Golub and C. F. Van Loan. Matrix Computations. Johns Hopkins University Press,
Baltimore, fourth edition, 2013.
G. Strang. Linear Algebra and Learning from Data. Wellesley–Cambridge Press, Cambridge,
2019.
I. Goodfellow, Y. Bengio, and A. Courville. Deep Learning. MIT Press, Cambridge, 2016.
J. Manyika, M. Chui, B. Brown, J. Bughin, R. Dobbs, C. Roxburgh, & A. H. Byers, “Big data:
The next frontier for innovation, competition, and productivityâ€, McKinsey Publication,
2011.
K. P. Murphy. Machine Learning: A Probabilistic Perspective. The MIT Press, Cambridge, 2012.
L Xu, C. Jiang, J. Wang, J. Yuan, & Y. Ren, “Information security in big data: privacy and data
miningâ€, IEEE Access, 2, 2014.
Müller, A Introduction to Machine Learning with Python: A Guide for Data Scientists 1st
Edition. In A. Müller Introduction to MachineLearning with Python: A Guide for Data
Scientists 1st Edition (p. 19).O'Reilly Media; 2016
P. Zikopoulos, & C. Eaton, “Understanding big data: Analytics for enterprise class hadoop
and streaming dataâ€, McGraw-Hill Osborne Media, 2011.
R. Agrawal, A. Imran, C. Seay, & J. Walker, “A layer based architecture for provenance in
big dataâ€, In Big Data (Big Data), 2014 IEEE International Conference on Big Data, 2014.
R. Alguliyev & Y. Imamverdiyev, “Big data: big promises for information security, In
Application of Information and Communication Technologies (AICT), IEEE 8th
International Conference on Oct 15, 2014.
R. J. A. Little and D. B. Rubin. Statistical Analysis with Missing Data. John Wiley & Sons,
Hoboken, second edition, 2002.
R. Schutt, and C. O'Neil, “Doing data science: Straight talk from the frontline", O'Reilly
Media, Inc.", 2013.
S Curry, E Kirda, E Schwartz, WH Stewart, and A Yoran, A. Big data fuels intelligence-driven
security. RSA Security Brief Report, 2013.
S. B Siewert, “Big data in the cloud: Data velocity, volume, variety, veracityâ€, IBM
Developerworks, 2013.
Staffan Truvé, â€Machine Learning in Cyber Security: Age of the Centaursâ€, Threat
Intelligence
U. Ganugula, & A. Saxena, “High Performance Cryptography: Need of the Hour†CSI
Communications Magazine, 2012.
Vashant Dhar, "Data science and prediction", Communications of the ACM, Vol. 56, No.12,
2013.
Veronika S. Moertini, Mariskha T. Adithia. Pengantar Data Science Dan Aplikasinya Bagi
Pemula. Bandung: Unpar Press, Bandung Indonesia,2020
W. McKinney. Python for Data Analysis. O’Reilly Media, Inc., second edition, 2017.
Wu, X., X. Zhu, X., G. Q. Wu, and W. Ding, “Data Mining With Big Data.†IEEE Transactions
On Knowledge And Data Engineering 26 (1), 2014.
Y. Sari, M. Maulida, E. Gunawan, and J. Wahyudi, “Artificial Intelligence Approach for BAZNAS
Website Using K-Nearest Neighbor (KNN),” 2021 6th Int. Conf. Informatics Comput. ICIC
2021.
PENERBIT :
YAYASAN PRIMA AGUS TEKNIK
YP Jl. Majapahit No. 605 Semarang
Telp. (024) 6723456. Fax. 024-6710144
YAYASAN PRIMA AGUS TEKNIK
Email : [email protected]