import streamlit as st import pandas as pd import numpy as np import plotly.express as px from transformers import pipeline from datasets import load_dataset # Hugging Face Datasets @st.cache_data def load_data(): network_insights = load_dataset("infinite-dataset-hub/5GNetworkOptimization", split="train") return network_insights.to_pandas() # Load Datasets network_insights = load_data() # Title st.title("Smart Network Infrastructure Planner") st.sidebar.header("Input Parameters") # User Inputs from Sidebar budget = st.sidebar.number_input("Total Budget (in $1000s):", min_value=10, max_value=1000, step=10) priority_area = st.sidebar.selectbox("Priority Area:", ["Rural", "Urban", "Suburban"]) signal_threshold = st.sidebar.slider("Signal Strength Threshold (dBm):", min_value=-120, max_value=-30, value=-80) terrain_weight = st.sidebar.slider("Terrain Difficulty Weight:", min_value=0.0, max_value=1.0, value=0.5) cost_weight = st.sidebar.slider("Cost Weight:", min_value=0.0, max_value=1.0, value=0.5) # Display Dataset Options data_to_view = st.sidebar.selectbox("Select Dataset to View:", ["Network Insights", "Filtered Terrain Data"]) # Terrain and Connectivity Analysis Section st.header("Terrain and Connectivity Analysis") # Simulate Terrain Data def generate_terrain_data(): np.random.seed(42) data = { "Region": [f"Region-{i}" for i in range(1, 11)], "Terrain Difficulty (0-10)": np.random.randint(1, 10, size=10), "Signal Strength (dBm)": np.random.randint(-120, -30, size=10), "Cost ($1000s)": np.random.randint(50, 200, size=10), "Priority Area": np.random.choice(["Rural", "Urban", "Suburban"], size=10) } return pd.DataFrame(data) terrain_data = generate_terrain_data() # Filter Data Based on User Inputs filtered_data = terrain_data[ (terrain_data["Signal Strength (dBm)"] >= signal_threshold) & (terrain_data["Cost ($1000s)"] <= budget) & (terrain_data["Priority Area"] == priority_area) ] # Add Composite Score for Ranking filtered_data["Composite Score"] = ( (1 - terrain_weight) * filtered_data["Signal Strength (dBm)"] + (terrain_weight) * (10 - filtered_data["Terrain Difficulty (0-10)"]) - (cost_weight) * filtered_data["Cost ($1000s)"] ) # Display Selected Dataset if data_to_view == "Network Insights": st.subheader("Network Insights Dataset") st.dataframe(network_insights) elif data_to_view == "Filtered Terrain Data": st.subheader("Filtered Terrain Data") st.dataframe(filtered_data) # Visualization fig = px.scatter( filtered_data, x="Cost ($1000s)", y="Signal Strength (dBm)", size="Terrain Difficulty (0-10)", color="Region", title="Signal Strength vs. Cost", labels={ "Cost ($1000s)": "Cost in $1000s", "Signal Strength (dBm)": "Signal Strength in dBm", }, ) st.plotly_chart(fig) # Recommendation Engine st.header("Deployment Recommendations") def recommend_deployment(data): if data.empty: return "No viable deployment regions within the specified parameters." best_region = data.loc[data["Composite Score"].idxmax()] return f"Recommended Region: {best_region['Region']} with Composite Score: {best_region['Composite Score']:.2f}, Signal Strength: {best_region['Signal Strength (dBm)']} dBm, Terrain Difficulty: {best_region['Terrain Difficulty (0-10)']}, and Estimated Cost: ${best_region['Cost ($1000s)']}k" recommendation = recommend_deployment(filtered_data) st.subheader(recommendation) # Footer st.sidebar.markdown("---") st.sidebar.markdown( "**Developed for Hackathon using Hugging Face Infinite Dataset Hub**\n\n[Visit Hugging Face](https://huggingface.co)")