Commit 4576cb4a authored by Gregory Herschlag's avatar Gregory Herschlag
Browse files

adding wrapper for fuzziness

parent 62c05dd8
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -190,7 +190,9 @@ def clusters(graph, pops, ndistricts, tolerance, verbose=0, fuzz=0):
    memo = {} #memoization
    outout = set()
    while result[-1] and max(len(x[0]) for x in result[-1]) > 0: #while there are counties left
        print(len(outout), len(result), len(result[-1]), min(len(x[0]) for x in result[-1]), max(len(x[0]) for x in result[-1])) #cluster size, number of options, counties left
        if verbose > 0:
            print(len(outout), len(result), len(result[-1]), 
                  min(len(x[0]) for x in result[-1]), max(len(x[0]) for x in result[-1])) #cluster size, number of options, counties left
        adding = set()
        j = 0
        cluster_size = len(result) + 1
@@ -199,7 +201,7 @@ def clusters(graph, pops, ndistricts, tolerance, verbose=0, fuzz=0):
                outout.add(clusters)
                continue
            j += 1
            if j % 200 == 0 and adding:
            if j % 200 == 0 and adding and verbose > 0:
                print(j, best_so_far, min(len(x[0]) for x in adding), max(len(x[0]) for x in adding), len(adding))
            ndistricts_left = ndistricts
            for (cluster, districts) in clusters:
@@ -229,8 +231,10 @@ def clusters(graph, pops, ndistricts, tolerance, verbose=0, fuzz=0):
    if not outout:
        outout.update({x[1] | frozenset({frozenset(x[0])}) for x in result[-2]})
    M = max(len(x) for x in outout)
    if verbose > 0:
        print(M)
    trueout = [x for x in outout if len(x) == M]
    if verbose > 0
        print(len(trueout))
    return trueout

+27 −21
Original line number Diff line number Diff line
import geopandas as gpd
import os
import pandas as pd
import random

import clusters
import clusters_full3
import qgGeoDFDataExtraction as gpdExtractor

from importlib import reload
reload(clusters)
reload(clusters_full3)

###############################################################################

################################################################################

def clusterCountiesDF(gpdFile, districts, cntyField="", popField="",
                      adjacency="Rook", adjFldName="Neighbors", 
                      adjDelim=", ", tol=0.05, verbose=False, 
                      verboseLevel = 0):
                      verboseLevel=0, fuzz=0):
    
    adjacencyDict = gpdExtractor.adjacencies(gpdFile, adjacency, cntyField, 
                                             adjFldName, adjDelim, verbose)
@@ -22,17 +23,22 @@ def clusterCountiesDF(gpdFile, districts, cntyField = "", popField = "",
        raise Exception("Empty population field")
    popDict = gpdExtractor.extractDataDict(gpdFile, cntyField, popField)
    cntyClusterings = clusterCounties(adjacencyDict, popDict, districts, tol, 
                                   verbose, verboseLevel)
                                      verbose, verboseLevel, fuzz)
    return cntyClusterings

################################################################################
###############################################################################


def clusterCounties(cntyAdjacency, popData, districts, tol=0.05, 
                    verbose = False, verboseLevel = 1):
    if not verbose:
        verboseLevel = 0
    cntyClusterings = clusters.clusters(cntyAdjacency, popData, districts, tol, 
                                     verbose)
                    verbose=False, verboseLevel=1, fuzz=0):
    # if not verbose:
    #     verboseLevel = 0
    if fuzz == 0:
        cntyClusterings = clusters.clusters(cntyAdjacency, popData, districts, 
                                            tol, verbose)
    else:
        cntyClusterings = clusters_full3.clusters(cntyAdjacency, popData, 
                                                  districts, tol, verbose, fuzz)
    return cntyClusterings

################################################################################