[Python] Hilo general

B

¿Cuántos niveles del json necesitas? ¿El valor es siempre texto? Lo digo por buscar formas de procesar el archivo sin tener que convertir todos los valores (enteros, fechas, diccionarios, etc...). Una que se me ocurre en caso de solo necesitar un nivel y ser texto sería quizás usando regex en vez de "json".

1 respuesta
hda

Gracias, #1680. Echaré un vistazo. He visto que podría usar AWS glue para combinar todos los json en parquet, traerme el parquet y clasificar ahí (ya sea en local o en una imagen docker). Tengo que explorar el costo de esto. Lo bueno es que solo tendría que hacer el glue una vez al mes. Asumible, en principio. Preguntaba porque igual había alguna alternativa más eficiente y menos costosa.

#1681 De momento es solo texto que está en 1 nivel del json. En el futuro complicaré la cosa con este nivel más imágenes para una DNN. Por lo pronto he entrenado una NPL-DNN para clasificar sobre el texto de esos json. No tengo que jugar con tipos, solo clasifico sobre el raw. Eso sí, debo eliminar previamente todo json que no tenga una probabilidad de estar en inglés al... 85% (debo elegir un porcentaje, todavía).

Wei-Yu

Cuál es el punto que quieres hacer "más eficiente"? Traerte los datos de S3? Procesarlos? Serializarlos de forma óptima para agilizar la pipeline al procesar?

Si puedes paralelizar, o segmentarlos de una forma que te permita paralelizar, es una forma. Pero sin saber el bottleneck es jugar a la ruleta.

1 respuesta
hda

#1683 la forma más rápida de cargar todos los archivos. Una vez que los tenga en memoria ya los proceso como vea, sea paralelizando, por ejemplo. El punto es cómo cargar el par de millones de archivos. Creo que lo ideal es cargarlos una vez, crear un archivo de salida; y luego ya trabajar con ese archivo. Digo creo porque no sé si hay alguna otra forma eficiente de cargar los archivos rápido desde el bucket.

Estoy jugando con el az glue este y con un sample de 249 archivos json de 10 kb de media tarda unos cuantos minutos. En local tardaría muchísimo menos :S

2 respuestas
Kaiserlau

Desde la barra del bar. #1684 y no puedes mas al vuelo, publicarlos en una db, como mongo, y luego ya jugar con ellos?

Wei-Yu

#1684 influye mucho si los datos son estáticos.

Suponiendo que son estáticos, no sé si S3 ofrece alguna forma de poder hacer un bulk requests o bulk export de lo que tienes ahí. Eso lo cargaría en algún data store en local o más maleable por ti y ya deserializaría en paralelo (supongo que en la stdlib de python hay algún tipo de concepto de worker que te haga un fork por debajo). Si hay una estructura concreta que merezca la pena usar en vez de deserializarlos a pelo tal cual vienen en el json ya sólo lo sabes tú.

Si no son estáticos o no te vale con un snapshot, ahí ya te estás metiendo en terreno de ETLs.

telemaco103

Os voy a poner en mi situación a ver si me recomendáis algo. Es posible (muy posible ya de hecho) que empiece un doctorado. La temática del doctorado será en algoritmos de optimización bioinspirados/metaheurísticos. Mi nivel de programación no es de lo mejor, pero es bastante decente ya que llevo investigando en la universidad desde 2020 (Python sobretodo) y programando desde que entré en la carrera (C, C++, MATLAB...).

Había pensado en estos primeros meses de doctorado empezar a estudiar a saco cosas que podrían resultar interesantes de las que ya tengo conocimiento, pero no un profundo conocimiento (Machine Learning, Deep Learning, Reinforcement Learning, Noseque Learning...). Por ejemplo con ML he trabajado mucho y es algo que más o menos domino, pero de DL apenas he toqueteado un poco, sobre todo aplicado a Visión Artificial (CNNs para Imagenet por ejemplo).

