Anda di halaman 1dari 58

[Pemrograman Grapgh, Tree, dan Aplikasinya]

Entitas adalah apapun yang bisa menjadi sumber dan target informasi. Sehingga di dalam graph kita
dapat emndefinisikannya. Bisa menjadi waktu, orang yang ada keberadaanya.

Graph dalam kehidupan sehari-hari (nama lainnya disebut Network). Graph dalam aktivitas sehari-
hari disebut project.

Graph dari sisi formulasinya

- idenya G = (V, E)

V = nodes

E = edges

Graph size parameters : n = |V|, m = |E|

Jumlah dari vertex atau nodes |V|

Jumlah dari edges nya |E|

Kardinalitas = Jumlah pemunculan

Misal kita memilki alamat email, maka kita bisa jumlah alamat emailnya sebagai vertexnya atau
jumlah dari edges nya.

Di Grup media sosial (influencer = yang memberikan ide yang banyak) maka Graph menjadi menarik

Lobbying coalitions (di DPR)

Teknik di dalam machine learning yang meniru disebut (neural network) artinya saraf2 di bagian kita.

Cycle = 254, 378,

Trees

Yang bisa digunakan sebagai distribusi produk.

Tekniknya

Minimum spanning tree


Batang

Ranting (Branch)

Daun (Leaf)

Phylogeny trees

(Lanjut 40 menit kedua)

1. Penjelasan Graph seperti di Modul (Halaman 120)

2. Kruskal's Algorithm

PR

Untuk spanning tree (untuk prim dan shortest path) dibandingkan kasus waktunya

Cara penghitungannya yakni waktu akhir - waktu awal.

Cara (Azizah)

Durasi (lamanya)

Informasinya dari google.

PR (mana yg lebih cepat dari prim dan kruskal)

Caranya :

buat variabel waktu awal kemudian proses setalah itu waktu proses akhir. kemudian dikurangi waktu
variabel akhir dengan variabel awal.

[Pemrograman Basis Data Dasar Operasi SQL]

SQL itu adalah Structure Query Language : Bahasa pemrograman yang secara spesifik didesain untuk
dapat bekerja dengan database. Database yang dibuat dari program SQL, yang kemudian dikases
dengan Python.
- Perintah yang dilakukan oleh SQL disebut Query. Kueri (sekelompok kode) awalnya pake lemari
arsip, tapi skrg punya database yang harus diakses oleh manusia. Query ini dalam bentuk coding
untuk bisa mengaksesnya

- SQL tipenya itu deklaratif bukan prosedural (melangkah secara step by step). Deklaratif (terdiri dari
berbagai statements yang memungkinkan kita untuk melakukan berbagai perintah dan operasi).

Sebagai programmer tidak perlu memerintah sampai 4 kali, cukup sekali saja. 20 tahun lalu
membuat program yang sifatnya prosedural.

Query dalam SQL pada prinsipnya ada 4 :

1. DDL : artinya si SQL ini punya kemampuan untuk mendefinisikan atau memodifikasi struktur data.

2. DML : kemampuan berikutnya ialah memanipulasi di dalam tabel basis data

3. DCL : mengatur perizinan. Harus memiliki izin

4. TCL : menyimpan modifikasi yang sudah dilakukan

Microsoft SQL :

Aplikasi dekstop database server.

Karena server dia memilki client, yang menggunakan atau memanfaatkan database serta berfungsi
menampilkan dan memanipulasi data

Server yang berfungsi menyimpan, memanggil, dan mengamankan database

Operasinya dilakukan administrator. Operasi tsb perlu menginstall Microsoft SQL Server.

ODBC

ODBC suatu protokol yang menjadi connector antar mesin database. ODBC driver hanya terdapat
dlm windows. API itu karena untuk menguhubungkan yakni untuk menjalankan dan memerikan
koneksi suatu aplikasi melalui sistem manajemen database yg digunakan. Contohnya : Memesan
makanan dg OJOL yakni menggunakan API dengan adanya peta atau google maps.

ODBC banyak dilengkapi API untuk menjalankannya.

[BAB 12 PEMROGRAMAN DATABASE DENGAN FLASK-SQL ALCHEMY]

Pada query : hubungan antar tabel


Hubungan antar dari database

1. Pivot

2. Power Query

3. ETL

Machine Learning (basisnya adalah transaksi data)

Semester 5 (komputasinya lebih canggih).

ASPK (Rapid Apk)

Database yang lebih sederhana dari pada excel adalah basisnya di Text. Contohnya adalah file : CSV.
(Contoh file yang biasa digunakan pd notepad)

Database relasional dimodelkan dalam suatu diagram. Dimana dihubungkan dengan 1 relasi maka
dari itu disebut relationship. Entity(tabel atau objeknya)

NoSQL database ditambahkan dengan sistem collections dan documents.

Python Database Framework

Faktor yang perlu dipertimbangkan:

- Kemudahan digunakan

- Performasi

- Portabilitas

- Integrasi Flask
SQL merupakan singkatan dari Structured Query Language yaitu bahasa pemrograman yang secara
spesifik didesain untuk dapat bekerja dengan database. Perintah yang dilakukan oleh SQL disebut
Kueri (Query). Kueri merupakan sekelompok kode yang memerintah computer untuk melakukan
sesuatu sehingga dapat memunculkan output sesuai dengan yang diinginkan. SQL tergolong ke
dalam tipe bahasa pemrograman deklaratif. Fokus dari Bahasa memrograman deklaratif berfokus
kepada apa yang diinginkan untuk didapat, bukan bagaimana untuk menyelesaikan sebuah
pekerjaan

• Ilustrasinya perbandingan cara berpikir pemrograman prosedural dan deklaratif dapat dilihat
dibawah ini.

• Data Definition Language ()

• Seperangkat statements yang memungkinkan pengguna untuk mendefinisikan atau


memodifikasi struktur data dalam objek seperti tabel.

• Data Manipulation Language (DML)

• Seperangkat statements yang memungkinkan pengguna untuk memanipulasi data di dalam


tabel basis data.

• Data Control Language (DCL)

• Seperangkat statements yang memungkinkan pengguna untuk dan mengatur perizinan


pengguna lain dalam basis data.

• Transaction Control Language (TCL)

• Statement yang memungkinkan pengguna untuk menyimpan modifikasi yang sudah


dilakukan.

Microsoft SQL Server merupakan aplikasi desktop database server yang bersifat client/server,
karena memiliki komponen client, yang  berfungsi menampilkan dan memanipulasi data; serta
komponen server yang berfungsi menyimpan, memanggil, dan mengamankan database.
Operasi-operasi manajemen semua server database dalam jaringan dilakukan administrator
database dengan menggunakan tool administratif utama SQL Server yang bernama Enterprise
Manager. Hal ini mengakibatkan administrator database hanya bisa  melakukan operasi-operasi
tersebut di komputer yang telah diinstalasi Microsoft SQL Server.

SQL Server Management Studio atau yang biasa disingkat SSMS ini merupakan ruang lingkup untuk
mengatur segala insfrastruktur SQL, dari SQL server ke SQL database. SQL Server Management
Studio menyediakan alat / tools untuk mengonfigurasi, memantau, dan mengelola instansi SQL.
Kamu dapat menggunakan SSMS untuk deploy, monitoring, dan upgrade komponen data-tier yang
digunakan pada aplikasi (termasuk membuat query dan script).
ODBC merupakan suatu standar protokol yang menjadi penghubung (connector) antar mesin
database. Pada dasarnya¸ODBC driver hanya terdapat dalam sistem operasi Windows. Sebab, ODBC
masih merupakan bagian dari Windows Open System Architecture (WOSA). Yang perlu Anda ketahui
bahwa dalam ODBC dilengkapi banyak API (Application Programming Interface), dimana API
digunakan untuk menjalankan dan memberikan koneksi suatu aplikasi melalui sistem manajemen
database yang anda gunakan.

Setelah mengikuti kuliah ini, mahasiswa mampu:

• Mampu mendeskripsikan database dan penerapannya

• Mampu memahami konsep database dengan SQL dan NoSQL

• Mampu membuat dan memodifikasi database dengan Flask

Database (basis data) menyimpan data aplikasi secara terorganisir. Aplikasi tersebut kemudian
mengeluarkan queries untuk mengambil bagian tertentu sesuai kebutuhan

Database relasional menyimpan data dalam tabel, yang memodelkan entitas yang berbeda dalam
aplikasi domain.

Setiap baris dalam sebuah tabel mendefinisikan elemen data aktual yang terdiri dari nilai-nilai untuk
semua kolom. Tabel memiliki kolom khusus yang disebut primary key (kunci utama), yang berisi
pengidentifikasi unik untuk setiap baris disimpan dalam tabel. Tabel juga dapat memiliki kolom yang
disebut foreign key, yang referensi dengan kunci utama dari baris lain dari tabel yang sama atau yang
lain.

Faktor yang perlu dipertimbangkan dalam memilih framework :

• Kemudahan digunakan

• Performasi

• Portabilitas

