Code covered by the BSD License  

Highlights from
Data Analysis with MATLAB for Excel Users

image thumbnail

Data Analysis with MATLAB for Excel Users

by

 

09 Mar 2007 (Updated )

Materials for public seminar of the same name (slides and demos)

PresenterScript.m
%% Energy Demo
% This is a script for Energy Forecast Demo
% Copyright 2006-2009 The MathWorks, Inc.

%% Import Data
% Copy and paste data from spreadsheet. Do this interactively. Later, I can
% explain about the programmatic methods (seen below).
%
% * |energyData| - from SOP sheet
% * |DayType|, |HDD|, |Temp|

    energyData= xlsread('January.xls', 'Liability', 'B2:Y32');
    DayType   = xlsread('January.xls', 'Weather'  , 'B2:B32');
    HDD       = xlsread('January.xls', 'Weather'  , 'C2:C32'); %Heating Degree Days
    Temp      = xlsread('January.xls', 'Weather'  , 'D2:D32');

%% Quick Visualization
% Point-n-click visualizations
%
% * Select |energyData| and click on plot icon - first plot, but not useful
% * |plot(energyData')| to plot on a hourly basis
% * Open Plot Catalog to do other visualizations - |ribbon|, |waterfall|
%
% Customize using |plottools|
%
% * Create initial plot using |mesh|
% * Open |plottools|
% * Add a second axes
% * Use |contourf| for second axes
% * Add colorbar
% * Add annotations (labels, titles)
% * Close |plottools| and generate m-file
% * Run auto-generated m-file
%
% The contour plot gives us more insights to the data. I can see the two
% peaks during the day. I can also deduce cyclical behavior during the
% month.

    myCreateFigure(energyData);

%% Basic Statistics
% Start with simple statistics (some command line, some interactive)
%
% * Let's determine the mean hourly profile:

    meanDay = mean(energyData);

%%
% * Plot all data and mean (thick line)

    figure;
    plot(energyData', 'green');
    hold;
    plot(meanDay, 'linewidth', 4);

%%
% * Examine the distribution of the variance:

    res = energyData - repmat(meanDay, 31, 1);

%%
% * Distribution Fitting Tool:
%
%    dfittool(res(:))
%
% * Fit a normal distribution.
% * Generate m-file. Run m-file.

    myDistFit(res);
    
%% Intermediate Statistics
% Now that we know the distribution is normal, we can carry on with more
% statistics assuming a normally distributed data set.
%
% Let's see if we can determine the 95% confidence interval of the mean
% profile.
%
% * Go to the doc and search for "confidence intervals normal distribution"
% * The first entry is a page on "confidence intervals"
% * Go down half a page where they have an example for |normfit|
% * Highlight the 2 lines and "Evaluate"

    data = normrnd(10,2,100,2);
    [mu,sigma,muci,sigmaci] = normfit(data)

%%
% * Explain what it does. Now apply to |data|.

    [mu,sigma,muci,sigmaci] = normfit(energyData);
    [mu2,sigma2,muci2,sigmaci2] = normfit(energyData');
    plot(mu);
    hold on;
    plot(muci', 'r');

%%
% * I have a function that does this for both hour and day dimensions and
% visualizes them. If appropriate, open |plotCI.m| and explain.

    plotCI(energyData,mu,sigma,muci,mu2,sigma2,muci2);

%% Automating Tasks
% We have done a lot of interactive exploration of our data, and now I
% would like to start capturing my workflow so that the same processes can
% be applied to new data sets.
%
% * Go to command history and capture appropriate commands and create
% M-file.
% * Run m-file.
% * Create cells by partitioning with cell headings. Here's an example:

    type myscript_template
    
%% Cell Execution and Publish
% Step through more detailed analysis using cell mode. Open
% |EnergyForecastAnalysis.m|. Publish the document.

%% Reusable functions
%
% * First make |EnergyForecastAnalysis.m| a function with data file name as
% an input argument.
% * Add a simple user interface:
%
%       if nargin == 0
%         dataFileName = uigetfile('*.xls', 'Select data file');
%       end
%
    
%% GUI
%
% * Open |GUIDE| and create a single button GUI and call
% |EnergyForecastAnalysis.m|
%
% * Open final GUI |energyForecastGUI.m| and run

energyForecastGUI([], {'January.xls', 9, 1, 1, '10, 15'});

Contact us