Instructions
Requirements and Specifications
Source Code
# -*- coding: utf-8 -*-
"""AliAssignment.ipynb
Automatically generated by Colaboratory.
Original file is located at
https://colab.research.google.com/drive/1yjeu4fehoNOo9yxnmp5S0CQ31ScBoRlG
"""
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from datetime import datetime
"""## Read files"""
# Store data in dictionaries
battery = dict()
for i in range(1, 6):
if not i in battery:
battery[i] = {
'PW_EnergyRemaining': {'timestamps': [], 'values': []},
'PW_FullPackEnergyAvailable': {'timestamps': [], 'values': []},
'PW_AvailableChargePower': {'timestamps': [], 'values': []},
'SOE': {'timestamps': [], 'values': []}
}
ile_name = '00' + str(i) + '.csv'
df = pd.read_csv(file_name)
# Drop NaN rows
df = df.dropna()
# Iterate through rows
for index, row in df.iterrows():
timestamp = row['timestamp']
signal_name = row['signal_name']
value = row['signal_value']
battery[i][signal_name]['timestamps'].append(datetime.fromtimestamp(timestamp/1000))
battery[i][signal_name]['values'].append(value)
# Calculate SOE
for j in range(min(len(battery[i]['PW_EnergyRemaining']['values']), len(battery[i]['PW_FullPackEnergyAvailable']['values']))):
x = battery[i]['PW_EnergyRemaining']['values'][j]
y = battery[i]['PW_FullPackEnergyAvailable']['values'][j]
battery[i]['SOE']['timestamps'].append(battery[i]['PW_EnergyRemaining']['timestamps'][j])
battery[i]['SOE']['values'].append(x/y)
"""
print(f"Battery {i}")
for signal_name in battery[i]:
print(f"There are {len(battery[i][signal_name]['values'])} values for {signal_name}")
print("\n")
"""
"""## Task 1
For battery 1, compute Monthly Average of percentage time for which Battery 001 has its PW_AvailableChargePower greater than or equal to its rate capacity
"""
print("\n*** TASK 1 ***")
months = {}
month_counter = {}
for i in range(len(battery[1]['PW_AvailableChargePower']['values'])):
val = battery[1]['PW_AvailableChargePower']['values'][i]
month = battery[1]['PW_AvailableChargePower']['timestamps'][i].month
if val >= 3300:
months[month] = months.get(month, 0) + 1
month_counter[month] = month_counter.get(month, 0) + 1
# Now, calculate average
for month in months:
months[month] = months[month] / month_counter[month]
# Print
print("For month {} the average percent of time for which PW_AvailableChargePower >= Rate Capacity is {:.2f}%".format(month, months[month]*100.0))
x = list(months.keys())
y = list(months.values())
y = [i*100.0 for i in y]
plt.figure(1)
plt.bar(x, y)
plt.xlabel('Month')
plt.ylabel('Percentage of time (%)')
plt.title('Monthly Average of Percentage Time of availability for Battery 1')
plt.show()
"""## Task 2
Calculate monthly charge power availability
"""
print("\n*** TASK 2 ***")
months = {}
month_counter = {}
for i in range(len(battery[1]['PW_AvailableChargePower']['values'])):
val = battery[1]['PW_AvailableChargePower']['values'][i]
month = battery[1]['PW_AvailableChargePower']['timestamps'][i].month
SOE = battery[1]['SOE']['values'][i]
if SOE < 0.9:
months[month] = months.get(month, 0) + val
month_counter[month] = month_counter.get(month, 0) + 1
# Now, calculate average
for month in months:
months[month] = months[month] / month_counter[month]
# Print
print("The monthly charge power availability for month {} is {:.2f} W".format(month, months[month]))
# Show bar plot
x = list(months.keys())
y = list(months.values())
plt.figure(1)
plt.bar(x, y)
plt.xlabel('Month')
plt.ylabel('Power (W)')
plt.title('Average Charge Power Availability')
plt.show()
"""## Task 3"""
print("\n*** TASK 3 ***")
n = 3
months = {}
months_counter = {}
for i in range(1, 6):
print(f"Battery {i}")
for j in range(len(battery[i]['SOE']['values'])):
val = battery[i]['PW_AvailableChargePower']['values'][j]
month = battery[i]['PW_AvailableChargePower']['timestamps'][j].month
SOE = battery[i]['SOE']['values'][j]
if SOE < 0.9:
months[month] = months.get(month, 0) + val
month_counter[month] = month_counter.get(month, 0) + 1
# Now, calculate average
for month in months:
months[month] = months[month] / month_counter[month]
# Print
print("The monthly charge power availability for month {} is {:.2f} W".format(month, months[month]))
# Show bar plot
x = list(months.keys())
y = list(months.values())
plt.figure(n)
plt.bar(x, y)
plt.xlabel('Month')
plt.ylabel('Power (W)')
plt.title(f'Average Charge Power Availability between all batteries')
plt.show()
print("\n")
n = n + 1