QUIS 5

Link : Download File Pdf (E-mail UBP)


PROGRAM STUDI TEKNIK INFORMATIKA FAKULTAS ILMU KOMPUTER UNIVERSITAS BUANA PERJUANGAN 

2024 

  1. INTEGRASI PEMBERSIHAN DATA 

  1. Cari IPS setiap semester permahasiswa. ini bisa memudahkan untuk normalisasi data. 

 

Tahap pertama sebelum melakukan pencarian IPS yaitu memasukan dataset terlebih dahulu. Dataset didapat dari API yang diberikan oleh dosen. Berikut adalah source codenya. 

import requests 

import pandas as pd 

 

# Fungsi untuk mengambil data dari API 

def get_data_from_api(url, headers): 

    response = requests.get(url, headers=headers) 

    if response.status_code == 200: 

        data = response.json() 

        return pd.DataFrame(data['data']) 

    else: 

        print(f"Gagal mengambil data. Status code: {response.status_code} : {response.text}") 

        return pd.DataFrame() 

 

# Headers untuk request API 

headers = {'api-key': "DM20232UBP"} 

 

# Mengambil data transkrip nilai 

url_nilai = "http://103.82.92.37/DM20232/getdata.php?table=transkip_nilai" 

df_nilai = get_data_from_api(url_nilai, headers) 

#print("Data Awal Transkrip Nilai:") 

#print(df_nilai.head(10)) 

 

# Simpan DataFrame ms_lulusan ke file CSV 

df_nilai.to_csv('transkrip_nilai.csv', index=False) 

#print("Data transkrip telah disimpan ke file ms_lulusan.csv") 

 

# Mengambil data lulusan 

url_lulusan = "http://103.82.92.37/DM20232/getdata.php?table=ms_lulusan" 

df_lulusan = get_data_from_api(url_lulusan, headers) 

#print("\nData Awal Lulusan:") 

#print(df_lulusan.head(100)) 

 

# Simpan DataFrame ms_lulusan ke file CSV 

df_lulusan.to_csv('ms_lulusan.csv', index=False) 

#print("Data ms_lulusan telah disimpan ke file ms_lulusan.csv") 

 

# Menggabungkan data berdasarkan NIM 

df = pd.merge(df_nilai, df_lulusan, on='nim') 

 

# Menampilkan data yang digabung 

print(df) 

 

Pada code diatas dilakukan tahap pertama yaitu import library request untuk melakukan HTTP requests dan pandas untuk manipulasi data. 

Selanjutanya pengambilan dataset url API, pada dataset tersebut memiliki 2 dataset yaitu data transkip nilai dan data kelulusan, maka kita gabungkan dengan menggunakan pd.merge. 

Dan terakhir menampilkan data. Berikut adalah hasilnya. 

 

 

Setelah tahap pengambilan data selesai, selanjutnya kita melakukan penc ari IPS setiap semester permahasiswa. ini bisa memudahkan untuk normalisasi data. Berikut adalah code nya. 

#bagian 1 - Cari IPS setiap semester permahasiswa. ini bisa memudahkan untuk normalisasi data 

# Fungsi untuk menghitung IPS setiap semester 

def hitung_ips(df): 

    # Menambahkan kolom nilai_mk sebagai perkalian nilai_grade dengan sks_mk 

    df['nilai_mk'] = df['nilai_grade'] * df['sks_mk'] 

 

    # Mengelompokkan berdasarkan semester dan menghitung total nilai_mk dan total sks_mk 

    ips_semester = df.groupby('semester').agg({'nilai_mk': 'sum', 'sks_mk': 'sum'}).reset_index() 

 

    # Menghitung IPS dengan membagi total nilai_mk dengan total sks_mk 

    ips_semester['ips'] = ips_semester['nilai_mk'] / ips_semester['sks_mk'] 

 

    return ips_semester[['semester', 'ips']] 

 

# Memanggil fungsi dan menampilkan IPS setiap semester 

ips_semester = hitung_ips(df) 

print(ips_semester) 

Pada code diatas kita melakukan penghitung Indeks Prestasi Semester (IPS) setiap semester untuk setiap mahasiswa berdasarkan data transkrip nilai. code ini memberikan gambaran tentang kinerja akademik mahasiswa dari waktu ke waktu dengan menunjukkan IPS mereka untuk setiap semester yang terdapat dalam data transkrip nilai. Berikut adalah hasilnya. 

 

 

 

 

 

  1. Gabungkan IPS permahasiswa dengan dataset yang lainya ("ms_lulusan") berdasarkan NIM. 

 

