Durante 5 años ayudamos a las empresas a alcanzar sus objetivos de mercado y de marca. Millennial es una empresa especializada en tecnología.

Galleria

Contactos

Enrique Palacios 360, Oficina 313, Miraflores - Lima

+51-975-113-510

Proyecto Análisis de Datos

 

La ciencia de datos es de hecho un tema candente durante los últimos años, ya que se mencionó como el trabajo más sexy del siglo 21. De hecho, la ciencia de datos es increíble y tiene muchos alcances, compararé este escenario con lo que era la industria informática en la década de 1900 y principios de la década de 2000, es similar a la industria de la ciencia de datos en este momento.

Muchas personas de diferentes campos están cambiando al campo de la analítica y la ciencia de datos, muchos recién graduados están tratando de conseguir un trabajo en este campo, pero las empresas esperan que las contrataciones tengan experiencia previa en este campo o deberían haber trabajado en algunos proyectos similares.


Quería escribir este artículo para ayudar a esas personas utilizando mi experiencia pasada. Este artículo contiene el uso de casi todas las herramientas y conocimientos importantes utilizados en el proyecto de análisis de datos en la industria, excepto el uso de Microsoft Excel, que creo que es una habilidad muy crucial si desea trabajar en el campo de Análisis.

Los pasos de la Ciencia de Datos son los siguientes en el orden mencionado:


1. Declaración del problema 

2. Recopilación de datos 

3. Limpieza de datos 

4. Análisis y visualización de datos 

5. Modelado (Parte de Aprendizaje Automático)

Quería nombrar este artículo como Data Science End to End Project. Pero pensé que no sería una buena idea, ya que no discutiré la parte de modelado en este artículo. Por lo tanto, lo llamé Proyecto de análisis de datos de extremo a extremo, ya que cubre casi todas las partes de un proceso de análisis de datos, desde la recopilación de datos hasta el análisis de datos.

Estos son los pasos que seguiremos en este artículo:
1. Llegaremos a una declaración del problema.
2. Recopilaremos los datos mediante una API que se ejecutará en un cronjob cada hora en una máquina virtual EC2 y almacenaremos los datos recopilados en AWS RDS.
3. A continuación veremos cómo limpiar estos datos.
4. Finalmente, con Tableau, intentaremos encontrar algunas ideas a partir de estos datos.

Este será un proyecto de extremo a extremo que comenzará desde una declaración del problema hasta obtener la información. Puede seguir estos pasos para replicar el mismo proyecto o tal vez crear su propia declaración del problema, encontrar la API para obtener datos para ese problema para recopilar los datos (la fuente de recopilación de datos puede ser diferente. Puede usar web scraping o encuesta o cualquier otra fuente), crear una base de datos en la nube o en un sistema local y, finalmente, usar estos datos para encontrar la información utilizando Python o Tableau.

Obtenga más información sobre la ciencia de datos de Udacity.

** Este es un enlace de afiliado, lo que significa que si se inscribe en cualquier curso en Udacity usando mi URL, obtendré un bono de referencia.

Paso 1: Declaración del problema

Comencé este proyecto en el mes de septiembre de 2019. Quería hacer un proyecto en el que cubriera cada parte del proceso de análisis de datos. Cuando trabajas en organizaciones, realmente no puedes trabajar en proyectos de extremo a extremo.

La declaración del problema podría provenir de un MBA o de la alta gerencia de la empresa. La parte de recolección de datos será atendida por un equipo diferente. Puede haber un equipo diferente para el proceso de limpieza de datos. Finalmente, un equipo diferente para usar estos datos limpios para hacer visualización o análisis de datos.

Pero si estás en una startup, el escenario podría ser diferente. Usted será responsable de múltiples roles en este proceso. Pero si conoce la A a la Z de este proceso y tiene la experiencia práctica, será beneficioso. A una startup le gustaría contratarlo, ya que podrá administrar múltiples roles. Una gran organización estaría encantada de contratarlo, ya que podrán usarlo en múltiples roles según los requisitos del cliente.

Volviendo al proyecto que comencé en septiembre de 2019. El tema candente en la India alrededor del mes de octubre / noviembre es la contaminación. A finales de septiembre y octubre de cada año, los agricultores, principalmente en Punjab y Haryana, queman aproximadamente 35 millones de toneladas de desechos de cultivos de sus arrozales después de la cosecha como una práctica de eliminación de paja de bajo costo para reducir el tiempo de respuesta entre la cosecha y la siembra para el segundo cultivo (de invierno). Además, durante este período se celebran festivales como Dussehra y Diwali en la India. Durante estos festivales, se queman muchas galletas saladas, lo que también afecta el nivel de contaminación. En ciudades como Delhi, el nivel de PM 2.5 supera los 999, lo cual es un problema muy serio. Quería entender el efecto de diferentes tiempos y eventos en el nivel de contaminación en diferentes partes de la India.

