Git Product home page Git Product logo

kuliah-final-kecerdasan-buatan's Introduction

Implementasi Logika Fuzzy

Implementasi algoritma dan studi kasus pada mata kuliah Kecerdasan Buatan

nama nim matkul


Fuzzy Logic (From Stratch)

Kami menggunakan data kecil yang digunakan pada excel

1. Install library dan kebutuhan analisis
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore")
2. Membuka file dataset
df_main = pd.DataFrame({
    "PERMINTAAN": [4000],
    "PERSEDIAAN": [300],
})
df_main
   PERMINTAAN  PERSEDIAAN
0        4000         300
3. Membuat fungsi grafik untuk model segitiga dan trapesium
def segitiga(x, abc):
    assert len(abc) == 3
    a, b, c = np.r_[abc]
    assert a <= b and b <= c

    y = np.zeros(len(x))

    if a != b:
        idx = np.nonzero(np.logical_and(a < x, x < b))[0]
        y[idx] = (x[idx] - a) / float(b - a)

    if b != c:
        idx = np.nonzero(np.logical_and(b < x, x < c))[0]
        y[idx] = (c - x[idx]) / float(c - b)

    idx = np.nonzero(x == b)
    y[idx] = 1
    return y

def trapesium(x, abcd):
    assert len(abcd) == 4
    a, b, c, d = np.r_[abcd]
    assert a <= b and b <= c and c <= d
    y = np.ones(len(x))

    idx = np.nonzero(x <= b)[0]
    y[idx] = segitiga(x[idx], np.r_[a, b, b])

    idx = np.nonzero(x >= c)[0]
    y[idx] = segitiga(x[idx], np.r_[c, c, d])

    idx = np.nonzero(x < a)[0]
    y[idx] = np.zeros(len(idx))

    idx = np.nonzero(x > d)[0]
    y[idx] = np.zeros(len(idx))

    return y
4. Analisis fitur permintaan dengan logika fuzzy

Kami mengikuti konfigurasi yang diberikan soal, sepeti di gambar berikut:

Didapatkan rentang logika fuzzy pada range 1000 sampai 5000. Tetapi kami beri interval range pada grafik sekitar 1000 untuk batas bawah, sehingga range dari 0 sampai 5000.

Sehingga diperoleh dengan diagram garis seperti dibawah

x_permintaan = np.arange(0, 5000, 1)
y_permintaan_lo = [0, 0, 1000, 5000]
y_permintaan_hi = [1000, 5000, 5000]
permintaan_lo = trapesium(x_permintaan, y_permintaan_lo)
permintaan_hi = segitiga(x_permintaan, y_permintaan_hi)

plt.plot(x_permintaan, permintaan_lo, 'b', linewidth=1.5, label='Turun')
plt.plot(x_permintaan, permintaan_hi, 'r', linewidth=1.5, label='Naik')
plt.title('Permintaan')
plt.legend()
plt.show()

Membuat kolom baru pada dataframe untuk kedua derajat anggota.

def derajat_anggota_turun(val):
    if val[0] <= 1000:
        return 1
    elif val[0] > 1000 and val[0] < 5000:
        return round((5000 - val[0]) / (5000 - 1000), 2)
    else:
        return 0
df_main['DA PERMINTAAN TURUN'] = df_main[['PERMINTAAN']].apply(derajat_anggota_turun, axis=1)
def derajat_anggota_naik(val):
    if val[0] <= 1000:
        return 0
    elif val[0] > 1000 and val[0] < 5000:
        return round((val[0] - 1000) / (5000 - 1000), 2)
    else:
        return 1
df_main['DA PERMINTAAN NAIK'] = df_main[['PERMINTAAN']].apply(derajat_anggota_naik, axis=1)
df_main
   PERMINTAAN  PERSEDIAAN  DA PERMINTAAN TURUN  DA PERMINTAAN NAIK
0        4000         300                 0.25                0.75
5. Analisis fitur persediaan dengan logika fuzzy

Kami mengikuti konfigurasi yang diberikan soal, sepeti di gambar berikut:

Didapatkan rentang logika fuzzy pada range 100 sampai 600. Tetapi kami beri interval range pada grafik sekitar 100 untuk batas bawah, sehingga range dari 0 sampai 600.

Sehingga diperoleh dengan diagram garis seperti dibawah

x_persediaan = np.arange(0, 600, 1)
y_persediaan_lo = np.array([0, 0, 100, 600])
y_persediaan_hi = np.array([100, 600, 600])
persediaan_lo = trapesium(x_persediaan, y_persediaan_lo)
persediaan_hi = segitiga(x_persediaan, y_persediaan_hi)

plt.plot(x_persediaan, persediaan_lo, 'b', linewidth=1.5, label='Sedikit')
plt.plot(x_persediaan, persediaan_hi, 'r', linewidth=1.5, label='Banyak')
plt.title('Persediaan')
plt.legend()
plt.show()

Membuat kolom baru pada dataframe untuk kedua derajat anggota.

def derajat_anggota_sedikit(val):
    if val[0] <= 100:
        return 1
    elif val[0] > 100 and val[0] < 600:
        return round((600 - val[0]) / (600 - 100), 2)
    else:
        return 0
df_main['DA PERSEDIAAN SEDIKIT'] = df_main[['PERSEDIAAN']].apply(derajat_anggota_sedikit, axis=1)
def derajat_anggota_banyak(val):
    if val[0] <= 100:
        return 0
    elif val[0] > 100 and val[0] < 600:
        return round((val[0] - 100) / (600 - 100), 2)
    else:
        return 1
df_main['DA PERSEDIAAN BANYAK'] = df_main[['PERSEDIAAN']].apply(derajat_anggota_banyak, axis=1)
df_main
   PERMINTAAN  PERSEDIAAN  DA PERMINTAAN TURUN  DA PERMINTAAN NAIK  \
0        4000         300                 0.25                0.75   

   DA PERSEDIAAN SEDIKIT  DA PERSEDIAAN BANYAK  
0                    0.6                   0.4  
6. Analisis fitur produksi dengan logika fuzzy

Kami mengikuti konfigurasi yang diberikan soal, sepeti di gambar berikut:

Didapatkan rentang logika fuzzy pada range 2000 sampai 7000. Tetapi kami beri interval range pada grafik sekitar 2000 untuk batas bawah, sehingga range dari 0 sampai 7000.

Sehingga diperoleh dengan diagram garis seperti dibawah

x_produksi = np.arange(0, 7000, 1)
y_produksi_lo = np.array([0, 0, 2000, 7000])
y_produksi_hi = np.array([2000, 7000, 7000])
produksi_lo = trapesium(x_produksi, y_produksi_lo)
produksi_hi = segitiga(x_produksi, y_produksi_hi)

plt.plot(x_produksi, produksi_lo, 'b', linewidth=1.5, label='Berkurang')
plt.plot(x_produksi, produksi_hi, 'r', linewidth=1.5, label='Bertambah')
plt.title('Produksi')
plt.legend()
plt.show()

7. Membuat aturan logika Fuzzy

Terdapat 4 aturan yang membuat keputusan akhir pada kasus ini:

def z_berkurang(val):
    alpha = min(val)
    return 7000 - ((7000 - 2000) * alpha)
def z_bertambah(val):
    alpha = min(val)
    return 2000 + ((7000 - 2000) * alpha)

df_main['R1_a'] = df_main[['DA PERMINTAAN TURUN', 'DA PERSEDIAAN BANYAK']].apply(min, axis=1)
df_main['R1'] = df_main[['DA PERMINTAAN TURUN', 'DA PERSEDIAAN BANYAK']].apply(z_berkurang, axis=1)
df_main['R2'] = df_main[['DA PERMINTAAN TURUN', 'DA PERSEDIAAN SEDIKIT']].apply(z_berkurang, axis=1)
df_main['R2_a'] = df_main[['DA PERMINTAAN TURUN', 'DA PERSEDIAAN SEDIKIT']].apply(min, axis=1)
df_main['R3'] = df_main[['DA PERMINTAAN NAIK', 'DA PERSEDIAAN BANYAK']].apply(z_bertambah, axis=1)
df_main['R3_a'] = df_main[['DA PERMINTAAN NAIK', 'DA PERSEDIAAN BANYAK']].apply(min, axis=1)
df_main['R4'] = df_main[['DA PERMINTAAN NAIK', 'DA PERSEDIAAN SEDIKIT']].apply(z_bertambah, axis=1)
df_main['R4_a'] = df_main[['DA PERMINTAAN NAIK', 'DA PERSEDIAAN SEDIKIT']].apply(min, axis=1)
df_main
   PERMINTAAN  PERSEDIAAN  DA PERMINTAAN TURUN  DA PERMINTAAN NAIK  \
