Closed Lydia-Arocena closed 2 years ago
Hola Lydia 🙋🏻♀️! Seguimos con más proyectos, y ahora es el turno del proyecto de las geoqueries!
Gran trabajo en el readme Lydia! Como siempre vamos a por algunos detallines para que quede peeeerfectisimo!
Nombras el GeoNear
en el readme, podríamos incluir el link a la documentación oficial de este método específico.
Incluyes todas las librerías que has usado y los links a su documentación oficial. Pero sigue sin verse del todo bien.
Recuerda para hacerlo:
# el nombre de la librería entre corchetes y el link a la página entre paréntesis, sin ningún espacio entre ellos.
[sys](https://docs.python.org/3/library/sys.html)
Para cerrar el proyecto y que quede todo perfectamente justificado, podríamos haber incorporado en el readme una pequeña explicación de por qué te basas en esos criterios para determinar la ubicación de tu empresa, es decir, por qué Designers, Starbucks, airports/trains, bars y vegans?
En general, el repo esta perfectamente organizado Lydia. Buen trabajo! Vamos a por detallines:
En la carpeta Notebooks
:
Se te han pasado los .ipynb_checkpoints
. Recuerda, estos tienen que ir al .gitignore
ya que son ficheros que no aportan información a nuestro repo
Tienes tres ficheros json
dentro de esta carpeta. Ya que estos archivos, en si son datos deberían ir en la carpera de data
.
En la carpeta src
:
__pycache__
, esta carpeta al .gitignore
. Lydiaaaaaa, que te me has dejado el .env
fuera del .gitignore
y puedo ver todos tus tokens 😱
Tienes una foto, aunque solo sea una, podemos crear una carpeta para amacenarla y que no nos quede por ahí suelta.
Tienes un fichero main.py
que esta vacío. En este caso, no lo deberíamos incluir en el repo. No debemos incluir ficheros vacíos o ficheros que no aportan valor al proyecto.
Tienes todo el proyecto en un único jupyter. En este proyecto podíamos modularizar el código en distintos jupyter en función del objetivo de nuestro código:
Homogeneiza idiomas. Tienes algunas cosas en ingles y otras en español.
En la parte que estas sacando la info de la API si te fijas hay un parte que repites una y otra vez:
parametros_D = {
"client_id": client_id,
"client_secret": client_secret,
"v": "20180323",
"ll": f"{madrid['coordinates'][0]}, {madrid['coordinates'][1]}",
"query": "Disco"
}
disco_mad=requests.get(url_query,params=parametros_D).json()
disco_datamad=disco_mad["response"]["venues"]
lista_discomad=func.extraetodo(disco_datamad)
# y luego lo conviertes a dataframe.
# En este proyecto usas muchas funciones, pero la mayoría de ellas derivadas de la clase. Lo ideal es que nosotras crearamos también alguna. Y este código de arriba es un buen ejemplo!
url_query = 'https://api.foursquare.com/v2/venues/search'
def get_api_data(url_query, coords, criterio):
client_id = os.getenv("tok1")
client_secret = os.getenv("tok2")
parametros_D = {
"client_id": client_id,
"client_secret": client_secret,
"v": "20180323",
"ll": f"{coords['coordinates'][0]}, {coords['coordinates'][1]}",
"query": f'{criterio}'
}
df=requests.get(url_query,params=parametros_D).json()
df=df["response"]["venues"]
lista_datos=func.extraetodo(df) # dentro de una función podemos llamar a otra.
datos=pd.DataFrame(lista_datos)
datos["categoria"] = f'{criterio}'
return datos
# creamos una lista con los criterios en los que estamos interesados:
lista_criterios = ["Bar", "Starbucks", "airport"]
final_df = pd.DataFrame()
for criterio in lista_criteros:
df = get_api_data(url_query, madrid, criterio)
final_df = pd.concat([final_df, df])
# al final con esto lo que sacaremos será un único dataframe con tola la info para una ciudad. Y solo tendremos que hacer este for tantas veces como ciudades tengamos.
# luego hay una parte que eliminas ciertas filas porque tienes algunas etiquetas que no son del todo correctas. Esto lo puedes hacer sobre el dataset final.
# NOTA: esto es pseudo-codigo, lo he ido escribiendo según te corregia, puede que haya algun error.
Lo mismo podemos hacer cuando metemos los datos en mongo. Nos podemos crear una funcioncita que lo haga automaticamente
def queries_close (df, nombre):
# donde :
# nombre es el nombre que le quieras dar a la coleccion
# df el dataframe con tus datos.
client = MongoClient()
db = client.TUBASEDEDATOS
collection = db.create_collection(name = f"{nombre}")
collection = db[f"{nombre}"]
data = df.to_dict(orient='records') # para meter el dataframe en mongo necesitamos que sea un diccionario. Por lo que lo cambiamos.
collection.insert_many(data)
Por el resto, todo perfecto Lydia! Buen trabajo
A modo de resumen de los comentarios que te fui haciendo a lo largo de la corrección:
Aún con todo Lydia, suuuper trabajazo. Fue un proyecto doloroso, pero lo has sacado suuper bien!
Venga venga que ya no queda nadaaaa 🔥🔥
https://github.com/Lydia-Arocena/PROYECTO-3-MAPS