Jarak Data (Atribut Nominal)
Jarak Data (Atribut Nominal)¶
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 nominal.
Diberikan file excel bernama "jarak.xlsx" sheet "Nominal"
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="Nominal")
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 9 Banyak kolom/atribut data 4 Tampilan 5 data teratas :
Nama | Domisili | Pendidikan | Menikah | |
---|---|---|---|---|
0 | Francis Aguilar | A | S1 | Ya |
1 | Morris Wallace | B | S2 | Belum |
2 | Santiago Hicks | D | S3 | Ya |
3 | Forrest Nash | A | S2 | Ya |
4 | Manuel Lawson | B | S1 | Belum |
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 (Santiago Hicks,D,S3,Ya)
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.
Misalkan diberikan data dengan atribut nominal sebagai berikut.
Definisikan jarak
$=a_{i,j}=\frac{p-s_{i,j}}{p}$ dengan
- $p$ adalah banyaknya atribut pada objek
- $s_{i,j}$ adalah banyaknya atribut yang sama antara objek ke-$i$ dengan objek ke-$j$.
Semakin mendekati nol, jarak antara objek semakin dekat.
Contoh pada data di atas, jarak
antara Francis dan Morris adalah $=a_{1,2}=\frac{3-0}{3}=1$, perhatikan bahwa $a_{1,2}=a_{2,1}$.
Buatlah matriks jarak
dari data yang diberikan
def sama(X,i,j):
#input X : data frame
#input i,j : integer index objek (baris)
#input w : list bobot
#output n: integer banyak data yang sama
s=0
for k in range(1,X.shape[1]):
if X.iloc[i][k]==X.iloc[j][k]:
s=s+1
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])])
ba=data.shape[1]-1 #banyak atribut kecuali nama
for i in range(data.shape[0]):
for j in range(i):
if i==j:
A[i][j]=0
else:
A[i][j]=round((ba-sama(data,i,j))/ba,2)
A[j][i]=A[i][j]
print("Matriks jarak A=")
print(A)
Matriks jarak A= [[0. 1. 0.67 0.33 0.67 0.67 0.33 0.67 0.33] [1. 0. 1. 0.67 0.33 0.67 0.67 1. 0.67] [0.67 1. 0. 0.67 1. 1. 0.67 0.67 1. ] [0.33 0.67 0.67 0. 1. 1. 0. 1. 0.67] [0.67 0.33 1. 1. 0. 0.33 1. 0.67 0.33] [0.67 0.67 1. 1. 0.33 0. 1. 0.67 0.33] [0.33 0.67 0.67 0. 1. 1. 0. 1. 0.67] [0.67 1. 0.67 1. 0.67 0.67 1. 0. 0.67] [0.33 0.67 1. 0.67 0.33 0.33 0.67 0.67 0. ]]
Apabila dibutuhkan, kita bisa memberikan bobot
untuk masing-masing atribut. Misalkan domisili memiliki bobot
yang lebih tinggi terhadap kontribusi jarak
objek.
Misalkan bobot
$w_{k}$ menyatakan bobot atribut ke-$k$. Jumlah bobot $\sum_{k=1}^n=n$, harus sama dengan $n$, agar rentang nilai jarak
berada diantara 0 dan 1.
Misalkan kita definisikan bobot domisili=2
, bobot pendidikan=0.7
dan bobot menikah=0.3
Latihan
Buatlah matriks jarak dari data yang diberkan dengan bobot yang diberikan pada paragraf di atas
def sama(X,i,j,w=None):
#input X : data frame
#input i,j : integer index objek (baris)
#input w : list bobot
#output n: integer banyak data yang sama
s=0
if w==None:
#Jika bobot tidak diberikan, bobot sama
w=[1 for i in range(X.shape[1]-1)]
for k in range(1,X.shape[1]):
if X.iloc[i][k]==X.iloc[j][k]:
s=s+w[k-1]
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])])
ba=data.shape[1]-1 #banyak atribut kecuali nama
bobot=[2,0.7,0.3] #bobot
for i in range(data.shape[0]):
for j in range(i):
if i==j:
A[i][j]=0
else:
A[i][j]=round((ba-sama(data,i,j,bobot))/ba,2)
A[j][i]=A[i][j]
print("Matriks jarak A=")
print(A)
Matriks jarak A= [[0. 1. 0.9 0.23 0.77 0.77 0.23 0.77 0.1 ] [1. 0. 1. 0.77 0.23 0.9 0.77 1. 0.9 ] [0.9 1. 0. 0.9 1. 1. 0.9 0.33 1. ] [0.23 0.77 0.9 0. 1. 1. 0. 1. 0.33] [0.77 0.23 1. 1. 0. 0.67 1. 0.77 0.67] [0.77 0.9 1. 1. 0.67 0. 1. 0.77 0.67] [0.23 0.77 0.9 0. 1. 1. 0. 1. 0.33] [0.77 1. 0.33 1. 0.77 0.77 1. 0. 0.77] [0.1 0.9 1. 0.33 0.67 0.67 0.33 0.77 0. ]]
Comments
Post a Comment