Comenzando con Apache Spark: Fundamentos y Aplicaciones
📋Como Data Scientist, constantemente me enfrento al desafío de procesar y analizar grandes conjuntos de datos. Tradicionalmente, utilizaba Python en mi trabajo local, pero rápidamente me di cuenta de que estos métodos tienen sus limitaciones, especialmente cuando se trata de datos extremadamente voluminosos.
📋Aquí es donde Apache Spark se ha convertido en una herramienta indispensable para mi trabajo.
📋Spark es un sistema de procesamiento distribuido que me permite ejecutar análisis de datos y algoritmos de machine learning sobre petabytes de información, una tarea imposible en un dispositivo local.
📋Este marco no solo es más rápido que opciones anteriores como Hadoop, sino que también es ampliamente utilizado por gigantes tecnológicos como IBM y Amazon. Estas empresas valoran Spark por su capacidad para realizar tareas intensivas de datos de forma rápida y eficiente.
📋Dominar Spark no solo ha enriquecido mi conjunto de habilidades técnicas, sino que también me ha preparado para abordar desafíos de datos a gran escala, diferenciándome en el campo de la ciencia de datos.
Fundamentos de PySpark: Integrando Python con Spark
PySpark es mi puente hacia Apache Spark, permitiéndome utilizar comandos en Python, mi lenguaje de elección, para trabajar sobre conjuntos de datos distribuidos. Gracias a PySpark, puedo aplicar mis conocimientos de Python de manera efectiva en entornos de big data, gestionando y analizando datos de manera más eficiente que nunca.
Por Qué PySpark es Esencial para los Científicos de Datos
✅En un mundo donde los datos se generan por terabytes, conocer herramientas como PySpark es crucial. Me permite manipular grandes volúmenes de datos distribuidos, una demanda común en la mayoría de las organizaciones orientadas a datos. PySpark se destaca por su sencillez y capacidad de integración con Python, facilitando una curva de aprendizaje suave para aquellos familiarizados con dicho lenguaje.
✅Además, PySpark maneja datos en tiempo real, ofreciendo una ventaja significativa sobre sistemas que solo procesan datos en lotes. Esta capacidad es esencial en proyectos que requieren actualizaciones continuas de datos y decisiones rápidas basadas en información en tiempo real.
✅En resumen, Apache Spark y PySpark han transformado la manera en que abordo los problemas de datos, proporcionándome la velocidad y la escala necesarias para competir en el ámbito del análisis avanzado de datos y el machine learning.
Caso Practico:
Utilizaré el conjunto de datos de Titanic para todos los análisis de este tutorial.
Paso 1: Crear una SparkSession
Paso 2: Crear el DataFrame
PassengerId | Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked |
1 | 0 | 3 | Braund, Mr. Owen ... | male | 22.0 | 1 | 0 | A/5 21171 | 7.25 | null | S |
2 | 1 | 1 | Cumings, Mrs. Joh... | female | 38.0 | 1 | 0 | PC 17599 | 71.2833 | C85 | C |
3 | 1 | 3 | Heikkinen, Miss. ... | female | 26.0 | 0 | 0 | STON/O2. 3101282 | 7.925 | null | S |
4 | 1 | 1 | Futrelle, Mrs. Ja... | female | 35.0 | 1 | 0 | 113803 | 53.1 | C123 | S |
5 | 0 | 3 | Allen, Mr. Willia... | male | 35.0 | 0 | 0 | 373450 | 8.05 | null | S |
6 | 0 | 3 | Moran, Mr. James | male | null | 0 | 0 | 330877 | 8.4583 | null | Q |
7 | 0 | 1 | McCarthy, Mr. Tim... | male | 54.0 | 0 | 0 | 17463 | 51.8625 | E46 | S |
8 | 0 | 3 | Palsson, Master. ... | male | 2.0 | 3 | 1 | 349909 | 21.075 | null | S |
9 | 1 | 3 | Johnson, Mrs. Osc... | female | 27.0 | 0 | 2 | 347742 | 11.1333 | null | S |
10 | 1 | 2 | Nasser, Mrs. Nich... | female | 14.0 | 1 | 0 | 237736 | 30.0708 | null | C |
11 | 1 | 3 | Sandstrom, Miss. ... | female | 4.0 | 1 | 1 | PP 9549 | 16.7 | G6 | S |
Paso 3: Análisis exploratorio de datos
root
|-- PassengerId: integer (nullable = true)
|-- Survived: integer (nullable = true)
|-- Pclass: integer (nullable = true)
|-- Name: string (nullable = true)
|-- Sex: string (nullable = true)
|-- Age: double (nullable = true)
|-- SibSp: integer (nullable = true)
|-- Parch: integer (nullable = true)
|-- Ticket: string (nullable = true)
|-- Fare: double (nullable = true)
|-- Cabin: string (nullable = true)
|-- Embarked: string (nullable = true)
891
PassengerId|Survived|Pclass|Name|Sex|Age|SibSp|Parch|Ticket|Fare|Cabin|Embarked|
| 0| 0| 0| 0| 0|177| 0| 0| 0| 0| 687| 2|
Age|count|
+----+-----+
|null| 177|
|24.0| 30|
|22.0| 27|
|18.0| 26|
|28.0| 25|
|30.0| 25|
|19.0| 25|
|21.0| 24
Cabin|count|
+-----------+-----+
| null| 687|
| B96 B98| 4|
| G6| 4|
|C23 C25 C27| 4|
| E101| 3|
| C22 C26| 3|
| D| 3|
| F33| 3|
| F2| 3|
| E33| 2|
| C123| 2|
| C83| 2
--------+-----+
|Embarked|count|
+--------+-----+
| S| 644|
| C| 168|
| Q| 77|
| null| 2
Primera Pregunta:
¿Cuál es la proporción de sobrevivientes en relación al total de pasajeros a bordo del Titanic?
perc_sobreviventes = titanic.where(F.col('Survived') == 1).count() / titanic.count()
print(f"El porcentaje de sobrevivientes es: {perc_sobrevivientes:.2%}")
El porcentaje de sobrevivientes es: 38.38%
Segunda Pregunta:
¿Cuál es la edad media de los pasajeros que no sobrevivieron?
titanic.where(F.col('Survived') == 0).describe('Age')
summary | Age |
count | 424 |
mean | 30.62617924528302 |
stddev | 14.172109877138494 |
min | 1.0 |
max | 74.0 |
O podemos calcular:
media_edad = titanic.where(F.col('Survived') == 0).agg(F.mean('Age'))
print(f" La edad media de los pasajeros que no sobrevivieron es de {int(media_idade.first()[0])} años")
La edad media de los pasajeros que no sobrevivieron es de 30 anos
Tercera Pregunta:
¿Cuántos pasajeros de tercera clase sobrevivieron al naufragio?
sobrevivientes_tercera_clase = titanic.where(F.col('Survived') == 1).where(F.col('Pclass') == 3).count()
print(f"En tercera clase sobrevivieron {sobreviventes_terceira_classe} pasajeros")
En tercera clase sobrevivieron 119 pasajeros
Cuarta Pregunta:
¿Cuál es el porcentaje de mujeres sobrevivientes en relación al total de mujeres a bordo del Titanic?
mujeres = titanic.where(F.col('Sex') == 'female')
perc_mujeres_sobrevivientes = mujeres.where(F.col('Survived') == 1).count() / mujeres.count()
print(f"Sobrevivieron { perc_mujeres_sobrevivientes:.1%} de las mujeres a bordo")
Sobrevivieron 74.2% de las mujeres a bordo
Quinta Pregunta:
¿Cuál fue el precio medio del pasaje de los pasajeros que sobrevivieron al naufragio?
tarifa_media_sobrevivientes = titanic.where(F.col('Survived') == 1).agg(F.mean('Fare'))
print(f"El precio medio pagado por los sobrevivientes fue de ${tarifa_media_sobrevivientes.first()[0]:.2f}")
El precio medio pagado por los sobrevivientes fue de $48.40
Sexta Pregunta:
¿Cuál es la cantidad de pasajeros que embarcaron en el Titanic?
total = titanic.count()
print(f"En total embarcaron {total} pasajeros en el Titanic")
En total embarcaron 891 pasajeros en el Titanic
Séptima Pregunta:
¿Cuál es la proporción de pasajeros del sexo masculino en relación al total de pasajeros?
hombres = titanic.where(F.col('Sex') == 'male')
perc_hombres = hombres.count() / titanic.count()
print(f"Del total de pasajeros, el {perc_hombres:.0%} eran del sexo masculino")
Del total de pasajeros 65% eran del sexo masculino
Octava pregunta:
¿Cuál es la proporción de pasajeros de tercera clase que sobrevivieron?
tercera_clase = titanic.where(F.col('Pclass') == 3)
perc_sobrevivientes = tercera_clase.where(F.col('Survived') == 1).count() / tercera_clase.count()
print(f"De los pasajeros de tercera clase, el {perc_sobrevivientes:.0%} de ellos sobrevivieron")
コメント