from IPython.lib.display import YouTubeVideo

YouTubeVideo("FytuB8nFHPQ", width=400, height=300)

from __future__ import absolute_import, division, print_function

%matplotlib inline
import matplotlib.pyplot as plt

import seaborn as sns
sns.set_context('poster')
sns.set_style('whitegrid') 
# sns.set_style('darkgrid') 
plt.rcParams['figure.figsize'] = 12, 8  # plotsize 

import numpy as np
import pandas as pd
from pandas.tools.plotting import scatter_matrix
from sklearn.datasets import load_boston

import warnings
warnings.filterwarnings('ignore')

"""
Explanation: Python Visualization Landscape
End of explanation
"""


df = pd.read_csv("../data/coal_prod_cleaned.csv")

df.head()

plt.scatter(df['Average_Employees'], 
            df.Labor_Hours)
plt.xlabel("Number of Employees")
plt.ylabel("Total Hours Worked");

"""
Explanation: Note
Using cleaned data from Data Cleaning Notebook. See Notebook for details.
End of explanation
"""


from IPython.display import YouTubeVideo

YouTubeVideo("uHPcshgTotE", width=560, height=315)

import bqplot as bq

sample_df = df.sample(100)

x_sc = bq.LinearScale()
y_sc = bq.LinearScale()

ax_x = bq.Axis(label='Number of Employees', scale=x_sc, grid_lines='solid')
ax_y = bq.Axis(label='Total Hours Worked', scale=y_sc, orientation='vertical', grid_lines='solid')

line = bq.Scatter(x=sample_df.Average_Employees, 
                  y=sample_df.Labor_Hours,
                  scales={'x': x_sc, 'y': y_sc}, 
                 interactions={'click': 'select'},
                        selected_style={'opacity': 1.0, 'fill': 'DarkOrange', 'stroke': 'Red'},
                       unselected_style={'opacity': 0.5})

fig = bq.Figure(axes=[ax_x, ax_y], marks=[line], title='BQPlot Example')
fig

line.selected

line.selected = [23, 3]

import bqplot.pyplot as plt
import numpy as np

x = np.linspace(0, 2, 50)
y = x**2

fig = plt.figure()
scatter = plt.scatter(x, y)
plt.show()


fig.animation_duration = 5000
scatter.y = x**.5

scatter.selected_style = {'stroke':'red', 'fill': 'orange'}
plt.brush_selector();

scatter.selected

scatter.selected = [1,2,10,40]

import ipyvolume as ipv
import numpy as np


ipv.example_ylm()

N = 1000
x, y, z = np.random.random((3, N))


fig = ipv.figure()
scatter = ipv.scatter(x, y, z, marker='box')
ipv.show()


scatter.x = scatter.x + 0.1

scatter.color = "green"
scatter.size = 5

scatter.color = np.random.random((N,3))

scatter.size = 2

ex = ipv.datasets.animated_stream.fetch().data

ex.shape

ex[:, ::, ::4].shape

ipv.figure()
ipv.style.use('dark')
quiver = ipv.quiver(*ipv.datasets.animated_stream.fetch().data[:,::,::4], size=5)
ipv.animation_control(quiver, interval=200)
ipv.show()
ipv.style.use('light')

ipv.style.use('light')

quiver.geo = "cat"

N = 1000*1000
x, y, z = np.random.random((3, N)).astype('f4')

ipv.figure()
s = ipv.scatter(x, y, z, size=0.2)
ipv.show()

ipv.save("bqplot.html", )

!open bqplot.html

colors = sns.color_palette(n_colors=df.Year.nunique())

color_dict = {key: value 
              for key, value in zip(sorted(df.Year.unique()), colors)}

color_dict

for year in sorted(df.Year.unique()[[0, 2, -1]]):
    plt.scatter(df[df.Year == year].Labor_Hours,
                df[df.Year == year].Production_short_tons, 
                c=color_dict[year],
                s=50,
                label=year,
               )
plt.xlabel("Total Hours Worked")
plt.ylabel("Total Amount Produced")
plt.legend()
plt.savefig("ex1.png")

import matplotlib as mpl

plt.style.available

mpl.style.use('seaborn-colorblind')

for year in sorted(df.Year.unique()[[0, 2, -1]]):
    plt.scatter(df[df.Year == year].Labor_Hours,
                df[df.Year == year].Production_short_tons, 
#                 c=color_dict[year],
                s=50,
                label=year,
               )
plt.xlabel("Total Hours Worked")
plt.ylabel("Total Amount Produced")
plt.legend();
# plt.savefig("ex1.png")

df_dict = load_boston()
features = pd.DataFrame(data=df_dict.data, columns = df_dict.feature_names)
target = pd.DataFrame(data=df_dict.target, columns = ['MEDV'])
df = pd.concat([features, target], axis=1)
df.head()

# Target variable
fig, ax = plt.subplots(figsize=(6, 4))
sns.distplot(df.MEDV, ax=ax, rug=True, hist=False)

fig, ax = plt.subplots(figsize=(10,7))
sns.kdeplot(df.LSTAT,
            df.MEDV,
            ax=ax)

fig, ax = plt.subplots(figsize=(10, 10))
scatter_matrix(df[['MEDV', 'LSTAT', 'CRIM', 'RM', 'NOX', 'DIS']], alpha=0.2, diagonal='hist', ax=ax);

sns.pairplot(data=df, 
             vars=['MEDV', 'LSTAT', 'CRIM', 'RM', 'NOX', 'DIS'],
             plot_kws={'s':20, 'alpha':0.5}
            );


"""
Explanation: BQPlot
Examples here are shamelessly stolen from the amazing: https://github.com/maartenbreddels/jupytercon-2017/blob/master/jupytercon2017-widgets.ipynb
End of explanation
"""


players = pd.read_csv("../data/raw_players.csv.gz", compression='gzip')

players.head()

weight_categories = ["vlow_weight",
                     "low_weight",
                     "mid_weight",
                     "high_weight",
                     "vhigh_weight",
                    ]

players['weightclass'] = pd.qcut(players['weight'],
                                 len(weight_categories),
                                 weight_categories)

players.head()

"""
Explanation: Quantile cuts
End of explanation
"""


