## Instructions

**Objective**

## Requirements and Specifications

**Source Code
**

clc, clear all, close all

% Create a matrix that will store the data for each month. The matrix will

% contains 12 rows and n columns where n is the number of samples in each

% dataset

all_load = [];

january_load = [];

january_firstweek_load = [];

january_firstday_load = [];

all_price = [];

january_price = [];

january_firstweek_price = [];

january_firstday_price = [];

all_times = [];

% Create a cell array with all files

files = {"1Jan.csv", "2Feb.csv", "3March.csv", "4April.csv", "5May.csv", "6June.csv", "7July.csv", "8August.csv", "9September.csv", "10October.csv", "11November.csv", "12December.csv"};

%% a) Monthly Profile

monthly_demand = [];

monthly_price = [];

monthly_labels = [];

daily_demand = [];

daily_price = [];

daily_labels = [];

hourly_demand = [];

hourly_price = [];

hourly_labels = [];

for i = 1:length(files)

file = "data\" + files{i};

T = readtable(file);

all_load = [all_load;T.TOTALDEMAND];

all_times = [all_times;T.SETTLEMENTDATE];

price = T.RRP;

% Clean wrong values

% If there are values higher than 2 times the mean, set them to 2x

% times the mean

if length(find(price > 2*mean(price))) > 0

idx = find(price > 2*mean(price));

price(idx) = 2*mean(price);

end

if length(find(price < -2*mean(price))) > 0

idx = find(price < -2*mean(price));

price(idx) = -2*mean(price);

end

all_price = [all_price;price];

% january load and price

if strcmp(file, "data\1Jan.csv")

january_load = T.TOTALDEMAND;

january_price = T.RRP;

% Data for first week

index = find(week(T.SETTLEMENTDATE, 'weekofmonth') == 1);

january_firstweek_load = T.TOTALDEMAND(index);

january_firstweek_price = price(index);

% First day

index = find(day(T.SETTLEMENTDATE) == 1);

january_firstday_load = T.TOTALDEMAND(index);

january_firstday_price = price(index);

end

% Monthly

monthly_demand = [monthly_demand;T.TOTALDEMAND];

monthly_price = [monthly_price;price];

monthly_labels = [monthly_labels;month(T.SETTLEMENTDATE, 'name')];

% Daily

[groups, times] = findgroups(weekday(T.SETTLEMENTDATE));

for j = 1:length(groups)

index = find(hour(T.SETTLEMENTDATE) == groups(j));

daily_demand = [daily_demand;T.TOTALDEMAND(index)];

daily_price = [daily_price;price(index)];

daily_labels = [daily_labels;weekday(T.SETTLEMENTDATE(index))];

end

% Hourly

[groups, times] = findgroups(timeofday(T.SETTLEMENTDATE));

for j = 1:length(times)

index = find(timeofday(T.SETTLEMENTDATE) == times(j));

hourly_demand = [hourly_demand;T.TOTALDEMAND(index)];

hourly_price = [hourly_price;price(index)];

hourly_labels = [hourly_labels;timeofday(T.SETTLEMENTDATE(index))];

end

end

figure

subplot(3,1,1)

boxplot(hourly_demand, hourly_labels);

grid on

ylabel('Real Power (MW)');

xlabel('Hours of a Day')

subplot(3,1,2)

boxplot(daily_demand, daily_labels);

xticklabels({'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'})

grid on

ylabel('Real Power (MW)');

xlabel('Days of a Week')

subplot(3,1,3)

boxplot(monthly_demand, monthly_labels);

grid on

ylabel('Real Power (MW)');

xlabel('Months of a Year')

figure

subplot(3,1,1)

boxplot(hourly_price, hourly_labels);

grid on

ylabel('Price');

xlabel('Hours of a Day')

subplot(3,1,2)

boxplot(daily_price, daily_labels);

xticklabels({'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'})

grid on

ylabel('Price');

xlabel('Days of a Week')

subplot(3,1,3)

boxplot(monthly_price, monthly_labels);

grid on

ylabel('Price');

xlabel('Months of a Year')

%% Section 3: Data Analysis

%% Part a) Correlation between load and electricity

corr_a = corr(all_load, all_price);

fprintf("The correlation coefficient between Demand and Price for year 2010 is: %.4f\n", corr_a);

%% Part b) Correlation for January

corr_b = corr(january_load, january_price);

fprintf("The correlation coefficient between Demand and Price for January is: %.4f\n", corr_b);

%% Part c) Correlation for first week of January

corr_c = corr(january_firstweek_load, january_firstweek_price);

fprintf("The correlation coefficient between Demand and Price for the first Week of January is: %.4f\n", corr_c);

%% Part d) Correlqation for first day of January

