Python에서 API 데이터 정렬, 필터링 및 재매핑
본고에서 우리는 본 기기의 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()
변수에 그것을 분배할 수 있다.이것은 우리에게 list
개dict
나 사전 데이터 형식을 남겨 줄 것이다.이제 설정이 완료되면 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'])
위의 코드는 repos
를 sorted
함수에 전송한 다음 lambda 함수를 key
에 사용합니다.파이톤의 람다 함수는 익명 함수로 다른 곳에서 정의할 필요 없이 온라인으로 사용할 수 있다.그것들은 우리와 같은 용례에 매우 적합하다.lambda는 "repos의 매번 교체를 repo
로 이 함수에 전달하고 open_issues_count
로 되돌려준다"는 뜻이다.정렬 함수는 해결되지 않은 문제 계수를 키로 사용합니다.결과는 최소 문제부터 최대 문제까지 정렬된 새로운 사전 목록입니다.만약 순서를 반전시키고 발행 수량이 가장 많은 환매 협의를 먼저 표시하려면 어떻게 해야 합니까?
reverse
의 sorted
파라미터를 사용하여 이 점을 실현할 수 있습니다.reverse
를 True
로 설정하면 같은 논리가 적용되지만 반대로 적용된다.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 오늘 한번 해보세요.
Reference
이 문제에 관하여(Python에서 API 데이터 정렬, 필터링 및 재매핑), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/bearer/sort-filter-and-remap-api-data-in-python-5i텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)