<jupyter_start><jupyter_text>Desafio 3Neste desafio, iremos praticar nossos conhecimentos sobre distribuições de probabilidade. Para isso,dividiremos este desafio em duas partes:    1. A primeira parte contará com 3 questões sobre um *data set* artificial com dados de uma amostra normal e    uma binomial.2. A segunda parte será sobre a análise da distribuição de uma variável do _data set_ [Pulsar Star](https://archive.ics.uci.edu/ml/datasets/HTRU2), contendo 2 questões.> Obs.: Por favor, não modifique o nome das funções de resposta.  _Setup_ geral<jupyter_code>import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as sct
import seaborn as sns
from statsmodels.distributions.empirical_distribution import ECDF
#%matplotlib inline

from IPython.core.pylabtools import figsize


figsize(12, 8)

sns.set()<jupyter_output><empty_output><jupyter_text>Parte 1  _Setup_ da parte 1<jupyter_code>np.random.seed(42)
    
dataframe = pd.DataFrame({"normal": sct.norm.rvs(20, 4, size=10000),
                     "binomial": sct.binom.rvs(100, 0.2, size=10000)})<jupyter_output><empty_output><jupyter_text>Inicie sua análise a partir da parte 1 a partir daqui<jupyter_code># Sua análise da parte 1 começa aqui.
dataframe.head()
dataframe.info()
dataframe.describe()<jupyter_output><empty_output><jupyter_text>Questão 1Qual a diferença entre os quartis (Q1, Q2 e Q3) das variáveis `normal` e `binomial` de `dataframe`? Responda como uma tupla de três elementos arredondados para três casas decimais.Em outra palavras, sejam `q1_norm`, `q2_norm` e `q3_norm` os quantis da variável `normal` e `q1_binom`, `q2_binom` e `q3_binom` os quantis da variável `binom`, qual a diferença `(q1_norm - q1 binom, q2_norm - q2_binom, q3_norm - q3_binom)`?<jupyter_code>def q1():
    quantiles = dataframe.quantile([.25, .5, .75])
    quantiles_diff = quantiles['normal'] - quantiles['binomial']
    return tuple(quantiles_diff.round(3).to_list())
q1()<jupyter_output><empty_output><jupyter_text>Para refletir:* Você esperava valores dessa magnitude?* Você é capaz de explicar como distribuições aparentemente tão diferentes (discreta e contínua, por exemplo) conseguem dar esses valores?  Questão 2Considere o intervalo $[\bar{x} - s, \bar{x} + s]$, onde $\bar{x}$ é a média amostral e $s$ é o desvio padrão. Qual a probabilidade nesse intervalo, calculada pela função de distribuição acumulada empírica (CDF empírica) da variável `normal`? Responda como uma único escalar arredondado para três casas decimais.<jupyter_code>def q2():
    inferior = dataframe.normal.mean() - dataframe.normal.std()
    superior = dataframe.normal.mean() + dataframe.normal.std()
    
    ecdf = ECDF(dataframe.normal)
    
    return np.float(round(ecdf(superior) - ecdf(inferior), 3))
q2()<jupyter_output><empty_output><jupyter_text>Para refletir:* Esse valor se aproxima do esperado teórico?* Experimente também para os intervalos $[\bar{x} - 2s, \bar{x} + 2s]$ e $[\bar{x} - 3s, \bar{x} + 3s]$.  Questão 3Qual é a diferença entre as médias e as variâncias das variáveis `binomial` e `normal`? Responda como uma tupla de dois elementos arredondados para três casas decimais.Em outras palavras, sejam `m_binom` e `v_binom` a média e a variância da variável `binomial`, e `m_norm` e `v_norm` a média e a variância da variável `normal`. Quais as diferenças `(m_binom - m_norm, v_binom - v_norm)`?<jupyter_code>def q3():
    mean_std = dataframe.describe()[1:3]
    mean_std.loc['std'] **= 2
    mean_std_diff = mean_std['binomial'] - mean_std['normal']
    return tuple(mean_std_diff.round(3).to_list())
q3()<jupyter_output><empty_output><jupyter_text>Para refletir:* Você esperava valore dessa magnitude?* Qual o efeito de aumentar ou diminuir $n$ (atualmente 100) na distribuição da variável `binomial`?  Parte 2  _Setup_ da parte 2<jupyter_code>stars = pd.read_csv("pulsar_stars.csv")

stars.rename({old_name: new_name
              for (old_name, new_name)
              in zip(stars.columns,
                     ["mean_profile", "sd_profile", "kurt_profile", "skew_profile", "mean_curve", "sd_curve", "kurt_curve", "skew_curve", "target"])
             },
             axis=1, inplace=True)

stars.loc[:, "target"] = stars.target.astype(bool)<jupyter_output><empty_output><jupyter_text>Inicie sua análise da parte 2 a partir daqui<jupyter_code>stars.head()
stars.info()
stars.describe()<jupyter_output><empty_output><jupyter_text>Questão 4Considerando a variável `mean_profile` de `stars`:1. Filtre apenas os valores de `mean_profile` onde `target == 0` (ou seja, onde a estrela não é um pulsar).2. Padronize a variável `mean_profile` filtrada anteriormente para ter média 0 e variância 1.Chamaremos a variável resultante de `false_pulsar_mean_profile_standardized`.Encontre os quantis teóricos para uma distribuição normal de média 0 e variância 1 para 0.80, 0.90 e 0.95 através da função `norm.ppf()` disponível em `scipy.stats`.Quais as probabilidade associadas a esses quantis utilizando a CDF empírica da variável `false_pulsar_mean_profile_standardized`? Responda como uma tupla de três elementos arredondados para três casas decimais.<jupyter_code>def standardization(x):
    return (x - x.mean()) / x.std()
def q4():
    false_pulsar_mean_profile = stars.loc[stars['target'] == False]['mean_profile']
    false_pulsar_mean_profile_standardized = standardization(false_pulsar_mean_profile)
    
    ecdf = ECDF(false_pulsar_mean_profile_standardized)
    
    ppf = pd.Series(ecdf(sct.norm.ppf([0.80, 0.90, 0.95])), [0.80, 0.90, 0.95])
    
    return tuple(ppf.round(3).to_list())
q4()<jupyter_output><empty_output><jupyter_text>Para refletir:* Os valores encontrados fazem sentido?* O que isso pode dizer sobre a distribuição da variável `false_pulsar_mean_profile_standardized`?  Questão 5Qual a diferença entre os quantis Q1, Q2 e Q3 de `false_pulsar_mean_profile_standardized` e os mesmos quantis teóricos de uma distribuição normal de média 0 e variância 1? Responda como uma tupla de três elementos arredondados para três casas decimais.<jupyter_code>def standardization(x):
    return (x - x.mean()) / x.std()
def q5():
    false_pulsar_mean_profile = stars.loc[stars['target'] == False]['mean_profile']
    false_pulsar_mean_profile_standardized = standardization(false_pulsar_mean_profile)
    ppf = pd.Series(sct.norm.ppf([0.25, 0.50, 0.75]), [0.25, 0.50, 0.75])
    quantiles = false_pulsar_mean_profile_standardized.quantile([0.25, 0.50, 0.75])
    return tuple((quantiles - ppf).round(3).to_list())
q5()<jupyter_output><empty_output>
StarcoderdataJupyterStructuredCleanDedup