import streamlit as st import pandas as pd import matplotlib.pyplot as plt import seaborn as sns df_diamonds = pd.read_csv('diamonds.csv') df_diamonds = df_diamonds.drop(["Unnamed: 0"], axis=1) st.title('Diamond selecting APP') # Users set the price range min_price = st.number_input('Input minimum price', min_value=int(df_diamonds['price'].min()), max_value=int(df_diamonds['price'].max()), value=int(df_diamonds['price'].min())) max_price = st.number_input('Input maximum price', min_value=min_price, max_value=int(df_diamonds['price'].max()), value=int(df_diamonds['price'].max())) # Select the diamonds cuts = st.multiselect('Select cut', df_diamonds['cut'].unique()) colors = st.multiselect('Select color', df_diamonds['color'].unique()) clarities = st.multiselect('Select clarity', df_diamonds['clarity'].unique()) if st.button('Reset'): cuts = [] colors = [] clarities = [] min_price = int(df_diamonds['price'].min()) max_price = int(df_diamonds['price'].max()) # Filter the diamonds filtered_diamonds = df_diamonds[(df_diamonds['price'] >= min_price) & (df_diamonds['price'] <= max_price)] if cuts: filtered_diamonds = filtered_diamonds[filtered_diamonds['cut'].isin(cuts)] if colors: filtered_diamonds = filtered_diamonds[filtered_diamonds['color'].isin(colors)] if clarities: filtered_diamonds = filtered_diamonds[filtered_diamonds['clarity'].isin(clarities)] # Check if there is data to plot if not filtered_diamonds.empty: # Create a scatterplot based on the selected criteria fig, ax = plt.subplots() sns.scatterplot(x='carat', y='price', data=filtered_diamonds, ax=ax) ax.set_title('Prices by Carat') st.pyplot(fig) else: st.write("No diamonds fit the selected criteria.") # Display a scrollable table with the total information based on the selected criteria st.write("Total Information:") st.dataframe(filtered_diamonds)