<jupyter_start><jupyter_text>Unsupervised Analysis of Days of WeekTreating crossings each day as features to learn about the relationships between various days<jupyter_code>%matplotlib inline

import matplotlib.pyplot as plt
plt.style.use('seaborn-pastel')

import pandas as pd
import numpy as np

from sklearn.decomposition import PCA
from sklearn.mixture import GaussianMixture<jupyter_output><empty_output><jupyter_text>Get Data<jupyter_code>from jupyterworkflow.data import get_fremont_data
data = get_fremont_data()

pivoted = data.pivot_table('Total', index=data.index.time, columns=data.index.date)
pivoted.plot(legend=False, alpha = 0.01);<jupyter_output><empty_output><jupyter_text>Principal Component Analysis<jupyter_code>X = pivoted.fillna(0).T.values
X.shape

X2 = PCA(2, svd_solver='full').fit_transform(X)
X2.shape
plt.scatter(X2[:,0], X2[:, 1]);<jupyter_output><empty_output><jupyter_text>Unsupervised Clustering<jupyter_code>gmm = GaussianMixture(2).fit(X)
labels = gmm.predict(X)
plt.scatter(X2[:,0], X2[:, 1], c = labels, cmap = 'rainbow')
plt.colorbar();
fig, ax = plt.subplots(1,2, figsize=(14,6))

pivoted.T[labels == 0].T.plot(legend=False, alpha = 0.1, ax = ax[0]);
pivoted.T[labels == 1].T.plot(legend=False, alpha = 0.1, ax = ax[1]);

ax[0].set_title('Red Cluster');
ax[1].set_title('Purple Cluster');<jupyter_output><empty_output><jupyter_text>Comparing with Day of Week<jupyter_code>dayofweek=pd.DatetimeIndex(pivoted.columns).dayofweek

plt.scatter(X2[:,0], X2[:, 1], c = dayofweek, cmap = 'rainbow')
plt.colorbar();<jupyter_output><empty_output><jupyter_text>Analyzing OutliersThe following points are weekdays with holiday-like pattern<jupyter_code>dates = pd.DatetimeIndex(pivoted.columns)
dates[(labels ==0) & (dayofweek < 5)]<jupyter_output><empty_output>