¿Cómo contar las observaciones de un diagrama de dispersión en geoJSON?
Básicamente, tengo un mapa municipal de los Países Bajos con una gráfica de dispersión de observaciones de Polygonum cuspidatum, utilizando PySpark y Python. Lo que ahora quiero saber es el recuento de observaciones de Polygonum cuspidatum por municipio. A continuación, el código que tengo ahora:
import ...
<p>map<em>source = 'https://geodata.nationaalgeoregister.nl/cbsgebiedsindelingen/wfs?request=GetFeature&service=WFS&version=2.0.0&typeName=cbs</em>gemeente<em>2017</em>gegeneraliseerd&outputFormat=json'</p>
<h1>redimensionar el mapa al sistema de coordenadas correcto (Amersfoort RD/Nuevo; 28992)</h1>
<p>gdf = gpd.read<em>file(map</em>source)
epsg<em>code = 28992
gdf.crs = {"init": "epsg:{}".format(epsg</em>code)}
gdf<em>reprojected = gdf.to</em>crs({"init": "epsg:4326"})</p>
<p>import json
the<em>json = json.loads(gdf</em>reprojected.to_json())</p>
<h1>Convertir en objeto similar a una cadena.</h1>
<p>json<em>data = json.dumps(the</em>json)</p>
<p>from bokeh...</p>
<p>geosource = GeoJSONDataSource(geojson = json_data)</p>
<p>q = figure(title = 'Observaciones de Polygonum cuspidatum', plot<em>height = 700 , plot</em>width = 700, toolbar_location = None, )</p>
<p>q.patches('xs','ys', source = geosource,fill<em>color = {'field' :'per</em>cent<em>year', 'transform' : color</em>mapper},
line<em>color = 'black', line</em>width = 0.25, fill_alpha = 1)</p>
<h1>creando puntos de latitud y longitud del dataframe como lista</h1>
<p>latlist = datadf.select('Lat').rdd.flatMap(lambda x: x).collect()
lonlist = datadf.select('Lon').rdd.flatMap(lambda x: x).collect()</p>
<h1>añadiendo estos puntos al mapa utilizando las listas</h1>
<p>q.scatter(lonlist,latlist, size = 0.5, marker='^')
output_notebook()</p>
<h1>Mostrar la figura.</h1>
<p>show(q)
Perdón si te confundes con esto, no soy una experta en programación.
Eliminé parte del código que no es importante para ti conocer. Es posible que no todo este código sea necesario, pero lo dejé por si acaso. Este código me da un bonito mapa de los Países Bajos con una gráfica de dispersión de observaciones de Polygonum cuspidatum, así que está correcto. Datadf es nuestro dataframe en el que se almacenan todos los puntos. Como puedes ver, tuve que redimensionar el sistema de coordenadas del mapa municipal, espero que eso no sea un problema. Se puede hacer clic en el enlace de la fuente de datos para ver cómo está configurado. Aquí está el enlace nuevamente: https://geodata.nationaalgeoregister.nl/cbsgebiedsindelingen/wfs?request=GetFeature&service=WFS&version=2.0.0&typeName=cbsgemeente2017_gegeneraliseerd&outputFormat=json
Nuestros puntos (las observaciones) son coordenadas normales de latitud y longitud.
Lo que imagino es que utilizo una función de Python para verificar en qué municipio se encuentra la observación, luego almaceno el recuento utilizando un bucle for, por ejemplo. Sin embargo, como puedes ver haciendo clic en el enlace, originalmente el geoJSON no utiliza valores de latitud y longitud, por lo que esto podría ser un problema. Además, para esto necesito recuperar los datos del geoJSON (qué coordenadas son para qué municipios, etc.), y debo decir que no sé exactamente cómo hacerlo.
¿De qué manera puedo verificar el recuento de observaciones por municipio? Actualmente no lo sé/cómo hacerlo. ¿O es posible hacerlo en absoluto? ¡Gracias de antemano!
davy.ai
Para contar el número de observaciones de la especie Knotweed (hierba de Santiago) por municipio, necesitará realizar los siguientes pasos:
Utilice la librería geopandas para leer los datos del mapa municipal como un GeoDataFrame.
Una los datos de observación de Knotweed con los datos del mapa municipal basados en la ubicación de cada observación.
Utilice la función groupby de pandas para contar el número de observaciones por municipio.
Aquí hay un ejemplo de cómo realizar estos pasos:
Esto debería darle un DataFrame con el recuento de observaciones de Knotweed por municipio. Tenga en cuenta que he utilizado la columna ‘GM_NAAM’ de los datos del mapa municipal para agregar las observaciones por municipio, ya que parece ser el nombre del municipio. Si esto no es correcto, deberá ajustar la función groupby en consecuencia.