Sunday, January 22, 2017

Voting Districts Day 3: Yet Another Package Change to Pyshp

Still having trouble with Fiona.  So, I'm trying another package for reading shapefiles:  pyshp.

Pyshp installs through pip without issue (as long as I do it as an admin).  Hooray!  

pyshp comes with the shapefile library, which reads a shapefile into a structure of lists and dictionaries.  

What should I read?  The NC Board of Elections has a shapefile that has  all of the voting districts available on their FTP site.

And after downloading, we can read it like so:
import shapefile
vote = shapefile.Reader('ncsbe\\Precincts.shp') #creates an instance that has the lists of data we want.
shapes = vote.shapes() #lists of coordinates making up the shape for each voting district.  

To figure out the center of the shapefile,  I hope this isn't too simple:
What I should do is get the min/max for both the x and y, then average that.  I'll put it all in a list.

coords = list()

for x in range(0,len(shapes)):
xmin = 10000000
xmax = -10000000
ymin = 10000000
ymax = -10000000
for y in range(0,len(shapes[x].points)):
xmin = min(xmin, shapes[x].points[y][0])
xmax = max(xmax, shapes[x].points[y][0])
ymin = min(ymin, shapes[x].points[y][1])
ymax = max(ymax, shapes[x].points[y][1])
coords.append([xmin, xmax,(xmin + xmax)/2, ymin,ymax, (ymin + ymax)/2])

If I want the metadata for each shape through the records method, this is how to do that.  

recs = vote.records()

For now, I just care about the shapes and their distance relative to one another.  

Sunday, January 1, 2017

Voting Districts Day 2: Wrong Python Packages?

I think that I'm going to switch up and use some different packages for reading this spatial data.  In order to use the SciPy stuff, I still need more packages and those packages require some unorthodox installation methods.  It includes a ton of stuff I'm not sure I need.  So, I'm going to do this one package at a time.  Well, two in this case.  

It looks like Shapely and Fiona can do what I want initially, which is to read shapefiles and plot them.  

When I try to use pip for the install ("pip install Fiona"), it doesn't work.  It says I need Microsoft Visual C++.  

So, after searching the internet, I discovered that I have to install the packages via a wheel.  A plethora of these wheels can be found here at this University of California - Irvine website here.  

You also use pip to install these wheels; you just have to download them into the same folder first.  Also, I have to run the command prompt as an administrator via a right click when starting the application.  

Shapely seemed to work like a charm when attempting the old "import shapely" line in Python.  Fiona had other ideas.

Looking at Fiona's documentation, she requires a GDAL package, which was also available on the same UC Irvine page that had the other wheels.  I installed that one and was finally able to run "import Fiona" successfully.  

So, next time, we'll see about reading the shapefiles.