The name 'read_ctry' feels... awkward...
Also the 'read_*' vars are not used elsewhere.  Suggest compressing the above 8 lines into: (get the users used to seeing OO notation)
countries = shp.Reader(ctry_fname).geometries()
population = shp.Reader(pop_fname).records()
rivers = shp.Reader(rivers_fname).geometries()