• Integrasi Flask
MATERI PAK DJATNA UAS
BAB VIII – PYTHON ON MACHINE LEARNING FOR DATA SCIENCE
Tujuan pembelajaran Bab VIII diharapkan mahasiswa mampu:
• Memahami konsep Data Science dan kemampuannya
• Memahami konsep Machine Learning dan jenis-jenisnya
• Mengetahui dan mampu menggunakan package dalam Machine Learning
• Mampu membuat algoritma regresi sederhana
• Mampu membuat algoritma pengelompokkan sederhana
A. Sains Data
Ilmu data adalah istilah yang relatif baru. William S. Cleveland menciptakan istilah pada
tahun 2001 sebagai bagian dari makalah berjudul "Ilmu Data: Rencana Aksi untuk
Memperluas Bidang Teknis Statistik." Tidak sampai setahun kemudian Dewan Internasional
untuk Ilmu Pengetahuan benar-benar mengakui ilmu data dan membuat komite untuk itu.
Universitas Columbia mulai bertindak pada tahun 2003 dengan memulai publikasi Journal of
Data Science.
Namun, dasar matematika di balik sains data berusia berabad-abad karena sains data
pada dasarnya adalah metode untuk melihat dan menganalisis statistik dan probabilitas.
Penggunaan penting pertama statistik sebagai sebuah istilah datang pada 1749, tetapi statistik
tentu jauh lebih tua dari itu. Orang-orang telah menggunakan statistik untuk mengenali pola
selama ribuan tahun. Sebagai contoh, sejarawan Thucydides (dalam History of the
Peloponnesian War) menggambarkan bagaimana orang Athena menghitung ketinggian
dinding Platea pada abad kelima SM dengan menghitung batu bata di bagian dinding yang
belum diplester. Karena penghitungan itu harus akurat, orang Athena mengambil hitungan
rata-rata oleh beberapa tentara.
Seperti kebanyakan perdagangan kompleks saat ini, ilmuwan data membutuhkan
pengetahuan berbagai keterampilan untuk melakukan tugas yang diperlukan. Bahkan, begitu
banyak keterampilan yang berbeda diperlukan sehingga para ilmuwan data sering bekerja
dalam tim. Seseorang yang pandai mengumpulkan data mungkin bekerja sama dengan
seorang analis dan seseorang yang berbakat dalam menyajikan informasi. Akan sulit untuk
menemukan satu orang dengan semua keterampilan yang diperlukan. Dengan mengingat hal
ini, daftar berikut ini menjelaskan bidang di mana seorang ilmuwan data dapat unggul
(dengan lebih banyak kompetensi menjadi lebih baik):
· Pengambilan data: Tidak masalah apa pun keterampilan matematika yang Anda miliki
jika Anda tidak dapat memperoleh data untuk dianalisis sejak awal. Tindakan
menangkap data dimulai dengan mengelola sumber data menggunakan keterampilan
manajemen basis data. Namun, data mentah tidak terlalu berguna dalam banyak
situasi - Anda juga harus memahami domain data sehingga Anda dapat melihat data
dan mulai merumuskan berbagai pertanyaan untuk ditanyakan. Terakhir, Anda harus
memiliki keterampilan pemodelan data sehingga Anda memahami bagaimana data
terhubung dan apakah data terstruktur.
· Analisis: Setelah Anda memiliki data untuk dikerjakan dan memahami kompleksitas
data itu, Anda dapat mulai melakukan analisis terhadapnya. Anda melakukan
beberapa analisis menggunakan keterampilan alat statistik dasar, seperti halnya yang
dipelajari setiap orang di perguruan tinggi. Namun, penggunaan trik dan algoritme
matematika khusus dapat membuat pola dalam data lebih jelas atau membantu Anda
menarik kesimpulan yang tidak dapat Anda gambar dengan meninjau data saja.
· Presentasi: Kebanyakan orang tidak memahami angka dengan baik. Mereka tidak bisa
melihat pola yang dilihat oleh ilmuwan data. Penting untuk memberikan presentasi
grafis dari pola-pola ini untuk membantu orang lain memvisualisasikan apa arti
angka-angka dan bagaimana menerapkannya dengan cara yang bermakna. Lebih
penting lagi, presentasi harus menceritakan kisah tertentu sehingga dampak data tidak
hilang.

B. Mesin Pembelajaran
Pembelajaran mesin adalah tentang mengekstraksi pengetahuan dari data. Ini adalah
bidang penelitian di persimpangan statistik, kecerdasan buatan, dan ilmu komputer dan juga
dikenal sebagai analitik prediktif atau pembelajaran statistik. Penerapan metode pembelajaran
mesin telah dalam beberapa tahun terakhir menjadi bagian dalam kehidupan sehari-hari. Dari
rekomendasi otomatis film mana yang akan ditonton, makanan apa yang dipesan atau produk
mana yang harus dibeli, hingga radio online hasil personalisasi dan mengenali teman-teman
Anda di foto Anda, banyak situs web dan perangkat modern memiliki algoritma
pembelajaran mesin pada intinya. Ketika Anda melihat situs web yang kompleks seperti
Facebook, Amazon, atau Netflix, sangat mungkin bahwa setiap bagian situs berisi beberapa
model pembelajaran mesin.
Pada waktu awal aplikasi "cerdas", banyak sistem menggunakan aturan handcoded
keputusan "if" dan "else" untuk memproses data atau menyesuaikan input pengguna. Pikirkan
filter spam yang tugasnya memindahkan pesan email masuk yang sesuai ke folder spam.
Anda dapat membuat daftar hitam kata-kata yang akan menghasilkan email yang ditandai
sebagai spam. Ini akan menjadi contoh penggunaan sistem aturan pakar yang dirancang untuk
merancang aplikasi "cerdas". Membuat aturan keputusan secara manual layak dilakukan
untuk beberapa aplikasi, terutama yang di mana manusia memiliki pemahaman yang baik
tentang proses untuk memodelkan. Namun, menggunakan aturan handcoded untuk membuat
keputusan memiliki dua kelemahan utama:
· Logika yang diperlukan untuk membuat keputusan adalah spesifik untuk satu domain
dan tugas. Mengubah tugas sedikit saja mungkin memerlukan penulisan ulang seluruh
sistem.
· Merancang aturan membutuhkan pemahaman yang mendalam tentang bagaimana
keputusan harus dibuat oleh seorang ahli.
Salah satu contoh kegagalan pendekatan handcoded ini adalah mendeteksi wajah dalam
gambar. Saat ini, setiap smartphone dapat mendeteksi wajah dalam sebuah gambar. Namun,
deteksi wajah adalah masalah yang belum terpecahkan hingga tahun 2001. Masalah utamanya
adalah cara piksel (yang membentuk gambar di komputer) "dirasakan" oleh komputer sangat
berbeda dengan cara manusia memandang wajah. . Perbedaan dalam representasi ini
membuat manusia pada dasarnya mustahil untuk membuat seperangkat aturan yang baik
untuk menggambarkan apa yang membentuk wajah dalam gambar digital. Namun, dengan
menggunakan pembelajaran mesin, hanya menghadirkan sebuah program dengan koleksi
besar gambar wajah sudah cukup untuk algoritma untuk menentukan karakteristik apa yang
diperlukan untuk mengidentifikasi wajah.

C. Jenis-Jenis Mesin Pembelajaran


Algoritma mesin pembelajaran dibagi menjadi 3, yaitu:
· Supervised learning/pembelajaran terawasi
· Unsupervised learning/pembelajaran tidak terawasi
· Reinformance learning/pembelajaran dengan reward
Dalam modul ini kita akan fokus pada supervised learning dan unsupervised learning.

I. Supervised Learning/Learning by Example


Jenis algoritma pembelajaran mesin yang paling sukses adalah yang mengotomatiskan
proses pengambilan keputusan dengan menggeneralisasi dari contoh yang diketahui. Dalam
pengaturan ini, yang dikenal sebagai pembelajaran terawasi/supervised learning, pengguna
menyediakan algoritma dengan pasangan input dan output yang diinginkan, dan algoritma
menemukan cara untuk menghasilkan output yang diinginkan diberikan input. Secara khusus,
algoritma ini mampu membuat output untuk input yang belum pernah dilihat sebelumnya
tanpa bantuan manusia. Kembali ke contoh klasifikasi spam kami, menggunakan
pembelajaran mesin, pengguna menyediakan algoritma dengan sejumlah besar email (yang
merupakan input), bersama dengan informasi tentang apakah ada email yang merupakan
spam (yang merupakan output yang diinginkan). Diberikan email baru, algoritma kemudian
akan menghasilkan prediksi apakah email baru itu spam.
Algoritma pembelajaran mesin yang belajar dari pasangan input / output disebut algoritma
pembelajaran terawasi karena "guru" menyediakan pengawasan untuk algoritma dalam
bentuk output yang diinginkan untuk setiap contoh yang mereka pelajari. Sementara
membuat dataset input dan output seringkali merupakan proses manual yang melelahkan,
algoritma pembelajaran yang diawasi dipahami dengan baik dan kinerjanya mudah diukur.
Jika aplikasi Anda dapat dirumuskan sebagai masalah pembelajaran yang diawasi, dan Anda
dapat membuat dataset yang menyertakan hasil yang diinginkan, pembelajaran mesin
kemungkinan akan dapat menyelesaikan masalah Anda.
Beberapa contoh penerapan supervised learning:
· Mengidentifikasi kode pos dari angka tulisan tangan di sebuah amplop
Input yang digunakan adalah pemindaian tulisan tangan, dan output yang diinginkan
adalah digit aktual dalam kode pos. Untuk membuat dataset untuk membangun model
pembelajaran mesin, Anda perlu mengumpulkan banyak amplop. Kemudian Anda
dapat membaca kode pos sendiri dan menyimpan angka sebagai hasil yang Anda
inginkan.

· Menentukan apakah tumor jinak berdasarkan gambar medis


Di sini inputnya adalah gambar, dan hasilnya adalah apakah tumornya jinak. Untuk
membuat dataset untuk membangun model, Anda memerlukan database gambar
medis. Anda juga perlu pendapat ahli, jadi dokter perlu melihat semua gambar dan
memutuskan tumor mana yang jinak dan mana yang tidak. Bahkan mungkin
diperlukan untuk melakukan diagnosis tambahan di luar isi gambar untuk menentukan
apakah tumor pada gambar tersebut kanker atau tidak.
· Mendeteksi aktivitas penipuan dalam transaksi kartu kredit
Di sini input adalah catatan dari transaksi kartu kredit, dan hasilnya adalah apakah itu
kemungkinan penipuan atau tidak. Dengan asumsi bahwa Anda adalah entitas yang
mendistribusikan kartu kredit, mengumpulkan dataset berarti menyimpan semua
transaksi dan mencatat jika pengguna melaporkan transaksi apa pun sebagai penipuan.
Suatu hal yang menarik untuk dicatat tentang contoh-contoh ini adalah bahwa meskipun
input dan output terlihat cukup mudah, proses pengumpulan data untuk ketiga tugas ini
sangat berbeda. Meskipun membaca amplop itu melelahkan, mudah dan murah. Di lain
pihak, memperoleh pencitraan dan diagnosa medis tidak hanya membutuhkan mesin yang
mahal tetapi juga pengetahuan ahli yang langka dan mahal, belum lagi masalah etika dan
masalah privasi. Dalam contoh mendeteksi penipuan kartu kredit, pengumpulan data jauh
lebih sederhana. Pelanggan Anda akan memberi Anda hasil yang diinginkan, karena mereka
akan melaporkan penipuan. Yang harus Anda lakukan untuk mendapatkan pasangan
input/output dari aktivitas penipuan dan non-penipuan adalah menunggu.