Setalah dilakukan pencari IPS setiap mahasiswa, selanjutnya penggabungan IPS tersebut dengan dataset lainnya berdasarkan NIM. Berikut ada code nya. 

 

#bagian 1 - Gabungkan IPS permahasiswa dengan dataset yang lainya ("ms_lulusan") berdasarkan NIM. 

# asumsikan df adalah DataFrame Anda 

# df = pd.read_csv('nama_file_anda.csv') 

 

def hitung_ips(df): 

    # Menghitung total nilai dan total sks per semester untuk setiap mahasiswa 

    df['total_nilai'] = df['nilai_grade'] * df['sks_mk'] 

    total_per_semester = df.groupby(['nim', 'semester']).agg({'total_nilai': 'sum', 'sks_mk': 'sum'}).reset_index() 

 

    # Menghitung IPS per semester untuk setiap mahasiswa 

    total_per_semester['IPS'] = total_per_semester['total_nilai'] / total_per_semester['sks_mk'] 

    return total_per_semester[['nim', 'semester', 'IPS']] 

 

ips_df = hitung_ips(df) 

print(ips_df) 

Pada code diatas menghasilkan hasil seperti dibawah ini. 

 

Berikut adalah visualisasinya. 

 

 

Pada gambar tersebut untuk sumbu X adalah variable semester dan sumbu Y adalah variable IPS mahasiswa. Dapat kita lihat dari gambar tersebut bahwa dari semester 1 sampai 7 setiap mahasiswa memiliki IPS yang beragam, dan pada semester 8 terdapat 4 golongan IPS. 

 

  1. Tambahkan hasil dari durasi studi masing-masing mahasiswa 

 

Selanjutnya kita tambahkan hasil dari durasi masing-masing mahasiswa. Berikut adalah code nya. 

# hitung durasi studi seperti sebelumnya 

durasi_studi_df = hitung_durasi_studi(df) 

 

# gabungkan data IPS dengan data durasi studi 

df = pd.merge(df, ips_df, on='nim') 

df = pd.merge(df, durasi_studi_df, on='nim') 

 

# asumsikan 'durasi_studi' adalah kolom yang menunjukkan apakah mahasiswa lulus tepat waktu atau tidak 

# 1 jika tepat waktu, 0 jika tidak 

df['lulus_tepat_waktu'] = np.where(df['durasi_studi'] <= 8, 1, 0) 

 

# hitung korelasi Pearson antara IPS dan lulus_tepat_waktu 

corr, _ = pearsonr(df['IPS'], df['lulus_tepat_waktu']) 

print('Korelasi Pearson:', corr) 

 

# lakukan regresi linier 

X = sm.add_constant(df['IPS']) 

y = df['lulus_tepat_waktu'] 

model = sm.OLS(y, X) 

results = model.fit() 

print(results.summary()) 

 

Pada code diatas menghasilkan masih berikut ini 

 

 

  

  1. Lakukan pembersihan data, termasuk mengidentifikasi dan mengatasi nilai yang hilang atau tidak konsisten dalam data. Hilangkan mahasiswa pindahan. 

 

Selanjutnya kita lakukan pembersihan data, termasuk mengidentifikasi dan mengatasi nilai yang hilang atau tidak konsisten dalam data serta menghilangkan mahasiswa pindahan. Berikut adalah code nya. 

 

# bagian 1 - Lakukan pembersihan data, termasuk mengidentifikasi dan mengatasi nilai yang hilang atau tidak konsisten dalam data. Hilangkan mahasiswa pindahan. 

# Jumlah Data 

print("===================================================================") 

jumlah_data = df.size 

print(f'Jumlah Data Baris dan Kolom: {jumlah_data}') 

 

# Jumlah Kolom 

jumlah_kolom = df.shape[1] 

print(f'Jumlah Kolom: {jumlah_kolom}') 

 

# Jumlah Baris 

jumlah_baris = df.shape[0] 

print(f'Jumlah Baris: {jumlah_baris}') 

 

# Jumlah Missing Value 

jumlah_missing_value = df.isnull().sum().sum() 

print(f'Jumlah Missing Value: {jumlah_missing_value}') 

 

# Jumlah Data yang bukan numeric 

jumlah_non_numeric = df.select_dtypes(exclude=[np.number]).size 

print(f'Jumlah Data yang bukan numeric: {jumlah_non_numeric}') 

 

# Jumlah Duplikasi Data 

jumlah_duplikasi = df.duplicated().sum() 

print(f'Jumlah Duplikasi Data: {jumlah_duplikasi}') 

 

