Bekerja dengan JSON bertingkat

Pemasukan Data yang Efisien dengan pandas

Amany Mahfouz

Instructor

JSON bertingkat

  • JSON berisi objek dengan pasangan atribut-nilai
  • JSON bertingkat saat nilainya sendiri berupa objek
Pemasukan Data yang Efisien dengan pandas

Contoh respons JSON dari dokumentasi Yelp Business API

Pemasukan Data yang Efisien dengan pandas

Contoh respons Yelp, dengan data koordinat dan lokasi bertingkat disorot

Pemasukan Data yang Efisien dengan pandas

Contoh respons Yelp, dengan data kategori bertingkat disorot

Pemasukan Data yang Efisien dengan pandas

Contoh respons Yelp, menyorot rekaman bertingkat di bawah businesses

Pemasukan Data yang Efisien dengan pandas
# Print columns containing nested data
print(bookstores[["categories", "coordinates", "location"]].head(3))
                                          categories  \
0   [{'alias': 'bookstores', 'title': 'Bookstores'}]   
1  [{'alias': 'bookstores', 'title': 'Bookstores'...   
2   [{'alias': 'bookstores', 'title': 'Bookstores'}]     

                                         coordinates  \
0  {'latitude': 37.7975997924805, 'longitude': -1...   
1  {'latitude': 37.7885846793652, 'longitude': -1...   
2  {'latitude': 37.7589836120605, 'longitude': -1...    

                                            location  
0  {'address1': '261 Columbus Ave', 'address2': '...  
1  {'address1': '50 2nd St', 'address2': '', 'add...  
2  {'address1': '866 Valencia St', 'address2': ''...
Pemasukan Data yang Efisien dengan pandas

pandas.io.json

  • Submodul pandas.io.json memiliki alat untuk membaca/menulis JSON
    • Butuh pernyataan import tersendiri
  • json_normalize()
    • Menerima dict/daftar dict (seperti pd.DataFrame())
    • Mengembalikan dataframe yang diratakan
    • Pola nama kolom default: attribute.nestedattribute
    • Ganti pemisah dengan argumen sep
Pemasukan Data yang Efisien dengan pandas

Memuat Data JSON Bertingkat

import pandas as pd
import requests

from pandas.io.json import json_normalize
# Set up headers, parameters, and API endpoint api_url = "https://api.yelp.com/v3/businesses/search" headers = {"Authorization": "Bearer {}".format(api_key)} params = {"term": "bookstore", "location": "San Francisco"}
# Make the API call and extract the JSON data response = requests.get(api_url, headers=headers, params=params) data = response.json()
Pemasukan Data yang Efisien dengan pandas
# Flatten data and load to dataframe, with _ separators
bookstores = json_normalize(data["businesses"], sep="_")
print(list(bookstores))
['alias', 
 'categories',
 'coordinates_latitude',
 'coordinates_longitude',
 ...
 'location_address1',
 'location_address2',
 'location_address3',
 'location_city',
 'location_country',
 'location_display_address',
 'location_state',
 'location_zip_code',
 ...
 'url']
Pemasukan Data yang Efisien dengan pandas

Data Bertingkat Dalam

print(bookstores.categories.head())
0     [{'alias': 'bookstores', 'title': 'Bookstores'}]
1    [{'alias': 'bookstores', 'title': 'Bookstores'...
2     [{'alias': 'bookstores', 'title': 'Bookstores'}]
3     [{'alias': 'bookstores', 'title': 'Bookstores'}]
4    [{'alias': 'bookstores', 'title': 'Bookstores'...
Name: categories, dtype: object
Pemasukan Data yang Efisien dengan pandas

Data Bertingkat Dalam

  • json_normalize()
    • record_path: string/daftar string untuk data bertingkat
    • meta: daftar atribut lain untuk dimuat ke dataframe
    • meta_prefix: string awalan untuk nama kolom meta
Pemasukan Data yang Efisien dengan pandas

Data Bertingkat Dalam

# Flatten categories data, bring in business details
df = json_normalize(data["businesses"],
                    sep="_",

record_path="categories",
meta=["name", "alias", "rating", ["coordinates", "latitude"], ["coordinates", "longitude"]],
meta_prefix="biz_")
Pemasukan Data yang Efisien dengan pandas
print(df.head(4))
        alias               title                biz_name  \
0  bookstores          Bookstores   City Lights Bookstore   
1  bookstores          Bookstores  Alexander Book Company   
2  stationery  Cards & Stationery  Alexander Book Company   
3  bookstores          Bookstores       Borderlands Books   

                              biz_alias  biz_rating  biz_coordinates_latitude  \
0   city-lights-bookstore-san-francisco         4.5                 37.797600   
1  alexander-book-company-san-francisco         4.5                 37.788585   
2  alexander-book-company-san-francisco         4.5                 37.788585   
3       borderlands-books-san-francisco         5.0                 37.758984   

   biz_coordinates_longitude  
0                -122.406578  
1                -122.400631  
2                -122.400631  
3                -122.421638
Pemasukan Data yang Efisien dengan pandas

Ayo berlatih!

Pemasukan Data yang Efisien dengan pandas

Preparing Video For Download...