""" GreenPath - AI & Data Analytics Platform for Reducing Shipment CO₂ Emissions Professional Streamlit Frontend with Eco-Friendly Design """ 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 requests import sys import os from datetime import datetime, timedelta import numpy as np # Add src directory to path sys.path.append(os.path.join(os.path.dirname(__file__), 'src')) from emissions.emission_calculator import EmissionCalculator, TransportMode from route_optimizer.green_route_optimizer import GreenRouteOptimizer # Page configuration st.set_page_config( page_title="GreenPath - CO₂ Emission Tracker", page_icon="🌱", layout="wide", initial_sidebar_state="expanded" ) # Custom CSS for eco-friendly theme st.markdown(""" """, unsafe_allow_html=True) # Initialize components @st.cache_resource def init_components(): calculator = EmissionCalculator() optimizer = GreenRouteOptimizer() return calculator, optimizer calculator, optimizer = init_components() # Header st.markdown("""

🌱 GreenPath

AI-Powered Platform for Reducing Shipment CO₂ Emissions

Designed by Sayed Mohd Zayeem Khateeb

""", unsafe_allow_html=True) # Sidebar with st.sidebar: # Custom GreenPath logo st.markdown("""

🌱 GreenPath

AI Emission Tracker

""", unsafe_allow_html=True) st.markdown("### 📍 Navigate") # Navigation with better visibility nav_options = { "🏠 Dashboard": "Dashboard", "🧮 Emission Calculator": "Emission Calculator", "🗺️ Route Optimizer": "Route Optimizer", "📊 Scenario Analysis": "Scenario Analysis", "📈 Analytics": "Analytics" } page = st.selectbox( "Choose a page:", options=list(nav_options.keys()), label_visibility="collapsed", key="navigation" ) st.markdown("---") st.markdown("### 🌍 Quick Stats") # Sample KPIs col1, col2 = st.columns(2) with col1: st.metric("CO₂ Saved", "2.4t", "↓ 22%") with col2: st.metric("Routes Optimized", "156", "↑ 15%") # Main content based on selected page if page == "🏠 Dashboard": st.markdown("## 📊 Emission Overview Dashboard") # Top KPIs col1, col2, col3, col4 = st.columns(4) with col1: st.markdown("""

12.5t

Total CO₂ Emissions

↓ 18% vs last month
""", unsafe_allow_html=True) with col2: st.markdown("""

22%

Emission Reduction

Green routes adopted
""", unsafe_allow_html=True) with col3: st.markdown("""

0.08

Avg. Emission/Shipment (kg)

Industry best practice
""", unsafe_allow_html=True) with col4: st.markdown("""

$1,250

Carbon Tax Savings

