|
16 | 16 | - [Herramientas para encontrar DataSets](#herramientas-para-encontrar-datasets)
|
17 | 17 | - [ETL](#etl)
|
18 | 18 | - [Web Scrapping](#web-scrapping)
|
| 19 | + - [Requests](#requests) |
| 20 | + - [Beautiful Soup](#beautiful-soup) |
| 21 | + - [Solicitudes a la web: Requests](#solicitudes-a-la-web-requests) |
| 22 | + - [Page Object Patter (Patrón de diseño)](#page-object-patter-patr%c3%b3n-de-dise%c3%b1o) |
19 | 23 | - [Pandas](#pandas)
|
| 24 | + - [Estructuras de datos: Series](#estructuras-de-datos-series) |
| 25 | + - [Estructura de datos: DataFrames](#estructura-de-datos-dataframes) |
| 26 | + - [Índices y selección](#%c3%8dndices-y-selecci%c3%b3n) |
| 27 | + - [Dictionary like:](#dictionary-like) |
| 28 | + - [Numpy like:](#numpy-like) |
| 29 | + - [Label based:](#label-based) |
| 30 | + - [Data wrangling o domado de datos](#data-wrangling-o-domado-de-datos) |
| 31 | + - [Trabajar con datos faltanntes](#trabajar-con-datos-faltanntes) |
20 | 32 | - [Sistemas de información](#sistemas-de-informaci%c3%b3n)
|
| 33 | + - [SQLite](#sqlite) |
21 | 34 | - [Nube](#nube)
|
22 | 35 |
|
23 | 36 | # Introducción
|
@@ -247,8 +260,188 @@ Elementos básicos de la web:
|
247 | 260 | * **Javascript:** nos permite añadir interactividad y cómputo a nuestra web.
|
248 | 261 | * **JSON:** Simplemente es una forma de transmitir datos entre servidores y clientes. Es la forma estándar en las que en la web y las aplicaciones se comunican con los servidores backend.
|
249 | 262 |
|
| 263 | +Conceptos clave |
| 264 | + |
| 265 | +> **Pipeline** en su definición más sencilla es una serie de pasos para **convertir una entrada en algo diferente**, el automatizar estos pipelines es disminuir la intervención humana para que se ejecuten estos pipelines. |
| 266 | +
|
| 267 | +Resumiendo web scrapping |
| 268 | + |
| 269 | +> **Web Scrapping** es **tomar la información publica de un sitio web, manipularla (transformarla, analizarla) para poder obtener otra información**, esta transformación y análisis se hacen por medio de pipelines para descargar la información, revisarla y poder convertirla en información útil para lo que necesitas. |
| 270 | +
|
| 271 | +## Requests |
| 272 | + |
| 273 | +https://requests.readthedocs.io/es/latest/ |
| 274 | + |
| 275 | +Para poder experimentar con la web necesitamos un método programático para solicitar URLs y obtener HTML |
| 276 | + |
| 277 | +> **Requests:** Nos permite **generar solicitudes a la web dentro de Python y utilizar los diferentes verbos HTTP**, normalmente utilizaremos el método **GET** porque vamos a traer datos. |
| 278 | +
|
| 279 | +* requests.get('url') para hacer una solicitud a la web y nos devolverá un objeto response |
| 280 | + |
| 281 | +> Todas las solicitudes HTTP tienen metadatos para que los diferentes sistemas y computadoras puedan entender de qué va la solicitud. |
| 282 | +
|
| 283 | +## Beautiful Soup |
| 284 | + |
| 285 | +https://www.crummy.com/software/BeautifulSoup/bs4/doc/ |
| 286 | + |
| 287 | +En el caso de Python la **librería estándar para manipular los documentos HTML se llama BeautifulSoup.** |
| 288 | + |
| 289 | +BeautifulSoup nos ayuda a **organizar gramaticalmente(parsear) el documento HTML** para que tengamos una estructura con la cual podamos manejar y extraer información. **BeautifulSoup convierte el string de HTML en un árbol de nodos para poder manipularlo.** |
| 290 | + |
| 291 | +Para manipularlo podemos usar los selectores CSS con **soup.select()** |
| 292 | + |
| 293 | + |
| 294 | +## Solicitudes a la web: Requests |
| 295 | + |
| 296 | +**Un buen Data engineer utiliza los conceptos de la ingeniería de software para poder desarrollar sus programa.** En nuestro caso para poder desarrollar nos apoyaremos de un patrón. |
| 297 | + |
| 298 | +## Page Object Patter (Patrón de diseño) |
| 299 | + |
| 300 | +> Es un patrón que consiste en esconder los queries especificos que se utilizan para manipular un documento HTML detrás de un objeto que representa la página web. |
| 301 | +
|
| 302 | +**Si estos queries se añaden directamente al código principal, el código se vuelve frágil** y va a depender mucho de la modificación que hagan a la web otras personas y arreglarlo se vuelve muy complicado |
| 303 | + |
| 304 | +https://medium.com/tech-tajawal/page-object-model-pom-design-pattern-f9588630800b |
| 305 | + |
| 306 | +<div align="center"> |
| 307 | + <img src="img/2.png"> |
| 308 | +</div> |
| 309 | + |
250 | 310 | # Pandas
|
251 | 311 |
|
| 312 | +**Pandas nos otorga diversas facilidades para el ““domado de datos””. Nos otorga dos estructuras de datos:** |
| 313 | + |
| 314 | +* **Series:** Es un **array** unidimensional que representa una **columna**. |
| 315 | +* **DataFrame:** Es un **conjunto de series que forman una tabla.** Se pueden acceder a través de indices como una etiqueta(label) o pueden ser posicionales es decir 0 o índice 100. |
| 316 | + |
| 317 | +> También pueden ser rangos o slices |
| 318 | +Estas estructuras de datos no son contenedores de datos. En Pandas **las utilizamos para transformar y enriquecer nuestros datos, manipularlos, manejar los faltantes, realizar operaciones aritméticas, combinar diferentes dataframes en uno solo para obtener una nueva tabla.** |
| 319 | + |
| 320 | +https://likegeeks.com/es/tutorial-de-python-pandas/ |
| 321 | + |
| 322 | +https://www.learnpython.org/es/Pandas%20Basics |
| 323 | + |
| 324 | +https://s3.amazonaws.com/assets.datacamp.com/blog_assets/PandasPythonForDataScience.pdf |
| 325 | + |
| 326 | +## Estructuras de datos: Series |
| 327 | + |
| 328 | +Series es un **vector unidimensional**, para poder acceder a esta lista **podemos usar posiciones o labels**, siendo este último el preferido para manipular las series. **Una diferencia importante sobre las listas de Python es que los datos son homogéneos**, es decir solo podemos tener un tipo de dato por cada Serie. |
| 329 | + |
| 330 | +> Las Series se pueden crear a partir de cualquier secuencia(listas, tuplas, arrays de numpy y diccionarios). |
| 331 | +
|
| 332 | +En Python tenemos la **filosofía del Duck Typing, si se ve como un pato y hace cuac, a ese animal le llamamos pato,** si una serie se comporta una lista, se accede como una lista en principio deberíamos llamarla lista, pero esto no es así. |
| 333 | + |
| 334 | +> Una mejor aproximación para inicializar Series es utilizar **diccionarios**. |
| 335 | +
|
| 336 | +<div align="center"> |
| 337 | + <img src="img/4.png"> |
| 338 | +</div> |
| 339 | + |
| 340 | +<div align="center"> |
| 341 | + <img src="img/3.png"> |
| 342 | +</div> |
| 343 | + |
| 344 | + |
| 345 | + |
| 346 | +## Estructura de datos: DataFrames |
| 347 | + |
| 348 | +DataFrames **son simplemente una tabla donde las filas y las columnas tienen etiquetas**, se puede construir de diferentes formas pero siempre debemos considerar que la estructura que necesitamos construir para inicializarla tiene que ser bidimensional. |
| 349 | + |
| 350 | +> Una matriz y puede ser una lista de listas, lista de tuplas, un diccionario de Python u otro DataFrame. |
| 351 | +
|
| 352 | +**Si solo tenemos una dimensión a eso no le llamamos DataFrame, le llamamos Serie**. Cuando utilizamos un diccionario las llaves se convierten en las llaves de la columna. |
| 353 | + |
| 354 | +## Índices y selección |
| 355 | +Existen muchas formas de manipular los DataFrames y de seleccionar los elementos que queremos transformar. |
| 356 | + |
| 357 | +### Dictionary like: |
| 358 | + |
| 359 | +```python |
| 360 | +df['col1'] |
| 361 | +df[['col1', 'col3']] |
| 362 | +``` |
| 363 | + |
| 364 | +### Numpy like: |
| 365 | + |
| 366 | +```python |
| 367 | +iloc = index location |
| 368 | +df.iloc[:] |
| 369 | +df.iloc[:,:] |
| 370 | +``` |
| 371 | + |
| 372 | +### Label based: |
| 373 | +```python |
| 374 | +loc = location |
| 375 | +df.loc[:] |
| 376 | +df.loc[:,:] |
| 377 | +``` |
| 378 | +| |
| 379 | +Existe una gran diferencia en la forma en la que utilizamos estos slices porque varia de la forma tradicional de Python. loc va a incluir el final del que necesitamos. |
| 380 | + |
| 381 | + |
| 382 | +## Data wrangling o domado de datos |
| 383 | + |
| 384 | +**Data wrangling es una de las actividades más importantes de todos los profesionales de datos.** Simplemente es limpiar, transformar y enriquecer el dataset para objetivos posteriores. |
| 385 | + |
| 386 | +Pandas es una de las herramientas más poderosas para realizar este ““domado”” de datos. Recordemos que Pandas trae muchas de sus abstracciones del lenguaje R, pero nos otorga lo mejor de ambos mundos, por eso es tan popular. |
| 387 | + |
| 388 | +Nos permite: |
| 389 | + |
| 390 | +* Generar transformaciones con gran facilidad. |
| 391 | +* Trabajar rápidamente con datasets grandes |
| 392 | +* Detectar y reemplazar faltantes |
| 393 | +agrupar y resumir nuestros datos |
| 394 | +* Visualizar nuestros resultados. |
| 395 | + |
| 396 | +## Trabajar con datos faltanntes |
| 397 | + |
| 398 | +Los datos faltantes representan un verdadero problema sobre todo cuando estamos realizando agregaciones. **Imagina que tenemos datos faltantes y los llenamos con 0, pero eso haría que la distribución de datos se modificaría radicalmente.** Podemos eliminar los registros, pero la fuerza de nuestras conclusiones se debilita. |
| 399 | + |
| 400 | +Pandas nos otorga varias funcionalidades para identificarlas y para trabajar con ellas. |
| 401 | + |
| 402 | +**Existe el concepto que se llama NaN, cuando existe un dato faltante simplemente se rellena con un NaN y en ese momento podemos preguntar cuáles son los datos faltantes con .isna().** |
| 403 | + |
| 404 | +* **notna()** para preguntar dónde hay datos completos. |
| 405 | +* **dropna()** para eliminar el registro. |
| 406 | + |
| 407 | +Para reemplazar: |
| 408 | + |
| 409 | +* **fillna()** donde le damos un dato centinela |
| 410 | +* **ffill()** donde utiliza el último valor. |
| 411 | + |
| 412 | +https://www.geeksforgeeks.org/difference-between-map-applymap-and-apply-methods-in-pandas/ |
| 413 | + |
| 414 | +https://www.geeksforgeeks.org/how-to-get-a-list-of-class-attributes-in-python/ |
| 415 | + |
252 | 416 | # Sistemas de información
|
253 | 417 |
|
254 |
| -# Nube |
| 418 | +**Los sistemas de datos vienen en muchos sabores y colores, SQL, NoSQL especializados en procesamiento en bloque, chorro y streaming.** Este tipo de sistema nos permite realizar queries sofisticadas y compartir nuestro trabajo con otros miembros del equipo. |
| 419 | + |
| 420 | +* **Procesamiento de bloque:** Estamos hablando de datos históricos, qué sucedió ayer, en el trimestre pasado, cuáles fueron las ventas del año anterior o de los últimos cinco años. Nos permite realizar el procesamiento de manera eficiente. |
| 421 | + |
| 422 | +* **Procesamiento en chorro:** Significa que estamos procesando los datos conforme van llegando, las transformaciones se realizan en tiempo real, Este tipo de sistema nos sirven para cuando queremos realizar decisiones en donde la importancia del tiempo es fundamental. |
| 423 | + |
| 424 | +El criterio principal a tener en cuenta: **El tiempo que tienes.** Si bien los sistemas open source son gratis, para poderlos implementar necesitas tener conocimientos de cloud, debes poder saber trabajar y mantener máquinas. |
| 425 | + |
| 426 | +SQL vs NoSQL |
| 427 | + |
| 428 | +La discusión más relevante en el mundo de las aplicaciones web y móvil, donde dependiendo de la aplicación, la decisión puede ser fundamental para el crecimiento de la app. |
| 429 | +La verdad es que para los profesionales de los datos, especialmente los profesionales de los datos. Es necesario saber ambos. |
| 430 | + |
| 431 | +## SQLite |
| 432 | + |
| 433 | +# Nube |
| 434 | + |
| 435 | +La nube nos da un poder de cómputo casi inimaginable, nos permite procesar terabytes de datos en segundos. La nube se puede usar en dos grandes ocasiones. Cuando los datos ya no caben en tu computadora loca o cuando el tiempo de procesamiento esta siendo muy extenso, es en ese momento donde deberías usar la nube. |
| 436 | + |
| 437 | +Si estas en un entorno de producción, si estas trabajando en una empresa y los datos de esa empresa ya viven en la nube, lo lógico es realizar el trabajo en la nube. Automatizar los scripts en ese mismo ambiente. |
| 438 | + |
| 439 | +Diversas nubes ya ofrecen paquetes completos para el ciclo de datos, como Google Cloud: |
| 440 | + |
| 441 | +* Dataflow |
| 442 | +* Pub/Sub |
| 443 | +* Cloud Storage |
| 444 | +* Datalab |
| 445 | +* BigQuery |
| 446 | +* Dataproc |
| 447 | +* Firestore |
0 commit comments