Lekcja 14 - Nikola Horn

Lekcja 14 - Nikola Horn
Photo by Nguyen TP Hai / Unsplash

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 - Streamlit Docs
st.cache_data is used to cache functions that return data (e.g. dataframe transforms, database queries, ML inference).
@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):

Leaflet Provider Demo

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).