Lewati ke konten utama

Cara Mengimpor Data JSON dan HTML ke dalam pandas

Untuk menjadi data scientist yang andal, seseorang harus tahu cara menangani berbagai jenis data. Pelajari membaca berbagai format data seperti JSON dan HTML menggunakan pandas.
Diperbarui 28 Sep 2026  · 13 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

Pendahuluan

Mengimpor data adalah salah satu langkah paling penting dan paling awal dalam setiap permasalahan terkait data. Kemampuan untuk mengimpor data dengan benar adalah keterampilan yang wajib dimiliki setiap calon data scientist.

Data hadir dalam berbagai bentuk, dan Anda tidak hanya perlu tahu cara mengimpor beragam format data, tetapi juga cara menganalisis dan memanipulasinya untuk memperoleh wawasan yang bermanfaat.

pandas adalah pustaka Python open source yang mudah digunakan, berkinerja tinggi, dan merupakan alat analisis data untuk berbagai format data.

Perangkat ini memberi Anda kemampuan untuk membaca berbagai jenis format data seperti CSV, JSON, Excel, Pickle, dan lain-lain. Ini memungkinkan Anda merepresentasikan data dalam bentuk tabel baris dan kolom, sehingga data mudah dibaca dan disajikan.

pandas merepresentasikan data dalam bentuk DataFrame dan menyediakan penggunaan yang ekstensif untuk analisis serta manipulasi data. Setelah Anda mulai memahami data dengan berbagai fungsionalitas di pandas, Anda dapat menggunakan data ini untuk analisis, peramalan, klasifikasi, dan banyak lagi!

pandas memiliki API input dan output yang berisi sekumpulan fungsi tingkat-atas reader dan writer. Fungsi reader diakses dengan pandas.read_json() yang mengembalikan objek pandas, dan fungsi writer diakses dengan pandas.to_json() yang merupakan metode objek.

DataFrame memiliki fungsi Reader dan Writer. Fungsi Reader memungkinkan Anda membaca berbagai format data, sementara fungsi Writer memungkinkan Anda menyimpan data dalam format tertentu.

Di bawah ini adalah format data yang didukung DataFrame, yang berarti jika data Anda berada dalam salah satu bentuk di bawah ini, Anda dapat menggunakan pandas untuk memuat format tersebut dan bahkan menulis ke format tertentu.

Dalam tutorial hari ini, Anda akan bekerja dengan beberapa jenis format di atas seperti JSON, HTML, dan Pickle.

Catatan: Lihat tutorial ini untuk mempelajari cara membaca berkas CSV menggunakan pandas.

Memuat Data JSON

JSON, atau JavaScript Object Notation, adalah format serialisasi teks untuk pertukaran data. JSON mudah dibaca dan ditulis. Ini berbasis pada subset dari Bahasa Pemrograman JavaScript tetapi menggunakan konvensi dari Python, dan banyak bahasa lain di luar Python.

JSON paling sering digunakan untuk menyimpan data tidak terstruktur, dan basis data SQL kesulitan menyimpannya. JSON membuat data dapat diakses untuk dibaca oleh mesin.

JSON terutama dibangun di atas dua struktur:

  • Koleksi pasangan kunci/nilai. Dalam Python, pasangan kunci/nilai disebut Dictionary, dan sebuah key adalah atribut unik, sedangkan nilai tidak harus unik.

  • Daftar nilai yang terurut. Daftar terurut kadang-kadang bisa berupa daftar berisi daftar. List di Python adalah sekumpulan nilai yang bisa berupa string, integer, dan sebagainya.

Sekarang mari kita lihat bagaimana Anda dapat memuat data JSON dengan berbagai cara.

Dataset JSON pertama berasal dari tautan ini. Datanya berada dalam format kamus kunci-nilai. Total ada tiga kunci: yaitu integer, datetime, dan category.

  • Pertama, Anda akan mengimpor pustaka pandas lalu meneruskan URL ke pd.read_json() yang akan mengembalikan sebuah dataframe. Kolom-kolom dataframe mewakili kunci, dan barisnya adalah nilai dari JSON.
import pandas as pd

json = pd.read_json('https://raw.githubusercontent.com/chrisalbon/simulated_datasets/master/data.json')

Mari cepat-cepat mencetak beberapa baris terakhir dari JSON yang Anda baca menggunakan fungsi .tail().

