Análisis Multidimensional y Visualización de Datos en Python
Resumen
¿Cómo realizar una exploración multidimensional de datos?
La exploración multidimensional es esencial para comprender las relaciones entre variables en un conjunto de datos. Un enfoque común es identificar a los proveedores o beneficiarios con mayor carga económica. Para lograrlo, se puede agrupar la información por beneficiario y sumar los importes. Este proceso revela no solo el número de facturas, sino también el volumen total de dinero facturado por cada entidad.
# Agrupar por beneficiario y sumar importes
compras_df.groupby('beneficiario')['importe'].sum().reset_index().sort_values(by='importe', ascending=False).head(10)
¿Cómo visualizar la información?
La visualización de datos permite identificar patrones de manera eficaz. Para visualizar el gasto promedio por categoría, se pueden utilizar gráficos de barras que muestren importes por diferentes tipos, como gasto en servicios personales y varios, proporcionando un contexto de gastos promedio.
# Media de importes por tipo y visualización
importes_por_tipo = compras_df.groupby('sheet')['importe'].mean().reset_index()importes_por_tipo.sort_values(by='importe', ascending=False).iloc[:10].plot(kind='bar', x='sheet', y='importe')
¿Cómo analizar las variaciones temporales?
Las fechas y sus correspondientes gastos proporcionan información valiosa sobre las tendencias temporales. Al sumar los importes por fecha, se puede identificar qué periodos son más activos financieramente.
# Suma de importes por fecha
compras_df.groupby('fecha')['importe'].sum().plot(kind='line')
¿Es posible filtrar datos por múltiples variables?
Sí, puedes crear filtros avanzados para examinar gastos específicos. Por ejemplo, es posible seleccionar solo los gastos de "Gastos Varios" para obtener un análisis más detallado.
# Filtrar gastos varios
gastos_varios = compras_df[compras_df['sheet']=='Gastos Varios']
También se pueden agrupar los datos, por ejemplo, por beneficiario y tipo de hoja para observar las combinaciones de estos parámetros y la suma de sus importes.
# Agrupar por beneficiario y tipo de hoja
agrupacion = compras_df.groupby(['beneficiario','sheet'])['importe'].sum().unstack().fillna(0)
¿Cómo realizar un análisis de texto con nubes de palabras?
Las nubes de palabras son herramientas visuales poderosas para entender de qué se habla mayormente en un texto. Utilizar librerías como nltk y WordCloud permite generarlas a partir de textos procesados.
Preparar el texto
Primero, recolectamos y limpiamos todo el texto de un campo determinado, removiendo palabras comunes ('stopwords') y términos poco informativos.
# Importar las librerías necesarias
importnltkfrom nltk.corpusimport stopwords
# Texto de los conceptos
texto_compras =" ".join(compras_df['concepto'].tolist()).lower()stopwords_espanol =set(stopwords.words('spanish'))palabras =[word for word in texto_compras.split()if word not in stopwords_espanol and len(word)>2]
Generar la nube de palabras
Utilizando WordCloud, se genera una representación visual que destaca las palabras más recurrentes y, a su vez, puede brindar insights rápidos.
from wordcloud importWordCloudimport matplotlib.pyplotas plt
# Crear e imprimir la nube de palabras
wordcloud =WordCloud(background_color='white').generate(" ".join(palabras))plt.imshow(wordcloud, interpolation='bilinear')plt.axis('off')plt.show()
Este análisis visual de texto es crucial para obtener una mejor comprensión de los temas importantes en un conjunto de datos textual. Recuerda que con cada análisis, la oportunidad de descubrir más información valiosa incrementa.
A medida que adquieres estas habilidades, te animo a seguir profundizando en el análisis de datos y a explorar nuevas formas de enriquecer tus conjuntos de datos. ¡Tu curiosidad es la clave para dominar el arte de la ciencia de datos!
Les recomiendo pandas-profiler para automatizar la exploración de datos
Gracias por compartir!!
Recomendada ampliamente, esta libreria yo la uso para hacer el analisis univariado inicial, pero la libreria cambio de nombre a ydata_profiling hace un mes:
from ydata_profiling importProfileReport
Análisis Multidimensional de las Variables
Velocidad promedio versus la trayectoria realizada.
La trayectoria se va a definir como la concatenación entre NAME_FROM y NAME_TO.
Mediana de la velocidad promedio en cada trayecto. VEL_PROMEDIO que es más común en cada trayecto:
~Gracias por compartir!
añadiendo la función isalpha() parece conseguirse una mejor limpieza
textos_compras =' '.join([x for x in textos_compras.strip().lower().split(' ')if x.isalpha() and x not in stopwords_list and len(x)>4])
Qué hace la función unstack?
se usa para quitar un nivel de indice, por las agrupaciones que veniamos manejando!
El "iloc[0:10]" en el minuto 4 cumple alguna función? Como solo hay 5 categorías me parece que no aporta mucho.
Se hace que nos enfoquemos en los 10 valores mas altos, pero como bien dices, como no hay suficientes, no aporta mucho. Buen detalle encontrado!
No se olviden de instalar Wordcloud... a mi no me salían las palabras, porque me salía el siguiente error: "No module found wordcloud"
Y se soluciona, instalando:
pip install wordcloud
Gracias!
hola estoy haciendo un análisis de nacimientos en Colombia, por lo que trabajo con muchos datos, alguna recomendación para cuando se trabaja con muchos datos, por ejemplo a veces se me traba el computador.
Trabaja con una muestra, toma solo una cantidad pequeña de datos (100, 1000), y realiza las operaciones. Algunas cosas van a suceder cuando veas los datos completos, pero en el inter, los temas más obvios o comunes seran claros y podrás trabajar con ellos.
Qué onda 👋, Durante la clase me surgió un problema que me impedía imprimir el word cloud, me daba el error: "Only Supported for TrueType fonts*".* No reconoce ninguna tipografía sea true type o no, y tampoco hay diferencia si le das el path de la ubicación de la fuente en cuestión
Por mi parte, pude resolverlo haciéndole upgrades y la libería Pillow a pip en general. Lo comento por si alguien está atorado con el mismo problema.
cabe señalar que estoy usando python 3.10 dentro de un entorno de anaconda en macOS
A quienes tienen problemas para instalar ++wordcloud++, deben trabajar con una versión de python menor a la 3.12 ya que esta tiene problemas para instalar dicha librería. Esta testeada desde python 3.11 para abajo segun la documentacion al dia de este comentario.
Gracias por compartir!
Epa, a mí no me deja trabajar con ella
Alguna forma de tener unos números más "amigables"? No me parece particularmente útil la notación científica en los dataframes :confused: .
Me figura el siguiente error:
TypeError: agg function failed [how->mean,dtype->object]
No entiendo muy bien como corregirlo, alguien tuvo el mismo problema?
Puedes corroborar si se han cargado bien las columnas y tienen los datos igual como los esperamos?
Hola, creo que llego un año tarde, pero es por un problema con pandas que ahora necesita que se declare explicitamente que solo debe tomar los valores númericos te quedaría de la siguiente forma
mean_importe_sheet = compras_df.groupby('SHEET').mean()['IMPORTE']## si Muestra este erro:---------------------------------------------------------------------------TypeErrorTraceback(most recent call last)File c:\Users\celio\OneDrive\Escritorio\programación\platzi\CursoparaCreartusProyectosdeCienciadeDatos\venv\Lib\site-packages\pandas\core\groupby\groupby.py:1942,inGroupBy._agg_py_fallback(self, how, values, ndim, alt)1941try:->1942 res_values = self._grouper.agg_series(ser, alt, preserve_dtype=True)1943 except Exceptionaserr:File c:\Users\celio\OneDrive\Escritorio\programación\platzi\CursoparaCreartusProyectosdeCienciadeDatos\venv\Lib\site-packages\pandas\core\groupby\ops.py:864,inBaseGrouper.agg_series(self, obj, func, preserve_dtype)862 preserve_dtype =True-->864 result = self._aggregate_series_pure_python(obj, func)866 npvalues = lib.maybe_convert_objects(result, try_float=False)File c:\Users\celio\OneDrive\Escritorio\programación\platzi\CursoparaCreartusProyectosdeCienciadeDatos\venv\Lib\site-packages\pandas\core\groupby\ops.py:885,inBaseGrouper._aggregate_series_pure_python(self, obj, func)884for i, group inenumerate(splitter):-->885 res =func(group)886 res =extract_result(res)File c:\Users\celio\OneDrive\Escritorio\programación\platzi\CursoparaCreartusProyectosdeCienciadeDatos\venv\Lib\site-packages\pandas\core\groupby\groupby.py:2454,inGroupBy.mean.<locals>.<lambda>(x)2451else:2452 result = self._cython_agg_general(2453"mean",->2454 alt=lambda x:Series(x, copy=False).mean(numeric_only=numeric_only),2455 numeric_only=numeric_only,2456)2457return result.__finalize__(self.obj, method="groupby")...->1946 raise type(err)(msg)from err
1948if ser.dtype== object:1949 res_values = res_values.astype(object, copy=False)TypeError: agg function failed [how->mean,dtype->object]Output is truncated.Viewas a scrollable element or open in a text editor.Adjust cell output settings... ## se cambia por:print(compras_df['IMPORTE'].dtype)compras_df['IMPORTE']= pd.to_numeric(compras_df['IMPORTE'], errors='coerce')print(compras_df['IMPORTE'].isna().sum())compras_df_clean = compras_df.dropna(subset=['IMPORTE'])mean_importe_sheet = compras_df_clean.groupby('SHEET')['IMPORTE'].mean()print(mean_importe_sheet)```mean\_importe\_sheet = compras\_df.groupby('SHEET').mean()\['IMPORTE']
Es mas complicado trabajar limiando datos de texto dado lo mal que escribimos 🤦🏼♂️😅
Es verdad xD Pero también por las interfaces que nos piden llenar como texto abierto cosas que no deberían de ser asi. Menos campos geográficos abiertos y más autofill y selecciones, por favor!
Qué buena clase!
Gracias! A las ordenes! Gracias por tu nota sobre el regresor!
Realizar un análisis multidimensional del conjunto de datos 'datos_limpuios.csv' (Mi proyecto) utilizando PCA para reducir la dimensionalidad a un espacio de dos dimensiones, lo que facilita la visualización de la distribución de los datos.