Team Ai
Datasetpublic

jellysquish/Dataset-EfficientDrivingTimeDeterminationSystem

import re import pandas as pd from sklearn.tree import DecisionTreeClassifier from sklearn.preprocessing import LabelEncoder from google.colab import drive from sklearn.tree import export_text from sklearn.metrics import accuracy_score 1. Mount Google Drive drive.mount('/content/drive') 2. Baca file Excel file_path = '/content/drive/MyDrive/Colab Notebooks/AI_GACOR_Cleaned.xlsx' data = pd.read_excel(file_path) 3. Encode kolom 'Hari'… See the full description on the dataset page: https://huggingface.co/datasets/jellysquish/Dataset-EfficientDrivingTimeDeterminationSystem.

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes2downloads
Dataset Card

import re import pandas as pd from sklearn.tree import DecisionTreeClassifier from sklearn.preprocessing import LabelEncoder from google.colab import drive from sklearn.tree import exporttext from sklearn.metrics import accuracyscore

1. Mount Google Drive

drive.mount('/content/drive')

2. Baca file Excel

filepath = '/content/drive/MyDrive/Colab Notebooks/AIGACORCleaned.xlsx' data = pd.readexcel(file_path)

3. Encode kolom 'Hari'

labelencoderhari = LabelEncoder() data['hariencoded'] = labelencoderhari.fittransform(data['Hari'])

4. Mapping wilayah ke format long dataframe

wilayahcols = ['Jakarta Barat', 'Jakarta Pusat', 'Jakarta Selatan', 'Jakarta Utara', 'Jakarta Timur'] statuscols = wilayahcols[:] kategoricols = ['KategoriAkhirJakbar', 'KategoriAkhirJakpus', 'KategoriAkhirJaksel', 'KategoriAkhirJakut', 'KategoriAkhirJaktim']

data_list = []

for i, wilayah in enumerate(wilayahcols): tempdf = data[['Hari', 'Waktu']].copy() tempdf['Wilayah'] = wilayah tempdf['Koefisien'] = data[statuscols[i]] tempdf['Kategori Akhir'] = data[kategoricols[i]] tempdf['Total Macet'] = data['Total Macet'] tempdf['Panjang Kemacetan'] = data['Panjang Kemacetan'] tempdf['Congestion'] = data['Congestion'] datalist.append(tempdf)

Gabung semua wilayah jadi satu dataset

datacombined = pd.concat(datalist, ignore_index=True)

Bersihkan whitespace & kapitalisasi di Kategori Akhir

datacombined['Kategori Akhir'] = datacombined['Kategori Akhir'].str.strip().str.title()

5. Tambahkan hariencoded ke datacombined

datacombined = datacombined.merge( data[['Hari', 'hariencoded']].dropduplicates(), on='Hari', how='left' )

print(data_combined.head(200))

6. Encode kolom kategori lainnya

labelencoderwilayah = LabelEncoder() datacombined['wilayahencoded'] = labelencoderwilayah.fittransform(datacombined['Wilayah'])

labelencoderkategori = LabelEncoder() datacombined['kategoriencoded'] = labelencoderkategori.fittransform(datacombined['Kategori Akhir'])

Urutan kelas yang diharapkan

expectedclasses = ['Lancar', 'Moderate', 'Macet'] if not all(labelencoderkategori.classes == expectedclasses): labelencoderkategori = LabelEncoder() labelencoderkategori.fit(expectedclasses) # Force order datacombined['kategoriencoded'] = labelencoderkategori.transform(data_combined['Kategori Akhir'])

7. Definisi fitur dan latih model

X = datacombined[[ 'hariencoded', 'Waktu', 'wilayahencoded', 'Koefisien', 'Total Macet', 'Panjang Kemacetan', 'Congestion' ]] y = datacombined['kategori_encoded']

model = DecisionTreeClassifier(max_depth=5) model.fit(X, y)

Cek akurasi

ypred = model.predict(X) print(f"Akurasi model: {accuracyscore(y, y_pred):.2f}")

8. Fungsi prediksi

def prediksikemacetan(hari, jam, wilayah, Koefisien, TotalMacet, PanjangKemacetan, Congestion): hariencoded = labelencoderhari.transform([hari])[0] wilayahencoded = labelencoder_wilayah.transform([wilayah])[0]

inputdf = pd.DataFrame([[hariencoded, jam, wilayahencoded, Koefisien, TotalMacet, Panjang_Kemacetan, Congestion]], columns=X.columns)

prediksiencoded = model.predict(inputdf)[0] proba = model.predictproba(inputdf)[0]

prediksilabel = labelencoderkategori.inversetransform([prediksi_encoded])[0]

print("\nConfidence Level:") for idx, cls in enumerate(labelencoderkategori.classes_): print(f"{cls}: {proba[idx]:.2%}")

return prediksi_label

9. Contoh penggunaan fungsi prediksi

print("\nContoh Prediksi:") try:

