Chuyển đổi chuỗi truy vấn thành JSON Python

Nếu bạn là người mới bắt đầu với Khoa học dữ liệu, bạn sẽ thường làm việc trong các khóa học và hướng dẫn với. csv dễ đọc vào khung dữ liệu Pandas. Tuy nhiên, trên thực tế, bạn thường cần truy cập API và lấy dữ liệu ở định dạng Json. Dữ liệu này thường chứa các danh sách và từ điển lồng nhau

Vì vậy, hôm nay tôi sẽ giải thích cách truy vấn API với đầu ra JSON và xử lý dữ liệu này để đọc nó vào khung dữ liệu gấu trúc. Để làm ví dụ, tôi đã quyết định sử dụng API thông tin về mèo. API này một mặt chứa thông tin vui nhộn, nhưng mặt khác, nó cũng có cấu trúc tương đối đơn giản nên rất phù hợp cho người mới bắt đầu. Với API Cat Facts, chúng ta có thể tìm hiểu cách truy vấn API bằng Python và cách chuyển đổi đầu ra JSON thành khung dữ liệu gấu trúc

Photo by Trà My on Bapt

Để làm theo hướng dẫn này, cần có kiến ​​thức cơ bản về Python cũng như kiến ​​thức về gói gấu trúc. Kiến thức về API là gì, được giả định

Truy vấn API

Trước tiên, bạn cần xem tài liệu API và tìm ra URL của giao diện API và các điểm cuối. Sau đó, chúng tôi cần thông số kỹ thuật loại sự kiện mà chúng tôi muốn trả về. Trong ví dụ này, chúng tôi truy vấn Điểm cuối

base_url = "//cat-fact.herokuapp.com"
facts = "/facts/random?animal_type=cat&amount=500"
0

URL cơ sở của tất cả các điểm cuối là

base_url = "//cat-fact.herokuapp.com"
facts = "/facts/random?animal_type=cat&amount=500"
1

Bạn có thể tìm thêm thông tin về điểm cuối Fact tại URL này. Tại đây, bạn cũng sẽ tìm thấy thông tin về các tham số truy vấn và cách một phản hồi API sẽ trông như thế nào và nó sẽ được cấu trúc như thế nào. Thậm chí có sẵn các truy vấn mẫu. Chúng tôi truy vấn điểm cuối này để truy xuất các sự kiện riêng lẻ, với ID của họ, người dùng đã tải lên sự kiện và ngày tạo

Bây giờ hãy bắt đầu tạo truy vấn trong Python

import requests
import pandas as pd
import json
import pprint
import seaborn as sns
import matplotlib.pyplot as plt

Đầu tiên chúng ta phải nhập các gói cần thiết. Trong hướng dẫn này, chúng tôi sử dụng các yêu cầu để truy cập API thông qua yêu cầu HTTP. Pandas để đọc dữ liệu JSON vào DataFrame và thực hiện phân tích khám phá. Seaborn và matplotlib được sử dụng để trực quan hóa dữ liệu

base_url = "//cat-fact.herokuapp.com"
facts = "/facts/random?animal_type=cat&amount=500"

Bây giờ chúng tôi lưu URL cơ sở và điểm cuối đã sử dụng trong các biến

first_response = requests.get[base_url+facts]
response_list=first_response.json[]

Để lấy dữ liệu dưới dạng đầu ra Json, bạn có thể sử dụng gói yêu cầu. Để làm điều này, chúng tôi gọi yêu cầu. get với URL cơ sở và điểm cuối và lưu trữ các giá trị được trả về trong biến first_response. Đầu ra Json sau đó có thể được phân tích cú pháp bằng. json[] và được lưu trữ trong một danh sách. In response_list cho chúng ta thấy cấu trúc của dữ liệu thu được