Al lío, que me enrollo con mi background. Recomendaríais a un perfil como el mío realizar cursos online? He estado mirando sobre todo Udemy/Coursera y he visto por ejemplo que Coursera tiene un plan mensual de 59€ con acceso a muchos cursos y programas de especialización (que contienen varios cursos). La otra opción para aprender es la que he utilizado siempre, google scholar + infinidad de información en internet.

1 respuesta
gonya707

#1687 si te interesa particularmente el deep learning podrias marcarte como meta a corto-medio sacar el certificado de tensorflow, por ponerte un punto de arranque, hay varios cursos por ahi orientados a sacar ese certificado.

Mas on topic tienes el hilo de ML: https://www.mediavida.com/foro/dev/comunidad-machine-learning-deep-learning-685637 en #1 tienes una serie de recursos que te serán muy útiles tires por donde tires

Suerte con tu doctorado!

1 1 respuesta
telemaco103
#1688gonya707:

si te interesa particularmente el deep learning podrias marcarte como meta a corto-medio sacar el certificado de tensorflow, por ponerte un punto de arranque, hay varios cursos por ahi orientados a sacar ese certificado.

Me interesa el DL pero es algo secundario. Lo que más me interesa ahora mismo es RL ya que quiero ver si podría aplicarlo a un problema de investigación en el que estoy trabajando. Una vez que conozca/domine RL y vea si puedo sacarle partido, ya me pondría con DL. Al final mi intención es tener muchas herramientas a mano con conocimiento porque eso me va a abrir la mente a nuevas ideas cuando llegue un determinado problema o aplicación.

#1688gonya707:

Mas on topic tienes el hilo de ML: https://www.mediavida.com/foro/dev/comunidad-machine-learning-deep-learning-685637 en #1 tienes una serie de recursos que te serán muy útiles tires por donde tires