Monthly estimate
""", unsafe_allow_html=True) # Charts col1, col2 = st.columns(2) with col1: st.markdown("### 🚛 Emissions by Transport Mode") # Sample data for transport mode comparison modes_data = pd.DataFrame({ 'Transport Mode': ['Road Truck', 'Rail', 'Ship Container', 'Air Cargo'], 'CO₂ Emissions (kg)': [62, 22, 11, 602], 'Usage %': [45, 30, 20, 5] }) fig = px.bar( modes_data, x='Transport Mode', y='CO₂ Emissions (kg)', color='CO₂ Emissions (kg)', color_continuous_scale=['#2ECC71', '#E74C3C'], title="Emission Factors by Transport Mode" ) fig.update_layout(showlegend=False, height=400) st.plotly_chart(fig, use_container_width=True) with col2: st.markdown("### 📈 Emission Trends") # Sample trend data emissions_data = [15.2, 14.8, 13.9, 13.1, 12.8, 12.3, 11.9, 11.5, 12.5] dates = pd.date_range(start='2024-01-01', periods=len(emissions_data), freq='M') trend_data = pd.DataFrame({ 'Date': dates, 'Emissions (tonnes)': emissions_data, 'Target': [14.0] * len(emissions_data) }) fig = go.Figure() fig.add_trace(go.Scatter( x=trend_data['Date'], y=trend_data['Emissions (tonnes)'], mode='lines+markers', name='Actual Emissions', line=dict(color='#2ECC71', width=3) )) fig.add_trace(go.Scatter( x=trend_data['Date'], y=trend_data['Target'], mode='lines', name='Target', line=dict(color='#E74C3C', dash='dash') )) fig.update_layout(title="Monthly Emission Trends", height=400) st.plotly_chart(fig, use_container_width=True) elif page == "🧮 Emission Calculator": st.markdown("## 🧮 CO₂ Emission Calculator") st.markdown("Calculate CO₂ emissions using the formula: **CO₂ = Distance × Weight × EmissionFactor**") col1, col2 = st.columns([2, 1]) with col1: with st.form("emission_calculator"): st.markdown("### Input Parameters") col_a, col_b = st.columns(2) with col_a: distance = st.number_input("Distance (km)", min_value=0.1, value=500.0, step=10.0) weight = st.number_input("Weight (tonnes)", min_value=0.01, value=2.0, step=0.1) with col_b: transport_mode = st.selectbox( "Transport Mode", options=[mode.value for mode in TransportMode], format_func=lambda x: x.replace('_', ' ').title() ) calculate_btn = st.form_submit_button("🧮 Calculate Emissions", type="primary") if calculate_btn: try: # Convert string to TransportMode enum mode_mapping = { 'road_truck': TransportMode.ROAD_TRUCK, 'road_van': TransportMode.ROAD_VAN, 'rail': TransportMode.RAIL, 'air_cargo': TransportMode.AIR_CARGO, 'ship_container': TransportMode.SHIP_CONTAINER, 'ship_bulk': TransportMode.SHIP_BULK } if transport_mode in mode_mapping: mode = mode_mapping[transport_mode] else: mode = TransportMode(transport_mode) result = calculator.calculate_emissions(distance, weight, mode) st.success("✅ Calculation Complete!") # Results display col_r1, col_r2, col_r3 = st.columns(3) with col_r1: st.metric( "CO₂ Emissions", f"{result['co2_emissions_kg']:.2f} kg", f"{result['co2_emissions_tonnes']:.3f} tonnes" ) with col_r2: carbon_tax = calculator.calculate_carbon_tax_cost(result['co2_emissions_kg']) st.metric( "Carbon Tax Cost", f"${carbon_tax['carbon_tax_cost_usd']:.2f}", "@ $50/tonne CO₂" ) with col_r3: st.metric( "Emission Factor", f"{result['emission_factor']:.3f}", "kg CO₂/tonne-km" ) # Comparison with other modes st.markdown("### 🔄 Transport Mode Comparison") comparison_df = calculator.compare_transport_modes(distance, weight) fig = px.bar( comparison_df, x='transport_mode', y='co2_emissions_kg', color='co2_emissions_kg', color_continuous_scale=['#2ECC71', '#E74C3C'], title="CO₂ Emissions by Transport Mode" ) fig.update_layout(height=400) st.plotly_chart(fig, use_container_width=True) st.dataframe(comparison_df, use_container_width=True) except Exception as e: st.error(f"❌ Calculation failed: {str(e)}") with col2: st.markdown("### 📋 Emission Factors") factors_df = calculator.get_emission_factors_table() st.dataframe(factors_df, use_container_width=True) st.markdown("### 🌱 Green Tips") st.info(""" **Reduce Emissions:** - Choose rail over road when possible - Use container ships for long distances - Optimize load capacity - Consider multimodal transport """) elif page == "🗺️ Route Optimizer": st.markdown("## 🗺️ Green Route Optimizer") st.markdown("Find the most eco-friendly routes for your shipments") with st.form("route_optimizer"): col1, col2 = st.columns(2) with col1: origin = st.text_input("Origin", value="New York, NY", placeholder="Enter origin city") destination = st.text_input("Destination", value="Los Angeles, CA", placeholder="Enter destination city") with col2: weight = st.number_input("Shipment Weight (tonnes)", min_value=0.01, value=5.0, step=0.1) max_time_penalty = st.slider("Max Time Penalty (%)", 0, 50, 10) optimize_btn = st.form_submit_button("🗺️ Find Green Routes", type="primary") if optimize_btn and origin and destination: with st.spinner("🔍 Finding optimal routes..."): try: # Get route recommendations recommendations = optimizer.recommend_green_routes(origin, destination, weight) if 'error' not in recommendations: st.success("✅ Route optimization complete!") route_data = recommendations['recommendations'] # Display recommendations st.markdown("### 🌱 Green Route Recommendations") for i, route in enumerate(route_data): with st.expander(f"Option {i+1}: {route['transport_mode'].replace('_', ' ').title()}", expanded=(i==0)): col_a, col_b, col_c, col_d = st.columns(4) with col_a: st.metric("CO₂ Emissions", f"{route['co2_emissions_kg']:.1f} kg") with col_b: st.metric("Travel Time", f"{route['estimated_travel_time_hours']:.1f} hrs") with col_c: st.metric("Carbon Tax", f"${route['carbon_tax_cost_usd']:.2f}") with col_d: if route['emission_reduction_percent'] > 0: st.metric("Emission Reduction", f"{route['emission_reduction_percent']:.1f}%", "vs worst option") else: st.metric("Emission Impact", "Baseline", "") if i == 0: st.markdown('🌱 RECOMMENDED', unsafe_allow_html=True) # Visualization if len(route_data) > 1: st.markdown("### 📊 Route Comparison") df_viz = pd.DataFrame(route_data) fig = make_subplots( rows=1, cols=2, subplot_titles=('CO₂ Emissions (kg)', 'Travel Time (hours)'), specs=[[{"secondary_y": False}, {"secondary_y": False}]] ) fig.add_trace( go.Bar( x=df_viz['transport_mode'], y=df_viz['co2_emissions_kg'], name='CO₂ Emissions', marker_color='#2ECC71' ), row=1, col=1 ) fig.add_trace( go.Bar( x=df_viz['transport_mode'], y=df_viz['estimated_travel_time_hours'], name='Travel Time', marker_color='#3498DB' ), row=1, col=2 ) fig.update_layout(height=400, showlegend=False) st.plotly_chart(fig, use_container_width=True) else: st.error(f"❌ Route optimization failed: {recommendations.get('error', 'Unknown error')}") except Exception as e: st.error(f"❌ Error: {str(e)}") elif page == "📊 Scenario Analysis": st.markdown("## 📊 Business Impact Simulation") st.markdown("Analyze the potential impact of adopting green shipping practices") with st.form("scenario_analysis"): col1, col2 = st.columns(2) with col1: st.markdown("### 📦 Shipment Parameters") total_shipments = st.number_input("Total Monthly Shipments", min_value=1, value=1000, step=50) avg_distance = st.number_input("Average Distance (km)", min_value=1.0, value=800.0, step=50.0) avg_weight = st.number_input("Average Weight (tonnes)", min_value=0.1, value=3.0, step=0.1) with col2: st.markdown("### ⚙️ Optimization Parameters") optimization_percent = st.slider("% Shipments Using Green Routes", 0, 100, 50) current_mode = st.selectbox("Current Transport Mode", [mode.value for mode in TransportMode], index=0) carbon_tax_rate = st.number_input("Carbon Tax Rate ($/tonne CO₂)", min_value=0.0, value=50.0, step=5.0) analyze_btn = st.form_submit_button("📊 Run Scenario Analysis", type="primary") if analyze_btn: with st.spinner("🔄 Running business impact simulation..."): try: # Current emissions - use same mapping as before mode_mapping = { 'road_truck': TransportMode.ROAD_TRUCK, 'road_van': TransportMode.ROAD_VAN, 'rail': TransportMode.RAIL, 'air_cargo': TransportMode.AIR_CARGO, 'ship_container': TransportMode.SHIP_CONTAINER, 'ship_bulk': TransportMode.SHIP_BULK } if current_mode in mode_mapping: current_mode_enum = mode_mapping[current_mode] else: current_mode_enum = TransportMode(current_mode) current_emissions = calculator.calculate_emissions(avg_distance, avg_weight, current_mode_enum) # Find best green alternative - calculate manually to avoid EmissionOptimizer import available_modes = [TransportMode.ROAD_TRUCK, TransportMode.RAIL, TransportMode.SHIP_CONTAINER] # Calculate emissions for each mode and find the greenest mode_options = [] for mode in available_modes: emissions = calculator.calculate_emissions(avg_distance, avg_weight, mode) mode_options.append({ 'mode': mode, 'co2_emissions_kg': emissions['co2_emissions_kg'], 'emission_factor': emissions['emission_factor'] }) # Sort by emissions (lowest first) to find greenest option mode_options.sort(key=lambda x: x['co2_emissions_kg']) green_option = mode_options[0] if mode_options else None if not green_option: st.error("❌ No green alternatives available") st.stop() # Calculate scenario impact optimized_shipments = int(total_shipments * optimization_percent / 100) regular_shipments = total_shipments - optimized_shipments current_total = current_emissions['co2_emissions_kg'] * total_shipments optimized_total = ( green_option['co2_emissions_kg'] * optimized_shipments + current_emissions['co2_emissions_kg'] * regular_shipments ) savings_kg = current_total - optimized_total savings_percent = (savings_kg / current_total) * 100 carbon_tax_savings = (savings_kg / 1000) * carbon_tax_rate st.success("✅ Scenario analysis complete!") # Results col1, col2, col3, col4 = st.columns(4) with col1: st.metric("Current Emissions", f"{current_total/1000:.1f} tonnes/month") with col2: st.metric("Optimized Emissions", f"{optimized_total/1000:.1f} tonnes/month") with col3: st.metric("CO₂ Savings", f"{savings_kg/1000:.1f} tonnes/month", f"{savings_percent:.1f}% reduction") with col4: st.metric("Carbon Tax Savings", f"${carbon_tax_savings:.0f}/month", f"${carbon_tax_savings*12:.0f}/year") # Visualization st.markdown("### 📈 Impact Visualization") scenario_data = pd.DataFrame({ 'Scenario': ['Current', 'Optimized'], 'CO₂ Emissions (tonnes)': [current_total/1000, optimized_total/1000], 'Carbon Tax Cost ($)': [ (current_total/1000) * carbon_tax_rate, (optimized_total/1000) * carbon_tax_rate ] }) fig = make_subplots( rows=1, cols=2, subplot_titles=('CO₂ Emissions', 'Carbon Tax Cost'), specs=[[{"secondary_y": False}, {"secondary_y": False}]] ) fig.add_trace( go.Bar( x=scenario_data['Scenario'], y=scenario_data['CO₂ Emissions (tonnes)'], name='CO₂ Emissions', marker_color=['#E74C3C', '#2ECC71'] ), row=1, col=1 ) fig.add_trace( go.Bar( x=scenario_data['Scenario'], y=scenario_data['Carbon Tax Cost ($)'], name='Carbon Tax Cost', marker_color=['#E74C3C', '#2ECC71'] ), row=1, col=2 ) fig.update_layout(height=400, showlegend=False) st.plotly_chart(fig, use_container_width=True) # Business benefits st.markdown("### 💼 Business Benefits") benefits_col1, benefits_col2 = st.columns(2) with benefits_col1: st.markdown(""" **Environmental Impact:** - ♻️ Reduced carbon footprint - 🌱 Enhanced sustainability profile - 📊 ESG score improvement - 🏆 Industry leadership positioning """) with benefits_col2: st.markdown(f""" **Financial Benefits:** - 💰 ${carbon_tax_savings*12:.0f} annual tax savings - 📈 Potential green financing access - 🎯 Regulatory compliance readiness - 💡 Operational efficiency gains """) except Exception as e: st.error(f"❌ Analysis failed: {str(e)}") st.write(f"Debug info: {type(e).__name__}: {e}") import traceback st.code(traceback.format_exc()) elif page == "📈 Analytics": st.markdown("## 📈 Advanced Analytics") # Sample analytics data st.markdown("### 🎯 Performance Metrics") col1, col2, col3 = st.columns(3) with col1: st.markdown("""