Entonces, en resumen, mi declaración del problema fue:
Comprender el efecto de diferentes tiempos y eventos en el nivel de contaminación en diferentes partes de la India.

Paso 2: Recopilación de datos

Hay muchas maneras de recopilar los datos como:

  1. A través de API: en su mayoría, esta es una forma limpia de datos y no requiere una limpieza adicional.
  2. Web Scraping: la mayoría de las veces tendrá que pasar una buena cantidad de tiempo limpiando dichos datos.
  3. Datos transaccionales
  4. Datos de análisis de marketing en línea (Customer Journey, etc.)
  5. Encuestas y entrevistas, etc. etc…

La mejor manera de obtener los datos para el análisis o visualización de datos según yo sería usar una API, ya que en su mayoría están limpios. Pero si usted es una tienda fuera de línea o en línea como Walmart o Amazon, tendrá enormes datos transaccionales. Un buen DBA se aseguraría de mantener estos datos en el formato limpio, por lo que un analista solo tendrá que consultar los datos de acuerdo con el requisito de esta enorme pila de datos y hacer el análisis. Incluso el análisis de marketing en línea o los datos de encuestas estarán en un formato limpio, pero métodos como web scraping pueden consumir mucho tiempo en la limpieza de datos. Puede escribir todos los códigos de limpieza en el script solo para que la salida raspada final que obtenga esté limpia y lista para usar. El mayor dolor es limpiar los datos de texto, he trabajado en ello puede ser realmente frustrante a veces.

Entonces, para este artículo, he utilizado una API proporcionada por el Gobierno de la India en su sitio web https://data.gov.in/, encontré esta API donde proporcionaban datos de contaminación del aire para aproximadamente 1200 lugares en diferentes ciudades y estados de la India cada hora. Se recopilaron diferentes métricas como PM2.5, PM10, NO2, NH3, SO2, CO y los valores máximos, mínimos y promedio del ozono.

Estos datos se proporcionaron cada hora, por lo que si presiona esta API a las 3 PM, le proporcionará los datos recopilados hasta las 2 PM para los 1200 lugares, pero si golpea esta API a las 5 PM obtendrá los datos de las 4 PM. Por lo tanto, no puede obtener los datos anteriores de esta API, por lo que debe crear una base de datos para agregar los nuevos datos cada hora.

2a. Recopilación de datos en la base de datos o en Hojas de cálculo de Google

Hay dos formas de recopilar estos datos. Puede utilizar Hojas de cálculo de Google como base de datos y seguir añadiendo los nuevos datos o puede crear una base de datos con AWS RDS. Inicialmente, comencé con el uso de Google Sheets, ya que es gratuito, pero como estaba planeando recopilar los datos de contaminación del aire durante aproximadamente un año, usar Google Sheets no fue una buena idea. Estaba recopilando alrededor de 900K filas de datos cada mes.

Cómo recopilar datos usando API en Python

No me molestaría en escribir este artículo de nuevo, ya que ya lo he explicado en uno de mis artículos, por favor echa un vistazo a esto:

Obtención de datos a través de api en Python

Cómo leer y escribir datos en hojas de cálculo de Google usando Python

También he escrito un artículo detallado para el mismo, por favor echa un vistazo a esto:

Lectura y escritura de datos en hojas de cálculo de Google con Python

Sugeriré que si sus datos no van a ser demasiado grandes y en algún lugar hasta 500K a 800K filas de datos, entonces definitivamente puede usar Hojas de cálculo de Google. Es gratis y puede continuar recopilando los datos todo el tiempo que desee.

How To Create a Database on AWS RDS and Connect To Workbench

In order to go to the next step of writing a Python Script to collect the data from the API, convert that to a Data frame and store append that data into a database, we will need to create a database first on AWS RDS. If you plan on using google sheets to collect your data, you can check out the article I have shared above in order to learn how to store data into google sheets using Python.
In order to create a Database on AWS RDS, you will need to Sign Up for AWS, and if you are using AWS for the first time, you can use a lot of services on AWS for free for a year. That is really amazing, In fact, the data I collected for about a year, was during the free access time I had on my account.
Check out this video made by me in order to see how you can create a database on RDS and connect that to Workbench on your system.

How To Collect Data Using API and Store That In a Database On AWS RDS

