Presentamos KitikiPlot, una biblioteca de Python diseñada para visualizar patrones de “ventana deslizante” categóricos secuenciales y de series temporales. Esta innovadora herramienta está diseñada para capacitar a los profesionales de datos en diversos campos, incluida la genómica, el monitoreo de la calidad del aire y el pronóstico del tiempo, para descubrir conocimientos con mayor claridad y precisión. Diseñado con simplicidad y versatilidad, se integra perfectamente con el ecosistema de datos de Python y al mismo tiempo ofrece resultados visualmente atractivos para el reconocimiento de patrones. Exploremos su potencial y transformemos la forma de analizar secuencias categóricas.
Objetivos de aprendizaje
- Comprender la técnica de visualización de ventana deslizante KitikiPlot para datos categóricos secuenciales y de series temporales.
- Explore sus parámetros para personalizar visualizaciones para conjuntos de datos y aplicaciones específicos.
- Aplique KitikiPlot en varios dominios, incluida la genómica, el análisis meteorológico y el monitoreo de la calidad del aire.
- Desarrollar competencia en la visualización de patrones de datos complejos usando Python y Matplotlib.
- Reconocer la importancia de la claridad visual en el análisis de datos categóricos para mejorar los procesos de toma de decisiones.
Este artículo fue publicado como parte del Blogatón de ciencia de datos.
KitikiPlot: simplifique la visualización de datos complejos
KitikiPlot es una poderosa herramienta de visualización diseñada para simplificar el análisis de datos complejos, especialmente para aplicaciones como gráficos de ventanas deslizantes y representación dinámica de datos. Ofrece flexibilidad, visualizaciones vibrantes y una integración perfecta con Python, lo que lo hace ideal para dominios como genómica, monitoreo de la calidad del aire y pronóstico del tiempo. Con sus funciones personalizables, KitikiPlot transforma datos sin procesar en imágenes impactantes sin esfuerzo.
- KitikiPlot es una biblioteca de Python para visualizar datos categóricos de “ventana deslizante” secuenciales y de series temporales.
- El término 'Kitiki'(la ventana) medio 'ventana' y telugu.
Características clave
- Ventana corrediza: La representación visual consta de una o más barras rectangulares, cada una de las cuales corresponde a datos de una ventana deslizante específica.
- Marco: Cada barra está dividida en varias celdas rectangulares llamadas “Marcos”. Estos marcos están dispuestos uno al lado del otro y cada uno representa un valor de los datos categóricos secuenciales.
- Opciones de personalización: Los usuarios pueden personalizar las ventanas ampliamente, incluidas opciones para mapas de colores, patrones de sombreado y alineaciones.
- Etiquetado flexible: La biblioteca permite a los usuarios ajustar etiquetas, títulos, marcas y leyendas según sus preferencias.
Primeros pasos: sus primeros pasos con KitikiPlot
Sumérgete en el mundo de KitikiPlot con esta guía de inicio rápido. Desde la instalación hasta su primera visualización, lo guiaremos en cada paso para que sus datos brillen.
Instalar KitikiPlot usando pip
pip install kitikiplot
Importar “kitikiplot”
import pandas as pd
from kitikiplot import KitikiPlot
Cargar el marco de datos
Se considera el marco de datos 'weatherHistory.csv' de https://www.kaggle.com/datasets/muthuj7/weather-dataset.
df= pd.read_csv( PATH_TO_CSV_FILE )
print("Shape: ", df.shape)
df= df.iloc(45:65, :)
print("Shape: ", df.shape)
df.head(3)
ktk= KitikiPlot( data= df("Summary").values.tolist() )
ktk.plot( )
Comprensión de los parámetros de KitikiPlot
Para aprovechar al máximo el poder de KitikiPlot, es esencial comprender los diversos parámetros que controlan cómo se visualizan sus datos. Estos parámetros le permiten personalizar aspectos como el tamaño de la ventana, los intervalos de pasos y otras configuraciones, asegurando que sus visualizaciones se adapten a sus necesidades específicas. En esta sección, desglosaremos parámetros clave como stride
y window_length
para ayudarle a afinar sus gráficos para obtener resultados óptimos.
zancada: int (opcional)
- La cantidad de elementos para mover la ventana después de cada iteración al convertir una lista en un DataFrame.
- El valor predeterminado es 1.
index= 0
ktk= KitikiPlot( data= df("Summary").values.tolist(), stride= 2 )
ktk.plot( cell_width= 2, transpose= True )
longitud_ventana: int (opcional)
- La longitud de cada ventana al convertir una lista en un DataFrame.
- El valor predeterminado es 10.
index= 0
ktk= KitikiPlot( data= df("Summary").values.tolist(), window_length= 5 )
ktk.plot( transpose= True,
xtick_prefix= "Frame",
ytick_prefix= "Window",
cell_width= 2 )
tamaño de figura: tupla (opcional)
- El tamaño de la figura (ancho, alto).
- El valor predeterminado es (25, 5).
ktk= KitikiPlot( data= df("Summary").values.tolist() )
ktk.plot( figsize= (20, 8) )
ancho de celda: flotante
- El ancho de cada celda de la cuadrícula.
- El valor predeterminado es 0,5.
ktk= KitikiPlot( data= df("Summary").values.tolist() )
ktk.plot( cell_width= 2 )
altura_celda: flotante
- La altura de cada celda de la cuadrícula.
- El valor predeterminado es 2.0.
ktk= KitikiPlot( data= df("Summary").values.tolist() )
ktk.plot( cell_height= 3 )
transponer: bool (opcional)
- Una bandera que indica si se debe transponer KitikiPlot.
- El valor predeterminado es Falso.
ktk= KitikiPlot( data= df("Summary").values.tolist() )
ktk.plot( transpose= False )
ktk= KitikiPlot( data= df("Summary").values.tolist() )
ktk.plot(
cell_width= 2,
transpose= True,
xtick_prefix= "Frame",
ytick_prefix= "Window",
xlabel= "Frames",
ylabel= "Sliding_Windows" )
espacio_ventana: flotante
- El espacio entre las celdas de la cuadrícula.
- El valor predeterminado es 1.0.
ktk= KitikiPlot( data= df("Summary").values.tolist() )
ktk.plot( window_gap= 3 )
window_range: cadena o tupla (opcional)
- El rango de ventanas a mostrar.
- Utilice “todos” para mostrar todas las ventanas o especifique una tupla (inicio_índice, índice_final).
- El valor predeterminado es “todos”.
ktk= KitikiPlot( data= df("Summary").values.tolist() )
ktk.plot( window_range= "all" )
ktk= KitikiPlot( data= df("Summary").values.tolist() )
ktk.plot( window_range= (3,8) )
alinear: booleano
- Una bandera que indica si se deben desplazar barras consecutivas verticalmente (si transponer = False) y horizontalmente (si transponer = True) por valor de zancada.
- El valor predeterminado es Verdadero.
ktk= KitikiPlot( data= df("Summary").values.tolist() )
ktk.plot( align= True )
ktk.plot(
align= False,
display_yticks= False # Display no yticks
)
ktk.plot(
cell_width= 2,
align= True,
transpose= True,
xlabel= "Frames",
ylabel= "Sliding Windows",
xtick_prefix= "Frame",
ytick_prefix= "Window"
)
ktk.plot(
cell_width= 2,
align= False,
transpose= True,
xlabel= "Frames",
ylabel= "Sliding Windows",
ytick_prefix= "Window",
display_xticks= False
)
cmap: str o dict
- Si es una cadena, debe ser un nombre de mapa de colores para generar colores.
- Si es un diccionario, debería asignar valores únicos a colores específicos.
- El valor predeterminado es “arco iris”.
ktk= KitikiPlot( data= df("Summary").values.tolist() )
ktk.plot(
cmap= "Greens",
display_legend= True
)
ktk.plot(
cmap= {"Mostly Cloudy": "Green"},
display_legend= True
)
color_borde: cadena
- El color que se utilizará para los bordes del rectángulo.
- El valor predeterminado es '#000000'.
ktk.plot(
cmap= {"Mostly Cloudy": "Green"},
fallback_color= "wheat",
edge_color= "blue",
)
color_fallback: cadena
- El color que se utilizará como respaldo si no se asigna ningún color específico.
- El valor predeterminado es '#FAFAFA'.
ktk.plot(
cmap= {"Mostly Cloudy": "Green"},
fallback_color= "wheat",
display_legend= True
)
hmap: dictar
- Un diccionario que asigna valores únicos a sus patrones de sombreado correspondientes.
- El valor predeterminado es '{}'.
ktk= KitikiPlot( data= df("Summary").values.tolist() )
ktk.plot(
cmap= {"Mostly Cloudy": "grey"},
fallback_color= "white",
hmap= {"Mostly Cloudy": "|*|"},
display_hatch= True
)
fallback_hatch: cadena
- El patrón de sombreado que se utilizará como respaldo si no se asigna ningún sombreado específico.
- El valor predeterminado es '” “' (cadena con espacio simple).
ktk= KitikiPlot( data= df("Summary").values.tolist() )
ktk.plot(
cmap= {"Mostly Cloudy": "grey"},
fallback_color= "white",
hmap= {"Mostly Cloudy": "|*|"},
fallback_hatch= "\\",
display_hatch= True
)
display_hatch: booleano
- Una bandera que indica si se muestran patrones de sombreado en las celdas.
- El valor predeterminado es Falso.
ktk= KitikiPlot( data= df("Summary").values.tolist() )
ktk.plot(
cmap= {"Mostly Cloudy": "#ffffff"},
fallback_color= "white",
display_hatch= True
)
xlabel: str (opcional)
- Etiqueta para el eje x.
- El valor predeterminado es “Ventanas corredizas”.
ktk= KitikiPlot( data= df("Summary").values.tolist() )
ktk.plot( xlabel= "Observation Window" )
ylabel: str (opcional)
- Etiqueta para el eje y.
- El valor predeterminado es “Marcos”.
ktk= KitikiPlot( data= df("Summary").values.tolist() )
ktk.plot( ylabel= "Frame ID" )
display_xticks: bool (opcional)
- Una bandera que indica si se muestran xticks.
- El valor predeterminado es Verdadero.
ktk= KitikiPlot( data= df("Summary").values.tolist() )
ktk.plot( display_xticks= False )
display_yticks: bool (opcional)
- Una bandera que indica si se muestran yticks
- El valor predeterminado es Verdadero
ktk= KitikiPlot( data= df("Summary").values.tolist() )
ktk.plot( display_yticks= False )
xtick_prefix: str (opcional)
- Prefijo para etiquetas de marca del eje x.
- El valor predeterminado es “Ventana”.
ktk= KitikiPlot( data= df("Summary").values.tolist() )
ktk.plot( xtick_prefix= "Observation" )
ytick_prefix: str (opcional)
- Prefijo para etiquetas de marca del eje y.
- El valor predeterminado es “Marco”.
ktk= KitikiPlot( data= df("Summary").values.tolist() )
ktk.plot( ytick_prefix= "Time" )
xticks_values: lista (opcional)
- Lista que contiene los valores de xticks
- El valor predeterminado es ()
ktk= KitikiPlot( data= df("Summary").values.tolist() )
xtick_values= ('Start', "T1", "T2", "T3", "T4", "T5", "T6", "T7", "T8", "T9", "End")
ktk.plot( xticks_values= xtick_values )
yticks_values: lista (opcional)
- Lista que contiene los valores de yticks
- El valor predeterminado es ()
ktk= KitikiPlot( data= df("Summary").values.tolist() )
yticks_values= ((str(i.hour)+" "+i.strftime("%p").lower()) for i in pd.to_datetime(df("Formatted Date")))
ktk.plot( yticks_values= yticks_values )
xticks_rotation: int (opcional)
- Ángulo de rotación para etiquetas de marca del eje x.
- El valor predeterminado es 0.
ktk= KitikiPlot( data= df("Summary").values.tolist() )
ktk.plot( xticks_rotation= 45 )
yticks_rotation: int (opcional)
- Ángulo de rotación para etiquetas de marca del eje y.
- El valor predeterminado es 0.
ktk= KitikiPlot( data= df("Summary").values.tolist() )
ktk.plot( figsize= (20, 8), # Increase height of the plot for good visualization (here)
yticks_rotation= 45
)
título: str (opcional)
- El título de la trama.
- El valor predeterminado es “KitikiPlot: visualización intuitiva para ventana deslizante”.
ktk= KitikiPlot( data= df("Summary").values.tolist() )
ktk.plot( title= "KitikiPlot for Weather Dataset")
display_grid: bool (opcional)
- Una bandera que indica si se debe mostrar la cuadrícula en el gráfico.
- El valor predeterminado es Falso.
ktk= KitikiPlot( data= df("Summary").values.tolist()(:15) )
ktk.plot( display_grid= True )
ktk= KitikiPlot( data= df("Summary").values.tolist()(:15) )
ktk.plot(
cell_width= 2,
transpose= True,
xlabel= "Frames",
ylabel= "Sliding Windows",
ytick_prefix= "Window",
display_xticks= False,
display_grid= True
)
display_legend: bool (opcional)
- Una bandera que indica si se debe mostrar una leyenda en el gráfico.
- El valor predeterminado es Falso.
ktk= KitikiPlot( data= df("Summary").values.tolist() )
ktk.plot( display_legend= True )
legend_hatch: bool (opcional)
- Una bandera que indica si se deben incluir patrones de sombreado en la leyenda.
- El valor predeterminado es Falso.
ktk= KitikiPlot( data= df("Summary").values.tolist() )
ktk.plot(
cmap= {"Mostly Cloudy": "#ffffff"},
fallback_color= "white",
display_hatch= True,
display_legend= True,
legend_hatch= True
)
legend_kwargs: dict (opcional)
- Se pasan argumentos de palabras clave adicionales para personalizar la leyenda.
- El valor predeterminado es {}.
Colocar leyenda fuera de la trama.
ktk= KitikiPlot( data= df("Summary").values.tolist()(:15) )
ktk.plot(
figsize= (15, 5),
display_legend= True,
legend_kwargs= {"bbox_to_anchor": (1, 1.0), "loc":"upper left"} )
Establecer título para la leyenda————————————
ktk= KitikiPlot( data= df("Summary").values.tolist()(:15) )
ktk.plot(
figsize= (15, 5),
display_legend= True,
legend_kwargs= {"title": "Weather Conditions"}
)
Cambiar el color del borde de la leyenda.
ktk= KitikiPlot( data= df("Summary").values.tolist()(:15) )
ktk.plot(
figsize= (15, 5),
display_legend= True,
legend_kwargs= {"edgecolor": "lime"}
)
cell_kwargs: dict (opcional)
- Se pasan argumentos de palabras clave adicionales para personalizar celdas individuales.
- El valor predeterminado es {}.
Establecer el estilo de línea
ktk= KitikiPlot( data= df("Summary").values.tolist()(:15) )
ktk.plot(
figsize= (15, 5),
kitiki_cell_kwargs= {"linestyle": "--"} )
Ajustar el ancho de la línea
ktk= KitikiPlot( data= df("Summary").values.tolist()(:15) )
ktk.plot(
figsize= (15, 5),
kitiki_cell_kwargs= {"linewidth": 3} )
Ajustar el alfa
ktk= KitikiPlot( data= df("Summary").values.tolist()(:15) )
ktk.plot(
figsize= (15, 5),
kitiki_cell_kwargs= {"alpha": 0.4} )
Aplicaciones del mundo real de KitikiPlot
KitikiPlot sobresale en diversos campos donde la visualización de datos es clave para comprender patrones y tendencias complejos. Desde genómica y monitoreo ambiental hasta finanzas y modelos predictivos, KitikiPlot permite a los usuarios transformar datos sin procesar en conocimientos claros y procesables. Ya sea que esté analizando grandes conjuntos de datos, rastreando la calidad del aire a lo largo del tiempo o visualizando tendencias en los precios de las acciones, KitikiPlot ofrece la flexibilidad y personalización necesarias para satisfacer las demandas únicas de diversas industrias.
Genómica
- KitikiPlot permite una visualización clara de secuencias genéticas, lo que ayuda a los investigadores a identificar patrones y motivos.
- Facilita el análisis de variaciones estructurales de los genomas, esencial para comprender los trastornos genéticos.
- Al proporcionar representaciones visuales, ayuda a interpretar datos genómicos complejos, lo que respalda los avances en la medicina personalizada.
URL del conjunto de datos: https://archive.ics.uci.edu/dataset/69/molecular+biology+splice+junction+gene+sequences
# Import necessary libraries
from kitikiplot import KitikiPlot
import pandas as pd
# Load the dataset
df= pd.read_csv( "datasets/molecular+biology+splice+junction+gene+sequences/splice.data", header= None )
# Rename the columns
df.columns= ("Label", "Instance_Name", "Nucleotide_Sequence")
# Select 3 gene sequences randomly
df= df.sample(3, random_state= 1)
# Remove the white spaces from the "Nucleotide_Sequence"
df("Nucleotide_Sequence")= df("Nucleotide_Sequence").str.strip()
df
index= 0
ktk= KitikiPlot( data= (i for i in df.iloc(index, 2)), stride= 1, window_length= len(df.iloc(index, 2)) )
ktk.plot(
figsize= (20, 0.5),
cell_width= 2,
cmap= {'A': '#007FFF', 'T': "#fffc00", "G": "#00ff00", "C": "#960018"},
transpose= True,
xlabel= "Nucleotides",
ylabel= "Sequence",
display_yticks= False,
xtick_prefix= "Nucleotide",
xticks_rotation= 90,
title= "Genome Visualization: "+df.iloc(index, 1).strip()+", Label : "+df.iloc(index,0).strip(),
display_legend= True,
legend_kwargs= {"bbox_to_anchor": (1.01, 1), "loc":'upper left', "borderaxespad": 0.})
Pronóstico del tiempo
- La biblioteca puede representar eficazmente datos meteorológicos temporales, como temperatura y humedad, en ventanas de tiempo secuenciales para identificar tendencias.
- Esta visualización ayuda a detectar patrones y fluctuaciones en las condiciones climáticas, mejorando la precisión de los pronósticos.
- Además, respalda el análisis de datos históricos, lo que permite mejores predicciones y toma de decisiones informadas sobre actividades relacionadas con el clima.
URL del conjunto de datos: https://www.kaggle.com/datasets/muthuj7/weather-dataset
# Import necessary libraries
from kitikiplot import KitikiPlot
import pandas as pd
# Read csv
df= pd.read_csv( "datasets/weatherHistory/weatherHistory.csv")
print("Shape: ", df.shape)
# Select a subset of data for visualization
df= df.iloc(45:65, :)
print("Shape: ", df.shape)
df.head(3)
index= 0
weather_data= ('Mostly Cloudy', 'Overcast', 'Overcast', 'Overcast', 'Overcast', 'Overcast','Overcast', 'Overcast',
'Overcast', 'Mostly Cloudy', 'Mostly Cloudy', 'Partly Cloudy', 'Partly Cloudy', 'Partly Cloudy',
'Partly Cloudy', 'Mostly Cloudy', 'Mostly Cloudy', 'Mostly Cloudy', 'Mostly Cloudy', 'Mostly Cloudy')
time_period= ('21 pm', '22 pm', '23 pm', '0 am', '1 am', '2 am', '3 am', '4 am', '5 am', '6 am', '7 am', '8 am',
'9 am', '10 am', '11 am', '12 pm', '13 pm', '14 pm', '15 pm', '16 pm')
ktk= KitikiPlot( data= weather_data, stride= 1, window_length= 10 )
ktk.plot(
figsize= (20, 5),
cell_width= 2,
transpose= False,
xlabel= "Window",
ylabel= "Time",
yticks_values= time_period,
xticks_rotation= 90,
cmap= {"Mostly Cloudy": "brown", "Partly Cloudy": "#a9cbe0","Overcast": "#fdbf6f"},
legend_kwargs= {"bbox_to_anchor": (1.01, 1), "loc":'upper left', "borderaxespad": 0.},
display_legend= True,
title= "Weather Pattern on 10-04-2006")
Monitoreo de la calidad del aire
- Los usuarios pueden analizar los niveles de contaminantes a lo largo del tiempo con KitikiPlot para detectar variaciones y correlaciones en los datos ambientales.
- Esta capacidad permite identificar tendencias en la calidad del aire, lo que facilita una comprensión más profunda de cómo los diferentes contaminantes interactúan y fluctúan debido a diversos factores.
- Además, apoya la exploración de relaciones temporales entre los índices de calidad del aire y contaminantes específicos, mejorando la eficacia de los esfuerzos de monitoreo de la calidad del aire.
URL del conjunto de datos: https://archive.ics.uci.edu/dataset/360/air+quality
from kitikiplot import KitikiPlot
import pandas as pd
# Read excel
df= pd.read_excel( "datasets/air+quality/AirQualityUCI.xlsx" )
# Extract data from one day (2004-11-01)
df= df( df('Date')== "2004-11-01" )
print("Shape : ", df.shape)
df.head( 3 )
# Convert float to int
df("CO(GT)")= df("CO(GT)").astype(int)
CO_values= (3, 3, 3, 3, -200, 2, 1, 1, 1, 1, 2, 3, 4, 4, 3, 3, 3, 2)
time_period= ('0 am', '1 am', '2 am', '3 am', '4 am', '5 am', '6 am', '7 am', '8 am', '9 am', '10 am',
'11 am', '12 pm', '13 pm', '14 pm', '15 pm', '16 pm', '17 pm')
ktk= KitikiPlot( data= CO_values )
ktk.plot(
figsize= (20, 5),
cell_width= 2,
cmap= {-200: "cornflowerblue", 1: "#ffeaea", 2: "#feb9b9", 3: "#ff7070", 4: "#b00"},
transpose= True,
xlabel= "Time",
ylabel= "Sliding Windows of CO(GT) values (in mg/m^3)",
display_xticks= True,
xticks_values= time_period,
ytick_prefix= "Window",
xticks_rotation= 90,
display_legend= True,
title= "CO(GT) Trend in Air",
legend_kwargs= {"bbox_to_anchor": (1.01, 1), "loc":'upper left', "borderaxespad": 0.})
Conclusión
KitikiPlot simplifica la visualización de datos de ventanas deslizantes categóricas secuenciales y de series temporales, lo que hace que los patrones complejos sean más interpretables. Su versatilidad abarca diversas aplicaciones, incluida la genómica, el análisis meteorológico y el control de la calidad del aire, lo que destaca su amplia utilidad tanto en la investigación como en la industria. Centrándose en la claridad y la usabilidad, KitikiPlot mejora la extracción de información útil a partir de datos categóricos. Como biblioteca de código abierto, permite a los científicos e investigadores de datos abordar eficazmente diversos desafíos.
Conclusiones clave
- KitikiPlot es una biblioteca Python versátil diseñada para visualizaciones de datos de ventanas deslizantes precisas y fáciles de usar.
- Sus parámetros personalizables permiten a los usuarios crear visualizaciones significativas e interpretables adaptadas a sus conjuntos de datos.
- La biblioteca admite una amplia gama de aplicaciones del mundo real en diversos dominios industriales y de investigación.
- Como herramienta de código abierto, KitikiPlot garantiza la accesibilidad tanto para los investigadores como para los profesionales de la ciencia de datos.
- Las visualizaciones claras y reveladoras facilitan la identificación de tendencias en datos categóricos secuenciales.
Recursos
Citación
@software{ KitikiPlot_2024
author = {Boddu Sri Pavan and Boddu Swathi Sree},
title = {{KitikiPlot: A Python library to visualize categorical sliding window data}},
year = {2024},
version = {0.1.2},
url = {\url{https://github.com/BodduSriPavan-111/kitikiplot},
doi = {10.5281/zenodo.14293030}
howpublished = {\url{https://github.com/BodduSriPavan-111/kitikiplot}}
}
Preguntas frecuentes
A. KitikiPlot se especializa en visualizar datos categóricos secuenciales y de series temporales utilizando un enfoque de ventana deslizante.
R. Aunque está destinado principalmente a datos categóricos, KitikiPlot se puede adaptar a otros tipos de datos mediante técnicas creativas de preprocesamiento, como discretización, etc.
R. Sí, KitikiPlot se integra perfectamente con bibliotecas populares como Pandas y Matplotlib para un preprocesamiento eficaz y una visualización mejorada.
Los medios que se muestran en este artículo no son propiedad de Analytics Vidhya y se utilizan a discreción del autor.