This is a Python-driven data science application designed to ingest and parse millions of rows of mobile subscriber location data with Streamlit to analyze and visualize tower triangulation. Implemented triangulation algorithms to estimate geographic presence across specific time intervals, calculating automated confidence levels per location.
- Upload a CSV file containing geolocation data or API URL json format
- Generate time-interval-based reports estimating the most likely state
- Display confidence percentages for each estimate
- Interactive map visualization
- Filter report by selected states
- Export results to CSV
- Download charts (line, histogram, bar) as PNG images
├── app.py # Main application
├── requirements.txt # Python dependencies
├── .gitignore # Git ignored files
├── dataset.csv # CSV Dataset
├── dataset.json # JSON Dataset for external API test
└── README.md # Documentation
- This project is licensed under the MIT License.
- Python (3.13)
- Streamlit (>=1.32.0)
- pandas (>=2.2.0)
- matplotlib (>=3.8.0)
- altair (>=5.1.0)
The uploaded CSV file should contain at least the following columns:
UTCDateTime(timestamp in UTC)LatitudeLongitudeState
If you want to use API URL instead of csv upload, copy and past the URL bellow to simulate an API: https://raw.githubusercontent.com/saulostopa/location-estimation-app/refs/heads/main/dataset.json
Example rows:
UTCDateTime,Latitude,Longitude,State
2021-01-05T10:15:00Z,41.123,-73.456,NY
2021-01-05T10:30:00Z,41.124,-73.457,CTgit clone https://github.com/saulostopa/location-estimation-app.git
cd location-estimation-app
We recommend using a virtual environment:
python3.13 -m venv venv
source venv/bin/activate
On Windows:
venv\\Scripts\\activate
Install requirements
pip install -r requirements.txt
streamlit run app.py
- Streamlit will automatically open the application in your default browser at http://localhost:8501
- Go to https://streamlit.io/cloud
- Log in with your GitHub account
- Click “New app”
- Select the repository and the main branch
- Set app.py as the main file
- Click “Deploy”
- Periodically extract data from a PostgreSQL database.
- Transform and save the data in Redis (as JSON, lists, hashes or strings).
- Redis will serve as a temporary read source, accessible via URL or public API.