Route Efficiency Score

87/100

Above industry average

""", unsafe_allow_html=True) with col2: st.markdown("""

Green Route Adoption

68%

Target: 75%

""", unsafe_allow_html=True) with col3: st.markdown("""

Emission Intensity

0.045

kg CO₂/tonne-km

""", unsafe_allow_html=True) # Regional analysis st.markdown("### 🌍 Regional Emission Analysis") regional_data = pd.DataFrame({ 'Region': ['North America', 'Europe', 'Asia Pacific', 'Latin America'], 'Emissions (tonnes)': [45.2, 32.1, 28.7, 15.3], 'Shipments': [450, 320, 380, 180], 'Avg Distance (km)': [1200, 800, 950, 600] }) fig = px.scatter( regional_data, x='Shipments', y='Emissions (tonnes)', size='Avg Distance (km)', color='Region', title="Regional Emission vs Shipment Volume" ) fig.update_layout(height=500) st.plotly_chart(fig, use_container_width=True) st.dataframe(regional_data, use_container_width=True) # Footer st.markdown("---") st.markdown("## 👨‍💻 Developer Details") st.markdown("""

GreenPath - AI-Powered CO₂ Emission Reduction Platform

Designed and Developed by Sayed Mohd Zayeem Khateeb

🌐 GitHub | 💼 LinkedIn | 📧 Email

Specialized in AI/ML, Data Analytics, and Sustainable Technology Solutions

""", unsafe_allow_html=True)