Aǹalise de Dados dr Sensores
Os dados s̃ao convertidos de xlsx para csv e depois lidos pelo Pandas
%matplotlib inline
import seaborn as sns
import matplotlib.pyplot as plt
from datetime import datetime
import pandas as pd
import matplotlib
def cvtime(x):
t=[]
for i in x:
years=i[0:2]
months=i[3:5]
hr=i[9:11]
day=i[6:8]
min=i[12:14]
sec=i[15:17]
t += [pd.to_datetime(datetime(2000+int(years),int(months),int(day),int(hr),minute=int(min),second=int(sec)))]
return t
df = pd.read_csv("HISTORICOALARMES_IN.csv", sep=";", parse_dates=["DATAHORA"],date_parser=cvtime)
Segue-se os dados iniciais. Notar algumas tags de 2013. O que se segue e uma introducao aos dados.
df
Renover dados com datas inatingiveis. Pandas describe apresenta os principais parametros
df1=df[(df['DATAHORA'] > '2019-01-01') & (df['DATAHORA'] < '2020-07-01')]
df1.describe()
Distribuicao de eventos por dia da semana. Redicao a sexta e sabado, como seria de esperar.
#gbyd=df1.groupby( [df1["DATAHORA"].t.month]).TAG.count()
ax = sns.countplot(df1['DATAHORA'].dt.weekday)
Agregacao por hora do dia. De notar que os noruegueses ñao parecem muito activos antes das 5 da manha.
#gbyd=df1.groupby( [df1["DATAHORA"].t.month]).TAG.count()
ax = sns.countplot(df1['DATAHORA'].dt.hour)
Agregar pela linha requereria entender a topologia do sistema,
Entidades< ǹumero grande de entidades diferentes, uma parece dominante.
ax = sns.countplot(df1['ID_LINHA'])
ax = sns.countplot(df1['ENTIDADE'])
Discretizàc̃ao e contagem de eventos por entidade
df1['Y'] = df1.loc[:,'ENTIDADE'].astype('category')
df1.Y.describe()
df1.Y.value_counts()
# failure=df1.loc["failure" in df1['ENTIDADE'].str.lower()]
# comms=df1.loc[df1['ENTIDADE'].str.lower().str.find("communication")>=0]
# total=df1.loc[df1['ENTIDADE'].str.lower().str.find("total number of")>=0]
# memory=df1.loc[df1['ENTIDADE'].str.lower().str.find("memory")>=0]
# validator=df1.loc[df1['ENTIDADE'].str.lower().str.find("validator")>=0]
# print(failure.ENTIDADE.describe())
# print(comms.ENTIDADE.describe())
# print(total.ENTIDADE.describe())
# print(validator.ENTIDADE.describe())
# print(memory.ENTIDADE.describe())
# print(memory.ENTIDADE.describe())
A funcao plotall escreve a distribuicao de tipo de evento por
Alguns tipos de eventos tem reduzido ao longo do tempo (atraso devido a manobras), outros tem-se mantido estaveis, etc.
A maioria dos eventos reduz-se no fim de semana, mas carros parados e falhas mecanicas sao mais comuns no dia 5 e 6.
A variacao ao longo do dia e mais complexa do que esperado. De notar que muitas falhas de comunicacao sao noturnas.
ev = 'Urgent call'
dat = df1[df1['Y']==ev]
data={'x':dat.DATAHORA.dt.day,
'y':dat.TAG}
#ax = sns.countplot(df1[df1['Y']==ev]['DATAHORA'].dt.weekday
def plotall(df1):
vcs= df1.Y.value_counts()
vs = vcs.index.to_list()
evs = vcs.to_list()
l = len(vs)
for ev in vs:
fig, (ax1,ax2,ax3) =plt.subplots(1,3,figsize=(17,7))
dat = df1[df1['Y']==ev]
cases={'Weeks_Past':(dat.DATAHORA-datetime(year=2019,month=10,day=1)).dt.days,'y':dat.TAG,
'Week_Day':dat.DATAHORA.dt.weekday,
'Hour_Day':dat.DATAHORA.dt.hour,
'Quarter':dat.DATAHORA.dt.quarter
}
mind = cases['Weeks_Past'].min()
cases['Weeks_Past'] -= mind
maxd = cases['Weeks_Past'].max()
# ax0.set_title(ev+" ("+str(vcs[ev])+")")
ax1.set_title(ev+" ("+str(vcs[ev])+")")
ax2.set_title(ev+" ("+str(vcs[ev])+")")
ax3.set_title(ev+" ("+str(vcs[ev])+")")
# sns.distplot(cases['Quarter'],ax=ax0)
sns.distplot(cases['Weeks_Past'],ax=ax1,bins=maxd//30+1)
sns.distplot(cases['Week_Day'],ax=ax2,bins=7)
sns.distplot(cases['Hour_Day'],ax=ax3,bins=24)
# ax0.set_xlabel("Quarter")
ax1.set_xlabel("Days Past")
ax2.set_xlabel("Day of Week")
ax3.set_xlabel("Hour of Day")
# ax1.set_xlim(-1,5)
ax1.set_xlim(-10,maxd+1)
ax2.set_xlim(-1,7)
ax3.set_xlim(-1,25)
plt.show()
plotall(df1)
Porque tantos eventos do driver nao logging in?
%%bash
grep "Delay of a driver in logging in the badging workst" *csv|head -20
Duplicatas! Vamos eliminar
sdata=df1.drop_duplicates(['Y','DATAHORA'])
sdata.describe()
refazer da os mesmos resulltados mas mais equilibrados.
plotall(sdata)
...