# Misalnya, mengisi nilai yang hilang dengan nilai rata-rata untuk kolom 'nilai_grade' 

lel = df['nilai_grade'].fillna(df['nilai_grade'].mean(), inplace=True) 

print('\nMengisi nilai yang hilang jika') 

print(lel) 

 

# Misalnya, mengganti nilai yang tidak valid dalam kolom 'nilai_grade' dengan nilai rata-rata 

nilai_grade_min = 0# Angka minimum yang valid 

nilai_grade_max = 4# Angka maksimum yang valid 

lal = df.loc[~df['nilai_grade'].between(nilai_grade_min, nilai_grade_max), 'nilai_grade'] = df['nilai_grade'].mean() 

print('\nMenangani nilai yang tidak valid atau tidak sesuai format') 

print(lal) 

 

# Jumlah persentase data yang akan dihapus 

persentase_hapus = ((jumlah_missing_value + jumlah_duplikasi) / jumlah_data) * 100 

print(f'Persentase Data yang akan dihapus: {persentase_hapus}%') 

print("===================================================================") 

# Tipe Data 

tipe_data = df.dtypes 

print(f'Tipe Data Seluruh Atribut:\n{tipe_data}') 

print("===================================================================") 

 

Code diatas melakukan penjumlahan data kolom dan baris, menghitung jumlah missing value, menghitung jumlah data yang bukan numeric, menghitung jumlah duplikasi data, menangani nilai yang tidak valid, menghitung persentase data yang akan dihapus, dan menampilkan tipe data. Berikut adalah hasil dari code tersebut. 

 

 

 

Dari hasil tersebut diketahui bahwa jumlah data sebanyak 57442728 dengan kolom 28 dan baris 2051526. Data tersebut tidak memiliki missing value, juga tidak memiliki data yang bukan numeric, dan tidak memiliki duplikasi data, maka persentase data yang akan dihapus adalah 0.0%. Berikut adalah visualisasi dari data sebelum dilakukan pembersihan. 

 

 

 

  1. Standardisasi format tanggal dan jenis kelamin untuk analisis lebih lanjut. 

 

Terakhir kita lakukan standardisasi format tanggal dan jenis kelamin untuk analisis lebih lanjut. Berikut adalah code nya. 

 

#bagian 1 - Standardisasi format tanggal dan jenis kelamin untuk analisis lebih lanjut. 

 

# Ubah format tanggal ke format standar YYYY-MM-DD 

df['tanggal_lulus'] = pd.to_datetime(df['tanggal_lulus']).dt.strftime('%Y-%m-%d') 

df['tgl_masuk'] = pd.to_datetime(df['tgl_masuk']).dt.strftime('%Y-%m-%d') 

 

# Ubah kolom jenis_kelamin menjadi 'Laki-laki' dan 'Perempuan' 

df['jenis_kelamin'] = df['jenis_kelamin'].replace({0: 'Laki-laki', 1: 'Perempuan'}) 

 

Pada code diatas format tanggal diubah ke format standar YYYY-MM-DD. Untuk format jenis kelamin kita ubah menjadi string yang lebih deskriptif, yaitu 'Laki-laki' untuk nilai 0 dan 'Perempuan' untuk nilai 1. Berikut adalah visualisasi untuk perbandingan jenis kelamin. 

 

 

 

  1. ANALISIS 
    CARI POLA ATAU TREN YANG PALING MEMPENGARUHI DENGAN LULUS TEPAT WAKTU ATAU LAMA MASA STUDI 

  1.  

  1.  

  1. Analisis apakah ada hubungan antara nilai rata-rata mata kuliah atau IPS dengan lulusan tepat waktu 

 

Pada analisis hubungan antara IPS dengan lulusan tepat waktu kita lakukan penghitungan korelasi menggunakan fungsi pearsonr. Berikut adalah code nya. 

 

#bagian 2 - Analisis apakah ada hubungan antara nilai rata-rata mata kuliah atau IPS dengan lulusan tepat waktu. 

from scipy.stats import pearsonr 

 

# Hitung korelasi Pearson antara IPS dan lulus_tepat_waktu 

corr, _ = pearsonr(df['IPS'], df['lulus_tepat_waktu']) 

print('Korelasi Pearson antara IPS dan lulus_tepat_waktu: %.3f' % corr) 

  

Pada code diatas menghasilkan hasil berikut ini. 

 

