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.
- idenya G = (V, E)
V = nodes
E = edges
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
Teknik di dalam machine learning yang meniru disebut (neural network) artinya saraf2 di bagian kita.
Trees
Tekniknya
Ranting (Branch)
Daun (Leaf)
Phylogeny trees
2. Kruskal's Algorithm
PR
Untuk spanning tree (untuk prim dan shortest path) dibandingkan kasus waktunya
Cara (Azizah)
Durasi (lamanya)
Caranya :
buat variabel waktu awal kemudian proses setalah itu waktu proses akhir. kemudian dikurangi waktu
variabel akhir dengan variabel awal.
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.
1. DDL : artinya si SQL ini punya kemampuan untuk mendefinisikan atau memodifikasi struktur data.
Microsoft SQL :
Karena server dia memilki client, yang menggunakan atau memanfaatkan database serta berfungsi
menampilkan dan memanipulasi data
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.
1. Pivot
2. Power Query
3. ETL
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)
- 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.
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.
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.
• 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.
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
dimana :
x = variabel bebas
β₁ = koefisien kemiringan
β₀ = konstanta/nilai minimum
ℇ = estimasi eror
ŷ = b₀ + b₁xᵢ
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
• Scipy : memungkinkan kita untuk menangani operasi aljabar dan matriks serta
operasi matematika lainya.
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.
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.
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.
class Graph():
for v in range(self.V):
if key[v] < min and mstSet[v] == False:
min = key[v]
min_index = v
return min_index
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();
Output:
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
def __init__(self,vertices):
self.V= vertices #No. of vertices
self.graph = [] # default dictionary
# to store graph
parent = [] ; rank = []
# 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()
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.
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]}!")
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']
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.
class Node:
def __init__(self, val):
self.value = val
self.leftChild = None
self.rightChild = None
else:
if self.rightChild:
return self.rightChild.insert(data)
else:
self.rightChild = Node(data)
return True
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
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
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
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>
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.
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)
<!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.
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>
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)
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>
Jalankan file python dan akan menghasilkan tampilan seperti pada Gambar 13.6.
@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)
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
<!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>
@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
<ul>
{% for item in mylist %}
<il> {{item}}</il>
{% endfor %}
</ul>
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
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)
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.
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).
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 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).
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
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.