Forum
>>
Programmazione Python
>>
Calcolo scientifico
>>
Analisi dati, Regressione lineare, problema, consigli
Pagina: 1
Esegui il login per scrivere una risposta.
Pagina: 1
Scritto da pull_ over93 |
2018-04-26 14:20:01 - Analisi dati, Regressione lineare, problema, consigli
|
Signori e signore buongiorno!
Sto usando Python 3.6.4 (anaconda3), come IDE jupiter notebook/ spyder3 e il tutto su windows10. Mi sto approcciando alla programmazione (ho fatto qualche codice con matlab e LUA, ma pietosi). Questo è uno dei miei primi codici e lo scopo è quello di : 1 . Velocizzare le mie analisi dati (obiettivo per cui mi sono avvicinato alla programmazione) ; 2. Caricare un foglio di excel, contenente i miei dati e fare calcoli basilari; 3. Fare un po' di statistica base; 3. Plottare qualche grafico. Questo è il mio codice : #importo i pacchetti necessari all'analisi dati. import scipy as sp import numpy as np import pandas as pd import matplotlib.pyplot as plt #carico i dati dati = pd.read_excel('MeltFlowIndex.xlsx') #creo un vettore massa massa = dati['mass'] #creo vettore tempo tempo = dati['time'] #calcolo il Melt Flow Index mfi = (massa*600)/tempo #calcolo le medie avg_11 = np.mean(mfi[0:7],0) avg_12 = np.mean(mfi[7:15],0) avg_13 = np.mean(mfi[15:19],0) avg_21 = np.mean(mfi[19:24],0) avg_22 = np.mean(mfi[24:30],0) avg_23 = np.mean(mfi[30:36],0) avg_31 = np.mean(mfi[36:43],0) avg_32 = np.mean(mfi[43:49],0) avg_33 = np.mean(mfi[49:],0) #calcolo la deviazione standard sd_11 = np.std(mfi[0:7],0) sd_12 = np.std(mfi[7:15],0) sd_13 = np.std(mfi[15:19],0) sd_21 = np.std(mfi[19:24],0) sd_22 = np.std(mfi[24:30],0) sd_23 = np.std(mfi[30:36],0) sd_31 = np.std(mfi[36:43],0) sd_32 = np.std(mfi[43:49],0) sd_33 = np.std(mfi[49:],0) #esporto i miei dati in una nuova tabella MFI Prova = pd.DataFrame({ "Load" : ["2.16","5.00","7.06"], "190 °C" : [avg_11, avg_12, avg_13], "190_std" : [sd_11,sd_12,sd_13], "210 °C" : [avg_21,avg_22,avg_23], "210_std" : [sd_21,sd_22,sd_23], "230 °C" : [avg_31,avg_32,avg_33], "230_std" : [sd_31,sd_32,sd_33] }) with pd.ExcelWriter('MFI Prova.xlsx') as writer: MFI Prova.to_excel(writer, sheet_name="MFI_results") # T in K, creazione di un vettore ra=1/RT, log(MFI) e log(1/RT) T1 = 190+273.15 T2 = 210+273.15 T3 = 230+273.15 x = [1/(8.314*T1),1/(8.314*T2),1/(8.314*T3)] log_x = np.log(x) just_MFI = np.array([ [avg_11, avg_12, avg_13], [avg_21,avg_22,avg_23], [avg_31,avg_32,avg_33] ] ) Activation_energy = np.log(just_MFI) y_1 = Activation_energy[:,0] y = y_1[::-1] #Fitting dati p1 = sp.polyfit(x,y,1) slope,intercept,r_value,p_value,std_err = stats.linregress(x,y) print(pow(r_value,2)) print(p_value) #grafico 1 prova plt.figure(1) plt.plot(x,y,'r.') plt.plot(x,sp.polyval(p1,x),'b--') plt.show() Problemi Quando voglio calcolarmi l'R^2 del fitting, ovvero la sezione di codice: slope,intercept,r_value,p_value,std_err = stats.linregress(x,y) print(pow(r_value,2)) print(p_value) L'IConsole mi da il seguente errore: ValueError: all the input array dimensions except for the concatenation axis must match exactly il problema è che : 1. Sto eseguendo,a mio parere, tutte le istruzioni/comandi riportati in questo esempio: http://apmonitor.com/che263/index.php/Main/PythonDataRegression 2. Le array che sto utilizzando hanno effettivamente la stessa dimensione. Cosa sbaglio? come posso risolvere? Risolto questo problema, vorrei capire come migliorare il mio codice e sopratutto rendere più veloce ed efficiente la mia scrittura: è possibile che per un analisi così banale venga fuori una pagina di codice? mi sembra di sparare ad una zanzara con un bazooka. C'è, quindi, un modo per scrivere meno e fare le stesse cose? --- Ultima modifica di pull_over93 in data 2018-04-26 14:29:31 --- |
|
Scritto da pull_ over93 |
2018-04-27 11:02:20 - Re: Analisi dati, Regressione lineare, problema, consigli
|
risolto
|
|
Scritto da Daniele aka Palmux |
2018-04-27 15:10:35 - Re: Analisi dati, Regressione lineare, problema, consigli
|
Benissimo, se vuoi condividerlo con gli altri del forum magari potresti aiutare utenti nella tua stessa situazione.
Usa sempre il tasto apposito per la formattazione del codice, mi raccomando, lo trovi subito prima della tavolozza dei colori in fase di scrittura del messaggio. Cya |
|
Scritto da pull_ over93 |
2018-04-28 15:53:40 - Re: Analisi dati, Regressione lineare, problema, consigli
|
Mi pareva di aver utilizzato l'icona code, boh! Ad ogni modo ho riorganizzato meglio il codice, forse è bastato quello:
#importo pacchetti import numpy as np import pandas as pd import matplotlib.pyplot as plt import scipy as sp #carico i dati df = pd.read_excel('MeltFlowIndex 1.xlsx') # massa m = np.array(df.mass) # tempo t = np.array(df.time) # mfi mfi = (m*600)/t #calcolo le medie avg_11 = np.mean(mfi[0:7],0) avg_12 = np.mean(mfi[7:15],0) avg_13 = np.mean(mfi[15:19],0) avg_21 = np.mean(mfi[19:24],0) avg_22 = np.mean(mfi[24:30],0) avg_23 = np.mean(mfi[30:36],0) avg_31 = np.mean(mfi[36:43],0) avg_32 = np.mean(mfi[43:49],0) avg_33 = np.mean(mfi[49:53],0) avg_PP Profax STG12 = np.mean(mfi[53:58],0) avg_PP_HPS61R = np.mean(mfi[58:],0) #calcolo la deviazione standard sd_11 = np.std(mfi[0:7],0) sd_12 = np.std(mfi[7:15],0) sd_13 = np.std(mfi[15:19],0) sd_21 = np.std(mfi[19:24],0) sd_22 = np.std(mfi[24:30],0) sd_23 = np.std(mfi[30:36],0) sd_31 = np.std(mfi[36:43],0) sd_32 = np.std(mfi[43:49],0) sd_33 = np.std(mfi[49:53],0) sd_PP Profax STG12 = np.std(mfi[53:58],0) sd_PP_HPS61R = np.std(mfi[58:],0) #array mfi_ccx mfi_cc1 = np.array([avg_11,avg_21,avg_31]) mfi_cc2 = np.array([avg_12,avg_22,avg_32]) mfi_cc3 = np.array([avg_13,avg_23,avg_33]) #ln(mfi_ccx) y1 = np.log(mfi_cc1) y2 = np.log(mfi_cc2) y3 = np.log(mfi_cc3) # T in K, creazione di un vettore x=1/RT, log(MFI) e log(1/RT) T1 = 190+273.15 T2 = 210+273.15 T3 = 230+273.15 x = np.array([1/(8.314*T1),1/(8.314*T2),1/(8.314*T3)]) #Fitting dati k = 1 #numero di variabili nel modello, dato che è lineare K=1 from scipy import stats p1 = sp.polyfit(x,y1,1) slope,intercept,r_value,p_value,std_err = stats.linregress(x,y1) R2_1 = pow(r_value,2) adj_R2_1 = 1-(1-R2_1)*(len(x)-1)/((len(x)-k-1)) p2 = sp.polyfit(x,y2,1) slope,intercept,r_value,p_value,std_err = stats.linregress(x,y2) R2_2 = pow(r_value,2) adj_R2_2 = 1-(1-R2_2)*(len(x)-1)/((len(x)-k-1)) p3 = sp.polyfit(x,y3,1) slope,intercept,r_value,p_value,std_err = stats.linregress(x,y3) R2_3 = pow(r_value,2) adj_R2_3 = 1-(1-R2_3)*(len(x)-1)/((len(x)-k-1)) results = { 'Load' : [2.16,5.00,7.06], '190 °C' : [avg_11, avg_12, avg_13], '190_std' : [sd_11,sd_12,sd_13], '210 °C' : [avg_21,avg_22,avg_23], '210_std' : [sd_21,sd_22,sd_23], '230 °C' : [avg_31,avg_32,avg_33], '230_std' : [sd_31,sd_32,sd_33] } mfi_results = pd.DataFrame(results) mfi_results.set_index('Load',inplace=True) #esporto i risultati in un altro foglio excel with pd.ExcelWriter('MFI_calculation.xlsx') as writer: mfi_results.to_excel(writer, sheet_name="MFI_results")questo è quanto, se qualcuno può darmi consigli su come scrivere meno righe di codice per ottenere lo stesso risultato, ben venga! |
Pagina: 1
Esegui il login per scrivere una risposta.