hasil = prediksikemacetan('Selasa', 16, 'Jakarta Selatan', 34.6, 149, 94, 83) #hari , jam, wilayah, koefisien, Totalmacet, PanjangKemacetan, Congestion print("Hasil Prediksi:", hasil) hasil = prediksikemacetan('Kamis', 11, 'Jakarta Selatan', 3, 7, 5.7, 16) #hari , jam, wilayah, koefisien, Totalmacet, PanjangKemacetan, Congestion print("Hasil Prediksi:", hasil) hasil = prediksikemacetan('Jumat', 11, 'Jakarta Selatan', 27.6, 91, 71.1, 50) #hari , jam, wilayah, koefisien, Totalmacet, PanjangKemacetan, Congestion print("Hasil Prediksi:", hasil) hasil = prediksikemacetan('Jumat', 19, 'Jakarta Selatan', 44.4, 12, 6.7, 21) #hari , jam, wilayah, koefisien, Totalmacet, PanjangKemacetan, Congestion print("Hasil Prediksi:", hasil) hasil = prediksikemacetan('Sabtu', 10, 'Jakarta Selatan', 18, 6, 2.4, 21) #hari , jam, wilayah, koefisien, Totalmacet, PanjangKemacetan, Congestion print("Hasil Prediksi:", hasil) hasil = prediksikemacetan('Minggu', 11, 'Jakarta Selatan', 18.6, 15, 5.2, 14) #hari , jam, wilayah, koefisien, Totalmacet, PanjangKemacetan, Congestion print("Hasil Prediksi:", hasil)

hasil = prediksikemacetan('Rabu', 14, 'Jakarta Barat', 25.7, 136, 94.5, 69) #hari , jam, wilayah, koefisien, Totalmacet, PanjangKemacetan, Congestion print("Hasil Prediksi:", hasil) hasil = prediksikemacetan('Selasa', 15, 'Jakarta Barat', 25, 89, 48.9, 53) #hari , jam, wilayah, koefisien, Totalmacet, PanjangKemacetan, Congestion print("Hasil Prediksi:", hasil) hasil = prediksikemacetan('Selasa', 19, 'Jakarta Barat', 23.7, 200, 120.3, 113) #hari , jam, wilayah, koefisien, Totalmacet, PanjangKemacetan, Congestion print("Hasil Prediksi:", hasil) hasil = prediksikemacetan('Kamis', 11, 'Jakarta Barat', 1.7, 7, 5.7, 16) #hari , jam, wilayah, koefisien, Totalmacet, PanjangKemacetan, Congestion print("Hasil Prediksi:", hasil) hasil = prediksikemacetan('Senin', 8, 'Jakarta Barat', 18.4, 7, 2.7, 24) #hari , jam, wilayah, koefisien, Totalmacet, PanjangKemacetan, Congestion print("Hasil Prediksi:", hasil) hasil = prediksikemacetan('Minggu', 11, 'Jakarta Barat', 9, 15, 5.2, 14) #hari , jam, wilayah, koefisien, Totalmacet, PanjangKemacetan, Congestion print("Hasil Prediksi:", hasil)

hasil = prediksikemacetan('Selasa', 15, 'Jakarta Pusat', 48.7, 89, 48.9, 53) #hari , jam, wilayah, koefisien, Totalmacet, PanjangKemacetan, Congestion print("Hasil Prediksi:", hasil) hasil = prediksikemacetan('Selasa', 19, 'Jakarta Pusat', 31.8, 200, 120.3, 113) #hari , jam, wilayah, koefisien, Totalmacet, PanjangKemacetan, Congestion print("Hasil Prediksi:", hasil) hasil = prediksikemacetan('Senin', 10, 'Jakarta Pusat', 24.2, 20, 13.2, 22) #hari , jam, wilayah, koefisien, Totalmacet, PanjangKemacetan, Congestion print("Hasil Prediksi:", hasil) hasil = prediksikemacetan('Kamis', 11, 'Jakarta Pusat', 21.8, 7, 5.7, 16) #hari , jam, wilayah, koefisien, Totalmacet, PanjangKemacetan, Congestion print("Hasil Prediksi:", hasil) hasil = prediksikemacetan('Jumat', 14, 'Jakarta Pusat', 32.8, 5, 1.6, 16) #hari , jam, wilayah, koefisien, Totalmacet, PanjangKemacetan, Congestion print("Hasil Prediksi:", hasil) hasil = prediksikemacetan('Sabtu', 10, 'Jakarta Pusat', 15.5, 6, 2.4, 21) #hari , jam, wilayah, koefisien, Totalmacet, PanjangKemacetan, Congestion print("Hasil Prediksi:", hasil)

