<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
Step3:  Módulo 3
Step5:  Dataset
Step10:  Histogram Plot
Matplotlib Puro
Step11:  Observação
Step15:  Usando Pandas
Step17:  Usando Seaborn
Step21:  Observação
Step24:  Box Plot
Matplotlib Puro
Uma Série
Step25:  Mais Séries
Step26:  Outliers!!!
Step27:  Pandas for the Go!
Todos Juntos e com Labels!
Step28:  Outliers!!!
Step29:  Seaborn
Step30:  Desafio
Objetivo
Step32:  [ A ] Exploração
Parte 1
Usar Histograma e Box Plot para visualizar
Step34:  Parte 2
Juntar a Série Original com os Outliers para criar uma Série Contaminada. Visualizar a nova série.
Depois, propor cortes na série para eliminar os outliers sem perder muitos dados de dentro da distribuição.
Em cada corte executado, visualizar a distribuição e as medidas de constrole da distribuição.
Step36:  [ B ]
Criar um plot de duas janelas empilhadas na vertical, onde
<ASSISTANT_TASK:>
Python Code:
import numpy as np
import os
import pandas as pd
 habilitando plots no notebook 
%matplotlib inline
 plot libs 
import matplotlib.pyplot as plt
import seaborn as sns
 Configurando o Matplotlib para o modo manual 
plt.interactive(False)
Explanation: Módulo 3: Histogramas + Box Plot
Tutorial
Imports
End of explanation
 DataFrame contendo 5 Séries com Distribuições Normais distintas 
df = pd.DataFrame(
    columns=["S1", "S2", "S3", "S4", "S5"],
    data=(
        np.random.randn(100, 5) * np.array([10, 15, 50, 100, 200]) + np.array([0, 5, 30, 30, 50])
    )
)
Explanation: Dataset
End of explanation
 Histograma sem Normalização 
plt.figure(figsize=(12,8))
plt.hist(df.S1, bins=10)
plt.show()
 Histograma com Normalização 
plt.figure(figsize=(12,8))
plt.hist(df.S1, bins=10, normed=True)
plt.show()
df.S1.describe()
 Histograma de duas Séries 
plt.figure(figsize=(12,8))
plt.hist(df[["S1", "S2"]], bins=10, normed=True)
plt.show()
df[["S1", "S2"]].describe()
 Histograma de mais de duas Séries 
plt.figure(figsize=(12,8))
plt.hist(df, bins=10, normed=True)
plt.show()
df.describe()
Explanation: Histogram Plot
Matplotlib Puro
End of explanation
plt.figure(figsize=(15,10))
plt.hist(df.S1, bins=10, normed=True, color="blue", alpha=0.5, label="S1")
plt.hist(df.S2, bins=10, normed=True, color="red", alpha=0.5, label="S2")
plt.legend()
plt.show()
Explanation: Observação:
A visualização do histograma de várias séries é muito confusa usando o matplotlib sozinho. Às vezes é preferível usar uma visualização em uma janela só, como mostrada abaixo:
End of explanation
 Uma Série 
df.S1.hist(bins=10, normed=True, figsize=(12,8))
plt.show()
 Histograma de duas Séries 
df[["S1", "S2"]].hist(bins=10, normed=True, figsize=(12,8))
plt.show()
df[["S1", "S2"]].describe()
 Histograma de mais de duas Séries 
df.hist(bins=10, figsize=(12,8))
plt.show()
df.describe()
Explanation: Usando Pandas
End of explanation
 Uma Série 
plt.figure( figsize=(12,8))
sns.distplot(df.S1)
plt.show()
Explanation: Usando Seaborn
End of explanation
 Histograma de duas Séries (1) 
plt.figure( figsize=(12,8))
f, axes = plt.subplots(2, 1, figsize=(15, 8), sharex=True)
sns.distplot(df.S1, kde=False, color="blue", ax=axes[0])
sns.distplot(df.S2, kde=True, color="red", ax=axes[1])
plt.show()
df[["S1", "S2"]].describe()
 Histograma de duas Séries (1) 
