Geo pandas данные отображаются неправильно - PullRequest
1 голос
/ 29 апреля 2020

У меня совсем нет опыта работы с Geo Pandas, поэтому я немного растерялся. Я пытаюсь отобразить эти данные

jfyterNotebook dataframe image

Я следил за многими ссылками на веб-сайте Geo Pandas, читал посты в блоге, и это переполнение стека после. Все они говорят мне сделать то же самое, но, похоже, все еще работает. Построение данных в гео. Я пытаюсь сделать, это построить точки из этого CSV-файла, который имеет данные широты и долготы на карту (в конечном итоге карту, которую я загрузил из файла .shp).

В любом случае, вот код, который я написал до сих пор:

import csv
import geopandas as gpd
import pandas as pd
import matplotlib.pyplot as plt
import descartes
from shapely.geometry import Point, Polygon

#Load in the CSV Bike Station Location Data
df = pd.read_csv('HRSQ12020.csv')

#combine the latitude and longitude to make coordinates
df['coordinates'] = df[['Longitude', 'Latitude']].values.tolist()

# Change the coordinates to a geoPoint
df['coordinates'] = df['coordinates'].apply(Point)
df
#convert df to a geodf
df = gpd.GeoDataFrame(df, geometry='coordinates')
df

#plot the geodf
df.plot(figsize=(20,10));

Есть идеи, что не так? Я проверяю все 100 координат, и все они, кажется, в порядке. Любые предложения будут великолепны! Спасибо!

Ответы [ 3 ]

0 голосов
/ 30 апреля 2020

Когда я запускаю ваш код с первыми четырьмя строками координат, я получаю то, что вы ожидаете. Судя по степени вашего графика, вы можете иметь отрицательные значения широты. Можете ли вы выполнить df ['Latitude']. Min () для проверки?

import csv
import geopandas as gpd
import pandas as pd
import matplotlib.pyplot as plt
from shapely.geometry import Point, Polygon


df = pd.DataFrame({'Latitude' :[40.441326, 40.440877, 40.439030, 40.437200], 
                   'Longitude' :[-80.004679, -80.003080, -80.001860, -80.000375]})

df['coordinates'] = df[['Longitude', 'Latitude']].values.tolist()

# Change the coordinates to a geoPoint
df['coordinates'] = df['coordinates'].apply(Point)
df
#convert df to a geodf
df = gpd.GeoDataFrame(df, geometry='coordinates')
df

#plot the geodf
df.plot(figsize=(20,10));

enter image description here

Вы также можете использовать plt.subplots () и затем установите xlim и ylim для ваших данных.

df = pd.DataFrame({'Latitude' :[40.441326, 41.440877, 42.439030, 43.437200], 
                   'Longitude' :[-78.004679, -79.003080, -80.001860, -81.000375]})

df['coordinates'] = df[['Longitude', 'Latitude']].values.tolist()

# Change the coordinates to a geoPoint
df['coordinates'] = df['coordinates'].apply(Point)
df
#convert df to a geodf
df = gpd.GeoDataFrame(df, geometry='coordinates')

print(type(df))

#plot the geodf
fig, ax = plt.subplots(figsize=(14,6))

df.plot(ax = ax)


xlim = ([df.total_bounds[0] - 1,  df.total_bounds[2] + 1])
ylim = ([df.total_bounds[1] - 1,  df.total_bounds[3] + 1])

# you can also pass in the xlim or ylim vars defined above
ax.set_xlim([-82, -77])
ax.set_ylim([40, 42])

plt.show()

enter image description here

0 голосов
/ 02 мая 2020

Эти ответы полезны. Это также оказалось другим решением, так как lin go предложил установить crs. Я получал ошибку, но это сработало, когда я проигнорировал ошибку. Вот мой код, который закончил работать.

import csv
import geopandas as gpd
import pandas as pd
import matplotlib.pyplot as plt
import descartes
from shapely.geometry import Point, Polygon

#Load in the CSV Bike Station Location Data
df = pd.read_csv('HRSQ12020.csv')

#combine the latitude and longitude to make coordinates
df['coordinates'] = df[['Longitude', 'Latitude']].values.tolist()

# Change the coordinates to a geoPoint
df['coordinates'] = df['coordinates'].apply(Point)
df.head()

#fixing wrong negative value for Latitude
df.loc[df["Latitude"] == df["Latitude"].min()]
df.at[80, 'Latitude'] = 40.467715
#count the numner of racks at each station
rackTot = 0
for index, row in df.iterrows():
      rackTot += row['NumRacks']

crs = {'init' :'epsg:4326'}
geometry = [Point(xy) for xy in zip(df.Longitude, df.Latitude)]
geobikes = gpd.GeoDataFrame(df, crs=crs, geometry=geometry)
geobikes.head()

#plot the geodf
#not working for some reason, fix later
geobikes.plot()

graph

0 голосов
/ 29 апреля 2020

Вероятно, это проблема проекционной системы. Хорошо бы сразу определить crs при создании объекта Geopandas. Если вы попытаетесь,

df = gpd.GeoDataFrame(df, geometry='coordinates', crs = 4326)

, возможно, вы сможете увидеть свои очки. Я поставил "4326" , потому что ваши координаты xy выглядят как координаты GPS, которые соответствуют стандартам WSG84 (код crs: 4326). Перейдите на подходящий код crs, если он не очень хороший.

...