Algoritma & Struktur Data

~ Fungsi ~

Nb: Untuk segala bentuk diskusi, kritik dan saran mengenai materi silahkan hubungi admin!


Kontak Konsultasi & Diskusi ke : \(\downarrow\)
Email
Instagram 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 Fungsi yang digunakan untuk menjalan fungsi (perintah) pada program tertentu.
  • \(x\) adalah Masukan, tetapi mungkin saja tidak ada argumen.
  • \(x+3\) adalah Badan Program yang mendefinisikan fungsi yang dilakukan.
  • Keluaran adalah 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 fungsi

Python

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 fungsi

atau,

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 fungsi

Nilai 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 fungsi

Python

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 fungsi

Nilai 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 fungsi

Python

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 fungsi

Konversi 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 fungsi

Python

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 fungsi

Luas, 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 fungsi

Python

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 fungsi

Rerata 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 fungsi

Python

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 fungsi

Fungsi 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.norm

Python

Tugas: Selesaikan contoh ini degan Python