cleaned up

This commit is contained in:
Jeremy Kidwell 2018-08-31 14:59:06 +01:00
parent f881175b1d
commit 9071e8daa0
7 changed files with 185 additions and 58 deletions

4
.idea/misc.xml Normal file
View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.6 (presentation-20180904-basr)" project-jdk-type="Python SDK" />
</project>

8
.idea/modules.xml Normal file
View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/presentation-20180904-basr.iml" filepath="$PROJECT_DIR$/.idea/presentation-20180904-basr.iml" />
</modules>
</component>
</project>

View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/venv" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="TestRunnerService">
<option name="PROJECT_TEST_RUNNER" value="Unittests" />
</component>
</module>

6
.idea/vcs.xml Normal file
View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

93
.idea/workspace.xml Normal file
View file

@ -0,0 +1,93 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="22c38599-0628-4a23-b553-84a61b002360" name="Default Changelist" comment="">
<change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
</list>
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="FUSProjectUsageTrigger">
<session id="1565258777">
<usages-collector id="statistics.lifecycle.project">
<counts>
<entry key="project.closed" value="1" />
<entry key="project.open.time.15" value="1" />
<entry key="project.opened" value="1" />
</counts>
</usages-collector>
</session>
</component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="ProjectFrameBounds">
<option name="x" value="580" />
<option name="y" value="229" />
<option name="width" value="1400" />
<option name="height" value="1000" />
</component>
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
<component name="ProjectView">
<navigator proportions="" version="1">
<foldersAlwaysOnTop value="true" />
</navigator>
<panes>
<pane id="Scope" />
<pane id="ProjectPane" />
</panes>
</component>
<component name="RunDashboard">
<option name="ruleStates">
<list>
<RuleState>
<option name="name" value="ConfigurationTypeDashboardGroupingRule" />
</RuleState>
<RuleState>
<option name="name" value="StatusDashboardGroupingRule" />
</RuleState>
</list>
</option>
</component>
<component name="SvnConfiguration">
<configuration />
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="22c38599-0628-4a23-b553-84a61b002360" name="Default Changelist" comment="" />
<created>1535543390620</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1535543390620</updated>
</task>
<servers />
</component>
<component name="ToolWindowManager">
<frame x="580" y="229" width="1400" height="1000" extended-state="0" />
<layout>
<window_info id="Favorites" side_tool="true" />
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.24945612" />
<window_info id="Structure" order="1" side_tool="true" weight="0.25" />
<window_info anchor="bottom" id="Version Control" />
<window_info anchor="bottom" id="Python Console" />
<window_info anchor="bottom" id="Terminal" />
<window_info anchor="bottom" id="Event Log" side_tool="true" />
<window_info anchor="bottom" id="Message" order="0" />
<window_info anchor="bottom" id="Find" order="1" />
<window_info anchor="bottom" id="Run" order="2" />
<window_info anchor="bottom" id="Debug" order="3" weight="0.4" />
<window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
<window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
<window_info anchor="bottom" id="TODO" order="6" />
<window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
<window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
<window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
</layout>
</component>
<component name="VcsContentAnnotationSettings">
<option name="myLimit" value="2678400000" />
</component>
</project>

View file

