Analisis yang berangkat dari pertanyaan yang jelas berakhir pada jawaban yang dapat diperiksa. Topik ini menuntaskan proyek analisis perpustakaan dari data bersih hasil pembersihan, dimulai dari pernyataan pertanyaan, eksplorasi singkat (exploratory data analysis, EDA), agregasi per bulan dan kategori, sampai grafik akhir yang beranotasi. Setiap langkah menyertakan kode beserta keluaran aslinya, sehingga seluruh proyek dapat diulang dari datanya. Setelah topik ini, alur dari pertanyaan sampai temuan dapat diterapkan pada dataset lain yang sudah bersih.
Pertanyaan analisis dan data bersih#
Setiap proyek analisis dimulai dari satu pertanyaan yang jelas, karena pertanyaan itulah yang menentukan data yang diperlukan, tabel yang dihitung, dan grafik yang digambar. Pertanyaan proyek ini berbunyi: “Kategori buku apa yang paling memadatkan peminjaman, dan kapan puncaknya?” Pertanyaan itu menyebut ukuran yang terukur, yaitu jumlah peminjaman, beserta dua dimensi yang dicari, yaitu kategori dan waktu. Pertanyaan yang lebih kabur, misalnya “bagaimana kondisi peminjaman”, akan menghasilkan analisis yang sama kaburnya.
Data yang menjawabnya berupa berkas peminjaman-bersih.csv hasil pipeline pembersihan, dan berkas itu tersedia di folder topik ini. Kolom yang relevan berupa tanggal_pinjam dan kategori, sedangkan kolom nama, judul, dan lama_hari menjadi konteks tambahan bila dibutuhkan. Pertanyaan juga dibatasi pada data yang tersedia, karena pertanyaan tentang harga buku atau pengarangnya tidak dapat dijawab oleh kolom yang ada.
tanggal_pinjam,nama,kategori,judul,lama_hari
2026-08-04,Ali,Sains,Ensiklopedia Sains,6
2026-08-04,Budi,Sains,Atlas Tubuh Manusia,7
2026-08-19,Budi,Sejarah,Sejarah Kerajaan Nusantara,9
2026-09-02,Citra,Sains,Eksperimen Sederhana,8
2026-09-10,Dewi,Sejarah,Jalur Rempah Nusantara,8
2026-09-23,Dewi,Fiksi,Kumpulan Dongeng Nusantara,12
2026-10-01,Citra,Fiksi,Petualangan di Pulau Tengah,10
2026-10-14,Budi,Fiksi,Cerita Legenda Gunung,11
2026-11-03,Dewi,Sains,Atlas Tubuh Manusia,7
2026-11-12,Citra,Sains,Eksperimen Sederhana,5
2026-11-20,Ali,Sains,Kamus Biologi,10
2026-11-28,Dewi,Sejarah,Sejarah Kerajaan Nusantara,8
2026-12-02,Ali,Fiksi,Cerita Legenda Gunung,8import pandas as pd
pinjam = pd.read_csv("peminjaman-bersih.csv")
pinjam["tanggal_pinjam"] = pd.to_datetime(pinjam["tanggal_pinjam"])
print(pinjam.shape)
print(pinjam["tanggal_pinjam"].min().date(), "sampai", pinjam["tanggal_pinjam"].max().date())
print()
print(pinjam)(13, 5)
2026-08-04 sampai 2026-12-02
tanggal_pinjam nama kategori judul lama_hari
0 2026-08-04 Ali Sains Ensiklopedia Sains 6
1 2026-08-04 Budi Sains Atlas Tubuh Manusia 7
2 2026-08-19 Budi Sejarah Sejarah Kerajaan Nusantara 9
3 2026-09-02 Citra Sains Eksperimen Sederhana 8
4 2026-09-10 Dewi Sejarah Jalur Rempah Nusantara 8
5 2026-09-23 Dewi Fiksi Kumpulan Dongeng Nusantara 12
6 2026-10-01 Citra Fiksi Petualangan di Pulau Tengah 10
7 2026-10-14 Budi Fiksi Cerita Legenda Gunung 11
8 2026-11-03 Dewi Sains Atlas Tubuh Manusia 7
9 2026-11-12 Citra Sains Eksperimen Sederhana 5
10 2026-11-20 Ali Sains Kamus Biologi 10
11 2026-11-28 Dewi Sejarah Sejarah Kerajaan Nusantara 8
12 2026-12-02 Ali Fiksi Cerita Legenda Gunung 8Keluarannya menegaskan 13 catatan peminjaman dari 2026-08-04 sampai 2026-12-02, bersih dari duplikat dan sel kosong. Kolom tanggal diubah kembali menjadi tipe tanggal karena berkas CSV menyimpannya sebagai teks. Ukuran data yang kecil memudahkan pemeriksaan mata, tetapi seluruh langkah tetap dijalankan melalui kode agar dapat diulang pada data yang lebih besar.
Eksplorasi ringkas#
EDA memeriksa bentuk dasar data sebelum grafik akhir dirancang. Dua pemeriksaan eksplorasinya berupa perhitungan jumlah peminjaman per kategori dan ringkasan sebaran lama pinjam, dan keduanya dijawab oleh satu blok berikut.
import pandas as pd
pinjam = pd.read_csv("peminjaman-bersih.csv")
print(pinjam["kategori"].value_counts())
print()
print(pinjam["lama_hari"].describe())kategori
Sains 6
Fiksi 4
Sejarah 3
Name: count, dtype: int64
count 13.000000
mean 8.384615
std 1.980676
min 5.000000
25% 7.000000
50% 8.000000
75% 10.000000
max 12.000000
Name: lama_hari, dtype: float64Kategori Sains unggul dengan enam catatan, disusul Fiksi dengan empat dan Sejarah dengan tiga, sedangkan lama pinjam berkisar 5 sampai 12 hari dengan nilai tengah 8 hari. Angka-angka ini belum menjadi jawaban, karena pertanyaan proyek menuntut dimensi waktu. Eksplorasi ini tetap berguna, yaitu memastikan data cukup beragam untuk dianalisis dan tidak ada keanehan yang tersisa dari pembersihan.
Agregasi per bulan dan kategori#
Pertanyaan proyek menyatukan dua dimensi, sehingga data dirangkum ke dalam tabel silang bulan dan kategori. Fungsi crosstab menghitung frekuensi setiap pasangan bulan dan kategori, lalu total per bulan dijumlahkan untuk menemukan puncaknya. Bulan dinyatakan sebagai angka kalender agar urutannya menaik secara alami.
import pandas as pd
pinjam = pd.read_csv("peminjaman-bersih.csv")
pinjam["tanggal_pinjam"] = pd.to_datetime(pinjam["tanggal_pinjam"])
pinjam["bulan"] = pinjam["tanggal_pinjam"].dt.month
tabel = pd.crosstab(pinjam["bulan"], pinjam["kategori"])
print(tabel)
print()
print("total per bulan:")
print(tabel.sum(axis=1))kategori Fiksi Sains Sejarah
bulan
8 0 2 1
9 1 1 1
10 2 0 0
11 0 3 1
12 1 0 0
total per bulan:
bulan
8 3
9 3
10 2
11 4
12 1
dtype: int64November menjadi bulan dengan total tertinggi, yaitu empat peminjaman, dan tiga di antaranya berasal dari kategori Sains. Sepanjang semester, Sains memimpin dengan enam peminjaman dibandingkan dengan empat pada Fiksi dan tiga pada Sejarah. Tabel inilah bahan langsung grafik akhir, sehingga grafik tidak menghitung ulang apa pun, melainkan menggambar tabel yang sama.
Grafik akhir yang beranotasi#
Grafik akhir menerjemahkan tabel agregasi menjadi satu pesan yang menjawab pertanyaan proyek. Grafik batang berkelompok dipilih karena membandingkan tiga kategori pada setiap bulan sekaligus, sedangkan anotasi menyorot puncak November. Judulnya menyatakan temuan, bukan nama variabelnya.
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import pandas as pd
pinjam = pd.read_csv("peminjaman-bersih.csv")
pinjam["tanggal_pinjam"] = pd.to_datetime(pinjam["tanggal_pinjam"])
pinjam["bulan"] = pinjam["tanggal_pinjam"].dt.month
label_bulan = {8: "Agu", 9: "Sep", 10: "Okt", 11: "Nov", 12: "Des"}
tabel = pd.crosstab(pinjam["bulan"], pinjam["kategori"])
kategori = ["Sains", "Fiksi", "Sejarah"]
warna = {"Sains": "#3b6ea5", "Fiksi": "#e0a458", "Sejarah": "#7aa874"}
posisi = range(len(tabel.index))
lebar = 0.26
fig, ax = plt.subplots()
for i, kat in enumerate(kategori):
ax.bar([p + i * lebar for p in posisi], tabel[kat], width=lebar,
label=kat, color=warna[kat])
ax.set_xticks([p + lebar for p in posisi])
ax.set_xticklabels([label_bulan[b] for b in tabel.index])
ax.set_xlabel("Bulan")
ax.set_ylabel("Jumlah peminjaman")
ax.set_yticks([0, 1, 2, 3, 4])
ax.set_ylim(0, 5)
ax.set_title("Peminjaman memuncak pada November dan dipimpin kategori Sains")
ax.legend(title="Kategori", loc="upper left")
ax.annotate("Puncak November: 4 peminjaman,\n3 di antaranya kategori Sains",
xy=(3 + lebar, 3), xytext=(2.6, 4.05), va="bottom",
arrowprops={"arrowstyle": "->", "color": "dimgray"})
plt.savefig("grafik-akhir.png", dpi=120)
print("Grafik tersimpan: grafik-akhir.png")Grafik tersimpan: grafik-akhir.png
Batas sumbu vertikal ditetapkan 0 sampai 5 dengan garis skala bulat, karena data berupa hitungan yang tidak memiliki nilai pecahan. Anotasi ditempatkan pada ruang kosong bagian atas dengan panah menuju batang Sains November, dan legenda menyebut ketiga kategorinya. Gambar tersimpan sebagai grafik-akhir.png di folder topik ini, siap disisipkan ke laporan atau notebook.
Pilihan bentuknya juga mengikuti pertanyaannya. Grafik garis hanya menampilkan total per bulan dan menyembunyikan komposisi kategorinya, sedangkan grafik batang bertumpuk menyulitkan perbandingan Fiksi dan Sejarah yang nilainya kecil. Batang berkelompok mempertahankan ketiga kategori pada setiap bulan, sehingga puncak November beserta penyumbang utamanya terbaca sekaligus. Apabila pertanyaan proyeknya hanya total peminjaman per bulan, grafik garis sederhana justru menjadi pilihan yang lebih ringkas.
Temuan dan catatan kehati-hatian#
Jawaban atas pertanyaan proyek terbaca dari tabel dan grafik yang sama. Peminjaman memuncak pada November dengan empat catatan, sedangkan kategori Sains paling menonjol sepanjang semester dengan enam dari tiga belas peminjaman, termasuk tiga dari empat peminjaman pada November. Kalimat keputusannya berbunyi: “Pengadaan dan pameran koleksi Sains paling berguna dijadwalkan sebelum November.”
Temuan ini menyertakan batasnya. Data berupa 13 catatan dari satu semester di satu perpustakaan, sehingga polanya layak diperiksa ulang dengan data beberapa tahun sebelum menjadi dasar keputusan pengadaan yang besar. Puncak November juga baru menunjukkan hubungan waktu, bukan sebab, karena kenaikannya dapat dipicu oleh ujian, program perpustakaan, atau faktor lain yang tidak terekam. Ketiga catatan ini ditulis di dekat temuannya, bukan disembunyikan.
Ringkasan#
- Pertanyaan yang jelas menentukan data, tabel, dan grafik yang dibutuhkan proyek analisis.
- EDA memeriksa bentuk dasar data sebelum agregasi, dan tabel silang bulan-kategori menjadi bahan langsung grafik akhir.
- Grafik akhir menyatakan satu temuan lewat judul, anotasi, dan skala sumbu yang sesuai jenis datanya.
- Temuan disertai batas data dan peringatan hubungan-bukan-sebab di dekat temuannya.
Referensi#
- Matplotlib Documentation — Matplotlib
— Dokumentasi resmi matplotlib untuk
bar,annotate, dan pengaturan sumbu yang digunakan oleh grafik akhir. - pandas user guide — Pandas
— Panduan resmi pandas untuk
read_csv,crosstab, dan konversi tanggal yang digunakan sepanjang proyek.