File size: 2,136 Bytes
ce86e4b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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)