Challenge

Week 6 - Data analysis

#DATA ANALYSIS OF ENGINE DATA

#Importing the modules
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import simps


filename = input ("Enter the name of CONVERGE output filename with extension (.out):")

#COMPATIBILITY CHECK

#Checking if the file is a valid CONVERGE output file try :
f = open(filename)
f.close()
except FileNotfoundError:
        print('File not recognized. Please provide a valid CONVERGE output file') 
        exit()

#Checking if data is present in the CONVERGE output file
i=0
for line in open(filename):
        if '#' not in line:
             break
        i = i+1

j=0
for line in open(filename):
        j=j+1
        if j>i :
                break

if j==i:
        print('No data present in the CONVERGE output file') 
        exit()
#DATA  EXTRACTIOf

i=0
for line in open(filename):
        if i==2:
                c = line.split()#Storing unit of variables in list c 
                i=0
                break

        if i==1:
                b=line.split() #Storing names of variables in list b
                i = i+1

        if 'column' in line .split():
                a = line .split () #Storing column numbers of variables in list a
                i=1


a.remove("column") #Removing column f rom list a 
a.remove("#")  #Removing # from list a
a = np.array(a,dtype=np.int) #Converting data to integer
b.remove("#")#Removing ii from list b
c.remove("#") #Removing # from list c
num_col = len(a) #Number of columns/ number of variables


#GETTING THE  DATA


data_counter = 0 #Initializing number of data points counter variable
data = np.arange(0,num_col)

for line in open(filename):
        if '#' not in line:
                d = line.split()#Storing current data line as in d
                d = np .array(d,dtype=np.float32)#Converting list data to float array
                data = np.vstack ([data,d])#Stacking the float array d in data matrix
                data_counter = data_counter + 1

data=np.delete( data,0, 0) #Deleting the f irst row used to initialize the array



#DATA  VISUALIZER

print (' Type -' )

for i in a:
        print (' {} for {}' .format ( i,b[i-1]) )


print (' ')
x =  input("Do you want a plot between any two variables ?  ( y/n) : ")


while(x.lower()== ' y ' ):
        cn1 = input ("Enter the clumn number of the variable along X-axis( Refer input map above) :") 
        cn2 = input("Enter the clumn number of the variable along Y-axis (Refer input map  above) :")
        cn1  =  int ( cn1)
        cn2 = int ( cn2)
        plt.figure ()
        plt.plot (data[ :,cnl -1],data[ :,cn2-2] )
        plt.xlabel('{} {}'  .format( b [cn1-1],c[cn1-1]))
        plt.ylabel('{} {}' .format(b[cn2-1],c[cn2- 1]))
        plt.title( ' {} {} vs {} {}'  .format(b[cn2- 1],c[cn2 -1],b [cn1-1],c[cn1-1))
        z = "n"
        z  =  input ( "Do you want  to save the plot?  (y/n) :") 
        if (z.lower()== 'y'):
            plt.savefig("{}-{}.png".format(b [cn2-1],b[ cn1-1]))
            plt.show() 
            print( '  ' )
            x =  input("Do you want plot any  other two variables (y/n) : ")
print(' ')
x =  input ( "Do you want a single variable plot ?  (y/n) :")
while(x.lower()== ' y '):
    cn = input ("Enter the column number of  the variable  ( Refer  input map above) : ") 
    cn  =  int (cn)
    plt .figure()
    plt.plot (np.arange(0,data_counter) ,data[:,cn-1])
    plt.xlabel( 'Data point number')
    plt.ylabel( '{} {} ' .format( b [cn-1],c[cn- 1]))
    plt.show()
    print( '  ' )
    x = input ( "Do you want any othe1·single variable plot?  (y/n) : ") 
print ('   ')
#CALCULATIONS

print ( ' PERFORMANCE OF THE ENGINE ')

#Work done
b1 =  [i.lower()  for  i in b] 
pressure_column = b1.index('pressure ') 
volume_column   = b1 .index( 'volume ')
pressure = data [:,pressure_column ]
volume = data[:,volume_column]
A = 0 #Area under the P-V curve
A = simps(pressure,volume,even= ' first ')*np.power( 10,6) #Work per cycle(J)

#Power  output
rpm =  float(input('Enter the rpm of  the engine at which  data was collected ;  ')) #Rotation  per min
f = float(input ( ' Enter the value of  the fuel consumed per cycle (in micrograms ) : ')) #Fuel consumpt ion per cycle
n  = rpm/ ( 2*60) #Number of cycle per second for 4-stroke engine
P = A*n  #Power output (l) at speed N  (rad/s)

#Specific fuel consumption
f = (f*n*3600) /np .power(10,9) #Fuel consumpt ion ( Kg/hr)
sfc =  ( f *1000)/P #Specif ic fuel consumpt ion (Kg/hr .Kl;)

#Results
print ('Area under  the P-V curve( i.e. the Work done per cycle)={} J ' .format (A)) 
print (' Power output  at  {} rpm  =  {} W' .format(rpm,P))
print ('Specific fuel consumpt ion =  {} Kg/KW .hr ' .format(sfc) )
"""
	Demonstrating file parsing in python
"""
# import modules
import matplotlib.pyplot as plt
# Basic initialization
line_count = 1
crank = []
pressure = []
temperature = []
# file parsing starts here
for line in open('engine_data.out'):
	if "#" not in line:
		crank.append(float(line.split()[0]))
		pressure.append(float(line.split()[1]))
		temperature.append(float(line.split()[4]))

		line_count = line_count +1

#figure
plt.plot(crank, pressure, linewidth=3)
plt.show()

plt.plot(crank, temperature, linewidth=2)
plt.show()
Your portfolio, next

Ship work like this
in your own course.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.