IT/가짜연구소 스터디

[DA] 4-4. Importing JSON Data and Working with APIs

Millennials 2022. 9. 13. 22:59

해당 내용은 Datacamp의 Data engineering track을 정리했습니다.
4. Streamlined Data Ingestion with pandas의 chapter 1에 대한 내용입니다.

1. Introduction to JSON

  • Javascript Object Notation 의 약어로 웹을 통해 데이터를 전송하는 일반적인 형식입니다.
  • 테이블이 아니기에 더 효율적으로 데이터를 저장할 수 있습니다.
  • python의 dict 형식과 같이 key-value 형태 즉 attribute-value 쌍을 가지고 있습니다.
  • JSON은 중첩될 수 있습니다.
    pandas에서는 read_json()를 사용해서 불러올 수 있습니다. orient argument를 줘서 특수한 경우의 json 파일들도 불러올 수 있습니다.
# Load pandas as pd
import pandas as pd

# Load the daily report to a dataframe
pop_in_shelters = pd.read_json("dhs_daily_report.json")

# View summary stats about pop_in_shelters
print(pop_in_shelters.describe())
'''
total_single_adults_in_shelter  
count                        1000.000  
mean                        11472.880  
std                          1113.664  
min                          9610.000  
25%                         10381.750  
50%                         11633.500  
75%                         12437.500  
max                         13270.000 
'''

2. Introduction to APIs

API는 Application Programming Interfaces의 약어로 하나의 어플리케이션이 다른 프로그램과 소통하는 방법을 정의한 것입니다. API를 통해 데이터베이스 구조를 디테일하게 알지 못해도 데이터를 얻을 수 있도록 합니다.


Requests 를 이용해서 API를 알아봅시다.

  • requests.get(url_string) 는 URL에서 데이터를 가져올 때 사용합니다.
  • 여러가지 arguments들이 있습니다.
    • params
    • headers
  • 결과 반환은 response 코드를 사용 합니다.
    • response.json() 데이터만 가지고 오려할 떄 사용합니다.
    • response.json() 은 dictionary 형태를 반환하는데 pandas의 pd.read_json() 은 string 형태의 데이터만 읽을 수 있습니다. 그래서 이 경우 pd.DataFrame() 을 사용해야 합니다.
api_url = "https://api.yelp.com/v3/businesses/search"

# Get data about NYC cafes from the Yelp API
# headers 와 params는 미리 주어진 것을 사용한다.
response = requests.get(api_url, 
                headers=headers, 
                params=params)

# Extract JSON data from the response
data = response.json()

# Load data to a dataframe
cafes = pd.DataFrame(data["businesses"])

# View the data's dtypes
print(cafes.dtypes)

3. Working with nested JSONs

중첩된 JSON에 대해서 어떻게 해야할까요?
pandas.io.json

  • json_normalize()
    • sep
    • record_path
    • meta
    • meta_prefix
# Load other business attributes and set meta prefix
flat_cafes = json_normalize(data["businesses"],
                            sep="_",
                            record_path="categories",
                            meta=["name", 
                                  "alias",  
                                  "rating",
                                    ["coordinates", "latitude"], 
                                    ["coordinates", "longitude"]],
                            meta_prefix="biz")





# View the data
print(flat_cafes.head())
반응형