II. Unsupervised Learning/Grouping


Dalam pembelajaran tanpa pengawasan, hanya data input yang diketahui, dan tidak ada
data output yang diketahui diberikan ke algoritma. Meskipun ada banyak aplikasi yang
berhasil dari metode ini, mereka biasanya lebih sulit untuk dipahami dan dievaluasi.
Pembelajaran tanpa pengawasan merangkum semua jenis pembelajaran mesin di mana tidak
ada output yang diketahui, tidak ada guru untuk mengajar algoritma pembelajaran. Dalam
pembelajaran tanpa pengawasan, algoritma pembelajaran hanya menunjukkan data input dan
diminta untuk mengekstrak pengetahuan dari data ini.
Beberapa contoh penerapan unsupervised learning:
· Mengidentifikasi topik dalam satu set posting blog
Jika Anda memiliki banyak koleksi data teks, Anda mungkin ingin meringkasnya dan
menemukan tema yang lazim di dalamnya. Anda mungkin tidak tahu sebelumnya apa
topik ini, atau berapa banyak topik yang mungkin ada. Oleh karena itu, tidak ada
keluaran yang diketahui.

· Mengelompokkan pelanggan ke dalam grup dengan preferensi serupa


Dengan serangkaian catatan pelanggan, Anda mungkin ingin mengidentifikasi
pelanggan mana yang serupa, dan apakah ada kelompok pelanggan dengan preferensi
yang sama. Untuk situs belanja, ini mungkin "orang tua," "kutu buku," atau "gamer."
Karena Anda tidak tahu sebelumnya apa kelompok ini, atau bahkan berapa
jumlahnya, Anda tidak memiliki hasil yang diketahui.

· Mendeteksi pola akses abnormal ke situs web


Untuk mengidentifikasi penyalahgunaan atau bug, seringkali bermanfaat untuk
menemukan pola akses yang berbeda dari normla. Setiap pola abnormal mungkin
sangat berbeda, dan Anda mungkin tidak memiliki contoh perilaku abnormal yang
tercatat. Karena dalam contoh ini Anda hanya mengamati lalu lintas, dan Anda tidak
tahu apa yang merupakan perilaku normal dan abnormal, ini merupakan masalah yang
tidak diawasi.

D. Package yang Penting dalam Mesin Pembelajaran


Python mempermudah pengembang untuk membua model mesin pembelajaran dengan
bantuan package. Beberapa package yang sering digunakan adalah:
1. Scikit-learn (penjelasan + installnya di anaconda)
Scikit-learn merupakan suatu proyek open source yang artinya bebas untuk digunakan
dan didistribusikan, dan siapa pun dapat dengan mudah mendapatkan kode sumber
untuk melihat apa yang terjadi di balik layar. Proyek scikit-learning berisi sejumlah
algoritma pembelajaran mesin yang canggih, serta dokumentasi komprehensif tentang
masing-masing algoritma. Scikit-learn adalah alat yang sangat populer, dan pustaka
Python paling terkemuka untuk pembelajaran mesin. Proyek ini banyak digunakan di
industri dan akademisi, dan banyak tutorial serta cuplikan kode yang tersedia secara
online.
2. NumPy
NumPy adalah salah satu paket dasar untuk komputasi ilmiah dengan Python. Paket
ini berisi fungsionalitas untuk array multidimensi, fungsi matematika tingkat tinggi
seperti operasi aljabar linier dan transformasi Fourier, dan generator nomor
pseudorandom. Dalam scikit-learn, array NumPy adalah struktur data mendasar.
scikit-learn mengambil data dalam bentuk array NumPy. Setiap data yang Anda
gunakan harus dikonversikan ke array NumPy. Fungsionalitas inti dari NumPy adalah
kelas ndarray, sebuah array multidimensi (n-dimensional). Semua elemen array harus
bertipe sama. Array NumPy terlihat seperti ini:

3. Pandas
Panda adalah perpustakaan Python untuk perselisihan dan analisis data. Pandas
dibangun di sekitar struktur data yang disebut DataFrame yang dimodelkan setelah
DataFrame R. Sederhananya, panda DataFrame adalah sebuah tabel, mirip dengan
lembar kerja Excel. Panda menyediakan beragam metode untuk memodifikasi dan
mengoperasikan tabel. Berbeda dengan NumPy, yang mengharuskan semua entri
dalam array memiliki tipe yang sama, panda memungkinkan setiap kolom untuk
memiliki tipe yang terpisah (misalnya, bilangan bulat, tanggal, floating-point
numbers, dan string). Kelebihan lain dari pandas adalah kemampuannya untuk
mencerna berbagai macam format file dan basis data, seperti SQL, file Excel, dan file

comma separated values (CSV). Berikut adalah contoh kecil membuat DataFrame
menggunakan kamus.
Output yang dihasilkan adalah:

4. Matplotlib
Matplotlib adalah perpustakaan perencanakan ilmiah utama di Python. Matplotlib
menyediakan fungsi untuk membuat visualisasi berkualitas publikasi seperti diagram
garis, histogram, plot sebar, dan sebagainya. Memvisualisasikan data Anda dan
berbagai aspek analisis Anda dapat memberi Anda wawasan penting dan matplotlib
akan digunakan untuk semua visualisasi. Anda dapat menampilkan angka langsung di
browser dengan menggunakan% matplotlib notebook dan% inline perintah matplotlib.
Direkomendasikan untuk menggunakan% matplotlib notebook, yang menyajikan
lingkungan interaktif. Sebagai contoh, kode dibawag ini menghasilkan plot seperti
pada gambar.
Plot garis sederhana dari fungsi sinus menggunakan matplotlib

B. Aplikasi Regresi Sederhana di Python


1. Regresi Linear Sederhana
Analisis regresi merupakan salah satu supervised learning sederhana yang digunakan
untuk menemukan trendline/garis pembatas terbaik untuk mendeskripsikan suatu
kumpulan data. Analisis regresi sederhana yang akan kita pelajari adalah regresi linier
yang menggunakan garis lurus untuk menjelaskan kumpulan data. Proses dalam regresi
linear adalah:
1. Mendapatkan sample data
2. Membuat model yang menjelaskan data tersebut, dan
3. Membuat prediksi untuk keseluruhan populasi berdasarkan dari model yang telah
dikembangkan.
Dalam model regresi linear terdapat variabel tidak bebas (y) yang akan diprediksi dan variabel
bebas (x1, x2, dst). Variabel tidak bebas Y merupakan fungsi dari variable bebas x1, x2, dst.
Model regresi paling sederhana itu sendiri adalah :
y = β₀ + β₁x₁ + ℇ ,

dimana :

y = variabel yang akan diprediksi

x = variabel bebas

β₁ = koefisien kemiringan

β₀ = konstanta/nilai minimum

ℇ = estimasi eror

Persamaan tersebut juga dapat disederhanakan menjadi,

ŷ = b₀ + b₁xᵢ

dimana ℇ dimisalkan sebagai 0.

2. Install Package
Sebelum melakukan kodingan terhadap aplikasi linear sederhana, ada beberapa
package yang perlu diinstall. Cara untuk menginstall package-package pada IDE
Pycharm antara lain :
• Pilih File > Other Settings > Settings for New Project/Preferences for New Projects.
• Pilih Project Interpreter > Klik “+”
• Ketik nama package yang ingin di download

Package yang akan digunakan antara lain :

• Numpy : Memungkinkan kita untuk bekerja dengan array multidimensi dan


berfungsi untuk mengatur serta memproses data.
• Pandas : Memungkinkan kita untuk mengatur data dalam bentuk table dan
melampirkan label deskriptif pada baris dan kolom.

• Matplotlib : Memungkinkan kita untuk mendesign visualisasi perhitungan


Numpy dalam bentuk 2D.
• Seaborn : Package visualisasi yang berdasarkan Matplotlib. Package ini
menyediakan visualisasi grafik statistic yang lebih menarik.

• StatsModels : Package yang dibangun di atas Numpy dan Scipy, terintegrasi


dengan pandas dan berfungsi untuk memberikan ringkasan yang bagus.

• Sklearn : Digunakan untuk membangun model pada data.

• Scipy : memungkinkan kita untuk menangani operasi aljabar dan matriks serta
operasi matematika lainya.

3. Aplikasi Regresi Linear Sederhana

C. Aplikasi K-Means Clustering di Python


K-Means Clustering merupakan sebuah metode untuk mengelompokan data-data yang
tidak memiliki label. Sehingga K-Means Clustering termasuk ke dalam metode
unsupervised learning. Mekanisme yang dipakai dari metode ini adalah dengan
membagi data menjadi kumpulan bagian yang berbeda. Dimana ketika dilakukan
observasi di masing-masing anggota bagian kelompok, makan akan mendapatkan
hasil yang mirip. Pada masing-masing bagian tersebut akan diberikan titik tengah
yang menunjukkan bagian-bagian yang berbeda setelah dilakukan iterasi ke-n.

Pemilihan jumlah kelompok untuk membagi data, atau disebut ‘K’ dilakukan dengan
membandingkan jumlah K dengan standar error yang muncul. titik dimana nilai
standar error tidak lagi menurun drastis dapat menjadi salah satu metode pendekatan
untuk menentukan nilai K atau jumlah kelompok paling optimal.

Penggunaan K-Means clustering pada bahasa pemprograman Python dapat dilakukan


dengan menggunakan bantuan packages, yaitu seaborn, matplotlib, dan sklearn.

