File size: 3,703 Bytes
b61df43
 
 
 
 
 
 
 
 
 
0a95c56
 
b61df43
 
0a95c56
b61df43
 
 
 
 
 
 
 
 
9ed47c8
 
b61df43
 
9ed47c8
b61df43
 
 
 
 
 
 
 
 
 
 
 
9ed47c8
b61df43
 
 
 
 
 
 
9ed47c8
 
 
b61df43
 
9ed47c8
 
 
 
 
 
 
 
 
 
 
 
 
 
b61df43
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9ed47c8
 
b61df43
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
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)")