coniston/q_calculation.py
2024-07-07 18:53:08 -04:00

67 lines
2.3 KiB
Python

import pandas as pd
import plotly.graph_objects as go
# Load the data (assuming you've already loaded and processed it as shown)
data = pd.read_csv('06-25_07-07.csv')
# Calculation of Q (BTU / lb)
t_sewer_in = data['Sewer Water In'].to_list()
t_sewer_out = data['Sewer Water Out'].to_list() # corrected column name
q = [t_sewer_out[i] - t_sewer_in[i] for i in range(len(t_sewer_out))]
data['Q (BTU/lb)'] = q
# Convert 'Date/Time (--4:0:0)' column to datetime
data['Date/Time (--4:0:0)'] = pd.to_datetime(data['Date/Time (--4:0:0)'])
# Set the datetime column as the index
data.set_index('Date/Time (--4:0:0)', inplace=True)
# Apply a smoothing function (moving average)
window_size = 10
data['Q Smooth'] = data['Q (BTU/lb)'].rolling(window=window_size, center=True).mean()
# Ensure index is a datetime index for ease of filtering
data.index = pd.to_datetime(data.index)
# Create the plot
fig = go.Figure()
# Add traces for each line with spline smoothing and increased visibility
fig.add_trace(go.Scatter(x=data.index, y=data['Q Smooth'], mode='lines', name='Transferred Heat (BTU/lb)',
line=dict(shape='spline', color='blue', width=4, dash='solid')))
# Add shading to separate days
for i in range((data.index[-1] - data.index[0]).days + 1):
start = data.index[0] + pd.Timedelta(days=i)
end = start + pd.Timedelta(days=1)
fig.add_vrect(
x0=start, x1=end,
fillcolor='grey' if i % 2 == 0 else 'white',
opacity=0.1,
line_width=0
)
# Update layout for better styling and to set figure size
fig.update_layout(
title=dict(
text='Transferred Heat',
font=dict(size=20, family='Arial', color='black', weight='bold')
),
xaxis_title=dict(
text='Date/Time',
font=dict(size=18, family='Arial', color='black', weight='bold')
),
yaxis_title=dict(
text='Energy (BTU/lb)',
font=dict(size=18, family='Arial', color='black', weight='bold')
),
legend=dict(
title=dict(font=dict(size=15, family='Arial', color='black', weight='bold')),
font=dict(size=14, family='Arial', color='black', weight='bold')
),
font=dict(size=14),
width=1400, # Set the width of the figure
height=800 # Set the height of the figure
)
# Save the plot (requires kaleido package)
fig.write_image('heat.png')
# Display the plot
fig.show()