Skip to content
Snippets Groups Projects
Commit 4c93419e authored by Steinmann Victor's avatar Steinmann Victor
Browse files

added continuous plotting of condensed fit

parent 547d8ddf
Branches
No related tags found
No related merge requests found
%% Cell type:markdown id: tags:
Pumpenkennlinien importieren und auf Pumpengleichung Fitten
aus Webplotdigitizer .csv datei eines Plots extrahieren
mit pandas read_csv importieren
-> rechenspaß
->Profit!!!
Q^2 -> Q_sq quit
Multiple Linear Regression with Intercept
Q^3, Q^2
pandas -> read_csv
%% Cell type:code id: tags:
``` python
%pip install pandas
%pip install numpy
%pip install matplotlib
%pip install scikit-learn
```
%% Cell type:markdown id: tags:
Zusammenhänge der Pumpe:
$\Delta p=\alpha_1\cdot Q^2+\alpha_2\cdot Q\cdot n_{est}+\alpha_3\cdot n_{est}^2$
$l_{est}=\frac{\Delta p}{Q^2}$
Leistungsgleichung:
$P_{est}=\beta_1\cdot Q^3+\beta_2 Q^2\cdot n_{est}+\beta_3\cdot Qn_{est}^2+\beta_4n^3+\beta_5$
%% Cell type:code id: tags:
``` python
#Implementierung des .csv zu DataFrame converters
import pandas as pd
def csv_einlesen(y_Achse,drehzahl):
with open('{0}-Q_kennlinie_n_{1}.csv'.format(y_Achse,drehzahl)) as kennlinie:
dataframe = pd.read_csv(kennlinie, delimiter=';')
dataframe.loc[-1] = dataframe.columns
dataframe.index = dataframe.index +1
dataframe= dataframe.sort_index()
if y_Achse=='h':
sorted_set = dataframe.set_axis(['Q','H'],axis='columns')
elif y_Achse=='P':
sorted_set =dataframe.set_axis(['Q','P'],axis='columns')
#im Datensatz alle ',' durch '.' ersetzen und die String werte als Float Werte casten
for x in sorted_set.index:
for y in sorted_set.columns:
sorted_set.loc[x,[y]] = sorted_set.loc[x,[y]].str.replace(',','.')
sorted_set.loc[x,[y]] = sorted_set.loc[x,[y]].astype(float)
#berechnen der Spalte Q^2, Q^3 n_relativ, n^2, n^3, Q*n, Q^2*n,Q*n^2
sorted_set['Q^2'] = sorted_set['Q'] **2
sorted_set['Q^3'] = sorted_set['Q'] **3
sorted_set['n_rel'] = drehzahl/3600
sorted_set['n^2'] = sorted_set['n_rel']**2
sorted_set['n^3'] = sorted_set['n_rel']**3
sorted_set['Qn'] = sorted_set['n_rel']*sorted_set['Q']
sorted_set['Q^2n'] = sorted_set['Q^2']*sorted_set['n_rel']
sorted_set['Qn^2'] = sorted_set['Q']*sorted_set['n^2']
return sorted_set
```
%% Cell type:code id: tags:
``` python
#def combine_csvs():
#with open ('learning-python'):
#for i in os.listdir(.csv):
#pd.read_csv(i)
```
%% Cell type:code id: tags:
``` python
def combine_csvs():
import numpy as np
dz= [750,1150,1500,1850,2200,2550,2900,3250,3600]
array = np.array(float)
for z in dz:
df =csv_einlesen('h',z)
df_P=csv_einlesen('P',z)
if dz.index(z)==0:
array = df.loc[:,['Q','n_rel','H']].to_numpy(float)
array = np.append(array,df_P.loc[:,['P']].to_numpy(float),axis=1)
continue
#abschneiden der datanpaare, die keine korrespondierenden werte für H oder P haben
#vielleicht dumm
if len(df.index)<len(df_P.index):
for i in range(len(df_P.index)-len(df.index)):
df_P.drop(len(df.index)+i,inplace=True)
elif len(df.index)>len(df_P.index):
for i in range(len(df.index)-len(df_P.index)):
df.drop(len(df_P.index)+i,inplace=True)
array = np.append(array, np.append(df.loc[:,['Q','n_rel','H']].to_numpy(),df_P.loc[:,['P']].to_numpy(),axis=1), axis=0)
return array
```
%% Cell type:markdown id: tags:
Fitting aus den Kurven mit sklearn
%% Cell type:code id: tags:
``` python
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
from sklearn.linear_model import LinearRegression
results = pd.DataFrame()
results['n'] = [750,1150,1500,1850,2200,2550,2900,3250,3600]
fig, (ax1,ax2) = plt.subplots(2,1,sharex=True,gridspec_kw={'hspace':0})
ax1.set_xticks(np.linspace(0,10,11))
ax1.set_xticks(np.linspace(0,10,21),minor=True)
for x,x2 in zip(ax1.get_xgridlines() , ax2.get_xgridlines()):
x.set_visible(True)
x2.set_visible(True)
for y,y2 in zip(ax1.get_ygridlines(),ax2.get_ygridlines()):
y.set_visible(True)
y2.set_visible(True)
ax1.set_title('Förderhöhe Kennlinie',loc='center')
ax1.set_ylabel('$H$ in m')
ax2.set_title('Leistungskennlinien',loc='center',y=-0.25)
ax2.set_ylabel('$P$ in kW')
for n in results.index:
df = csv_einlesen('H',results['n'].get(n))
df = csv_einlesen('h',results['n'].get(n))
X = df.loc[:,['Q^2','Qn','n^2']].to_numpy(float)
y = df['H'].to_numpy(float)
results['Q-h_fit'] = LinearRegression(fit_intercept=False).fit(X,y)
#plotten der Punkte und des Graphen
ax1.plot(df['Q'].to_numpy(),results['Q-h_fit'].get(n).predict(X))
ax1.errorbar(df['Q'].to_numpy(),results['Q-h_fit'].get(n).predict(X),fmt='b+')
#regression aus den Werten für Q und P
df2 = csv_einlesen('P',results['n'].get(n))
X2 = df2.loc[:,['Q^3','Q^2n','Qn^2','n^3']].to_numpy(float)
y2= df2['H'].to_numpy(float)
y2= df2['P'].to_numpy(float)
results['Q-P_fit'] = LinearRegression().fit(X2,y2)
#plotten der Punkte und der gefundnen Funktion mit
ax2.errorbar(df2['Q'].to_numpy(),results['Q-P_fit'].get(n).predict(X2),fmt='b+')
ax2.plot(df2['Q'].to_numpy(),results['Q-P_fit'].get(n).predict(X2))
print(results['Q-h_fit'].get(n).coef_)
print(f'R^2: {results['Q-h_fit'].get(n).score(X,y)}')
#print(results['Q-P_fit'].get(n).coef_)
```
%% Output
[-0.04326332 0.18706448 8.74223069]
R^2: 0.9993376472269206
[-0.04427426 0.22583718 8.47417639]
R^2: 0.9996437866771651
[-0.04551814 0.25487938 8.35225635]
R^2: 0.9996824413373676
[-0.04337133 0.2282963 8.41669451]
R^2: 0.9997607916622331
[-0.04486213 0.24504513 8.38508942]
R^2: 0.9995310406285615
[-0.04560908 0.26110027 8.36778663]
R^2: 0.999203487869221
[-0.05301025 0.30409333 8.32747118]
R^2: 0.989680503933434
[-0.08310832 0.34740007 8.36358287]
R^2: 0.9616275516077178
[0.072644 0.14528799 8.40382273]
R^2: 1.0
%% Cell type:code id: tags:
``` python
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
df = pd.DataFrame(combine_csvs(),columns=['Q','n','H','P'])
#erstellen eines np arrays für die werte von Q^3 Q^2 Q^2n Qn^2 n^3
X = np.empty((0,3),float)
X2 = np.empty((0,4),float)
for i in df.index:
Q_temp=df.loc['Q'].get(i)
n_temp=df.loc['n'].get(i)
X = np.append(X,[[Q_temp**2,Q_temp*n_temp,n_temp**2], df.loc],axis=0)
Q_temp= df['Q'].get(i)
n_temp= df['n'].get(i)
X = np.append(X,[[(Q_temp**2), (Q_temp*n_temp), (n_temp**2)]],axis=0)
X2 = np.append(X2,[[Q_temp**3,(Q_temp**2) *n_temp, Q_temp*(n_temp**2), n_temp**3]],axis=0)
LR_H = LinearRegression(fit_intercept=False).fit(X , df.loc['H'].to_numpy(float))
LR_H = LinearRegression(fit_intercept=False).fit(X , df['H'].to_numpy(float))
LR_P = LinearRegression().fit(X2,df['P'].to_numpy(float))
print(df)
fig1, (ax1,ax2) = plt.subplots(2,1,sharex=True,gridspec_kw={'hspace':0})
ax1.set_xticks(np.linspace(0,10,11))
ax1.set_xticks(np.linspace(0,10,21),minor=True)
ax1.set_title('Förderhöhe Kennlinie',loc='center')
ax1.set_ylabel('$H$ in m')
ax2.set_title('Leistungskennlinien',loc='center',y=-0.25)
ax2.set_ylabel('$P$ in kW')
#muss für jeden bereich fon n einzeln geplottet werden
for i in df.index:
ax1.plot(df['Q'].to_numpy(),LR_H.predict(X))
ax2.plot(df['Q'].to_numpy(),LR_P.predict(X2))
```
%% Output
Q n H P
0 -0.0 0.208333 0.380667 0.003501
1 0.5 0.208333 0.386749 0.004184
2 1.0 0.208333 0.373531 0.004867
3 1.5 0.208333 0.341249 0.005549
4 2.0 0.208333 0.287062 0.006061
.. ... ... ... ...
97 2.5 0.902778 7.107076 0.112583
98 3.0 0.902778 7.034061 0.123044
99 3.5 0.902778 6.906989 0.132358
100 -0.0 1.0 8.403823 0.078036
101 0.5 1.0 8.494628 0.088328
[102 rows x 4 columns]
[<matplotlib.lines.Line2D at 0x2668b9dd8b0>]
%% Cell type:markdown id: tags:
df =
Q | n | P | H
-------- | -------- | -------- | --
0 | 0.35 | 10 | 2
0.5 | 0.35 | 15 | 1.8
1 | 0.35 |20| 1.5
0 | 0.5 | 15 | 2
0.5 | 0.5 | 20 | 1.8
1 | 0.5 | 25 | 1.5
```python
X = numpy.array([df.loc[:,'Q']**3, df.loc[:,'Q']**2 * df.loc[:,'n']...)
```
anmelden Thesis
Ziel einen Fit mit n als zweite Variable
multiple linear REgression
Ziel2 den FST custom stil zum plotten des Kennfelds einbinden
Ziel3 eine Präsi erstellen anhand des Leitfadens im studierende Starterpaket
schritt 4 Profit
%% Cell type:code id: tags:
``` python
results['Q-h_fit']
```
%% Output
0 LinearRegression(fit_intercept=False)
1 LinearRegression(fit_intercept=False)
2 LinearRegression(fit_intercept=False)
3 LinearRegression(fit_intercept=False)
4 LinearRegression(fit_intercept=False)
5 LinearRegression(fit_intercept=False)
6 LinearRegression(fit_intercept=False)
7 LinearRegression(fit_intercept=False)
8 LinearRegression(fit_intercept=False)
Name: Q-h_fit, dtype: object
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment