Python – analiza danych z Rest API z użyciem biblioteki Pandas
Python – analiza danych z Rest API z użyciem biblioteki Pandas
Ten wpis ma na celu pokazać jak w Pythonie szybko zanalizować dane pochodzące z Rest API. Użyjemy do tego celu biblioteki Pandas! Pod adresem:
http://dummy.restapiexample.com/api/v1/employees
znajduje się publiczne, przykładowe API z którego pobierzemy dane i poddamy je analizie. API to zwraca informację o pracownikach w formacie json;
{ "data": [ { "employee_age": "61", "employee_name": "Tiger Nixon", "employee_salary": "320800", "id": "1", "profile_image": "" }, { "employee_age": "63", "employee_name": "Garrett Winters", "employee_salary": "170750", "id": "2", "profile_image": "" }, { "employee_age": "66", "employee_name": "Ashton Cox", "employee_salary": "86000", "id": "3", "profile_image": "" }, ... ], "status": "success" }
importujemy przydatne biblioteki:
import json import urllib import pandas
Za pomocą json.load ładujemy dane z podanego adresu, w wyniku otrzymujemy słownik, za pomocą json.dumps tworzymy na podstawie słownika JSON String:
url = "http://dummy.restapiexample.com/api/v1/employees" output = json.load(urllib.urlopen(url)) dump = json.dumps(output["data"])
Tworzymy ramkę panda (obiekt DataFrame) – dwuwymiarowa struktura z etykietami, mogąca przechowywać kolumny z różnymi typami danych:
data_frame = pandas.DataFrame(json.loads(dump))
na podstawie danych źródłowych chcemy uzyskać informację jaka jest suma pensji wszystkich pracowników, w tym celu należy dokonać rzutowania pensji na typ całkowity:
data_frame_int_salary = data_frame.astype({'employee_salary': 'int32'}) print data_frame_int_salary.loc[:,["employee_salary"]].sum()
w wyniku otrzymujemy sumę:
employee_salary 6644770 dtype: int64
cały skrypt przedstawia się następująco:
import json import urllib import pandas url = "http://dummy.restapiexample.com/api/v1/employees" output = json.load(urllib.urlopen(url)) dump = json.dumps(output["data"]) data_frame = pandas.DataFrame(json.loads(dump)) data_frame_int_salary = data_frame.astype({'employee_salary': 'int32'}) print data_frame_int_salary.loc[:,["employee_salary"]].sum()
szybko i sprawnie udało się uzyskać wynik! 😉
Leave a comment