Python에서 API 데이터 정렬, 필터링 및 재매핑

API에서 웹 서비스가 제공하는 형식으로 데이터를 가져오시겠습니까?API 공급자가 데이터를 어떻게 구성하는지에 따라 프로그램의 데이터 구조를 지정해서는 안 됩니다.반대로, Python 목록 조작 기술의 강력한 기능을 이용하여, 사용자가 필요로 하는 방식으로 데이터를 정렬하고, 필터하고, 재구성할 수 있습니다.
본고에서 우리는 본 기기의 Python 기능을 사용하여 외부 REST API의 데이터를 정렬하고 선별하며 다시 비추는 몇 가지 방법을 연구할 것이다. 이런 데이터는 응용 프로그램에서 사용할 수도 있고 자신의 API의 일부분으로 클라이언트에 전달할 수도 있다.Javascript에서 이를 실현할 수 있는 기술을 찾고 있습니까?We wrote about that in a previous article .
다음은 Python3을 설치하고 Python 코드를 잘 실행해야 합니다.

API에서 데이터 읽어들이기
우선, 우리는 약간의 데이터를 조작해야 한다.본고의 예시에서 GitHub의 v3 REST API와 search/repositories 단점을 사용할 수 있다.단점은 몇 개의 인자가 필요하지만, 우리는 q 전송 Bearer 을 사용하여 검색 조회를 하고, per_page 을 사용하여 결과를 10으로 제한할 것입니다.결과를 콘솔에 인쇄하려면 후속 작업이 쉬워지지만, 더 큰 데이터 집합을 사용하려면 페이지마다 되돌아오는 결과를 마음대로 늘릴 수 있다.또한 검색 질의를 원하는 내용으로 변경할 수도 있습니다. 이 질의는 수행할 작업에 영향을 주지 않기 때문입니다.
모든 HTTP 클라이언트를 사용할 수 있지만, 우리의 예는 요청에 제공될 것입니다.먼저 requests를 설치하고 프로젝트를 가져옵니다.
설치하려면 pip(또는 pip3, 로컬 설정에 따라 다름)를 사용합니다.
pip install requests
그런 다음 요청을 가져오고 API 호출을 설정합니다.
import requests

def get_repos():
  res = requests.get('https://api.github.com/search/repositories?q=bearer&per_page=10')
  return res.json()['items'] # Returns the value of the 'items' key from the JSON response body
위 코드는 API 호출을 수행하고 관심 있는 응답 부분만 반환하는 함수get_repos를 정의합니다.이 예에서는 JSON 응답의 items 목록이 표시됩니다.이 점에서부터 items 데이터가 필요할 때마다 우리는 x = get_repos() 변수에 그것을 분배할 수 있다.이것은 우리에게 listdict나 사전 데이터 형식을 남겨 줄 것이다.
이제 설정이 완료되면 API의 데이터를 조작할 수 있습니다.

파이썬의 정렬 결과
많은 API에서 어떤 방식으로 결과를 정렬할 수 있지만, 어떤 속성으로도 정렬할 수 있는 권한은 거의 없습니다.예를 들어 GitHub은 별, 포크, 도움이 필요한 문제, 재구매 협의의 업데이트 시간에 따라 정렬할 수 있다.만약 다른 정렬 방법을 원한다면, 스스로 처리해야 한다.기억해야 할 점은 우리가 검색한 결과만 정렬할 수 있다는 것이다.이는 상위 10개의 결과를 포획하고 정렬한 뒤 10개의 결과를 포획하면 순서가 정확하지 않다는 뜻이다.대규모 데이터 세트를 사용하는 경우 정렬하기 전에 모든 데이터를 캡처하여 같은 데이터 세트에서 여러 번 작업을 반복하지 않도록 하는 것이 좋습니다.
Python은 sorted built-in function 명령을 제공하여 목록을 쉽게 정렬할 수 있습니다.sorted 정렬할 목록과 정렬 결과를 표시할 값key을 가져옵니다.다음 예를 들어 개방 문제 계수에 따라 저장소를 정렬합니다. 가장 적은 문제부터 가장 많은 문제까지.
# This line can be used in each example, but you only need it once in your file
repos = get_repos()

fewest_issues_sort = sorted(repos, key=lambda repo: repo['open_issues_count'])
위의 코드는 repossorted 함수에 전송한 다음 lambda 함수를 key에 사용합니다.파이톤의 람다 함수는 익명 함수로 다른 곳에서 정의할 필요 없이 온라인으로 사용할 수 있다.그것들은 우리와 같은 용례에 매우 적합하다.lambda는 "repos의 매번 교체를 repo로 이 함수에 전달하고 open_issues_count로 되돌려준다"는 뜻이다.정렬 함수는 해결되지 않은 문제 계수를 키로 사용합니다.결과는 최소 문제부터 최대 문제까지 정렬된 새로운 사전 목록입니다.
만약 순서를 반전시키고 발행 수량이 가장 많은 환매 협의를 먼저 표시하려면 어떻게 해야 합니까?reversesorted 파라미터를 사용하여 이 점을 실현할 수 있습니다.reverseTrue로 설정하면 같은 논리가 적용되지만 반대로 적용된다.
most_issues_sort = sorted(repos, key=lambda repo: repo['open_issues_count'], reverse=True)
같은 방법으로 모든 값에 따라 정렬할 수 있습니다.

