# # Copyright (C) 2020 Alessandro Languasco # import pandas as pd import numpy as np #import mpmath as mp #mp.dps = 38 # open output file file= open("../analysis.txt","w") # functions needed to create the normalised values def f(x): #mp.dps = 38 #x1 = mp.mpmathify(x) #y = mp.log(x1) y= np.log(x) return y # input data from csv file data=pd.read_csv(r'ekek+.csv', sep=';',dtype='str') data.head(4) df = pd.DataFrame(data, columns= ['q','EK','EK+','vq']) df = df.astype('float128') # create a new column with normalised EK values df['normEK'] = (df['EK'] / f(df['q']) ) #df['normEK'] = mp.fdiv( df['EK'] , f(df['q']) ) # create a new column with normalised EK+ values df['normEK+'] = (df['EK+'] / f(df['q']) ) #df['normEK+'] = mp.fdiv( df['EK+'] , f(df['q']) ) #print (df) #FINDING MAX AND MIN and where they are attained #M=df['min'].max() #idxM=df['min'].idxmax() #argM=df['q'].iloc[idxM] #m=df['min'].min() #idxm=df['min'].idxmin() #argm=df['q'].iloc[idxm] #print('minimal value on column min =',m,'attained at q =',argm) #print('maximal value on column min =',M,'attained at q =',argM) #FINDING MAX and second MAX; MIN and second MIN; and where they are attained print(' ***** Statistics for EK, EK+ *****') print('name source file = ekek+.csv') file.write(" ***** Statistics for EK, EK+ ***** ") file.write("\n") file.write("name source file = ekek+.csv") file.write("\n") print(' ***** MAX normalised values EK/log(q) *****') maxima =df['normEK'].nlargest(2) M=maxima.iloc[0] idxM=maxima.idxmax() argM=df['q'].iloc[idxM] M1=maxima.iloc[1] idxM1=maxima.idxmin() argM1=df['q'].iloc[idxM1] print('maximal value on column normEK =','{0:.16f}'.format(M),'attained at q =',argM) print('second maximal value on column normEK =','{0:.16f}'.format(M1),'attained at q =',argM1) file.write(" ***** MAX normalised values EK/log(q) *****\n") file.write("maximal value on column normEK = ") file.write(str('{0:.16f}'.format(M))) file.write(" attained at q = ") file.write(str(argM)) file.write("\n") file.write("second maximal value on column normEK = ") file.write(str('{0:.16f}'.format(M1))) file.write(" attained at q = ") file.write(str(argM1)) file.write("\n") print(' ***** MIN normalised values EK/log(q) *****') minima =df['normEK'].nsmallest(2) m=minima.iloc[0] idxm=minima.idxmin() argm=df['q'].iloc[idxm] m1=minima.iloc[1] idxm1=minima.idxmax() argm1=df['q'].iloc[idxm1] print('minimal value on column normEK =','{0:.16f}'.format(m),'attained at q =',argm) print('second minimal value on column normEK =','{0:.16f}'.format(m1),'attained at q =',argm1) file.write(" ***** Min normalised values EK/log(q) *****\n") file.write("minimal value on column normEK = ") file.write(str('{0:.16f}'.format(m))) file.write(" attained at q = ") file.write(str(argm)) file.write("\n") file.write("second minimal value on column normEK = ") file.write(str('{0:.16f}'.format(m1))) file.write(" attained at q = ") file.write(str(argm1)) file.write("\n") print(' ***** MAX normalised values EK+/log(q) *****') maxima =df['normEK+'].nlargest(2) M=maxima.iloc[0] idxM=maxima.idxmax() argM=df['q'].iloc[idxM] M1=maxima.iloc[1] idxM1=maxima.idxmin() argM1=df['q'].iloc[idxM1] print('maximal value on column normEK+ =','{0:.16f}'.format(M),'attained at q =',argM) print('second maximal value on column normEK+ =','{0:.16f}'.format(M1),'attained at q =',argM1) file.write(" ***** MAX normalised values EK+/log(q) *****\n") file.write("maximal value on column normEK+ = ") file.write(str('{0:.16f}'.format(M))) file.write(" attained at q = ") file.write(str(argM)) file.write("\n") file.write("second maximal value on column normEK+ = ") file.write(str('{0:.16f}'.format(M1))) file.write(" attained at q = ") file.write(str(argM1)) file.write("\n") print(' ***** MIN normalised values EK+/log(q) *****') minima =df['normEK+'].nsmallest(2) m=minima.iloc[0] idxm=minima.idxmin() argm=df['q'].iloc[idxm] m1=minima.iloc[1] idxm1=minima.idxmax() argm1=df['q'].iloc[idxm1] print('minimal value on column normEK+ =','{0:.16f}'.format(m),'attained at q =',argm) print('second minimal value on column normEK+ =','{0:.16f}'.format(m1),'attained at q =',argm1) file.write(" ***** Min normalised values EK+/log(q) *****\n") file.write("minimal value on column normEK+ = ") file.write(str('{0:.16f}'.format(m))) file.write(" attained at q = ") file.write(str(argm)) file.write("\n") file.write("second minimal value on column normEK+ = ") file.write(str('{0:.16f}'.format(m1))) file.write(" attained at q = ") file.write(str(argm1)) file.write("\n") print(' ***** STATS for EK, EK+ (colored points) *****') # number of colored points total=float(len(df)) orange = len(df.loc[df.vq <= 0.25]) green = len(df.loc[df.vq <= 0.5]) - orange blue = len(df.loc[df.vq <= 0.75]) - (orange+green) black = len(df.loc[df.vq <= 1]) - (orange+green+blue) red = len(df.loc[df.vq > 1]) percentorange=float(orange)/total percentgreen=float(green)/total percentblue=float(blue)/total percentblack=float(black)/total percentred=float(red)/total print('number of orange points:', orange,'percentage =', percentorange*100) print('number of green points:', green,'percentage =', percentgreen*100) print('number of blue points:', blue,'percentage =', percentblue*100) print('number of black points:', black,'percentage =', percentblack*100) print('number of red points:', red,'percentage =', percentred*100) file.write(" ***** STATS for EK, EK+ (colored points) *****\n") file.write("number of orange points: ") file.write(str(orange)) file.write(" percentage = ") file.write(str(percentorange*100)) file.write("\n") file.write("number of green points: ") file.write(str(green)) file.write(" percentage = ") file.write(str(percentgreen*100)) file.write("\n") file.write("number of blue points: ") file.write(str(blue)) file.write(" percentage = ") file.write(str(percentblue*100)) file.write("\n") file.write("number of black points: ") file.write(str(black)) file.write(" percentage = ") file.write(str(percentblack*100)) file.write("\n") file.write("number of red points: ") file.write(str(red)) file.write(" percentage = ") file.write(str(percentred*100)) file.write("\n") print('total colored numbers =', orange+green+blue+black+red) print('total numbers (number of rows) =', int(total)) file.write("total colored numbers = ") file.write(str(orange+green+blue+black+red)) file.write("\n") file.write("total numbers (number of rows) = ") file.write(str(int(total))) file.write("\n") print(' ***** Exported data frame for gnuplot *****') print(' ***** in file named: dati-totali-per-grafico.txt *****') # remove the normalised columns del df['normEK'] del df['normEK+'] df.to_csv (r'dati-totali-per-grafico.txt', sep='\t', index = False, header=True) print(' ***** End analysis script *****') file.write("***** End analysis script *****") file.close()