Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import pandas as pd | |
| import seaborn as sns | |
| import matplotlib.pyplot as plt | |
| from pathlib import Path | |
| st.title("Penguin Dataset Explorer with Seaborn") | |
| # Load the dataset | |
| # Determine the absolute path to the CSV file | |
| csv_path = Path(__file__).parent / "penguins.csv" | |
| # Read the CSV file | |
| df = pd.read_csv(csv_path) | |
| # Sidebar filters | |
| st.sidebar.header("Filters") | |
| species_filter = st.sidebar.multiselect( | |
| "Select Species", | |
| options=df["species"].unique(), | |
| default=df["species"].unique() | |
| ) | |
| sex_filter = st.sidebar.multiselect( | |
| "Select Sex", | |
| options=df["sex"].unique(), | |
| default=df["sex"].unique() | |
| ) | |
| # Data Filtering | |
| df_filtered = df[df["species"].isin(species_filter)] | |
| df_filtered = df_filtered[df_filtered["sex"].isin(sex_filter)] | |
| # Display data | |
| st.subheader("Filtered Penguin Data") | |
| st.dataframe(df_filtered.sample(10)) | |
| # Plotting options | |
| st.subheader("Visualizations") | |
| if not df_filtered.empty: | |
| st.write("---") | |
| # Histogram of bill length | |
| st.subheader("Bill Length Distribution") | |
| fig_bill_length = plt.figure() | |
| sns.histplot(df_filtered["bill_length_mm"], kde=True) | |
| plt.xlabel("Bill Length (mm)") | |
| plt.ylabel("Frequency") | |
| plt.title("Bill Length Distribution of Penguins") | |
| st.pyplot(fig_bill_length) | |
| st.write("---") | |
| # Scatter plot of bill length vs. flipper length | |
| st.subheader("Bill Length vs. Flipper Length") | |
| fig_bill_flipper = plt.figure() | |
| sns.scatterplot(x="bill_length_mm", y="flipper_length_mm", data=df_filtered) | |
| plt.xlabel("Bill Length (mm)") | |
| plt.ylabel("Flipper Length (mm)") | |
| plt.title("Bill Length vs Flipper Length") | |
| st.pyplot(fig_bill_flipper) | |
| st.write("---") | |
| # Boxplot of bill length by species | |
| st.subheader("Bill Length by Species") | |
| fig_bill_species = plt.figure() | |
| sns.boxplot(x="species", y="bill_length_mm", data=df_filtered) | |
| plt.xlabel("Species") | |
| plt.ylabel("Bill Length (mm)") | |
| plt.title("Bill Length by Species") | |
| st.pyplot(fig_bill_species) | |
| else: | |
| st.warning("No data to display after applying filters. Adjust filters or the dataset.") | |
| st.sidebar.markdown("Data Source: [Seaborn Penguin Dataset](https://seaborn.pydata.org/tutorial/penguins.html)") |