Analiza jakości powietrza z Python oraz Pandas.

Czym jest GIOŚ? Główny Inspektorat Ochrony Środowiska. Jedną z ciekawych rzeczy, która możemy znaleźć na ich stronie, jest API, które umożliwia nam odczytanie jakości powietrza z jednej z ponad 100 stacji, zlokalizowanych na terenie Polski. Z Python oraz biblioteką request jest to bardzo proste. Zobaczmy jaką jakość powietrza mamy teraz.

Opis API, znajduje się na stronie https://powietrze.gios.gov.pl/pjp/content/api, i jest on prosty w obsłudze. Nie potrzebujemy ani się rejestrować, ani posiadać specjalnego klucza.

GIOŚ API, i krótka instrukcja obsługi

Wszystkie informacje, dostaniemy poprzez odwiedzenie odpowiednich adresów URL. Aby zobaczyć jak działają, możemy to zrobić w dowolnej przeglądarce internetowej.

1. Lista stacji

Lista wszystkich stacji, znajduje się pod adresem:

http://api.gios.gov.pl/pjp-api/rest/station/findAll

A każda stacja opisana jest następująco:

Możemy znaleźć stację w naszym mieście, a następnie zanotować id stacji. W naszym przypadku, losowy wybór padł na miasto Łomża i stację o numerze 618.

2. Lista czujników na stacji

W momencie kiedy mamy już numer id, naszej stacji, możemy skorzystać innego adresu URL, który służy sprawdzeniu, jakiego rodzaju pomiary dana stacja dokonuje.

http://api.gios.gov.pl/pjp-api/rest/station/sensors/<numer stacji>

W tym celu, modyfikujemy adres URL i na jego końcu, umieszczamy numer 618, czyli stację w mieście Łomża.

http://api.gios.gov.pl/pjp-api/rest/station/sensors/618

Widzimy, że stacja w Łomży, o numerze 618, posiada 3 czujniki – „Dwutlenek azotu”, „PM10” oraz „Dwutlenek siarki SO2”.

W dalszej części, będziemy zainteresowani PM10. W związku, z czym, notujemy id tego czujnika – 4079 i możemy przejść do kolejnej końcówki API od GIOŚ, która poda nam już konkretne wartości.

3. Pomiary konkretnych czujników

Jeżeli namy już numer czujnika, którego pomiarami jesteśmy zainteresowani, możemy sprawdzić wartość z ostatnich kilku godzin, pod adresem:

http://api.gios.gov.pl/pjp-api/rest/data/getData/<numer czujnika>

W naszym przypadku, wiemy że interesuje nasz czujnik w Łomży, PM10, który ma numer 4079. Tym samym, możemy sprawdzić wartości pomiarów, pod adresem:

http://api.gios.gov.pl/pjp-api/rest/data/getData/4079

Widzimy że najświeższy pomiar, to 12.8, ze strony imgw, wiemy natomiast że normy dla PM10 są następujące:

  • norma średniego 24-godz. stężenia pyłu PM10: 50 µg/m3
  • norma średniego rocznego stężenia pyłu PM10: 20 µg/m3

http://smog.imgw.pl/content/health

Czyli jest na tę chwilę, norma PM10, w mieście Łomża, nie została przekroczona.

4. Ogólny indeks jakości powietrza

API GIOŚ umożliwia również sprawdzenie ogólnego indeksu jakości powietrza, pod adresem:

http://api.gios.gov.pl/pjp-api/rest/aqindex/getIndex/<id stacji>

Co w zależności od naszych potrzeb, może być interesujące. Dla Łomży, otrzymujemy:

http://api.gios.gov.pl/pjp-api/rest/aqindex/getIndex/618

Automatyzacja odczytu pomiarów, w Python

Wiemy już jak działa API GIOŚ, nic nie stoi na przeszkodzie, aby w automatyczny sposób pobierać pomiary. Jednym z powodów, dla których, może być to dla nas interesujące, jest chęć analizy dłuższego okresu czasu, niż pozwala na to API.

Przykładowo, możemy napisać i zaplanować skrypt, który uruchamia się raz dziennie oraz pobiera i zapisuje dane. Później, możemy je analizować za pomocą Pandas oraz Seaborn.

Pobranie danych dla Łomży, Zakopanego oraz Gdańska

Aby było ciekawiej, pobierzemy dane odnośnie PM10, dla wyżej wspomnianych miast.

import requests
import pandas as pd

res = requests.get("http://api.gios.gov.pl/pjp-api/rest/data/getData/4079")
res = res.json()
lomza = pd.DataFrame( res['values'] )
lomza['miasto'] = 'Łomża'

res = requests.get("http://api.gios.gov.pl/pjp-api/rest/data/getData/3195")
res = res.json()
zakopane = pd.DataFrame( res['values'] )
zakopane['miasto'] = 'Zakopane'

res = requests.get("http://api.gios.gov.pl/pjp-api/rest/data/getData/4681")
res = res.json()
gdansk = pd.DataFrame( res['values'] )
gdansk['miasto'] = 'Gdańsk'

df = pd.concat([lomza,zakopane,gdansk])
df.dropna()
df = df.sort_values('date')

Następnie dokonamy wizualizacji wyników. W tym przypadku, mamy do dyspozycji tylko historię udostępnianą przez API, czyli około 2 dni. Ustawimy również limit PM10, według zaleceń imgw.

df_p  = df.pivot(index='date',columns='miasto', values='value')
df_p.index.name = None
g = df_p.plot(figsize=(15,4), title='Poziom PM10')
g.axhline(y=20, color='red')
plt.show()

Podsumowując.

GIOŚ to proste i użyteczne API, które dostarczy nam informacji na temat jakości powietrza na terenie Polski. Dane, mogą nam posłużyć do zaspokojenia ciekawości, lub dokonania dalszych analiz, jak próby skorelowania jakości powietrza, z pogodą w naszym mieście.

Wszystkie użyte kody, znajdują się również w repozytorium GitHuba, pod adresem: https://github.com/AnalitykEduPL/Ciekawe-zbiory-oraz-zrodla-danych