웹사이트 API에서 데이터 추출 및 CSV로 저장

배경
저는 최근에 미국 농무부 웹사이트에서 데이터를 추출하고 원하는 형식으로 포맷하여 CSV 파일로 저장하는 Python 스크립트를 작성했습니다. 스크립트 작업을 하는 동안 온라인에서 조사를 좀 했기 때문에, 누군가가 혜택을 받을 수 있기를 바라며 내가 수행한 단계와 몇 가지 예제 코드를 기록하여 커뮤니티에 보답하는 것이 공평하다고 생각했습니다.
문제 설명
FoodData Central 데이터베이스에는 많은 식품에 대한 아미노산 수준이 있습니다. SR 'Legacy Foods' 카테고리에서 데이터를 추출하고 다음을 포함하는 CSV 형식의 식품 및 아미노산 수준을 나열합니다.
각 식품 및 분야에 대한 행은 다양한 아미노산(18개 아미노산)입니다.
해결책
FoodData Central API는 FDC(FoodData Central)에 대한 액세스를 제공하며 액세스 권한을 얻으려면 이 링크https://fdc.nal.usda.gov/api-key-signup.html를 통해 API 키를 등록해야 합니다.
이 기사의 목적을 위해 API 웹 인터페이스에서 Get 쿼리를 생성하고 모든 매개변수를 지정한 다음 매개변수와 API 키가 포함된 URL을 내 스크립트에 복사했습니다. 일반적으로 코드에서 매개변수를 지정합니다. 아래는 전체 'GET' 쿼리 URL입니다.

endpoint = 'https://api.nal.usda.gov/fdc/v1/foods/list?dataType=SR%20Legacy&pageSize=20&pageNumber=3&sortBy=fdcId&sortOrder=asc&api_key=XXXXXXXXX'


다음 단계는 Python 'requests'HTTP 라이브러리를 사용하여 API 끝점을 쿼리하고 싶습니다.

response = requests.get(endpoint).json()


위의 응답 변수에는 FoodData Central Database의 데이터가 포함되어 있으므로 원하는 형식으로 데이터의 형식을 지정해야 합니다. 각 식품 항목에 대해 식품 항목의 이름(설명)과 특정 식품 항목에 포함된 각 아미노산의 양을 알고 싶습니다. 따라서 내 CSV 파일에는 총 19개의 필드가 있습니다. 다음 단계는 키/헤더 목록과 데이터로 채울 빈 사전을 지정하는 것입니다.

# keys global variable will be used to generate keys for the response_dict dictionary and for fieldnames for the csv file
keys = ['Description','Alanine', 'Arginine', 'Aspartic','Cysteine','Glutamic','Glycine','Histidine','Isoleucine','Leucine','Lysine','Methionine','Phenylalanine','Proline','Serine', 'Threonine','Tryptophan','Tyrosine','Valine']


다음 코드 블록은 응답 데이터를 반복하고 응답 데이터를 각 사전 키와 일치시킨 다음 해당 데이터를 위에서 선언한 Food_list 변수에 추가합니다.

아래는 완전한 기능입니다.

def get_data():

    # The API endpoint to query data from preformated with the desired parameters
    endpoint = 'https://api.nal.usda.gov/fdc/v1/foods/list?dataType=SR%20Legacy&pageSize=20&pageNumber=3&sortBy=fdcId&sortOrder=asc&api_key=3VzJQvEyn9UBBwFgK3pdli3x82rCnpy9sVJFNt3Z'

    # The python HTTP requests library queries the endpoint and returns the data in JSON format
    response = requests.get(endpoint).json()

    food_list = []
    for i, data in enumerate(response): 

        #empty dictionary initialized with keys from the 'keys' list variable declared globally       
        response_dict = {key: 0 for key in keys}

        response_dict['Description'] = data['description']
        for nutrient in data['foodNutrients']:
            if nutrient['name'] in list(keys):
                response_dict[nutrient["name"]] = nutrient['amount']                              
        food_list.append(response_dict)
    return food_list


마지막으로 food_list 데이터를 CSV 파일에 작성해 보겠습니다.

filename = 'FoodDatacsv.csv'
with open(filename, 'w', newline='') as myfile:
    writer = csv.DictWriter(myfile, fieldnames=keys)
    writer.writeheader()
    writer.writerows(get_data())


오늘은 여기까지입니다.

추신
이것은 공개적으로 게시된 최초의 튜토리얼입니다. 질문이나 설명이 있으면 아래 댓글 섹션에 알려주십시오.

좋은 웹페이지 즐겨찾기