Closed Sussi-MW closed 3 years ago
Holaaaaa Susana 🙋♀️. Vamos a por el proyecto de este finde! 🔥🔥
El readme perfectito Susana 👏👏. Solo me ha faltado un cosita:
En general la estructura esta bien, con los jupyters metidos en una carpeta y numerados para saber el orden de trabajo. Te dejo algunos comentarios:
Genial, no se te ha colado ningún archivo raro, todos dentro del .gitignore
👏
Me ha faltado la carpeta src
. Tienes todas las funciones, pero dentro del jupyter ,pásalas a un .py y estará perfecto!
Vamos con el código:
Primer jupyter 1_query the database
Tienes código altamente repetido a lo largo del jupyter. Esto habría que atomizarlo.
Crea una función para hacer la request a la API.
def get_data_foursquare(coords, type):
# type será cada uno de los criterios de búsqueda en foursquare
url_query = 'https://api.foursquare.com/v2/venues/explore'
tok1 = os.getenv("tok1")
tok2 = os.getenv("tok2")
parametros = {
"client_id": tok1,
"client_secret": tok2,
"v": "20180323",
"ll": f"{coords.get('coordinates')[0]},{coords.get('coordinates')[1]}",
"query": f'{type}',
"limit": 170
}
resp = requests.get(url= url_query, params = parametros).json()
sf_starbucks = resp.get("response").get("groups")[0].get("items")
mapa_nombre = ["venue", "name"]
mapa_latitud = ["venue", "location", "lat"]
mapa_longitud = ["venue", "location", "lng"]
lista_starbucks = []
for dic in sf_starbucks:
paralista = {}
paralista["type"] = f'{type}'
paralista["name"] = getFromDict(dic, mapa_nombre)
paralista["latitud"]= getFromDict(dic, mapa_latitud)
paralista["longitud"] = getFromDict(dic,mapa_longitud)
lista_starbucks.append(paralista)
df = pd.DataFrame(lista_starbucks)
return df
Hacer una lista con los criterios de búsqueda de foursquare.
lista_colecciones = ["school", "vegan", "starbucks"...]
Iterar por la lista llamando a la función de la llamada a API
for i in lista_colecciones:
x = get_data_foursquare(coords, i)
No aplicas la función geo_distance
a los aeropuertos que has encontrado en foursquare ¿Por qué?
Tienes la función geo_distance
para calcular los metros que hay entre cada uno de los puntos encontrados en foursquare y la ubicación de tu empresa, en la que usas el método geodesic
lo cual esta bien. Pero una de las objetivos de este proyecto era que usarais las geoqueries en mongo.
Una vez que tienes todos tus datos de la llamada a la API los metes en una colección de mongo
Haces las geoqueries usando $near
o $geonear
. Una posible opción con near
podría ser:
def get_geo(coords):
#coords será las coordenadas de la empresa de san francisco a la que le quieres robar la ubicación. Hay que pasar esas coordenadas a geopuntos
c1 = {"type": "Point", "coordinates": coord}
# Hacemos la geoquery donde tendremos que indicar la distancia máxima a la que queremos que nos busque en nuestra colección (en metros)
query = {"location": {"$near": {"$geometry": c1, "$maxDistance": 2000}}}
#haecemos el fins
final_q = list(collection.find(query))
#lo pasamos a dataframe
df = pd.DataFrame(final_q)
return df
coord = [-122.409173, 37.788482]
c = {"type": "Point", "coordinates": coord}
result = get_geo(c) #aquí tendremos un dataframe con las los starbucks, veganos y aeropuertos que estén a dos kilometros de nuestra ubicación.
Bueno Susana, en este proyecto has cogido una base de datos, te las peleado con ella, has hecho llamadas a un API para incorporar mas información a tu datos. Pero te ha faltado la parte de las gequeries.
Siendo data analysts tenemos que garantizar que las decisiones que tomamos se basan en lo que trabajamos. Me han faltado algunas cositas en este proyecto, te dejo por aquí algunos comentarios por si te aportan valor:
Solo has elegido una ubicación dentro de San Francisco. Lo ideal hubiera sido que eligieras varias y que después evalúes cual de ellas es la mejor en función a unos criterios dados.
Los datos son nuestros amigos, y como analistas de datos tendremos que trabajar con ellos en el día a día. Tu has calculado distancias lo cual esta perfect, pero lo ideal es que hubieras elegido las geoqueries
Atomizar código en el jupyter para evitar estructuras de código muy repetidas.
Crear el archivo .py
con todas las funciones que usas en el proyecto y quitarlas del jupyter.
Buen trabajo Susana, este proyecto tenía mucha chicha y has conseguido unos resultados interesantes! 💪💪
https://github.com/Sussi-MW/geospatial-data-project.git