json.tail(6)
  integer datetime category
94 5 2015-01-01 00:01:34 0
95 9 2015-01-01 00:01:35 0
96 8 2015-01-01 00:01:36 0
97 6 2015-01-01 00:01:37 0
98 8 2015-01-01 00:01:38 0
99 1 2015-01-01 00:01:39 0
json.shape
(100, 3)

Dari keluaran di atas, Anda dapat melihat bahwa ada total tiga kolom: integer, datetime, dan category. Selain itu, terdapat 100 sampel dalam dataset seperti yang diverifikasi dari metode .shape yang mengembalikan keluaran 100 x 3.

  • Menulis JSON

Menulis data JSON semudah membacanya dan hanya satu baris kode. Alih-alih read_json() Anda akan menggunakan to_json() dengan nama berkas dan selesai!

json.to_json('dataframe.json')
  • Mengurai JSON Bersarang sebagai String

Selanjutnya, Anda akan menggunakan jenis dataset JSON lain yang tidak sesederhana itu. Ini adalah struktur nested JSON (JSON bersarang). Struktur JSON bersarang berarti setiap key dapat memiliki lebih banyak key yang terkait dengannya.

Mari lihat contoh dataset untuk memahaminya lebih baik.

nested_json = """{
   "article": [

      {
         "id":"01",
         "language": "JSON",
         "edition": "first",
         "author": "Allen"
      },

      {
         "id":"02",
         "language": "Python",
         "edition": "second",
         "author": "Aditya Sharma"
      }
   ],

   "blog":[
   {
       "name": "Datacamp",
       "URL":"datacamp.com"
   }
   ]
}"""

Pada dataset di atas, Anda dapat mengamati bahwa article dan blog adalah dua kunci utama yang di bawahnya terdapat nilai dari kunci-kunci tersebut. Nilai-nilai ini memiliki kombinasi key-value masing-masing.

Perhatikan bahwa dataset di atas diapit dengan tanda kutip ganda dan berbentuk string.

Membaca JSON bersarang dapat dilakukan dengan beberapa cara.

Pertama, Anda akan menggunakan fungsi json.loads untuk membaca string JSON dengan meneruskan variabel data sebagai parameternya. Lalu, Anda akan menggunakan fungsi json_normalize untuk meratakan data JSON bersarang menjadi sebuah tabel.

Anda akan mengimpor fungsi json_normalize dari pustaka pandas.io.json.

import json  
from pandas.io.json import json_normalize  

nested = json.loads(nested_json)
nested
{'article': [{'id': '01',
   'language': 'JSON',
   'edition': 'first',
   'author': 'Allen'},
  {'id': '02',
   'language': 'Python',
   'edition': 'second',
   'author': 'Aditya Sharma'}],
 'blog': [{'name': 'Datacamp', 'URL': 'datacamp.com'}]}

Selanjutnya, Anda akan meratakan JSON menggunakan fungsi normalize. Untuk saat ini Anda akan meneruskan seluruh data dan melihat tampilannya.

nested_full = json_normalize(nested)
nested_full
  article blog