Dari hasil diatas kita mengetahui hasil tersebut menunjukkan bahwa hubungan antara IPS dan kemampuan lulus tepat waktu mahasiswa sangat lemah dan hampir tidak signifikan secara statistic dimana nilai korelasi sebesar 0.023 mendekati nol, yang menunjukkan bahwa tidak ada hubungan linear yang kuat antara IPS dan kemampuan lulus tepat waktu mahasiswa. 

 

  1. Analisis apakah ada korelasi positif antara predikat kelulusan 'Pujian' dengan lulusan tepat waktu. 

 

Pada analisis korelasi positif antara predikat kelulusan 'Pujian' dengan lulusan tepat waktu kita lakukan penghitungan korelasi dengan menggunakan fungsi pointbiserialr. Berikut adalah code nya. 

 

#bagian 2 - Analisis apakah ada korelasi positif antara predikat kelulusan 'Pujian' dengan lulusan tepat waktu. 

from scipy.stats import pointbiserialr 

 

# Ubah kolom 'predikat' menjadi numerik, di mana 'Pujian' adalah 1 dan selain itu adalah 0 

df['pujian_numerik'] = df['predikat'].apply(lambda x: 1 if x == 'Pujian' else 0) 

 

# Hitung korelasi Point-Biserial antara 'pujian_numerik' dan 'lulus_tepat_waktu' 

corr, _ = pointbiserialr(df['pujian_numerik'], df['lulus_tepat_waktu']) 

print('Korelasi Point-Biserial antara predikat kelulusan "Pujian" dan lulusan tepat waktu: %.3f' % corr) 

Pada code diatas menghasilkan hasil berikut ini :  
 
 

 

Dari hasil diatas kita mengetahui hasil tersebut menunjukkan bahwa hubungan antara predikat kelulusan "Pujian" dengan kemampuan mahasiswa untuk lulus tepat waktu lemah dan hampir tidak signifikan secara statistic dimana nilai korelasi sebesar 0.065 mendekati nol, yang menunjukkan bahwa tidak ada hubungan linear yang kuat antara IPS dan kemampuan lulus tepat waktu mahasiswa. 

 

  1. Analisis untuk melihat apakah durasi studi lebih pendek berkorelasi dengan predikat kelulusan yang lebih baik. 

 

Pada analisis durasi studi lebih pendek berkorelasi dengan predikat kelulusan yang lebih baik kita melakukan penghitungan korelasi menggunakan fungsi spearmanr. Berikut adalah code nya. 

#bagian 2 - Analisis untuk melihat apakah durasi studi lebih pendek berkorelasi dengan predikat kelulusan yang lebih baik. 

from scipy.stats import spearmanr 

 

# Ubah kolom 'predikat' menjadi numerik, di mana 'Pujian' adalah 3, 'Sangat Memuaskan' adalah 2, dan selain itu adalah 1 

df['predikat_numerik'] = df['predikat'].apply(lambda x: 3 if x == 'Pujian' else (2 if x == 'Sangat Memuaskan' else 1)) 

 

# Hitung korelasi Spearman antara 'durasi_studi' dan 'predikat_numerik' 

corr, _ = spearmanr(df['durasi_studi'], df['predikat_numerik']) 

print('Korelasi Spearman antara durasi studi dan predikat kelulusan: %.3f' % corr) 

Pada code diatas menghasilkan hasil berikut ini 

 

Hasil korelasi Spearman antara durasi studi dan predikat kelulusan adalah -0.066 menunjukkan adanya hubungan yang sangat lemah dan negatif antara durasi studi mahasiswa dengan predikat kelulusan. Dengan demikian, berdasarkan hasil korelasi ini, meskipun ada kecenderungan bahwa mahasiswa dengan durasi studi yang lebih pendek cenderung memperoleh predikat kelulusan yang lebih baik, hubungan tersebut tidak signifikan secara statistik. 

 

  1. Hitung rata-rata nilai total untuk masing-masing jenis kelamin dan bandingkan untuk melihat apakah ada perbedaan signifikan dalam prestasi akademik berdasarkan jenis kelamin. 

 

Pada tahap ini kita melakukan pengujian apakah ada perbedaan signifikan dalam prestasi akademik antara dua kelompok, yaitu laki-laki dan perempuan. Berikut adalah code nya. 

 

#bagian 2 - Hitung rata-rata nilai total untuk masing-masing jenis kelamin dan bandingkan untuk melihat apakah ada perbedaan signifikan dalam prestasi akademik berdasarkan jenis kelamin. 

from scipy.stats import ttest_ind 

 

# Hitung rata-rata nilai total untuk masing-masing jenis kelamin 

rata_rata_laki_laki = df[df['jenis_kelamin'] == 'Laki-laki']['nilai_total'].mean() 