[{'used': False,
'source': 'api',
'type': 'cat',
'deleted': False,
'_id': '591f97e88dec2e14e3c20b06',
'__v': 0,
'text': 'A female Amur leopard gives birth to one to four cubs in each litter.',
'updatedAt': '2020-08-23T20:20:01.611Z',
'createdAt': '2018-05-16T20:20:03.145Z',
'status': {'verified': True, 'sentCount': 1},
'user': '5a9ac18c7478810ea6c06381'},
{'used': False,
'source': 'user',
'type': 'cat',
'deleted': False,
'_id': '5c87d03dec1e5c0aa37e0a6b',
'user': '5a9ac18c7478810ea6c06381',
'text': 'On October 24, 1963, a tuxedo cat named Félicette entered outer space aboard a French Véronique AG1 rocket and made feline history. Félicette returned from the 15-minute trip in once piece and earned the praise of French scientists, who said she made "a valuable contribution to research.".',
'createdAt': '2019-03-12T15:29:01.505Z',
'updatedAt': '2020-08-23T20:20:01.611Z',
'__v': 0,
'status': {'verified': True, 'sentCount': 1}},
{'used': False,
'source': 'api',
'type': 'cat',
'deleted': False,
'_id': '591f98783b90f7150a19c1b5',
'__v': 0,
'text': "Cats have 32 muscles that control the outer ear [compared to human's 6 muscles each]. A cat can rotate its ears independently 180 degrees, and can turn in the direction of sound 10 times faster than those of the best watchdog.",
'updatedAt': '2020-08-23T20:20:01.611Z',
'createdAt': '2018-01-04T01:10:54.673Z',
'status': {'verified': True, 'sentCount': 1},
'user': '5a9ac18c7478810ea6c06381'}
...
]

Bây giờ chúng ta có dữ liệu trong một danh sách với các danh sách con và từ điển, chúng ta phải lặp qua chúng và nối các giá trị riêng lẻ của các khóa tương ứng vào một danh sách mới có tên là dữ liệu. Nhận các giá trị từ các từ điển phụ yêu cầu sử dụng. lấy phương thức của đối tượng từ điển

Có thể có vô số cách để thực hiện bước này. Đây là một cách có thể để lấy các giá trị từ các từ điển phụ

data=[]
for response in response_list:
data.append[{
"used": response.get['used'],
"source": response.get['source'],
"text": response.get['text'],
"updatedAt": response.get['updatedAt'],
"createdAt": response.get['createdAt'],
"user": response.get['user']

}]

Sau đó, chúng tôi sẽ chỉ cần chuyển đổi danh sách của mình thành khung dữ liệu pandas với lệnh pd. phương pháp khung dữ liệu

catfacts_df=pd.DataFrame[data]
catfacts_df.head[]

cấu trúc catfacts_df

Bây giờ chúng tôi đã nhập thành công dữ liệu vào khung dữ liệu gấu trúc, chúng tôi có thể truy cập nhiều dữ liệu hơn thông qua API. Sẽ rất thú vị khi biết người dùng nào đã thêm catfacts. Để làm điều này, chúng ta phải truy xuất điểm cuối “GET /facts?” . Ở đây bạn phải chú ý rằng bạn không nhận được các giá trị người dùng trùng lặp. Chúng tôi chỉ muốn sử dụng một danh sách có tên người dùng và id người dùng và sử dụng những thông tin này để tham gia hai khung dữ liệu. Nhưng bằng cách lấy dữ liệu từ các sự kiện điểm cuối, chúng tôi phải loại bỏ các hàng trùng lặp dựa trên id người dùng. Bằng cách đó, chúng tôi nhận được một danh sách bao gồm mọi người dùng một lần

Chúng ta cũng phải lưu ý rằng cần phải kiểm tra xem một điểm dữ liệu có đầy đủ và không có giá trị bị thiếu hay không. Chúng tôi làm điều này với một điều kiện if. Bằng cách này, chúng tôi chỉ chèn các điểm dữ liệu đầy đủ vào danh sách, nếu không mã sẽ trả về lỗi. Sau khi tạo DataFrame với dữ liệu và loại bỏ các giá trị trùng lặp dựa trên cột “người dùng”, chúng tôi cũng đặt lại chỉ mục

________số 8_______

In DataFrame cho thấy có 83 người gửi catfact duy nhất

Hình ảnh của tác giả

Bây giờ là bước quan trọng tiếp theo để hợp nhất cả hai khung dữ liệu trong một. Đối với điều này, chúng tôi sử dụng. hợp nhất và chỉ định rằng nó sẽ được hợp nhất trên tập dữ liệu bên trái [catfacts_df] trên cột “người dùng”