Python으로 목록 데이터 필터링
필터가 정렬과 잘 일치합니다.그것들은 목록을 당신의 요구와 관련된 항목으로 줄일 수 있도록 합니다.목록을 필터하는 방법은 다양하지만, 원시 목록 항목의 서브집합에서 새로운 목록을 구성하는 것과 같은 개념을 사용한다.
가장 효과적인 방법 중 하나는 사용list comprehension이다.목록 이해는 목록을 만드는 방법이지만, 복잡한 순환을 비교적 짧은 표현식으로 간소화할 수도 있다.예를 들어 목록에 있는 저장소에 설명만 기입하기를 바랍니다.
# Fetch the repos if you haven't already
repos = get_repos()

repos_with_descriptions = [repo for repo in repos if repo['description'] is not None]
위의 코드는 한 줄의 코드에서 많은 작업을 했기 때문에 우리는 그것을 분해할 것이다.그것은 repos_with_descriptions 새 목록 [ ] 에 분배될 것이다.repo의 첫 번째 repo for는 우리가 새 목록에 추가하고자 하는 내용을 나타낸다.다음 부분repo in repos은 어떤 for-in 순환에서도 익숙해 보입니다.마지막으로, 끝은 우리의 조건이다: if repo['description'] is not None.GitHub API에 설정 설명이 없으면 JSON 응답으로 돌아갑니다.파이톤은 null로 해석하기 때문에 설명이 None로 설정되지 않았는지 확인합니다. 설명이 있는 저장소만 있으면 됩니다.
만약 우리가 두 가지 조건을 원한다면?예를 들어, 설명 및 홈 URL이 설정된 저장소만 사용할 수 있습니다.
repos_with_desc_and_home = [repo for repo in repos if repo['description'] is not None and repo['homepage'] is not None]
앞에서 예시한 바와 같이 이 코드는 "None 에서 각각 repo 으로 구성된 새로운 목록을 만들지만, 설명이 repos 아니고 홈페이지가 None 아닌 목록만 포함한다."라고 밝혔다.
이 두 가지 예에서 우리는 모두 None 연산자를 사용했다.100개 이상의 별을 포함하는 저장소만 포함하는 일반적인 조건을 살펴보자.
popular_repos = [repo for repo in repos if repo['stargazers_count'] >= 100]
코드는 다시 목록을 사용해서 이해하지만, 이번에는 비교 값의 더 전통적인 조건보다 크거나 같은 조건을 포함한다.이 예시들 중 하나를 실현하기 위해 선택한 순환과 목록 생성 방법을 사용할 수 있습니다.

데이터 재매핑 또는 규범화
때때로 API는 필요한 정보보다 많은 정보를 반환합니다.GraphQL은 클라이언트가 필요로 하는 데이터를 정확하게 지정함으로써 이 문제를 해결할 수 있지만, 현재 대부분의 API는 여전히 REST와 유사하다.만약 데이터와 상호작용을 하거나 응용 프로그램의 다른 부분으로 보내기 전에 데이터를 몇 개의 속성으로 줄여야 한다면, 목록을 교체하고 필요한 부분만 포함하는 새로운 목록을 구축해서 실현할 수 있다.
순환이나 목록 이해는 가능하지만, 파이톤의 is not 함수를 사용할 것입니다.map 함수를iterable의 모든 항목에 적용합니다.원시map 목록을 사용하고 맵을 사용하여 더 적은 키/값 쌍으로 간소화하는 예를 살펴보자.
def simplify(repo):
    return {
        'url': repo['html_url'],
        'name': repo['name'],
        'owner': repo['owner']['login'],
        'description': repo['description'],
        'stars': repo['stargazers_count']
    }

new_repos = map(simplify, repos)
여기, repos 수신map 함수, 이 함수는 simplify의 모든 항목을 실행합니다.당신은 같은 방법으로 데이터를 더욱 조작하고 값을 규범화하며 심지어 민감한 정보를 박리할 수 있습니다.

기초를 초월하다
본고에서 언급한 기술은 대다수의 용례를 처리하는 좋은 출발점이다.API는 주로 JSON으로 반환되며, Python은 이를 사전으로 변환할 수 있습니다.우리의 예시에서, 우리는 응답 사전에서 repos 목록을 가져와, 많은 내장된 Python 함수와 함께 데이터를 교체하는 데 사용했다.
API의 데이터가 제품의 핵심이든 사용자에게 제공하는 가치의 일부분이든 사용자의 요구에 가장 적합하도록 조작할 수 있어야 합니다.너는 이 데이터의 출처가 믿을 만하다는 것을 알아야 한다.
이 API 데이터는 당신의 응용 프로그램의 성공에 얼마나 중요합니까?API가 성능 문제나 중단에 부딪혔을 때 어떤 일이 발생합니까?다운타임 및 protect your integrations 장애를 방지하고 관리할 수 있는 보호 기능이 있습니다.Bearner에서는 API 성능을 자동으로 모니터링하고 문제를 알리며 문제 발생 시 지능적으로 대응할 수 있는 솔루션을 구축하고 있습니다.Learn more about Bearer 오늘 한번 해보세요.

좋은 웹페이지 즐겨찾기