{"id":21407,"date":"2026-10-04T00:33:26","date_gmt":"2026-10-03T17:33:26","guid":{"rendered":"https:\/\/man2kulonprogo.sch.id\/m2kp\/?p=21407"},"modified":"2026-10-04T00:55:45","modified_gmt":"2026-10-03T17:55:45","slug":"pembersihan-dan-pembingkaian-data","status":"publish","type":"post","link":"https:\/\/man2kulonprogo.sch.id\/m2kp\/2026\/10\/04\/pembersihan-dan-pembingkaian-data\/","title":{"rendered":"Pembersihan dan Pembingkaian Data"},"content":{"rendered":"<h2 style=\"color: #0f766e; border-bottom: 3px solid #0f766e; padding-bottom: 8px;\">Informatika Kelas X \u2014 Bab 6: Analisis Data<\/h2>\n<h3 style=\"color: #334155; font-weight: normal; margin-top: -6px;\">Bagian H: Pembersihan dan Pembingkaian Data<\/h3>\n<p><strong>Pengampu :<\/strong> Zuli Irawanto, ST<\/p>\n<hr \/>\n<h3 style=\"background: #0f766e; color: #ffffff; padding: 10px 16px; border-radius: 8px;\">\ud83c\udfaf Tujuan Pembelajaran<\/h3>\n<p>Setelah mempelajari materi ini, siswa diharapkan mampu:<\/p>\n<ol>\n<li>Menjelaskan alasan data mentah perlu dibersihkan sebelum dianalisis.<\/li>\n<li>Mengenali masalah umum pada data: data ganda, data kosong, teks tidak seragam, dan tipe data salah.<\/li>\n<li>Membersihkan data memakai pandas (<code>drop_duplicates<\/code>, <code>fillna<\/code>, <code>dropna<\/code>, <code>str.strip<\/code>, <code>astype<\/code>).<\/li>\n<li>Membingkai data yang sudah bersih ke dalam DataFrame yang rapi dan merangkumnya per kelompok.<\/li>\n<\/ol>\n<hr \/>\n<h3 style=\"background: #0ea5e9; color: #ffffff; padding: 10px 16px; border-radius: 8px;\">Mengapa Data Perlu Dibersihkan?<\/h3>\n<p>Data hasil pengumpulan (Bagian G) jarang langsung rapi. Ada nilai yang kosong, ada nama yang tercatat dua kali, ada tulisan yang tidak seragam. Kalau data seperti itu langsung dianalisis, hasilnya bisa <strong>menyesatkan<\/strong>. Ada ungkapan terkenal di dunia komputer: <em>&#8220;garbage in, garbage out&#8221;<\/em>, artinya masukan yang buruk menghasilkan keluaran yang buruk.<\/p>\n<div style=\"background: #f0f9ff; border-radius: 10px; padding: 14px 18px; margin: 14px 0;\"><strong>Analogi sederhana:<\/strong><br \/>\nMembersihkan data itu seperti <strong>mencuci beras sebelum dimasak<\/strong>. Kerikil dan kotoran dibuang dulu, baru nasinya enak dan aman dimakan. Dalam analisis data, tahap ini adalah tahap kedua: <strong>pembersihan<\/strong>.<\/div>\n<p>Empat masalah yang paling sering muncul:<\/p>\n<div style=\"overflow-x: auto;\">\n<table style=\"width: 100%; border-collapse: collapse; margin: 16px 0;\">\n<thead>\n<tr>\n<th style=\"padding: 10px; border: 1px solid #0284c7; text-align: left; background: #bae6fd !important; color: #0f172a !important;\"><span style=\"color: #0f172a !important;\">Masalah<\/span><\/th>\n<th style=\"padding: 10px; border: 1px solid #0284c7; text-align: left; background: #bae6fd !important; color: #0f172a !important;\"><span style=\"color: #0f172a !important;\">Contoh<\/span><\/th>\n<th style=\"padding: 10px; border: 1px solid #0284c7; text-align: left; background: #bae6fd !important; color: #0f172a !important;\"><span style=\"color: #0f172a !important;\">Akibat bila dibiarkan<\/span><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr style=\"background: #f0f9ff;\">\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\"><strong>Data ganda<\/strong><\/td>\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">Siswa &#8220;Sari&#8221; tercatat 2 kali<\/td>\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">Rata-rata dan jumlah jadi keliru<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\"><strong>Data kosong<\/strong><\/td>\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">Nilai Andi belum terisi (<code>NaN<\/code>)<\/td>\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">Perhitungan error atau tidak akurat<\/td>\n<\/tr>\n<tr style=\"background: #f0f9ff;\">\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\"><strong>Teks tidak seragam<\/strong><\/td>\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\"><code>\"x-1\"<\/code>, <code>\" X-1\"<\/code>, <code>\"X-1 \"<\/code><\/td>\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">Dianggap kelas yang berbeda-beda<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\"><strong>Tipe data salah<\/strong><\/td>\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">Nilai tersimpan sebagai teks <code>\"87\"<\/code><\/td>\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">Tidak bisa dijumlahkan atau dirata-ratakan<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p><strong>Pembingkaian data (<em>data framing<\/em>)<\/strong> adalah menyusun data yang sudah bersih ke dalam <strong>DataFrame<\/strong> (tabel dengan baris dan kolom yang rapi) supaya siap dirangkum, dibandingkan, dan divisualisasikan.<\/p>\n<div style=\"background: #f8fafc; border: 2px solid #94a3b8; border-radius: 12px; padding: 10px 12px; margin: 14px 0;\">\n<div style=\"font-size: 13px; color: #475569; margin-bottom: 6px;\">Alur membersihkan data (dibaca dari atas ke bawah)<\/div>\n<div style=\"background: #e0f2fe; border: 2px solid #0ea5e9; border-radius: 10px; padding: 8px 12px; margin: 6px 0;\">1\ufe0f\u20e3 <strong>Periksa<\/strong> \u279c cari data kosong dan data ganda<\/div>\n<div style=\"text-align: center; font-size: 20px; color: #334155;\">\u2193<\/div>\n<div style=\"background: #fffbeb; border: 2px solid #f59e0b; border-radius: 10px; padding: 8px 12px; margin: 6px 0;\">2\ufe0f\u20e3 <strong>Hapus data ganda<\/strong> \u279c <code>drop_duplicates()<\/code><\/div>\n<div style=\"text-align: center; font-size: 20px; color: #334155;\">\u2193<\/div>\n<div style=\"background: #fee2e2; border: 2px solid #ef4444; border-radius: 10px; padding: 8px 12px; margin: 6px 0;\">3\ufe0f\u20e3 <strong>Tangani data kosong<\/strong> \u279c <code>fillna()<\/code> atau <code>dropna()<\/code><\/div>\n<div style=\"text-align: center; font-size: 20px; color: #334155;\">\u2193<\/div>\n<div style=\"background: #dcfce7; border: 2px solid #22c55e; border-radius: 10px; padding: 8px 12px; margin: 6px 0;\">4\ufe0f\u20e3 <strong>Rapikan teks dan tipe data<\/strong> \u279c <code>str.strip()<\/code>, <code>astype()<\/code><\/div>\n<div style=\"text-align: center; font-size: 20px; color: #334155;\">\u2193<\/div>\n<div style=\"background: #fae8ff; border: 2px solid #c026d3; border-radius: 10px; padding: 8px 12px; margin: 6px 0;\">5\ufe0f\u20e3 <strong>Bingkai &amp; rangkum<\/strong> \u279c DataFrame siap dianalisis<\/div>\n<\/div>\n<hr \/>\n<h3 style=\"background: #6366f1; color: #ffffff; padding: 10px 16px; border-radius: 8px;\">Cara Belajar Bagian Ini<\/h3>\n<p>Bagian ini berisi <strong>5 Tugas Praktik<\/strong>, yaitu <strong>Praktik 34 sampai 38<\/strong> (melanjutkan Bagian G). Polanya masih sama: \ud83e\udd14 <strong>Tebak dulu<\/strong> \u2192 \u2328\ufe0f <strong>Ketik &amp; jalankan<\/strong> \u2192 \u2705 <strong>Cocokkan<\/strong> \u2192 \ud83d\udca1 <strong>Pahami<\/strong> \u2192 \ud83c\udfc1 <strong>Tantangan mini<\/strong>.<\/p>\n<div style=\"background: #fffbeb; border-left: 5px solid #f59e0b; border-radius: 8px; padding: 12px 16px; margin: 14px 0;\"><strong>Persiapan:<\/strong> buat notebook baru bernama <strong>Praktik_Bab6H_NamaKamu<\/strong>. Praktik 34 sampai 37 <strong>berlanjut dalam satu notebook<\/strong> dan memakai variabel <code>df<\/code> dari sel sebelumnya, jadi jalankan sel dari atas ke bawah secara berurutan. Praktik 38 berdiri sendiri.<\/div>\n<hr \/>\n<h3 style=\"background: #0ea5e9; color: #ffffff; padding: 10px 16px; border-radius: 8px;\">\ud83e\uddea Tugas Praktik 34: Memeriksa Data yang Kotor<\/h3>\n<div style=\"background: #f0f9ff; border-left: 5px solid #0ea5e9; border-radius: 8px; padding: 12px 16px; margin: 14px 0;\"><strong>\ud83e\udd14 Tebak dulu!<\/strong> Perhatikan tabel nilai di bawah. Menurutmu, masalah apa saja yang ada di dalamnya?<\/div>\n<p><strong>\u2328\ufe0f Ketik di sel kode, lalu jalankan:<\/strong><\/p>\n<pre style=\"background: #1e293b !important; color: #e2e8f0 !important; padding: 12px 16px; border-radius: 8px; overflow-x: auto; white-space: pre-wrap; word-break: break-word; font-size: 15px;\">import pandas as pd\r\n\r\ndata = {\r\n    \"Nama\": [\"Budi\", \"Sari\", \"Andi\", \"Sari\", \"Dedi\", \"Rina\"],\r\n    \"Kelas\": [\"X-1\", \"X-1\", \"X-2\", \"X-1\", \"X-2\", \"X-1\"],\r\n    \"Nilai\": [87, 90, None, 90, 75, 82]\r\n}\r\ndf = pd.DataFrame(data)\r\n\r\nprint(df)\r\nprint()\r\nprint(df.isnull().sum())\r\nprint(\"Data ganda:\", df.duplicated().sum())<\/pre>\n<p><strong>\u2705 Hasilnya:<\/strong><\/p>\n<pre style=\"background: #f1f5f9 !important; color: #0f172a !important; padding: 12px 16px; border-left: 4px solid #94a3b8; border-radius: 4px; overflow-x: auto; white-space: pre-wrap; word-break: break-word; font-size: 15px;\">   Nama Kelas  Nilai\r\n0  Budi   X-1   87.0\r\n1  Sari   X-1   90.0\r\n2  Andi   X-2    NaN\r\n3  Sari   X-1   90.0\r\n4  Dedi   X-2   75.0\r\n5  Rina   X-1   82.0\r\n\r\nNama     0\r\nKelas    0\r\nNilai    1\r\ndtype: int64\r\nData ganda: 1<\/pre>\n<p><strong>\ud83d\udca1 Penjelasan:<\/strong> Tabel ini sengaja dibuat kotor. Nilai Andi <strong>kosong<\/strong>, ditulis <code>NaN<\/code> (singkatan <em>Not a Number<\/em>), dan baris Sari muncul <strong>dua kali<\/strong>. <code>df.isnull().sum()<\/code> menghitung data kosong di setiap kolom. Hasilnya, kolom Nilai punya 1 data kosong. <code>df.duplicated().sum()<\/code> menghitung baris yang menggandakan baris sebelumnya, dan hasilnya 1. Pemeriksaan seperti ini <strong>selalu dilakukan lebih dulu<\/strong> sebelum membersihkan. Catatan: nilai berubah menjadi <code>87.0<\/code> (desimal) karena kolom yang berisi <code>NaN<\/code> bertipe desimal.<\/p>\n<div style=\"background: #fffbeb; border: 2px dashed #f59e0b; border-radius: 10px; padding: 10px 16px; margin: 14px 0;\"><strong>\ud83c\udfc1 Tantangan mini:<\/strong> Tambahkan satu data kosong lagi pada kolom Nilai (ganti angka dengan <code>None<\/code>). Apa hasil <code>isnull().sum()<\/code> sekarang?<\/div>\n<hr \/>\n<h3 style=\"background: #f59e0b; color: #ffffff; padding: 10px 16px; border-radius: 8px;\">\ud83e\uddea Tugas Praktik 35: Menghapus Data Ganda<\/h3>\n<div style=\"background: #f0f9ff; border-left: 5px solid #0ea5e9; border-radius: 8px; padding: 12px 16px; margin: 14px 0;\"><strong>\ud83e\udd14 Tebak dulu!<\/strong> Jika baris ganda dihapus, tabel tinggal berapa baris?<\/div>\n<p><strong>\u2328\ufe0f Ketik di sel kode, lalu jalankan:<\/strong><\/p>\n<pre style=\"background: #1e293b !important; color: #e2e8f0 !important; padding: 12px 16px; border-radius: 8px; overflow-x: auto; white-space: pre-wrap; word-break: break-word; font-size: 15px;\">print(\"Sebelum:\", df.shape)\r\n\r\ndf = df.drop_duplicates()\r\nprint(\"Sesudah:\", df.shape)\r\n\r\ndf = df.reset_index(drop=True)\r\nprint(df)<\/pre>\n<p><strong>\u2705 Hasilnya:<\/strong><\/p>\n<pre style=\"background: #f1f5f9 !important; color: #0f172a !important; padding: 12px 16px; border-left: 4px solid #94a3b8; border-radius: 4px; overflow-x: auto; white-space: pre-wrap; word-break: break-word; font-size: 15px;\">Sebelum: (6, 3)\r\nSesudah: (5, 3)\r\n   Nama Kelas  Nilai\r\n0  Budi   X-1   87.0\r\n1  Sari   X-1   90.0\r\n2  Andi   X-2    NaN\r\n3  Dedi   X-2   75.0\r\n4  Rina   X-1   82.0<\/pre>\n<p><strong>\ud83d\udca1 Penjelasan:<\/strong> <code>drop_duplicates()<\/code> menghapus baris yang sama persis dengan baris sebelumnya, dan baris pertama dipertahankan. Ukuran tabel turun dari 6 menjadi 5 baris. Setelah baris dihapus, nomor indeks menjadi loncat (ada yang hilang), jadi kita rapikan dengan <code>reset_index(drop=True)<\/code> agar nomornya berurutan lagi. Perhatikan bahwa hasilnya <strong>disimpan kembali ke <code>df<\/code><\/strong>. Tanpa itu, <code>df<\/code> tidak berubah.<\/p>\n<div style=\"background: #fffbeb; border: 2px dashed #f59e0b; border-radius: 10px; padding: 10px 16px; margin: 14px 0;\"><strong>\ud83c\udfc1 Tantangan mini:<\/strong> Apa yang terjadi jika <code>drop_duplicates()<\/code> dijalankan sekali lagi? Tebak dulu!<\/div>\n<hr \/>\n<h3 style=\"background: #e11d48; color: #ffffff; padding: 10px 16px; border-radius: 8px;\">\ud83e\uddea Tugas Praktik 36: Menangani Data Kosong<\/h3>\n<div style=\"background: #f0f9ff; border-left: 5px solid #0ea5e9; border-radius: 8px; padding: 12px 16px; margin: 14px 0;\"><strong>\ud83e\udd14 Tebak dulu!<\/strong> Ada dua cara menangani nilai Andi yang kosong: membuang barisnya, atau mengisinya. Mana yang lebih baik menurutmu?<\/div>\n<p><strong>\u2328\ufe0f Ketik di sel kode, lalu jalankan:<\/strong><\/p>\n<pre style=\"background: #1e293b !important; color: #e2e8f0 !important; padding: 12px 16px; border-radius: 8px; overflow-x: auto; white-space: pre-wrap; word-break: break-word; font-size: 15px;\">print(\"Jika baris kosong dibuang:\", df.dropna().shape)\r\n\r\nrata = df[\"Nilai\"].mean()\r\nprint(\"Rata-rata nilai yang ada:\", rata)\r\n\r\ndf[\"Nilai\"] = df[\"Nilai\"].fillna(rata)\r\nprint(df)<\/pre>\n<p><strong>\u2705 Hasilnya:<\/strong><\/p>\n<pre style=\"background: #f1f5f9 !important; color: #0f172a !important; padding: 12px 16px; border-left: 4px solid #94a3b8; border-radius: 4px; overflow-x: auto; white-space: pre-wrap; word-break: break-word; font-size: 15px;\">Jika baris kosong dibuang: (4, 3)\r\nRata-rata nilai yang ada: 83.5\r\n   Nama Kelas  Nilai\r\n0  Budi   X-1   87.0\r\n1  Sari   X-1   90.0\r\n2  Andi   X-2   83.5\r\n3  Dedi   X-2   75.0\r\n4  Rina   X-1   82.0<\/pre>\n<p><strong>\ud83d\udca1 Penjelasan:<\/strong> <code>dropna()<\/code> membuang baris yang punya data kosong, sehingga tabel menyusut menjadi 4 baris dan datanya berkurang. <code>fillna(rata)<\/code> mengisi data kosong dengan nilai pengganti, di sini rata-rata nilai yang ada (83,5). Pilihan mana yang dipakai tergantung keadaan:<\/p>\n<div style=\"overflow-x: auto;\">\n<table style=\"width: 100%; border-collapse: collapse; margin: 16px 0;\">\n<thead>\n<tr>\n<th style=\"padding: 10px; border: 1px solid #be123c; text-align: left; background: #fecdd3 !important; color: #0f172a !important;\"><span style=\"color: #0f172a !important;\">Cara<\/span><\/th>\n<th style=\"padding: 10px; border: 1px solid #be123c; text-align: left; background: #fecdd3 !important; color: #0f172a !important;\"><span style=\"color: #0f172a !important;\">Perintah<\/span><\/th>\n<th style=\"padding: 10px; border: 1px solid #be123c; text-align: left; background: #fecdd3 !important; color: #0f172a !important;\"><span style=\"color: #0f172a !important;\">Cocok dipakai bila<\/span><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr style=\"background: #fff1f2;\">\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">Buang baris<\/td>\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\"><code>df.dropna()<\/code><\/td>\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">Data kosong sedikit dan tidak penting<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">Isi dengan rata-rata<\/td>\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\"><code>df[\"Nilai\"].fillna(rata)<\/code><\/td>\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">Data kosong cukup banyak dan kita butuh semua baris<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div style=\"background: #fff1f2; border-left: 5px solid #e11d48; border-radius: 8px; padding: 12px 16px; margin: 14px 0;\"><strong>\u26a0\ufe0f Jujurlah pada data!<\/strong> Mengisi data kosong adalah <em>perkiraan<\/em>, bukan fakta. Selalu catat cara yang kamu pakai, dan jangan mengubah angka agar hasilnya terlihat bagus.<\/div>\n<div style=\"background: #fffbeb; border: 2px dashed #f59e0b; border-radius: 10px; padding: 10px 16px; margin: 14px 0;\"><strong>\ud83c\udfc1 Tantangan mini:<\/strong> Coba isi data kosong dengan angka 0, bukan rata-rata. Bagaimana pengaruhnya pada rata-rata kelas?<\/div>\n<hr \/>\n<h3 style=\"background: #22c55e; color: #ffffff; padding: 10px 16px; border-radius: 8px;\">\ud83e\uddea Tugas Praktik 37: Merapikan Teks dan Tipe Data<\/h3>\n<div style=\"background: #f0f9ff; border-left: 5px solid #0ea5e9; border-radius: 8px; padding: 12px 16px; margin: 14px 0;\"><strong>\ud83e\udd14 Tebak dulu!<\/strong> Tiga kelas di bawah sebenarnya sama, yaitu &#8220;X-1&#8221;. Tetapi komputer membacanya sebagai tiga tulisan berbeda. Mengapa?<\/div>\n<p><strong>\u2328\ufe0f Ketik di sel kode, lalu jalankan:<\/strong><\/p>\n<pre style=\"background: #1e293b !important; color: #e2e8f0 !important; padding: 12px 16px; border-radius: 8px; overflow-x: auto; white-space: pre-wrap; word-break: break-word; font-size: 15px;\">df2 = pd.DataFrame({\r\n    \"Nama\": [\" budi\", \"SARI \", \"andi\"],\r\n    \"Kelas\": [\"x-1\", \"X-1 \", \" x-1\"],\r\n    \"Nilai\": [\"87\", \"90\", \"75\"]\r\n})\r\n\r\ndf2[\"Nama\"] = df2[\"Nama\"].str.strip().str.title()\r\ndf2[\"Kelas\"] = df2[\"Kelas\"].str.strip().str.upper()\r\ndf2[\"Nilai\"] = df2[\"Nilai\"].astype(int)\r\n\r\nprint(df2)\r\nprint(\"Rata-rata:\", df2[\"Nilai\"].mean())<\/pre>\n<p><strong>\u2705 Hasilnya:<\/strong><\/p>\n<pre style=\"background: #f1f5f9 !important; color: #0f172a !important; padding: 12px 16px; border-left: 4px solid #94a3b8; border-radius: 4px; overflow-x: auto; white-space: pre-wrap; word-break: break-word; font-size: 15px;\">   Nama Kelas  Nilai\r\n0  Budi   X-1     87\r\n1  Sari   X-1     90\r\n2  Andi   X-1     75\r\nRata-rata: 84.0<\/pre>\n<p><strong>\ud83d\udca1 Penjelasan:<\/strong> <code>.str.strip()<\/code> membuang spasi di depan dan belakang teks, <code>.str.title()<\/code> membuat huruf awal kapital (&#8220;budi&#8221; menjadi &#8220;Budi&#8221;), dan <code>.str.upper()<\/code> membuat semua huruf besar. Selain itu, nilai awalnya berupa <strong>teks<\/strong> (<code>\"87\"<\/code>), sehingga tidak bisa dirata-ratakan. Perintah <code>astype(int)<\/code> mengubahnya menjadi bilangan bulat. Ingat perbedaan <code>\"87\"<\/code> dan <code>87<\/code> pada Praktik 2? Sekarang kamu membetulkannya dengan pandas.<\/p>\n<div style=\"background: #fffbeb; border: 2px dashed #f59e0b; border-radius: 10px; padding: 10px 16px; margin: 14px 0;\"><strong>\ud83c\udfc1 Tantangan mini:<\/strong> Ubah <code>astype(int)<\/code> menjadi <code>astype(float)<\/code>. Apa bedanya pada hasil rata-rata dan tampilan nilainya?<\/div>\n<hr \/>\n<h3 style=\"background: #7c3aed; color: #ffffff; padding: 10px 16px; border-radius: 8px;\">\ud83e\uddea Tugas Praktik 38: Mini Proyek: Dari Data Kotor ke Rangkuman Kelas<\/h3>\n<div style=\"background: #f0f9ff; border-left: 5px solid #0ea5e9; border-radius: 8px; padding: 12px 16px; margin: 14px 0;\"><strong>\ud83e\udd14 Tebak dulu!<\/strong> Setelah data dibersihkan, kelas mana yang rata-ratanya lebih tinggi, X-1 atau X-2?<\/div>\n<p><strong>\u2328\ufe0f Ketik di sel kode, lalu jalankan:<\/strong><\/p>\n<pre style=\"background: #1e293b !important; color: #e2e8f0 !important; padding: 12px 16px; border-radius: 8px; overflow-x: auto; white-space: pre-wrap; word-break: break-word; font-size: 15px;\">import pandas as pd\r\n\r\nmentah = {\r\n    \"Nama\": [\"Budi\", \"Sari\", \"Andi\", \"Sari\", \"Dedi\", \"Rina\"],\r\n    \"Kelas\": [\"X-1\", \"X-1\", \"X-2\", \"X-1\", \"X-2\", \"X-1\"],\r\n    \"Nilai\": [87, 90, None, 90, 75, 82]\r\n}\r\n\r\ndf = pd.DataFrame(mentah)\r\ndf = df.drop_duplicates().reset_index(drop=True)\r\ndf[\"Nilai\"] = df[\"Nilai\"].fillna(df[\"Nilai\"].mean())\r\n\r\nrekap = df.groupby(\"Kelas\")[\"Nilai\"].mean()\r\nprint(df)\r\nprint()\r\nprint(rekap.round(1))<\/pre>\n<p><strong>\u2705 Hasilnya:<\/strong><\/p>\n<pre style=\"background: #f1f5f9 !important; color: #0f172a !important; padding: 12px 16px; border-left: 4px solid #94a3b8; border-radius: 4px; overflow-x: auto; white-space: pre-wrap; word-break: break-word; font-size: 15px;\">   Nama Kelas  Nilai\r\n0  Budi   X-1   87.0\r\n1  Sari   X-1   90.0\r\n2  Andi   X-2   83.5\r\n3  Dedi   X-2   75.0\r\n4  Rina   X-1   82.0\r\n\r\nKelas\r\nX-1    86.3\r\nX-2    79.2\r\nName: Nilai, dtype: float64<\/pre>\n<p><strong>\ud83d\udca1 Penjelasan:<\/strong> Seluruh tahap pembersihan digabung: hapus data ganda, rapikan indeks, lalu isi data kosong dengan rata-rata. Setelah bersih, data <strong>dibingkai<\/strong> dalam DataFrame dan dirangkum dengan <code>groupby(\"Kelas\")<\/code>, yaitu mengelompokkan baris berdasarkan kelas, lalu menghitung rata-rata nilai tiap kelompok. Inilah tahap <strong>pengolahan data<\/strong> yang menjadi bahan untuk grafik di Bagian I. Selamat! \ud83c\udf89 Kamu sudah menjalani alur lengkap: data kotor \u2192 data bersih \u2192 informasi.<\/p>\n<div style=\"background: #fffbeb; border: 2px dashed #f59e0b; border-radius: 10px; padding: 10px 16px; margin: 14px 0;\"><strong>\ud83c\udfc1 Tantangan mini:<\/strong> Ganti <code>.mean()<\/code> pada <code>groupby<\/code> dengan <code>.max()<\/code>. Siapa nilai tertinggi di tiap kelas? (petunjuk: yang tampil adalah nilainya)<\/div>\n<hr \/>\n<h3 style=\"background: #7c3aed; color: #ffffff; padding: 10px 16px; border-radius: 8px;\">Rangkuman<\/h3>\n<ul>\n<li>Data mentah perlu dibersihkan agar analisis tidak menyesatkan (&#8220;garbage in, garbage out&#8221;).<\/li>\n<li>Masalah umum: data ganda, data kosong (<code>NaN<\/code>), teks tidak seragam, dan tipe data salah.<\/li>\n<li>Periksa dulu dengan <code>isnull().sum()<\/code> dan <code>duplicated().sum()<\/code>.<\/li>\n<li>Bersihkan dengan <code>drop_duplicates()<\/code>, <code>dropna()<\/code> atau <code>fillna()<\/code>, <code>str.strip()<\/code>, dan <code>astype()<\/code>. Simpan hasilnya kembali ke variabel.<\/li>\n<li><code>reset_index(drop=True)<\/code> merapikan nomor baris setelah ada baris yang dihapus.<\/li>\n<li>Data bersih dibingkai dalam DataFrame lalu dirangkum, misalnya dengan <code>groupby()<\/code>.<\/li>\n<li>Berlaku jujur: catat cara pembersihan, dan jangan mengubah data demi hasil yang bagus.<\/li>\n<\/ul>\n<hr \/>\n<div style=\"background: #eef2ff; border: 2px dashed #6366f1; border-radius: 12px; padding: 14px 20px; margin: 16px 0;\">\n<h4 style=\"color: #4338ca; margin-top: 0;\">\ud83c\udf31 Pengayaan (Opsional)<\/h4>\n<p style=\"color: #312e81;\">Selain rata-rata, ada cara lain mengisi data kosong, misalnya dengan <strong>nilai tengah<\/strong> (<em>median<\/em>), yang lebih tahan terhadap nilai ekstrem. Coba ganti <code>.mean()<\/code> dengan <code>.median()<\/code> pada Praktik 36 dan bandingkan hasilnya.<\/p>\n<p style=\"margin-bottom: 0; color: #312e81;\"><em>Di Bagian I, data bersih seperti ini akan kita ubah menjadi grafik, lalu kita baca maknanya (interpretasi).<\/em><\/p>\n<\/div>\n<hr \/>\n<div style=\"background: #fdf2f8; border: 2px solid #ec4899; border-radius: 12px; padding: 16px 20px; margin: 16px 0;\">\n<h3 style=\"color: #db2777; margin-top: 0;\">\ud83d\udc97 Nilai Panca Cinta: Cinta Allah dan Rasul-Nya<\/h3>\n<p style=\"color: #831843;\">Islam sangat menekankan <strong>kebersihan<\/strong> (<em>thaharah<\/em>) dan <strong>kejujuran<\/strong>. Membersihkan data adalah latihan kecil dari keduanya: kita membuang kotoran dalam data, tetapi tetap <strong>jujur<\/strong>, tidak memalsukan atau mengubah angka demi kepentingan sendiri. Teliti membersihkan, jujur dalam mencatat, dan bertanggung jawab atas hasil kerja adalah bagian dari sikap <strong>amanah<\/strong> yang mencerminkan <strong>cinta kepada Allah dan Rasul-Nya<\/strong>.<\/p>\n<p style=\"color: #831843;\"><em>Refleksi: Pernahkah kamu tergoda mengubah angka (misalnya nilai atau hasil percobaan) agar terlihat lebih bagus? Apa yang akan kamu lakukan jika itu terjadi lagi?<\/em><\/p>\n<\/div>\n<hr \/>\n<div style=\"background: #f0fdfa; border: 2px solid #0f766e; border-radius: 12px; padding: 16px 20px; margin: 16px 0;\">\n<h3 style=\"color: #0f766e; margin-top: 0;\">\ud83d\udcdd Tugas Siswa<\/h3>\n<p><strong>Tugas Mandiri: Membersihkan Data Nilai Kelompokku<\/strong><\/p>\n<p>Setelah menyelesaikan Praktik 34\u201338, buat <strong>satu notebook baru<\/strong> bernama <strong>Tugas_Bersih_NamaKamu<\/strong>. Salin data kotor berikut ke sel kode pertama:<\/p>\n<pre style=\"background: #1e293b !important; color: #e2e8f0 !important; padding: 12px 16px; border-radius: 8px; overflow-x: auto; white-space: pre-wrap; word-break: break-word; font-size: 15px;\">import pandas as pd\r\n\r\ndata = {\r\n    \"Nama\": [\"Rani\", \"Tono\", \"Wati\", \"Tono\", \"Yudi\", \"Zahra\"],\r\n    \"Kelas\": [\"x-1\", \"X-2\", \" x-1\", \"x-2 \", \"X-2 \", \"x-1\"],\r\n    \"Nilai\": [80, 70, None, 70, 90, 85]\r\n}\r\ndf = pd.DataFrame(data)<\/pre>\n<p>Lalu kerjakan:<\/p>\n<ol>\n<li>Periksa data: tampilkan jumlah data kosong dan jumlah data ganda.<\/li>\n<li>Rapikan kolom <code>Kelas<\/code> (buang spasi dan samakan huruf besar). <strong>Lakukan ini sebelum menghapus data ganda!<\/strong> Mengapa urutannya penting?<\/li>\n<li>Hapus data ganda, lalu rapikan nomor indeks.<\/li>\n<li>Isi data kosong dengan rata-rata nilai, lalu tampilkan tabel bersihnya.<\/li>\n<li>Hitung <strong>rata-rata nilai tiap kelas<\/strong> dengan <code>groupby<\/code>.<\/li>\n<\/ol>\n<div style=\"overflow-x: auto;\">\n<table style=\"width: 100%; border-collapse: collapse; margin: 16px 0;\">\n<thead>\n<tr>\n<th style=\"padding: 10px; border: 1px solid #0f766e; text-align: left; background: #99f6e4 !important; color: #0f172a !important;\"><span style=\"color: #0f172a !important;\">Pertanyaan<\/span><\/th>\n<th style=\"padding: 10px; border: 1px solid #0f766e; text-align: left; background: #99f6e4 !important; color: #0f172a !important;\"><span style=\"color: #0f172a !important;\">Jawaban<\/span><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr style=\"background: #ffffff;\">\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">Tautan (link) notebook<\/td>\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">\u2026<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">Jumlah data kosong dan data ganda awal<\/td>\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">\u2026<\/td>\n<\/tr>\n<tr style=\"background: #ffffff;\">\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">Jumlah baris setelah dibersihkan<\/td>\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">\u2026<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">Rata-rata nilai kelas X-1 dan X-2<\/td>\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">\u2026<\/td>\n<\/tr>\n<tr style=\"background: #ffffff;\">\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">Mengapa teks dirapikan dulu sebelum menghapus data ganda?<\/td>\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">\u2026<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div style=\"background: #fdf2f8; border-left: 4px solid #db2777; border-radius: 8px; padding: 12px 16px; margin: 16px 0;\"><strong style=\"color: #db2777;\">\ud83d\udc97 Soal Tambahan (Nilai Panca Cinta \u2014 Cinta Allah dan Rasul-Nya):<\/strong><br \/>\nMengapa mencatat cara pembersihan data (misalnya &#8220;data kosong diisi rata-rata&#8221;) termasuk sikap jujur dan amanah? Berikan satu contoh dalam kehidupan sehari-hari.<em style=\"color: #831843;\">Jawaban: \u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026<\/em><\/div>\n<p><em>Kerjakan di Colab, lalu kumpulkan tautan notebook melalui link\/aplikasi yang diinformasikan guru (sesuai kondisi dan kesepakatan dengan guru pengampu). Jika tidak memungkinkan memakai laptop, boleh dicatat dan difoto di buku tugas.<\/em><\/p>\n<\/div>\n<a href=\"https:\/\/man2kulonprogo.sch.id\/m2kp\/2023\/08\/28\/informatika-kelas-x-semester-gasal\/#bab6\" class=\"shortc-button medium purple  \">Informatika Kelas X<\/a>\n","protected":false},"excerpt":{"rendered":"<p>Informatika Kelas X \u2014 Bab 6: Analisis Data Bagian H: Pembersihan dan Pembingkaian Data Pengampu : Zuli Irawanto, ST \ud83c\udfaf Tujuan Pembelajaran Setelah mempelajari materi ini, siswa diharapkan mampu: Menjelaskan alasan data mentah perlu dibersihkan sebelum dianalisis. Mengenali masalah umum pada data: data ganda, data kosong, teks tidak seragam, dan tipe data salah. Membersihkan data &hellip;<\/p>\n","protected":false},"author":1,"featured_media":21408,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1128,1582],"tags":[],"class_list":["post-21407","post","type-post","status-publish","format-standard","has-post-thumbnail","","category-informatika","category-informatika-kelas-x"],"_links":{"self":[{"href":"https:\/\/man2kulonprogo.sch.id\/m2kp\/wp-json\/wp\/v2\/posts\/21407","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/man2kulonprogo.sch.id\/m2kp\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/man2kulonprogo.sch.id\/m2kp\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/man2kulonprogo.sch.id\/m2kp\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/man2kulonprogo.sch.id\/m2kp\/wp-json\/wp\/v2\/comments?post=21407"}],"version-history":[{"count":0,"href":"https:\/\/man2kulonprogo.sch.id\/m2kp\/wp-json\/wp\/v2\/posts\/21407\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/man2kulonprogo.sch.id\/m2kp\/wp-json\/wp\/v2\/media\/21408"}],"wp:attachment":[{"href":"https:\/\/man2kulonprogo.sch.id\/m2kp\/wp-json\/wp\/v2\/media?parent=21407"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/man2kulonprogo.sch.id\/m2kp\/wp-json\/wp\/v2\/categories?post=21407"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/man2kulonprogo.sch.id\/m2kp\/wp-json\/wp\/v2\/tags?post=21407"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}