0

Good day, I am currently working with a set of data imported from a csv file. I have y values and x values (See image attached) that I am trying to extrapolate (to Age 100) and plot on a plane. My problem however, is that each polynomial fit function causes the curve to shoot negative or positive when it should be just a decay function, thus I have resorted to a decay function. I need to determine the best polyfit function. How would I go about dealing with these extremely negative values gained by the fit function? Thanks for the help in advance!

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import curve_fit

# Read the CSV file into a Pandas DataFrame
V_Class_EC = pd.read_csv('C:\\Users\leone\OneDrive\Desktop\Year_4\Sem2\REII425\Data\V_Class_EC.csv')
V_Class_FS = pd.read_csv('C:\\Users\leone\OneDrive\Desktop\Year_4\Sem2\REII425\Data\V_Class_FS.csv')
V_Class_GP = pd.read_csv('C:\\Users\leone\OneDrive\Desktop\Year_4\Sem2\REII425\Data\V_Class_GP.csv')
V_Class_L = pd.read_csv('C:\\Users\leone\OneDrive\Desktop\Year_4\Sem2\REII425\Data\V_Class_L.csv')
V_Class_MP = pd.read_csv('C:\\Users\leone\OneDrive\Desktop\Year_4\Sem2\REII425\Data\V_Class_MP.csv')
V_Class_NC = pd.read_csv('C:\\Users\leone\OneDrive\Desktop\Year_4\Sem2\REII425\Data\V_Class_NC.csv')
V_Class_NW = pd.read_csv('C:\\Users\leone\OneDrive\Desktop\Year_4\Sem2\REII425\Data\V_Class_NW.csv')
V_Class_WP = pd.read_csv('C:\\Users\leone\OneDrive\Desktop\Year_4\Sem2\REII425\Data\V_Class_WP.csv')
V_Class_ZN = pd.read_csv('C:\\Users\leone\OneDrive\Desktop\Year_4\Sem2\REII425\Data\V_Class_ZN.csv')
VKT_BY_AGE = pd.read_csv('C:\\Users\leone\OneDrive\Desktop\Year_4\Sem2\REII425\Data\VKT_BY_AGE.csv')
EMISSIONS_BY_VEHICLE_TYPE = pd.read_csv('C:\\Users\leone\OneDrive\Desktop\Year_4\Sem2\REII425\Data\EMMISIONS_BY_VEHICLE_TYPE.csv')
EMISSION_FACTOR_OVER_AGE = pd.read_csv('C:\\Users\leone\OneDrive\Desktop\Year_4\Sem2\REII425\Data\EMMISION_FACTOR_OVER_AGE.csv')
EMISSION_VEHICLE_SPEED_CO = pd.read_csv('C:\\Users\leone\OneDrive\Desktop\Year_4\Sem2\REII425\Data\EMMISION+VEHICLE_SPEED_CO.csv')
EMISION_VEHICLE_SPEED_NOx = pd.read_csv('C:\\Users\leone\OneDrive\Desktop\Year_4\Sem2\REII425\Data\EMMISION+VEHICLE_SPEED_NOx.csv')


# Replace NaN values with 0
V_Class_EC.fillna(0, inplace=True)
V_Class_FS.fillna(0, inplace=True)
V_Class_GP.fillna(0, inplace=True)
V_Class_L.fillna(0, inplace=True)
V_Class_MP.fillna(0, inplace=True)
V_Class_NC.fillna(0, inplace=True)
V_Class_NW.fillna(0, inplace=True)
V_Class_WP.fillna(0, inplace=True)
V_Class_ZN.fillna(0, inplace=True)
VKT_BY_AGE.fillna(0, inplace=True)
EMISSIONS_BY_VEHICLE_TYPE.fillna(0, inplace=True)
EMISSION_FACTOR_OVER_AGE.fillna(0, inplace=True)
EMISSION_VEHICLE_SPEED_CO.fillna(0, inplace=True)
EMISION_VEHICLE_SPEED_NOx.fillna(0, inplace=True)

V_Class_EC = pd.DataFrame(V_Class_EC)
V_Class_FS = pd.DataFrame(V_Class_FS)
V_Class_GP = pd.DataFrame(V_Class_GP)
V_Class_L = pd.DataFrame(V_Class_L)
V_Class_MP = pd.DataFrame(V_Class_MP)
V_Class_NC = pd.DataFrame(V_Class_NC)
V_Class_NW = pd.DataFrame(V_Class_NW)
V_Class_WP = pd.DataFrame(V_Class_WP)
V_Class_ZN = pd.DataFrame(V_Class_ZN)
VKT_BY_AGE = pd.DataFrame(VKT_BY_AGE)
EMISSIONS_BY_VEHICLE_TYPE = pd.DataFrame(EMISSIONS_BY_VEHICLE_TYPE)
EMISSION_FACTOR_OVER_AGE = pd.DataFrame(EMISSION_FACTOR_OVER_AGE)
EMISSION_VEHICLE_SPEED_CO = pd.DataFrame(EMISSION_VEHICLE_SPEED_CO)
EMISION_VEHICLE_SPEED_NOx = pd.DataFrame(EMISION_VEHICLE_SPEED_NOx)

Age_range = np.arange(1,101)


def decay_curve(x, a, b, c, d):
    return a * np.exp(-b * x) + c * np.exp(-d * x)

Age = VKT_BY_AGE['Age']
LDPV_private = VKT_BY_AGE['LDPV (private car)']
LDPV_taxi = VKT_BY_AGE['LDPV (taxi)']
LDPV_non_commercial = VKT_BY_AGE['HDPV (non-commercial)']
HDPV_bus = VKT_BY_AGE['HDPV (bus)']
LDT = VKT_BY_AGE['LDT']
HDT = VKT_BY_AGE['HDT']

coefficients, _ = curve_fit(decay_curve, Age, LDPV_private)
#fitted_curve = np.poly1d(coefficients)

LDPV_private_extended = decay_curve(Age_range, *coefficients)
plt.plot(Age, LDPV_private, 'o')
plt.plot(Age_range, LDPV_private_extended, '-', label='LDPV_private Data')
plt.show()
plt.legend()
plt.xlabel('Age')
plt.ylabel('LDPV_private')
plt.title('LDPV_private Data Plot')



#print(VKT_BY_AGE)

enter image description here

shaik moeed
  • 5,300
  • 1
  • 18
  • 54
Bottle
  • 23
  • 4

0 Answers0