diff --git a/Home.py b/Home.py index 016b81f..6c07bfa 100644 --- a/Home.py +++ b/Home.py @@ -1,4 +1,7 @@ import streamlit as st +import pandas as pd +import time +import plotly.express as px # Configure the page with a modern theme and a custom icon st.set_page_config( @@ -7,10 +10,26 @@ layout="wide", initial_sidebar_state="expanded", ) - # Adding selectboxes for user customization + # Sidebar content with advanced layout +st.markdown( + """ + + """, + unsafe_allow_html=True +) +# Sidebar content with user customization options with st.sidebar: mining_importance = st.selectbox( "🔧 **Select Mining Site Importance Level**", @@ -20,9 +39,14 @@ "🌐 **Filter Sites by Distance**", options=["< 100 light years", "100-500 light years", "500-1000 light years", "> 1000 light years"] ) - outlier_sensitivity = st.selectbox( + outlier_sensitivity = st.slider( "🔍 **Adjust Sensitivity for Outlier Detection**", - options=["Low", "Medium", "High"] + min_value=0, max_value=100, value=50 + ) + mining_site_types = st.multiselect( + "🏔️ **Select Mining Site Types**", + options=["Asteroid", "Moon", "Planet", "Comet"], + default=["Asteroid", "Planet"] ) st.title("🪐 **Galactic Mining Hub**") st.subheader("Deep dive into the infinite cosmic sea!") @@ -73,6 +97,74 @@ unsafe_allow_html=True ) +tab1, tab2, tab3 = st.tabs(["Overview", "Prediction Model", "Visualizations"]) + +with tab1: + st.markdown( + """ +
+

🛰️ Galactic Mining Hub

+

Explore, Analyze, and Discover Cosmic Mining Sites with Advanced AI

+
+ """, + unsafe_allow_html=True + ) + st.divider() + st.markdown( + """ + **Welcome to the Galactic Mining Hub**, where Machine Learning meets space exploration! + """ + ) + +with tab2: + st.header("🚀 Prediction Model") + st.markdown("Engage with predictive analysis to identify the best mining sites.") + if st.button("Run Prediction Model"): + with st.spinner("Running the model, please wait..."): + time.sleep(2) # Simulate a long-running task + st.success("Model prediction completed!") + + # Sample results for demonstration purposes + results_df = pd.DataFrame({ + 'Mining Site': ['Site A', 'Site B', 'Site C'], + 'Predicted Value': [0.85, 0.78, 0.92] + }) + st.write(results_df) + + # Button to download the DataFrame as CSV + csv = results_df.to_csv(index=False).encode('utf-8') + st.download_button( + label="📥 Download Results as CSV", + data=csv, + file_name='mining_site_predictions.csv', + mime='text/csv' + ) + +with tab3: + st.header("📈 Cutting-Edge Visualizations") + st.markdown("Explore the data through a range of interactive visualizations.") + + # Sample data for visualization + data = pd.DataFrame({ + 'Distance (light years)': [50, 150, 300, 750, 1200], + 'Mining Importance': ['Low', 'Medium', 'High', 'Critical', 'Medium'], + 'Feasibility Score': [0.2, 0.6, 0.8, 0.95, 0.5] + }) + + # Interactive scatter plot using Plotly + fig = px.scatter( + data, + x='Distance (light years)', + y='Feasibility Score', + color='Mining Importance', + title="Mining Site Feasibility Analysis", + labels={"Feasibility Score": "Feasibility", "Distance (light years)": "Distance"} + ) + st.plotly_chart(fig) + +# Footer +st.markdown("---") +st.markdown("**Ready to embark on your cosmic journey?** Use the sidebar to navigate through the hub’s capabilities and start your exploration!") st.divider() # Information and interactive section diff --git a/visualize.py b/visualize.py index d727505..467fd11 100644 --- a/visualize.py +++ b/visualize.py @@ -3,22 +3,35 @@ import matplotlib.pyplot as plt import seaborn as sns +# Set the title and icon of the Streamlit page st.set_page_config(page_title="Mining Site Visualization", page_icon="🔍") def load_data(): - # Load the dataset - data = pd.read_csv("space_mining_dataset.csv") - return data - + #Load the dataset from CSV and handle errors if the file is not found. + try: + data = pd.read_csv("space_mining_dataset.csv") + return data + except FileNotFoundError: + st.error("Dataset file not found. Please upload the correct file.") + return pd.DataFrame() + def show_visualize_page(): + #Main function to show the visualization page. st.title("Mining Site Visualization") st.write("Explore different visualizations to understand the dataset and the impact of user preferences.") data = load_data() + if data.empty: + return # Check available columns in the dataset st.write("Available Columns:", data.columns) + required_columns = ['iron', 'nickel', 'water_ice', 'other_minerals', 'sustainability_index', 'distance_from_earth'] + if not all(col in data.columns for col in required_columns): + st.error(f"Dataset must contain the following columns: {', '.join(required_columns)}") + return + # If 'final_score' does not exist, calculate it based on other features if 'final_score' not in data.columns: st.write("The 'final_score' column does not exist, calculating it based on weights.") @@ -52,16 +65,20 @@ def show_visualize_page(): # Use a more colorful palette for the histogram sns.histplot(data[feature], bins=20, kde=True, ax=ax, color='teal') ax.set_xlabel(feature) + ax.set_title(f"Distribution of {feature}") st.pyplot(fig) # Visualization 2: Pairplot of Selected Features st.subheader("Pairplot of Selected Features") features = st.multiselect("Select Features for Pairplot", data.columns[1:]) # Exclude non-numeric columns if necessary if len(features) > 1: - fig, ax = plt.subplots() + if len(features) > 4: + st.warning("Select up to 4 features for pairplot for better performance.") + else: + fig, ax = plt.subplots() # Customizing pairplot with a color palette - pairplot_fig = sns.pairplot(data[features + ['final_score']], diag_kind='kde', hue='final_score', palette="coolwarm") + spairplot_fig = sns.pairplot(data[features + ['final_score']], diag_kind='kde', hue='final_score', palette="coolwarm") st.pyplot(pairplot_fig.fig) else: st.write("Please select more than one feature.") @@ -73,9 +90,9 @@ def show_visualize_page(): corr_matrix = numeric_data.corr() # Displaying the heatmap - fig, ax = plt.subplots() + fig, ax = plt.subplots(figsize=(10, 8)) sns.heatmap(corr_matrix, annot=True, fmt=".2f", cmap="coolwarm", linewidths=0.5, ax=ax) - ax.set_title("Correlation Heatmap") + ax.set_title("Correlation Heatmap", fontsize=16) st.pyplot(fig) # Visualization 4: Boxplot of Feature Distribution by Category