If you decide to use create a MySQL Database on AWS RDS and want to store the data there, you should check out this code:

#Import all required packages
import requests
import pandas as pd
import io
import pygsheets
import datetime as dt
from datetime import timedelta
from sqlalchemy import create_engine

urlData =requests.get("https://api.data.gov.in/resource/use-your-key").content

#Converting the data to pandas dataframe.
rawData = pd.read_csv(io.StringIO(urlData.decode('utf-8')))
#Replace with proper name.
rawData = rawData.replace(to_replace ="Andhra_Pradesh", value ="Andhra Pradesh")
rawData = rawData.replace(to_replace ="West_Bengal", value ="West Bengal")
rawData = rawData.replace(to_replace ="Uttar_Pradesh", value ="Uttar Pradesh")

#Append blank row in the end of the dataframe.
rawData = rawData.append(pd.Series(), ignore_index=True)
now = dt.datetime.utcnow()+timedelta(hours=4, minutes=30)
now = now.strftime('%d-%m-%Y %H:00:00')
rawData['Measure_time'] = now

# changing columns using .columns()
rawData.columns = ['Id', 'Country', 'State', 'City',
'Station', 'Last Update', 'Pollution ID',
'Pollutant Min', 'Pollutant Max', 'Pollutant Avg', 'Pollutant Unit', 'Measure_Time']

#Connection To Your Online Database begins
engine = create_engine("mysql://user:password@server"
.format(user = "your username",
pw = "your password",
db="your database name"))

#Insert whole DF into MySQL
df.to_sql('hourly_air_pollution', con=engine, if_exists='append', index=False)

2b. Colocación del script de Python en una máquina virtual en AWS EC2

Una vez que tengamos nuestro script de Python listo para obtener los datos y ponerlos en una base de datos en AWS RDS o en Google Sheets según nuestro requisito y deseo, debemos poner este script en una plataforma en la nube. Este script debe ejecutarse cada hora y ponerlo en un Programador de tareas de Windows o en un Cronjob en nuestro sistema local no será una buena idea, ya que nuestro sistema local no estará en 24 * 7 (lo más probable), por lo que tendremos que configurar una máquina virtual en la nube. Puede utilizar cualquier plataforma en la nube para lograr esta tarea, pero le mostraré cómo hacerlo en AWS.
He creado un video para explicar esta tarea, tomará solo 5-10 minutos si está haciendo esto por primera vez, pero si sabe cómo hacerlo, tomará menos de 2 minutos configurar una nueva máquina virtual en EC2 y conectarla a través de SSH a su sistema local.

Inicio de una máquina virtual en EC2 y conexión al sistema local a través de SSH mediante Gitbash

Creación y colocación de su script de Python en Cronjob en una máquina aws

Así que hasta ahora, aquí está nuestro progreso:

  • Tenemos lista la Declaración del problema.
  • Encontramos una API para obtener los datos de nuestra declaración del problema. Para recopilar los datos, creamos una base de datos en AWS RDS o utilizamos una hoja de cálculo de Google.
  • Escribimos código Python para obtener los datos de la API y agregarlos en la hoja de cálculo de Google o en la base de datos.
  • Hemos puesto este script en la máquina de AWS en cronjob para asegurarnos de que estamos obteniendo los datos correctamente cada hora.

Paso 3: Limpieza de datos

Lo bueno aquí para mí es que puedo omitir este paso ya que estoy recopilando mis datos usando una API. Los datos recopilados de la API están en su mayoría en un formato limpio y no tiene que perder tiempo limpiándolos. En mi caso, así es como se veían mis datos en la base de datos:

1*kQAoTGXPy8rVKoespIVq1Q
Salida de datos de contaminación del aire

Como puede ver en la imagen, esta es una versión bastante limpia de los datos y puedo usarla para análisis y visualización sin más cambios.

Pero en general, la limpieza de datos es un tema muy grande y puede variar completamente según el tipo de datos con los que esté tratando. Es posible que tenga que hacer la limpieza mientras recopila los datos, este tipo de limpieza se realizará en el código, como en mi código Python donde estaba recopilando los datos de contaminación del aire, tuve que hacer un poco de limpieza. Quería usar estos datos en Tableau para la visualización de datos, pero el nombre de algunos estados no venía en el formato correcto, debido a esto Tableau no entenderá los nombres de los estados y, por lo tanto, no trazará las ubicaciones correctamente en el mapa de la India. Por ejemplo: Andhra Pradesh venía como Andhra_Pradesh así sucesivamente, así que escribí un pequeño fragmento de código para esto:

#Replace with proper name.
rawData = rawData.replace(to_replace ="Andhra_Pradesh", value ="Andhra Pradesh")
rawData = rawData.replace(to_replace ="West_Bengal", value ="West Bengal")
rawData = rawData.replace(to_replace ="Uttar_Pradesh", value ="Uttar Pradesh")

Del mismo modo, es posible que tenga que hacer la limpieza de acuerdo con sus datos en el propio código.

Si no es posible realizar la limpieza de los datos en el código fuente, es posible que tenga que hacerlo después en el momento de consultar los datos de la base de datos.

No profundizaré en la limpieza de datos en este momento porque es un tema muy vasto, pero le proporcionaría enlaces a algunos buenos artículos que pude revisar relacionados con la limpieza de datos, estoy seguro de que será útil:
1. Técnicas de limpieza de datos: aprenda formas simples y efectivas de limpiar datos
2. La guía definitiva para la limpieza de datos (medio)
3. Limpieza de datos (Elite Data Science)
4. 5 Mejores prácticas para la limpieza de
datos 5. Técnicas de limpieza de datos

Obtenga más información sobre la ciencia de datos de Udacity.

** Este es un enlace de afiliado, lo que significa que si se inscribe en cualquier curso en Udacity usando mi URL, obtendré un bono de referencia.

Resultado: Los datos limpiados para el análisis

Después de poner todo este esfuerzo, obtiene la versión limpia de sus datos para su análisis. ¡¡¡Voilá!!!
Comencé a recopilar estos datos el 14 de octubre de 2019, pero durante unos días los datos no se recopilaron correctamente y faltaron pocas horas de datos. Continué esta recopilación de datos hasta finales de septiembre de 2020. En este período recopilé un poco más de 10 millones de filas de datos. He publicado esos datos en el conjunto de datos de Kaggle para que las personas los usen y hagan el análisis.
Este conjunto de datos en formato CSV ocupaba alrededor de 1,2 GB, pero también creé un extracto .hyper (el formato de datos de Tableau) que solo tenía unos 122 MB de archivos. He subido el archivo CSV y el Hyper en el sitio web de Kaggle Dataset y puedes descargar el mismo desde aquí:

https://www.kaggle.com/prateekcoder/ind-hourly-air-pollution-data-oct2019-to-sept2020

Este conjunto de datos se puede utilizar para analizar muchas cosas como:

  1. ¿Cómo afecta la quema de cultivos por parte de los agricultores de Haryana y Punjab a la contaminación del aire?
  2. Afecta a festivales como Diwali y Dussehra en el nivel de contaminación del aire.
  3. ¿El nivel de contaminación es menor en los meses de invierno como enero y febrero en comparación con noviembre y diciembre?
  4. ¿Cuál fue el efecto de la pandemia en los niveles de contaminación del aire en toda la India? (Esto disminuyó drásticamente, todos lo sabemos, pero los datos detallados le darán la imagen exacta).

Paso 4: Análisis de datos

Ahora tenemos la versión limpia de los datos, he proporcionado el enlace al formato CSV y el formato Hyper de los datos. Ahora les sugeriré que usen estos datos para extraer información de los datos utilizando las herramientas de su elección, puede ser Excel, Python, Tableau o cualquier otra herramienta. Al ser un Analista de Datos el objetivo final es resolver el problema del negocio, las herramientas son solo un medio para llegar al destino.

Como referencia, permítame mostrarle un cuadro de control rápido que he creado:

1*2g1nt55SzrgpQ0JTXfDFCA
Panel de Tableau

https://public.tableau.com/views/AirPollutionDataAnalysis/AirPollutionDataAnalysis?:language=en&:embed=y&:embed_code_version=3&:loadOrderID=0&:display_count=y&publish=yes&:origin=viz_share_link

Ahora construí este Dashboard en 4-5 minutos y algunas ideas rápidas que puedo derivar de este visual son:

  1. El nivel promedio de PM 2.5 en Delhi cayó de 388 en diciembre de 2020 a 74.6 en abril de 2020.
  2. Después de los principales desbloqueos en Delhi en agosto, se puede ver que el nivel PM 2.5 aumenta significativamente.
  3. No hubo un efecto importante del confinamiento en la métrica contaminante Ozono, ya que el valor promedio más alto se puede ver en mayo de 2020. Por lo tanto, tendremos que profundizar para encontrar las variables que tienen una buena correlación con el contaminante de ozono id.

También hay otra información que se puede extraer de lo visual y se puede construir un panel de control mucho mejor y más informativo utilizando estos datos. Dejaré eso para que ustedes hagan una lluvia de ideas y se les ocurra algo mejor.