Sedangkan hasil dari pengelompokkan dari K-Means Clustering ini dapat dilakukan
dengan menggunakan matplotlib yang dicontohkan sebagai berikut:
BAB IX – GRAPH AND TREE
Setelah mengikuti kuliah ini, mahasiswa mampu:
• Menjelaskan cara kerja dari Graph and Tree
• Mengaplikasikan metode Djikstra dalam kehidupan sehari-hari
Graph
Graph/graph adalah cara mewakili hubungan yang ada di antara pasangan objek. Graph
adalah seperangkat objek, yang disebut simpul (vertex), bersama dengan kumpulan koneksi
berpasangan di antara mereka, yang disebut edge (edge). Graph memiliki aplikasi dalam
pemodelan banyak domain, termasuk pemetaan, transportasi, jaringan komputer, dan teknik
listrik. Graph G adalah kumpulan V dari simpul dan kumpulan E dari pasangan simpul dari
V, yang disebut edge. Dengan demikian, graph adalah cara untuk mewakili koneksi atau
hubungan antara pasangan objek dari beberapa set V. Secara kebetulan, beberapa buku
menggunakan terminologi berbeda untuk graph dan merujuk pada apa yang kita sebut vertex
sebagai node dan yang kita sebut edge sebagai arc. Gambar 9.5.1 menunjukkan contoh
graph.

Gambar 9.1 Contoh graph

Edge dalam graph dibagi edge yang diarahkan (directed) dan tidak diarahkan
(undirected). Edge (u, v) dikatakan diarahkan dari u ke v jika pasangan (u, v) memiliki
arah/urutan, dengan u sebelumnya v. Edge (u, v) dikatakan tidak berarah jika pasangan (u, v)
tidak memiliki urutan. Edge yang tidak berarah kadang-kadang dilambangkan dengan notasi
set, sebagai {u, v}, tetapi untuk sederhananya kita menggunakan notasi pasangan (u, v), ingat
bahwa dalam kasus tidak diarahkan (u, v) sama dengan (v, u). Graph biasanya
divisualisasikan seperti pada Gambar 9.1, simpul sebagai oval atau persegi panjang dan edge
sebagai segmen atau kurva yang menghubungkan pasangan oval dan persegi panjang.
Gambar 9.1 merupakan contoh directed graph dan Gambar 9.5.2 merupakan contoh
undirected graph.

Gambar 9.2 undirected graph

The Graph ADT


Graph adalah kumpulan simpul dan edge. Kami memodelkan abstraksi sebagai
kombinasi dari tiga tipe data: Vertex, Edge, dan Graph. Vertex adalah objek ringan yang
menyimpan elemen arbitrer yang disediakan oleh pengguna (mis., Kode bandara); kami
menganggap itu mendukung metode, elemen (), untuk mengambil elemen yang disimpan.
Edge juga menyimpan objek terkait (mis., Nomor penerbangan, jarak tempuh, biaya), diambil
dengan metode elemen (). Selain itu, kami mengasumsikan bahwa Edge mendukung metode
berikut :
 endpoints( ): Kembalikan tuple (u, v) sedemikian rupa sehingga simpul u adalah
asal dari edge dan vertex v adalah tujuannya; untuk graph yang tidak terarah,
orientasinya berubah-ubah.
 opposite(v): Dengan asumsi titik v adalah salah satu titik akhir dari edge (baik
asal atau tujuan), kembalikan titik akhir lainnya.
Abstraksi utama untuk suatu graph adalah graph ADT. Kami menganggap bahwa suatu
graph dapat diarahkan atau tidak diarahkan, dengan penunjukan yang dinyatakan pada
konstruksi; ingat bahwa graph campuran dapat direpresentasikan sebagai directed graph,
edge pemodelan {u, v} sebagai sepasang edge terarah (u, v) dan (v, u). Graph ADT
mencakup metode berikut:
 vertex count():Kembalikan jumlah simpul pada graph.
 vertices( ): Kembalikan iterasi dari semua simpul graph.
 edge count():Kembalikan jumlah edge pada graph.
 edges( ): Kembalikan iterasi dari semua edge pada graph.
 get edge(u,v) : mengembalikan edge dari titik u ke titik v, jika ada. Untuk
undirected graph, tidak ada perbedaan antara get edge (u, v) dan get edge (v, u).
 degree(v, out=True): Untuk graph yang tidak diarahkan, kembalikan jumlah
insiden edge ke vertex v. Untuk graph yang diarahkan, kembalikan jumlah
insiden edge keluar (resp. Masuk) ke vertex v, sebagaimana ditentukan oleh
parameter opsional.
 incident edges (v, out=True): Kembalikan iterasi semua insiden edge ke vertex v.
Dalam kasus directed graph, laporkan edge keluar secara default; laporkan edge
yang masuk jika parameter opsional disetel ke False.
 insert vertex(x=None): Membuat dan mengembalikan elemen penyimpanan
Vertex baru x.
 insert edge(u, v, x=None): Buat dan kembalikan Edge baru dari titik u ke titik v,
menyimpan elemen x (Tidak ada secara default).
 remove vertex(v): Hapus vertex v dan semua edge insidennya dari graph.
 remove edge(e): Hapus edge e dari graph.

Minimum Spanning Tree


Misalkan kita ingin menghubungkan semua komputer di gedung kantor baru
menggunakan kabel paling sedikit. Kita dapat memodelkan masalah ini menggunakan graph
G yang tidak diarahkan, berbobot yang simpulnya mewakili komputer, dan ujung-ujungnya
mewakili semua pasangan yang mungkin (u, v) komputer, di mana bobot w (u, v) edge (u, v)
edge sama dengan jumlah kabel yang dibutuhkan untuk menghubungkan komputer u ke
komputer v. Daripada menghitung shortest path dari beberapa titik v tertentu, kami lebih
tertarik untuk menemukan T tree yang berisi semua simpul G dan memiliki total minimum
weight di atas semua tree tersebut. Algoritma untuk menemukan tree seperti itu adalah
fokusnya bagian ini.
1) Prim-Jarnık Algorithm
Dalam algoritma Prim-Jarn´ık, kami menumbuhkan minimum spanning tree
dari satu cluster yang dimulai dari beberapa "root" vertex s. Ide utamanya mirip
dengan algoritma Dijkstra. Kita mulai dengan beberapa titik, mendefinisikan "cloud"
awal dari simpul C. Kemudian, di setiap iterasi, kita memilih edge bobot minimum e
= (u, v), menghubungkan titik u di cloud C ke titik v di luar C. Vertex v kemudian
dibawa ke cloud C dan proses diulang sampai tree spanning terbentuk. Sekali lagi,
fakta penting tentang spanning tree minimum ikut berperan, karena dengan selalu
memilih edge berbobot terkecil yang menghubungkan sebuah vertex di dalam C ke
yang di luar C, kami yakin akan selalu menambahkan edge yang valid ke MST.
Gambar 9.5.3 Ilustrasi Prim-Jarn´ık Algorithm
Gambar 9.3 Ilutrasi dengan Prime Algorithm

# A Python program for Prim's Minimum Spanning Tree (MST) algorithm.


# The program is for adjacency matrix representation of the graph

import sys # Library for INT_MAX

class Graph():

def __init__(self, vertices):


self.V = vertices
self.graph = [[0 for column in range(vertices)]
for row in range(vertices)]

# A utility function to print the constructed MST stored in parent[]


def printMST(self, parent):
print "Edge \tWeight"
for i in range(1, self.V):
print parent[i], "-", i, "\t", self.graph[i][ parent[i] ]

# A utility function to find the vertex with


# minimum distance value, from the set of vertices
# not yet included in shortest path tree
def minKey(self, key, mstSet):

# Initilaize min value


min = sys.maxint

for v in range(self.V):
if key[v] < min and mstSet[v] == False:
min = key[v]
min_index = v
return min_index

# Function to construct and print MST for a graph


# represented using adjacency matrix representation
def primMST(self):

# Key values used to pick minimum weight edge in cut


key = [sys.maxint] * self.V
parent = [None] * self.V # Array to store constructed MST
# Make key 0 so that this vertex is picked as first vertex
key[0] = 0
mstSet = [False] * self.V

parent[0] = -1 # First node is always the root of

for cout in range(self.V):

# Pick the minimum distance vertex from


# the set of vertices not yet processed.
# u is always equal to src in first iteration
u = self.minKey(key, mstSet)

# Put the minimum distance vertex in


# the shortest path tree
mstSet[u] = True

# Update dist value of the adjacent vertices


# of the picked vertex only if the current
# distance is greater than new distance and
# the vertex in not in the shotest path tree
for v in range(self.V):

# graph[u][v] is non zero only for adjacent vertices of m


# mstSet[v] is false for vertices not yet included in MST
# Update the key only if graph[u][v] is smaller than key[v]

if self.graph[u][v] > 0 and mstSet[v] == False and key[v] > self.graph[u][v]:


key[v] = self.graph[u][v]
parent[v] = u

self.printMST(parent)

g = Graph(5)
g.graph = [ [0, 2, 0, 6, 0],
[2, 0, 3, 8, 5],
[0, 3, 0, 0, 7],
[6, 8, 0, 0, 9],
[0, 5, 7, 9, 0]]

g.primMST();

# Contributed by Divyanshu Mehta

Kode 9.1 Input untuk membuat program Prime Algorithm

Output:

Gambar 9.4 Output untuk Prime Algorithm

Sumber : https://www.geeksforgeeks.org/prims-minimum-spanning-tree-mst-greedy-algo-5/
2) Kruskal’s Algorithm
Awalnya, setiap titik dengan sendirinya dalam sebuah cluster tunggal.
Algoritma kemudian mempertimbangkan masing-masing sisi secara berurutan,
diurutkan dengan menambah bobot. Jika edge e menghubungkan dua kluster yang
berbeda, maka e ditambahkan ke himpunan edge tree rentang minimum, dan dua
kluster yang dihubungkan oleh e digabung menjadi satu kluster tunggal. Jika, di sisi
lain, e menghubungkan dua simpul yang sudah ada di cluster yang sama, maka e
dibuang. Setelah algoritma telah menambahkan cukup edge untuk membentuk tree
panning, itu berakhir dan output tree ini sebagai tree spanning minimum.
Gambar 9.5 Ilustrasi Kruskal’s Algorithm

# Python program for Kruskal's algorithm to find


# Minimum Spanning Tree of a given connected,
# undirected and weighted graph