rata_rata_perempuan = df[df['jenis_kelamin'] == 'Perempuan']['nilai_total'].mean() 

 

print('Rata-rata nilai total untuk laki-laki: %.2f' % rata_rata_laki_laki) 

print('Rata-rata nilai total untuk perempuan: %.2f' % rata_rata_perempuan) 

 

# Lakukan uji t untuk melihat apakah ada perbedaan signifikan dalam nilai total berdasarkan jenis kelamin 

nilai_total_laki_laki = df[df['jenis_kelamin'] == 'Laki-laki']['nilai_total'] 

nilai_total_perempuan = df[df['jenis_kelamin'] == 'Perempuan']['nilai_total'] 

 

t_stat, p_val = ttest_ind(nilai_total_laki_laki, nilai_total_perempuan) 

print('Hasil uji t: t = %.3f, p = %.3f' % (t_stat, p_val)) 

Pada code diatas tahap awal dilakukan penghitungan rata-rata nilai total dari masing-masing data laki-laki dan perempuan. Selanjutnya melakukan uji t atau t-test untuk melihat apakah ada perbedaan signifikan antara nilai total laki-laki dan perempuan. Uji t digunakan untuk membandingkan rata-rata dua kelompok dan menentukan apakah perbedaan antara kedua kelompok tersebut signifikan secara statistik. Berikut adalah hasilnya. 

 

 

 

Berikut adalah visualisasi dari hasil tersebut. 

 

 

 

 

  1. atau gabungan dari beberapa variabel yang mempengaruhi lulusatepat waktu. 

 

Terakhir adalah gabungan dari beberapa variabel yang mempengaruhi lulusatepat waktu. Kita lakukan dengan proses analisis regresi logistik yang bertujuan untuk memprediksi kemungkinan lulus tepat waktu berdasarkan beberapa variabel independen. Berikut adalah code nya. 

 

#bagian 2 - gabungan dari beberapa variabel yang mempengaruhi lulusatepat waktu. 

import statsmodels.api as sm 

 

# Ubah kolom 'predikat' menjadi numerik, di mana 'Pujian' adalah 3, 'Sangat Memuaskan' adalah 2, dan selain itu adalah 1 

df['predikat_numerik'] = df['predikat'].apply(lambda x: 3 if x == 'Pujian' else (2 if x == 'Sangat Memuaskan' else 1)) 

 

# Ubah kolom 'jenis_kelamin' menjadi numerik, di mana 'Laki-laki' adalah 1 dan 'Perempuan' adalah 0 

df['jenis_kelamin_numerik'] = df['jenis_kelamin'].apply(lambda x: 1 if x == 'Laki-laki' else 0) 

 

# Tentukan variabel independen (X) dan variabel dependen (y) 

X = df[['IPS', 'predikat_numerik', 'jenis_kelamin_numerik', 'durasi_studi']] 

y = df['lulus_tepat_waktu'] 

 

# Tambahkan konstanta ke X 

X = sm.add_constant(X) 

 

# Lakukan regresi logistik 

model = sm.Logit(y, X) 

result = model.fit() 

 

# Cetak ringkasan model 

print(result.summary()) 

pada code diatas tahap pertaman dilakukan pengubah dua variabel kategorikal, yaitu 'predikat' (predikat kelulusan) dan 'jenis_kelamin' (jenis kelamin), menjadi variabel numerik untuk digunakan dalam analisis regresi. 

Setelah itu, kode menentukan variabel independen (X) dan variabel dependen (y) untuk analisis regresi logistik. Variabel independen (X) terdiri dari 'IPS' (Indeks Prestasi Semester), 'predikat_numerik', 'jenis_kelamin_numerik', dan 'durasi_studi'. Variabel dependen (y) adalah 'lulus_tepat_waktu' yang menunjukkan apakah seorang mahasiswa lulus tepat waktu atau tidak. 

Sebelum melakukan regresi logistik, kode menambahkan konstanta ke variabel independen (X). Ini penting dalam regresi logistik karena konstanta tersebut mewakili intercept atau nilai log-odds ketika semua variabel independen adalah nol. Terakhir melakukan regresi logistik menggunakan fungsi sm.Logit() dari library statsmodels.api. Model regresi logistik menggunakan variabel dependen (y) dan variabel independen (X) yang telah ditambahkan konstanta sebelumnya. 

Berikut adalah hasilnya. 

 

 

 

Dibawah ini adalah visualisasi dari hasil diatas.  

 

 

Comments

Popular posts from this blog

Apa itu SEMMA

Mengenal CRISP-DM