0        4000         300                 0.25                0.75   

   DA PERSEDIAAN SEDIKIT  DA PERSEDIAAN BANYAK  R1_a      R1      R2  R2_a  \
0                    0.6                   0.4  0.25  5750.0  5750.0  0.25   

       R3  R3_a      R4  R4_a  
0  4000.0   0.4  5000.0   0.6  
8. Kalkulasi COA berdasarkan aturan yang diberikan

COA (Centered of Average) dapat dihitung dengan rumus berikut:

coa = df_main[['R1', 'R2', 'R3', 'R4']].apply(lambda x: x[0] * df_main['R1_a'] + x[1] * df_main['R2_a'] + x[2] * df_main['R3_a'] + x[3] * df_main['R4_a'], axis=1) / df_main[['R1_a', 'R2_a', 'R3_a', 'R4_a']].sum().sum()
coa
             0
0  4983.333333

Fuzzy Logic (Library Scikit-Fuzzy)

Kami menggunakan dataset csv yang diextract dari excel: https://cdn.jsdelivr.net/gh/aliepratama/kuliah-final-kecerdasan-buatan/tahani.csv

1. Install library dan kebutuhan analisis
!pip install scikit-fuzzy
import numpy as np
import pandas as pd
import skfuzzy as fuzz
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore")
Collecting scikit-fuzzy
  Downloading scikit-fuzzy-0.4.2.tar.gz (993 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/994.0 kB ? eta -:--:--

━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 143.4/994.0 kB 4.0 MB/s eta 0:00:01 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 994.0/994.0 kB 15.3 MB/s eta 0:00:00 etadata (setup.py) ... ent already satisfied: numpy>=1.6.0 in /usr/local/lib/python3.10/dist-packages (from scikit-fuzzy) (1.23.5) Requirement already satisfied: scipy>=0.9.0 in /usr/local/lib/python3.10/dist-packages (from scikit-fuzzy) (1.11.4) Requirement already satisfied: networkx>=1.9.0 in /usr/local/lib/python3.10/dist-packages (from scikit-fuzzy) (3.2.1) Building wheels for collected packages: scikit-fuzzy Building wheel for scikit-fuzzy (setup.py) ... e=scikit_fuzzy-0.4.2-py3-none-any.whl size=894077 sha256=ae4fb9f17265ce368d67d0b7b571744508282d837ff53f7a247d2faa66d9ae7e Stored in directory: /root/.cache/pip/wheels/4f/86/1b/dfd97134a2c8313e519bcebd95d3fedc7be7944db022094bc8 Successfully built scikit-fuzzy Installing collected packages: scikit-fuzzy Successfully installed scikit-fuzzy-0.4.2

2. Membuka file dataset
url = 'https://cdn.jsdelivr.net/gh/aliepratama/kuliah-final-kecerdasan-buatan/tahani.csv'
df_karyawan = pd.DataFrame(pd.read_csv(url))
df_karyawan
   NO   NAMA TGL LAHIR  THN MASUK          GAJI  UMUR  MASA KERJA
0   1   Lia   03/06/72       1996    Rp.750,000    30           6
1   2  Iwan   23/09/54       1985  Rp.1,500,000    48          17
2   3   Sari  12/12/66       1988  Rp.1,250,000    36          14
3   4   Andi  06/03/65       1998  Rp.1,040,000    37           4
4   5   Budi  04/12/60       1990    Rp.950,000    42          12
5   6   Amir  18/11/63       1989  Rp.1,600,000    39          13
6   7   Rian  28/05/65       1997  Rp.1,250,000    37           5
7   8   Kiki  09/07/71       2001    Rp.550,000    31           1
8   9   Alda  14/08/67       1999    Rp.735,000    35           3
9  10   Yoga  17/09/77       2000    Rp.860,000    25           2
3. Mengecek kelengkapan data
df_karyawan.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10 entries, 0 to 9
Data columns (total 7 columns):
 #   Column      Non-Null Count  Dtype 
---  ------      --------------  ----- 
 0   NO          10 non-null     int64 
 1   NAMA        10 non-null     object
 2   TGL LAHIR   10 non-null     object
 3   THN MASUK   10 non-null     int64 
 4   GAJI        10 non-null     object
 5   UMUR        10 non-null     int64 
 6   MASA KERJA  10 non-null     int64 
dtypes: int64(4), object(3)
memory usage: 688.0+ bytes
4. Memperbaiki format data
df_karyawan['GAJI'] = df_karyawan['GAJI'].apply(lambda x: int(x.replace('Rp.', '').replace(',', '')))
df_karyawan['GAJI'].dtype
dtype('int64')
5. Pemisahan fitur pada dataset (tujuannya agar lebih mudah dalam menganalisis data)
data_umur = df_karyawan[['NO', 'UMUR']]
data_masa_kerja = df_karyawan[['NO', 'MASA KERJA']]
data_gaji = df_karyawan[['NO', 'GAJI']]
6. Analisis fitur umur dengan logika fuzzy

Kami mengikuti konfigurasi yang diberikan soal, sepeti di gambar berikut:

Didapatkan rentang logika fuzzy pada range 30 sampai 50. Tetapi kami beri interval range pada grafik sekitar 10 per batasnya, sehingga range dari 20 sampai 60.

Sehingga diperoleh dengan diagram garis seperti dibawah

x_umur = np.arange(20, 60, 1)
umur_lo = fuzz.trapmf(x_umur, [20, 20, 30, 40])
umur_md = fuzz.trimf(x_umur, [35, 45, 50])
umur_hi = fuzz.trapmf(x_umur, [40, 50, 60, 60])

plt.plot(x_umur, umur_lo, 'b', linewidth=1.5, label='Muda')
plt.plot(x_umur, umur_md, 'g', linewidth=1.5, label='Parobaya')
plt.plot(x_umur, umur_hi, 'r', linewidth=1.5, label='Tua')
plt.title('Umur')
plt.legend()
plt.show()

Membuat kolom baru pada dataframe untuk ketiga derajat anggota.

data_umur['DERAJAT ANGGOTA MUDA'] = fuzz.interp_membership(x_umur, umur_lo, data_umur['UMUR'])
data_umur['DERAJAT ANGGOTA PAROBAYA'] = fuzz.interp_membership(x_umur, umur_md, data_umur['UMUR'])
data_umur['DERAJAT ANGGOTA TUA'] = fuzz.interp_membership(x_umur, umur_hi, data_umur['UMUR'])
data_umur
   NO  UMUR  DERAJAT ANGGOTA MUDA  DERAJAT ANGGOTA PAROBAYA  \
0   1    30                   1.0                       0.0   
1   2    48                   0.0                       0.4   
2   3    36                   0.4                       0.1   
3   4    37                   0.3                       0.2   
4   5    42                   0.0                       0.7   
5   6    39                   0.1                       0.4   
6   7    37                   0.3                       0.2   
7   8    31                   0.9                       0.0   
8   9    35                   0.5                       0.0   
9  10    25                   1.0                       0.0   

   DERAJAT ANGGOTA TUA  
0                  0.0  
1                  0.8  
2                  0.0  
3                  0.0  
4                  0.2  
5                  0.0  
6                  0.0  
7                  0.0  
8                  0.0  
9                  0.0  

Membuat klasifikasi kategori berdasarkan derajat anggota dan disimpan dalam kolom baru

def status(derajat):
    if derajat[0] > derajat[1] and derajat[0] > derajat[2]:
        return 'MUDA'
    elif derajat[1] > derajat[0] and derajat[1] > derajat[2]:
        return 'PAROBAYA'
    elif derajat[2] > derajat[0] and derajat[2] > derajat[1]:
        return 'TUA'

data_umur['STATUS UMUR'] = data_umur[['DERAJAT ANGGOTA MUDA', 'DERAJAT ANGGOTA PAROBAYA', 'DERAJAT ANGGOTA TUA']].apply(status, axis=1)
data_umur
   NO  UMUR  DERAJAT ANGGOTA MUDA  DERAJAT ANGGOTA PAROBAYA  \
0   1    30                   1.0                       0.0   
1   2    48                   0.0                       0.4   
2   3    36                   0.4                       0.1   
3   4    37                   0.3                       0.2   
4   5    42                   0.0                       0.7   
5   6    39                   0.1                       0.4   
6   7    37                   0.3                       0.2   
7   8    31                   0.9                       0.0   
8   9    35                   0.5                       0.0   
9  10    25                   1.0                       0.0   

   DERAJAT ANGGOTA TUA STATUS UMUR  
0                  0.0        MUDA  
1                  0.8         TUA  
2                  0.0        MUDA  
3                  0.0        MUDA  
4                  0.2    PAROBAYA  
5                  0.0    PAROBAYA  
6                  0.0        MUDA  
7                  0.0        MUDA  
8                  0.0        MUDA  
9                  0.0        MUDA  
7. Analisis fitur masa kerja dengan logika fuzzy

Kami mengikuti konfigurasi yang diberikan soal, sepeti di gambar berikut:

Didapatkan rentang logika fuzzy pada range 5 sampai 25. Tetapi kami beri interval range pada grafik sekitar 5 per batasnya, sehingga range dari 0 sampai 30.

Sehingga diperoleh dengan diagram garis seperti dibawah

x_masa_kerja = np.arange(0, 30, 1)
masa_kerja_lo = fuzz.trapmf(x_masa_kerja, [0, 0, 5, 15])
masa_kerja_hi = fuzz.trapmf(x_masa_kerja, [10, 25, 30, 30])

plt.plot(x_masa_kerja, masa_kerja_lo, 'b', linewidth=1.5, label='Baru')
plt.plot(x_masa_kerja, masa_kerja_hi, 'r', linewidth=1.5, label='Lama')
plt.title('Masa Kerja')
plt.legend()
plt.show()

Membuat kolom baru pada dataframe untuk kedua derajat anggota.

data_masa_kerja['DERAJAT ANGGOTA BARU'] = fuzz.interp_membership(x_masa_kerja, masa_kerja_lo, data_masa_kerja['MASA KERJA'])
data_masa_kerja['DERAJAT ANGGOTA LAMA'] = fuzz.interp_membership(x_masa_kerja, masa_kerja_hi, data_masa_kerja['MASA KERJA'])
data_masa_kerja
   NO  MASA KERJA  DERAJAT ANGGOTA BARU  DERAJAT ANGGOTA LAMA
0   1           6                   0.9              0.000000
1   2          17                   0.0              0.466667
2   3          14                   0.1              0.266667
3   4           4                   1.0              0.000000
4   5          12                   0.3              0.133333
5   6          13                   0.2              0.200000
6   7           5                   1.0              0.000000
7   8           1                   1.0              0.000000
8   9           3                   1.0              0.000000
9  10           2                   1.0              0.000000

Membuat klasifikasi kategori berdasarkan derajat anggota dan disimpan dalam kolom baru

def status(derajat):
    if derajat[0] > derajat[1]:
        return 'BARU'
    elif derajat[1] > derajat[0]:
        return 'LAMA'
    return 'LAMA'

data_masa_kerja['STATUS MASA KERJA'] = data_masa_kerja[['DERAJAT ANGGOTA BARU', 'DERAJAT ANGGOTA LAMA']].apply(status, axis=1)
data_masa_kerja
   NO  MASA KERJA  DERAJAT ANGGOTA BARU  DERAJAT ANGGOTA LAMA  \
0   1           6                   0.9              0.000000   
1   2          17                   0.0              0.466667   
2   3          14                   0.1              0.266667   
3   4           4                   1.0              0.000000   
4   5          12                   0.3              0.133333   
5   6          13                   0.2              0.200000   
6   7           5                   1.0              0.000000   
7   8           1                   1.0              0.000000   
8   9           3                   1.0              0.000000   
9  10           2                   1.0              0.000000   

  STATUS MASA KERJA  
0              BARU  
1              LAMA  
2              LAMA  
3              BARU  
4              BARU  
5              LAMA  
6              BARU  
7              BARU  
8              BARU  
9              BARU  
8. Analisis fitur umur dengan logika fuzzy

Kami mengikuti konfigurasi yang diberikan soal, sepeti di gambar berikut:

Didapatkan rentang logika fuzzy pada range Rp300.000 sampai Rp2.000.000.

Sehingga diperoleh dengan diagram garis seperti dibawah

x_gaji = np.arange(300000, 2000000, 1)
gaji_lo = fuzz.trimf(x_gaji, [300000, 300000, 800000])
gaji_md = fuzz.trimf(x_gaji, [500000, 1000000, 1500000])
gaji_hi = fuzz.trimf(x_gaji, [1000000, 2000000, 2000000])

plt.plot(x_gaji, gaji_lo, 'b', linewidth=1.5, label='Rendah')
plt.plot(x_gaji, gaji_md, 'g', linewidth=1.5, label='Sedang')
plt.plot(x_gaji, gaji_hi, 'r', linewidth=1.5, label='Tinggi')
plt.title('Gaji')
plt.legend()
plt.show()

Membuat kolom baru pada dataframe untuk ketiga derajat anggota.

data_gaji['DERAJAT ANGGOTA RENDAH'] = fuzz.interp_membership(x_gaji, gaji_lo, data_gaji['GAJI'])
data_gaji['DERAJAT ANGGOTA SEDANG'] = fuzz.interp_membership(x_gaji, gaji_md, data_gaji['GAJI'])
data_gaji['DERAJAT ANGGOTA TINGGI'] = fuzz.interp_membership(x_gaji, gaji_hi, data_gaji['GAJI'])
data_gaji
   NO     GAJI  DERAJAT ANGGOTA RENDAH  DERAJAT ANGGOTA SEDANG  \
0   1   750000                    0.10                    0.50   
1   2  1500000                    0.00                    0.00   
2   3  1250000                    0.00                    0.50   
3   4  1040000                    0.00                    0.92   
4   5   950000                    0.00                    0.90   
5   6  1600000                    0.00                    0.00   
6   7  1250000                    0.00                    0.50   
7   8   550000                    0.50                    0.10   
8   9   735000                    0.13                    0.47   
9  10   860000                    0.00                    0.72   

   DERAJAT ANGGOTA TINGGI  
0                    0.00  
1                    0.50  
2                    0.25  
3                    0.04  
4                    0.00  
5                    0.60  
6                    0.25  
7                    0.00  
8                    0.00  
9                    0.00  

Membuat klasifikasi kategori berdasarkan derajat anggota dan disimpan dalam kolom baru

def status(derajat):
    if derajat[0] > derajat[1] and derajat[0] > derajat[2]:
        return 'RENDAH'
    elif derajat[1] > derajat[0] and derajat[1] > derajat[2]:
        return 'SEDANG'
    elif derajat[2] > derajat[0] and derajat[2] > derajat[1]:
        return 'TINGGI'

data_gaji['STATUS GAJI'] = data_gaji[['DERAJAT ANGGOTA RENDAH', 'DERAJAT ANGGOTA SEDANG', 'DERAJAT ANGGOTA TINGGI']].apply(status, axis=1)
data_gaji
   NO     GAJI  DERAJAT ANGGOTA RENDAH  DERAJAT ANGGOTA SEDANG  \
0   1   750000                    0.10                    0.50   
1   2  1500000                    0.00                    0.00   
2   3  1250000                    0.00                    0.50   
3   4  1040000                    0.00                    0.92   
4   5   950000                    0.00                    0.90   
5   6  1600000                    0.00                    0.00   
6   7  1250000                    0.00                    0.50   
7   8   550000                    0.50                    0.10   
8   9   735000                    0.13                    0.47   
9  10   860000                    0.00                    0.72   

   DERAJAT ANGGOTA TINGGI STATUS GAJI  
0                    0.00      SEDANG  
1                    0.50      TINGGI  
2                    0.25      SEDANG  
3                    0.04      SEDANG  
4                    0.00      SEDANG  
5                    0.60      TINGGI  
6                    0.25      SEDANG  
7                    0.00      RENDAH  
8                    0.00      SEDANG  
9                    0.00      SEDANG  
9. Join antar dataframe
data_join = data_umur.join(data_masa_kerja[['NO', 'STATUS MASA KERJA']], rsuffix='l').drop('NOl', axis=1)
data_join = data_join.join(data_gaji[['NO', 'STATUS GAJI']], rsuffix='l').drop('NOl', axis=1)
data_join = data_join.drop(['DERAJAT ANGGOTA MUDA', 'DERAJAT ANGGOTA PAROBAYA', 'DERAJAT ANGGOTA TUA', 'UMUR'], axis=1)
data_join
   NO STATUS UMUR STATUS MASA KERJA STATUS GAJI
0   1        MUDA              BARU      SEDANG
1   2         TUA              LAMA      TINGGI
2   3        MUDA              LAMA      SEDANG
3   4        MUDA              BARU      SEDANG
4   5    PAROBAYA              BARU      SEDANG
5   6    PAROBAYA              LAMA      TINGGI
6   7        MUDA              BARU      SEDANG
7   8        MUDA              BARU      RENDAH
8   9        MUDA              BARU      SEDANG
9  10        MUDA              BARU      SEDANG
10. Membuat aturan untuk klasifikasi

Pada excel tersedia aturan seperti di gambar:

Kami golongkan dari kiri ke kanan menjadi

  1. Karyawan 1
  2. Karyawan 2
  3. Karyawan 3
  4. Karyawan 4
  5. Selain itu, tidak diketahui
def penggolongan_karyawan(kolom):
    if kolom[0] == 'MUDA' and kolom[2] == 'TINGGI':
        return 'KARYAWAN 1'
    elif kolom[0] == 'MUDA' or kolom[2] == 'TINGGI':
        return 'KARYAWAN 2'
    elif kolom[0] == 'MUDA' and kolom[1] == 'LAMA':
        return 'KARYAWAN 3'
    elif kolom[0] == 'PAROBAYA' and kolom[2] == 'SEDANG':
        return 'KARYAWAN 4'
    elif kolom[0] == 'PAROBAYA' and kolom[1] == 'LAMA':
        return 'KARYAWAN 4'
    else:
        return 'TIDAK DIKETAHUI'

data_join['JENIS KARYAWAN'] = data_join[['STATUS UMUR', 'STATUS MASA KERJA', 'STATUS GAJI']].apply(penggolongan_karyawan, axis=1)
data_join
   NO STATUS UMUR STATUS MASA KERJA STATUS GAJI JENIS KARYAWAN
0   1        MUDA              BARU      SEDANG     KARYAWAN 2
1   2         TUA              LAMA      TINGGI     KARYAWAN 2
2   3        MUDA              LAMA      SEDANG     KARYAWAN 2
3   4        MUDA              BARU      SEDANG     KARYAWAN 2
4   5    PAROBAYA              BARU      SEDANG     KARYAWAN 4
5   6    PAROBAYA              LAMA      TINGGI     KARYAWAN 2
6   7        MUDA              BARU      SEDANG     KARYAWAN 2
7   8        MUDA              BARU      RENDAH     KARYAWAN 2
8   9        MUDA              BARU      SEDANG     KARYAWAN 2
9  10        MUDA              BARU      SEDANG     KARYAWAN 2

kuliah-final-kecerdasan-buatan's People

Contributors

aliepratama avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.