from collections import defaultdict

#Class to represent a graph


class Graph:

def __init__(self,vertices):
self.V= vertices #No. of vertices
self.graph = [] # default dictionary
# to store graph

# function to add an edge to graph


def addEdge(self,u,v,w):
self.graph.append([u,v,w])

# A utility function to find set of an element i


# (uses path compression technique)
def find(self, parent, i):
if parent[i] == i:
return i
return self.find(parent, parent[i])

# A function that does union of two sets of x and y


# (uses union by rank)
def union(self, parent, rank, x, y):
xroot = self.find(parent, x)
yroot = self.find(parent, y)

# Attach smaller rank tree under root of


# high rank tree (Union by Rank)
if rank[xroot] < rank[yroot]:
parent[xroot] = yroot
elif rank[xroot] > rank[yroot]:
parent[yroot] = xroot

# If ranks are same, then make one as root


# and increment its rank by one
else :
parent[yroot] = xroot
rank[xroot] += 1

# The main function to construct MST using Kruskal's


# algorithm
def KruskalMST(self):

result =[] #This will store the resultant MST

i = 0 # An index variable, used for sorted edges


e = 0 # An index variable, used for result[]

# Step 1: Sort all the edges in non-decreasing


# order of their
# weight. If we are not allowed to change the
# given graph, we can create a copy of graph
self.graph = sorted(self.graph,key=lambda item: item[2])

parent = [] ; rank = []

# Create V subsets with single elements


for node in range(self.V):
parent.append(node)
rank.append(0)
# Number of edges to be taken is equal to V-1
while e < self.V -1 :

# Step 2: Pick the smallest edge and increment


# the index for next iteration
u,v,w = self.graph[i]
i=i+1
x = self.find(parent, u)
y = self.find(parent ,v)

# If including this edge does't cause cycle,


# include it in result and increment the index
# of result for next edge
if x != y:
e=e+1
result.append([u,v,w])
self.union(parent, rank, x, y)
# Else discard the edge

# print the contents of result[] to display the built MST


print "Following are the edges in the constructed MST"
for u,v,weight in result:
#print str(u) + " -- " + str(v) + " == " + str(weight)
print ("%d -- %d == %d" % (u,v,weight))

# Driver code
g = Graph(4)
g.addEdge(0, 1, 10)
g.addEdge(0, 2, 6)
g.addEdge(0, 3, 5)
g.addEdge(1, 3, 15)
g.addEdge(2, 3, 4)

g.KruskalMST()

#This code is contributed by Neelam Yadav

Kode 9.2 Input untuk membuat Kruskal Alghorithm


Sumber : https://www.geeksforgeeks.org/kruskals-minimum-spanning-tree-algorithm-greedy-
algo-2/

3) Shortest Path
Gagasan utama dalam menerapkan pola metode serakah untuk masalah shortestpath
sumber tunggal adalah untuk melakukan pencarian pertama kali "tertimbang" mulai dari titik
sumber. Secara khusus, kita dapat menggunakan metode serakah untuk mengembangkan
suatu algoritma yang secara iteratif menumbuhkan cloud ”dari simpul-simpul dari s, dengan
simpul-simpul yang memasuki cloud menurut jaraknya dari s. Dengan demikian, dalam
setiap iterasi, simpul berikutnya yang dipilih adalah simpul di luar cloud yang paling dekat
dengan s. Algoritma berakhir ketika tidak ada lagi simpul di luar cloud (atau ketika mereka di
luar cloud tidak terhubung ke yang ada di cloud), di mana kita memiliki jalur terpendek dari s
ke setiap simpul G yang dapat dijangkau dari s. Pendekatan ini merupakan contoh sederhana
dari pola desain metode serakah. Menerapkan metode serakah ke sumber tunggal, masalah
jalur terpendek, menghasilkan algoritma yang dikenal sebagai algoritma Dijkstra.

Gambar 9.6 Ilustrasi Shortest Path


inf = float ("inf")
start = "A"
stop = "D"

graph = {}

graph["A"] = {}
graph["A"]["B"] = 1
graph["A"]["C"] = 3

graph["B"] = {}
graph["B"]["C"] = 1
graph["B"]["D"] = 5

graph["C"] = {}
graph["C"]["D"] = 3

graph["D"] = {}

costs = {}
parents = {}
for node in graph:
costs[node] = inf
parents[node] = {}

costs[start] = 0
def find_cheapest_node(cost, not_checked):
lowest_cost = inf
cheapest_node = ""
for node in costs:
if node in not_checked and cost[node] <= lowest_cost:
lowest_cost = costs[node]
cheapest_node = node
return cheapest_node

if __name__== "__main__":
not_checked = [node for node in costs]
node = find_cheapest_node(costs, not_checked)
while not_checked:
print(f"Not Checked: {not_checked}")
cost = costs[node]
child_cost = graph[node]
for c in child_cost:
if costs[c] > cost + child_cost[c]:
costs[c] = cost + child_cost[c]
parents[c] = node

not_checked.pop(not_checked.index(node))
node = find_cheapest_node(costs, not_checked)

print(f"Costs: {costs}")
print(f"The cost to go from {start} to {stop} is {costs[stop]}!")

# print the path


if costs[stop] < inf:
path = [stop]
i = 0
while start not in path:
path.append(parents[path[i]])
i += 1
print(f"The shortest path is {path[::-1]}")
else:
print("A path could not be found")

hasil running :

Not Checked: ['A', 'B', 'C', 'D'] Not Checked: ['B', 'C', 'D'] Not
Checked: ['C', 'D'] Not Checked: ['D'] Costs: {'A': 0, 'B': 1, 'C':
2, 'D': 5} The cost to go from A to D is 5! The shortest path is
['A', 'B', 'C', 'D']

Kode 9.3 Input untuk membuat Shortest Path


Tree
Pakar produktivitas mengatakan bahwa terobosan datang dengan berpikir “nonlinier.”
Dalam bab ini, kita membahas salah satu struktur data nonlinier yang paling penting dalam
komputasi — tree/tree. Struktur tree memang merupakan terobosan dalam organisasi data,
karena memungkinkan kita untuk mengimplementasikan sejumlah algoritma lebih cepat
daripada ketika menggunakan struktur data linier, seperti daftar berbasis array atau daftar
terkait. Tree adalah jenis jaringan atau graph khusus, jadi terkadang istilah jaringan dan
graph dibicarakan ke dalam diskusi tentang tree. Misalnya, cabang/branch kadang-kadang
disebut edge, meskipun istilah itu lebih tepat untuk jaringan dan graph. Trees juga
menyediakan organisasi alami untuk data, dan akibatnya telah menjadi struktur di mana-mana
dalam sistem file, GUI, database, situs Web, dan sistem komputer lainnya.
Tidak selalu jelas apa yang dimaksud para pakar produktivitas dengan pemikiran
"nonlinier", tetapi ketika kita mengatakan bahwa tree "nonlinier," kita mengacu pada
hubungan organisasi yang lebih kaya informasi daripada hubungan "before" dan "after"
sederhana antara objek di dalam urutan. Hubungan dalam sebuah tree bersifat hierarkis,
dengan beberapa objek "di atas" dan beberapa "di bawah" lainnya. Sebenarnya, terminologi
utama untuk struktur data tree berasal dari tree keluarga, dengan istilah "induk/parent"
"anak/child" "leluhur/ancestor" dan "keturunan/descendent" menjadi kata yang paling umum
digunakan untuk menggambarkan hubungan. Gambar 9.7 menjelaskan tree hubungan
keluarga.

Gambar 9.7 Tree keluarga

Tree adalah tipe data abstrak yang menyimpan elemen secara hierarkis. Dengan
pengecualian elemen atas, setiap elemen dalam tree memiliki elemen induk dan nol atau lebih
elemen anak-anak. Sebuah tree biasanya divisualisasikan dengan menempatkan unsur-unsur
di dalam oval atau persegi panjang. Hubungan antara orang tua dan anak-anak dengan garis
lurus. (Lihat Gambar 9.8). Elemen teratas disebut sebagai root dari tree, tetapi digambarkan
sebagai elemen tertinggi, dengan elemen-elemen lain yang terhubung di bawah (kebalikan
dari tree botani umumnya).
Gambar 9.8 Contoh penggambaran tree

Gambar 9.8 menjelaskan sebuah tree dengan 17 simpul yang mewakili organisasi perusahaan
fiktif. Root menyimpan Electronics R'Us. Anak-anak dari root adalah R&D, Penjualan,
Pembelian, dan Manufaktur. Node internal menyimpan Penjualan, Internasional, Luar Negeri,
Electronics R'Us, dan Manufaktur.
Biasanya, cabang diGambar 9.sebagai panah yang menunjuk dari simpul induk ke simpul
anak. Dua node yang memiliki parents yang sama kadang-kadang disebut sibling. Setiap
simpul di tree memiliki tepat satu simpul induk, kecuali satu simpul akar unik, yang tidak
memiliki induk. Parents, child, grandchild, dan sebagainya, untuk simpul adalah keturunan
simpul itu. Node parents, parents induknya, dan seterusnya, sampai ke akar adalah ancestor
simpul itu. Semua istilah yang berorientasi pada hubungan ini masuk akal jika Anda
menganggap tree itu sebagai tree keluarga. Anda bahkan dapat mendefinisikan istilah-istilah
seperti sepupu, keponakan, dan kakek-nenek tanpa membingungkan siapa pun, meskipun
istilah-istilah itu tidak umum. Bergantung pada jenis tree, simpul mungkin memiliki jumlah
anak yang banyak. Jumlah anak yang dimiliki sebuah simpul adalah derajat simpul itu.
Derajat tree adalah derajat maksimum dari simpul-simpulnya. Misalnya, dalam tree derajat 2,
yang biasanya disebut tree biner, setiap simpul dapat memiliki paling banyak dua anak.
Sebuah simpul tanpa anak disebut simpul daun/leaf atau simpul eksternal. Sebuah simpul
yang memiliki setidaknya satu anak disebut simpul internal. Gambar 9.5.8 menjelaskan
penjelasan ini.

Gambar 9.9 Representatif tree


