DataFrames - Part 1
Figure 1
![Screenshot of Diabetes Data](fig/diabetes_data_screenshot.png)
Figure 2
![Screenshot of subfolder 'data'](fig/subfolder_data.png)
Figure 3
![](fig/01-data_frames_1-rendered-unnamed-chunk-34-1.png)
Figure 4
![](fig/01-data_frames_1-rendered-unnamed-chunk-35-3.png)
Figure 5
![](fig/01-data_frames_1-rendered-unnamed-chunk-37-5.png)
Figure 6
![](fig/01-data_frames_1-rendered-unnamed-chunk-38-7.png)
Figure 7
![](fig/01-data_frames_1-rendered-unnamed-chunk-39-9.png)
Figure 8
![](fig/01-data_frames_1-rendered-unnamed-chunk-40-11.png)
Figure 9
![](fig/01-data_frames_1-rendered-unnamed-chunk-41-13.png)
Figure 10
![](fig/01-data_frames_1-rendered-unnamed-chunk-42-15.png)
Figure 11
![](fig/01-data_frames_1-rendered-unnamed-chunk-43-17.png)
Figure 12
![](fig/01-data_frames_1-rendered-unnamed-chunk-44-19.png)
Figure 13
![](fig/01-data_frames_1-rendered-unnamed-chunk-48-21.png)
Data Frames - Part 2
Figure 1
![](fig/02-data_frames_2-rendered-unnamed-chunk-3-1.png)
Figure 2
![](fig/02-data_frames_2-rendered-unnamed-chunk-7-3.png)
Figure 3
![](fig/02-data_frames_2-rendered-unnamed-chunk-8-5.png)
Figure 4
![](fig/02-data_frames_2-rendered-unnamed-chunk-9-7.png)
Figure 5
![](fig/02-data_frames_2-rendered-unnamed-chunk-10-9.png)
Figure 6
![](fig/02-data_frames_2-rendered-unnamed-chunk-21-11.png)
Figure 7
![](fig/02-data_frames_2-rendered-unnamed-chunk-22-13.png)
Figure 8
![](fig/02-data_frames_2-rendered-unnamed-chunk-24-15.png)
Figure 9
![](fig/02-data_frames_2-rendered-unnamed-chunk-26-17.png)
Figure 10
![](fig/02-data_frames_2-rendered-unnamed-chunk-27-19.png)
Figure 11
![](fig/02-data_frames_2-rendered-unnamed-chunk-30-21.png)
Figure 12
![](fig/02-data_frames_2-rendered-unnamed-chunk-31-23.png)
Figure 13
![](fig/02-data_frames_2-rendered-unnamed-chunk-32-25.png)
Image Handling
Figure 1
![Figure 1: Example image, rat cerebellum](fig/rat_cerebellum.jpg)
Figure 2
![](fig/03-image_handling-rendered-unnamed-chunk-4-1.png)
Figure 3
![](fig/03-image_handling-rendered-unnamed-chunk-5-3.png)
Figure 4
![](fig/03-image_handling-rendered-unnamed-chunk-6-5.png)
Figure 5
![](fig/03-image_handling-rendered-unnamed-chunk-8-7.png)
Figure 6
![](fig/03-image_handling-rendered-unnamed-chunk-9-9.png)
Figure 7
![](fig/03-image_handling-rendered-unnamed-chunk-10-11.png)
Figure 8
![](fig/03-image_handling-rendered-unnamed-chunk-11-13.png)
Figure 9
![](fig/03-image_handling-rendered-unnamed-chunk-13-15.png)
Figure 10
![](fig/03-image_handling-rendered-unnamed-chunk-15-17.png)
Figure 11
![](fig/03-image_handling-rendered-unnamed-chunk-16-19.png)
Figure 12
![](fig/03-image_handling-rendered-unnamed-chunk-20-21.png)
Figure 13
![](fig/03-image_handling-rendered-unnamed-chunk-22-23.png)
Figure 14
![](fig/03-image_handling-rendered-unnamed-chunk-26-25.png)
Figure 15
![](fig/03-image_handling-rendered-unnamed-chunk-29-27.png)
Figure 16
![](fig/03-image_handling-rendered-unnamed-chunk-30-29.png)
Figure 17
![](fig/03-image_handling-rendered-unnamed-chunk-31-31.png)
Time Series
Figure 1
![](fig/04-time_series-rendered-unnamed-chunk-5-1.png)
Figure 2
![](fig/04-time_series-rendered-unnamed-chunk-6-3.png)
Figure 3
![](fig/04-time_series-rendered-unnamed-chunk-9-5.png)
Figure 4
![](fig/04-time_series-rendered-unnamed-chunk-11-7.png)
Figure 5
![](fig/04-time_series-rendered-unnamed-chunk-12-9.png)
Figure 6
![](fig/04-time_series-rendered-unnamed-chunk-13-11.png)
Figure 7
Fourier Transform of EEG data
We import the Fourier Transform function fft
from the
library scipy.fftpack where it can be used to transform
all columns at the same time.
Firstly, we must obtain a Fourier spectrum for every data column. Thus, we need to define how many plots we want to have. If we take only the columns in our data, we should be able to display them all, simultaneously.
Secondly, the Fourier Transform results in twice the number of complex coefficients; it produces both positive and negative frequency components, of which we only need the first (positive) half.
Lastly, the Fourier Transform outputs complex numbers. To display the ‘amplitude’ of each frequency, we take the absolute value of the complex numbers, using the abs() function.
PYTHON
no_win = 2
rows = data_back.shape[0]
freqs = (sr/2)*linspace(0, 1, int(rows/2))
amplitudes_back = (2.0 / rows) * abs(data_back_fft[:rows//2, :2])
fig, axes = subplots(figsize=(6, 5), ncols=1, nrows=no_win, sharex=False)
names = df_back.columns[:2]
for index, ax in enumerate(axes.flat):
axes[index].plot(freqs, amplitudes_back[:, index])
axes[index].set_xlim(0, 8)
axes[index].set(ylabel=f'Amplitude {names[index]}')
axes[index].set(xlabel='Frequency (Hz)');
show()
![](fig/04-time_series-rendered-unnamed-chunk-15-13.png)
In these two channels, we can clearly see that the main amplitude contributions lie in the low frequencies, below 2 Hz.
Let us compare the corresponding figure for the case of seizure activity:
PYTHON
fig, axes = subplots(figsize=(6, 5), ncols=1, nrows=no_win, sharex=False)
names = df_epil.columns[:2]
amplitudes_epil = (2.0 / rows) * abs(data_epil_fft[:rows//2, :2])
for index, ax in enumerate(axes.flat):
axes[index].plot(freqs, amplitudes_epil[:, index])
axes[index].set_xlim(0, 12)
axes[index].set(ylabel=f'Amplitude {names[index]}')
axes[index].set(xlabel='Frequency (Hz)');
show()
![](fig/04-time_series-rendered-unnamed-chunk-17-15.png)
As we can see from the Fourier spectra generated above, the amplitudes are high for low frequencies, and tend to decrease as the frequency increases. Thus, it can sometimes be useful to see the high frequencies enhanced. This can be achieved with a logarithmic plot of the powers.
PYTHON
fig, axes = subplots(figsize=(6, 6), ncols=1, nrows=no_win, sharex=False)
for index, ax in enumerate(axes.flat):
axes[index].plot(freqs, amplitudes_back[:, index])
axes[index].set_xlim(0, 30)
axes[index].set(ylabel=f'Amplitude {names[index]}')
axes[index].set_yscale('log')
axes[no_win-1].set(xlabel='Frequency (Hz)');
fig.suptitle('Logarithmic Fourier Spectra of Background EEG', fontsize=16);
show()
![](fig/04-time_series-rendered-unnamed-chunk-18-17.png)
And for the seizure data:
PYTHON
fig, axes = subplots(figsize=(6, 10), ncols=1, nrows=no_win, sharex=False)
for index, ax in enumerate(axes.flat):
axes[index].plot(freqs, amplitudes_epil[:, index])
axes[index].set_xlim(0, 30)
axes[index].set(ylabel=f'Power {names[index]}')
axes[index].set_yscale('log')
axes[no_win-1].set(xlabel='Frequency (Hz)');
fig.suptitle('Logarithmic Fourier Spectra of Seizure EEG', fontsize=16);
show()
![](fig/04-time_series-rendered-unnamed-chunk-19-19.png)
In the spectrum of the absence data, it is now more obvious that there are further maxima at 6, 9, 12 and perhaps 15Hz. These are integer multiples or ‘harmonics’ of the basic frequency at around 3Hz, which we term as the fundamental frequency.
A feature that can be used as a summary statistic, is to caclulate the band power for each channel. Band power is the total power of a signal within a specific frequency range. The band power can be obtained by calculating the sum of all powers within a specified range of frequencies; this range is also referred to as the ‘band’. The band power, thus, is given as a single number.
PYTHON
data_epil_filt = data_filter(data_epil, sr, 4, 12)
data_epil_fft = fft(data_epil_filt, axis=0)
rows = data_epil.shape[0]
freqs = (sr/2)*linspace(0, 1, int(rows/2))
amplitudes_epil = (2.0 / rows) * abs(data_epil_fft[:rows//2, :no_win])
fig, axes = subplots(figsize=(6, 10), ncols=1, nrows=no_win, sharex=False)
for index, ax in enumerate(axes.flat):
axes[index].plot(freqs, amplitudes_epil[:, index])
axes[index].set_xlim(0, 12)
axes[index].set(ylabel=f'Amplitudes {names[index]}')
axes[no_win-1].set(xlabel='Frequency (Hz)');
fig.suptitle('Fourier Spectra of Seizure EEG', fontsize=16);
show()
![](fig/04-time_series-rendered-unnamed-chunk-20-21.png)
Figure 8
![](fig/04-time_series-rendered-unnamed-chunk-15-13.png)
Figure 9
![](fig/04-time_series-rendered-unnamed-chunk-17-15.png)
Figure 10
![](fig/04-time_series-rendered-unnamed-chunk-18-17.png)
Figure 11
![](fig/04-time_series-rendered-unnamed-chunk-20-21.png)
Figure 12
![](fig/04-time_series-rendered-unnamed-chunk-21-23.png)
Figure 13
![](fig/04-time_series-rendered-unnamed-chunk-22-25.png)
Figure 14
![](fig/04-time_series-rendered-unnamed-chunk-23-27.png)