import streamlit as st
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import numpy as np
### CONFIG
st.set_page_config(
page_title="Air-Quality",
page_icon="🌡️",
layout="wide"
)
### TITLE AND TEXT
st.title("Air Quality.")
@st.cache # this lets the
def def_load():
df = pd.read_csv('AirQuality.xls', sep=';')
df.dropna(axis=0, how='all', inplace=True)
df = df.iloc[:,0:-2] # Two col unnamed are dropped
# Concaténer les colonnes "Date" et "Time" en une seule colonne "Datetime"
df["Datetime"] = pd.to_datetime(df["Date"] + " " + df["Time"], format="%d/%m/%Y %H.%M.%S")
# Supprimer les anciennes colonnes si besoin
df.drop(columns=["Date", "Time"], inplace=True)
for col in df.columns[:-2]:
if df[col].dtype == 'object':
df[col] = df[col].map(lambda x: x.replace(',', '.')).astype(float)
return df
data_load_state = st.text('Loading data...')
data = def_load()
data_load_state.text("") # change text from "Loading data..." to "" once the the load_data function has run
## Run the below code if the check is checked ✅
if st.checkbox('Show raw data'):
st.subheader('Raw data')
st.write(data)
# col1, col2 = st.columns(2)
# with col1:
# a = 5
# st.write(a)
# with col2:
# with st.form("average_sales_per_country"):
# submit = st.form_submit_button("submit")
# if submit:
# a += 1
# # a = 10
# st.write(a)
#### CREATE TWO COLUMNS
col1, col2 = st.columns(2)
# Initialize plot_data with all data
plot_data = data.copy()
# Define the form first, so we can use the results in both columns
with col2:
st.markdown("**2️⃣ Example of input form**")
with st.form("average_sales_per_country"):
start_period = st.date_input("Select a start date you want to see your metric")
end_period = st.date_input("Select an end date you want to see your metric")
submit = st.form_submit_button("submit")
# Create the mask when form is submitted
if submit:
start_period, end_period = pd.to_datetime(start_period), pd.to_datetime(end_period)
mask = (data["Datetime"] > start_period) & (data["Datetime"] < end_period)
plot_data = data[mask]
st.write(f"Points in selected range: {mask.sum()}")
# Now use plot_data (which may be filtered) for plotting
with col1:
st.markdown("** Example of input widget**")
df = plot_data.copy() # Use plot_data instead of data
if df['T'].dtype == 'object':
df['T'] = df['T'].map(lambda x: x.replace(',', '.')).astype(float)
T_mask = df['T'] > 0
if df['RH'].dtype == 'object':
df['RH'] = df['RH'].map(lambda x: x.replace(',', '.')).astype(float)
RH_mask = df['RH'] > 0
# Create figure with secondary y-axis
fig = make_subplots(specs=[[{"secondary_y": True}]])
# Add traces
fig.add_trace(
go.Line(x=df['Datetime'], y=df['T'][T_mask], name="T(°C)"),
secondary_y=False,
)
fig.add_trace(
go.Line(x=df['Datetime'], y=df['RH'][RH_mask], name="H(%)."),
secondary_y=True,
)
# Add figure title
fig.update_layout(
title_text="Temperature and Humidity "
)
# Set x-axis title
fig.update_xaxes(title_text="Time --->")
# Set y-axes titles
fig.update_yaxes(title_text="Temperature (°C)", secondary_y=False)
fig.update_yaxes(title_text="Humidity(%)", secondary_y=True)
st.plotly_chart(fig, use_container_width=True)
pol = st.selectbox("Select a c", data.drop(["Datetime", "T", "RH", 'AH'], axis=1).columns)
# st.markdown("""
# Welcome to this awesome `streamlit` dashboard. This library is great to build very fast and
# intuitive charts and application running on the web. Here is a showcase of what you can do with
# it. Our data comes from an e-commerce website that simply displays samples of customer sales. Let's check it out.
# Also, if you want to have a real quick overview of what streamlit is all about, feel free to watch the below video 👇
# """)
# @st.cache # this lets the
# def load_data(nrows):
# data = pd.read_csv(DATA_URL, nrows=nrows)
# data["Date"] = data["Date"].apply(lambda x: pd.to_datetime(",".join(x.split(",")[-2:])))
# data["currency"] = data["currency"].apply(lambda x: pd.to_numeric(x[1:]))
# return data
# data_load_state = st.text('Loading data...')
# data = load_data(1000)
# data_load_state.text("") # change text from "Loading data..." to "" once the the load_data function has run
# ## Run the below code if the check is checked ✅
# if st.checkbox('Show raw data'):
# st.subheader('Raw data')
# st.write(data)
# ### SIDEBAR
# st.sidebar.header("Build dashboards with Streamlit")
# st.sidebar.markdown("""
# * [Load and showcase data](#load-and-showcase-data)
# * [Charts directly built with Streamlit](#simple-bar-chart-built-directly-with-streamlit)
# * [Charts built with Plotly](#simple-bar-chart-built-with-plotly)
# * [Input Data](#input-data)
# """)
# e = st.sidebar.empty()
# e.write("")
# st.sidebar.write("Made with 💖 by [Jedha](https://jedha.co)")
# ### EXPANDER
# with st.expander("⏯️ Watch this 15min tutorial"):
# st.video("https://youtu.be/B2iAodr0fOo")
# st.markdown("---")
# #### CREATE TWO COLUMNS
# col1, col2 = st.columns(2)
# with col1:
# st.markdown("First column")
# country = st.selectbox("Select a country you want to see all time sales", data["country"].sort_values().unique())
# with col2:
# st.markdown("Second column")
# with st.form("average_sales_per_country"):
# country = st.selectbox("Select a country you want to see sales", data["country"].sort_values().unique())
# start_period = st.date_input("Select a start date you want to see your metric")
# end_period = st.date_input("Select an end date you want to see your metric")
# submit = st.form_submit_button("submit")