Dataset publik — harga pangan harian, kurs mata uang, arsip data pemerintah, hingga file latihan di repositori GitHub — sering kali bisa diunduh langsung melalui URL. Alur manual — unduh lewat browser, simpan, lalu baca filenya — bekerja, tetapi rapuh: nama file bisa berubah dan langkah unduhan tidak terekam di kode. Fungsi pembaca data pandas seperti read_csv() dan read_json() menerima URL sebagai argumen pertama, persis seperti path file. Chapter ini membahas pola pemakaian URL, membuktikannya dengan server HTTP lokal agar contoh tetap runnable tanpa internet, lalu menutup dengan strategi menghadapi masalah jaringan.

Argumen URL pada Fungsi Pembaca Data #

Seluruh fungsi pembaca yang sudah kita pelajari — read_csv(), read_json(), read_excel(), read_html(), hingga read_parquet() — menerima URL http:// atau https:// pada argumen sumber data. Pola pemakaiannya selalu sama:

python
df = pd.read_csv("https://example.com/data/penjualan-2026.csv")

example.com adalah domain khusus untuk contoh dokumentasi; ganti alamatnya dengan URL dataset kita. Di balik layar, pandas (melalui library fsspec) melakukan permintaan HTTP, mengunduh isi URL, lalu mem-parse-nya dengan mesin yang sama seperti ketika membaca file lokal. Konsekuensinya, semua parameter parsing yang sudah dipelajari — sep, usecols, dtype, na_values, parse_dates — berlaku penuh untuk data dari URL. Rincian perilaku tiap fungsi pembaca dapat ditelusuri pada dokumentasi pandas.read_csv dan halaman IO Tools .

Demo Tanpa Jaringan: Server HTTP Lokal #

Contoh pada Course ini harus bisa dijalankan tanpa jaringan, padahal inti chapter ini justru mengakses data lewat HTTP. Solusinya: skrip menjalankan server HTTP mini yang melayani satu file CSV dari folder sementara pada alamat loopback 127.0.0.1. pd.read_csv() kemudian mengambil data lewat URL http:// sungguhan, sehingga alur permintaan hingga parsing sama seperti saat mengakses internet.

python
import tempfile
import threading
from functools import partial
from http.server import HTTPServer, SimpleHTTPRequestHandler
from pathlib import Path

import pandas as pd

isi_csv = """produk,harga,stok
Kopi Gayo,85000,12
Teh Melati,32000,30
Gula Aren,24000,25
"""


class HandlerSenyap(SimpleHTTPRequestHandler):
    def log_message(self, format, *args):
        pass


with tempfile.TemporaryDirectory() as folder:
    (Path(folder) / "stok.csv").write_text(isi_csv, encoding="utf-8")

    handler = partial(HandlerSenyap, directory=folder)
    server = HTTPServer(("127.0.0.1", 0), handler)
    port = server.server_address[1]
    worker = threading.Thread(target=server.serve_forever, daemon=True)
    worker.start()

    df = pd.read_csv(f"http://127.0.0.1:{port}/stok.csv")
    print(df)
    print()
    print(df.dtypes)

    server.shutdown()
    server.server_close()

Output yang Dihasilkan:

text
       produk  harga  stok
0   Kopi Gayo  85000    12
1  Teh Melati  32000    30
2   Gula Aren  24000    25

produk      str
harga     int64
stok      int64
dtype: object

Baris demi baris, inilah yang terjadi:

  1. Baris 9-13 (isi_csv): isi CSV yang akan disajikan oleh server sebagai sumber data latihan.
  2. Baris 16-18 (class HandlerSenyap): subclass SimpleHTTPRequestHandler yang menonaktifkan log akses supaya stdout skrip tetap bersih.
  3. Baris 21-22 (TemporaryDirectory): folder sementara dibuat dan diisi stok.csv; Python menghapus folder itu otomatis ketika blok with selesai.
  4. Baris 24-28: HTTPServer(("127.0.0.1", 0)) membuat server pada alamat loopback; argumen port 0 meminta sistem operasi memilih port bebas, lalu serve_forever() dijalankan di thread terpisah agar skrip utama bisa berlanjut.
  5. Baris 30 (df = pd.read_csv(...)): pandas mengirim permintaan GET ke server lokal, menerima isi CSV, dan mem-parse-nya menjadi DataFrame.
  6. Baris 35-36 (server.shutdown() dan server.server_close()): server dimatikan sehingga tidak ada port tertinggal terbuka.

Contoh dengan URL Nyata #

Blok berikut mengambil file titanic.csv dari repositori resmi pandas di GitHub — dataset klasik yang juga dipakai dokumentasinya. Blok ini ditandai needs-server="true" karena butuh koneksi internet, sehingga tidak dijalankan otomatis dan tidak memiliki blok output. Jalankan file tersebut di komputer yang tersambung internet untuk melihat hasilnya.

python
import pandas as pd

url = "https://raw.githubusercontent.com/pandas-dev/pandas/main/doc/data/titanic.csv"

df = pd.read_csv(url)
print("Bentuk data:", df.shape)
print(df.head(3))

Perhatikan baris 5 pada file di atas: panggilan pd.read_csv(url) tidak berbeda dengan pembacaan file lokal. Perbedaan hanya ada pada sumber data, bukan pada mesin parsing, sehingga DataFrame hasilnya memiliki struktur yang sama — kolom, tipe data, dan index dari isi CSV.

Strategi Menangani Ketergantungan Jaringan #

Membaca data langsung dari URL membuat kode lebih singkat, tetapi menambah satu titik kegagalan: jaringan. Empat kebiasaan berikut menjaga script analisis tetap andal:

  • Tangani error secara eksplisit. Bungkus panggilan dengan try/except dan tampilkan pesan yang jelas ketika server tidak merespons, alih-alih membiarkan traceback mentah.
  • Buat cache lokal. Setelah unduhan pertama, simpan salinan data (misalnya CSV atau Parquet) dan baca file cache itu pada eksekusi berikutnya.
  • Kunci versi data. URL yang menunjuk branch main bisa berubah isinya tanpa pemberitahuan; pilih URL versi atau tag tertentu bila penyedianya menyediakan.
  • Simpan snapshot untuk laporan penting. Analisis yang hasilnya dilaporkan ke orang lain sebaiknya berjalan di atas salinan yang tidak berubah.

Setelah file lokal dan alamat web, sumber data berikutnya yang wajib dikuasai adalah database. Chapter berikutnya memperkenalkan read_sql() untuk menarik hasil query dari database menjadi DataFrame, dengan SQLAlchemy sebagai jembatannya.