Lekcja 14 - Nikola Horn
Mapa pogody z line-chartem i tabelką
import streamlit as st
import folium as fl
import pandas as pd
from streamlit_folium import st_folium
import requests
adres_url = "https://api.open-meteo.com/v1/forecast"
#@st.cache_data
def pobierz_pogode(adres, lat, lon):
parametry = {"latitude": lat, "longitude": lon, "current": "temperature_2m,wind_speed_10m,relative_humidity_2m", "daily": "temperature_2m_max,temperature_2m_min"}
odpowiedz = requests.get(adres, params=parametry)
return odpowiedz.json()
st.title("Mapa pogody")
st.write("Wybierz lokację, dla której chcesz poznać pogodę.")
mapa = fl.Map(tiles="Esri.WorldTopoMap")
mapa_streamlit = st_folium(mapa, height=400, width=700)
polozenie = None
temperatura = None
wiatr = None
wilgotnosc = None
tempmax = None
if mapa_streamlit.get("last_clicked"):
lat=mapa_streamlit["last_clicked"]["lat"]
lon=mapa_streamlit["last_clicked"]["lng"]
polozenie = (f"Położenie: {lat}, {lon}")
odczytana = pobierz_pogode(adres_url, lat, lon)
temperatura=odczytana["current"]["temperature_2m"]
wiatr=odczytana["current"]["wind_speed_10m"]
wilgotnosc=odczytana["current"]["relative_humidity_2m"]
tempmax=odczytana["daily"]["temperature_2m_max"]
tempmin=odczytana["daily"]["temperature_2m_min"]
st.write(polozenie)
tabelka = {'Temperatura': temperatura,
'Prędkość wiatru': wiatr,
'Wilgotność powietrza': wilgotnosc}
temperatury = {"Temperatura maksymalna": tempmax, "Temperatura minimalna": tempmin}
tempmaxmin = pd.DataFrame(temperatury, index=[1,2,3,4,5,6,7])
minmax = pd.DataFrame(tempmax, index=[1,2,3,4,5,6,7])
df = pd.DataFrame(tabelka, index=[0])
st.dataframe(df)
st.line_chart(temperatury, x_label="dzień", y_label="temperatura")
Notatki z zajęć
Cache data
@st.cache_data - dekorator "to cache functions that return data". Dzięki niemu możemy zapisać część danych i nie wysyłać tylu zapytań do API

@st.cache_data
def pobierz_pogode(adres):
parametry = {"latitude": 51.1191, "longitude": 17.1877, "current": "temperature_2m,wind_speed_10m,relative_humidity_2m"}
odpowiedz = requests.get(adres, params=parametry)
return odpowiedz.json()
Streamlit folium/folium
pip install streamlit-folium
from streamlit_folium import st_folium
import folium as fl
Streamlit Folium to biblioteka do wyświetlania map w streamlicie.
streamlit-folium builds upon the convenient Folium API for building geospatial visualizations by adding a bi-directional data transfer functionality
mapa = fl.Map(tiles="Esri.WorldTopoMap")
mapa_streamlit = st_folium(mapa, height=400, width=700)
Lista dostępnych mapek (tiles) (niektóre wymagają tokenu autoryzacji):
Adres URL (uniform resource locator)

Adres IP
Adres IP (Internet Protocol) - liczbowy identyfikator nadawany interfejsowi sieciowemu, grupie interfejsów (broadcast, multicast), bądź całej sieci komputerowej w protokole IP, służący identyfikacji elementów sieci w warstwie trzeciej modelu OSI – w obrębie sieci lokalnej oraz poza nią (tzw. adres publiczny).

Adres "nazwowy" w przeglądarce ma na celu ułatwienie pracy ludziom. Wewnętrznie jest zamieniany na adres "liczbowy" IP z pomocą DNS.
Publicznych adresów IP dla protokołu w wersji 4 zabrakło już dawno. NAT umożliwia używanie adresów prywatnych w sieciach lokalnych, dlatego IP komputera będzie zazwyczaj inne lokalnie i w Internecie.
Protokoły:
- HTTP - warstwa aplikacji
- TCP/UDP - warstwa transportowa
- IP - warstwa sieciowa

HTTP - działa na zasadzie żądanie-odpowiedź. Nie przechowuje stanu (każde zapytanie jest niezależne), ale można to obejść np. za pomocą ciasteczek. Komunikaty http mogą być odczytane przez człowieka (dlatego zabezpiecza się je za pomocą https).


