Python Dasar & Cara Berpikir Komputasional
Bulan pertama ini bukan soal hafalan syntax. Abbas akan belajar cara berpikir seperti programmer: memecah masalah menjadi langkah-langkah kecil, menerjemahkan logika ke kode, dan membaca error tanpa panik.
Apa yang akan Abbas pelajari bulan ini?
- Menjalankan kode Python pertama di Google Colab tanpa bingung
- Membuat variabel dan memahami tipe data dasar (int, float, string, boolean)
- Menggunakan list dan dictionary untuk menyimpan banyak data
- Menulis percabangan if/elif/else untuk pengambilan keputusan
- Membuat loop untuk mengulang proses secara otomatis
- Mendefinisikan function agar kode bisa dipakai ulang
- Membaca error message dan men-debug kode sendiri
- Membuat notebook yang rapi dengan penjelasan markdown
Python adalah bahasa nomor 1 untuk data analytics dan data science. Sintaksnya mirip bahasa Inggris biasa, jadi lebih mudah dibaca dibanding Java atau C++. Hampir semua tools analisis data (Pandas, NumPy, scikit-learn) ditulis dalam Python. Belajar Python sekarang berarti Abbas bisa langsung pakai tools yang sama yang dipakai oleh data analyst di Google, Gojek, BPS, dan Tokopedia.
- Data apa yang paling menarik buat Abbas analisis? Nilai sekolah? Harga makanan? Cuaca? Hasil pertandingan?
- Kalau Abbas bisa tanya satu pertanyaan ke data yang ada di dunia, pertanyaan apa itu?
- Apa bedanya mengetahui fakta vs memahami mengapa fakta itu terjadi?
Output akhir Bulan 1
- 1 notebook Google Colab berjalan penuh tanpa error
- Program "Analisis Nilai Pribadi" yang bisa hitung rata-rata, nilai tertinggi, terendah, dan status lulus
- Minimal 5 function Python buatan sendiri
- 1 halaman refleksi tertulis: apa yang Abbas pelajari
Minggu 1: Setup & Mental Model Coding
Hari 1β5 Β· Senin sampai Jumat
Abbas bisa membuka Google Colab, menjalankan kode Python pertama, dan memahami mengapa data analyst itu pekerjaan yang penting.
Data analyst adalah orang yang mengubah data mentah menjadi keputusan yang lebih baik. Bukan soal membuat grafik yang cantik, tapi soal menjawab pertanyaan bisnis yang nyata.
Contoh nyata: Gojek tahu jam 11 malam lebih banyak orang pesan makanan daripada ojek (insight dari data analyst). BPS tahu daerah mana paling butuh bantuan sosial, juga dari data analyst. IPB tahu komoditas pangan apa yang akan langka 3 bulan ke depan, juga dari data analyst.
Abbas yang masuk kuliah sudah bisa melakukan ini = Abbas jauh lebih unggul dari 95% mahasiswa baru.
Buka colab.research.google.com, buat notebook baru, dan ketik kode ini:
print("Halo! Nama gue Abbas, dan ini kode Python pertama gue.")
print("Gue lagi belajar jadi Data Analyst.")
print("Ini hari pertama dari 365 hari perjalanan gue.")
Tekan Shift+Enter untuk menjalankan. Lihat outputnya muncul di bawah cell.
# Variabel pertama Abbas
tahun_lahir = 2008 # ganti sesuai tahun lahir Abbas
tahun_sekarang = 2025
umur = tahun_sekarang - tahun_lahir
print("Abbas berumur", umur, "tahun")
print("Kalau nanti kuliah tahun 2027, Abbas berumur", tahun_lahir + 19)
Buat program yang mencetak "kartu profil" Abbas: nama, umur, sekolah, cita-cita karir, dan satu fakta menarik tentang diri Abbas. Semua dalam satu notebook yang rapi dengan markdown title di atasnya.
- Komputer tidak bisa "menebak": Abbas harus memberi instruksi yang sangat spesifik. Apa artinya ini untuk cara Abbas berpikir?
- Kenapa penting bahwa data analyst bisa coding, bukan hanya bisa Excel?
- Data apa yang ada di sekitar kehidupan Abbas sehari-hari yang mungkin menarik untuk dianalisis?
Abbas bisa membuat notebook yang terstruktur dengan judul, penjelasan, dan kode, seperti buku catatan digital yang bisa dibaca orang lain.
Notebook bukan sekadar tempat nulis kode. Ini adalah dokumen yang bisa berbicara sendiri. Data analyst profesional menulis notebook yang bisa dibaca oleh rekan kerja atau atasan tanpa perlu penjelasan verbal. Abbas harus mulai terbiasa dari sekarang.
Struktur notebook yang baik: Judul β Tujuan β Kode β Penjelasan hasil β Kesimpulan.
# Notebook Pertama: Mengenal Abbas
## Tujuan
Notebook ini berisi data sederhana tentang diri Abbas,
dihitung menggunakan Python.
## Informasi Dasar
# Data diri Abbas
nama = "Abbas"
sekolah = "SMA ..." # isi nama sekolah
kelas = 11
nilai_matematika = 87
nilai_bahasa_indonesia = 82
nilai_bahasa_inggris = 90
nilai_biologi = 78
rata_rata = (nilai_matematika + nilai_bahasa_indonesia +
nilai_bahasa_inggris + nilai_biologi) / 4
print(f"Halo! Saya {nama} dari kelas {kelas}")
print(f"Rata-rata nilai saya: {rata_rata:.1f}")
print(f"Sekolah: {sekolah}")
Lihat f"..." di depan tanda kutip? Ini namanya f-string (formatted string). Dengan ini, Abbas bisa langsung masukkan nilai variabel ke dalam kalimat pakai {nama_variabel}. Ini cara paling bersih untuk bikin output yang rapi.
Buat notebook yang berisi 3 cell markdown (judul, penjelasan bagian 1, kesimpulan) dan 3 cell code (perhitungan berbeda). Topik bebas, bisa soal nilai, jadwal belajar, atau apapun yang menarik. Yang penting strukturnya rapi dan ada penjelasannya.
- Kenapa penting mendokumentasikan kode? Bayangkan Abbas membuka kode yang Abbas tulis 6 bulan lalu tanpa catatan apapun. Apa yang terjadi?
- Siapa "pembaca" yang ideal dari notebook seorang data analyst?
Abbas memahami 4 tipe data dasar Python dan mengapa tipe data yang salah bisa menyebabkan bug yang susah ditemukan.
Bayangkan variabel seperti laci dalam lemari. Setiap laci punya jenis barang yang berbeda:
- int: laci untuk angka bulat (umur, jumlah siswa, nomor absen)
- float: laci untuk angka desimal (nilai rata-rata, harga, berat)
- string: laci untuk teks (nama, alamat, kategori)
- boolean: laci yang cuma bisa isi True atau False (lulus/tidak, hadir/absen)
Kalau Abbas taruh barang yang salah di laci yang salah, Python akan protes dengan error.
# Empat tipe data dasar
nilai_ujian = 87 # int
berat_badan = 58.5 # float
nama_siswa = "Abbas" # string
sudah_lulus = True # boolean
# Cek tipe data
print(type(nilai_ujian)) # <class 'int'>
print(type(berat_badan)) # <class 'float'>
print(type(nama_siswa)) # <class 'str'>
print(type(sudah_lulus)) # <class 'bool'>
# Bahaya: string vs angka!
nilai_str = "87" # ini STRING, bukan angka!
print(nilai_ujian + 10) # 97 β benar
# print(nilai_str + 10) # ERROR! tidak bisa tambah string dan angka
# Konversi tipe data
nilai_angka = int(nilai_str) # convert string ke int
print(nilai_angka + 10) # 97 β sekarang benar
# Data nilai 5 mata pelajaran
mat = 87
indo = 82
ing = 90
bio = 78
fis = 85
total = mat + indo + ing + bio + fis
rata_rata = total / 5
nilai_tertinggi = max(mat, indo, ing, bio, fis)
nilai_terendah = min(mat, indo, ing, bio, fis)
print(f"Total nilai: {total}")
print(f"Rata-rata: {rata_rata:.2f}")
print(f"Nilai tertinggi: {nilai_tertinggi}")
print(f"Nilai terendah: {nilai_terendah}")
lulus = rata_rata >= 75 # boolean!
print(f"Status lulus: {lulus}")
Buat program kalkulator BMI (Body Mass Index) yang meminta berat badan (float) dan tinggi badan (float), lalu menghitung BMI dan mencetak kategorinya (Kurus/Normal/Gemuk/Obesitas). Hint: BMI = berat / (tinggi_meter ** 2)
- Kenapa Python membedakan string "87" dengan angka 87? Apa yang bisa salah kalau komputer menganggapnya sama?
- Di dunia data analytics nyata, data yang datang dari spreadsheet atau database sering kali bertipe string padahal harusnya angka. Apa yang harus dilakukan data analyst dalam kasus ini?
Abbas bisa menggunakan operator aritmetika, perbandingan, dan logika untuk membuat kalkulasi dan kondisi yang berguna.
Setiap kali Abbas nanti nulis SQL, filter data, atau bikin kondisi di Pandas, Abbas pakai operator yang sama seperti ini. Contoh: WHERE nilai > 75 AND hadir = True: itu operator perbandingan dan logika! Belajar operator Python = belajar fondasi semua query data.
# ββ Aritmetika ββ
a, b = 17, 5
print(a + b) # 22 β penjumlahan
print(a - b) # 12 β pengurangan
print(a * b) # 85 β perkalian
print(a / b) # 3.4 β pembagian (selalu float)
print(a // b) # 3 β bagi bulat (buang desimal)
print(a % b) # 2 β sisa bagi (modulo)
print(a ** 2) # 289 β pangkat
# ββ Perbandingan (selalu menghasilkan True/False) ββ
nilai = 82
print(nilai > 75) # True
print(nilai == 82) # True (== bukan =)
print(nilai != 90) # True (tidak sama dengan)
print(nilai >= 90) # False
# ββ Logika ββ
nilai_ok = nilai >= 75 # True
hadir = True
print(nilai_ok and hadir) # True (keduanya harus True)
print(nilai_ok or hadir) # True (cukup salah satu True)
print(not hadir) # False (kebalikan)
Buat program penentu diskon. Input: harga barang (float) dan status member (boolean). Aturan: member dapat diskon 15%, bukan member dapat 5%, kalau harga di atas 500.000 dapat tambahan diskon 5%. Cetak harga asli, total diskon persen, dan harga akhir.
- Apa bedanya
=(assignment) dengan==(comparison)? Buat analogi sendiri untuk membantu Abbas mengingat perbedaannya. - Operator
%(modulo) terlihat aneh tapi sangat berguna. Kapan Abbas perlu tahu sisa pembagian dalam kehidupan nyata? (Hint: hari dalam seminggu, bilangan ganjil/genap)
- Google Colab: buka, buat cell code dan markdown, jalankan, simpan
- Variabel: simpan data dengan nama yang bermakna
- 4 tipe data dasar: int, float, string, boolean
- Operator: aritmetika, perbandingan, logika
- print() dan f-string untuk output yang rapi
Buat program lengkap yang menerima nilai 5 mata pelajaran (langsung ditulis sebagai variabel), kemudian menghasilkan output berikut:
- Rata-rata nilai (2 angka desimal)
- Nilai tertinggi dan terendah
- Status: Lulus (rata β₯75), Hampir (rata 70-74), Perlu Perbaikan (rata <70)
- Prediksi ranking kasar: Top (rata β₯85), Atas (80-84), Tengah (75-79)
- Pesan motivasi yang berbeda tergantung statusnya
Format output yang diharapkan:
============================
LAPORAN NILAI β ABBAS
============================
Mat: 87 | Indo: 82 | Ing: 90
Bio: 78 | Fis: 85
----------------------------
Rata-rata : 84.40
Tertinggi : 90 (Bahasa Inggris)
Terendah : 78 (Biologi)
Status : LULUS
Ranking : Atas
----------------------------
Pesan: Bagus Abbas! Tinggal
perkuat Biologi dan Abbas
masuk kategori Top.
============================
- Apa yang paling mudah minggu ini? Apa yang paling sulit?
- Error apa yang paling sering Abbas temui? Bagaimana cara Abbas menemukan solusinya?
- Kalau Abbas harus menjelaskan "variabel" ke teman yang belum belajar coding, apa analogi yang akan Abbas pakai?
Minggu 2: List, Dictionary, & Cara Menyimpan Banyak Data
Hari 6β10 Β· Senin sampai Jumat
Kalau Abbas nanti kerja dengan data, akan sering ketemu tabel. Bayangkan list sebagai satu kolom data: semua nilai matematika dari 30 siswa. Dictionary adalah satu baris data: profil lengkap satu siswa (nama, nilai, absensi). Dua struktur ini adalah fondasi dari Pandas DataFrame yang akan Abbas pakai di Bulan 5.
Abbas bisa membuat list, mengakses elemen tertentu, dan melakukan operasi dasar: tambah, hapus, urutkan, cari.
# List nilai matematika 10 siswa
nilai_mat = [87, 92, 65, 78, 90, 55, 83, 71, 88, 76]
# Akses elemen (index mulai dari 0!)
print(nilai_mat[0]) # 87 β siswa pertama
print(nilai_mat[-1]) # 76 β siswa terakhir
print(nilai_mat[2:5]) # [65, 78, 90] β slicing
# Operasi umum
print(len(nilai_mat)) # 10 β jumlah siswa
print(sum(nilai_mat)) # 785 β total nilai
print(sum(nilai_mat) / len(nilai_mat)) # 78.5 β rata-rata
print(max(nilai_mat)) # 92 β nilai tertinggi
print(min(nilai_mat)) # 55 β nilai terendah
# Tambah dan hapus
nilai_mat.append(95) # tambah siswa baru di akhir
print(len(nilai_mat)) # 11 sekarang
# Urutkan
diurutkan = sorted(nilai_mat) # urutan naik
print(diurutkan)
terurut_turun = sorted(nilai_mat, reverse=True)
print(terurut_turun)
Buat list nilai dari 6 mata pelajaran Abbas sendiri. Kemudian tanpa pakai fungsi bawaan Python (jangan pakai max/min/sum), tulis kode sendiri yang bisa menemukan: nilai tertinggi, nilai terendah, dan rata-rata. Gunakan loop sederhana.
- Kenapa index di Python mulai dari 0, bukan 1? Apa logika di baliknya?
- Kalau Abbas punya list 1000 nilai siswa dan ingin tahu siapa yang nilainya paling rendah, gimana caranya yang paling efisien?
- Apa bedanya list yang diurutkan dengan
sort()vssorted()? Coba cek dokumentasi Python!
Abbas bisa membuat dictionary untuk menyimpan data terstruktur dan mengaksesnya dengan key.
# Dictionary = data dengan label (key-value pairs)
siswa = {
"nama": "Abbas",
"kelas": "11 IPA 1",
"nilai_mat": 87,
"nilai_indo": 82,
"nilai_ing": 90,
"hadir": True
}
# Akses dengan key
print(siswa["nama"]) # Abbas
print(siswa["nilai_mat"]) # 87
# Tambah atau ubah data
siswa["nilai_bio"] = 78 # tambah key baru
siswa["nilai_mat"] = 89 # ubah nilai yang ada
# Hitung rata-rata dari dictionary
nilai_list = [siswa["nilai_mat"], siswa["nilai_indo"],
siswa["nilai_ing"], siswa["nilai_bio"]]
rata = sum(nilai_list) / len(nilai_list)
print(f"Siswa: {siswa['nama']}, Rata-rata: {rata:.1f}")
# List of dictionaries β ini fondasi tabel data!
kelas = [
{"nama": "Abbas", "nilai": 87},
{"nama": "Budi", "nilai": 92},
{"nama": "Citra", "nilai": 78},
]
for s in kelas:
print(f"{s['nama']}: {s['nilai']}")
List of dictionaries di atas, itu sama persis dengan struktur data Pandas DataFrame yang akan Abbas pakai di Bulan 5. Setiap dictionary = satu baris/row. Setiap key = nama kolom. Kalau Abbas paham ini, Pandas akan jauh lebih mudah.
Buat dictionary untuk 5 teman Abbas dengan data: nama, nilai_matematika, nilai_bahasa_inggris, dan hobi. Kemudian buat program yang bisa: (1) cetak siapa yang nilai matematikanya tertinggi, (2) cetak semua yang suka hal yang sama dengan Abbas, (3) hitung rata-rata nilai matematika seluruh kelas.
- Kapan Abbas harus pilih list, kapan harus pilih dictionary?
- Di database nyata, setiap "baris" data punya banyak "kolom". Struktur Python apa yang paling mirip dengan ini?
- Kalau Abbas ingin menyimpan data 1000 siswa dengan 10 atribut masing-masing, bagaimana struktur data yang paling masuk akal?
Abbas memahami for loop dan bisa menggunakannya untuk memproses setiap elemen dalam list atau dictionary.
Bayangkan pabrik makanan: ada conveyor belt yang membawa kotak satu per satu. Setiap kotak masuk ke mesin yang melakukan hal yang sama (timbang, label, press). Loop di Python persis seperti itu. Setiap elemen masuk ke dalam loop body dan diproses dengan cara yang sama.
nilai_kelas = [87, 92, 65, 78, 90, 55, 83, 71, 88, 76]
# Loop dasar
for nilai in nilai_kelas:
print(nilai)
# Loop dengan counter
for i, nilai in enumerate(nilai_kelas):
print(f"Siswa ke-{i+1}: {nilai}")
# Loop untuk menghitung jumlah yang lulus
jumlah_lulus = 0
for nilai in nilai_kelas:
if nilai >= 75:
jumlah_lulus += 1
print(f"Jumlah lulus: {jumlah_lulus} dari {len(nilai_kelas)} siswa")
print(f"Persen lulus: {jumlah_lulus/len(nilai_kelas)*100:.1f}%")
# Loop dict of list β analisis per subjek
nilai_semua = {
"Matematika": [87, 92, 65, 78, 90],
"Bahasa Indo": [82, 88, 75, 91, 70],
"Bahasa Ing": [90, 85, 72, 88, 95],
}
for mapel, nilai in nilai_semua.items():
rata = sum(nilai) / len(nilai)
print(f"{mapel}: rata-rata {rata:.1f}")
Buat program "Analisis Kelas Sederhana" dengan list of dictionaries (5 siswa, masing-masing punya nama dan 3 nilai). Program harus bisa: (1) cetak semua siswa dengan rata-ratanya, (2) temukan siswa terbaik dan terburuk, (3) hitung berapa persen kelas yang lulus (rata β₯75), (4) cetak pesan berbeda untuk setiap siswa berdasarkan statusnya.
- Bayangkan Abbas harus menganalisis nilai 500 siswa. Tanpa loop, berapa baris kode yang diperlukan? Dengan loop?
- Loop juga bisa berjalan terlalu lama kalau data terlalu besar. Kapan "cukup" dalam loop? (Ini namanya computational complexity, istilah penting untuk data engineer)
Abbas bisa membuat percabangan logika yang kompleks menggunakan if/elif/else untuk kategorisasi data.
Data analyst sering harus mengkategorikan data. Nilai 90+ = A, 80-89 = B, 70-79 = C. Pelanggan beli >1jt = Gold, >500rb = Silver, sisanya = Regular. Kondisi ini persis if/elif/else. Di Pandas nanti, Abbas akan pakai .apply() yang di dalamnya ada fungsi if/else.
def kategorikan_nilai(nilai):
"""Mengubah angka nilai menjadi huruf dan keterangan."""
if nilai >= 90:
return "A", "Sangat Baik"
elif nilai >= 80:
return "B", "Baik"
elif nilai >= 70:
return "C", "Cukup"
elif nilai >= 60:
return "D", "Kurang"
else:
return "E", "Sangat Kurang"
# Test
for n in [95, 83, 72, 61, 45]:
huruf, ket = kategorikan_nilai(n)
print(f"Nilai {n}: {huruf} β {ket}")
# Kondisi kompleks: butuh intervensi
def cek_intervensi(nilai_dict):
mat = nilai_dict.get("matematika", 0)
ing = nilai_dict.get("inggris", 0)
hadir = nilai_dict.get("kehadiran", 100)
if mat < 60 and hadir < 80:
return "Butuh intervensi segera"
elif mat < 70 or hadir < 80:
return "Perlu perhatian lebih"
else:
return "Oke, tetap pantau"
Buat sistem rekomendasi jurusan kuliah sederhana. Input: nilai matematika, nilai biologi, nilai fisika, minat (sains/sosial/bahasa). Output: rekomendasi 3 jurusan yang cocok dengan penjelasan singkat kenapa. Buat setidaknya 8 kombinasi kondisi yang berbeda.
- Urutan elif sangat penting. Apa yang terjadi kalau Abbas menukar urutan kondisi? Coba dengan contoh nyata.
- Dalam data analysis, "edge cases" adalah data yang tidak cocok dengan kondisi manapun. Bagaimana Abbas handle ini dengan else?
Yang sudah dikuasai: variabel, tipe data, operator, list, dictionary, for loop, if/elif/else. Itu sudah cukup untuk membangun banyak program analisis data sederhana.
Upgrade program dari minggu lalu. Sekarang dengan list of dictionaries (10 siswa, 5 mata pelajaran masing-masing). Program harus bisa:
- Hitung rata-rata per siswa dan kategorikannya (A/B/C/D/E)
- Hitung rata-rata per mata pelajaran
- Temukan mata pelajaran dengan rata-rata tertinggi dan terendah
- Cetak daftar siswa yang butuh bimbingan (minimal 1 nilai di bawah 60)
- Hitung distribusi nilai: berapa di A, B, C, D, E
Cetak "ranking" semua siswa dari tertinggi ke terendah berdasarkan rata-rata. Tanpa pakai sorted() bawaan Python: buat algoritma pengurutan sederhana sendiri!
Minggu 3: Function (Kode yang Bisa Dipakai Ulang)
Hari 11β15 Β· Senin sampai Jumat
Dalam pekerjaan nyata, Abbas akan sering menganalisis banyak dataset dengan cara yang sama. Misalnya: "bersihkan data, hitung statistik dasar, buat grafik". Kalau ini ditulis ulang setiap kali = boros waktu dan rentan salah. Function memungkinkan Abbas menulis sekali, pakai berkali-kali. Di Pandas, hampir semua operasi lanjutan pakai custom function.
Abbas bisa mendefinisikan function dengan parameter dan return value, serta menulis docstring yang baik.
# Function dasar
def hitung_rata_rata(nilai_list):
"""
Menghitung rata-rata dari list nilai.
Args:
nilai_list: list berisi angka
Returns:
float: rata-rata nilai
"""
if len(nilai_list) == 0:
return 0
return sum(nilai_list) / len(nilai_list)
# Pakai function
nilai = [87, 92, 78, 85]
print(hitung_rata_rata(nilai)) # 85.5
# Function dengan multiple returns
def statistik_dasar(data):
"""Hitung statistik dasar: min, max, rata-rata."""
if not data:
return None, None, None
return min(data), max(data), sum(data) / len(data)
minimum, maksimum, rata = statistik_dasar([87, 92, 65, 78])
print(f"Min: {minimum}, Max: {maksimum}, Rata: {rata:.1f}")
# Default parameter
def cek_kelulusan(nilai, batas_lulus=75):
"""Cek apakah nilai lulus dengan batas yang bisa dikustomisasi."""
return nilai >= batas_lulus
print(cek_kelulusan(80)) # True (pakai default 75)
print(cek_kelulusan(80, 85)) # False (batas 85)
Buat library function analisis nilai: (1) hitung_median(data) tanpa pakai statistics library, (2) hitung_modus(data) yang return nilai yang paling sering muncul, (3) buat_laporan(siswa_dict) yang return string laporan lengkap satu siswa. Semua dengan docstring.
Abbas bisa membaca error message Python dan menulis kode yang tidak crash saat menerima data yang tidak terduga.
Data analyst yang baik tidak takut error. Error adalah komputer yang jujur memberi tahu di mana ada masalah. Belajar membaca error message = superpower yang membuat Abbas 10x lebih cepat dari programmer yang selalu panik saat kode error.
- TypeError: operasi yang salah tipe data
- IndexError: akses index yang tidak ada
- KeyError: akses key yang tidak ada di dictionary
- ZeroDivisionError: bagi dengan nol
- ValueError: nilai yang tidak valid untuk operasi
def bagi_aman(pembilang, penyebut):
"""Bagi dua angka, aman dari ZeroDivisionError."""
try:
return pembilang / penyebut
except ZeroDivisionError:
print("Warning: penyebut nol, return None")
return None
# Data nyata sering punya nilai yang hilang atau salah
data_kotor = [87, 92, "N/A", 78, None, 90]
nilai_bersih = []
for item in data_kotor:
try:
nilai_bersih.append(float(item))
except (TypeError, ValueError):
print(f"Skip data tidak valid: {item}")
print(f"Data bersih: {nilai_bersih}")
print(f"Rata-rata: {sum(nilai_bersih)/len(nilai_bersih):.1f}")
Buat function parse_nilai(input_str) yang menerima string apa saja (bisa "87", "90.5", "tidak hadir", "N/A", "-") dan return (nilai_float, valid_boolean). Untuk input yang tidak bisa dikonversi, return (None, False). Test dengan 10 input berbeda termasuk edge cases.
Abbas bisa memanipulasi string untuk membersihkan data teks, dan membaca/menulis file CSV sederhana.
# Data nyata sering punya whitespace, case, format yang tidak konsisten
nama_kotor = [" Abbas ", "BUDI", "citra ", "Dewi\n"]
nama_bersih = [nama.strip().title() for nama in nama_kotor]
print(nama_bersih) # ['Abbas', 'Budi', 'Citra', 'Dewi']
# String methods penting
teks = " Nama: Abbas Kelas: 11 IPA 1 "
print(teks.strip()) # hapus whitespace
print(teks.lower()) # huruf kecil semua
print(teks.upper()) # huruf besar semua
print(teks.replace("Abbas", "A***")) # ganti kata
print(teks.split(":")) # pecah jadi list
print("Abbas" in teks) # cek apakah ada kata
print(teks.startswith("Nama")) # cek awal teks
# Write dan read file sederhana
import csv
# Write
data = [["Abbas", 87, 82], ["Budi", 92, 88]]
with open("nilai.csv", "w", newline="") as f:
writer = csv.writer(f)
writer.writerow(["nama", "matematika", "bahasa_indo"])
writer.writerows(data)
# Read
with open("nilai.csv", "r") as f:
reader = csv.DictReader(f)
for row in reader:
print(row)
Download dataset nilai siswa fiktif (atau buat sendiri 20 baris dalam CSV). Buat program yang membaca file tersebut, membersihkan nama (trim, title case), mengkonversi semua nilai ke float (skip yang tidak valid), lalu menulis file CSV baru yang sudah bersih dengan kolom tambahan: rata-rata dan kategori nilai.
Ini adalah simulasi pekerjaan data analyst sesungguhnya. Buat sebuah program Python yang:
- Read: Baca file CSV nilai siswa (buat sendiri atau gunakan data fiktif 15 siswa Γ 5 mata pelajaran)
- Clean: Bersihkan nama, konversi nilai ke float, skip yang invalid
- Analyze: Hitung rata-rata per siswa, rata-rata per mata pelajaran, temukan outlier (nilai yang terlalu jauh dari rata-rata)
- Categorize: Beri kategori (A/B/C/D/E) dan status (Bintang Kelas/Butuh Bimbingan/Normal)
- Report: Cetak laporan ringkas dan simpan hasil ke file baru
Semua dikerjakan dengan function yang terpisah dan docstring. Ini adalah versi Python dari apa yang data analyst lakukan setiap hari!
Minggu 4: Mini Project: Analisis Nilai Sekolah
Hari 16β20 Β· Ini output resmi pertama Abbas sebagai calon data analyst
Abbas diminta oleh "Om Ican" untuk menganalisis nilai sekolah Abbas sendiri dan teman-teman (data fiktif oke). Outputnya adalah laporan yang bisa dipahami oleh guru atau orang tua. Bukan hanya angka, tapi insight yang actionable.
Data analyst yang baik selalu plan dulu, code kemudian. Hari ini Abbas hanya boleh buat:
- Daftar pertanyaan yang ingin dijawab dari data (minimal 5 pertanyaan)
- Desain dataset: kolom apa saja yang diperlukan
- Daftar function yang akan dibuat
- Sketsa format output yang diinginkan
nama,kelas,matematika,bahasa_indo,bahasa_ing,biologi,fisika,jam_belajar,kehadiran
Abbas,11 IPA 1,87,82,90,78,85,15,95
Budi,11 IPA 1,92,78,85,88,91,12,88
Citra,11 IPA 2,65,90,72,70,68,8,75
...
- Mata pelajaran apa yang rata-ratanya paling tinggi? Paling rendah?
- Apakah siswa yang belajar lebih banyak jam cenderung dapat nilai lebih baik?
- Apakah kehadiran berkorelasi dengan nilai? Siapa yang hadir banyak tapi nilainya rendah?
- Siswa mana yang "tidak konsisten" (ada mata pelajaran bagus, ada yang buruk)?
- Kalau sekolah hanya bisa berikan bimbingan ke 5 siswa, siapa yang paling prioritas?
import csv
# ββ 1. Data loading ββ
def load_data(filename):
"""Baca CSV dan return list of dict."""
# TODO: baca file, konversi nilai ke float, return list
pass
# ββ 2. Statistik per siswa ββ
def analisis_siswa(siswa_dict):
"""Hitung rata-rata dan kategori untuk satu siswa."""
# TODO: hitung rata-rata, kategori (A-E), status, rekomendasi
pass
# ββ 3. Statistik per mata pelajaran ββ
def analisis_mapel(semua_siswa, nama_mapel):
"""Statistik satu mata pelajaran dari semua siswa."""
# TODO: rata-rata, tertinggi, terendah, jumlah lulus
pass
# ββ 4. Temukan insights ββ
def temukan_insights(semua_siswa):
"""Return dict berisi temuan penting dari data."""
# TODO: siswa terbaik, perlu bimbingan, korelasi jam belajar, dll
pass
# ββ 5. Generate laporan ββ
def buat_laporan(semua_siswa, insights):
"""Cetak laporan lengkap ke console."""
# TODO: format laporan yang rapi dan informatif
pass
# ββ Main ββ
if __name__ == "__main__":
data = load_data("nilai_kelas.csv")
insights = temukan_insights(data)
buat_laporan(data, insights)
- Kode berjalan penuh tanpa error
- Ada minimal 5 function dengan docstring
- Menjawab semua 5 pertanyaan analisis dari hari 16
- Output rapi dan bisa dipahami orang yang tidak tahu coding
- Ada komentar di bagian kode yang kompleks
- Error handling untuk data yang tidak valid
- Semua function punya docstring
- Semua variabel punya nama yang jelas (bukan
x,tmp,data2) - Komentar ada di bagian yang tidak obvious
- Ada markdown cell di notebook yang menjelaskan setiap bagian
- Output terformat rapi dengan separator dan label
- Konsep apa yang paling sulit dipahami? Bagaimana Abbas akhirnya mengerti?
- Error apa yang paling sering Abbas buat? Apa pelajarannya?
- Kalau Abbas harus mengajari Python ke teman SMA dari nol dalam 1 jam, apa yang akan Abbas ajarkan pertama?
- Apa yang paling ingin Abbas lakukan dengan Python setelah selesai program ini?
- Apakah setelah bulan ini Abbas lebih yakin mau jadi data analyst? Kenapa?
Yang Abbas selesaikan di Bulan 1
- 20 hari belajar Python dasar
- 10+ latihan coding
- 5 weekly challenge
- 1 mini project data analysis lengkap
- Siap untuk Bulan 2: Statistik Deskriptif
Buku Pendukung Bulan 1
Semua bisa diakses gratis: tidak perlu beli apapun.
Tools yang Dipakai Bulan 1
brew install python3 di Terminal.