J'ai une classe d'entités ponctuelles représentant les bureaux de tous les employeurs d'une certaine industrie. La classe d'entités possède un attribut pour stocker le nombre d'employés travaillant dans chaque bureau. Quelqu'un a demandé à utiliser ces données, jointes spatialement à la plus petite unité géographique possible - blocs de recensement, dans ce cas. Cependant, un accord de confidentialité empêche la publication des données telles quelles. Au lieu de cela, il doit être supprimé pour répondre à deux critères:
- Tout polygone doit contenir au moins 3 employeurs (points);
- Un maximum de 80% de l'emploi total dans un polygone peut provenir d'un seul employeur.
J'ai réussi à écrire un script qui relie spatialement les points aux blocs de recensement, en conservant la somme et l'emploi maximum dans chacun. Chacun qui ne répond pas aux critères de suppression est signalé. (Les polygones ne contenant aucun point ne sont pas marqués, car il n'y a aucune donnée à supprimer.) Je vérifie ensuite chaque groupe de blocs pour voir s'il contient des blocs marqués. Les groupes de blocs contenant uniquement des blocs non marqués sont ensuite remplacés par les blocs. La classe d'entités résultante est ensuite vérifiée par rapport aux critères de suppression, pour vérifier si les groupes de blocs ont correctement supprimé les données.
Le même processus est répété pour Tracts, me laissant avec un ensemble de données composé de Tracts (certains marqués et d'autres non), de groupes de blocs et de blocs (tous non marqués). La prochaine progression dans la hiérarchie géographique, cependant, est le comté, qui n'est d'aucune utilité pour la personne qui demande ces données.
Ma question est donc la suivante: existe-t-il des méthodes communément acceptées d'agrégation des polygones en autant de groupes que possible, afin que tous répondent à des critères minimaux?
Voici quelques règles que j'aimerais appliquer à l'agrégation:
- Dans la mesure du possible, les tracts signalés ne doivent être agrégés qu'avec d'autres tracts signalés;
- Pour les tracts signalés qui ne sont pas contigus à d'autres (ou des groupes isolés qui ne répondent toujours pas aux critères), ils peuvent être joints à des tracts qui répondent déjà aux critères, bien qu'il puisse y avoir des tracts sans employeurs entre eux qui le feront également doivent être inclus.
- Je voudrais garder les limites du comté intact, sauf si cela est absolument impossible (et je prévois de le faire en séparant les caractéristiques d'entrée dans leurs comtés respectifs avant de les traiter).
- La solution doit être en Python, avec l'utilisation d'outils ArcGIS ou de bibliothèques Python open source.
Idéalement, quelqu'un peut me diriger vers un moyen existant de mise en œuvre de cette agrégation. Sinon, je suis heureux de coder l'algorithme moi-même, bien qu'une liste d'étapes / outils spécifiques serait très appréciée. Le problème me semble être un cas particulier de redécoupage (avec des polygones non contigus), et à cette fin, j'ai étudié l'utilisation des algorithmes de régionalisation de PySAL , bien qu'il ne soit pas clair pour moi comment vérifier le pourcentage maximum d'employeurs du nombre total d'employés utilisant ces .