@ -1,58 +0,0 @@
require(sqldf) # using sqldf to filter while loading very large data sets
require(data.table)
require(sf) # new simplefeature data class, supercedes sp in many ways
require(osmdata) # for loading data from OSM, supercedes "overpass" package and "osmar"
setwd("/Users/kidwellj/gits/presentation-20180904-basr")
# Import filtered CSV, selecting only data
# Note: OS recently changed column names to remove underscores, dropping header simplifies this issue
pointx_201512 <- read.csv.sql("/Volumes/imac-storage1/GIS_data/Ordnance_Survey/PointX_Complete_2015_12/poi_2015_12_all06340459.csv", sql = "select * from file where V3 = '06340459'", header = FALSE, sep="|")
pointx_201806 <- read.csv.sql("/Volumes/imac-storage1/GIS_data/Ordnance_Survey/PointX_Complete_2018_06/poi.csv", sql = "select * from file where V3 = '06340459'", header = FALSE, sep="|")
# pointx_201409 <- read.csv.sql("/Volumes/imac-storage1/GIS_data/Ordnance_Survey/PointX_Complete_2014_09/Data/pointx_v2_National_Coverage_Sept14.txt", sql = "select * from file where V3 = '06340459'", header = FALSE, sep="|")
# pointx_201609 <- read.csv.sql("/Volumes/imac-storage1/GIS_data/Ordnance_Survey/PointX_Complete_2016_09/csv/pointx_v2_National_Coverage_Sept16.txt", sql = "select * from file where V3 = '06340459'", header = FALSE, sep="|")
# Filter out the distorting uncategorised category
plot(sort(table(pointx_201806$V26[pointx_201806$V26 !='"Not Identified (Christian)"'])))
# Calculate a descending sorted list of points by each denomination for 2015, and filter out distorting "not identified" category
denominationcounts_201512 <- (sort(table(pointx_201512$V26[pointx_201512$V26 !='Not Identified (Christian)']), decreasing = TRUE))
par(las=2) # make label text perpendicular to axis
par(mar=c(12,8,4,2)) # increase y-axis margin.
par(cex.axis=0.7)
par(cex.lab=1)
# Subset top 10 for plot
plot(denominationcounts_201512[1:15])
# Calculate a descending sorted list of points by each denomination for 2018, and filter out distorting "not identified" category
denominationcounts_201806 <- (sort(table(pointx_201806$V26[pointx_201806$V26 !='"Not Identified (Christian)"']), decreasing = TRUE))
par(las=2) # make label text perpendicular to axis
par(mar=c(12,8,4,2)) # increase y-axis margin.
par(cex.axis=0.7)
par(cex.lab=1)
# Subset top 10 for plot
plot(denominationcounts_201806[1:15])
denominationcounts_201806
# Get UK Admin polygons
if (dir.exists("data") == FALSE) {
dir.create("data")}
download.file("https://borders.ukdataservice.ac.uk/ukborders/easy_download/prebuilt/shape/infuse_dist_lyr_2011_clipped.zip", destfile = "infuse_dist_lyr_2011_clipped.zip")
unzip("infuse_dist_lyr_2011_clipped.zip", exdir = "data")
admin_uk <- st_read(infuse_dist_lyr_2011_clipped)
fname <- system.file("data/infuse_dist_lyr_2011_clipped.shp", package="sf")
admin_uk <- st_read(fname)
# Make maps
# Define CRS for British National Grid
BNG = "+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +datum=OSGB36 +units=m +no_defs +ellps=airy +towgs84=446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894"
xy <- pointx_201806[,c(4,5)]
pointx_201806_map <- SpatialPointsDataFrame(coords = xy, data = pointx_201806,
CRS("+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +datum=OSGB36 +units=m +no_defs +ellps=airy +towgs84=446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894"))
churches_ordnancesurvey_2018 <- st_read(pointx_201806)
sf("OS_pointX_2016_09-POW-UK_all-simplified.csv")
coordinates(churches_ordnancesurvey) <- c("FEATURE_EASTING", "FEATURE_NORTHING")
proj4string(churches_ordnancesurvey) <- proj4string(admin_uk) # borrow BNG CRS from admin boundaries shapefile

View file

@ -21,6 +21,9 @@
}
.red { color: #fa0000; }
/* Two-column layout */
.strikethrough {
text-decoration: line-through;
}
.left-column {
width: 50%;
float: left;
@ -144,9 +147,67 @@ Ordnance Survey = data on places of worship is purchased from a private database
Open Street Map = open access, generally accurate, but incomplete
Google Maps = very expensive. No provision for scholarly use
---
### Things are missing:
Mosques and Islamic community centres in Birmingham metro (+50km):
- According to http://mosques.muslimsinbritain.org: 289
- According to ordnance survey: 224
- According to open street maps: 118
- According to google maps: 100
---
### Data is bad:
According to Ordnance Survey:
Of 46,057 places of worship in the UK:
1692 baptist churches
2446 churches designated as “Church of England”
2476 Catholic Churches
3584 Methodist churches.
---
So who cares?
???
So why does all this matter? There are two key reasons why scholarly focus on these data sources might align well with our concern for public literacy about religion and frankly justice. First, for many people walking around in Europe, these data sets are reality. When was the last time you navigated somewhere without using a turn-by-turn app on some smartphone? If data is lacking in completeness, these places simply fall off the map. Second, is metadata. While this term may seem fairly innocuous, it can be a very malevolent force. Metadata is simply the practice of adding a bit of additional data to the 'main stuff'. So we have some coordinates and a name for a place of worship, and then maybe we add the opening hours, or we allow people to add ratings, or we add a category.
---
### Exhibit A: All of Google's religion categories:
- .strikethrough[place of worship]
- church
- hindu_temple
- mosque
- synagogue
### Exhibit B: Schema.org Microdata Specification
["developed by an open community process"](https://schema.org/)
Place / CivicStructure / PlaceofWorship subcategories (v3.4):
- BuddhistTemple
- CatholicChurch
- Church
- HinduTemple
- Mosque
- Synagogue
???
These categories produce borders and tacitly facilitate exclusion. Have you ever wondered how google finds content based on a given search you produce?
---
---