Production-style Streamlit dashboard for exploring global EV charging infrastructure with Plotly and PyDeck.
It is designed as a decision-facing analytics tool: infrastructure KPIs, geographic coverage, fast-DC mix, inequality metrics, opportunity scoring, and allocation scenarios.
This dashboard explores the Global EV Charging Stations Dataset:
- 🌍 Charging stations across multiple countries
- 🎛️ Filters for country, city, power class, fast-DC status, and port range
- 📊 KPIs for stations, ports, average power, and fast-DC share
- 📈 Distribution analytics including Lorenz curve and Gini concentration
- 🗺️ Interactive world map with port-scaled station markers
- 🧮 Allocation optimizer for fast-DC expansion scenarios
- 🧭 Compare mode for selected slices vs global or preset views
Dataset repository:
https://github.com/tarekmasryo/Global-EV-Charging-Stations
Overview
Map
Insights
Optimizer
- Country, city, power-class, fast-DC, and ports filters
- Executive KPIs for charging infrastructure monitoring
- Charging mix analysis by country and power class
- Port concentration analysis with Pareto view, Lorenz curve, and Gini score
- Impact and opportunity scoring for expansion prioritization
- Interactive PyDeck map with station-level markers
- Rule-based optimizer for allocating new fast-DC capacity
- Export-ready tables for country summaries and scenario outputs
.
├── EV-Charging-Analytics.py
├── src/ev_charging_dashboard/
│ ├── analytics.py
│ ├── data.py
│ ├── services.py
│ └── __init__.py
├── tests/
├── assets/
├── requirements.txt
├── requirements-dev.txt
├── Makefile
└── pyproject.toml
The Streamlit entrypoint is intentionally named:
EV-Charging-Analytics.py
Keep this filename when deploying the dashboard.
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
python -m streamlit run EV-Charging-Analytics.pyIf PowerShell blocks activation, run this only for the current shell:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy BypassThe app auto-loads the dataset from the public GitHub raw CSV by default.
You can override the data source in any of the following ways, listed by priority:
- Query parameter:
?csv=<path_or_url> - Streamlit secrets file:
.streamlit/secrets.toml
DATA_URL = "https://raw.githubusercontent.com/tarekmasryo/Global-EV-Charging-Stations/main/data/charging_station.csv"- Environment variables:
CSV_URL,CSV_PATH, orDATA_URL - Manual CSV upload from the sidebar
Optional enrichment files:
world_population.csvcountry_region.csv
When these files are missing, enrichment metrics are skipped gracefully.
- Push this repository to GitHub.
- Create a new Streamlit Cloud app from the repository.
- Set the main file path to:
EV-Charging-Analytics.py
- Add
DATA_URLin Streamlit Secrets when you want to override the default dataset URL.
Install development tools:
python -m pip install -r requirements-dev.txt
pre-commit installRun checks:
ruff check .
ruff format --check .
pytest -qOr use:
make lint
make format-check
make test- Code: Apache-2.0. See
LICENSE. - Dataset: hosted in the linked dataset repository.
Attribution:
Global EV Charging Dashboard and Dataset by Tarek Masryo.