1) AST (Abstract Synax Tree)
Tree memiliki banyak aplikasi dalam Ilmu Komputer. Mereka digunakan dalam
berbagai jenis algoritma. Misalnya, setiap program Python yang Anda tulis dikonversi ke
tree, setidaknya untuk sementara waktu, sebelum dijalankan oleh juru bahasa Python. Secara
internal, program Python dikonversi ke struktur mirip tree yang disebut Abstract Synax Tree,
sering disingkat AST, sebelum dijalankan. Kita dapat membangun tree sintaksis abstrak kita
sendiri untuk ekspresi sehingga kita dapat melihat bagaimana tree dapat dievaluasi dan
mengapa kita ingin mengevaluasi tree.
Tree dapat disimpan menggunakan sejenis struktur yang serupa. Jika sebuah simpul dalam
tree memiliki dua anak, maka simpul itu akan memiliki dua tautan ke anak-anaknya sebagai
cloud dari daftar tertaut yang memiliki satu tautan ke simpul berikutnya dalam urutan.
Pertimbangkan ungkapan (5 + 4) * 6 + 3. Kita dapat membuat struktur sintaksis abstrak untuk
ekspresi ini seperti yang ditunjukkan pada Gambar 9.10 Karena operasi + adalah operasi
terakhir yang dilakukan ketika menilai fungsi ini, + simpul akan berada di akar tree. Ini
memiliki dua subtree, ekspresi di sebelah kiri tanda + dan 3 di sebelah kanan tanda +.

Gambar 9.10 Representatif AST


Kode 9.4 Abstract Synax Tree
2) Binnary Search Tree
Tree pencarian biner adalah tree di mana setiap node memiliki hingga dua anak. Selain itu,
semua nilai di subtree kiri dari sebuah simpul kurang dari nilai pada akar tree dan semua nilai
di subtree kanan dari sebuah node lebih besar atau sama dengan nilai pada akar tree. Definisi
ini memungkinkan untuk menulis kelas di mana nilai-nilai dapat dimasukkan ke tree sambil
mempertahankan definisi.
Gambar 9.11 Representatif BST

class Node:
def __init__(self, val):
self.value = val
self.leftChild = None
self.rightChild = None

def insert(self, data):


if self.value == data:
return False

elif self.value > data:


if self.leftChild:
return self.leftChild.insert(data)
else:
self.leftChild = Node(data)
return True

else:
if self.rightChild:
return self.rightChild.insert(data)
else:
self.rightChild = Node(data)
return True

def find(self, data):


if(self.value == data):
return True
elif self.value > data:
if self.leftChild:
return self.leftChild.find(data)
else:
return False
else:
if self.rightChild:
return self.rightChild.find(data)
else:
return False

def getHeight(self):
if self.leftChild and self.rightChild:
return 1 + max(self.leftChild.getHeight(), self.rightChild.getHeight())
elif self.leftChild:
return 1 + self.leftChild.getHeight()
elif self.rightChild:
return 1 + self.rightChild.getHeight()
else:
return 1

def preorder(self):
if self:
print (str(self.value))
if self.leftChild:
self.leftChild.preorder()
if self.rightChild:
self.rightChild.preorder()

def postorder(self):
if self:
if self.leftChild:
self.leftChild.postorder()
if self.rightChild:
self.rightChild.postorder()
print (str(self.value))

def inorder(self):
if self:
if self.leftChild:
self.leftChild.inorder()
print (str(self.value))
if self.rightChild:
self.rightChild.inorder()

class Tree:
def __init__(self):
self.root = None

def insert(self, data):


if self.root:
return self.root.insert(data)
else:
self.root = Node(data)
return True

def find(self, data):


if self.root:
return self.root.find(data)
else:
return False
def getHeight(self):
if self.root:
return self.root.getHeight()
else:
return -1

def remove(self, data):


# empty tree
if self.root is None:
return False

# data is in root node


elif self.root.value == data:
if self.root.leftChild is None and self.root.rightChild is None:
self.root = None
elif self.root.leftChild and self.root.rightChild is None:
self.root = self.root.leftChild
elif self.root.leftChild is None and self.root.rightChild:
self.root = self.root.rightChild
elif self.root.leftChild and self.root.rightChild:
delNodeParent = self.root
delNode = self.root.rightChild
while delNode.leftChild:
delNodeParent = delNode
delNode = delNode.leftChild

self.root.value = delNode.value
if delNode.rightChild:
if delNodeParent.value > delNode.value:
delNodeParent.leftChild = delNode.rightChild
elif delNodeParent.value < delNode.value:
delNodeParent.rightChild = delNode.rightChild
else:
if delNode.value < delNodeParent.value:
delNodeParent.leftChild = None
else:
delNodeParent.rightChild = None

return True

parent = None
node = self.root

# find node to remove


while node and node.value != data:
parent = node
if data < node.value:
node = node.leftChild
elif data > node.value:
node = node.rightChild

# case 1: data not found


if node is None or node.value != data:
return False

# case 2: remove-node has no children


elif node.leftChild is None and node.rightChild is None:
if data < parent.value:
parent.leftChild = None
else:
parent.rightChild = None
return True

# case 3: remove-node has left child only


elif node.leftChild and node.rightChild is None:
if data < parent.value:
parent.leftChild = node.leftChild
else:
parent.rightChild = node.leftChild
return True

# case 4: remove-node has right child only


elif node.leftChild is None and node.rightChild:
if data < parent.value:
parent.leftChild = node.rightChild
else:
parent.rightChild = node.rightChild
return True

# case 5: remove-node has left and right children


else:
delNodeParent = node
delNode = node.rightChild
while delNode.leftChild:
delNodeParent = delNode
delNode = delNode.leftChild

node.value = delNode.value
if delNode.rightChild:
if delNodeParent.value > delNode.value:
delNodeParent.leftChild = delNode.rightChild
elif delNodeParent.value < delNode.value:
delNodeParent.rightChild = delNode.rightChild
else:
if delNode.value < delNodeParent.value:
delNodeParent.leftChild = None
else:
delNodeParent.rightChild = None

def preorder(self):
if self.root is not None:
print("PreOrder")
self.root.preorder()

def postorder(self):
if self.root is not None:
print("PostOrder")
self.root.postorder()

def inorder(self):
if self.root is not None:
print("InOrder")
self.root.inorder()

bst = Tree()
print(bst.insert(10))
#print(bst.insert(5))
bst.preorder()
print(bst.getHeight())
#bst.postorder()
#bst.inorder()
print(bst.remove(10))
bst.preorder()
Hasil Running :
True
PreOrder
10
1
True

Kode 9.5 Binary Speech Tree


BAB XIII
FLASK WEB DEVELOPMENT II - TEMPLATE

Tujuan pembelajaran bab XIII, praktikan mampu untuk:


1. Mengetahui template Jinja2.
2. Mengetahui rendering template.
3. Mengetahui template variable.
4. Menggunakan control flow pada template.

Pada bab 12 kita hanya menampilkan kembali tampilan HTML secara manual melalui
Python. Padahal umumnya orang-orang menggunakan koneksi fungsi view untuk
menampilkan template HTML. Flask secara otomatis akan mencari template HTML pada
templates directory. Tugas yang jelas dari fungsi view adalah untuk menghasilkan respons
terhadap permintaan, seperti yang Anda lihat dalam contoh yang ditunjukkan di Bab 12.
Untuk permintaan yang paling sederhana, ini sudah cukup, tetapi dalam banyak kasus
permintaan juga memicu perubahan dalam kondisi aplikasi, dan fungsi view adalah tempat
perubahan ini dihasilkan.
Misalnya, contoh pada pengguna yang mendaftarkan akun baru di situs web. Pengguna
mengetik alamat email dan kata sandi dalam formulir web dan mengklik tombol Kirim. Di
server, permintaan dengan data yang disediakan oleh pengguna tiba, dan Flask
mengirimkannya ke fungsi view yang menangani permintaan pendaftaran. Fungsi view ini
perlu berbicara dengan database untuk mendapatkan pengguna baru ditambahkan, dan
kemudian menghasilkan respons untuk dikirim kembali ke browser yang menyertakan pesan
keberhasilan atau kegagalan. Kedua jenis tugas ini secara formal masing-masing disebut
logika bisnis dan logika presentasi.
Mencampur logika bisnis dan presentasi mengarah pada kode yang sulit dipahami dan
dipelihara. Bayangkan harus membuat kode HTML untuk tabel besar dengan
menggabungkan data yang diperoleh dari database dengan literal string HTML yang
diperlukan. Sehingga memindahkan logika presentasi ke dalam template membantu dalam
meningkatkan pemeliharaan aplikasi.
Templat adalah file yang berisi teks respons, dengan variabel placeholder untuk bagian
dinamis yang hanya akan diketahui dalam konteks permintaan. Proses yang menggantikan
variabel dengan nilai aktual dan mengembalikan string respons akhir disebut rendering.
Untuk tugas render template, Flask menggunakan mesin template yang disebut Jinja2.

Template Jinja2
Dalam bentuknya yang paling sederhana, templat Jinja2 adalah file yang berisi teks
respons. Kode 13.1 menunjukkan template Jinja2 yang cocok dengan respons fungsi view
index().
<h1>Welcome to the site!</h1>

Kode 13.1 Template Jinja2 yang cocok dengan respons fungsi view index()
Respons yang dikembalikan oleh fungsi view pengguna() dapat memiliki komponen
dinamis, yang diwakili oleh variabel. Kode 13.2 memperlihatkan template yang
mengimplementasikan respons ini.
<h1>Hello, {{name}}!</h1>

Kode 13.2 Respons komponen dinamis pada pengguna()

Sekarang di aplikasi edit text (Atom, visual studio, pycharm) buatlah sebuah file html
sebagai template. Pada buku ini, kami menggunakan aplikasi Atom. Gambar 13.1
menjelaskan directory template. Buatlah sebuah folder dengan nama templates. Di dalam
folder tersebut buatlah sebuah file html dengan nama 00-Basic-Template.html. File html ini
adalah template yang akan kita panggil menggunakan python flask.

Gambar 13.1 Directory template

