Skip to content

Commit

Permalink
Merge pull request #27 from denBruneBarone/heatmap
Browse files Browse the repository at this point in the history
Heatmap
  • Loading branch information
casparemiljensen authored Mar 26, 2024
2 parents 67ed59f + 80f3c72 commit ed8ab2b
Show file tree
Hide file tree
Showing 4 changed files with 75 additions and 38 deletions.
34 changes: 12 additions & 22 deletions data_processing/energy_consumption/datapoints_summation.py
Original file line number Diff line number Diff line change
@@ -1,22 +1,12 @@
def calculate_energy_by_summing(data):

# Calculate power consumption for each row
data['power'] = data['battery_voltage'] * data['battery_current']

# Group data by flight and sum power consumption for each flight
flight_groups = data.groupby('flight')
flight_energy = {}
for flight, flight_data in flight_groups:
total_energy = 0
total_energy_wh = 0
prev_time = flight_data['time'].iloc[0]
for index, row in flight_data.iterrows():
time_interval = row['time'] - prev_time
total_energy += row['power'] * time_interval
prev_time = row['time']
total_energy_wh = total_energy / 3600
flight_energy[flight] = total_energy_wh
return flight_energy



import numpy as np


def add_power_to_df(df):
df['time_interval'] = df['time'].diff().fillna(0)
# Unit of power
df['power_w'] = df['battery_voltage'] * df['battery_current']
# Unit of energy
df['energy_j'] = df['battery_voltage'] * df['battery_current'] * df['time_interval']
df['cumulative_power'] = np.cumsum(df['energy_j'])
df.drop(columns=['time_interval'], inplace=True)
return df
9 changes: 0 additions & 9 deletions data_processing/energy_consumption/trapeziod_integration.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,6 @@ def integrate_flight_data(df):
return flight_energy


def add_power_to_df(df):
df['power_consumption'] = df['battery_voltage'] * df['battery_current']
df = df.sort_values(by='time')
df['time_difference'] = df['time'].diff().fillna(0)
df['power_in_row'] = df['power_consumption'] * df['time_difference']
df['cumulative_power'] = np.cumsum(df['power_in_row'])
return df


def integrate_specific_flight_data(data):
"""Integrate power consumption for flight 1 and convert to watt-hours."""
flight_energy = {}
Expand Down
46 changes: 46 additions & 0 deletions data_processing/heatmap.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import os
from machine_learning.prepare_for_training import format_data
from machine_learning.pre_processing import *

PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "../"))
file_path = os.path.join(PROJECT_ROOT, "data/datasets/rodrigues/flights_processed.csv")

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import os
from machine_learning.prepare_for_training import format_data
from machine_learning.pre_processing import *


def generate_correlation_heatmaps(file_path, cutoff=0.09):
# Extract csv data
df = load_data(file_path)

# Remove unwanted columns
list_df = format_data(df)

# Compute the correlation matrix
corr_matrix = list_df.corr()

# Generate the full heatmap
plt.figure(figsize=(20, 16))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', fmt=".2f")
plt.title('Full Correlation Heatmap')
plt.show()

# Generate the heatmap for strong relationships
plt.figure(figsize=(20, 16))
strong_corr_matrix = corr_matrix.copy()
strong_corr_matrix[abs(corr_matrix) <= cutoff] = None
sns.heatmap(strong_corr_matrix, annot=True, cmap='coolwarm', fmt=".2f")
plt.title('Correlation Heatmap for Strong Relationships (cutoff={})'.format(cutoff))
plt.show()


generate_correlation_heatmaps(file_path)


24 changes: 17 additions & 7 deletions machine_learning/prepare_for_training.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from data_processing.energy_consumption.trapeziod_integration import add_power_to_df
from data_processing.energy_consumption.datapoints_summation import add_power_to_df
from sklearn.preprocessing import StandardScaler
import pandas as pd

Expand All @@ -7,7 +7,7 @@ class TrainingDataset:
def __init__(self, data):
self.data = data
self.scaler = StandardScaler()
self.fit_scaler() # Laver og fitter en scaler ved initialisation.
self.fit_scaler() # Laver og fitter en scaler ved initialisation.

# Kigger på alt given data, ikke bare en enkelt dataframe. Konstruerer en passende scaler.
def fit_scaler(self):
Expand Down Expand Up @@ -54,14 +54,24 @@ def __getitem__(self, index):
return normalized_input, target_array


def format_data(array_of_df):
formatted_array = []
for df in array_of_df:
def format_data(input_data):
if isinstance(input_data, list):
formatted_array = []
for df in input:
df['position_x'] = df['position_x'] - df['position_x'].iloc[0]
df['position_y'] = df['position_y'] - df['position_y'].iloc[0]
df['position_z'] = df['position_z'] - df['position_z'].iloc[0]

df = df.drop(columns=['flight', 'speed', 'altitude', 'date', 'time_day', 'route'])
df = add_power_to_df(df)
formatted_array.append(df)
return formatted_array
elif isinstance(input_data, pd.DataFrame):
df = input_data
df['position_x'] = df['position_x'] - df['position_x'].iloc[0]
df['position_y'] = df['position_y'] - df['position_y'].iloc[0]
df['position_z'] = df['position_z'] - df['position_z'].iloc[0]

df = df.drop(columns=['flight', 'speed', 'altitude', 'date', 'time_day', 'route'])
df = add_power_to_df(df)
formatted_array.append(df)
return formatted_array
return df

0 comments on commit ed8ab2b

Please sign in to comment.