|
import streamlit as st |
|
import pandas as pd |
|
import plotly.express as px |
|
|
|
class GeospatialAnalyzer: |
|
def analyze_geospatial_data(self, df): |
|
lat_columns = [col for col in df.columns if 'lat' in col.lower()] |
|
lon_columns = [col for col in df.columns if 'lon' in col.lower()] |
|
|
|
if len(lat_columns) > 0 and len(lon_columns) > 0: |
|
lat_column = st.selectbox("Select latitude column", lat_columns) |
|
lon_column = st.selectbox("Select longitude column", lon_columns) |
|
|
|
map_type = st.selectbox("Select map type", ["Scatter Mapbox", "Density Mapbox"]) |
|
|
|
if map_type == "Scatter Mapbox": |
|
self.create_scatter_mapbox(df, lat_column, lon_column) |
|
elif map_type == "Density Mapbox": |
|
self.create_density_mapbox(df, lat_column, lon_column) |
|
else: |
|
st.write("No latitude and longitude columns found in the dataset.") |
|
|
|
def create_scatter_mapbox(self, df, lat_column, lon_column): |
|
st.subheader("Scatter Mapbox") |
|
|
|
color_column = st.selectbox("Select color column (optional)", ["None"] + df.columns.tolist()) |
|
size_column = st.selectbox("Select size column (optional)", ["None"] + df.columns.tolist()) |
|
|
|
fig = px.scatter_mapbox(df, |
|
lat=lat_column, |
|
lon=lon_column, |
|
color=None if color_column == "None" else color_column, |
|
size=None if size_column == "None" else size_column, |
|
zoom=3) |
|
fig.update_layout(mapbox_style="open-street-map") |
|
st.plotly_chart(fig) |
|
|
|
def create_density_mapbox(self, df, lat_column, lon_column): |
|
st.subheader("Density Mapbox") |
|
|
|
fig = px.density_mapbox(df, |
|
lat=lat_column, |
|
lon=lon_column, |
|
zoom=3, |
|
radius=10) |
|
fig.update_layout(mapbox_style="open-street-map") |
|
st.plotly_chart(fig) |