Algoritma & Struktur Data
~ Fungsi ~
Nb: Untuk segala bentuk diskusi, kritik dan saran mengenai materi silahkan hubungi admin!
| Kontak | Konsultasi & Diskusi ke : \(\downarrow\) |
| dsciencelabs@outlook.com | |
| https://www.instagram.com/dsciencelabs/ | |
| RPubs | https://rpubs.com/dsciencelabs/ |
| Github | https://github.com/dsciencelabs/ |
| Telegram | @dsciencelabs |
Apa itu Fungsi ?
Suatu fungsi (function) dalam lingkungan pemrograman adalah satu set instruksi untuk melaksanakan tugas-tugas tertentu. Seorang programmer membangun sebuah fungsi untuk menghindari pengulangan tugas yang sama atau mengurangi kompleksitas.
Dari gambar diata diperlihatkan bahwa:
- Jika \(x=5\) adalah masukan (input)
- Diberikan instruksi (fungsi) \(f(x)=x+3\), yang disebut badan progam (body)
- Maka \(y=8\) aadalah keluaran (output)
Sehingga, komponen yang harus terkandung didalam fungsi adalah:
- \(f\) adalah
Nama Fungsiyang digunakan untuk menjalan fungsi (perintah) pada program tertentu. - \(x\) adalah
Masukan, tetapi mungkin saja tidak ada argumen. - \(x+3\) adalah
Badan Programyang mendefinisikan fungsi yang dilakukan. Keluaranadalah perintah pengembalian satu atau lebih nilai dan mungkin saja tidak memuat pengembalian nilai.
Dalam berbagai kesempatan, programer diharapkan untuk mampu membangun fungsi (algoritma) sendiri dikarenakan tugas tertentu tidak dapat diselesaikan dengan fungsi yang sudah ada atau tidak ditemukannya fungsi dalam bahasa pemoragraman yang sedang digunakan. Pembentukan fungsi ini akan dibagi menjadi dua, yaitu fungsi dengan satu-argumen dan fungsi dengan multi-argument.
Fungsi Satu Argumen
Fungsi menerima nilai dan mengembalikan kuadrat dari suatu nilai. Berikut ini, dilampirkan struktur penulisan suatu fungsi dengan satu argumen secara garis besar:
R
nama.fungsi <- function(argumen)
{
perhitungan perintah yang dilakukan terhadap argumen
beberapa kode lain
}
Python
def nama.fungsi(argumen):
keluaran = perintah yang dilakukan
return print(keluaran)
Nilai Kuadrat
Jika diberikan suatu vector \(x=1,2,3,\cdots, n\), maka nilai \(x^2\) dapat dihitung dengan fungsi berikut;
R
masukan=c(1:5) # nilai x awal (1,2,3,4,5)
x_kuadrat <- function(x) # nama fungsi dan argumen
{ # pembukaan fungsi
x*x # perintah yang dilakukan
} # penutupan fungsi
x_kuadrat(masukan) # menggunakan fungsi
cat("Hasil kuadrat:",x_kuadrat(masukan)) # menggunakan fungsi atau,
masukan=c(1:5) # nilai x awal (1,2,3,4,5)
x_kuadrat <- function(x) # nama fungsi dan argumen
{ # pembukaan fungsi
keluaran = x^2 # perintah yang dilakukan
return(cat("Hasil kuadrat:",keluaran)) # print hasil dengan komentar
} # penutupan fungsi
x_kuadrat(masukan) # menggunakan fungsiPython
import numpy as np # paket dasar untuk komputasi
masukan=np.arange(1, 6) # nilai x awal (1,2,3,4,5)
def x_kuadrat(x): # nama fungsi dan argumen
keluaran = x*x # perintah yang dilakukan
return print(keluaran) # print hasil
x_kuadrat(masukan) # menggunakan fungsiatau,
import numpy as np # paket dasar untuk komputasi
masukan=np.arange(1, 6) # nilai x awal (1,2,3,4,5)
def x_kuadrat(x): # nama fungsi dan argumen
keluaran = x**2 # perintah yang dilakukan
return print("Hasil kuadrat:",keluaran) # print hasil dengan komentar
x_kuadrat(masukan) # menggunakan fungsiNilai Akar
Jika diberikan suatu vector adalah kelipatan 9 dari 3 sampai 27, maka nilai \(\sqrt[3]{x}\) dapat dihitung dengan fungsi berikut;
R
masukan = seq(from=3, to=27, by = 9) # kelipatan 9 dari 3 sampai 27
akar <- function(x) # nama fungsi dan argumen
{ # pembukaan fungsi
x^(1/3) # perintah yang dilakukan
} # penutupan fungsi
akar(masukan) # menggunakan fungsiPython
import numpy as np # paket dasar untuk komputasi
masukan = np.arange(3, 27, 9) # kelipatan 9 dari 3 sampai 27
def akar(x): # nama fungsi dan argumen
keluaran = x**(1/3) # perintah yang dilakukan
return print("Hasil kuadrat:",keluaran) # print hasil dengan komentar
akar(masukan) # menggunakan fungsiNilai Rerata
Jika diberikan suatu vector adalah 100 sampel acak dengan rata-rata 160 dan standar deviasi 15, maka nilai rata-ratanya \(\bar{x}\) dapat dihitung dengan fungsi berikut;
R
masukan = rnorm(100, mean=160, sd=15) # 100 sampel,mean=160, dan sd=15
rerata<- function(x) # nama fungsi dan argumen
{ # pembukaan fungsi
sum(x)/length(x) # perintah yang dilakukan
} # penutupan fungsi
rerata(masukan) # menggunakan fungsiPython
import numpy as np # paket dasar untuk komputasi
masukan = np.random.normal(160, 15, 100) # 100 sampel,mean=160,dan sd=15
def rerata(x): # nama fungsi dan argumen
return sum(x)/len(x) # perintah yang dilakukan
rerata(masukan) # menggunakan fungsiKonversi Persen
Misalkan anda ingin menyajikan angka pecahan sebagai nilai persentase, dibulatkan dengan baik ke dalam dua digit desimal. Berikut cara mencapainya:
- Kalikan bilangan pecahan dengan 100.
- Bulatkan hasilnya ke satu tempat desimal: Anda dapat menggunakan fungsi
round()untuk melakukan ini. - Tempelkan tanda persentase setelah angka yang dibulatkan dengan mengunakan fungsi
paste() - Cetak hasilnya: dengan menggunakan
print().
R
Sebenarnya, akan sangat mudah menerjemahkan langkah-langkah ini ke dalam skrip R berikut ini:
x <- c(0.8765, 0.4321, 0.1234, 0.05678)
persen <- round(x*100, digits = 2)
a <- paste(persen, "%")
print(a)Untuk membuat skrip ini menjadi sebuah fungsi, Anda perlu melakukan beberapa hal berikut:
x <- c(0.8765, 0.4321, 0.1234, 0.05678)
persen <- function(x)
{
persen_2digit <- round(x * 100, digits = 2)
keluaran <- paste(persen_2digit, "%")
return(keluaran)
}
persen(x)Jika anda menyimpan skrip ini sebagai file .R: misalnya, addPercent.R ke komputer/PC anda dalam sebuah folder. Kemudian, kapapun anda dapat memanggil skrip ini di konsol dengan perintah berikut:
source('Fungsi/persen.R') # pastikan direktori anda benar
persen(x) # menggunakan fungsi anda Catatan: Sebenarnya sudah ada library yang dapat anda gunakan untuk mengubah suatu array di R yaitu:
library(scales)
percent(x,accuracy=0.01)Python
Tugas: Selesaikan contoh ini degan Python
Fungsi Multi Argumen
Kita dapat menulis fungsi dengan lebih dari satu argumen. Berikut Ini adalah fungsi langsung mengalikan dua variabel.
R
nama.fungsi <- function(argumen1, argumen2,...., argumen_n)
{
perhitungan perintah yang dilakukan terhadap argumen
beberapa kode lain
}
Python
def nama.fungsi(argumen1, argumen2,...., argumen_n):
keluaran = perintah yang dilakukan
return print(keluaran)
Luas & Keliling
Misalkan anda ingin menghitung luas dan keliling suatu persegi (panjang), diketahui panjang \(p\) dan lebarnya \(l\). Berikut ini diperlihatkan penyelesaian dengan menggunakan fungsi:
R
luas_keliling <- function(p,l) # nama fungsi dan argumen
{ # pembukaan fungsi
luas= p*l # menghitung luas
keliling= 2*(p+l) # menghitung keliling
return (cat(c("Luas:",luas, "\n",
"Keliling:",keliling)))
} # penutupan fungsi
luas_keliling(8,6) # menggunakan fungsiPython
def luas_keliling(p,l): # nama fungsi dan argumen
luas= p*l # menghitung luas
keliling= 2*(p +l) # menghitung keliling
return (print("Luas:",luas, "\n",
"Keliling:",keliling))
luas_keliling(8,6) # menggunakan fungsiLuas, Keliling dan Volume
Misalkan anda ingin menghitung luas, keliling dan volume suatu balok (kubus), diketahui panjang \(p\), lebarnya \(l\), dan tinggi \(t\). Berikut ini diperlihatkan penyelesaian dengan menggunakan fungsi:
R
lukelvol <- function(p,l,t) # nama fungsi dan argumen
{ # pembukaan fungsi
luas_permukaan = 2*((p*l)+(p*l)+(t*l)) # menghitung luas permukan
keliling = 2*(p +l) # menghitung keliling rusuk
volume = p*l*t # menghitung volume balok (kubus)
return (cat(c("Luas Permukaan:",
luas_permukaan, sep = "\n",
"Keliling:",keliling,sep="\n",
"Volume:",volume)))
} # penutupan fungsi
lukelvol(6,7,8) # menggunakan fungsiPython
def lukelvol(p,l,t): # nama fungsi dan argumen
luas = 2*((p*l)+(p*l)+(t*l)) # menghitung luas permukan
keliling = 2*(p +l) # menghitung keliling rusuk
volume= p*l*t # menghitung volume balok (kubus)
return print("Luas:",luas, "\n",
"Keliling:",keliling,"\n",
"Volume:",volume)
lukelvol(6,7,8) # menggunakan fungsiRerata Frekuensi
Jika diberikan data berfrekensi sebagai berikut:
| Tinggi Badan | Frekuensi |
|---|---|
| 150 | 16 |
| 155 | 23 |
| 160 | 28 |
| 165 | 40 |
| 170 | 39 |
| 175 | 22 |
| 180 | 9 |
Maka cara menghitung reratanya dengan bantuan fungsi adalah sebagai berikut:
R
Tinggi<-seq(150,180,5) # masukan/argumen 1
Frek<-c(15,23,28,40,39,22,9) # masukan/argumen 2
rerata_frek <- function(x,frek) # nama fungsi dan argumen
{ # pembukaan fungsi
keluaran=sum(x*frek)/length(frek) # menghitung rerata frekuensinya
return(cat("Reratanya:",keluaran)) # print hasil dengan komentar
} # penutupan fungsi
rerata_frek(Tinggi,Frek) # menggunakan fungsiPython
import numpy as np # paket dasar untuk komputasi
Tinggi = np.arange(150,185,5) # masukan/argumen 1
Frek = [15,23,28,40,39,22,9] # masukan/argumen 2
def rerata_frek(x,frek): # nama fungsi dan argumen
keluaran=sum(x*frek)/len(frek) # menghitung rerata frekuensinya
return print("Reratanya:", keluaran) # print hasil dengan komentar
rerata_frek(Tinggi,Frek) # menggunakan fungsiFungsi untuk Data Frame
Normalisasi
Seperti yang telah saya sebutkan sebelumnya, ilmuwan data perlu melakukan banyak tugas berulang. Sebagian besar waktu, kami menyalin dan menempelkan potongan kode berulang-ulang. Contoh lain, normalisasi suatu variabel sangat disarankan sebelum kita menjalankan algoritma pembelajaran mesin. Rumus untuk menormalkan variabel adalah:
\[\text{Normalisasi}={x-x_{min} \over x_{max} - x_{min}}\]
R
Mari kita buat kerangka data seperti yang telah kita pelajari di dasar-dasar R di bagian terakhir.
set.seed(123) # statik random set
a = rnorm(100, 5, 1) # 100 bilangan acak normal
b = rnorm(100, 5, 1) # 100 bilangan acak normal
c = rnorm(100, 5, 1) # 100 bilangan acak normal
df<- data.frame(a,b,c) # buat data frame
df # mencetak hasil data frame
typeof(df)Kita sudah mengetahui cara menggunakan fungsi min() dan max() di R. Oleh karena itu kita dapat menggunakan rumus normalisasi yang kita miliki di atas untuk mendapatkan nilai normalisasi df sebagai berikut:
df.norm <- data.frame(
a = (df$a -min(df$a))/(max(df$a)-min(df$a)),
b = (df$b -min(df$b))/(max(df$b)-min(df$b)),
c = (df$c -min(df$c))/(max(df$c)-min(df$c))
)
df.norm Namun, metode ini rentan terhadap kesalahan penulisan koding. Kita bisa menyalin koding yang hampir serupa, tetapi mungkin saja lupa mengubah variabel yang perlu diganti. Oleh karena itu sebaiknya, kita dapat pertimbangkan penggunaan suatu fungsi untuk melakukannya:
normalize <- function(x){
norm <- (x-min(x))/(max(x)-min(x))
return(norm)
}df.norm = normalize(df)
df.normPython
Tugas: Selesaikan contoh ini degan Python