import streamlit as st from streamlit_echarts import st_pyecharts from plot import * from cpc_iri_web import header from st_on_hover_tabs import on_hover_tabs from datetime import datetime, timedelta import requests from PIL import Image import warnings warnings.simplefilter(action='ignore', category=FutureWarning) # Configurando a página st.set_page_config(layout='wide') # Estilos streamlit_style = """ """ st.markdown(streamlit_style, unsafe_allow_html=True) st.markdown('', unsafe_allow_html=True) # Sidebar with st.sidebar: logo = Image.open('imgs/logo.png') st.image(logo) st.divider() component = on_hover_tabs( tabName=['Índices oceânicos', 'Índice atmosférico', 'Mapas e índices diários', 'Previsão POAMA', 'Previsão CPC/IRI'], iconName=['storm', 'cloud', 'maps', 'public', 'public'], styles = {'navtab': {'background-color':'#111','color': '#818181','font-size': '15px', 'transition': '0.5s', 'white-space': 'nowrap', 'text-transform': 'uppercase'}, 'tabOptionsStyle': {':hover :hover': {'color': 'white','cursor': 'pointer'}}, 'iconStyle':{'position':'fixed','left':'7.5px', 'text-align': 'left'}, 'tabStyle' : {'list-style-type': 'none', 'margin-bottom': '30px', 'padding-left': '30px'}}, default_choice=0) # #st.header('Menu') # component = sac.menu( # items=[ # sac.MenuItem('Monitoramento', type='group', children=['Índices oceânicos', 'Índice atmosféricos', 'Mapas']), # sac.MenuItem('Previsão', type='group', children=['CPC/IRI']), # #sac.MenuItem('Estudo de casos', type='group', children=['ENA', 'Precipitação']) # ], # index=1 # ) if component == 'Índices oceânicos': st.title('Evolução dos Índices ENSO por região do Oceano Pacíficio', anchor=False) descricao = ''' O índice ONI é calculado a partir da região 3.4 do Oceano Pacífico e pode ser utilizado para a caracterização dos episódios de aquecimento da TSM equatorial do oceano Pacífico e resfriamento da TSM equatorial do oceano Pacífico. A duração de pelo menos cinco médias móveis consecutivas de três meses acima de 0.5°C classifica um episódio de El Niño, enquanto que abaixo de -0.5°C classifica um episódio de La Ninã. Além da região 3.4, as demais regiões do pacíficio equatorial (Nino3, Nino4, Nino1+2) também possuem influência nos padrões de teleconexão e devem ser monitorados. O Índice ONI e as anomalias de TSM são calculados a partir do conjunto de dados Extended Reconstructed Sea Surface Temperature (ERSSTv5). ''' st.write(descricao, unsafe_allow_html=True) col1, col2 = st.columns(2) with col1: st.header('Sazonal') tab1, tab2, tab3, tab4, tab5 = st.tabs(['Índice ONI','Niño 1+2', 'Niño 3', 'Niño 3.4', 'Niño 4']) with tab1: plot = plot_oni_season() st_pyecharts(plot_oni_season(), height="500px", width="100%") with tab2: plot = plot_sst_indexes_season('nino12') st_pyecharts(plot, height="500px", width="100%") with tab3: plot = plot_sst_indexes_season('nino3') st_pyecharts(plot, height="500px", width="100%") with tab4: plot = plot_sst_indexes_season('nino34') st_pyecharts(plot, height="500px", width="100%") with tab5: plot = plot_sst_indexes_season('nino4') st_pyecharts(plot, height="500px", width="100%") with col2: st.header('Mensal') tab1, tab2, tab3, tab4, tab5 = st.tabs(['Índice ONI','Niño 1+2', 'Niño 3', 'Niño 3.4', 'Niño 4']) with tab1: plot = plot_oni() st_pyecharts(plot, height="500px", width="100%") with tab2: plot = plot_sst_indexes('nino12') st_pyecharts(plot, height="500px", width="100%") with tab3: plot = plot_sst_indexes('nino3') st_pyecharts(plot, height="500px", width="100%") with tab4: plot = plot_sst_indexes('nino34') st_pyecharts(plot, height="500px", width="100%") with tab5: plot = plot_sst_indexes('nino4') st_pyecharts(plot, height="500px", width="100%") with st.expander('**Clique para ver a distribuição geográfica das regiões**'): ex1, ex2, ex3 = st.columns(3) with ex2: st.image('https://www.ncei.noaa.gov/monitoring-content/teleconnections/nino-regions.gif', use_column_width=True) st.markdown('Fonte: NOAA/NCEI', unsafe_allow_html=True) if component == 'Índice atmosférico': st.title('Evolução do Índice SOI', anchor=False) descricao = ''' O Índice de Oscilação Sul (Southern Oscillation Index - SOI) é um índice baseado nas diferenças observadas de pressão ao nível do mar (PNM) entre Tahti e Darwin, na Austrália, e pode ser um indicador das flutuações de larga escala durante as fases do fenômeno ENSO. Durante episódios de El Niño, espera-se um um Índice SOI negativo. Para episódios de La Niña, espera-se um um Índice SOI positivo. Mais informações sobre o Índice SOI.
''' st.write(descricao, unsafe_allow_html=True) col1, col2 = st.columns(2) with col1: st.header('Sazonal') plot = plot_soi_season() st_pyecharts(plot, height="500px", width="100%") with col2: st.header('Mensal') plot = plot_soi() st_pyecharts(plot, height="500px", width="100%") # Mapas if component == 'Mapas e índices diários': st.title('Mapas de diários de temperatura da superífice do mar (TSM), anomalia da temperatura da superífice do mar e tendência da TSM nos últimos 7 dias') descricao = ''' Fonte: Coral Reef Watch.
''' st.write(descricao, unsafe_allow_html=True) st.info('Clique ao lado da figura para ampliar seu tamanho') fmt = '%Y%m%d' now = datetime.now() now_1day = now - timedelta(days=1) now_1day_fmt = now_1day.strftime(fmt) now_2day = now - timedelta(days=2) now_2day_fmt = now_2day.strftime(fmt) data_escolhida_tsm = st.date_input('Escolha ou digite a data desejada', now_1day, max_value=now_1day, key='tsm') data_escolhida_tsm_fmt = data_escolhida_tsm.strftime(fmt) data_escolhida_tsm_year_fmt = data_escolhida_tsm.year col1, col2, col3 = st.columns(3) with col1: st.header('Temperatura') url = f'https://www.star.nesdis.noaa.gov/pub/sod/mecb/crw/data/5km/v3.1_op/image_browse/daily/sst/png/{data_escolhida_tsm_year_fmt}/coraltemp_v3.1_global_{data_escolhida_tsm_fmt}.png' response = requests.get(url) if response.status_code == 200: st.image(f'https://www.star.nesdis.noaa.gov/pub/sod/mecb/crw/data/5km/v3.1_op/image_browse/daily/sst/png/{data_escolhida_tsm_year_fmt}/coraltemp_v3.1_global_{data_escolhida_tsm_fmt}.png') else: st.image(f'https://www.star.nesdis.noaa.gov/pub/sod/mecb/crw/data/5km/v3.1_op/image_browse/daily/sst/png/{data_escolhida_tsm_year_fmt}/coraltemp_v3.1_global_{now_2day_fmt}.png') with col2: st.header('Anomalia') url = f'https://www.star.nesdis.noaa.gov/pub/sod/mecb/crw/data/5km/v3.1_op/image_browse/daily/ssta/png/{data_escolhida_tsm_year_fmt}/ct5km_ssta_v3.1_global_{data_escolhida_tsm_fmt}.png' response = requests.get(url) if response.status_code == 200: st.image(f'https://www.star.nesdis.noaa.gov/pub/sod/mecb/crw/data/5km/v3.1_op/image_browse/daily/ssta/png/{data_escolhida_tsm_year_fmt}/ct5km_ssta_v3.1_global_{data_escolhida_tsm_fmt}.png') else: st.image(f'https://www.star.nesdis.noaa.gov/pub/sod/mecb/crw/data/5km/v3.1_op/image_browse/daily/ssta/png/{data_escolhida_tsm_year_fmt}/ct5km_ssta_v3.1_global_{now_2day_fmt}.png') with col3: st.header('Tendência') url = f'https://www.star.nesdis.noaa.gov/pub/sod/mecb/crw/data/5km/v3.1_op/image_browse/daily/sst-trend-7d/png/{data_escolhida_tsm_year_fmt}/ct5km_sst-trend-7d_v3.1_global_{data_escolhida_tsm_fmt}.png' response = requests.get(url) if response.status_code == 200: st.image(f'https://www.star.nesdis.noaa.gov/pub/sod/mecb/crw/data/5km/v3.1_op/image_browse/daily/sst-trend-7d/png/{data_escolhida_tsm_year_fmt}/ct5km_sst-trend-7d_v3.1_global_{data_escolhida_tsm_fmt}.png') else: st.image(f'https://www.star.nesdis.noaa.gov/pub/sod/mecb/crw/data/5km/v3.1_op/image_browse/daily/sst-trend-7d/png/{data_escolhida_tsm_year_fmt}/ct5km_sst-trend-7d_v3.1_global_{now_2day_fmt}.png') st.title('Índices diários da anomalia de temperatura da superífice do mar para regiões do ENSO.') days = 1800 tab1, tab2, tab3, tab4 = st.tabs(['Niño 1+2', 'Niño 3', 'Niño 3.4', 'Niño 4']) with tab1: plot = plot_daily_ssta('nino12', days) st_pyecharts(plot, height="500px", width="100%") with tab2: plot = plot_daily_ssta('nino3', days) st_pyecharts(plot, height="500px", width="100%") with tab3: plot = plot_daily_ssta('nino34', days) st_pyecharts(plot, height="500px", width="100%") with tab4: plot = plot_daily_ssta('nino4', days) st_pyecharts(plot, height="500px", width="100%") # if component == 'NOAA/CPC/NCEP': # st.title('Apresentação da NOAA/CPC/NCEP a respeito das condições de ENSO observadas semanalmente') # components.iframe('https://docs.google.com/presentation/d/e/2PACX-1vRTlPQuAwEDdVyjkwCwYabSuqL30Xfir6RVdYURyhlxd6-5fVhfEccAc-dXWmG2JA/embed?start=false&loop=false&delayms=3000', height=500) if component == 'Previsão POAMA': # Figuras de previsão st.title('Previsão dos modelos para de anomalia a TSM na região 3.4') descricao = ''' Fonte: Poama
''' st.write(descricao, unsafe_allow_html=True) st.write('Última inicialização: 14 Agosto 2023', unsafe_allow_html=True) tab1, tab2, tab3, tab4, tab5 = st.tabs(['Mês 1', 'Mês 2', 'Mês 3', 'Mês 4', 'Mês 5']) with tab1: st.image('https://github.com/josepaulo1233/enso-assets/blob/main/imgs/poama_model_lead1.png?raw=true') with tab2: st.image('https://github.com/josepaulo1233/enso-assets/blob/main/imgs/poama_model_lead2.png?raw=true') with tab3: st.image('https://github.com/josepaulo1233/enso-assets/blob/main/imgs/poama_model_lead3.png?raw=true') with tab4: st.image('https://github.com/josepaulo1233/enso-assets/blob/main/imgs/poama_model_lead4.png?raw=true') with tab5: st.image('https://github.com/josepaulo1233/enso-assets/blob/main/imgs/poama_model_lead5.png?raw=true') # Gráfico import pandas as pd st.title('Anomalia de TSM e probabilidade do ENSO') descricao = ''' Previsão de anomalia de TSM e probabilidades da temperatura estar acima de +0.8°C (vermelho), em condições de neutralidade (verde), e abaixo de -0.8°C (azul) na região do Niño 3.4. Mais informações sobre a previsão do centro Australiano (POAMA).
''' st.write(descricao, unsafe_allow_html=True) url = 'http://www.bom.gov.au/climate/ocean/outlooks/archive/20230812//plumes/sstOutlooks.nino34.hr.png' last_update = pd.to_datetime(url.split('/')[7], format='%Y%m%d') last_update = last_update.strftime('%B %d, %Y') st.write(f'Última atualização: {last_update}', unsafe_allow_html=True) plot = plot_poama() st_pyecharts(plot, height="300px", width="100%") if component == 'Previsão CPC/IRI': st.title('Previsão do CPC/IRI para a anomalia de TSM na região do Niño 3.4', anchor=False) descricao = ''' Dados fornecidos por The International Research Institute for Climate and Society, Columbia University Climate School
''' st.write(descricao, unsafe_allow_html=True) st.write(f'Última atualização: {header}', unsafe_allow_html=True) dicas = ''' Dicas: Passe o mouse sobre a legenda para destacar a previsão de determinado modelo ou clique para remover. ''' tab1, tab2, tab3, tab4 = st.tabs(['Modelos dinâmicos', 'Modelos estatisticos', 'Todos modelos', 'Previsão de concenso']) with tab1: plot = plot_cpc_iri_dinamico() st_pyecharts(plot, height="500px", width="100%", key='dinamico') st.info(dicas, icon="ℹ️") with tab2: plot = plot_cpc_iri_estatistico() st_pyecharts(plot, height="500px", width="100%", key='estatistico') st.info(dicas, icon="ℹ️") with tab3: plot = plot_cpc_iri_todos() st_pyecharts(plot, height="500px", width="100%", key='todos') st.info(dicas, icon="ℹ️") with tab4: plot = plot_iri_concenso() st_pyecharts(plot, height="500px", width="100%", key='concenso') st.info('Dicas: Clique na legenda para remover alguma barra', icon="ℹ️")