0 [{'id': '01', 'language': 'JSON', 'edition': '... [{'name': 'Datacamp', 'URL': 'datacamp.com'}]

Bagus! Seperti yang Anda lihat dari keluaran di atas, kunci utama menjadi kolom dataframe sementara kunci lainnya mewakili baris.

Namun, keluarannya terlihat agak berantakan, bukan? Mari lihat bagaimana Anda bisa membaginya lebih lanjut ke beberapa dataframe.

Anda akan kembali meneruskan keluaran json.loads ke json_normalize tetapi kali ini Anda akan menentukan elemen tambahan bernama record_path.

blog = json_normalize(nested,record_path ='blog')
blog
  URL name
0 datacamp.com Datacamp
article = json_normalize(nested,record_path ='article')
article
  author edition id language
0 Allen first 01 JSON
1 Aditya Sharma second 02 Python

Dari keluaran di atas, Anda dapat melihat bahwa kunci utama kini terbagi menjadi dua dataframe berbeda di mana nama kolom sekarang menjadi kunci yang bersarang di dalam kunci utama sebagai pasangan kunci-nilai. Keren, bukan?

Terakhir, untuk menutup bagian pemuatan data JSON, mari cepat cari tahu bagaimana Anda dapat membaca JSON sebagai berkas dan bukan sebagai string.

  • Membaca JSON sebagai Berkas
nested_json = {
   "article": [

      {
         "id":"01",
         "language": "JSON",
         "edition": "first",
         "author": "Allen"
      },

      {
         "id":"02",
         "language": "Python",
         "edition": "second",
         "author": "Aditya Sharma"
      }
   ],

   "blog":[
   {
       "name": "Datacamp",
       "URL":"datacamp.com"
   }
   ]
}

Jika Anda perhatikan pada sel di atas, tidak ada tanda kutip ganda di awal dan akhir data, yang berarti Anda akan memperlakukan data ini sebagai berkas dan membacanya.

Anda dapat melakukannya hanya dengan satu baris kode. Mari cari tahu caranya!

json_file = pd.DataFrame.from_dict(json_normalize(nested_json))
json_file
  article blog
0 [{'id': '01', 'language': 'JSON', 'edition': '... [{'name': 'Datacamp', 'URL': 'datacamp.com'}]

Dari keluaran di atas, Anda dapat melihat bahwa hasilnya mirip saat Anda membaca JSON sebagai string. Satu-satunya perbedaan di sini adalah Anda menggunakan pandas untuk sekaligus mengurai dan meratakan JSON. Karena JSON adalah sebuah dictionary, Anda menggunakan fungsi .from_dict().

Memuat Data HTML

HTML adalah Hypertext Markup Language yang terutama digunakan untuk membuat aplikasi dan halaman web. HTML berupaya menjelaskan struktur halaman web secara semantik. Peramban web menerima dokumen HTML dari server web dan merendernya menjadi halaman web multimedia.

Untuk aplikasi web, HTML digunakan bersama cascading style sheets (CSS) sementara di sisi server HTML berkolaborasi dengan berbagai kerangka kerja server web seperti Flask, Django, dan lain-lain.

HTML menggunakan tag untuk mendefinisikan setiap blok kode seperti tag <p></p> untuk awal dan akhir paragraf, tag <image></image> untuk menambahkan konten ke halaman web sebagai gambar, dan serupa ada banyak tag yang bersama-sama menyusun halaman web HTML.

Untuk membaca berkas HTML, dataframe pandas mencari sebuah tag. Tag tersebut adalah tag <td></td>. Tag ini digunakan untuk mendefinisikan tabel dalam HTML.

pandas menggunakan read_html() untuk membaca dokumen HTML.

Jadi, kapan pun Anda meneruskan HTML ke pandas dan berharap ia menghasilkan dataframe yang rapi, pastikan halaman HTML tersebut memiliki tabel di dalamnya!

  • Tentang Data: Anda akan menggunakan situs Cryptocurrency sebagai dataset HTML yang memuat berbagai koin kripto dan beragam detail tentang masing-masing koin seperti:
    • Harga terakhir koin (Last price)
    • Apakah harga koin naik atau turun (dalam persentase %)
    • Volume 24 jam (berapa banyak koin yang diperdagangkan 24 volume)
    • Jumlah total koin (# Coins)

Baik, mari mulai!

Pertama Anda akan mengimpor pustaka requests yang akan membantu Anda mengirim permintaan ke URL tempat Anda ingin mengambil konten HTML.

import requests
url = 'https://www.worldcoinindex.com/'
crypto_url = requests.get(url)
crypto_url
<Response [200]>

Sejauh ini, Anda telah mendefinisikan URL lalu menggunakan requests.get() Anda mengirim permintaan ke URL tersebut dan menerima respons berupa acknowledgement [200] OK yang berarti Anda berhasil terhubung dengan server web itu.

Sekarang, untuk membaca konten halaman web HTML, yang perlu Anda lakukan adalah memanggil crypto_url.text yang akan memberi Anda kode HTML dari halaman web cryptocurrency tersebut.

Silakan jalankan perintah crypto_url.text untuk melihat keluarannya.

Terakhir, Anda akan meneruskan crypto_url.text ke fungsi pd.read_html() yang akan mengembalikan daftar dataframe di mana setiap elemen dalam daftar tersebut adalah tabel (dataframe) yang dimiliki halaman web cryptocurrency.

crypto_data = pd.read_html(crypto_url.text)

Mari cetak panjang dan tipe dari dataframe. type seharusnya berupa list.

len(crypto_data), type(crypto_data)
(1, list)

Dari keluaran di atas, jelas bahwa hanya ada 1 tabel dengan tipe list.

crypto_data = crypto_data[0]

Mari hapus kolom pertama dan kedua karena tidak memiliki informasi yang berguna dan pertahankan semua baris.

crypto_final = crypto_data.iloc[:,2:]

Akhirnya, saatnya mencetak dataframe cryptocurrency!

crypto_final.head()
  Name Ticker Last price % 24 high 24 low Price Charts 7d 24 volume # Coins Market cap
0 bitcoin BTC $ 8,008.027 +1.83% $ 8,056.630 $ 7,812.784 NaN $ 12.04B 17.71M $ 141.89B
1 ethereum ETH $ 251.72335 +2.68% $ 253.84721 $ 242.95687 NaN $ 6.93B 106.20M $ 26.73B
2 litecoin LTC $ 98.633851 +11.08% $ 99.946324 $ 88.618815 NaN $ 3.46B 61.91M $ 6.10B
3 bitcoincash BCH $ 411.94075 +2.31% $ 418.60850 $ 394.18927 NaN $ 2.10B 17.79M $ 7.33B
4 eos EOS $ 6.4230717 +6.05% $ 6.4765695 $ 6.0264079 NaN $ 2.06B 1.01B $ 6.50B

Dari tabel di atas, Anda dapat melihat bahwa Bitcoin memiliki Market Cap terbesar.

Menghapus NaN (Not a Number)

Ada beberapa nilai dalam dataframe yang bukan nilai sebenarnya, jadi mari cepat kita hapus dari tabel.

Namun, pertama-tama, mari hapus (delete) kolom Price Charts 7d sepenuhnya karena seluruhnya NaN dan tidak berisi informasi apa pun.

del crypto_final['Price Charts 7d']
crypto_final.head()
  Name Ticker Last price % 24 high 24 low 24 volume # Coins Market cap
0 bitcoin BTC $ 8,008.027 +1.83% $ 8,056.630 $ 7,812.784 $ 12.04B 17.71M $ 141.89B
1 ethereum ETH $ 251.72335 +2.68% $ 253.84721 $ 242.95687 $ 6.93B 106.20M $ 26.73B
2 litecoin LTC $ 98.633851 +11.08% $ 99.946324 $ 88.618815 $ 3.46B 61.91M $ 6.10B
3 bitcoincash BCH $ 411.94075 +2.31% $ 418.60850 $ 394.18927 $ 2.10B 17.79M $ 7.33B
4 eos EOS $ 6.4230717 +6.05% $ 6.4765695 $ 6.0264079 $ 2.06B 1.01B $ 6.50B

Sekarang mari kita hapus NaN.

crypto_final = crypto_final.dropna()

Memvisualisasikan Koin Kripto (Ticker) vs. Persentase Kenaikan/Penurunan Harga (%)

Pertama, mari impor matplotlib untuk membuat grafik.

import matplotlib.pyplot as plt
%matplotlib inline

Kolom % bertipe string, dan Anda perlu mengonversi tipe string tersebut ke float. Pertama, Anda akan menghapus tanda % dari kolom lalu mengonversi tipe kolom % menjadi float.

crypto_final['%'] = crypto_final['%'].apply(lambda x: x.strip('%'))
crypto_final['%'] = crypto_final['%'].astype('float')

Sekarang mari kita plot datanya.

plt.figure()
plt.figure(figsize=(16,10))
x = crypto_final.iloc[:20]['Ticker']
y = crypto_final.iloc[:20]['%']
plt.xticks(fontsize=12)
plt.yticks(fontsize=14)
plt.xlabel('Percentage Increase/Decrease in Price',fontsize=20)
plt.ylabel('Ticker',fontsize=20)

plt.plot(x,y,label='% Increase/Decrease in Price')
plt.legend(loc='lower left',prop={'size': 15})
<matplotlib.legend.Legend at 0x1298a9630>

<Figure size 432x288 with 0 Axes>

Dari grafik di atas, Anda dapat melihat bahwa Litecoin (LTC) dan Huobitoken (HT) mengalami kenaikan harga terbesar dan di sisi lain, Maticnetwork (MATIC) dan Waves mengalami penurunan harga terbesar di antara koin kripto.

Memuat Data Pickle

Pickle adalah format serialisasi biner khusus Python yang tidak dapat dibaca manusia, berbeda dengan JSON. Ini digunakan untuk melakukan serialisasi dan deserialisasi struktur objek Python. Pickle men-serialisasi objek dan menyimpannya ke disk. Ia mengonversi objek seperti DataFrame, list, dictionary, dan lain-lain menjadi aliran karakter.

Bagian terbaik dari Pickle adalah dapat menyimpan berbagai jenis tipe data Python.

Pickle banyak digunakan untuk menyimpan instance algoritma pembelajaran mesin yang telah dilatih. Seperti JSON, Pickle juga memiliki fungsi praktis seperti pickle.load() untuk memuat berkas berformat Pickle, dan pickle.dump() untuk menyimpan berkas Pickle atau format lain ke dalam format Pickle.

Keunggulan lain menggunakan Pickle adalah bahwa Menyimpan dataframe sebagai berkas Pickle membutuhkan ruang disk lebih sedikit dan menjaga tipe data tetap utuh saat dimuat kembali.

Jadi, mari kita cepat-cepat pickle dataframe cryptocurrency yang Anda buat sebelumnya, lalu Anda akan membaca objek yang sudah dipickle tersebut menggunakan pandas.

import pickle

Anda akan menggunakan pickle.dump untuk menyimpan dataframe sebagai objek Pickle dan menggunakan protocol HIGHEST_PROTOCOL, yang juga kompatibel mundur dengan Python 2.

with open('crypto_final.pickle', 'wb') as sub_data:
    pickle.dump(crypto_final, sub_data, protocol=pickle.HIGHEST_PROTOCOL)

Terakhir, Anda akan menggunakan fungsi pandas read_pickle untuk mengonversi objek pickle menjadi sebuah dataframe.

crypto_final = pd.read_pickle('crypto_final.pickle')
crypto_final.head()
  Name Ticker Last price % 24 high 24 low 24 volume # Coins Market cap
0 bitcoin BTC $ 7,776.567 +1.81% $ 7,870.205 $ 7,506.518 $ 12.70B 17.71M $ 137.78B
1 ethereum ETH $ 241.81372 -0.97% $ 245.57293 $ 232.62523 $ 7.47B 106.18M $ 25.67B
2 litecoin LTC $ 88.062811 +0.33% $ 88.946501 $ 85.248641 $ 2.59B 61.90M $ 5.45B
3 bitcoincash BCH $ 388.76089 +0.06% $ 398.27697 $ 370.29831 $ 2.33B 17.79M $ 6.91B
4 eos EOS $ 5.9327948 -0.41% $ 6.0163442 $ 5.7789154 $ 1.99B 1.01B $ 6.00B

Wah! Bukankah itu luar biasa? Betapa sederhananya. Selain itu, dengan Pickle, Anda tidak perlu khawatir tentang kesalahan konversi tipe data karena serialisasi pickle dapat menanganinya untuk Anda!

Lanjutkan

Selamat telah menyelesaikan tutorial ini.

Tutorial ini menjadi titik awal yang baik tentang cara Anda dapat memuat berbagai format data di Python dengan bantuan pandas.

Masih banyak format data seperti Excel, SQL, HDF5, dan lain-lain, yang masuk dalam payung impor data pandas. Anda sebaiknya mulai bereksperimen dengan menemukan beberapa dataset publik menarik dalam format-format ini dan coba bereksperimen dengannya.

Jika Anda ingin mempelajari lebih lanjut tentang DataFrame di pandas, ikuti kursus interaktif DataCamp data manipulation with pandas. DataCamp juga memiliki beberapa tutorial pandas bermanfaat lainnya yang membahas menggabungkan dataframe, menerapkan moving averages dan menggunakan metode apply. Atau, jika Anda benar-benar baru di pandas, mulailah dengan panduan pemula pandas ini. 

Referensi:

Jangan ragu untuk mengajukan pertanyaan apa pun terkait tutorial ini di kolom komentar di bawah.

Topik
Python

Pelajari lebih lanjut tentang Python dan pandas

Kursus

Menggabungkan Data dengan Pandas untuk Pengguna Spreadsheet

4 jam
4.5K
Pelajari cara menggabungkan dataset dalam format tabel secara efektif dan efisien menggunakan perpustakaan Python Pandas.
Lihat DetailRight Arrow
Mulai Kursus
Lihat SelengkapnyaRight Arrow
Terkait

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat SelengkapnyaLihat Selengkapnya