f, axes = plt.subplots(1, 2, figsize=(15, 8), sharex=True)
sns.distplot(df.S1, kde=False, color="blue", ax=axes[0])
sns.distplot(df.S2, kde=True, color="red", ax=axes[1])
plt.show()
df[["S1", "S2"]].describe()
 Histograma de mais de duas Séries 
plt.figure( figsize=(12,8))
f, axes = plt.subplots(3, 2, figsize=(15, 8), sharex=True)
sns.distplot(df.S1, kde=False, color="blue", ax=axes[0, 0])
sns.distplot(df.S2, kde=True, color="red", ax=axes[0, 1])
sns.distplot(df.S3, kde=True, color="orange", ax=axes[1, 0])
sns.distplot(df.S4, kde=True, rug=True, color="gray", ax=axes[1, 1])
sns.distplot(df.S5, hist=False, kde_kws={"shade": True}, color="purple", ax=axes[2, 1])
plt.show()
df[["S1", "S2"]].describe()
Explanation: Observação:
Seaborn não suporta hist plot de várias colunas de um DataFrame automaticamente
End of explanation
 default: vertical 
plt.figure(figsize=(15,10))
plt.boxplot(df.S1)
plt.show()
 horizontal pra variar 
plt.figure(figsize=(15,10))
plt.boxplot(df.S1, vert=False)
plt.show()
Explanation: Box Plot
Matplotlib Puro
Uma Série
End of explanation
plt.figure(figsize=(15,10))
plt.boxplot(df.T)
plt.show()
Explanation: Mais Séries
End of explanation
tmp1 = df[["S1", "S2"]]
tmp2 = df[["S3", "S3"]]
tmp2.columns = tmp1.columns  # append com colunas iguais não cria NaNs 
tmp = tmp1.append(tmp2)
plt.figure(figsize=(15,10))
plt.boxplot(tmp.T)
plt.show()
tmp.describe(percentiles=[0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9])
Explanation: Outliers!!!
End of explanation
df.plot(kind="box", figsize=(15,10))
plt.show()
Explanation: Pandas for the Go!
Todos Juntos e com Labels!
End of explanation
tmp1 = df.copy()
tmp2 = df[["S5", "S5", "S5", "S5", "S5"]]
tmp2.columns = tmp1.columns  # append com colunas iguais não cria NaNs 
tmp = tmp1.append(tmp2)
plt.figure(figsize=(15,10))
tmp.plot(kind="box", figsize=(15,10))
plt.show()
tmp.describe(percentiles=[0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9])
Explanation: Outliers!!!
End of explanation
plt.figure(figsize=(15,10))
sns.boxplot(data=df)
plt.show()
Explanation: Seaborn
End of explanation
serie_original = pd.Series(np.random.randn(900)) * 32 + 230 
outliers = pd.Series(np.random.randn(100)) * 320 + 230 
Explanation: Desafio
Objetivo:
Visualizar uma Distribuição Normal usando Histogramas e Box Plot
Dataset:
End of explanation
 Escreva a a Solução Aqui     
Explanation: [ A ] Exploração
Parte 1
Usar Histograma e Box Plot para visualizar:
* a Série Original
* os Outliers
* a Série Original e os Outliers na mesma janela
End of explanation
 Escreva a a Solução Aqui     
Explanation: Parte 2
Juntar a Série Original com os Outliers para criar uma Série Contaminada. Visualizar a nova série.
Depois, propor cortes na série para eliminar os outliers sem perder muitos dados de dentro da distribuição.
Em cada corte executado, visualizar a distribuição e as medidas de constrole da distribuição.
End of explanation
 Escreva a a Solução Aqui     
Explanation: [ B ]
Criar um plot de duas janelas empilhadas na vertical, onde:
* A janela de cima é um Box Plot horizontal
* A Janela de baixo é um histograma
As duas janelas devem compartilhar o eixo horixontal, de forma que os atributos da distribuição estejam alinhados.
End of explanation
<END_TASK>