{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "# Bab 03 — Python Data Lab Lengkap\n",
        "\n",
        "Notebook ini dibuat untuk pemula nol. Jalankan dari atas ke bawah di Jupyter lokal, VS Code, Google Colab, atau Kaggle.\n",
        "\n",
        "Target:\n",
        "- memahami variabel, list, dict, loop, function;\n",
        "- membaca dataset mini;\n",
        "- melakukan EDA sederhana;\n",
        "- membuat baseline;\n",
        "- mencatat reproducibility.\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 0. Cara upload ke Google Colab\n",
        "\n",
        "1. Buka https://colab.research.google.com/.\n",
        "2. Login dengan akun Google.\n",
        "3. Klik tab **Upload**.\n",
        "4. Klik **Choose File**.\n",
        "5. Pilih file `python_data_lab.ipynb`.\n",
        "6. Setelah terbuka, klik **Runtime → Run all**.\n",
        "7. Untuk menyimpan hasil, pilih **File → Save a copy in Drive**.\n",
        "\n",
        "Jika membuka dari GitHub publik: pilih tab **GitHub**, masukkan URL repo, lalu pilih path notebook ini.\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 1. Cek versi Python dan catatan run\n",
        "\n",
        "Sel ini membantu mencatat lingkungan kerja agar eksperimen bisa diulang.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "from datetime import datetime\n",
        "import platform\n",
        "import random\n",
        "from statistics import mean\n",
        "\n",
        "SEED = 42\n",
        "random.seed(SEED)\n",
        "\n",
        "print(\"Waktu run:\", datetime.now().isoformat(timespec=\"seconds\"))\n",
        "print(\"Python:\", platform.python_version())\n",
        "print(\"Platform:\", platform.platform())\n",
        "print(\"Seed:\", SEED)\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 2. Variabel dan `print`\n",
        "\n",
        "Ketik ulang contoh ini sendiri. Variabel adalah nama yang menyimpan nilai.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "nama_warung = \"Warung Maju\"\n",
        "es_teh = 42\n",
        "kopi = 18\n",
        "total = es_teh + kopi\n",
        "\n",
        "print(\"Nama warung:\", nama_warung)\n",
        "print(\"Total minuman:\", total)\n",
        "print(f\"Hari ini {nama_warung} menjual {total} minuman.\")\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 3. List: kumpulan nilai\n",
        "\n",
        "List cocok untuk menyimpan banyak angka atau item berurutan.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "penjualan_es_teh = [42, 18, 35, 30, 16]\n",
        "print(penjualan_es_teh)\n",
        "print(\"Data pertama:\", penjualan_es_teh[0])\n",
        "print(\"Data terakhir:\", penjualan_es_teh[-1])\n",
        "print(\"Jumlah data:\", len(penjualan_es_teh))\n",
        "print(\"Total:\", sum(penjualan_es_teh))\n",
        "print(\"Rata-rata:\", sum(penjualan_es_teh) / len(penjualan_es_teh))\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 4. Dict: satu baris data dengan nama kolom\n",
        "\n",
        "Dict menyimpan pasangan `key: value`.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "baris = {\"tanggal\": \"2026-01-01\", \"cuaca\": \"panas\", \"es_teh\": 42, \"kopi\": 18}\n",
        "print(baris)\n",
        "print(\"Tanggal:\", baris[\"tanggal\"])\n",
        "print(\"Es teh:\", baris[\"es_teh\"])\n",
        "print(\"Total minuman:\", baris[\"es_teh\"] + baris[\"kopi\"])\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 5. Dataset mini: list of dict\n",
        "\n",
        "Ini format sederhana sebelum kita memakai pandas di bab berikutnya.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "DATA = [\n",
        "    {\"tanggal\": \"2026-01-01\", \"cuaca\": \"panas\", \"hari\": \"libur\", \"es_teh\": 42, \"kopi\": 18},\n",
        "    {\"tanggal\": \"2026-01-02\", \"cuaca\": \"hujan\", \"hari\": \"kerja\", \"es_teh\": 18, \"kopi\": 31},\n",
        "    {\"tanggal\": \"2026-01-03\", \"cuaca\": \"panas\", \"hari\": \"kerja\", \"es_teh\": 35, \"kopi\": 22},\n",
        "    {\"tanggal\": \"2026-01-04\", \"cuaca\": \"berawan\", \"hari\": \"libur\", \"es_teh\": 30, \"kopi\": 24},\n",
        "    {\"tanggal\": \"2026-01-05\", \"cuaca\": \"hujan\", \"hari\": \"kerja\", \"es_teh\": 16, \"kopi\": 34},\n",
        "    {\"tanggal\": \"2026-01-06\", \"cuaca\": \"panas\", \"hari\": \"kerja\", \"es_teh\": 38, \"kopi\": 21},\n",
        "    {\"tanggal\": \"2026-01-07\", \"cuaca\": \"panas\", \"hari\": \"libur\", \"es_teh\": 45, \"kopi\": 20},\n",
        "]\n",
        "\n",
        "print(\"Jumlah baris:\", len(DATA))\n",
        "print(\"Baris pertama:\", DATA[0])\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 6. Loop: membaca setiap baris\n",
        "\n",
        "Loop membantu melakukan perhitungan untuk semua baris data.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "for baris in DATA:\n",
        "    total = baris[\"es_teh\"] + baris[\"kopi\"]\n",
        "    print(baris[\"tanggal\"], baris[\"cuaca\"], \"total=\", total)\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 7. Function: membuat kode bisa dipakai ulang\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "def total_minuman(baris):\n",
        "    return baris[\"es_teh\"] + baris[\"kopi\"]\n",
        "\n",
        "def rata_rata(nilai):\n",
        "    return sum(nilai) / len(nilai)\n",
        "\n",
        "print(\"Total baris pertama:\", total_minuman(DATA[0]))\n",
        "print(\"Rata-rata contoh:\", rata_rata([10, 20, 30]))\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 8. EDA sederhana: rata-rata dan hari tertinggi\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "es_teh_values = [baris[\"es_teh\"] for baris in DATA]\n",
        "kopi_values = [baris[\"kopi\"] for baris in DATA]\n",
        "\n",
        "print(\"Rata-rata es teh:\", rata_rata(es_teh_values))\n",
        "print(\"Rata-rata kopi:\", rata_rata(kopi_values))\n",
        "\n",
        "hari_tertinggi = max(DATA, key=total_minuman)\n",
        "print(\"Hari total tertinggi:\", hari_tertinggi[\"tanggal\"], total_minuman(hari_tertinggi))\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 9. Filter: cuaca panas vs hujan\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "es_teh_panas = []\n",
        "kopi_hujan = []\n",
        "\n",
        "for baris in DATA:\n",
        "    if baris[\"cuaca\"] == \"panas\":\n",
        "        es_teh_panas.append(baris[\"es_teh\"])\n",
        "    if baris[\"cuaca\"] == \"hujan\":\n",
        "        kopi_hujan.append(baris[\"kopi\"])\n",
        "\n",
        "print(\"Es teh saat panas:\", es_teh_panas)\n",
        "print(\"Rata-rata es teh saat panas:\", rata_rata(es_teh_panas))\n",
        "print(\"Kopi saat hujan:\", kopi_hujan)\n",
        "print(\"Rata-rata kopi saat hujan:\", rata_rata(kopi_hujan))\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 10. Baseline: prediksi sederhana\n",
        "\n",
        "Baseline pertama: prediksi besok = rata-rata historis.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "baseline_es_teh = round(rata_rata(es_teh_values))\n",
        "baseline_kopi = round(rata_rata(kopi_values))\n",
        "\n",
        "print(\"Baseline es teh besok:\", baseline_es_teh, \"gelas\")\n",
        "print(\"Baseline kopi besok:\", baseline_kopi, \"gelas\")\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 11. Baseline alternatif: hari terakhir\n",
        "\n",
        "Baseline kedua: prediksi besok = nilai hari terakhir.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "last_day = DATA[-1]\n",
        "print(\"Tanggal terakhir:\", last_day[\"tanggal\"])\n",
        "print(\"Prediksi es teh berdasarkan hari terakhir:\", last_day[\"es_teh\"])\n",
        "print(\"Prediksi kopi berdasarkan hari terakhir:\", last_day[\"kopi\"])\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 12. Challenge 1 — tambahkan data baru\n",
        "\n",
        "Tambahkan dua baris, lalu bandingkan rata-rata lama dan baru.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "DATA_BARU = DATA + [\n",
        "    {\"tanggal\": \"2026-01-08\", \"cuaca\": \"panas\", \"hari\": \"kerja\", \"es_teh\": 40, \"kopi\": 19},\n",
        "    {\"tanggal\": \"2026-01-09\", \"cuaca\": \"hujan\", \"hari\": \"kerja\", \"es_teh\": 17, \"kopi\": 36},\n",
        "]\n",
        "\n",
        "rata_lama = rata_rata([baris[\"es_teh\"] for baris in DATA])\n",
        "rata_baru = rata_rata([baris[\"es_teh\"] for baris in DATA_BARU])\n",
        "print(\"Rata-rata es teh lama:\", rata_lama)\n",
        "print(\"Rata-rata es teh baru:\", rata_baru)\n",
        "print(\"Perubahan:\", rata_baru - rata_lama)\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 13. Challenge 2 — fungsi ringkasan lengkap\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "def ringkasan(rows):\n",
        "    es_teh = [row[\"es_teh\"] for row in rows]\n",
        "    kopi = [row[\"kopi\"] for row in rows]\n",
        "    terbaik = max(rows, key=total_minuman)\n",
        "    return {\n",
        "        \"jumlah_baris\": len(rows),\n",
        "        \"rata_es_teh\": rata_rata(es_teh),\n",
        "        \"rata_kopi\": rata_rata(kopi),\n",
        "        \"tanggal_terbaik\": terbaik[\"tanggal\"],\n",
        "        \"total_terbaik\": total_minuman(terbaik),\n",
        "    }\n",
        "\n",
        "ringkasan(DATA_BARU)\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 14. Catatan run\n",
        "\n",
        "Isi manual setelah menjalankan notebook:\n",
        "\n",
        "- Platform: lokal / VS Code / Colab / Kaggle\n",
        "- Waktu run:\n",
        "- Versi Python:\n",
        "- Perubahan data:\n",
        "- Hasil baseline:\n",
        "- Catatan error:\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "print(\"Checklist akhir:\")\n",
        "print(\"1. Semua sel sudah dijalankan dari atas? [ ]\")\n",
        "print(\"2. Tidak ada error? [ ]\")\n",
        "print(\"3. Hasil baseline dicatat? [ ]\")\n",
        "print(\"4. Jika di Colab/Kaggle, salinan sudah disimpan? [ ]\")\n"
      ]
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "name": "python",
      "pygments_lexer": "ipython3"
    },
    "colab": {
      "name": "python_data_lab.ipynb",
      "provenance": []
    }
  },
  "nbformat": 4,
  "nbformat_minor": 5
}