Jarak Data (Atribut Numerik)
Jarak Data (Atribut Numerik)¶
Secara umum, data yang dihadapi di dunia nyata dapat dibagi menjadi beberapa kategori sebagai berikut :
- Data dengan atribut numerik
- Data dengan atribut nominal
- Data dengan atribut biner
- Data dengan atribut ordinal
- Data dengan atribut campuran semua tipe data di atas
Pada kebutuhan tertentu, kita membutuhkan jarak suatu data terhadap acuan tertentu, atau jarak antar datanya.
Untuk lebih jelasnya, mari kita lihat di bawah ini.
Di bagian ini, kita akan mendiskusikan jarak numerik.
Diberikan file excel bernama "jarak.xlsx" sheet "Numerik"
Unduh data pada laman : https://drive.google.com/drive/folders/18SQffd2ZvdDVCH2ZIQhYsxAlN2_Hxj0q?usp=sharing
import pandas as pd
import numpy as np
data=pd.read_excel("jarak.xlsx", sheet_name="Numerik")
print("Banyak baris/objek data", data.shape[0])
print("Banyak kolom/atribut data", data.shape[1])
print("Tampilan 5 data teratas :")
data.head()
Banyak baris/objek data 10 Banyak kolom/atribut data 5 Tampilan 5 data teratas :
Nama Alias | UTS | UAS | Kuis | Latihan | |
---|---|---|---|---|---|
0 | Acuan | 0.0 | 0.0 | 0.0 | 0 |
1 | Francis Aguilar | 35.6 | 23.4 | 6.5 | 10 |
2 | Morris Wallace | 20.9 | 24.3 | 10.8 | 10 |
3 | Santiago Hicks | 30.0 | 13.1 | 2.7 | 10 |
4 | Forrest Nash | 15.6 | 25.3 | 13.1 | 8 |
print("Tampilan 3 data terbawah :")
data.tail(3)
Tampilan 3 data terbawah :
Nama Alias | UTS | UAS | Kuis | Latihan | |
---|---|---|---|---|---|
7 | Claire Walton | 33.7 | 35.6 | 8.4 | 10 |
8 | Kenny Peters | 26.2 | 30.0 | 12.4 | 10 |
9 | Ivan Carroll | 22.5 | 29.0 | 11.0 | 9 |
Misalkan terdapat data yang memiliki $m$ objek (baris) dengan $n$ buah atribut (kolom).
Objek data ke-$i$ memiliki beberapa atribut $x_i=(x_{i,1},x_{i,2},...,x_{i,n})$
Contoh pada data di atas, Santiago Hicks memiliki atribut D,S3,Ya atau (Francis Aguilar,35.6,23.4,6.5,10)
Untuk memudahkan dalam proses pengolahan data, kita bentuk matriks data sebagai berikut
Misalkan matriks $X=\begin{bmatrix}x_{1,1}&x_{1,2}&\cdots&x_{1,n} \\x_{2,1}&x_{2,2}&\cdots&x_{2,n} \\\vdots&\ddots&\ddots&\vdots \\x_{m,1}&x_{m,2}&\cdots&x_{m,n}\end{bmatrix}$
Dan juga bentuk matriks persegi berukuran $m$, $A=\begin{bmatrix}a_{1,1}&a_{1,2}&\cdots&a_{1,m} \\a_{2,1}&a_{2,2}&\cdots&a_{2,m} \\\vdots&\ddots&\ddots&\vdots \\a_{m,1}&a_{m,2}&\cdots&a_{m,m}\end{bmatrix}$
Setiap elemen matriks $a_{i,j}$ menyatakan jarak
antara objek ke-$i$ dengan objek ke-$j$
Definisi jarak
yang digunakan bisa berbeda-beda sesuai kebutuhan.
Terdapat beberapa definisi jarak untuk atribut numerik
- Jarak Manhattan
- Jarak Euclid
- Jarak Minkowski
Jarak Manhattan¶
Misalkan
- $x_{p,k}$ data objek ke-$p$ dan atribut ke-$k$.
- $a_{i,j}$ merupakan jarak Euclid antara objek ke-$i$ dan objek ke-$j$. $$a_{i,j}=|x_{i,1}-x_{j,1}|+|x_{i,2}-x_{j,2}|+...+|x_{i,n}-x_{j,n}|=\sum_{k=1}^n |x_{i,k}-x_{j,k}|$$
Jadi matriks jarak dari data di atas adalah :
def jarak_manhattan(X,i,j):
#input X : data frame
#input i,j : integer index objek (baris)
#output s: jarak
if i==j:
return 0
else:
s=0
for k in range(1,X.shape[1]):
s=s+abs(X.iloc[i][k]-X.iloc[j][k])
return s
#Buat matriks persegi A, berukuran m=len(data)
#sementara isi dengan angka nol
A=np.array([[0.0 for i in range(data.shape[0])] for i in range(data.shape[0])])
for i in range(data.shape[0]):
for j in range(i):
if i==j:
A[i][j]=0
else:
A[i][j]=round(jarak_manhattan(data,i,j),2)
A[j][i]=A[i][j]
print("Matriks jarak A=")
print(A)
Matriks jarak A= [[ 0. 75.5 66. 55.8 62. 67.7 56.7 87.7 78.6 71.5] [75.5 0. 19.9 19.7 30.5 22.8 23.8 16. 21.9 24.2] [66. 19.9 0. 28.4 10.6 19.7 11.1 26.5 12.6 7.5] [55.8 19.7 28.4 0. 39. 23.7 17.3 31.9 30.4 32.7] [62. 30.5 10.6 39. 0. 28.3 21.7 35.1 18. 13.7] [67.7 22.8 19.7 23.7 28.3 0. 25.4 20. 12.7 14.6] [56.7 23.8 11.1 17.3 21.7 25.4 0. 32.2 21.9 16.8] [87.7 16. 26.5 31.9 35.1 20. 32.2 0. 17.1 21.4] [78.6 21.9 12.6 30.4 18. 12.7 21.9 17.1 0. 7.1] [71.5 24.2 7.5 32.7 13.7 14.6 16.8 21.4 7.1 0. ]]
Perhatikan hasil dari Jarak Manhattan.
Andaikan objek pertama dijadikan sebuah acuan, kita dapatkan jarak semua data terhadap acuan yang dimiliki. Kita dapatkan jarak
yang dikerjakan pada latihan sebelumnya.
Pada kebutuhan tertentu, dibutuhkan jarak antar objek, dan kita sudah mendapatkan jaraknya :)
Jarak Euclid¶
Misalkan
- $x_{p,k}$ data objek ke-$p$ dan atribut ke-$k$.
- $a_{i,j}$ merupakan jarak Euclid antara objek ke-$i$ dan objek ke-$j$. $$a_{i,j}=\sqrt{(x_{i,1}-x_{j,1})^2+(x_{i,2}-x_{j,2})^2+...+(x_{i,n}-x_{j,n})^2}=\sqrt{\sum_{k=1}^n(x_{i,k}-x_{j,k})^2}$$
Jadi matriks jarak dari data di atas adalah :
def jarak_euclid(X,i,j):
#input X : data frame
#input i,j : integer index objek (baris)
#output s: jarak
if i==j:
return 0
else:
s=0
for k in range(1,X.shape[1]):
s=s+(X.iloc[i][k]-X.iloc[j][k])**2
return s**(1/2)
#Buat matriks persegi A, berukuran m=len(data)
#sementara isi dengan angka nol
A=np.array([[0.0 for i in range(data.shape[0])] for i in range(data.shape[0])])
for i in range(data.shape[0]):
for j in range(i):
if i==j:
A[i][j]=0
else:
A[i][j]=round(jarak_euclid(data,i,j),2)
A[j][i]=A[i][j]
print("Matriks jarak A=")
print(A)
Matriks jarak A= [[ 0. 44.24 35.27 34.34 33.45 41.02 30.15 50.73 42.9 39.36] [44.24 0. 15.34 12.32 21.24 13.81 15.9 12.49 12.91 14.97] [35.27 15.34 0. 16.55 6.2 11.89 8.64 17.24 7.95 5.07] [34.34 12.32 16.55 0. 21.64 18.51 10.71 23.5 19.85 19.47] [33.45 21.24 6.2 21.64 0. 15.86 12.15 21.44 11.79 8.17] [41.02 13.81 11.89 18.51 15.86 0. 16.94 11.89 10.71 9.77] [30.15 15.9 8.64 10.71 12.15 16.94 0. 23.02 15.16 13.31] [50.73 12.49 17.24 23.5 21.44 11.89 23.02 0. 10.18 13.3 ] [42.9 12.91 7.95 19.85 11.79 10.71 15.16 10.18 0. 4.2 ] [39.36 14.97 5.07 19.47 8.17 9.77 13.31 13.3 4.2 0. ]]
Jarak Minkowski¶
Jarak Minkowski merupakan bentuk umum dari Jarak Euclid dan Jarak Manhattan Misalkan
- $x_{p,k}$ data objek ke-$p$ dan atribut ke-$k$.
- $a_{i,j}$ merupakan jarak Euclid antara objek ke-$i$ dan objek ke-$j$.
- Untuk $h>=1$ $$a_{i,j}=\sqrt[h]{\sum_{q=1}^n|x_{i,q}-x_{j,q}|^h}$$
Perhatikan bahwa ketika nilai $h=1$ kita dapatkan jarak Manhattan, ketika $h=2$ kita dapatkan jarak Euclid.
def jarak_minkowski(X,i,j,h):
#input X : data frame
#input i,j : integer index objek (baris)
#output s: jarak
if i==j:
return 0
else:
s=0
for k in range(1,X.shape[1]):
s=s+(abs(X.iloc[i][k]-X.iloc[j][k]))**h
return s**(1/h)
#Buat matriks persegi A, berukuran m=len(data)
#sementara isi dengan angka nol
A=np.array([[0.0 for i in range(data.shape[0])] for i in range(data.shape[0])])
h=3
for i in range(data.shape[0]):
for j in range(i):
if i==j:
A[i][j]=0
else:
A[i][j]=round(jarak_minkowski(data,i,j,h),2)
A[j][i]=A[i][j]
print("Matriks jarak A=")
print(A)
Matriks jarak A= [[ 0. 38.98 29.53 31.16 28.34 35.87 25.26 43.97 36.31 33.57] [38.98 0. 14.82 10.98 20.25 11.97 14.53 12.23 10.98 13.6 ] [29.53 14.82 0. 13.91 5.54 10.28 8.43 15.26 6.97 4.78] [31.16 10.98 13.91 0. 18.11 17.93 9.37 22.65 17.96 17.12] [28.34 20.25 5.54 18.11 0. 13.49 10.46 19.25 10.92 7.3 ] [35.87 11.97 10.28 17.93 13.49 0. 15.58 10.16 10.61 9.29] [25.26 14.53 8.43 9.37 10.46 15.58 0. 21.05 14.31 13.12] [43.97 12.23 15.26 22.65 19.25 10.16 21.05 0. 8.71 11.96] [36.31 10.98 6.97 17.96 10.92 10.61 14.31 8.71 0. 3.81] [33.57 13.6 4.78 17.12 7.3 9.29 13.12 11.96 3.81 0. ]]
Jarak Minkowski (Berbobot)¶
Pada kasus tertentu, bisa saja diperlukan adanya bobot untuk masing-masing atribut. Misalkan
- $x_{p,k}$ data objek ke-$p$ dan atribut ke-$k$.
- $w_k$ merupakan bobot untuk atribut ke-$k$
- $a_{i,j}$ merupakan jarak Euclid antara objek ke-$i$ dan objek ke-$j$.
- Untuk $h>=1$ $$a_{i,j}=\sqrt[h]{\sum_{q=1}^nw_k|x_{i,k}-x_{j,k}|^h}$$
Perhatikan bahwa ketika nilai $h=1$ kita dapatkan jarak Manhattan, ketika $h=2$ kita dapatkan jarak Euclid.
- Tugas
- Buatlah program yang mengeluarkan Jarak Manhattan untuk sheet Numerik2
- Berikan Bobot untuk UTS dan UAS 0.375, Kuis 0.15 dan Latihan 0.1
Jarak
manakah yang paling baik?
silahkan gunakan sesuai kebutuhan dan konteks dari data tersebut.
Comments
Post a Comment