<jupyter_start><jupyter_text>Tipos de dados:Númericas: variáveis discretas: sibSpvariáveis contínuas: fare e agebinária: survived(booleano)Categóricas:nominais: Name, Sexordinal: cabinAnálise de preenchimento dos dados<jupyter_code>#Avalia oq são os nulos com a area responsável pela base/ técnicas de preenchimento
print("Toatl de passageiros:", df.PassengerId.count())
print("\nTotal de informação nula na base:",df.isnull().sum().sum())
print("\nTotalde nulos por variável:\n", df.isnull().sum()[df.isnull().sum()>0].sort_values(ascending=False))
print("\nTotal de linhas complementares preenchidas", df.dropna().shape[0])<jupyter_output>Toatl de passageiros: 891

Total de informação nula na base: 866

Totalde nulos por variável:
 Cabin       687
Age         177
Embarked      2
dtype: int64

Total de linhas complementares preenchidas 183<jupyter_text>Análise de outlierEncontrar valores atípicos nos dados<jupyter_code>df.describe()<jupyter_output><empty_output><jupyter_text>Vamos analisar melhor a váriavel fare. Parece que temos alguns dados discrepantes, puxando a média para cima. Observem a diferença entre média e mediana!<jupyter_code>#Fare é variável númerica contínua logo uma boa escolha de gráfico é o histograma.
plt.hist(df.Fare, bins = 30)
plt.title('Distribuição da variável Fare')
plt.show()
#90% das passagens pagas são menores que 78.
np.percentile(df.Fare,90)
#Outra vizualização seria o boxplot:
plt.boxplot(df.Fare)
plt.show()<jupyter_output><empty_output><jupyter_text>Os outliers podem acabar distorcendo nossa visão sobre um conjunto de dados. Sempre que um conjunto de dados tiver outliers, precisando de qual métrica usar para resumir os dados, qual modelo usar e também conhecer técnicas para trabalhar com eles.<jupyter_code>#Motivação com regressão linear:

plt.figure(figsize=[10,5])
plt.scatter(df.Age, df.Fare)
plt.xlabel("Age")
plt.ylabel('Fare')

plt.plot([0,70], [0,120], c='green')
plt.plot([0,70], [0,450], '--', c='red')
plt.show()
#Função que calcula todos os componentes do boxplot e assim é possivel identificar os outliers a partir do LS e LI.
#vejam que o 1.5 é um parâmetro. Esse valor pode ser alterado por  você de acordo com seu estudo. Só esteja ciente
# que sempre que mudar esse valor, mudamos a quantidade de outliers detectada.

def detecta_outlier(x, limite = 1.5):
    dq = np.percentile(x, 75) - np.percentile(x, 25)
    limite_inf = np.maximum(np.percentile(x, 25) - limite * dq, np.min(x))
    limite_sup = np.minimum(np.percentile(x, 75) + limite * dq, np.max(x))
    print("Limite Inferior: ", limite_inf)
    print("Limite Superior: ", limite_sup)
    return np.where((x < limte_inf) | (x > limite_sup), 1, 0)
outliers_fare = detecta_outlier(df.Fare)
pd.Dataframe(np.c_[df.fare.values, outliers_fare], columns=['Fare', 'outlier_fare'])<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.11224849982350865, 'fraction_numerical': 0.020825979527003175, 'mean_word_length': 5.590697674418605, 'pattern_counts': {'":': 0, '<': 17, '<?xml version=': 0, '>': 18, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, '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': '4', 'dir': 'jupyter-structured-clean-dedup', 'id': '182938', 'license': 'MIT', 'n_tokens_mistral': 1142, 'n_tokens_neox': 1044, 'n_words': 295, 'path': 'Matplotlib.ipynb', 'repo_name': 'dimagela29/Formacao_cientista_de_dados', 'size': '2833'}