corr_d = corr(january_firstday_load, january_firstday_price);

fprintf("The correlation coefficient between Demand and Price for the first Day of January is: %.4f\n", corr_d);

%% Part e) Scatter plot of electricity and load

figure

scatter(all_load, all_price), grid on

xlabel('Load')

ylabel('Price')

title('Price vs. Demand')

%% Part f) Scatter for January

figure

scatter(january_load, january_price), grid on

xlabel('Load')

ylabel('Price')

title('Price vs. Demand for January')

%% Part g) Scatter for first week of January

figure

scatter(january_firstweek_load, january_firstweek_price), grid on

xlabel('Load')

ylabel('Price')

title('Price vs. Demand for first week of January')

%% Part h) Scatter for first day of January

figure

scatter(january_firstday_load, january_firstday_price), grid on

xlabel('Load')

ylabel('Price')

title('Price vs. Demand for first day of January')

%% part i)

mean_load = mean(all_load)

mean_price = mean(all_price)

std_load = std(all_load)

std_price = std(all_price)

skewness_load = skewness(all_load)

skesness_price = skewness(all_price)

%% part j)

% Normalize the data

all_load_norm = (all_load - min(all_load))/(max(all_load) - min(all_load));

all_price_norm = (all_price - min(all_price))/(max(all_price) - min(all_price));

pd_normal_load = fitdist(all_load_norm, 'Normal');

% pd_weibull_load = fitdist(all_load_norm, 'Weibull');

pd_beta_load = fitdist(all_load_norm, 'Beta');

pd_normal_price = fitdist(all_price_norm, 'Normal');

% pd_weibull_price = fitdist(all_price_norm, 'Weibull');

pd_beta_price = fitdist(all_price_norm, 'Beta');

%% Section 4:

% Part a), b), c), d) and e)

for perc = 0.05:0.05:0.2

%% part a) Shift 5%

new_load = all_load;

% We see that the hours of highest price sare between 6:30 and 18:30, and

% the hours of lowest prices are between 18:30 and 6:30

% Get index of data for times between 6:30 and 18:30

index1 = find(timeofday(all_times) >= duration([6,30,0]) & timeofday(all_times) <= duration([18,30,0]));

% Get index of data for times between 18:30 and 6:30

index2 = find(timeofday(all_times) >= duration([18,30,0]));

index2 = [index2;find(timeofday(all_times) <= duration([6,30,0]))];

% Now, take percentage from the first range of time and

load = perc*all_load(index1);

% Remove to the first range of time

new_load(index1) = new_load(index1)*(1-perc);

% Now add that load to the second range of time

new_load(index2) = new_load(index2) + load;

% Calculate the total amount of money for this new pattern of load

new_cost = sum(new_load.*all_price);

% Calculate the total amount of money for the original pattern

old_cost = sum(all_load.*all_price);

% Check for the amount saved

amount_saved = old_cost - new_cost;

fprintf("The amount of money saved then %.1f%% of load shifted is: $%.2f\n", perc*100, amount_saved);

end

%% Section 5:

%% Part a)

%We can see that the all time-high price is around 15:00-17:00 and it is

% because these are the rush hours

%% Part b)

% The time with the lowest price is 12:30. Although this is a semi-crowded

% hour, the low price may be due to some type of excess supply or some

% type of failure (blackouts in some areas) that caused an excess supply.

% Generally, the lowest prices should be located in the early morning.

%% Part c)

% Shifting 20% of the load returns the highest amount saved ($7211353.49)

%% Section 7:

%% a)

% * New England REZ Transmission Link

% * Sydney Ring (Reinforcing Sydney, Newcastle and Wollongong Supply)

% * HumeLink

%% b)

% * the principal key barrier is time, since these projects have aan

% estimated finish date

% * Securing social license for VRE, Storage and Transmission

% * Completing actions in AEMO's Engineering Framework

%% c)

% Each of these projects belong to an expansion plan with stipulated dates

% and projects organized independently.

%% d)

% Among the main strategies are engineering designs, cost estimates and

% research related to communities of interest.

%

% Identification of barriers to community acceptance and estimates of costs

% associated with overcoming them.

%% e)

% Among the pros of the project is the increase in the robustness of the

% electrical system and its reliability. In addition, among the projects that

% they want to implement there is a zero emissions plan through the

% implementation of renewable energies. On the other hand, one of the main

% pros is to guarantee electric service to all people through interconnection

% with other countries, guaranteeing that there is always an offer in

% electric service.

% Among the main disadvantages are the difficulty of each project and the

% time required for its execution. In addition to having to comply with the

% assigned times, they are projects with high monetary costs. On the other

% hand, they require various regulatory permits that vary between countries

% but are necessary to achieve interconnections.