In [8]:
Copied!
import pandas as pd
import numpy as np
import pint
ureg = pint.get_application_registry()
import plotly.graph_objects as go
import pandas as pd
import numpy as np
import pint
ureg = pint.get_application_registry()
import plotly.graph_objects as go
In [9]:
Copied!
from aircraftdetective.processing.acftdb import _read_engine_database
from aircraftdetective.processing.literature import (
process_data_weinold_database,
)
from aircraftdetective.calculations.engines import (
determine_takeoff_to_cruise_tsfc_ratio,
scale_engine_data_from_icao_emissions_database
)
from aircraftdetective.utility.tabular import (
left_merge_wildcard,
)
from aircraftdetective.utility.tabular import update_column_data
from aircraftdetective.processing.acftdb import _read_engine_database
from aircraftdetective.processing.literature import (
process_data_weinold_database,
)
from aircraftdetective.calculations.engines import (
determine_takeoff_to_cruise_tsfc_ratio,
scale_engine_data_from_icao_emissions_database
)
from aircraftdetective.utility.tabular import (
left_merge_wildcard,
)
from aircraftdetective.utility.tabular import update_column_data
Data Processing¶
In [10]:
Copied!
df_acft = process_data_weinold_database()
df_engines_acftdb = _read_engine_database()
df_literature = process_data_weinold_database(sheet_name='Literature Data')
df_acft = process_data_weinold_database()
df_engines_acftdb = _read_engine_database()
df_literature = process_data_weinold_database(sheet_name='Literature Data')
In [33]:
Copied!
dict_tsfc_scaling = determine_takeoff_to_cruise_tsfc_ratio(degree=2, plot=True)
df_engines_icao_scaled = scale_engine_data_from_icao_emissions_database(
scaling_polynomial=dict_tsfc_scaling['TSFC (cruise)'],
)
dict_tsfc_scaling = determine_takeoff_to_cruise_tsfc_ratio(degree=2, plot=True)
df_engines_icao_scaled = scale_engine_data_from_icao_emissions_database(
scaling_polynomial=dict_tsfc_scaling['TSFC (cruise)'],
)
In [39]:
Copied!
dict_tsfc_scaling = determine_takeoff_to_cruise_tsfc_ratio(degree=4, plot=True)
df_engines_icao_scaled = scale_engine_data_from_icao_emissions_database(
scaling_polynomial=dict_tsfc_scaling['TSFC (cruise)'],
)
dict_tsfc_scaling = determine_takeoff_to_cruise_tsfc_ratio(degree=4, plot=True)
df_engines_icao_scaled = scale_engine_data_from_icao_emissions_database(
scaling_polynomial=dict_tsfc_scaling['TSFC (cruise)'],
)
In [40]:
Copied!
bpr = df_engines_icao_scaled['B/P Ratio'].astype(float)
colors = np.where(bpr < 2, 'red', np.where(bpr > 8, 'green', 'blue'))
fig = go.Figure()
fig.add_trace(go.Scatter(
x=df_engines_icao_scaled['TSFC (takeoff)'].pint.to('mg/(N*s)').pint.magnitude,
y=df_engines_icao_scaled['TSFC (cruise)'].pint.to('mg/(N*s)').pint.magnitude,
mode='markers',
marker=dict(opacity=0.7, color=colors),
text=df_engines_icao_scaled['Engine Identification'] + '/'+ df_engines_icao_scaled['Final Test Date'].astype(str),
hovertemplate='Engine: %{text}<br>TSFC (takeoff): %{x}<br>TSFC (cruise): %{y:.2f}<br>BPR: %{marker.color}<extra></extra>'
))
fig.update_layout(
xaxis_title="TSFC (takeoff) [g/(kN·s)]",
yaxis_title="TSFC (cruise) [g/(kN·s)]"
)
fig.show(renderer="notebook")
bpr = df_engines_icao_scaled['B/P Ratio'].astype(float)
colors = np.where(bpr < 2, 'red', np.where(bpr > 8, 'green', 'blue'))
fig = go.Figure()
fig.add_trace(go.Scatter(
x=df_engines_icao_scaled['TSFC (takeoff)'].pint.to('mg/(N*s)').pint.magnitude,
y=df_engines_icao_scaled['TSFC (cruise)'].pint.to('mg/(N*s)').pint.magnitude,
mode='markers',
marker=dict(opacity=0.7, color=colors),
text=df_engines_icao_scaled['Engine Identification'] + '/'+ df_engines_icao_scaled['Final Test Date'].astype(str),
hovertemplate='Engine: %{text}<br>TSFC (takeoff): %{x}<br>TSFC (cruise): %{y:.2f}<br>BPR: %{marker.color}<extra></extra>'
))
fig.update_layout(
xaxis_title="TSFC (takeoff) [g/(kN·s)]",
yaxis_title="TSFC (cruise) [g/(kN·s)]"
)
fig.show(renderer="notebook")
In [41]:
Copied!
df_merged = left_merge_wildcard(
df_left=df_acft,
df_right=df_engines_icao_scaled,
left_on='Engine Designation (ICAO)',
right_on='Engine Identification',
)
df_merged = left_merge_wildcard(
df_left=df_merged,
df_right=df_engines_acftdb,
left_on='Engine Designation (aircraft-database.com)',
right_on='Engine Designation',
)
df_merged = update_column_data(
df_main=df_merged,
df_other=df_literature,
merge_column='Aircraft Designation (Literature)',
list_columns=['TSFC (cruise)'],
)
df_merged = left_merge_wildcard(
df_left=df_acft,
df_right=df_engines_icao_scaled,
left_on='Engine Designation (ICAO)',
right_on='Engine Identification',
)
df_merged = left_merge_wildcard(
df_left=df_merged,
df_right=df_engines_acftdb,
left_on='Engine Designation (aircraft-database.com)',
right_on='Engine Designation',
)
df_merged = update_column_data(
df_main=df_merged,
df_other=df_literature,
merge_column='Aircraft Designation (Literature)',
list_columns=['TSFC (cruise)'],
)
Visualization¶
In [42]:
Copied!
bpr = df_merged['B/P Ratio'].astype(float)
colors = np.where(bpr < 2, 'red', np.where(bpr > 8, 'green', 'blue'))
fig = go.Figure()
fig.add_trace(go.Scatter(
x=df_merged['YOI'].astype('int64'),
y=df_merged['TSFC (cruise)'].pint.to('mg/(N*s)').pint.magnitude,
mode='markers',
marker=dict(opacity=0.7, color=colors),
text=df_merged['Aircraft Designation'] + '/'+ df_merged['Engine Designation (ICAO)'],
hovertemplate='Engine: %{text}<br>YOI: %{x}<br>TSFC (cruise): %{y:.2f}<br>BPR: %{marker.color}<extra></extra>'
))
fig.update_layout(
xaxis_title="Year of Introduction (YOI)",
yaxis_title="TSFC (cruise) [g/(kN·s)]"
)
fig.show(renderer="notebook")
bpr = df_merged['B/P Ratio'].astype(float)
colors = np.where(bpr < 2, 'red', np.where(bpr > 8, 'green', 'blue'))
fig = go.Figure()
fig.add_trace(go.Scatter(
x=df_merged['YOI'].astype('int64'),
y=df_merged['TSFC (cruise)'].pint.to('mg/(N*s)').pint.magnitude,
mode='markers',
marker=dict(opacity=0.7, color=colors),
text=df_merged['Aircraft Designation'] + '/'+ df_merged['Engine Designation (ICAO)'],
hovertemplate='Engine: %{text}<br>YOI: %{x}<br>TSFC (cruise): %{y:.2f}<br>BPR: %{marker.color}<extra></extra>'
))
fig.update_layout(
xaxis_title="Year of Introduction (YOI)",
yaxis_title="TSFC (cruise) [g/(kN·s)]"
)
fig.show(renderer="notebook")