Note: All data used in this repository is publicly available.
Installation is possible via pip
as shown below.
Unix/macOS
python3 -m pip install esneft_tools
Windows
py -m pip install esneft_tools
Unix/macOS
python -m venv esneft_tools
source esneft_tools/bin/activate
python3 -m pip install esneft_tools
Windows
py -m venv esneft_tools
esneft_tools/Scripts/Activate.ps1
py -m pip install esneft_tools
If running scripts is disabled on your system then run the following command before activating your environment.
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Additional geospatial utilities may be optionally installed as below. Note these packages have non-trivial dependencies and automatic installation may not work on all systems.
An additional optional dependency, OSMnx, must be installed by the user. Please refer to the OSMnx documentation for further installation instructions.
Clear here for code
Unix/macOS
python3 -m pip install esneft_tools[geo]
Windows
py -m pip install esneft_tools[geo]
The logging level of esneft_tools
can be set via the setVerbosity()
function.
import logging
from esneft_tools.utils import setVerbosity
from esneft_tools import download, process, visualise
setVerbosity(logging.INFO)
Each of the esneft_tools.download.getData().fromHost()
functions retrieve a static copy of a particular data set from GitHub.
A local copy of these tables is saved to ./.data-cache/
by default.
Each can be obtained individually but it is recommended to retrieve all data, as below.
# Instantiate data download class.
getData = download.getData(cache='./.data-cache')
# Retrieve all data as dictionary (recommended)
data = getData.fromHost('all')
all
(default)- Retrieve all of the below data in dictionary format (recommended).
postcodeLSOA
- Postcode -> LSOA (2011) lookup Table from ArcGIS
imdLSOA
- Indices of Deprivation by LSOA in England from National Statistics (.gov.uk)
populationLSOA
- LSOA population estimates, by age and sex, from ONS
ethnicityLSOA
- Proportion of ethnicity minorities (non-white) by LSOA from NOMIS
areaLSOA
- Land hectare measures by LSOA from ArcGIS
gpRegistration
- GP registration by LSOA NHS Digital
gpPractice
- GP Practice information from NHS Digital
gpStaff
- GPs by GP Practices from NHS Digital
qof
- Quality and Outcomes Framework, 2021-22 from NHS Digital
geoLSOA
- LSOA GeoJSON from UK Data Service
esneftLSOA
- List of LSOAs within ESNEFT trust.
esneftOSM
- OpenStreetMap (OSM) data for ESNEFT area from Geofabrik
Alternatively, the .fromSource()
method can be used to retrieve each dataset directly from its public source.
By default, esneft_tools
will retrieve the source data that matches the fromHost()
methods.
Each source URL can be updated to newer versions by providing a YAML file to download.getData()
as shown below.
An example of the YAML file is shown here.
Clear here for code
# Instantiate data download class.
getData = download.getData(sourceURL='sourceURL.yaml', cache='./.data-cache')
# Retrieve a specific dataset from host.
# Note: "all" does not work with .fromSource().
imdLSOA = getData.fromSource('imdLSOA')
The getGPsummary
function aggregates the downloaded data to practice level statistics.
GPsummary = process.getGPsummary(**data, iod_cols='IMD')
Field | Description |
---|---|
OrganisationCode | Practice Service Code |
IMD | Mean Index of Multiple Deprivation of Registered Patients |
Patient | Total Registered Patients |
QOF-DM | QOF achievement for Diabetes mellitus (max 76) |
DM-prevalance | Prevalence of Diabetes mellitus |
PCDS | Postcode |
OpenDate | Opening Date |
CloseDate | Closing Date |
Status | Service Status (e.g. Active) |
PrescribingSetting | Service Type (e.g. GP Practice) |
currentStaff | Current Practitioners |
departedStaff | Total Departed Practitioners |
meanStaff | Average Working Practitioners |
annualStaffTurnover | Mean Annual % Practitioner Turnover |
Lat | Latitude of Site |
Long | Longitude of Site |
patientPerGP | Total Registered Patient per Average Practitioner Count |
ESNEFT | Boolean Flag of Practices within ESNEFT |
Node | Closest OSM Map Node to Site |
The getLSOAsummary
function aggregates the downloaded data LSOA level statistics.
LSOAsummary = process.getLSOAsummary(**data, iod_cols='IMD')
Field | Description |
---|---|
LSOA11CD | LSOA (2011) Code |
LSOA11NM | LSOA (2011) Name |
Age (median) | Median Age of Population |
Population | Population Estimate (2011 Census) |
LandHectare | Land Area (Hectares) |
Patient | Total Registered GP Patients |
IMD | Index of Multiple Deprivation |
IMD (q5) | Index of Multiple Deprivation (quintiles) |
DM-prevalance | Prevalence of Diabetes mellitus |
Density | Population Density |
ESNEFT | Boolean Flag of LSOAs within ESNEFT |
fig = visualise.scatterGP(GPsummary[GPsummary['Status'] == 'Active'], minCount=250)
Map of Practice Distributions within ESNEFT (Plotly Interactive)
fig = visualise.choroplethLSOA(LSOAsummary, data['geoLSOA'], colour='IMD')
Choropleth Map of LSOA Domains within ESNEFT coloured by IMD (Plotly Interactive)
Refer to the additional documentation for further examples of functionality.
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
See CONTRIBUTING.md for detailed guidance.
Distributed under the MIT License. See LICENSE for more information.
If you have any other questions please contact the author, Stephen Richer.