En el hilo ya he estado, de hecho estuve apunto de hacer los dos retos pero no pude por falta de tiempo (pico grande de trabajo y tenía que acabar y entregar el TFM). Es más, pedí recursos de RL jajaja (https://www.mediavida.com/foro/dev/comunidad-machine-learning-deep-learning-685637/4#115).

Al final mi intención es saber que opina la gente sobre aprender con cursos vs aprender de la manera tradicional (libros/papers/internet) como llevo haciendo todo este tiempo. Mi única experiencia con cursos fue el de ML de Coursera y lo termine dejando a la mitad porque lo que me enseñaba lo conocía todo y acabé aburriéndome.

1 respuesta
hda

#1689 los cursos que están ampliamente aceptados, o cuyos instructores son reconocidos, resultan en una cierta garantía. Estoy pensando en el de Ng por ejemplo. Además, los cursos ofrecen algo que creo clave, un itinerario. Por último, muchos de los cursos de pago terminan con un reconocimiento que puede o no servir para el CV.

Dicho esto, existen también recursos libres, reconocidos y con itinerarios propuestos. En esta categoría te propongo este si quieres entender los fundamentos o estos otros (en la sección machine learning) si quieres explotar la tecnología.

¡La mejor de las suertes con tu doc!

Nota: quizás este comentario debería ir en el otro hilo.

1 respuesta
CaNaRy_r00lz

#1690 Pregunta tonta, pero donde ves que "x" cursos estan mas reconocidos que otros?

1 respuesta
hda

#1691 para mí principalmente por el renombre de la instrucción o por recomendación.

1
fkdlzh

pregunta noob, que acabo de empezar con esto.

cual es la mejor manera de guardar archivos mientras aprendes? por ejemplo, si hoy practico "while loop" y quiero copiar el codigo para verlo otro dia o imprimirlo para leerlo en el bus, cual seria la manera optima?

i = 1
while i <= 10:
print(i)
i += 1

print("Done with loop")

por que hasta ahora lo estaba metiendo en un drive excel y me acabo de dar cuenta de que se come todos los indents(como aki en mv). probe a guardar el archivo sin mas como "save as" pero no me deja abrirlo, y si lo abro con pycharm me sale en blanco.

tan solo busco la mejor manera de poder crearme apuntes para revisionarlo de forma comoda, tanto en papel como con el movil/pc

4 respuestas
Eckooo

#1693 create un documento con screenshots o tambien tienes editores de codigo para movil

1 respuesta
Kookiu

#1693 súbelo a replit https://replit.com/ y te creas tu propia carpeta.

la otra forma es descargarte alguna aplicación de notas multiplataforma con soporte de markdown (Obsidian por ejemplo) que te permite incrustar snippets de código.

1 respuesta
Lolerpopler

#1693 Create un repository en github, cada ejercicio en un archivo/carpeta, y ya.

1 respuesta
fkdlzh

#1694 no soy muy fan de los screenshot, me gusta poder acceder al documento en si, pero tomo nota
#1695 lo de replit parece que esta genial, tendre que trastearlo un poco pero parece que sirve para lo que buscaba, te guarda el codigo perfectamente, es accesible desde varios dispositivos. lo unico malo que parece que no se puede imprimir
#1696 cual es la diferencia entre github y replit? solo los he visto por 5min pero repli me llama algo mas, puedo ver el codigo y hacerle run directamente y parece bastante mas intuitivo todo

1 respuesta
Lolerpopler

#1697 github es el "estandar" en repositorios, especialmente para los abiertos (no digo que sea el unico).
Replit es si quieres comprometerte a usar sus herramientas mientras que github guarda tu codigo y hace colaborar con otros usuarios y todo lo demas corre de tu cuenta. Son diferencias con muchos matices pero si estas entrando en la programacion algo importante de aprender es version control y usar git (que no github)

B

#1693 Se le suele llamar "snippet". Puedes usar gist: https://gist.github.com/ ... o github directamente. Yo usaba gist, pero me he cambiado a 'Trilium Notes' y lo tengo todo en mi propio servidor: https://github.com/zadam/trilium/wiki/Screenshot-tour

Con respecto a Gist, tienes clientes de escritorio como Lepton: http://hackjutsu.com/Lepton/ (Es lo que usaba cuando trabajaba con Gist)

15 días después
Rivendel

https://www.fanatical.com/en/bundle/online-tutor-python-programming-bundle me he pillado este bundle, da certificado en UK pero no se si es bueno o no, tiene desde 0 hasta dev, data science y machine learning

2 respuestas
hda

#1700 ya contarás qué tal :)

CaNaRy_r00lz

#1700 Ostia pues me estas tentando, pero aun no he terminado el otro mirando ahi tambien he visto este otro

que me llama con lo de las API´s (por cierto esta con Python 3.6), pero bajo mi experiencia mirando curros si quieres pasarte a IT, sino tienes experiencia ni caso, y no creo que poner los cursos como experiencia sirva de algo. Al igual que hacer los tipicos proyectos de calculadora, y noseque mas que ves por internet, supongo que si haces algo tuyo entonces si podria contar como experiencia

werty

Esto es solo comentario personal, pero necesitaba desahogarme: llevo días dándome cabezazos para poder exportar a csv unos archivos (sqlite) cuando su tamaño excede el GB.
Es realmente exponencial porque tengo una base de datos es 600M, me tarda 15 minutos con pandas (read_sql primero, y luego to_csv), pero si la base de datos es tan solo el doble (1.2GB) me tarda horas. He probado con multitud de cosas: chunking, modin, dark, conectorx, cargar la base de datos entera en memoria... pero nada :(
Sé que debe haber algún modo pero no soy capaz y ando algo desanimado con el tema 😩

2 respuestas
hda

#1703 interesa.

Mis bases de datos rondan los gigas. Yo hago todo el ETL y soy el hub de mis compañeros, a quienes exporto a xlsx, dta o csv. Trabajo casi siempre en pickle, que carga muchísimo más rápido que otros formatos. La velocidad de lectoescritura se ve afectada cuando meto compresión bz2, pero salvo mucho espacio. Me consta que parquet es muy rápido también (enlace).

He explorado varias alternativas para hacer speedup en lectura, he intentado tirar de dusk para carga y para cálculo. Pero no he logrado mucha cosa.

Hace unos 10 días tuve el primer OOM exception. Cuando fui a guardar unos cálculos, como el objeto en memoria se comprime en memoria, no tenía espacio libre en la RAM para efectuar la compresión previa al guardado. Dispongo de 32 Gb y se ve que estoy en el límite. Al final pude ejecutar el guardado comprimido borrando algunas variables intermedias, pero que, vaya, tener toda la noche procesando y al final no poder guardar por querer comprimir...

A mi próximo PC le meto mínimo 64 GB de RAM. Y un buen procesa. Los 8 núcleos del 7700k se me quedan cortos. Quiero más workers y por pedir una o dos 4090 parad deeplearning, que la optimización para algunos entrenamientos es hardcore, ocupando 10040 mb de los 10240 que tiene mi 3080.

2 1 respuesta
KarlosWins

#1704 Me sorprende que no te den una instancia de computación en la nube para hacer tu trabajo y andes con un pc casero xD suena muy interesante tu trabajo.

1 respuesta
hda

#1705 el problema soy yo. Estoy todavía estudiando aws. Por lo urgente de los resultados todavía hago las cosas en local, aunque ya estamos migrando a la nube. Hemos empezado por el webscraping, 20 instancias para requests y webdriver, ya rula ok guardando la data en S3. Esto habrá que optimizarlo en el futuro posiblemente con pypeteer.

Como digo, el problema soy yo. Soy el DS de mi equipo, solo somos 3 personas. Pero está en el itinerario desplegar todo en la nube. Relacionado: https://www.mediavida.com/foro/dev/aws-como-empezar-686677

1
gonya707

Algún consejo para hacer web scrapping de una web que está hecha de putisimo culo? De vez en cuando de encuentras un párrafo que no está en un <p> cuando los otros si lo están, las tablas están todas formateadas distintas y es totalmente impredecible qué vas a encontrar en el siguiente artículo.

1 respuesta
hda

#1707 entiendo que no hay un campo id o class común por el que puedas buscar. O algún elemento constante sobre el que puedas pivotar (parent, next_siblin...).

Si sabes que en la misma zona de la jerarquía se encuentra siempre la data, prueba a intentar accesarla con xpath.

1
Lolerpopler

#1703 Es "normal" que aumente el tiempo, al final estás cargando los datos en memoria, escribiéndolos, repite el proceso hasta acabar con todo.
Probablemente el embudo lo tengas en la operación de escribir al CSV.

Si la base de datos está particionado por fechas, por ejemplo, puedes listar las particiones e ir una a una, al menos no tendrás que ejecutar la operación sobre toda la bdd, solo las particiones nuevas, y en casa do fallo no te toca empezar de 0 sólo reintentar las fallidas

1 respuesta
werty

#1709 si, la base de datos tiene una columna "creation time", pero el caso es que la "exportación" funciona igual haciéndolo por separado que todo a la vez. (de hecho tarda más particionando por fechas al meterles un WHERE al sql query), la cosa era hacer: sql_query = "select * from table", luego usar pandas para pasarlo a un dataframe: df = pd.read_sql(sql_query, chunksize=1000...), y este dataframe exportarlo a csv: df.to_csv(...).

el cuello de botella lo tengo en read_sql :/, (además tengo dos threads, uno con read_sql que lee de 1000 en 1000 (chunking) y lo pone en un Queue, y otro threads que lee de la cola Queue y hace el exporta).

Lo que me sorprende es que vaya tan lento cuando 1GB no me parece para nada excesivo.
El simple hecho de hacer COUNT(*) ya tarda horas.

4 respuestas

Usuarios habituales