<jupyter_start><jupyter_text>Statistics for Data Science with Python **Cientista de Dados Jr.:**  Dr.Eddy <NAME>* Este Script está baseado [neste vídeo](https://www.youtube.com/watch?v=2xbNl3JxrDc).  Importamos as nossas bibliotecas<jupyter_code>import numpy as np
import pandas as pd

import scipy.stats
from scipy.stats import ttest_ind, levene, f_oneway, chi2_contingency, pearsonr

import seaborn as sns
import matplotlib.pyplot as plt<jupyter_output><empty_output><jupyter_text>Carregamos nossos Dados<jupyter_code>df = pd.read_csv("/content/drive/MyDrive/4_teoria_IA_ML_DL_Eddy/Remember_Statistics_for_Data_Science/teachingratings.csv")
df.head(5)
df.shape
df.describe()<jupyter_output><empty_output><jupyter_text>T-Test**Hipótese nula (Null Hypothesis)**: a pontuação da avaliação é independente dos instrutores do sexo feminino e masculino**Hipótese alternativa (Alternate Hypothesis)**: a pontuação da avaliação depende dos instrutores do sexo feminino e masculino<jupyter_code>ttest_ind(df[df["gender"] == "male"]["eval"], df[df["gender"] == "female"]["eval"])<jupyter_output><empty_output><jupyter_text>**Probabilidade de obter uma avaliação de ensino alta ou baixa**<jupyter_code>eval_mean = round(df["eval"].mean(), 3)
eval_std = round(df["eval"].std(), 3)

print(eval_mean, eval_std)
prob = scipy.stats.norm.cdf((4.5 - eval_mean) / eval_std)
print(1- prob)<jupyter_output>0.1828639734596742<jupyter_text>Levene-Test**Hipótese nula (Null Hypothesis)**: Variâncias populacionais são iguais**Hipótese alternativa (Alternate Hypothesis)**: Variâncias populacionais não são iguais<jupyter_code>levene(df[df["gender"] == "male"]["eval"], df[df["gender"] == "female"]["eval"], center = "mean")<jupyter_output><empty_output><jupyter_text>ANOVAA Análise de Variância (**ANOVA**) é uma fórmula estatística usada para comparar as variâncias entre as medianas (ou médias) de grupos diferentes. Diversos cenários usam ANOVA para determinar se há alguma diferença entre as medianas dos diferentes grupos.**Hipótese nula (Null Hypothesis)**: As amostras têm os mesmos valores médios (mean)**Hipótese alternativa (Alternate Hypothesis)**: As amostras têm diferentes valores médios (mean)<jupyter_code>def group(x):
    if x <= 40:
        return "younger"
    elif x > 40 and x < 57:
        return "middle"
    else:
        return "older"

df["age_group"] = df["age"].apply(group)<jupyter_output><empty_output><jupyter_text>**Estatísticas de beleza por faixa etária (por Idade)**<jupyter_code>age_stats = df.groupby("age_group")["beauty"].agg(["count", "mean", "std"])
age_stats<jupyter_output><empty_output><jupyter_text>**Prepare os Dados**<jupyter_code>younger = df[df["age_group"] == "younger"]["beauty"]
middle = df[df["age_group"] == "middle"]["beauty"]
older = df[df["age_group"] == "older"]["beauty"]<jupyter_output><empty_output><jupyter_text>**f-oneway (ANOVA)**<jupyter_code>f_stats, pvalue = f_oneway(younger, middle, older)

print(f"f-statistics =",f_stats, f"p-value =", pvalue)<jupyter_output>f-statistics = 17.597558611010122 p-value = 4.3225489816137975e-08<jupyter_text>**Resultado dos testes**<jupyter_code>if pvalue > 0.5:
    print("Hipótese nula aceita")
else:
    print("Hipótese alternativa aceita")<jupyter_output>Hipótese alternativa aceita<jupyter_text>ANOVA**Hipótese nula (Null Hypothesis)**: A pontuação da avaliação não é afetada pela idade do instrutor**Hipótese alternativa (Alternate Hypothesis)**: A pontuação da avaliação é afetada pela idade do instrutor<jupyter_code>younger_eval = df[df["age_group"] == "younger"]["eval"]
middle_eval = df[df["age_group"] == "middle"]["eval"]
older_eval = df[df["age_group"] == "older"]["eval"]<jupyter_output><empty_output><jupyter_text>**f-oneway ANOVA**<jupyter_code>f_statistics, pvalue = f_oneway(younger_eval, middle_eval, older_eval)
print(f"f-statistics = {f_statistics}", f"pvalue = {pvalue}")
if pvalue > 0.05:
    print("Aceitar hipótese nula")

else:
    print("Aceitar Hipótese Alternativa")<jupyter_output>Aceitar hipótese nula<jupyter_text>Chi-Squared Test**Hipótese nula (Null Hypothesis)**: Há associação entre gênero (_gender_) e estabilidade (_tenured_)**Hipótese alternativa (Alternate Hypothesis)**: Não há associação entre gênero (_gender_) e estabilidade (_tenured_)<jupyter_code>mt = df[df["gender"] == "male"]["tenure"]
yt = df[df["gender"] == "female"]["tenure"]<jupyter_output><empty_output><jupyter_text>**Valores**<jupyter_code>mft = pd.crosstab(df["tenure"],  df["gender"])

mft
chisquare, pvalue, freedom, array = chi2_contingency(mft, correction = False)
print(f"Chi-Square Statistics = {chisquare}\n P-Value = {pvalue}\n Degree of Freedom = {freedom}\n Expected Values = {array}")
if pvalue >= 0.05:
    print("Aceitar hipótese nula")
else:
    print("Aceitar Hipótese Alternativa")
plt.figure(figsize = (18, 7))
sns.scatterplot(x = "eval", y = "beauty", data = df, s = 100, color = "red")
plt.title("Gráfico de dispersão da pontuação de avaliação (eval) por pontuação de encanto (beauty)", color = "blue", size = 20)
plt.xlabel("Pontuação de avaliação (eval)", color = "blue", size = 20)
plt.ylabel("Pontuação de encanto (beauty)", color = "blue", size = 20)
plt.xticks(size = 15)
plt.yticks(size = 15)
plt.show()
# Calculamos a correlação entre esses parâmetros

df[["beauty", "eval"]].corr()<jupyter_output><empty_output><jupyter_text>**Teste**<jupyter_code>p_stats, pvalue = pearsonr(df["beauty"], df["eval"])
print(f"Correlation = {p_stats}, P-Value = {pvalue}")<jupyter_output>Correlation = 0.1890390908404521, P-Value = 4.247115419812614e-05<jupyter_text>**Resultado do teste**<jupyter_code>if pvalue > 0.05:
    print("Aceitar hipótese nula")
else:
    print("Aceitar Hipótese Alternativa")<jupyter_output>Aceitar Hipótese Alternativa<jupyter_text>**Execute um t-test de duas amostras para amostras independentes**<jupyter_code>Sample1 = [9, 11, 10, 11, 10, 12, 9, 11, 12, 9, 10]
Sample2 = [10, 13, 10, 13, 12, 9, 11, 12, 12, 12, 13]
ttest_ind(Sample1, Sample2)<jupyter_output><empty_output><jupyter_text>**Mean μ = 63.18 inches and Standard Deviation σ= 13.27 inches. What is the Z-score when x = 91.54 inches?**Nas estatísticas, um escore-z (ou escore padrão) de uma observação é o número de desvios padrão acima ou abaixo da média da população.Para calcular um escore z, é necessário saber a média da população e o desvio padrão da população. Em casos onde é impossível medir cada observação de uma população, é possível estimar o desvio padrão usando uma amostra aleatória.* Para mais detalhes [fazer click aqui](https://www.statisticshowto.com/probability-and-statistics/z-score/).<jupyter_code>z_score = (91.54 - 63.16) / 13.27
z_score<jupyter_output><empty_output><jupyter_text>**Average Wage = 5.85, Standard Deviation = 0.35, The probability that a selected worker earns more than 6.9**<jupyter_code>prob = scipy.stats.norm.cdf((6.90 - 5.85) / 0.35)
print(1- prob)<jupyter_output>0.0013498980316301035<jupyter_text>**Mean = 490, Variance = 400, Probability that a randomly selected pill contains at least 500 mg of minerals**<jupyter_code>prob2 = scipy.stats.norm.cdf((500 - 490) / 20)
print(1 - prob2)<jupyter_output>0.3085375387259869<jupyter_text>BOSTON DataSet<jupyter_code>boston_url = 'https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-ST0151EN-SkillsNetwork/labs/boston_housing.csv'
boston_df=pd.read_csv(boston_url)
boston_df = boston_df.drop(columns = ["Unnamed: 0"])
boston_df.head(10)<jupyter_output><empty_output><jupyter_text>**Boxplot: valor médio de casas ocupadas pelo proprietário**<jupyter_code>plt.figure(figsize = (18, 7))
sns.boxplot(x = boston_df["MEDV"], color = "pink")
plt.title("Distribuição do valor médio das casas ocupadas pelo proprietário em $1000's", size = 15, color = "red")
plt.xticks(size = 15)
plt.yticks(size = 15)
plt.xlabel("Valor médio das casas ocupadas pelo proprietário em $1000's", color = "red", size = 15)
plt.show()<jupyter_output><empty_output><jupyter_text>**Casas em Charles River**<jupyter_code>plt.figure(figsize = (18, 7))
sns.countplot(x = boston_df["CHAS"])
plt.xlabel("Casas em Charles River", size = 20)
plt.ylabel("Frequency", size = 20)
plt.xticks([0.0, 1.0], labels = ["No", "Yes"], size = 15)
plt.yticks(size = 15)
plt.show()<jupyter_output><empty_output><jupyter_text>**Valor medio por Idade da casa**<jupyter_code>def age(x):
    if x <= 35:
        return "new"
    elif x > 35 and x <= 70:
        return "moderada"
    else:
        return "velha"
    
boston_df["age_group"] = boston_df["AGE"].apply(age)
plt.figure(figsize = (18, 7))
sns.boxplot(x = boston_df["age_group"], y = boston_df["MEDV"], palette = "prism")
plt.title("Faixa etária das residências por valor médio das residências em $1000's", size = 20, color = "red")
plt.xlabel("Faixa etária da casa", size = 20, color = "red")
plt.ylabel("Valor médio de casas em $1000's", size = 20, color = "red")
plt.xticks(size = 15)
plt.yticks(size = 15)
plt.show()<jupyter_output><empty_output><jupyter_text>**Gráfico de dispersão entre as concentrações de óxido nítrico (NOX) e a proporção de Acres comerciales no minoristas por cidade**<jupyter_code>plt.figure(figsize = (18, 7))
sns.scatterplot(x = "NOX", y = "INDUS", data = boston_df, s = 100, color = "blue")
plt.title("Gráfico de dispersão entre as concentrações de óxido nítrico e a proporção de acres de negócios não varejistas por cidade", color = "red", size = 15)
plt.xlabel("Óxido nítrico", size = 20, color = "red")
plt.ylabel("Acres comerciales no minoristas", size = 20, color = "red")
plt.xticks(size = 15)
plt.yticks(size = 15)
plt.show()<jupyter_output><empty_output><jupyter_text>**Histograma para a variável de proporção aluno/professor**<jupyter_code>plt.figure(figsize = (15, 6))
sns.histplot(x = boston_df["PTRATIO"], color = "yellow", bins = 5)
plt.title("Histograma para a variável de proporção aluno/professor", color = "brown", size = 15)
plt.xlabel("Relação aluno/professor", size = 15, color = "brown")
plt.ylabel("Frequência", size = 20, color = "brown")
plt.xticks(size = 15)
plt.yticks(size = 15)
plt.show()<jupyter_output><empty_output><jupyter_text>Existe uma diferença significativa no valor médio das casas delimitadas pelo rio Charles ou não? (**T-Test** para amostras independentes) T-TestHipótese Nula: Preço da casa independente de Charles RiverHipótese alternativa: Preço da casa dependente de Charles River<jupyter_code>hcr = boston_df[boston_df["CHAS"] == 1]["MEDV"]
hncr = boston_df[boston_df["CHAS"] == 0]["MEDV"]<jupyter_output><empty_output><jupyter_text>**Test**<jupyter_code>t_stats, p_value = ttest_ind(hcr, hncr)
print(f"T-Statistics = {t_stats}, P-Value = {p_value}")<jupyter_output>T-Statistics = 3.996437466090509, P-Value = 7.390623170519905e-05<jupyter_text>**Resultado dos testes**<jupyter_code>if p_value > 0.05:
    print("Accept Null Hypothesis")
else:
    print("Accept Alternate Hypothesis")<jupyter_output>Accept Alternate Hypothesis<jupyter_text>Há uma diferença nos valores da mediana (**Median**) das casas (MEDV) para cada proporção de unidades ocupadas pelo proprietário construídas antes de $1940$ (AGE)? (ANOVA)  ANOVAHipótese Nula: O preço da casa não é diferente por idadeHipótese alternativa: O preço da casa é diferente por **AGE**<jupyter_code>new_house = boston_df[boston_df["age_group"] == "new"]["MEDV"]
moderate_house = boston_df[boston_df["age_group"] == "moderate"]["MEDV"]
old_house = boston_df[boston_df["age_group"] == "old"]["MEDV"]<jupyter_output><empty_output><jupyter_text>**Teste**<jupyter_code>f_stats, p_value = f_oneway(new_house, moderate_house, old_house)
print(f"F-Statistics = {f_stats}, P-Value = {p_value}")<jupyter_output>F-Statistics = nan, P-Value = nan<jupyter_text>**Resultado dos testes**<jupyter_code>if p_value > 0.05:
    print("Accept Null Hypothesis")
else:
    print("Accept Alternate Hypothesis")<jupyter_output>Accept Alternate Hypothesis<jupyter_text>Podemos concluir que não há relação entre as concentrações de óxido nítrico e a proporção de acres de negócios não varejistas por cidade? (Correlação de Pearson) Pearson CorrelationHipótese Nula: NÃO há relação entre as concentrações de óxido nítrico e a proporção de acres comerciais não varejistas por cidadeHipótese alternativa: Há uma relação entre as concentrações de óxido nítrico e a proporção de acres comerciais não varejistas por cidade<jupyter_code>pc_stats, p_value = pearsonr(boston_df["NOX"], boston_df["INDUS"])
print(f"Pearson Correlation = {pc_stats}, P-Value = {p_value}")<jupyter_output>Pearson Correlation = 0.7636514469209154, P-Value = 7.913361061236894e-98<jupyter_text>**Resultado dos testes**<jupyter_code>if p_value > 0.05:
    print("Accept Null Hypothesis")
else:
    print("Accept Alternate Hypothesis")<jupyter_output>Accept Alternate Hypothesis
{'fraction_non_alphanumeric': 0.13754501330828245, 'fraction_numerical': 0.03585407859715046, 'mean_word_length': 6.808679706601467, 'pattern_counts': {'":': 0, '<': 128, '<?xml version=': 0, '>': 133, 'https://': 3, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 4, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '34', 'dir': 'jupyter-structured-clean-dedup', 'id': '76619', 'license': 'MIT', 'n_tokens_mistral': 5327, 'n_tokens_neox': 4894, 'n_words': 1109, 'path': 'Remember_statistics_Data_Science.ipynb', 'repo_name': 'EddyGiusepe/Remember_Statistics_for_Data_Science_with_Python', 'size': '12791'}