hasil = prediksikemacetan('Rabu', 14, 'Jakarta Timur', 26.8, 136, 94.5, 69) #hari , jam, wilayah, koefisien, Totalmacet, PanjangKemacetan, Congestion print("Hasil Prediksi:", hasil) hasil = prediksikemacetan('Selasa', 16, 'Jakarta Timur', 37.5, 149, 94, 83) #hari , jam, wilayah, koefisien, Totalmacet, PanjangKemacetan, Congestion print("Hasil Prediksi:", hasil) hasil = prediksikemacetan('Kamis', 11, 'Jakarta Timur', 3.1, 7, 5.7, 16) #hari , jam, wilayah, koefisien, Totalmacet, PanjangKemacetan, Congestion print("Hasil Prediksi:", hasil) hasil = prediksikemacetan('Jumat', 19, 'Jakarta Timur', 37.5, 12, 6.7, 21) #hari , jam, wilayah, koefisien, Totalmacet, PanjangKemacetan, Congestion print("Hasil Prediksi:", hasil) hasil = prediksikemacetan('Sabtu', 10, 'Jakarta Timur', 15.5, 6, 2.4, 21) #hari , jam, wilayah, koefisien, Totalmacet, PanjangKemacetan, Congestion print("Hasil Prediksi:", hasil) hasil = prediksikemacetan('Minggu', 12, 'Jakarta Timur', 26.3, 20, 13.2, 22) #hari , jam, wilayah, koefisien, Totalmacet, PanjangKemacetan, Congestion print("Hasil Prediksi:", hasil)

hasil = prediksikemacetan('Rabu', 14, 'Jakarta Utara', 31.7, 136, 94.5, 69) #hari , jam, wilayah, koefisien, Totalmacet, PanjangKemacetan, Congestion print("Hasil Prediksi:", hasil) hasil = prediksikemacetan('Selasa', 16, 'Jakarta Utara', 35.8, 149, 94, 83) #hari , jam, wilayah, koefisien, Totalmacet, PanjangKemacetan, Congestion print("Hasil Prediksi:", hasil) hasil = prediksikemacetan('Kamis', 11, 'Jakarta Utara', 21.8, 7, 5.7, 16) #hari , jam, wilayah, koefisien, Totalmacet, PanjangKemacetan, Congestion print("Hasil Prediksi:", hasil) hasil = prediksikemacetan('Jumat', 12, 'Jakarta Utara', 19, 5, 2.5, 0) #hari , jam, wilayah, koefisien, Totalmacet, PanjangKemacetan, Congestion print("Hasil Prediksi:", hasil) hasil = prediksikemacetan('Sabtu', 10, 'Jakarta Utara', 15.5, 6, 2.4, 21) #hari , jam, wilayah, koefisien, Totalmacet, PanjangKemacetan, Congestion print("Hasil Prediksi:", hasil) hasil = prediksikemacetan('Minggu', 8, 'Jakarta Utara', 26.3, 7, 2.7, 24) #hari , jam, wilayah, koefisien, Totalmacet, PanjangKemacetan, Congestion print("Hasil Prediksi:", hasil)

except ValueError as e: print(e)

10. Export rules tree dengan label asli

harimapping = dict(zip(labelencoderhari.transform(labelencoderhari.classes), labelencoderhari.classes)) wilayahmapping = dict(zip(labelencoderwilayah.transform(labelencoderwilayah.classes), labelencoderwilayah.classes)) kategorimapping = dict(zip(labelencoderkategori.transform(labelencoderkategori.classes), labelencoderkategori.classes_))

featurenamesencoded = X.columns.tolist()

def replaceencodedwithlabels(rulestext, harimap, wilayahmap, kategorimap): # Ganti hariencoded for idx, hari in harimap.items(): rulestext = rulestext.replace(f'hariencoded == {idx}', f'Hari == "{hari}"') rulestext = rulestext.replace(f'hariencoded <= {idx}', f'Hari <= "{hari}"') rulestext = rulestext.replace(f'hariencoded > {idx}', f'Hari > "{hari}"')

# Ganti wilayahencoded for idx, wilayah in wilayahmap.items(): rulestext = rulestext.replace(f'wilayahencoded == {idx}', f'Wilayah == "{wilayah}"') rulestext = rulestext.replace(f'wilayahencoded <= {idx}', f'Wilayah <= "{wilayah}"') rulestext = rulestext.replace(f'wilayah_encoded > {idx}', f'Wilayah > "{wilayah}"')

# Ganti class encoded for idx, kategori in kategorimap.items(): rulestext = rules_text.replace(f'class: {idx}', f'class: {kategori}')

return rules_text

treerules = exporttext(model, featurenames=featurenamesencoded) treerulesreadable = replaceencodedwithlabels(treerules, harimapping, wilayahmapping, kategorimapping)

print("\nAturan Decision Tree (Dengan Label Asli):\n") print(treerulesreadable)

11. Analisis Feature Importance

importances = model.featureimportances feature_names = X.columns

Buat DataFrame

featureimportancedf = pd.DataFrame({ 'Feature': feature_names, 'Importance': importances })

Urutkan dari yang paling penting

featureimportancedf = featureimportancedf.sortvalues(by='Importance', ascending=False).resetindex(drop=True)

Tambahkan nomor urut

featureimportancedf.index = featureimportancedf.index + 1 featureimportancedf.index.name = 'No'

Reset index agar No menjadi kolom

featureimportancedf.reset_index(inplace=True)

8. Tampilkan hasil dalam format mudah dibaca

print("Feature Importance (Terurut):") for idx, row in featureimportancedf.iterrows(): print(f"{row['No']}. {row['Feature']:<20} : {row['Importance']:.6f}")