Rendering Template
Secara default, Flask mencari template di subdirektori template yang terletak di dalam
direktori aplikasi utama. Fungsi tampilan dalam aplikasi perlu dimodifikasi untuk membuat
template ini. Kode 13.3 menjelaskan modifikasi ini. Buatlah sebuah file basic1.py didalam
folder flasky (file python harus di-level yang sama dengan folder templates)
from flask import Flask, render_template
app = Flask(__name__)

@app.route('/')
def index():
# Connecting to a template (html file)
return render_template('00-Basic-Template.html')

if __name__ == '__main__':
app.run(debug=True)

Kode 13.3 Modifikasi fungsi tampilan

Rendering template di flask cukup dengan mengimport fungsi render_template dan


memanggil fungsi ini pada index(). Perlu diperhatikan bahwa nama file html harus sama
dengan yang akan dipanggil pada script python. Kemudian jalankan template dengan running
script python basic1.py pada cmd. Hasilnya akan terlihat pada web browser pada Gambar
13.2.

Gambar 13.2 Hasil render_template


Selanjutnya kita bisa menambahkan dan mengkoneksikan file statis menggunakan
template. Kita akan menambah line pada Gambar 13.1 pada Kode 13.4.

<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<h1>Welcome to the site!</h1>
<h2>Here is a cute picture of a puppy!</h2>
<img src="../static/puppy_pic.jpg" width="600"
height="400">
</body>
</html>
Kode 13.4 Mengkoneksikan file statis berupa gambar

Kita ingin menambahkan gambar kedalam tampilan web browser. Setelah menambahkan line
pada Kode 13.4, selanjutnya tambahkan folder yang mengandung file gambar puppy_pic.jpg
pada folder flasky (Gambar 13.3).
Gambar 13.3 Folder static

Kemudian run kembali file basic1.py dan akan menampilkan tampilan pada Gambar 13.4.

Gambar 13.4 Tampilan dengan gambar


Template Variable
Dengan menggunakan fungsi render_template, kita dapat secara langsung me-render
sebuah file HTML dengan flask. Namun, kita belum secara optimal menggunakan
kemampuan python. Kita ingin mampu menggunakan python di aplikasi yang dibangun,
mengganti dan meng-update variable dan mengirimkan informasi ke template. Untuk itu kita
menggunakan template Jinja. Template Jinja memungkinkan untuk secara langsung
memasukkan variable dari kode python ke file HTML. Sintaks untuk memasukkan variable
adalah:
{{some_variable}}
Kode 13.5 Memasukkan variabel dari kode python ke dalam file HTML

Kita dapat memasukkan string, lists, dictionaries dan lainnya ke dalam template. Kita set
parameter pada fungsi render_template dan kemudian menggunakan sintaks {{}} untuk
memasukkannya ke dalam template. Contoh kita akan membuat tampilan web pada Kode
13.6.
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<h1>Hello!</h1>
</body>
</html>

Kode 13.6 Tampilan web dasar

Ketika dijalankan, akan menampilkan Gambar 13.5.

Gambar 13.5 Tampilan awal

Kemudian kita akan menambahkan sebuah variable. Katakanlah ada sebuah variable nama
yang mengikuti Hello!. Maka pada file python kita akan menulis Kode 13.7.
from flask import Flask, render_template
app = Flask(__name__)

@app.route('/')
def index():
some_variable = "Jose"
return render_template('00-Basic-Template.html',
my_variable=some_variable)

if __name__ == '__main__':
app.run(debug=True)

Kode 13.7 Pendefinisian variabel Jose

Pada Kode 13.7 kita menambahkan variable “Jose” dengan nama variable some_variable.
Kemudian variable ini dipanggil pada render_template dengan nama my_variable.
Selanjutnya yang harus dilakukan adalah menuliskan {{my_variable}} pada template, seperti
pada Kode 13.8.

<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<h1>Hello! {{my_variable}}</h1>
</body>
</html>

Kode 13.8 Memasukkan variabel pada file HTML

Jalankan file python dan akan menghasilkan tampilan seperti pada Gambar 13.6.

Gambar 13.6 Tampilan sesudah insert variable


Kita juga bisa menambahkan list dan dictionary ke dalam variable. Kode13.9
menjelaskan penambahan list dan dictionary ke dalam template.
from flask import Flask, render_template
app = Flask(__name__)

@app.route('/')
def index():
name = "Jose"
letters = list (name)
pup_dictionary = {'pup_name':'Sammy'}
return render_template('00-Basic-Template.html',
name=name,letters=letters, pup_dictionary=pup_dictionary)

if __name__ == '__main__':
app.run(debug=True)

Kode 13.9 Penambahan list pada file python

Kemudian tambahkan beberapa line kode ke dalam file HTML seperti Kode 13.10.

<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<h1>Hello! {{name}}</h1>
<h2>{{letters}}</h2>
<h3>{{pup_dictionary}}</h3>
</body>
</html>

Kode 13.10 Pemanggilan list dari file python pada file HTML

Hasilnya terlihat pada Gambar 13.7.

Gambar 13.7 Tampilan list dan dictionary


Control Flow
Selain dapat menggunakan variable, di Jinja kita juga bisa menggunakan control flow
(for loops dan if statement). Sintaks yang digunakan adalah {% %}. Contoh kode template
disajikan pada Kode 13.11

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<p>Here we use a for loop for a list</p>
<ul>
{% for pup in puppies %}
<li>{{pup}}</li>
{% endfor %}
</ul>
<p>We can also add if/else statements</p>
{% if 'Rufus' in puppies %}
<p>Found you in the list of puppies Rufus!</p>
{% else %}
<p>Hmm, Rufus isn't in this list.</p>
{% endif %}

</body>
</html>

Kode 13.11 Control flow pada Jinja

File python disajikan pada Kode 13.12

from flask import Flask, render_template


app = Flask(__name__)

@app.route('/')
def index():
puppies = ['Fluffy','Rufus','Spike']
# Connecting to a template (html file)
return render_template('00-Basic-Template.html',
puppies=puppies)

if __name__ == '__main__':
app.run(debug=True)
Kode 13.12 Deklarasi list pada file python

Ketika dijalankan akan seperti Gambar 13. 8.


Gambar 13.8 Control flow dalam template

Secara umum control flow dalam template Jinja mengikuti Kode13.9.

<ul>
{% for item in mylist %}
<il> {{item}}</il>
{% endfor %}
</ul>

Kode 13.9 Struktur dasar control flow dalam template jinja

CHAPTER XIV
KOMPUTASI PARALEL DENGAN FRAMEWORK SPARK

Tujuan:
 Mengetahui Spark dan komponennya
 Mengetahui mekanisme Spark dan RDD
 Mampu menginstalasi Spark
 Mampu membuat program sederhana menggunakan Spark

I. Pengenalan Spark
Spark adalah mesin yang umum dan cepat yang digunakan untuk memproses data dalam skala
besar (big data). Logo Spark ditunjukkan pada Gambar 14.1. Spark adalah sebuah framework untuk
menulis kode untuk melakukan tugas-tugas pengolahan data dan mengatur pendistribusian proses
pengolahan tersebut pada komputer cluster. Spark bekerja menggunakan RDD (resilient distributed
data), dengan cara user mengunggah data kedalam RDD Spark untuk selanjutnya secara otomatis
ditransformasi atau disebarkan kepada komputer cluster berdasarkan RDD tersebut.
Gambar 14.1 Logo spark

Gambar 14.2 Komponen Spark

Spark terdiri dari beberapa komponen seperti yang ditunjukkan pada Gambar 14.2 Masing-
masing komponen tersebut dijelaskan sebagai berikut:

Spark Core
Spark Core berisi fungsionalitas dasar Spark, termasuk komponen untuk penjadwalan tugas,
manajemen memori, pemulihan kesalahan, berinteraksi dengan sistem penyimpanan, dan banyak
lagi. Spark Core juga merupakan rumah bagi API yang mendefinisikan RDD, yang merupakan
abstraksi pemrograman utama Spark. RDD mewakili kumpulan item yang didistribusikan di banyak
node komputasi yang dapat dimanipulasi secara paralel. Spark Core menyediakan banyak API untuk
membangun dan memanipulasi koleksi ini. Spark Core merupakan inti dari Spark yang terdiri dari
komponen sistem penyimpanan dan pengaturan cluster (Gambar 14.3)

Gambar 14.3 Komponen Spark Core

Spark SQL
Spark SQL adalah paket Spark untuk bekerja dengan data terstruktur. Ini memungkinkan kueri
data melalui SQL dan juga varian Apache Hive dari SQL — disebut Hive Query Language (HQL) —dan
mendukung banyak sumber data, termasuk tabel Hive, Parket, dan JSON.
Spark Streaming
Spark Streaming adalah komponen Spark yang memungkinkan pemrosesan aliran langsung data
atau pemroresan data secara real time. Contoh aliran data termasuk file log yang dihasilkan oleh
server web produksi, atau antrian pesan yang berisi pembaruan status yang diposting oleh pengguna
layanan web. Spark Streaming menyediakan API untuk memanipulasi aliran data yang sangat cocok
dengan API RDD Spark Core, sehingga memudahkan programmer untuk mempelajari proyek dan
berpindah di antara aplikasi yang memanipulasi data yang tersimpan dalam memori, pada disk, atau
tiba secara real time.

MLib Machine Learning


MLlib menyediakan beberapa jenis algoritma pembelajaran mesin, termasuk klasifikasi, regresi,
pengelompokan, dan penyaringan kolaboratif, serta fungsionalitas pendukung seperti evaluasi
model dan impor data. Ini juga menyediakan beberapa primitif ML tingkat rendah, termasuk
algoritma optimasi gradient descent generik. Semua metode ini dirancang untuk berkembang di
seluruh cluster.

GraphX
GraphX adalah library untuk memanipulasi grafik (mis., Grafik jejaring sosial) dan melakukan
perhitungan paralel grafik. Seperti Spark Streaming dan Spark SQL, GraphX memperluas API RDD
Spark, memungkinkan untuk membuat grafik diarahkan dengan sifat sewenang-wenang yang
melekat pada setiap titik dan tepi. GraphX juga menyediakan berbagai operator untuk memanipulasi
grafik (mis., Subgraph dan mapVertices) dan perpustakaan algoritma grafik umum (mis.,
Penghitungan PageRank dan segitiga).

