QUIS 5
Link : Download File Pdf (E-mail UBP)
PROGRAM STUDI TEKNIK INFORMATIKA FAKULTAS ILMU KOMPUTER UNIVERSITAS BUANA PERJUANGAN
2024
INTEGRASI PEMBERSIHAN DATA
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.
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.
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 :
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.
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.
ANALISIS
CARI POLA ATAU TREN YANG PALING MEMPENGARUHI DENGAN LULUS TEPAT WAKTU ATAU LAMA MASA STUDI
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.
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.
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.
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.
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