lectura de doc.CSV y analisis de dataframe con libreria pandas
MODELADO DE DATOS
//importar librerias¶
la librería PANDAS ofrece para python unas estructuras de datos fáciles de usar y alto performance, atra ves de funciones esenciales para el análisis de datos. MATPLOTLIB libreria para visualizaciones gráficas, NUMPY paquete fundamental para la computación científica en python
import pandas as pd
import matplotlib.pyplot as p
import numpy as np
Lectura de archivo formato csv¶
se utiliza la función read_csv llamada por el objeto creado 'pd' de la libreria pandas para llamar el archivo "channel.csv", donde se da la direccion del directorio en el cual esta ubicado. Al leer el archivo es guardado en un DataFrame llamado tabla. con el atributo index_col al definrle 0 se crea el data frame sin indice.
tabla=pd.read_csv('/home/adrian/Documentos/csv/channel', index_col=0)
con la función replace, remplazamos el texto 'Frame is not being retransmitted'por un 0 y el texto 'Frame is being retransmitted' por un 1, a la columna Retry.
tabla.Retry=tabla.Retry.replace(['Frame is not being retransmitted','Frame is being retransmitted'],[0,1])
#df = df.rename(columns={'$a': 'a', '$b': 'b'})
#df.reset_index(level=['a','b'])
seleccion y agrupacion de columnas¶
con la funcion groupby agrupamos por las columnas channel y Source del DataFrame tabla y se guarda en una nueva llamada fuente, como indice las agrupaciones realizadas. con la funcion reset_index declaramos los indices como columnas, que luego las selecionamos guardandolas en un nuevo Dataframe llamado fuentes, ya que el objetivo es saber el numero de fuentes por canal, agrupamos de nuevo por canal las fuentes sin repetir resultado de la priemra agrupacion, y las contamos con la funcion count()
fuente=tabla.groupby(['channel','Source']).sum()
fuente= fuente.reset_index()# tomar los indices como columnas
fuentes=fuente[['channel','Source']]
fuente=fuentes.groupby('channel') .count()
agrupamos por Channel y Destination del dataframe tabla para saber el numero de terminales por canal, en este caso se utiliza como atributo as_index igualada a False para asignar los indices como columnas de la nueva agrupacion, tomamos las columnas con las que necitamos trabajar, agrupandolas de nuevo para ser contadas.
destino=tabla.groupby(['channel','Destination'], as_index=False).count()
destino=destino[['channel','Destination']]
destinos=destino.groupby('channel').count()
se realiza el mismo cazo anterio para mirar las retramisiones por canal, realizando la agrupacion sin indices. con la funcion set_index tomamos la columna channel como el nuevo index del dataframe
retry=tabla.groupby(['channel','Retry'], as_index=False ).count()
retry=retry[['channel','Retry','Destination']]
retry.set_index('channel', append=True, inplace=True) #tomamos la columna 'channel' como index
retry
union de data frame¶
se tiene el data frame fuente con la columna 'Source' y el data frame destinos con la culumna 'Destination' en la cual son unidas por medio de la funcion JOIN y guardadas en el dataframe tabla final
tablafinal=fuente.join(destinos)
se imprime el data frame tabla final con los primeros 5 elementos
tablafinal.head()
agrupacion por channel y Source y el conteo de las mismas
mm=tabla.groupby(['channel','Source']).count().head()
mm
generar grafica en notebook
%matplotlib inline
Graficas¶
grafica en barras del dataframe tablafinal fuentes y destinos por canal. se importa la libreria matplotlib y graficamos con la funcion plot y le decimos como tipo barras
tablafinal.plot(kind='bar')
p.show()
renombramos las columnas time por total y el Source por ftotal fuentes con la funcion RENAME
channelretry=tabla.groupby(['channel','Retry']).count()
channelretry=channelretry[['Time','Source']]
channelretry = channelretry.rename(columns={'Time': 'total','Source':'total fuentes'})#cambiar nombre a una columna
channelretry.plot(kind='bar')
p.show()
ssi=tabla['SSI Signal (dBm)']
ssi.hist()
rssi=tabla[['SSI Signal (dBm)','Time']]
rssi=rssi.groupby('SSI Signal (dBm)').count()
rssi.sort(columns='Time' , ascending=True)