II. Mekanisme Spark


Aplikasi Spark terdiri dari drivers dan executors. Driver menjalankan fungsi utama, berada di
sebuah node di cluster, dan bertanggung jawab untuk tiga hal: menjaga informasi tentang Aplikasi
Spark; menanggapi program atau input pengguna; dan menganalisis, mendistribusikan, dan
menjadwalkan pekerjaan di seluruh pelaksana. Driver sangat penting dan merupakan jantung dari
Spark dan menyimpan semua informasi yang relevan selama masa pakai aplikasi.
Para executors bertanggung jawab untuk benar-benar melaksanakan pekerjaan yang ditugaskan
oleh driver kepada mereka. Ini berarti bahwa setiap executors bertanggung jawab untuk hanya dua
hal: mengeksekusi kode yang ditugaskan kepadanya oleh driver, dan melaporkan keadaan
perhitungan pada pelaksana itu kembali ke node driver.

Gambar 14.2 Mekanisme Spark


Berikut adalah poin-poin penting untuk dipahami tentang Aplikasi Spark pada titik ini:
 Spark menggunakan manajer klaster yang melacak sumber daya yang tersedia
 Driver bertanggung jawab untuk menjalankan perintah program di seluruh executors untuk
menyelesaikan tugas yang diberikan
Executors sebagian besar, akan selalu menjalankan kode Spark. Namun, driver dapat "didorong"
dari sejumlah bahasa yang berbeda melalui API bahasa Spark, python merupakan salah satu bahasa
Spark tersebut (Gambar 14.3).

Gambar 14.3 Hubungan SparkSession dan Spark Language API

Pada buku ini, program drivernya adalah python melalui jupyter notebook (pyspark), dan Anda bisa
mengetikkan operasi yang ingin Anda jalankan pada notebook tersebut. Program driver mengakses
Spark melalui objek SparkContext, yang mewakili koneksi ke cluster komputasi. SparkContext secara
otomatis dibuat untuk Anda sebagai variabel bernama sc. Setelah Anda memiliki SparkContext, Anda
dapat menggunakannya untuk membuat RDD. Misalkan kita memanggil sc.textFile() untuk membuat
RDD yang mewakili baris teks dalam file. Kemudian kita dapat menjalankan berbagai operasi pada
baris ini, seperti count(). Untuk menjalankan operasi ini, program driver mengelola sejumlah node
yang executor. Misalnya, jika kita menjalankan operasi count() pada sebuah cluster, mesin yang
berbeda mungkin menghitung baris dalam rentang file yang berbeda.

RDD (Resillient Distributed Data)

RDD terdiri dari tiga properti/fungsi utama yaitu: partitions, read-only, dan lineage.

Partisi
Pada RDD, data diorganisasi ke dalam partisi-partisi. Sebagai contoh terdapat suatu dataset
yang ditunjukkan pada Gambar 14.4. Spark melalui RDD mempartisi data tersebut ke dalam
beberapa bagian untuk diproses pada mesin yang berbeda (cluster) yang diistilahkan dalam node
(Gambar 14.5).

Gambar 14.4 Dataset awal Gambar 14.5 Dataset partisi


Read-only
RDD hanya bisa dibaca, user tidak dapat mengubah data yang terdapat di dalam RDD
(immutable). Data yang ada didalam RDD tidak dapat dirubah, maksudnya dalam artian tidak bisa
ditambah. Di dalam RDD data hanya bisa di transformasi dan dilakukan aksi. Beberapa daftar
transformasi dan aksi dijelaskan pada Tabel 14.1 dan Tabel 14.2.

Tabel 14.1 Transformasi dalam RDD


Mentransformasi RDD Keterangan
Map Fungsi map mengulang perintah dalam
setiap baris dalam RDD dan
mentransformasikannya ke dalam RDD
baru.
Contoh: RDD {1, 2, 3, 4, 5} jika kita
melakukan “rdd.map(x=>x+2)” kita akan
mendapatkan hasil (3, 4, 5, 6, 7)
Flatmap Untuk setiap elemen input, akan
menghasilkan banyak elemen dalam RDD
keluaran. Penggunaan flatMap() yang
paling sederhana adalah untuk membagi
setiap string input menjadi karakter kata.
Filter Fungsi Spark RDD filter() mengembalikan
RDD baru, hanya berisi elemen yang
memenuhi predikat.
Contoh: RDD berisi lima bilangan asli
pertama (1, 2, 3, 4, dan 5) dan predikatnya
adalah cek untuk bilangan genap. RDD yang
dihasilkan setelah filter hanya akan berisi
angka genap yaitu, 2 dan 4.
Distinct Mengembalikan dataset baru yang berisi
elemen-elemen berbeda dari dataset
sumber. Sangat membantu untuk
menghapus data duplikat.
Contoh: jika RDD memiliki elemen (Spark,
Spark, Hadoop, Flink), maka rdd.distinct ()
akan memberikan elemen (Spark, Hadoop,
Flink)
Union Dengan fungsi union(), kita mendapatkan
elemen-elemen kedua RDD di RDD baru.
Contoh: elemen RDD1 adalah (Spark, Spark,
Hadoop, Flink) dan RDD2 adalah (Big data,
Spark, Flink) sehingga rdd1.union (rdd2)
yang dihasilkan akan memiliki elemen
(Spark, Spark, Spark, Hadoop, Flink, Flink,
Big data)
Intersection Dengan fungsi intersection(), kita hanya
mendapatkan elemen umum kedua RDD di
RDD baru.
Contoh: elemen RDD1 adalah (Spark, Spark,
Hadoop, Flink) dan RDD2 adalah (Big data,
Mentransformasi RDD Keterangan
Spark, Flink) sehingga rdd1.intersection
yang dihasilkan (rdd2) akan memiliki
elemen (spark)

Tabel 14.2 Aksi dalam RDD


Aksi RDD Keterangan
Count() count() mengembalikan jumlah elemen
dalam RDD.
Contoh: RDD memiliki nilai {1, 2, 2, 3, 4, 5,
5, 6} dalam RDD ini "rdd.count ()" akan
memberikan hasil 8
Collect() Tindakan collect() adalah operasi umum
dan paling sederhana yang mengembalikan
seluruh konten RDD ke program driver.
Aplikasi collect() adalah unit testing di
mana seluruh RDD diharapkan sesuai
dengan memori.
Take(n) Tindakan take(n) mengembalikan n
sejumlah elemen dari RDD.
Contoh: RDD {1, 2, 2, 3, 4, 5, 5, 6} dalam
RDD ini “take (4)” akan memberikan hasil
{2, 2, 3, 4}
Top() Jika data ada di RDD, maka kita dapat
mengekstrak elemen atas dari RDD
menggunakan top()
CountByValue() CountByValue() menampilkan seberapa
banyak setiap elemen terjadi di RDD.
Contoh: RDD memiliki nilai {1, 2, 2, 3, 4, 5,
5, 6} dalam RDD ini "rdd.countByValue ()"
akan memberikan hasil {(1,1), (2,2), (3, 1),
(4,1), (5,2), (6,1)}

Lineage
Spark menyimpang setiap transformasi yang dilakukan terhadap RDD. Masing-masing RDD tahu
secara pasti dari mana ia berasal. Ketika user membuat RDD, hal tersebut secara otomatis disertai
metadata. Metadata adalah data tentang data, data yang menggambarkan transformasi data atau
seolah-olah hal tersebut adalah data. Setelah user melakukan transformasi terhadap RDD, metadata
akan mencatat perubahan tersebut, transformasi apa yang dilakukan dan apa data RDD
parent/sebelumnya. Hal ini dijelaskan pada Gambar 14.6. Terdapat data.csv yang diinput ke dalam
RDD1. Kemudian data dalam RDD1 dilakukan transformasi sehingga menghasilkan data pada RDD2.
Aksi yang diterapkan pada Spark dilakukan pada RDD terakhir atau child dari RDD. Adanya
mekanisme ini memungkinkan user untuk mentelusuri transformasi dari RDD. Mekanisme ini
berujung hal penting: Spark memiliki toleransi tinggi. Jika terjadi kesalahan yang tidak diinginkan,
user dapat merekonstruksi dari RDD sumber.
Gambar 14.6 Metadata dalam RDD

III. Instalasi Sprak di Windows


Untuk menginstall Spark pada Windows dilakukan dengan beberapa tahapan. Untuk
memudahkan pemahaman instalasi, silahkan ikuti video pada link bit.ly/PenkomPython di dalam
folder BAB 14 – INSTALASI SPARK.

IV. Program Sederhana Menggunakan Spark


Untuk menggunakan framework Spark, silahkan ketikkan pyspark pada Command Prompt.
Secara otomatis hal akan menampilkan notebook yang telah dilengkapi framework Spark. Jika
pyspark belum terinstall, maka bagian ini akan menampilkan pesan error.

Pada bagian ini, kita akan membahas penggunakan sederhana Spark untuk mengestimasi nilai
dari Pi. Kita hanya akan menggunakan driver dengan cluster manager YARN yang terdapat pada
HADOOP. Secara default, Spark dengan YARN telah memiliki 2 executors dengan masing-masing
executors bekerja pada kapasitas 1 core sedangkan driver secara default juga bekerja pada 1 core.
Berikut kode yang akan digunakan:

Kode 14.1

Pada kode 14.1 terlihat kita menggunakan SparkContext dengan variabel sc. Seperti telah disebutkan
di atas, SparkContext berfungsi untuk inisialisasi awal menggunakan framework Spark. Selah
memanggil SparkContext, selanjutnya kita membuat RDD dengan variabel dots dan metod
parallelize. Metod parallelize berguna untuk memasukkan data ke dalam RDD untuk membentuk
dataset terdistribusi yang dapat dioperasikan secara paralel.
Kode 14.2

Kode tersebut menunjukkan penggunaan Spark untuk mengestimasi nilai Pi terhadap input random
yang digunakan. Titik berwarna merah merupakan nilai estimasi Pi.

Anda mungkin juga menyukai