import epmwebapi as epm
import datetime as dt
import numpy as np
import pandas as pd
import os
credentials = os.environ.get('user_and_password').split(';')
user = credentials[0]
password = credentials[1]
#cria conexao
epmConn = epm.EpmConnection('http://localhost:44333', 'http://localhost:44332', user, password)
path = 'R80711_Wind_speed'
bv = epmConn.getDataObjects(path)
iniTime = dt.datetime(2016, 1, 1, 0, 0, 0, 0)
endTime = iniTime + dt.timedelta(days=3)
#cria objeto queryperiod
queryPeriod = epm.QueryPeriod(iniTime, endTime)
#aplica o objeto um historyReadRaw com o queryPeriod na basicVariable selecionada
result = bv[path].historyReadRaw(queryPeriod)
#fechando a conexão
connection.close()
result.shape
corrige o problema: ValueError: Big-endian buffer not supported on little-endian compiler para ser possível transformar os dados vindos do EPM em um Dataframe Pandas
new_Quality = result[:]['Quality'].byteswap().newbyteorder()
new_Timestamp = result[:]['Timestamp']
new_Value = result[:]['Value'].byteswap().newbyteorder()
d = {'Value':new_Value, 'Timestamp':new_Timestamp, 'Quality':new_Quality}
df_original = pd.DataFrame(d)
Mostra o formato dos dados, para esse caso são 432 linhas por 3 colunas
df_original.shape
print("Numpy Array:")
print(result[0:5])
print("\n")
print("Dataframe Pandas:")
df_original.head()
df_original.dtypes
df_original.describe()
df_original.describe(include='all')
df_original.describe(include=['float32'])
df_sem_timestamp = df_original.drop(['Timestamp'],axis=1)
df_sem_timestamp.describe(include='all')
#axis= 1 - Colunas / axis = 0 - Linhas
df_sem_timestamp_v1 = df_sem_timestamp.drop([0,1],axis=0)
df_sem_timestamp_v1.head()
for indice, linha in df_original.iterrows():
print(indice, linha.Value , ' = ', linha.Timestamp)
if indice == 5:
break
a = df_original.Value.sort_values(ascending=False)
type(a)
#Para ordernar direto o DF aplicar sort_values no DF
b = df_original.sort_values(['Value'], ascending=False)
type(b)
booleanos = []
for item in df_original.Value:
if item > 10:
booleanos.append(True)
else:
booleanos.append(False)
#mostra se os primeiros 10 valores possuem "value" mais que 10
booleanos[:10]
df_filtrado = df_original[booleanos]
df_filtrado.shape
# A é uma serie do pandas
A = df_original.Value > 10
#apresenta todos os dados maiores que 10
df_original[A]
df_original[df_original.Value > 10].head()
serie_timestamp = df_original[df_original.Value > 10].Timestamp
serie_timestamp.head()
#retorna dataframe
df_filtrado = df_original.loc[df_original.Value > 10]
df_filtrado.head()
#retorna uma serie
serie_filtrada = df_original.loc[df_original.Value > 10, 'Timestamp']
serie_filtrada.head()
df_original[(df_original.Value > 10) & (df_original.Quality == 0)].head()
df_original[(df_original.Value > 10) | (df_original.Quality == 0)].head()
df_original[df_original.Value.isin([6])].head()
df_original.loc[(df_original.Value > 10) & (df_original.Quality == 0)].head()
# 'index' é um alias para axis 0
print(df_original.mean(axis=0))
#conferir se a media estar certa
df_original.describe()
# 'columns' é um alias para axis 1
df_original.mean(axis=1).head()
media_linha = (df_original['Quality'][0] + df_original['Value'][0])/2
media_linha
soma = df_original.sum(axis=1)
soma.head()
soma = df_original.sum(axis=0)
soma.head()
df_original.dtypes
strings = []
for item in df_original.Value:
a = str(item)
strings.append(a)
df_nova_coluna = df_original
df_nova_coluna['Value_string'] = pd.Series(strings)
#Note que o DF df_original está com a coluna Value_string criada em df_nova_coluna, por isso no python é preciso copiar a lista
df_original.head()
df_original.drop(['Value_string'], axis=1, inplace=True)
df_original.dtypes
df_nova_coluna = df_original.copy()
df_nova_coluna['Value_string'] = pd.Series(strings)
df_nova_coluna.dtypes
df_nova_coluna.describe(include='all')
df_nova_coluna[df_nova_coluna.Value_string.str.contains('21.')].head()
df_nova_coluna2 = df_nova_coluna.copy()
df_nova_coluna2.dtypes
df_nova_coluna2['Quality'] = df_nova_coluna2.Quality.astype(object)
df_nova_coluna2.dtypes
df_nova_coluna2['Value_int'] = df_nova_coluna2.Value_string.str.split('.').str[0]
df_nova_coluna2.head()
df_nova_coluna2.describe(include='all')
df_nova_coluna2.Value_string.str.split('.', expand=True).head()
todas_ocorrencias = df_nova_coluna2.Value_string.str.contains('21.').astype(int)
print(type(todas_ocorrencias))
#numero de ocorrencias de valores que contenham 21.
todas_ocorrencias.sum()
df_nova_coluna2.loc[df_nova_coluna2.Value_int == '5', 'Value_int'] = np.nan
df_nova_coluna2.isnull().sum()
df_nova_coluna2[df_nova_coluna2.Value_int.isnull()].tail()
df_nova_coluna2.shape[0]
df_linhas_removidas = df_nova_coluna2.dropna(how='any')
df_linhas_removidas.shape[0]
não foi deletado nada porque não existe uma linha com todos valores NaN
A = df_nova_coluna2.dropna(how='all')
A.shape
não foi deletado nada porque não existe uma linha Value_int E Timestamp NaN
A = df_nova_coluna2.dropna(subset=['Value_int', 'Timestamp'],how='all')
A.shape
Foi deletado porque existe uma linha Value_int OU Timestamp NaN
B = df_nova_coluna2.dropna(subset=['Value_int', 'Timestamp'],how='any')
B.shape
df_nova_coluna2.Value_int.value_counts().head(10)
df_nova_coluna2.Value_int.value_counts(dropna=False).head(10)
C = df_nova_coluna2.fillna(value=-1)
C[C.Value_int == -1].tail()