- Repository referred to a final thesis presented to the University of Sao Paulo in order to achieve the Civil Engineering degree.
- The main goal was to develop a tool that could be used to analyze the last mile routing problems in a city
- In the end, a combination of different last-mile statics and street network analysis was made possible, allowing for significant insights to be made on the city's last mile routing problems.
- The project is still going to be developed and maintained even after the thesis is finished, so any contribution is welcome.
The tool was developed in Python and it is able to analyze the last mile routing problems in a city, considering the following aspects:
- Last Mile routing data
- Distance between origin and the destination
- Shortest driving path by Google Maps API and OpenStreetMap API
- euclidean distance by Haversine formula;
- Characterization of different routes
- Center of gravity
- Enclosing polygons
- Percentage of rejected deliveries, and failed attempts
- Integration with Amazon Last Mile Routing data from public s3 bucket
- Distance between origin and the destination
- Street networks geometry:
- Street Network density statistics for different neighborhoods:
- Node density, edge density, self-loop proportion
- Street total length, average street length
- etc.
- Street Network connectivity and orientation statistics for different neighborhoods:
- Node degree
- Polar plots of street orientation
- Street Network density statistics for different neighborhoods:
First you need to certify that you have Python 3.9 installed.
Then you can install the package using pip:
pip install git+https://github.com/Gui-FernandesBR/Last-Mile-Routing-Analyzer/lmr_analyzer.git
The package will automatically install the dependencies listed at requirements.txt file.
Here are some of the examples that you can run to get started with the package:
The documentation is still under development, please be patient. You can check the current docstring of each method and class individually.
The repository is organized as follows:
.github/ - Github related files
data/ - Data used in or generated with the examples
docs/ - Documentation files
source/ - Main package files
tests/ - Tests for the package
.gitattributes - Git attributes file
.gitignore - Files to be ignored by git
CITATION.cff - Citation file
LICENSE.md - License file
README.md - This file
requirements-dev.txt - Python packages required to develop the package
requirements.txt - Python packages required to run the package
setup.py - Setup file
The lmr_analyzer package is organized as follows:
__init__.py
- Main module
amz_serializer.py - Amazon S3 data serializer
analysis.py - Analysis module, to analyze a set of routes
distance_matrix.py - Distance Matrix module
geometry.py - Handle with spatial information from shapefiles
package.py - Store package information
route.py - Store route information
stop.py - Store stop information
utils.py - Utilities module to be used on other modules
vehicle.py - Store vehicle information
The architecture of the package is represented by the following diagram:
classDiagram
class lmr_analyzer {
}
class amzSerializer {
}
class analysis {
}
class distanceMatrix {
}
class geometry {
}
class package {
}
class route {
}
class stop {
}
class utils {
}
class vehicle {
}
lmr_analyzer --> amzSerializer
lmr_analyzer --> analysis
lmr_analyzer --> distanceMatrix
lmr_analyzer --> geometry
lmr_analyzer --> package
lmr_analyzer --> route
lmr_analyzer --> stop
lmr_analyzer --> utils
lmr_analyzer --> vehicle
amzSerializer --> package
amzSerializer --> route
amzSerializer --> stop
amzSerializer --> vehicle
route --> stop
route --> utils
stop --> package
Due to the large amount of information, the data folder can be a bit confusing, so here is a brief description of what each folder contains:
data/
├── driving_distances/ - Driving distances to be used with Amazon dataset
│ ├── austin.csv
│ ├── boston.csv
│ ├── ...
│ └── seattle.csv
├── results/ - Results from the examples
│ ├── dataframes/ - all .csv or .txt files
│ ├── graph_shapefile/ - gespatial data files
│ ├── graphs/ - Report of the Graphs generated with the examples
│ ├── pickles/ - Objects saved as pickle files
│ └── polar_plots/ - Polar plots generated with the examples
└── shapefiles/ - geospatial data files
├── austin/ - Neighborhoods of Austin county
├── los_angeles_minors/ - Neighborhoods of Los Angeles county
├── guarulhos_osm/ - Neighborhoods of Guarulhos city
├── ...
└── urban_regions_Sao_Paulo/ - Urban regions of Sao Paulo state
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change. Any contributor should be aware of the code of conduct.
You can also contribute by opening an issue with a bug report or a feature request.
First of all, thank you for considering contributing to the project!
The quicker step to contribute is by starring the project, which will help it to be more visible to other people.
The project is licensed under the Mozila Public License 2.0, which can be found here. For any questions, please contact the main maintainer.
If you use this package in your research, please cite it as:
@misc{alves-lmr,
author = {Guilherme Fernandes Alves},
title = {Last Mile Routing Analyzer: a powerful toolkit to analyze the interaction between last mile operations and the street network design.},
year = {2023},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/Gui-FernandesBR/Last-Mile-Routing-Analyzer}},
doi = {10.5281/zenodo.6792976}
}
Send a message to the main maintainer to request more details: Guilherme Fernandes Alves.
you can find him (i.e. me) by e-mail: guilherme_fernandes@usp.br
or gf10.alves@gmail.com