CONTEXTE: Je suis occupé à analyser des données pour divers travaux expérimentaux. Le but est d'importer un fichier Excel avec différentes feuilles. Puis "filtrer" le bruit des données et trouver la moyenne de tous les échantillons. Ensuite, tracez un graphique et enregistrez le graphique.Python: df.mean semble donner la mauvaise sortie, pourquoi?
PROGRÈS & PROBLÈME: Je suis capable de faire toutes les étapes mentionnées ci-dessus, cependant, le dernier graphique avec les différents échantillons vs la moyenne de celle-ci semble mal pour moi. Je ne suis pas sûr que le "df.mean" est la bonne méthode pour trouver la moyenne. J'ai joint le graphique que je reçois, d'une manière ou d'une autre je ne peux pas convenir que la moyenne peut être si basse? It can be seen that the saved image from my code cuts off the legend, how can I change this?
AMÉLIORATION Nécessaires: Ceci est ma première question sur stackoverflow et je suis encore nouveau pour Python. Le code semble très "moelleux" et j'apprécierais toutes les suggestions sur la réduction du code.
MON CODE:
#IMPORT LIBRARIES
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#IMPORT DATA
excel_df= pd.ExcelFile('data.xlsx',delimiter = ';') #import entire excel file
sheet1=pd.read_excel('data.xlsx',sheetname=0,names=['time','void1','pressure1'])
sheet2=pd.read_excel('data.xlsx',sheetname=1,names=['time','void2','pressure2'])
sheet3=pd.read_excel('data.xlsx',sheetname=2,names=['time','void3','pressure3'])
sheet4=pd.read_excel('data.xlsx',sheetname=3,names=['time','void4','pressure4'])
sheet5=pd.read_excel('data.xlsx',sheetname=4,names=['time','void5','pressure5'])
sheet6=pd.read_excel('data.xlsx',sheetname=5,names=['time','void6','pressure6'])
sheet7=pd.read_excel('data.xlsx',sheetname=6,names=['time','void7','pressure7'])
sheet8=pd.read_excel('data.xlsx',sheetname=7,names=['time','void8','pressure8'])
sheet10=pd.read_excel('data.xlsx',sheetname=9,names=['time','void10','pressure10'])
#SORT VALUES TO FIND THE UNWANTED DATA
sheet1.sort_values('pressure1',ascending=False).head() #the pressure has noise so sort accordingly
#GET ONLY WANTED DATA WITHOUT NOISE
sheet1_new = sheet1[sheet1.pressure1 <=8] #exclude the noise above 8 bar
sheet2_new = sheet2[sheet2.pressure2 <=8] #exclude the noise above 8 bar
sheet3_new= sheet3[sheet3.pressure3 <=8] #exclude the noise above 8 bar
sheet4_new = sheet4[sheet4.pressure4 <=8] #exclude the noise above 8 bar
sheet5_new = sheet5[sheet5.pressure5 <=8] #exclude the noise above 8 bar
sheet6_new = sheet6[sheet6.pressure6 <=8] #exclude the noise above 8 bar
sheet7_new = sheet7[sheet7.pressure7 <=8] #exclude the noise above 8 bar
sheet8_new = sheet8[sheet8.pressure8 <=8] #exclude the noise above 8 bar
sheet10_new = sheet10[sheet10.pressure10 <=8] #exclude the noise above 8 bar
#MERGE THE DATASETS TO FIND AVERAGE OF ALL SAMPLES
#'MERGE' ONLY MERGES 2 DATAFRAMES AT A TIME
merge12_df = pd.merge(sheet1_new,sheet2_new, on='time')
merge34_df = pd.merge(sheet3_new,sheet4_new, on='time')
merge56_df = pd.merge(sheet5_new,sheet6_new, on='time')
merge78_df = pd.merge(sheet7_new,sheet8_new, on='time')
#MERGE ON FIRST OUTPUT
all_merged = merge12_df.merge(merge34_df, on='time').merge(merge56_df, on = 'time').merge(merge78_df, on = 'time').merge(sheet10_new, on = 'time')
#print(all_merged.head()) #check that all data is merged into one dataframe
#AVERAGE ALL PRESSURES
mean_all_pressures = all_merged[["pressure1", "pressure2","pressure3", "pressure4","pressure5", "pressure6","pressure7", "pressure8", "pressure10"]].mean(axis=1)
#PRINT AVERAGE VS ALL THE SAMPLES GRAPH
plt.figure(1)
plt.plot(all_merged.time,mean_all_pressures,'r.') #plot the average of all samples.
plt.plot(sheet1_new.time,sheet1_new.pressure1)
plt.plot(sheet2_new.time,sheet2_new.pressure2)
plt.plot(sheet3_new.time,sheet3_new.pressure3)
plt.plot(sheet4_new.time,sheet4_new.pressure4)
plt.plot(sheet5_new.time,sheet5_new.pressure5)
plt.plot(sheet6_new.time,sheet6_new.pressure6)
plt.plot(sheet7_new.time,sheet7_new.pressure7)
plt.plot(sheet8_new.time,sheet8_new.pressure8)
plt.plot(sheet10_new.time,sheet10_new.pressure10)
plt.legend(['Average','Sample 1','Sample 2','Sample 3','Sample 4','Sample 5','Sample 6','Sample 7','Sample 8','Sample 10'],bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)
plt.xlabel('Time (s)'),plt.ylabel('Pressure (bar)') #Specify the plot details
plt.savefig('AllPressures_vs_Average.png') #Save the plot for later use
plt.show() #Display the plot
'pour num dans la plage (1,11):' pourrait sauver beaucoup de code ici ... –
La moyenne est les points rouges sur le graphique. Ma première image n'a pas été téléchargée correctement. –
sanity vérifier la valeur moyenne en faisant explicitement le calcul vous-même, c'est-à-dire en additionnant les valeurs de pression filtrées et en divisant le nombre d'échantillons. – DrBwts