From ee67cc87461d7df5755fff0a8090b784da2b8a46 Mon Sep 17 00:00:00 2001 From: "Cid Clay A. Quirino" <64210481+CidClayQuirino@users.noreply.github.com> Date: Sat, 25 May 2024 14:08:16 -0300 Subject: [PATCH] Add files via upload --- analise_visiolinkbrazaurorev21052024.py | 499 ++++++++++++++++++++++++ 1 file changed, 499 insertions(+) create mode 100644 analise_visiolinkbrazaurorev21052024.py diff --git a/analise_visiolinkbrazaurorev21052024.py b/analise_visiolinkbrazaurorev21052024.py new file mode 100644 index 0000000..123bb6f --- /dev/null +++ b/analise_visiolinkbrazaurorev21052024.py @@ -0,0 +1,499 @@ +# -*- coding: utf-8 -*- +"""Analise_VisioLinkBrazauroRev21052024.ipynb + +Automatically generated by Colab. + +Original file is located at + https://colab.research.google.com/drive/1Y_v-SRx1Tv5bc91NP7dq45G0CvvTez1A +""" + +!pip install markdown +!pip install statsmodels +!pip install scikit-learn +!pip install PyGithub +!pip install gitpython +!pip install statsmodels +!pip install dash +!pip install xlwt +!pip install openpyxl +!pip install tensorflow +!pip install scipy + +import requests +import pandas as pd + +# URL do arquivo no repositório do GitHub +file_url = 'https://raw.githubusercontent.com/CidClayQuirino/ConditionMonitoring_RNN/main/faultCodesHistoryBrazauro.csv' + +faultCodesHistoryBrazauro = pd.read_csv(file_url) + +# Enviar solicitação GET para fazer o download do arquivo +response = requests.get(file_url) + +# Verificar se a solicitação foi bem-sucedida +if response.status_code == 200: + # Salvar o conteúdo do arquivo em um arquivo local + with open('faultCodesHistoryBrazauro.csv', 'wb') as file: + file.write(response.content) + print("Download do arquivo concluído com sucesso!") +else: + print("Erro ao fazer download do arquivo:", response.text) + + # Listar as colunas do DataFrame +colunas = faultCodesHistoryBrazauro.columns.tolist() + +# Exibir as colunas +print(colunas) + +DfFaultCodesHistoryBrazauro = faultCodesHistoryBrazauro.rename(columns={'Asset Serial Number': 'Serial Number', 'Make': 'Fabricante', 'Name': 'Numero Frota', 'Fault Code Cid': 'Cid', 'Fault Code Fmi': 'Fmi', 'Fault Code Eid': 'Eid', 'Fault Code Spn': 'Spn', 'Severity': 'Severity', 'Lifetime Energy Generated Value': 'Energy', 'Lifetime Fuel Consumed Value': 'Fuel_Consumed', 'Service Meter Unit.3': 'Service Meter Unit', 'Lifetime Fuel Consumed Timestamp': 'Fuel Consumed Timestamp', 'Fault Location': 'Location'}) + +import pandas as pd + +dfFaultCode = DfFaultCodesHistoryBrazauro + +# Listar as colunas do DataFrame +colunas = dfFaultCode.columns.tolist() + +# Exibir as colunas +print(colunas) + +print(dfFaultCode['Fault Date'].dtype) + +dfFaultCode = dfFaultCode.rename(columns={'Fuel_Consumed': 'Fuel_Consumed usGal'}) + +import pandas as pd +dfFaultCode = DfFaultCodesHistoryBrazauro +# Converter a coluna 'Fault Date' para o tipo datetime +dfFaultCode['Fault Date'] = pd.to_datetime(dfFaultCode['Fault Date'].str.slice(0, 10)) +dfFaultCode.head() + +# Lista das colunas desejadas +colunas_desejadas = ['Serial Number', 'Model', 'Numero Frota', 'Fault Code', 'Severity', 'Fault Date', 'Fuel_Consumed', 'Hours Value', 'Odometer Value', 'Type', 'Occurrences'] + +# Manter apenas as colunas desejadas no DataFrame +dfFaultCode = dfFaultCode.loc[:, colunas_desejadas] + +# Lista dos modelos a serem removidos +models_to_remove = ["313D", "966", "980", "C15", "CS54B"] + +# Filtrar o DataFrame para manter apenas as linhas em que o modelo não está na lista de modelos a serem removidos +dfFaultCode = dfFaultCode[~dfFaultCode['Model'].isin(models_to_remove)] + +dfFaultCode['Model'] = dfFaultCode['Model'].replace('777-05', '777E-05') +dfFaultCode['Model'] = dfFaultCode['Model'].replace('777E', '777E-05') + + +# Exibir o DataFrame atualizado +dfFaultCode.head() + +import plotly.express as px +import pandas as pd + +# Agrupar os dados por modelo e data da falha e calcular a soma das ocorrências +grouped = dfFaultCode.groupby(['Model', 'Fault Date']).agg({'Occurrences': 'sum'}).reset_index() + +# Criar um gráfico de dispersão interativo para cada modelo +for model, data in grouped.groupby('Model'): + fig = px.scatter(data, x='Fault Date', y='Occurrences', title=f'Disposição das ocorrências ao longo do tempo para o modelo {model}', + labels={'Fault Date': 'Data da Falha', 'Occurrences': 'Total de Ocorrências'}, + hover_data=['Occurrences']) + fig.show() + +import plotly.express as px + +# Filtrar o DataFrame para manter apenas as colunas desejadas e remover linhas com valores ausentes em 'Fault Date' e 'Occurrences' +df_filtered = dfFaultCode[['Fault Date', 'Model', 'Occurrences', 'Severity']].dropna(subset=['Fault Date', 'Occurrences']) + +# Criar o gráfico de dispersão interativo +fig = px.scatter(df_filtered, x='Fault Date', y='Occurrences', color='Severity', + facet_col='Model', facet_col_wrap=3, + labels={'Fault Date': 'Data da Falha', 'Occurrences': 'Ocorrências', 'Severity': 'Severidade'}, + title='Dispersão de Ocorrências de Falha por Tempo e Modelo com Indicação de Severidade', + color_continuous_scale=['green', 'yellow', 'red'], + render_mode='auto') + +# Atualizar o layout para ajustar o tamanho dos subplots e adicionar títulos aos subplots +fig.update_layout(height=800, width=1000, showlegend=True, coloraxis_colorbar=dict(title='Severidade')) + +# Exibir o gráfico +fig.show() + +import plotly.express as px + +# Filtrar o DataFrame para manter apenas as ocorrências com Severity igual a 3 +df_filtered = dfFaultCode[dfFaultCode['Severity'] == 3] + +# Drop linhas com valores ausentes em 'Fault Date' e 'Occurrences' +df_filtered = df_filtered.dropna(subset=['Fault Date', 'Occurrences']) + +# Calcular a quantidade total de eventos +total_events = df_filtered['Occurrences'].sum() + +# Criar o gráfico de dispersão interativo +fig = px.scatter(df_filtered, x='Fault Date', y='Occurrences', color_discrete_sequence=['red'], + facet_col='Model', facet_col_wrap=3, + labels={'Fault Date': 'Data da Falha', 'Occurrences': 'Ocorrências', 'Severity': 'Severidade'}, + title=f'Dispersão de Ocorrências de Falha por Tempo e Modelo com Severidade 3\nTotal de Eventos: {total_events}') + +# Atualizar o layout para ajustar o tamanho dos subplots e adicionar títulos aos subplots +fig.update_layout(height=800, width=1000, showlegend=False) + +# Exibir o gráfico +fig.show() + +import pandas as pd + +# Filtrar o DataFrame para manter apenas as colunas necessárias +df_filtered = dfFaultCode[['Model', 'Severity', 'Occurrences']] + +# Criar a tabela pivô +pivot_table = pd.pivot_table(df_filtered, values='Occurrences', index='Model', columns='Severity', aggfunc='sum', fill_value=0) + +# Adicionar uma coluna com o total de ocorrências por modelo +pivot_table['Total'] = pivot_table.sum(axis=1) + +# Adicionar colunas com a porcentagem de ocorrências por severidade +for severity in pivot_table.columns[:-1]: # Excluir a última coluna 'Total' + pivot_table[f'%_{severity}'] = (pivot_table[severity] / pivot_table['Total']) * 100 + +# Arredondar os valores das colunas de porcentagem +pivot_table['%_1'] = pivot_table['%_1'].round(1) +pivot_table['%_2'] = pivot_table['%_2'].round(1) +pivot_table['%_3'] = pivot_table['%_3'].round(1) + +# Exibir a tabela +#print(pivot_table) +# Converter a tabela pivô em um DataFrame +dfResumo = pd.DataFrame(pivot_table) + +# Exibir o DataFrame +print(dfResumo) + +import plotly.graph_objects as go + +# Supondo que dfResumo seja o DataFrame com as colunas %_1, %_2 e %_3 + +# Criando os dados para o gráfico +modelos = dfResumo.index.tolist() # Supondo que os modelos estejam no índice do DataFrame +percentuais_1 = dfResumo['%_1'] +percentuais_2 = dfResumo['%_2'] +percentuais_3 = dfResumo['%_3'] + +# Criando as barras com cores personalizadas +fig = go.Figure() +fig.add_trace(go.Bar(x=modelos, y=percentuais_1, text=percentuais_1, textposition='auto', name='%_1', marker_color='green')) +fig.add_trace(go.Bar(x=modelos, y=percentuais_2, text=percentuais_2, textposition='auto', name='%_2', marker_color='yellow')) +fig.add_trace(go.Bar(x=modelos, y=percentuais_3, text=percentuais_3, textposition='auto', name='%_3', marker_color='red')) + +# Atualizando o layout do gráfico +fig.update_layout( + title='Percentuais por Modelo', + xaxis=dict(title='Modelo'), + yaxis=dict(title='Percentual'), + barmode='group' +) + +# Exibindo o gráfico interativo +fig.show() + +import pandas as pd +#dfFaultCode6030 = dfFaultCode[dfFaultCode['Model'] == "6030"] +dfFaultCode6030 = dfFaultCode[dfFaultCode['Model'] == "6030"] +dfFaultCode6030 = dfFaultCode6030[dfFaultCode6030['Severity'] > 2] +dfFaultCode6030.head() + +import pandas as pd + +# Suponha que dfFaultCode6030 seja o DataFrame original com as colunas 'Fault Code' e 'Occurrences' + +# Agrupar por 'Fault Code' e somar as ocorrências +df_fault_code_summary = dfFaultCode6030.groupby('Fault Code')['Occurrences'].sum().reset_index() + +# Ordenar o DataFrame em ordem decrescente de ocorrências, se necessário +df_fault_code_summary_sorted = df_fault_code_summary.sort_values(by='Occurrences', ascending=False) + +# Exibir o DataFrame resultante +print(df_fault_code_summary_sorted) + +import plotly.express as px + +# Supondo que você tenha um DataFrame chamado dfFaultCode6030 com os dados + +# Criar o gráfico de dispersão +fig = px.scatter(dfFaultCode6030, x='Fault Date', y='Occurrences', color='Occurrences', + color_continuous_scale='Reds', title='Gráfico de Dispersão - Occurrences por Fault Date & Severity = 3', + facet_col='Serial Number', facet_col_wrap=3) # facet_col_wrap define quantos gráficos são exibidos por linha + +# Exibir o gráfico +fig.show() + +import pandas as pd +import plotly.graph_objects as go + +# Supondo que você tenha um DataFrame chamado dfFaultCode6030 com os dados + +# Agrupar por Serial Number e Fault Code e somar as ocorrências +df_Df6030FaultResumeAll = dfFaultCode6030.groupby(['Serial Number', 'Fault Code'])['Occurrences'].sum().reset_index() + +# Calcular o total de ocorrências por Fault Code +total_occurrences = df_Df6030FaultResumeAll.groupby('Fault Code')['Occurrences'].transform('sum') + +# Adicionar a coluna com o total de Occurrences ao DataFrame +df_Df6030FaultResumeAll['Total_Occurrences'] = total_occurrences + +# Ordenar o DataFrame em ordem decrescente por Total_Occurrences +df_Df6030FaultResumeAll = df_Df6030FaultResumeAll.sort_values(by='Total_Occurrences', ascending=False) + +# Selecionar os 10 maiores códigos de falha +top_10_fault_codes = df_Df6030FaultResumeAll.head(40)['Fault Code'] + +# Filtrar df_Df6030FaultResumeAll mantendo apenas os 10 maiores códigos de falha +df_Df6030FaultResumeAll = df_Df6030FaultResumeAll[df_Df6030FaultResumeAll['Fault Code'].isin(top_10_fault_codes)] + +# Remover duplicatas na coluna Fault Code, mantendo apenas os valores únicos com maior Total_Occurrences +df_Df6030FaultResumeAll_unique = df_Df6030FaultResumeAll.drop_duplicates(subset=['Fault Code']) + +# Ordenar o DataFrame em ordem decrescente por Serial Number e Fault Code +df_Df6030FaultResumeAll_unique = df_Df6030FaultResumeAll_unique.sort_values(by=['Serial Number', 'Total_Occurrences'], ascending=[True, False]) + +# Para cada Serial Number, criar um gráfico de barras separado +for serial_number in df_Df6030FaultResumeAll_unique['Serial Number'].unique(): + # Filtrar os dados para o Serial Number atual + df_filtered = df_Df6030FaultResumeAll_unique[df_Df6030FaultResumeAll_unique['Serial Number'] == serial_number] + + # Criar o gráfico de barras + fig = go.Figure(go.Bar( + x=df_filtered['Fault Code'], + y=df_filtered['Total_Occurrences'], + name=serial_number # Usar o Serial Number como nome do gráfico + )) + + # Atualizar o layout do gráfico + fig.update_layout( + title=f'Total de Ocorrências por Fault Code para Serial Number {serial_number}', + xaxis_title='Fault Code', + yaxis_title='Total de Ocorrências', + xaxis=dict(type='category') # Garantir que o eixo x seja categórico + ) + + # Exibir o gráfico + fig.show() + +import pandas as pd +import plotly.express as px + +# Calcular a quantidade total de ocorrências para cada Fault Code +fault_code_occurrences = dfFaultCode6030.groupby('Fault Code')['Occurrences'].sum() + +# Selecionar os top 10 Fault Codes com base na quantidade de ocorrências +top_10_fault_codes = fault_code_occurrences.nlargest(10).index.tolist() + +# Filtrar o DataFrame original para incluir apenas os dados relacionados aos top 10 Fault Codes +df_top_10_fault_codes = dfFaultCode6030[dfFaultCode6030['Fault Code'].isin(top_10_fault_codes)] + +# Criar o gráfico de dispersão +fig = px.scatter(df_top_10_fault_codes, x='Fault Date', y='Occurrences', color='Fault Code', + title='Gráfico de Dispersão dos Top 10 Fault Codes por Data de Falha', + labels={'Occurrences': 'Quantidade de Ocorrências', 'Fault Date': 'Data de Falha'}, + hover_data={'Fault Code': True, 'Occurrences': True}) + +# Exibir o gráfico +fig.show() + +import pandas as pd +import plotly.express as px + +dfFaultCode6030_02 = dfFaultCode[dfFaultCode['Serial Number'].isin(["6P300111"])] + +# Calcular a quantidade total de ocorrências para cada Fault Code +fault_code_occurrences = dfFaultCode6030_02.groupby('Fault Code')['Occurrences'].sum() + +# Selecionar os top 10 Fault Codes com base na quantidade de ocorrências +top_10_fault_codes = fault_code_occurrences.nlargest(10).index.tolist() + +# Filtrar o DataFrame original para incluir apenas os dados relacionados aos top 10 Fault Codes +df_top_10_fault_codes = dfFaultCode6030_02[dfFaultCode6030_02['Fault Code'].isin(top_10_fault_codes)] + +# Criar o gráfico de dispersão +fig = px.scatter(df_top_10_fault_codes, x='Fault Date', y='Occurrences', color='Fault Code', + title='Gráfico de Dispersão dos Top 10 Fault Codes por Data de Falha 6P300111', + labels={'Occurrences': 'Quantidade de Ocorrências', 'Fault Date': 'Data de Falha'}, + hover_data={'Fault Code': True, 'Occurrences': True}) + +# Exibir o gráfico +fig.show() + +import pandas as pd +import plotly.express as px + +dfFaultCode6030_01 = dfFaultCode[dfFaultCode['Serial Number'].isin(["6P300101"])] + +# Calcular a quantidade total de ocorrências para cada Fault Code +fault_code_occurrences = dfFaultCode6030_01.groupby('Fault Code')['Occurrences'].sum() + +# Selecionar os top 10 Fault Codes com base na quantidade de ocorrências +top_10_fault_codes = fault_code_occurrences.nlargest(10).index.tolist() + +# Filtrar o DataFrame original para incluir apenas os dados relacionados aos top 10 Fault Codes +df_top_10_fault_codes = dfFaultCode6030_01[dfFaultCode6030_01['Fault Code'].isin(top_10_fault_codes)] + +# Criar o gráfico de dispersão +fig = px.scatter(df_top_10_fault_codes, x='Fault Date', y='Occurrences', color='Fault Code', + title='Gráfico de Dispersão dos Top 10 Fault Codes por Data de Falha 6P300101', + labels={'Occurrences': 'Quantidade de Ocorrências', 'Fault Date': 'Data de Falha'}, + hover_data={'Fault Code': True, 'Occurrences': True}) + +# Exibir o gráfico +fig.show() + +import pandas as pd + +# Suponha que dfFaultCode seja o DataFrame original +# Filtrar o DataFrame original para incluir apenas os dados dos Serial Numbers desejados +dfFaultCode6P300111 = dfFaultCode[dfFaultCode['Serial Number'].isin(["6P300111"])] + +# Calcular o total de Occurrences por Fault Code +total_occurrences = dfFaultCode6P300111.groupby('Fault Code')['Occurrences'].transform('sum') + +# Adicionar a coluna com o total de Occurrences ao DataFrame +dfFaultCode6P300111['Total_Occurrences'] = total_occurrences + +# Selecionar as colunas desejadas +dfFaultCode6P300111 = dfFaultCode6P300111[['Fault Code', 'Total_Occurrences']] + +# Remover duplicatas na coluna Fault Code mantendo apenas os valores únicos +dfFaultCode6P300111 = dfFaultCode6P300111.drop_duplicates(subset=['Fault Code']) + +# Ordenar o DataFrame em ordem decrescente por Total_Occurrences +dfFaultCode6P300111 = dfFaultCode6P300111.sort_values(by='Total_Occurrences', ascending=False) + +# Exibir o DataFrame resultante +dfFaultCode6P300111.head() + +import pandas as pd + +# Suponha que dfFaultCode seja o DataFrame original +# Filtrar o DataFrame original para incluir apenas os dados dos Serial Numbers desejados +dfFaultCode6P300101 = dfFaultCode[dfFaultCode['Serial Number'].isin(["6P300101"])] + +# Calcular o total de Occurrences por Fault Code +total_occurrences = dfFaultCode6P300101.groupby('Fault Code')['Occurrences'].transform('sum') + +# Adicionar a coluna com o total de Occurrences ao DataFrame +dfFaultCode6P300101['Total_Occurrences'] = total_occurrences + +# Selecionar as colunas desejadas +dfFaultCode6P300101 = dfFaultCode6P300101[['Fault Code', 'Total_Occurrences']] + +# Remover duplicatas na coluna Fault Code mantendo apenas os valores únicos +dfFaultCode6P300101 = dfFaultCode6P300101.drop_duplicates(subset=['Fault Code']) + +# Ordenar o DataFrame em ordem decrescente por Total_Occurrences +dfFaultCode6P300101 = dfFaultCode6P300101.sort_values(by='Total_Occurrences', ascending=False) + +# Selecionar os 10 códigos de falha com o maior número de ocorrências +df_top_10_fault_codes = dfFaultCode6P300101.nlargest(10, 'Total_Occurrences') + +# Exibir o DataFrame resultante +dfFaultCode6P300101.head() + +import pandas as pd +#dfFaultCode6030 = dfFaultCode[dfFaultCode['Model'] == "6030"] +dfFaultCode777E = dfFaultCode[dfFaultCode['Model'] == "777E-05"] +#dfFaultCode6030 = dfFaultCode6030[dfFaultCode6030['Severity'] >= 1] +dfFaultCode777E.head() + +import pandas as pd +import plotly.express as px + +dfFaultCode777E_1 = dfFaultCode777E[dfFaultCode777E['Serial Number'].isin(["7W802674"])] + +# Calcular a quantidade total de ocorrências para cada Fault Code +fault_code_occurrences = dfFaultCode777E_1.groupby('Fault Code')['Occurrences'].sum() + +# Selecionar os top 10 Fault Codes com base na quantidade de ocorrências +top_10_fault_codes = fault_code_occurrences.nlargest(10).index.tolist() + +# Filtrar o DataFrame original para incluir apenas os dados relacionados aos top 10 Fault Codes +df_top_10_fault_codes = dfFaultCode777E_1[dfFaultCode777E_1['Fault Code'].isin(top_10_fault_codes)] + +# Criar o gráfico de dispersão +fig = px.scatter(df_top_10_fault_codes, x='Fault Date', y='Occurrences', color='Fault Code', + title='Gráfico de Dispersão dos Top 10 Fault Codes por Data de Falha 7W802674', + labels={'Occurrences': 'Quantidade de Ocorrências', 'Fault Date': 'Data de Falha'}, + hover_data={'Fault Code': True, 'Occurrences': True}) + +# Exibir o gráfico +fig.show() + +import plotly.express as px + +# Supondo que você tenha um DataFrame chamado dfFaultCode6030 com os dados + +# Criar o gráfico de dispersão +fig = px.scatter(dfFaultCode777E, x='Fault Date', y='Occurrences', color='Occurrences', + color_continuous_scale='Reds', title='Gráfico de Dispersão - Occurrences por Fault Date', + facet_col='Serial Number', facet_col_wrap=3) # facet_col_wrap define quantos gráficos são exibidos por linha + +# Exibir o gráfico +fig.show() + +import plotly.express as px + +# Supondo que você tenha um DataFrame chamado dfFaultCode6030 com os dados + +# Criar o gráfico de dispersão +fig = px.scatter(dfFaultCode777E, x='Fault Date', y='Occurrences', color='Occurrences', + color_continuous_scale='Reds', title='Gráfico de Dispersão - Occurrences por Fault Date', + facet_col='Serial Number', facet_col_wrap=3) # facet_col_wrap define quantos gráficos são exibidos por linha + +# Exibir o gráfico +fig.show() + +import pandas as pd +from io import BytesIO + +# Função para salvar o DataFrame como CSV e enviar para o GitHub +def salvar_e_enviar_para_github(dataframe, nome_arquivo, usuario, repositorio, token): + import requests + from base64 import b64encode + + # Salvar DataFrame como CSV em um BytesIO + csv_bytes = BytesIO() + dataframe.to_csv(csv_bytes, index=False) + + # Codificar o conteúdo CSV em base64 + csv_content = b64encode(csv_bytes.getvalue()).decode() + + # Configurar URL e cabeçalhos para a API do GitHub + url = f"https://api.github.com/repos/{usuario}/{repositorio}/contents/{nome_arquivo}" + headers = { + "Authorization": f"token {token}", + "Content-Type": "application/json" + } + + # Configurar o payload para a API do GitHub + payload = { + "message": f"Adicionando arquivo {nome_arquivo}", + "content": csv_content + } + + # Enviar a solicitação PUT para criar/atualizar o arquivo no repositório do GitHub + response = requests.put(url, headers=headers, json=payload) + + # Verificar a resposta da API do GitHub + if response.status_code == 201: + print(f"Arquivo {nome_arquivo} criado com sucesso no repositório {repositorio}.") + elif response.status_code == 200: + print(f"Arquivo {nome_arquivo} atualizado com sucesso no repositório {repositorio}.") + else: + print(f"Falha ao enviar arquivo para o GitHub: {response.status_code} - {response.json()}") + +# Dados de exemplo para enviar o DataFrame para o GitHub +seu_usuario = "CidClayQuirino" +seu_repositorio = "rnn-component-lIfe-cycle" +seu_token = "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" + +# Salvar e enviar o DataFrame filtrado para o GitHub +salvar_e_enviar_para_github(dfFaultCode6P300101, "dfFaultCode6P300101.csv", seu_usuario, seu_repositorio, seu_token) +salvar_e_enviar_para_github(dfFaultCode6P300111, "dfFaultCode6P300111.csv", seu_usuario, seu_repositorio, seu_token) \ No newline at end of file