Jarak Data (Atribut Biner)
Jarak Data (Atribut Biner)¶
Diberikan file excel bernama "jarak.xlsx" sheet "Biner"
Sebelumnya kita sudah mendiskusikan data dengan tipe numerik dan nominal.
Data yang akan kita diskusinya berikutnya adalah data atribut biner. Secara umum, atribut data tipe ini bisa digolongkan menjadi ya
dan tidak
, atau secara numerik menjadi 1
atau 0
Unduh data pada laman : https://drive.google.com/drive/folders/18SQffd2ZvdDVCH2ZIQhYsxAlN2_Hxj0q?usp=sharing
Perhatikan data berikut
import pandas as pd
import numpy as np
data=pd.read_excel("jarak.xlsx", sheet_name="Biner")
print("Tampilan 5 data teratas :")
print("Banyak baris/objek data", data.shape[0])
print("Banyak kolom/atribut data", data.shape[1])
data.head()
Tampilan 5 data teratas : Banyak baris/objek data 9 Banyak kolom/atribut data 4
Nama | Tinggal di Apatermen | Pendidikan lebih dari S1 | Menikah | |
---|---|---|---|---|
0 | Francis Aguilar | Ya | Tidak | Ya |
1 | Morris Wallace | Tidak | Ya | Belum |
2 | Santiago Hicks | Tidak | Ya | Ya |
3 | Forrest Nash | Ya | Ya | Ya |
4 | Manuel Lawson | Tidak | Tidak | Belum |
Misalkan kita definisikan
Tinggal di apatermen
:ya=1
dantidak=0
Pendidikan lebih dari S1
:ya=1
dantidak=0
Menikah
:sudah=1
danbelum=0
Tugas 1.
Buatkah data frame baru bernama data2
, sehingga atribut dari data tersebut sudah numerik.
def ubah_biner(L):
#input L list
#output L3 biner dari L
L2=unik(L)
if len(L2)==2:
L3=[]
for x in L:
if x=="Ya":
L3.append(1)
else:
L3.append(0)
return L3
else:
print("Data tidak biner")
def unik(L):
#input L list
#output L2, list unik
L2=[]
for x in L:
if x not in L2:
L2.append(x)
return L2
def dataframe_biner(X):
#input X data frame biner
#output B data frame biner numerik
B=X
B[X.columns[0]]=X[X.columns[0]]
for i in range(1,len(X.columns)):
B[X.columns[i]]=ubah_biner(X[X.columns[i]])
return B
data2=data.copy()
data2=dataframe_biner(data2)
print(data2)
Nama Tinggal di Apatermen Pendidikan lebih dari S1 Menikah 0 Francis Aguilar 1 0 1 1 Morris Wallace 0 1 0 2 Santiago Hicks 0 1 1 3 Forrest Nash 1 1 1 4 Manuel Lawson 0 0 0 5 Carrie Douglas 1 0 0 6 Claire Walton 1 1 1 7 Kenny Peters 0 0 0 8 Ivan Carroll 1 0 0
Jarak Data Biner
Definisikan jarak
$=a_{i,j}=\frac{b_i+b_j}{b_i+b_j+s+t}$ dengan
- $b_i$ adalah banyaknya atribut bernilai 1 pada objek ke-$i$
- $b_j$ adalah banyaknya atribut bernilai 1 pada objek ke-$j$
- $s$ adalah banyaknya atribut bernilai 1 untuk kedua objek (keduanya bernilai 1)
- $t$ adalah banyaknya atribut bernilai 0 untuk kedua objek (keduanya bernilai 0)
adalah banyaknya atribut yang sama antara objek ke-$i$ dengan objek ke-$j$. Sehingga semakin mendekati nol, jarak antara objek semakin dekat.
Contoh pada data di atas, jarak biner
antara Francis dan Forrest adalah $=a_{1,4}=\frac{3+2}{3+2+2+0}=\frac{5}{7}$
Buatlah matriks jarak biner
dari data yang diberikan
def jarak_biner(X,i,j):
#input X : data frame
#input i,j : integer index objek (baris)
#output s: jarak
if i==j:
return 0
else:
bi=sum(X.iloc[i][1:X.shape[1]])
bj=sum(X.iloc[j][1:X.shape[1]])
s=0
t=0
for k in range(1,X.shape[1]):
if X.iloc[i][k]==1 and X.iloc[j][k]==1:
s=s+1
elif X.iloc[i][k]==0 and X.iloc[j][k]==0:
t=t+1
return (bi+bj)/(bi+bj+s+t)
#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(jarak_biner(data2,i,j),2)
A[j][i]=A[i][j]
print("Matriks jarak A=")
print(A)
Matriks jarak A= [[0. 1. 0.8 0.71 0.67 0.6 0.71 0.67 0.6 ] [1. 0. 0.6 0.8 0.33 0.67 0.8 0.33 0.67] [0.8 0.6 0. 0.71 0.67 1. 0.71 0.67 1. ] [0.71 0.8 0.71 0. 1. 0.8 0.67 1. 0.8 ] [0.67 0.33 0.67 1. 0. 0.33 1. 0. 0.33] [0.6 0.67 1. 0.8 0.33 0. 0.8 0.33 0.4 ] [0.71 0.8 0.71 0.67 1. 0.8 0. 1. 0.8 ] [0.67 0.33 0.67 1. 0. 0.33 1. 0. 0.33] [0.6 0.67 1. 0.8 0.33 0.4 0.8 0.33 0. ]]
Jarak Data Biner (2)
Dalam kasus tertentu, bisa saja seorang data sains lebih mementingkan atribut yang bermakna "positif". Contohnya tinggal di apatermen, pendidikan lebih dari S1 dan sudah menikah, dianggap sebagai calon pelanggan yang bagus. Sehingga jarak hanya berfokus pada variabel yang dianggap "positif"
Definisikan jarak
$=a_{i,j}=\frac{b_i+b_j}{b_i+b_j+s}$ dengan
- $b_i$ adalah banyaknya atribut bernilai 1 pada objek ke-$i$
- $b_j$ adalah banyaknya atribut bernilai 1 pada objek ke-$j$
- $s$ adalah banyaknya atribut bernilai 1 untuk kedua objek (keduanya bernilai 1)
adalah banyaknya atribut yang sama antara objek ke-$i$ dengan objek ke-$j$. Sehingga semakin mendekati nol, jarak antara objek semakin dekat.
Apakah kelemahan dari definisi jarak biner (2) ?
Contoh pada data di atas, jarak biner2
antara Francis dan Forrest adalah $=a_{1,4}=\frac{3+2}{3+2+2+0}=\frac{5}{7}$
Buatlah program membuat matriks jarak biner2
dari data yang diberikan
def jarak_biner2(X,i,j):
#input D : data frame
#input i,j : integer index objek (baris)
#output s: jarak
if i==j:
return 0
else:
bi=sum(X.iloc[i][1:X.shape[1]])
bj=sum(X.iloc[j][1:X.shape[1]])
s=0
for k in range(1,X.shape[1]):
if X.iloc[i][k]==1 and X.iloc[j][k]==1:
s=s+1
return (bi+bj)/(bi+bj+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(jarak_biner2(data2,i,j),2)
A[j][i]=A[i][j]
print("Matriks jarak A=")
print(A)
Matriks jarak A= [[0. 1. 0.8 0.71 1. 0.75 0.71 1. 0.75] [1. 0. 0.75 0.8 1. 1. 0.8 1. 1. ] [0.8 0.75 0. 0.71 1. 1. 0.71 1. 1. ] [0.71 0.8 0.71 0. 1. 0.8 0.67 1. 0.8 ] [1. 1. 1. 1. 0. 1. 1. nan 1. ] [0.75 1. 1. 0.8 1. 0. 0.8 1. 0.67] [0.71 0.8 0.71 0.67 1. 0.8 0. 1. 0.8 ] [1. 1. 1. 1. nan 1. 1. 0. 1. ] [0.75 1. 1. 0.8 1. 0.67 0.8 1. 0. ]]
C:\Users\Admin\AppData\Local\Temp/ipykernel_16500/1496747593.py:14: RuntimeWarning: invalid value encountered in longlong_scalars return (bi+bj)/(bi+bj+s)
Comments
Post a Comment