df=catfacts_df.merge[userfacts_df, how='left', on= "user"]

Sau khi nối cả hai khung dữ liệu, điều quan trọng là phải xác nhận rằng việc hợp nhất là chính xác

Hình ảnh của tác giả

Trước khi chúng tôi tiếp tục với phần trực quan hóa, sẽ rất hợp lý khi chèn mã đã viết vào một chức năng được sắp xếp rõ ràng. Tại đây, chúng ta cũng có thể đặt tham số “số lượng” để nhận được một lượng catfacts nhất định

def get_cat_facts[amount]:
base_url="//cat-fact.herokuapp.com"

# get cat facts
response=requests.get[base_url+ "/facts/random?animal_type=cat&amount=" + str[amount]]
response_json=response.json[]

data=[]
for response in response_json:
data.append[{
"used": response.get['used'],
"source": response.get['source'],
"text": response.get['text'],
"updatedAt": response.get['updatedAt'],
"createdAt": response.get['createdAt'],
"user": response.get['user']
}]


#create catdf
catfacts_df=pd.DataFrame[data]

# get user data

user_response=requests.get[base_url+ "/facts?"]
user_json=user_response.json[]

users=[]
for response in user_json.values[]:
for user in response:
if user.get['user']:
users.append[{
"user": user.get['user'].get['_id'],
"firstname":user.get['user'].get['name'].get['first'],
"lastname":user.get['user'].get['name'].get['last']
}]
#create userdf
userfacts_df=pd.DataFrame[users]
userfacts_df = userfacts_df.drop_duplicates[subset = ["user"]]
#joining both datframes
df=catfacts_df.merge[userfacts_df, how='left', on= "user"]

return df
cat_facts_df = get_cat_facts[amount=500]

Ở bước cuối cùng, chúng ta có thể trực quan hóa dữ liệu. Ở đây tôi chỉ đơn giản là hình dung có bao nhiêu thông tin mà người dùng đã gửi

# catfacts per user
agg_user_df
=cat_facts_df.groupby[['user', 'firstname', 'lastname']].agg[{
"text": 'count'
}]
top_ten=agg_user_df.nlargest[10, 'text']
bar_plot=sns.barplot[x = 'lastname', y = 'text', data = top_ten,
palette = 'hls',
capsize = 0.05,
saturation = 8,
errcolor = 'gray', errwidth = 2,
ci = 'sd'

]
bar_plot.set_title['Facts by User']
bar_plot.set_ylabel['Amount Cat Facts']
bar_plot.set_xlabel['Lastname']
plt.xticks[rotation=45]
plt.show[]

Hình ảnh của tác giả

Trong kho GitHub, bạn có thể lấy toàn bộ mã. Tôi hy vọng bạn thích Hướng dẫn này và tôi hy vọng nó sẽ giúp ích cho bạn khi làm việc với API

Làm cách nào để chuyển đổi chuỗi truy vấn thành JSON trong Python?

bạn có thể biến nó thành JSON trong Python bằng cách sử dụng json. hàm tải[] . json. hàm loading[] chấp nhận đầu vào là một chuỗi hợp lệ và chuyển đổi nó thành một từ điển Python.

Làm cách nào để chuyển đổi một chuỗi thành JSON?

Dữ liệu chuỗi có thể dễ dàng chuyển đổi thành JSON bằng cách sử dụng hàm stringify[] và cũng có thể thực hiện việc này bằng cách sử dụng eval[] , .

Làm cách nào để lưu chuỗi vào tệp JSON trong Python?

Phương thức dumps[] chuyển đổi đối tượng Python thành chuỗi có định dạng JSON . Chúng tôi cũng có thể tạo tệp JSON từ dữ liệu được lưu trữ trong từ điển Python. Phương thức để thực hiện tác vụ này là dump[]. Điều này tạo ra một tệp có tên new_employee.

Làm cách nào để phân tích cú pháp chuỗi JSON trong Python?

Nếu bạn có một chuỗi JSON, bạn có thể phân tích cú pháp chuỗi đó bằng cách sử dụng json. phương thức loading[] . Kết quả sẽ là một từ điển Python.

Chủ Đề