This is the complete application code:
import streamlit as st
import pandas as pd
import numpy as np
#carrega arquivos
from datetime import datetime
#CABEÇAHO PRINCIPAL
st.title(‘DATA WARINGLING de dados METEOROLÓGICOS’)
#--------------------------------------------------------
#seleciona um conjunto de dados + Retornar um Dataframe
#--------------------------------------------------------
data_e_hora_atuais = datetime.now()
data_e_hora_em_texto = data_e_hora_atuais.strftime(’%d/%m/%Y %H:%M’)
st.write(data_e_hora_em_texto)
st.warning(‘Atenção, selecione o separador correto do seu arquivo CSV’)
option = st.selectbox(
‘Clique e selecione’,
(’,’, ‘;’, ‘/’))
uploaded_file = st.file_uploader("Buscar arquivo CSV ", type=“csv”, encoding=‘utf8’)
if uploaded_file is not None:
data = pd.read_csv(uploaded_file,sep=option)
data['Data'] = pd.to_datetime(data['Data'])
data.index = pd.DatetimeIndex(data['Data'])
del data['Data']
df = data[['Precipitacao','TempMaxima','TempMinima','Insolacao', 'VelocidadeVento']]
if st.checkbox('Mostrar seus dados'):
st.subheader('Dados')
st.write('Você selecionou:[', option,']')
st.write(data)#IMprime o dataframe
st.write('TOTAL de **colunas:**',data.shape[1] ,'TOTAL de **linhas**',data.shape[0])
#--------------------------------------------------------
#Informações basicas dos dados
#--------------------------------------------------------
#st.subheader('** Estatística descritiva**')
if uploaded_file is not None:
if st.checkbox(‘Visualizar informações básicas’):
#st.write("**_________________________ ____ ____________**")
st.info( """ # Informações básicas
Estatística descritiva (cont,media, desvio padrão e quartis) """ )
#st.write("**Visualizar estatística descritiva dos *dados brutos* **")
colunas = st.selectbox("Selecione uma colunas", df.columns)
if st.checkbox("Mostrar todos"):
st.write(df.describe())
elif colunas =='TempMaxima':
st.write(df.TempMaxima.describe())
st.write('Total de Dados **ausentes**',df['TempMaxima'].isna().sum())
elif colunas =='TempMinima':
st.write(df.TempMinima.describe())
st.write('Total de Dados **ausentes**',df['TempMinima'].isna().sum())
elif colunas =='Precipitacao':
st.write(df.Precipitacao.describe())
st.write('Total de Dados **ausentes**',df['Precipitacao'].isna().sum())
elif colunas =='Insolacao':
st.write(df.Insolacao.describe())
st.write('Total de Dados **ausentes**',df['Insolacao'].isna().sum())
elif colunas =='Velocidade_do_Vento_Media':
st.write(df.Velocidade_do_Vento_Media.describe())
st.write('Total de Dados **ausentes**',df['VelocidadeVento'].isna().sum())
import plotly.express as px
def temp_min_conf(parametro,dataframe):
min_min = minimum[0]
min_max = minimum[1]
Temp_mim_err = df[df.TempMinima.lt(min_min) | df.TempMinima.ge(min_max)]
if Temp_mim_err[‘TempMinima’].count() == 0:
return st.warning(‘Não há registro com Temperatura Minima nenor ou Superior a selecionada’)
elif Temp_mim_err[‘TempMinima’].count() > 0:
return st.write(‘Estes foram os dias com Temperatura Mínima menor que’,min_min,’** °C ** e maior que’,min_max,’ ** °C ** Total de:’,df.TempMinima[df.TempMinima.lt(min_min) | df.TempMaxima.ge(min_max)].count(),‘regitros’,df[df.TempMinima.lt(min_min) | df.TempMinima.ge(min_max)& df.TempMinima.notnull()])
def temp_max_conf(parametro, dataframe):
max_min= maximum[0]
max_max = maximum[1]
Temp_max_err = df[df.TempMaxima.lt(max_min) | df.TempMaxima.ge(max_max)]
if Temp_max_err[‘TempMaxima’].count() == 0:
return st.warning(‘Não há registro com Temperatura Máxima menor ou Superior a selecionada’)
elif Temp_max_err[‘TempMaxima’].count() > 0:
return st.write(‘Estes foram os dias com Temperatura Máxima abaixo de’,max_min,’** °C ** ou acima de’,max_max,’ ** °C ** Total de:’,df.TempMaxima[df.TempMaxima.lt(max_min) | df.TempMaxima.ge(max_max)].count(),‘regitros’,df[df.TempMaxima.lt(max_min) | df.TempMaxima.ge(max_max)& df.TempMaxima.notnull()])
def precip_conf(parametro,dataframe):
Prec_err = df[df.Precipitacao.lt(0) | df.Precipitacao.ge(preci_min)]
if Prec_err.Precipitacao.count() == 0:
return st.write(‘Não há registro com Precipitação acima de’,preci_min )
elif Prec_err.Precipitacao.count() > 0:
return st.write(‘Estes foram os dias com Precipitação acima de’,preci_min,‘Total de:’,Prec_err.Precipitacao.count(),df[df.Precipitacao.lt(0) | df.Precipitacao.ge(preci_min) & df.Precipitacao.notnull()])
return st.warning(‘Dados abaixo de 0(zero), será considerado anomalia’)
if Prec_err.Precipitacao.count() < 0:
return st.write(df[df.Precipitacao.lt(0)])
def insol_conf (parametro,dataframe):
min_min = inso_min[0]
min_max = inso_min[1]
Inso_err = df[df.Insolacao.lt(min_min) | df.Insolacao.ge(min_max)& df.Insolacao.notnull()]
if Inso_err[‘Insolacao’].count() == 0:
return st.warning(‘Não há registro no Intervalo selecionado’)
elif Inso_err[‘Insolacao’].count() > 0:
return st.write(‘Estes foram os dias com Insolação inferior a’,min_min,’ ou maior que’,min_max,’ Total de:’,df.Insolacao[df.Insolacao.lt(min_min) | df.Insolacao.ge(min_max)].count(),‘regitros’,df[df.Insolacao.lt(min_min) | df.Insolacao.ge(min_max) & df.Insolacao.notnull()])
def vel_vento_conf (parametro,dataframe):
min_min = vent[0]
min_max = vent[1]
Inso_err = df[df.VelocidadeVento.lt(min_min) | df.VelocidadeVento.ge(min_max)]
if Inso_err[‘VelocidadeVento’].count() == 0:
return st.warning(‘Não há registro no Intervalo selecionado’)
return st.warning(‘Valores abaixo de 0(zero) será considerado anomalia de dados’)
elif Inso_err[‘VelocidadeVento’].count() > 0:
return st.write(‘Estes foram os dias com VelocidadeVento inferior a’,min_min,’ ou maior que’,min_max,’ Total de:’,df.VelocidadeVento[df.VelocidadeVento.lt(min_min) | df.VelocidadeVento.ge(min_max)].count(),‘regitros’,df[df.VelocidadeVento.lt(min_min) | df.VelocidadeVento.ge(min_max)& df.VelocidadeVento.notnull()])
def atribui_nan (resposta,dataframe,maximum,minimum,preci_min,inso_min,vent):
if resposta =='sim':
df.loc[df['TempMinima'].lt(minimum[0])]= np.NaN
df.loc[df['TempMinima'].ge(minimum[1])]= np.NaN
df.loc[df['TempMaxima'].lt(maximum[0])]= np.NaN
df.loc[df['TempMaxima'].ge(maximum[1])]= np.NaN
df.loc[df['Precipitacao'].ge(preci_min)]= np.NaN
df.loc[df['Precipitacao'].lt(0)]= np.NaN
df.loc[df['VelocidadeVento'].ge(vent[1])]= np.NaN
df.loc[df['VelocidadeVento'].lt(vent[0])]= np.NaN
df.loc[df['Insolacao'].ge(inso_min[1])]= np.NaN
df.loc[df['Insolacao'].lt(inso_min[0])]= np.NaN
return df
elif resposta =='não':
return st.warning('Confira os parâmetros e aplique as correções')
#--------------------------------------------------------
#Identificação de Ruidos
#--------------------------------------------------------
if uploaded_file is not None:
if st.checkbox(‘Identificação de possíveis erros’):
#st.subheader(’** Anomalia nos dados**’)
st.warning( “”" # Identificar anomalia nos dados
Configurar parâmetros para:
TempMax + TempMim + Precipitação + Insolação + Veloc.Vento
1° deverá ajustar os valores permitidos.
2° seram considerados anormais os valores:
abaixo ou acima do selecionado
3° configure todos marcadores
4º marque o botão 'sim' se os parametros estiverem corretos
""" )
''' -----------'''
#widget para configuração
#temperatura minima slider
‘’’### Configure Temperatura mínima’’’
minimum=st.slider(‘Filtrar temperatura mínima abaixo de – ou acima de --’, -10, 30, (-10, 30))
temp_min_conf(minimum,df)
#temperatura maxima
'''### Configure Temperatura máxima'''
maximum = st.slider('Filtrar Temperatura máxima abaixo de-- ou acima de--', 10, 50, (10, 50))
temp_max_conf(maximum,df)
#precipitação
'''### Configure Precipitaçao'''
preci_min = st.slider('Filtrar Precipitação acima de:', 0, 300)
precip_conf(preci_min,df)
#Insolação
'''### Configure Insolação'''
inso_min = st.slider('Filtrar Insolação abaixo de-- ou acima de', 0, 40, (0, 40))
insol_conf(inso_min, df)
#Velocidade do vento
'''### Configure Velocidade do vento'''
vent = st.slider('Filtrar Velocidade do vento abaixo de-- ou acima de', 0, 40, (0, 40))
vel_vento_conf(vent,df)
df1=df
#Confirmação para alteração nos dados
‘’’------------’’’
‘’’** Confirme as alterações**’’’
resposta =st.radio("Tem certeza que os parametros acima estão corretos?",('não', 'sim'))
atribui_nan(resposta,df,maximum,minimum,preci_min,inso_min,vent)
'''------------'''
#----------------------------------------------------------------------------
#Confirmação para alteração nos dados
#----------------------------------------------------------------------------
if uploaded_file is not None:
if st.checkbox('Dados ausentes'):
st.info( """ # Contador de dados ausentes
Dados inexistentes serão preenchidos através de interpolação polinomial
""" )
st.write('Total de registros',df.shape[0])
st.write("total de valores ausentes",df.isna().sum())
nulos=df.isna().sum()
y = nulos.to_list()
x1= df.columns
x = x1.to_list()
import plotly.express as px
data_canada = x1
fig = px.bar(data_canada,x,y)
fig.update_layout(
title="Valores ausentes da base de dados",
xaxis_title="Variáveis climáticas",
yaxis_title="Total de dados ausentes",
font=dict(
family="Courier New, monospace",
size=18,
color="#000000"
))
st.plotly_chart(fig, use_container_width=True,title='Quantidade de valores ausentes')
if uploaded_file is not None:
if st.checkbox('Interpolar Dados ausentes'):
st.info( """ # Interpolação
Dados inexistentes serão preenchidos através de interpolação polinomial
""" )
st.write(df)
if st.button('Interpolar'):
#interpolar
df = df.interpolate(method='linear')
st.write(df)
if df['TempMaxima'].isna().sum() == 0:
import time
st.write('Total de Dados **ausentes**',df.isna().sum())
with st.spinner('Wait for it...'):
time.sleep(5)
st.success('Feito! Dr. Rivanildo')
st.balloons()
import plotly.express as px
nulos=df.isna().sum()
y = nulos.to_list()
x1= df.columns
x = x1.to_list()
#
data_canada = x1
fig = px.bar(data_canada,x,y)
fig.update_layout(
title="Valores ausentes da base de dados",
xaxis_title="Variáveis climáticas",
yaxis_title="Total de dados ausentes",
font=dict(
family="Courier New, monospace",
size=18,
color="#000000"
))
st.plotly_chart(fig, use_container_width=True,title='Quantidade de valores ausentes')
st.balloons()
#metodo configra temperatura minima
This is a piece of data
Estacao,Data,Hora,Precipitacao,TempMaxima,TempMinima,Insolacao,Evaporacao_Piche,Temp_Comp_Media,Umidade_Relativa_Media,VelocidadeVento
83214,1/2/1990,0,0,32,24,2,1
83214,1/3/1990,0,0,
83214,1/4/1990,0,2.2,
83214,1/5/1990,0,9.8,
83214,1/6/1990,0,2.1,
83214,1/7/1990,0,2.1,
83214,1/8/1990,0,2.1,
83214,1/9/1990,0,2.1,
83214,1/11/1990,0,2,
Python 3.7.4
docutils-0.15.2 streamlit-0.58.0 tornado-5.1.1