<jupyter_start><jupyter_text>Exercícios de fixação sobre: Pandas, Matplotlib e SeabornElaborado por <ahref="https://www.linkedin.com/in/bruno-coelho-277519129/"><NAME>, para as aulas do grupo [DATA](https://github.com/icmc-data). Instruções:Siga o passo do notebook, adiconando seu códiga toda vez que ver um ` your code here`.Caso o prazo ainda esteja aberto, (até a próxima aula)submeta sua resposta [nesse googleforms](https://goo.gl/forms/6pXx1AjD4rjES1Tp2) para saber quantas acertou. Carregas bibliotecas úteis e setar padrões<jupyter_code>import pandas as pd
import numpy as np

import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns 
sns.set() # Essa linha configura para usar os padrões do seaborn, recomendo<jupyter_output><empty_output><jupyter_text>Carregar o datasetPara este exercício, usaremos o conjunto de dadosdo [Boston Housing](https://archive.ics.uci.edu/ml/machine-learning-databases/housing/). Com eles temos dados socio-económicos de uma região, e opreço médio das casas daquela região.Para facilitar nossa vida, não vamospegar os dados do UCI e sim direto da biblioteca Scikit-Learn, que usaremos maisa fundo nas próximas aulas. Para instalar ela, uma dessas 3 opções é para darcerto:- pip install scikit-learn- conda install scikit-learn- python3 -m pipinstall scikit-learn- sudo python3 -m pip install scikit-learnSe tudo falhar,de uma olhada no [guia deles](https://scikit-learn.org/stable/install.html) deinstalação ou fale com um dos organizadores.<jupyter_code># Depois de instalado, essa linha deve rodar sem erro:
from sklearn.datasets import load_boston
# Como dataset vem dividido em features e target, 
#      vamos juntar os dois num único DataFrame.
boston_data = load_boston()

# Primeiro as features
df = pd.DataFrame(boston_data.data, columns=boston_data.feature_names)

# Agora o nosso target (valor que queremos prever)
df["target"] = boston_data.target

df.head()<jupyter_output><empty_output><jupyter_text>Descreva os dados da nossa tabelaDICA: A função que vc quer mostraquantidade, média, std, (..) para cada uma de nossas colunas...<jupyter_code># your code here<jupyter_output><empty_output><jupyter_text>Com base no resultado da função acima, responda: Q1: Qual feature possui a maior média (mean)?- CRIM- ZN- INDUS- CHAS- NOX- RM- AGE- DIS- RAD- TAX- PTRATIO- B- LSTAT- target Q2: Quantas features possuem todos os valores entre [0, 1] ?**OBS**: Anotação de colchetes indica que os extremos são inclusos.- 0- 1- 2- 3- 4Voltanto agora a codar, responda.... Q3: Essa base possui nulos?- Não- Sim**OBS**: Se possuir nulos, remova eles da base nessa célula abaixo paranão influenciarem no resto do exercício<jupyter_code># your code here<jupyter_output><empty_output><jupyter_text>No nossa conjunto de dados, cada linha representa uma região diferente,com divesas informações daquela região em cada coluna;Nossa coluna "target"contem o preço da médio das casas daquela região.Vale a pena ressaltar que opreço está em milhares de dólares!Vamos analisar as casas que custammais/menos de 20 míl. Q4: Aproximadamente qual porcentagem de regiões possuem um preço maior ou igual a 20 míl doláres?- 32 %- 47 %- 54 %- 63 %<jupyter_code># your code here<jupyter_output><empty_output><jupyter_text>No nosso conjunt de dados, existe uma feature chamada **CHAS**. Ela indicase aquela região está ou não próxima do [rioCharles](https://en.wikipedia.org/wiki/Charles_River). Vamos verificar que elasó possui dois valores, 0 ou 1.Nesse caso, 1 indica que a região está próximado rio.<jupyter_code># De fato, só dois valores.
df["CHAS"].value_counts()<jupyter_output><empty_output><jupyter_text>Queremos saber se o fato de estar mais perto do rio faz uma diferença nopreço da casa;Para isso, podemos plotar a distribuição do preço ("target"),tanto para quando está próxima do rio, quando para não esta e ver se há umadiferença.  Q5: Considerando casas perto e longes do rio, assinale as alternativas corretas:- As casas perto do rio parecem se concentrar mais emvolta de 20 míl doláres do que as longes do rio.- A distribuição de preço paraas casas próximas ao rio parece ser uma [distribuiçãobimodal](https://en.wikipedia.org/wiki/Multimodal_distribution)- Parece quecasas longe do rio tendem a estar distribuidas nas faixas caras (acima de 40míl) mais que as casas perto do rio.**OBS**: Conseguimos fazer isso em duaslinhas! (mas pode quebrar em mais para a indexação ficar mais legível se quiser)**OBS 2**: Lembra de um tal parâmetro de "label" que usamos em algum tipo deplot...?**OBS 3**: Use `hist=False` para ficar mais bonitinho ;)<jupyter_code># your code here<jupyter_output><empty_output><jupyter_text>Vamos agora considerar um subconjunto de features para analisar as suasdistribuições por quartis.<jupyter_code>subset = df.columns[[2, 4, 5, 6, 8, 10, 12]]<jupyter_output><empty_output><jupyter_text>Plote a distruibuição em quartis para cada uma das colunas definidasacima. Perceba que consegue fazer isso com um `for` se lembrar de chamar`plt.show()` para cada iteração.Dessa forma, sera gerado len(subset) plots, umdebaixo do outro<jupyter_code># your code here<jupyter_output><empty_output><jupyter_text>Agora responda: Q6: Qual feature possui o maior região entre a mediana e o 3o quartil? - INDUS- NOX- RM- AGE- RAD- PTRATIO- LSTAT Q7: Qual feature possui outliers tanto a esquerda como a direita das faixas de valores esperados?- INDUS- NOX- RM- AGE- RAD- PTRATIO- LSTAT**OBS**: Use como definição de[outliers](https://en.wikipedia.org/wiki/Outlier), quem não está na faixa(Q1−1.5⋅IQR, Q3+1.5⋅IQR).Vamos agora considerar um subconjunto de features para analisar as suasdistribuições e correlações<jupyter_code>subset = ['RM', 'AGE', 'DIS', 'B', 'LSTAT', 'target']<jupyter_output><empty_output><jupyter_text>Plote as relações entre essas 5 features acimas e responda:<jupyter_code>sns.pairplot(df[subset])<jupyter_output><empty_output><jupyter_text>Q8: Qual feature parece ter a grande maioria dos seus valores numa pequena faixa?- RM- AGE- DIS- B- LSTAT- target Aqui acabam as perguntas :)![](https://i.imgflip.com/s5spp.jpg) Como um bonus, vamos agora exemplificar a importância de entender seus dados, e como o trabalho de um cientista de dados pode ser benéfico (ou não) para a sociedade.Sempre que lidamos com dados reais, criando modelos que impactam aspesssoas, temos que ter um cuidado gigante.Nesse nosso pequeno problema porexemplo, a variável **B** possui uma relação com a quantidade de pessoas que seautodeclaram afrodescendente na cidade da região analisada; Perceba que emnenhuma altura da análise, nos preocupamos em como os dados foram adiquiridos ese foram anonimizados; nesse caso os dados não são tão pessoais pois são umamédia de uma região, mas poderia ser um dataset sobre consumidores diferentes,em que informações pessoais são coletadas sem as devidas permissões;Vamos analisar melhor a variável B. Ela é definida como B = 1000(Bk -0.63)^2 onde Bk é a proporção de pessoas autodeclaradas afrodescendente. Combase na imagem abaixo, podemos perceber que valores acima de 150 para avariávelo B indicam um Bk alto: ![](https://storage.googleapis.com/kaggle-forum-message-attachments/inbox/372266/e30bf91054037667a9b69abb600ba97c/Screen%20Shot%202018-09-24%20at%204.47.17%20PM.png)Vamos analisar agora o preço das casas em relação a B. Vamos definir umindex_binário, B > 150.<jupyter_code>low_bk = df["B"] > 150
sns.distplot(df[low_bk]["target"], label="low bk", hist=False)
sns.distplot(df[~low_bk]["target"], label="high bk", hist=False)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.08377448385389094, 'fraction_numerical': 0.018263631551085232, 'mean_word_length': 5.525906735751295, 'pattern_counts': {'":': 0, '<': 51, '<?xml version=': 0, '>': 53, 'https://': 10, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '12', 'dir': 'jupyter-structured-clean-dedup', 'id': '61490', 'license': 'MIT', 'n_tokens_mistral': 2843, 'n_tokens_neox': 2689, 'n_words': 928, 'path': 'Aula03/.ipynb_checkpoints/Exercicios-checkpoint.ipynb', 'repo_name': 'MatheusSanchez/DataScience', 'size': '7567'}