SlideShare ist ein Scribd-Unternehmen logo
1 von 24
Downloaden Sie, um offline zu lesen
22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory
https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 1/24
#@title Texto de título predefinido
#Importação de todas as bibliotecas
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.decomposition import PCA
from sklearn.preprocessing import OrdinalEncoder
%matplotlib inline
#Importando a dataset portugues
port=pd.read_csv('/student-por.csv')
#verificando informações básicas sobre a base de dados
port.info()
<class 'pandas.core.frame.DataFrame'>

RangeIndex: 649 entries, 0 to 648
Data columns (total 33 columns):

# Column Non-Null Count Dtype 

--- ------ -------------- ----- 

0 school 649 non-null object

1 sex 649 non-null object

2 age 649 non-null int64 

3 address 649 non-null object

4 famsize 649 non-null object

5 Pstatus 649 non-null object

6 Medu 649 non-null int64 

7 Fedu 649 non-null int64 

8 Mjob 649 non-null object

9 Fjob 649 non-null object

10 reason 649 non-null object

11 guardian 649 non-null object
22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory
https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 2/24
12 traveltime 649 non-null int64 

13 studytime 649 non-null int64 

14 failures 649 non-null int64 

15 schoolsup 649 non-null object

16 famsup 649 non-null object

17 paid 649 non-null object

18 activities 649 non-null object

19 nursery 649 non-null object

20 higher 649 non-null object

21 internet 649 non-null object

22 romantic 649 non-null object

23 famrel 649 non-null int64 

24 freetime 649 non-null int64 

25 goout 649 non-null int64 

26 Dalc 649 non-null int64 

27 Walc 649 non-null int64 

28 health 649 non-null int64 

29 absences 649 non-null int64 

30 G1 649 non-null int64 

31 G2 649 non-null int64 

32 G3 649 non-null int64 

dtypes: int64(16), object(17)

memory usage: 167.4+ KB

#Visualizando a base de dados português

display(port)
22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory
https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 3/24
school sex age address famsize Pstatus Medu Fedu Mjob Fjob ... famrel freetime goout Dalc Walc health
0 GP F 18 U GT3 A 4 4 at_home teacher ... 4 3 4 1 1 3
1 GP F 17 U GT3 T 1 1 at_home other ... 5 3 3 1 1 3
2 GP F 15 U LE3 T 1 1 at_home other ... 4 3 2 2 3 3
3 GP F 15 U GT3 T 4 2 health services ... 3 2 2 1 1 5
4 GP F 16 U GT3 T 3 3 other other ... 4 3 2 1 2 5
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
644 MS F 19 R GT3 T 2 3 services other ... 5 4 2 1 2 5
645 MS F 18 U LE3 T 3 1 teacher services ... 4 3 4 1 1 1
646 MS F 18 U GT3 T 1 1 other other ... 1 1 1 1 1 5
647 MS M 17 U LE3 T 3 1 services services ... 2 4 5 3 4 2
648 MS M 18 R LE3 T 3 2 services other ... 4 4 1 3 4 5
649 rows × 33 columns
#Vamos incluir uma coluna com o nome do curso ('Matemática ou Português')

port.insert(30,'Course Subject','Portuguese')

display(port)
22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory
https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 4/24
school sex age address famsize Pstatus Medu Fedu Mjob Fjob ... famrel freetime goout Dalc Walc health
0 GP F 18 U GT3 A 4 4 at_home teacher ... 4 3 4 1 1 3
1 GP F 17 U GT3 T 1 1 at_home other ... 5 3 3 1 1 3
2 GP F 15 U LE3 T 1 1 at_home other ... 4 3 2 2 3 3
3 GP F 15 U GT3 T 4 2 health services ... 3 2 2 1 1 5
4 GP F 16 U GT3 T 3 3 other other ... 4 3 2 1 2 5
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
644 MS F 19 R GT3 T 2 3 services other ... 5 4 2 1 2 5
645 MS F 18 U LE3 T 3 1 teacher services ... 4 3 4 1 1 1
646 MS F 18 U GT3 T 1 1 other other ... 1 1 1 1 1 5
647 MS M 17 U LE3 T 3 1 services services ... 2 4 5 3 4 2
648 MS M 18 R LE3 T 3 2 services other ... 4 4 1 3 4 5
649 rows × 33 columns
#Importando os dados do curso de matemática

mat=pd.read_csv('/student-mat.csv')

display(mat)
22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory
https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 5/24
school sex age address famsize Pstatus Medu Fedu Mjob Fjob ... famrel freetime goout Dalc Walc health
0 GP F 18 U GT3 A 4 4 at_home teacher ... 4 3 4 1 1 3
1 GP F 17 U GT3 T 1 1 at_home other ... 5 3 3 1 1 3
2 GP F 15 U LE3 T 1 1 at_home other ... 4 3 2 2 3 3
3 GP F 15 U GT3 T 4 2 health services ... 3 2 2 1 1 5
4 GP F 16 U GT3 T 3 3 other other ... 4 3 2 1 2 5
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
390 MS M 20 U LE3 A 2 2 services services ... 5 5 4 4 5 4
391 MS M 17 U LE3 T 3 1 services services ... 2 4 5 3 4 2
392 MS M 21 R GT3 T 1 1 other other ... 5 5 3 3 3 3
393 MS M 18 R LE3 T 3 2 services other ... 4 4 1 3 4 5
394 MS M 19 U LE3 T 1 1 other at_home ... 3 2 3 3 3 5
395 rows × 33 columns
#Adicionando a coluna "Subject course" para a base de dados de matemática

mat.insert(30,'Course Subject','Math')

school sex age address famsize Pstatus Medu Fedu Mjob Fjob ... freetime goout Dalc Walc health absenc
0 GP F 18 U GT3 A 4 4 at_home teacher ... 3 4 1 1 3
1 GP F 17 U GT3 T 1 1 at_home other ... 3 3 1 1 3
2 GP F 15 U LE3 T 1 1 at_home other ... 3 2 2 3 3
3 GP F 15 U GT3 T 4 2 health services ... 2 2 1 1 5
4 GP F 16 U GT3 T 3 3 other other ... 3 2 1 2 5
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
390 MS M 20 U LE3 A 2 2 services services ... 5 4 4 5 4
391 MS M 17 U LE3 T 3 1 services services ... 4 5 3 4 2
392 MS M 21 R GT3 T 1 1 other other ... 5 3 3 3 3
393 MS M 18 R LE3 T 3 2 services other ... 4 1 3 4 5
394 MS M 19 U LE3 T 1 1 other at_home ... 2 3 3 3 5
395 rows × 34 columns
#Display com a inserção da nova coluna

display(mat)
22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory
https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 6/24
#Juntando os dados para os cursos de português e matemática
students=pd.concat([mat,port],axis=0,ignore_index=True)
school sex age address famsize Pstatus Medu Fedu Mjob Fjob ... freetime goout Dalc Walc health absenc
0 GP F 18 U GT3 A 4 4 at_home teacher ... 3 4 1 1 3
1 GP F 17 U GT3 T 1 1 at_home other ... 3 3 1 1 3
2 GP F 15 U LE3 T 1 1 at_home other ... 3 2 2 3 3
3 GP F 15 U GT3 T 4 2 health services ... 2 2 1 1 5
4 GP F 16 U GT3 T 3 3 other other ... 3 2 1 2 5
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
1039 MS F 19 R GT3 T 2 3 services other ... 4 2 1 2 5
1040 MS F 18 U LE3 T 3 1 teacher services ... 3 4 1 1 1
1041 MS F 18 U GT3 T 1 1 other other ... 1 1 1 1 5
1042 MS M 17 U LE3 T 3 1 services services ... 4 5 3 4 2
1043 MS M 18 R LE3 T 3 2 services other ... 4 1 3 4 5
1044 rows × 34 columns
display(students)
#Da base students, podemos selecionar apenas os atributos de cada estudante excluindo as classes que serão

#os valores a serem preditos do modelo. E então também podemos obter as classes separadamente
22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory
https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 7/24
atributos=students.drop(columns=['Course Subject','G1','G2','G3'])

classes=students[['G1','G2','G3']]

Questão 1
#Resposta aos itens das questões 1

# Alternativa a)

#Determinando o número de atributos

num_atrib=len(atributos.columns) #O número de atributos é igual a 30

print('O número de atributos é igual a: ',num_atrib)

#Determinando o número de instâncias

num_instancias=len(atributos.index) #O número de instância é igual a 1044

print('O número de instâncias é igual a: ',num_instancias)

#Determinando o número de classes
num_classes=len(classes.columns) #O número de classes é igual a 30

print('O número de classes é igual a: ',num_classes)

O número de atributos é igual a: 30

O número de instâncias é igual a: 1044

O número de classes é igual a: 3
#Questão 1 item b)

#Vamos obter um info sobre a base atributos

atributos.info()

<class 'pandas.core.frame.DataFrame'>

RangeIndex: 1044 entries, 0 to 1043
22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory
https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 8/24
Data columns (total 30 columns):

# Column Non-Null Count Dtype 

--- ------ -------------- ----- 

0 school 1044 non-null object

1 sex 1044 non-null object

2 age 1044 non-null int64 

3 address 1044 non-null object

4 famsize 1044 non-null object

5 Pstatus 1044 non-null object

6 Medu 1044 non-null int64 

7 Fedu 1044 non-null int64 

8 Mjob 1044 non-null object

9 Fjob 1044 non-null object

10 reason 1044 non-null object

11 guardian 1044 non-null object

12 traveltime 1044 non-null int64 

13 studytime 1044 non-null int64 

14 failures 1044 non-null int64 

15 schoolsup 1044 non-null object

16 famsup 1044 non-null object

17 paid 1044 non-null object

18 activities 1044 non-null object

19 nursery 1044 non-null object

20 higher 1044 non-null object

21 internet 1044 non-null object

22 romantic 1044 non-null object

23 famrel 1044 non-null int64 

24 freetime 1044 non-null int64 

25 goout 1044 non-null int64 

26 Dalc 1044 non-null int64 

27 Walc 1044 non-null int64 

28 health 1044 non-null int64 

29 absences 1044 non-null int64 

dtypes: int64(13), object(17)

memory usage: 244.8+ KB

#Continuação Questão 1 b)

#Agora vamos ver quantos atributos são categóricos e quantos são numéricos
22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory
https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 9/24
#os atributos do tipo objeto são variáveis do tipo categórica

categorico=atributos.select_dtypes(include='object')

print('Os atributos do tipo categórico são: ', len(categorico.columns))

#Vamos ver os atributos que são do tipo inteiro

numerico=atributos.select_dtypes(include='int64')

print('Os atributos do tipo numerico são: ', len(numerico.columns))

#No entanto, apesar de 13 atributos aparecem como numéricos. No entanto, estes atributos são categóricos, uma vez que foram

#atributos a eles valores numéricos para especificar uma classe.

#Por exemplo o atributo Dalc correspondente ao consumo diário de alcool de cada estudante: onde 1 representa muito baixo

#e 5 representa muito alto. Isto, apesar de ser um número, na verdade se trata de uma variável categórica

#Assim sendo, na verdade apenas 2 atributos são numéricos verdadeiramente. Os quais são a idade ('age') e o número

#de faltas nas aulas ('Absences'). Posteriormente, estes dados serão transformados em numéricos

Os atributos do tipo categórico são: 17

Os atributos do tipo numerico são: 13

#Questão 1 c)
#Para os atributos categóricos
#Selecionando os indices dos atributos categóricos (excluindo age e absences)
index_cat=categorico.columns 
#Criando um vetor de classes categoricas do tamanho do index_cat
classes_cat=np.zeros(len(index_cat))
#Calculando o número de classes existentes em cada variável categórica
for i in range(len(index_cat)):
    classes_cat[i]=len(categorico.iloc[:,i].value_counts())
    
#Transformando a variável classes categóricas em uma série do Pandas
classes cat=pd.Series(classes cat,index=index cat)
22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory
https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 10/24
school 2.0

sex 2.0

address 2.0

famsize 2.0

Pstatus 2.0

Mjob 5.0

Fjob 5.0

reason 4.0

guardian 3.0

schoolsup 2.0

famsup 2.0

paid 2.0

activities 2.0

nursery 2.0

higher 2.0

internet 2.0

romantic 2.0

dtype: float64
_ p ( _ , _ )
display(classes_cat) #Visualizando o número de classes existentes em cada variável categórica
#Questão 1 d) Variáveis numéricas
#Vamos passar o comando info para verificar o tipo das variáveis

display(numerico.info())

#Logo observa-se que todas as variáveis são escalares (não-vetores) do tipo inteira (Dtype: int64)

#Vamos passar o comando describe para ver as escalas presentes nos dados

display(numerico.describe())
22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory
https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 11/24
<class 'pandas.core.frame.DataFrame'>

RangeIndex: 1044 entries, 0 to 1043

Data columns (total 13 columns):

# Column Non-Null Count Dtype

--- ------ -------------- -----

0 age 1044 non-null int64

1 Medu 1044 non-null int64

2 Fedu 1044 non-null int64

3 traveltime 1044 non-null int64

4 studytime 1044 non-null int64

5 failures 1044 non-null int64

6 famrel 1044 non-null int64

7 freetime 1044 non-null int64

8 goout 1044 non-null int64

9 Dalc 1044 non-null int64

10 Walc 1044 non-null int64

11 health 1044 non-null int64

12 absences 1044 non-null int64

dtypes: int64(13)

memory usage: 106.2 KB

None
age Medu Fedu traveltime studytime failures famrel freetime goout D
count 1044.000000 1044.000000 1044.000000 1044.000000 1044.000000 1044.000000 1044.000000 1044.000000 1044.000000 1044.000
mean 16.726054 2.603448 2.387931 1.522989 1.970307 0.264368 3.935824 3.201149 3.156130 1.494
std 1.239975 1.124907 1.099938 0.731727 0.834353 0.656142 0.933401 1.031507 1.152575 0.911
min 15.000000 0.000000 0.000000 1.000000 1.000000 0.000000 1.000000 1.000000 1.000000 1.000
25% 16.000000 2.000000 1.000000 1.000000 1.000000 0.000000 4.000000 3.000000 2.000000 1.000
50% 17.000000 3.000000 2.000000 1.000000 2.000000 0.000000 4.000000 3.000000 3.000000 1.000
75% 18.000000 4.000000 3.000000 2.000000 2.000000 0.000000 5.000000 4.000000 4.000000 2.000
max 22.000000 4.000000 4.000000 4.000000 4.000000 3.000000 5.000000 5.000000 5.000000 5.000
Como a maioria das variáveis númericas são representadas como categorias numéricas (0,1,2,3,4,5..). Logo, a escala fica na faixa que
corresponde a quantidade de classes existentes. Para a variável age que é verdadeiramente numérica, esta variável fica na faixa de 15 a 22
22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory
https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 12/24
anos, que é idade aproximada de conclusão do ensino médio. Para a variável númerica absences (faltas) a ordem de grandeza está entre 0 a
75, que foram o menor e maior valor observado de faltas entre todos os alunos.
#Questão 1 e)

#Dados faltosos: Verificação pela função isnull

atributos.isnull().sum() 

#Ou seja, observa-se pelo comando acima que a base de dados está limpa em termos de elementos faltantes, sendo

#zero para todas as variáveis (sejam elas categóricas ou numéricas)

school 0

sex 0

age 0

address 0

famsize 0

Pstatus 0

Medu 0

Fedu 0

Mjob 0

Fjob 0

reason 0

guardian 0

traveltime 0

studytime 0

failures 0

schoolsup 0

famsup 0

paid 0

activities 0

nursery 0

higher 0

internet 0

romantic 0

famrel 0

freetime 0
22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory
https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 13/24
goout 0

Dalc 0

Walc 0

health 0

absences 0

dtype: int64
Questão 2
#A questão 2 envolve as primeiras manipulações com os dados para organizar a base:

#Vamos aplicar a transformação das variáveis discretas para numéricas

index_cat=categorico.columns 

ordinal=OrdinalEncoder()

ordinal.fit(categorico)

cat_to_num=pd.DataFrame(ordinal.transform(categorico),columns=index_cat)

cat_to_num.head(10)
22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory
https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 14/24
school sex address famsize Pstatus Mjob Fjob reason guardian schoolsup famsup paid activities nursery higher i
0 0.0 0.0 1.0 0.0 0.0 0.0 4.0 0.0 1.0 1.0 0.0 0.0 0.0 1.0 1.0
1 0.0 0.0 1.0 0.0 1.0 0.0 2.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0
2 0.0 0.0 1.0 1.0 1.0 0.0 2.0 2.0 1.0 1.0 0.0 1.0 0.0 1.0 1.0
3 0.0 0.0 1.0 0.0 1.0 1.0 3.0 1.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0
4 0.0 0.0 1.0 0.0 1.0 2.0 2.0 1.0 0.0 0.0 1.0 1.0 0.0 1.0 1.0
5 0.0 1.0 1.0 1.0 1.0 3.0 2.0 3.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0
6 0.0 1.0 1.0 1.0 1.0 2.0 2.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0
7 0.0 0.0 1.0 0.0 0.0 2.0 4.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 1.0
8 0.0 1.0 1.0 1.0 0.0 3.0 2.0 1.0 1.0 0.0 1.0 1.0 0.0 1.0 1.0
9 0.0 1.0 1.0 0.0 1.0 2.0 2.0 1.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0
school sex address famsize Pstatus Mjob Fjob reason guardian schoolsup ... traveltime studytime failures fam
0 0.0 0.0 1.0 0.0 0.0 0.0 4.0 0.0 1.0 1.0 ... 2 2 0
1 0.0 0.0 1.0 0.0 1.0 0.0 2.0 0.0 0.0 0.0 ... 1 2 0
2 0.0 0.0 1.0 1.0 1.0 0.0 2.0 2.0 1.0 1.0 ... 1 2 3
3 0.0 0.0 1.0 0.0 1.0 1.0 3.0 1.0 1.0 0.0 ... 1 3 0
4 0.0 0.0 1.0 0.0 1.0 2.0 2.0 1.0 0.0 0.0 ... 1 2 0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
1039 1.0 0.0 0.0 0.0 1.0 3.0 2.0 0.0 1.0 0.0 ... 1 3 1
1040 1.0 0.0 1.0 1.0 1.0 4.0 3.0 0.0 1.0 0.0 ... 1 2 0
1041 1.0 0.0 1.0 0.0 1.0 2.0 2.0 0.0 1.0 0.0 ... 2 2 0
1042 1.0 1.0 1.0 1.0 1.0 3.0 3.0 0.0 1.0 0.0 ... 2 1 0
1043 1.0 1.0 0.0 1.0 1.0 3.0 2.0 0.0 1.0 0.0 ... 3 1 0
1044 rows × 30 columns
#Agora vamos concatenar as variáveis categóricas transformadas em numéricas junto com as variáveis numéricas

base_modificada=pd.concat([cat_to_num,numerico],axis=1)

display(base_modificada)

Questão 3
22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory
https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 15/24
#Avaliando a base em termo das idades dos alunos
base_modificada['age'].value_counts(bins=5)
#Observa-se que há apenas 14 amostras entre as idades superiores a 19 até 22. Ou seja, serão eliminadas da base de dados
#valores de idade maiores que 19 anos, por não serem representativas na base
(14.992, 16.4] 475

(17.8, 19.2] 278

(16.4, 17.8] 277

(19.2, 20.6] 9

(20.6, 22.0] 5

Name: age, dtype: int64
#Removendo os dados de idade
BaseReduzida1=base_modificada.drop(base_modificada[base_modificada.age > 19].index)
#Observa que os 14 dados de idade acima de 19 anos foram eliminados
display(BaseReduzida1)
22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory
https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 16/24
school sex address famsize Pstatus Mjob Fjob reason guardian schoolsup ... traveltime studytime failures fam
0 0.0 0.0 1.0 0.0 0.0 0.0 4.0 0.0 1.0 1.0 ... 2 2 0
1 0.0 0.0 1.0 0.0 1.0 0.0 2.0 0.0 0.0 0.0 ... 1 2 0
2 0.0 0.0 1.0 1.0 1.0 0.0 2.0 2.0 1.0 1.0 ... 1 2 3
3 0.0 0.0 1.0 0.0 1.0 1.0 3.0 1.0 1.0 0.0 ... 1 3 0
4 0.0 0.0 1.0 0.0 1.0 2.0 2.0 1.0 0.0 0.0 ... 1 2 0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
1039 1.0 0.0 0.0 0.0 1.0 3.0 2.0 0.0 1.0 0.0 ... 1 3 1
1040 1.0 0.0 1.0 1.0 1.0 4.0 3.0 0.0 1.0 0.0 ... 1 2 0
1041 1.0 0.0 1.0 0.0 1.0 2.0 2.0 0.0 1.0 0.0 ... 2 2 0
1042 1.0 1.0 1.0 1.0 1.0 3.0 3.0 0.0 1.0 0.0 ... 2 1 0
1043 1.0 1.0 0.0 1.0 1.0 3.0 2.0 0.0 1.0 0.0 ... 3 1 0
1030 rows × 30 columns
#Vamos avaliar agora a variável faltas absences

BaseReduzida1['absences'].value_counts(bins=4)

#Observa-se que 1003 dos 1030 dados restantes estão dispostos entre 0 a 18.75 faltas. Ou seja, isso quer dizer que igual

#acima de 19 faltas, há poucos dados que não são representativos no conjunto por isso serão excluídos.

(-0.076, 18.75] 1003

(18.75, 37.5] 22

(37.5, 56.25] 4

(56.25, 75.0] 1

Name: absences, dtype: int64
#Removendo os dados de absences

BaseReduzida1.drop(BaseReduzida1[BaseReduzida1.absences >= 19].index, inplace=True)

#Observa que os 26 dados de absences acima ou igual a 19 faltas foram eliminados

display(BaseReduzida1)
22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory
https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 17/24
school sex address famsize Pstatus Mjob Fjob reason guardian schoolsup ... traveltime studytime failures fam
0 0.0 0.0 1.0 0.0 0.0 0.0 4.0 0.0 1.0 1.0 ... 2 2 0
1 0.0 0.0 1.0 0.0 1.0 0.0 2.0 0.0 0.0 0.0 ... 1 2 0
2 0.0 0.0 1.0 1.0 1.0 0.0 2.0 2.0 1.0 1.0 ... 1 2 3
3 0.0 0.0 1.0 0.0 1.0 1.0 3.0 1.0 1.0 0.0 ... 1 3 0
4 0.0 0.0 1.0 0.0 1.0 2.0 2.0 1.0 0.0 0.0 ... 1 2 0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
1039 1.0 0.0 0.0 0.0 1.0 3.0 2.0 0.0 1.0 0.0 ... 1 3 1
1040 1.0 0.0 1.0 1.0 1.0 4.0 3.0 0.0 1.0 0.0 ... 1 2 0
1041 1.0 0.0 1.0 0.0 1.0 2.0 2.0 0.0 1.0 0.0 ... 2 2 0
1042 1.0 1.0 1.0 1.0 1.0 3.0 3.0 0.0 1.0 0.0 ... 2 1 0
1043 1.0 1.0 0.0 1.0 1.0 3.0 2.0 0.0 1.0 0.0 ... 3 1 0
1003 rows × 30 columns
Como resultado do método de remoção de outliers a partir da contagem da frequência de aparição dos termos verdadeiramente numéricos
(age e absences). Foi possível remover 41 dados, trazendo a base de 1044 amostras para 1003 amostras, permanecendo com 30 atributos na
base de dados.
Questão 4
Questão 5
#Como métrica para seleção de determinados atributos, iremos utilizar um filtro baseada no coeficiente de

#Correlação de Pearson. A correlação de Pearson mede o grau de correlação linear entre duas variáveis
22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory
https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 18/24
#Valores próximo a 1 indicam forte dependência linear positiva e valores próxima a -1 forte dependência linear negativa

#Valores de correlação perto de 0, indicam ausência de correlação linear.

#Obtém-se a correlação de Pearson diretamente pela função df.corr()

#Vamos importar a biblioteca matplotlib e seaborn para ver o gráfico de correlação

corr=BaseReduzida1.corr()

#Plot the heatmap of correlation matrix for features X

plt.figure(figsize=(25,18))

sns.heatmap(corr,annot=True,center=0)
22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory
https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 19/24
<AxesSubplot:>
A partir da representação da Matriz de Correlação ( Perason) observa-se que a base acima é praticamente toda descorrelacionada. No
entanto, há dois termos de correlação cruzada que são maiores que 0.6. O que é uma correlação muito maior que os outros valores da base.
22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory
https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 20/24
O primeiro termo de correlação cruzada entre fathers e mothers education que é igual a 0.65. Este fato deve ocorrer porque não é uma certa
tendência de que pessoas que tenham se formado no ensino superior se casem com pessoas de mesma condição, sendo que o mesmo
ocorre também para pessoas que não se formaram no ensino superior e tendem a casar com pessoas que também não tiveram acesso ao
ensino superior. Dessa forma, pode-se pressupor que ao utilizar apenas uma dessas métricas seja suficiente para a análise dos dados. Por
isso, será excluído fathers education, uma vez que usualmente a mãe em nossa sociedade é quem acaba tendo maior responsabilidade sobre
o filho. No entanto, ressalta-se que essa escolha é arbitrária e poderia ser mantida o atributo fathers education ao invés de mathers education.
O segundo termo de correlação cruzada alta é entre workday-alcohol-comsumption e weekend-alcohol-comsuption cujo valor é igual a 0.63.
Esta correlação alta infere-se com base no fato de que pessoas que consomem mais álcool em dias de semana (dias de trabalho) tendem a
também consumir mais álcool aos fins de semana. E como, o objetivo é predizer as notas finais dos cursos de matemática será escolhido
como atributo para se manter na base a variável Dalc (workday-alcohol-comsuption), uma vez que, se pressupõe que o consumo excessivo de
álcool durante a semana teria maior afeto na nota de um teste do que no consumo aos fins de semana.
Questão 6
#Eliminando os atributos Fedu e Walc

BaseReduzida2=BaseReduzida1.drop(columns=['Fedu','Walc'])

display(BaseReduzida2)
22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory
https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 21/24
school sex address famsize Pstatus Mjob Fjob reason guardian schoolsup ... Medu traveltime studytime failure
0 0.0 0.0 1.0 0.0 0.0 0.0 4.0 0.0 1.0 1.0 ... 4 2 2
1 0.0 0.0 1.0 0.0 1.0 0.0 2.0 0.0 0.0 0.0 ... 1 1 2
2 0.0 0.0 1.0 1.0 1.0 0.0 2.0 2.0 1.0 1.0 ... 1 1 2
3 0.0 0.0 1.0 0.0 1.0 1.0 3.0 1.0 1.0 0.0 ... 4 1 3
4 0.0 0.0 1.0 0.0 1.0 2.0 2.0 1.0 0.0 0.0 ... 3 1 2
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .
1039 1.0 0.0 0.0 0.0 1.0 3.0 2.0 0.0 1.0 0.0 ... 2 1 3
1040 1.0 0.0 1.0 1.0 1.0 4.0 3.0 0.0 1.0 0.0 ... 3 1 2
1041 1.0 0.0 1.0 0.0 1.0 2.0 2.0 0.0 1.0 0.0 ... 1 2 2
1042 1.0 1.0 1.0 1.0 1.0 3.0 3.0 0.0 1.0 0.0 ... 3 2 1
1043 1.0 1.0 0.0 1.0 1.0 3.0 2.0 0.0 1.0 0.0 ... 3 3 1
1003 rows × 28 columns
Com isso a base reduzida eliminando os dois atributos anteriormente citados ficou com 1003 amostras e 28 atributos.
Questão 7
#Vamos aplicar a técnica de PCA para extração de atributos.
pca=PCA(n_components=12)
pca.fit(BaseReduzida2)
print('A porcentagem de variância explicada pelo PCA em cada direção ortogonal é: ',pca.explained_variance_ratio_)
print('A variância total explicada pelo modelo PCA é: ',np.sum(pca.explained_variance_ratio_),'%')
A porcentagem de variância explicada pelo PCA em cada direção ortogonal é: [0.52404636 0.06883044 0.06274128 0.04978905 0.03874
0.0271087 0.02447616 0.02240142 0.01944636 0.01814193 0.01709241]

A variância total explicada pelo modelo PCA é: 0.9095381871190333 %

Ou seja, transformando os 28 atributos (com 2 já removidos anteriormente - BaseReduzida2) do problema em 12 novas direções principais
que são combinações lineares destes 28 atributos. Será possível reduzir a dimensionalidade do problema original de 28 para 12 sem interferir
22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory
https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 22/24
significativamente na variância captada pelo modelo. Uma vez que o modelo PCA com 12 atributos consegue explicar 90% do total variância
observada na base de dados original completa. A seguir iremos apresentar como a base de dados é transformada.
0 1 2 3 4 5 6 7 8 9 10 11
0 2.258322 1.144421 0.244795 -0.660412 -0.863878 0.508764 -0.738544 1.187843 -1.856944 -1.346022 -1.732801 -0.153472
1 0.155053 2.511152 -0.004079 0.513573 -0.315369 -0.570116 -1.368382 -0.206716 -0.688787 -0.042618 -0.044304 0.057420
2 6.191371 1.997491 0.808957 1.707169 0.845601 -1.750644 0.503036 -0.709853 0.240352 -0.180415 -0.020578 0.159295
3 -1.819603 -1.083187 -0.136213 2.501605 0.155695 -0.568213 0.044840 1.913987 -0.349452 -0.481550 -1.356821 0.483917
4 0.188476 -0.727425 -0.788204 1.844753 0.178152 -0.275915 -0.451374 0.260278 0.224789 -0.350927 -0.024004 -0.020368
... ... ... ... ... ... ... ... ... ... ... ... ...
998 0.251650 0.188222 -1.851403 0.240105 -0.436521 2.328089 -1.706025 -1.480079 0.789844 0.183064 -0.363848 0.585327
999 0.309896 -0.627946 1.717025 -1.893593 -2.276277 1.337052 -0.685832 -0.341805 -0.271531 0.800240 -0.008331 -0.660519
1000 2.240399 1.647629 -0.776463 3.178936 -1.325863 2.265280 1.538404 0.621457 1.156382 1.050953 -0.456935 -0.543449
1001 2.417901 -0.070697 0.262296 -2.685400 -2.119311 -0.216044 2.116586 0.433616 0.278001 0.053390 -0.221507 -0.312013
1002 0.299914 -0.306514 -1.977470 0.569296 -1.237650 1.480774 1.175720 -1.700767 0.523528 -1.392135 0.964070 1.329268
1003 rows × 12 columns
BaseReduzida3=pd.DataFrame(pca.fit_transform(BaseReduzida2))
display(BaseReduzida3)
Ou seja, eliminou-se de 28 atributos (BaseReduzida2) para 12 atributos (BaseReduzida3) captando 90% da variância explicada pelos dados
presentes na BaseReduzida2.
#Vamos por fim preencher a Tabela criando um dicionário e transformando em um dataframe
22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory
https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 23/24
Número de Instâncias Número de Atributos
Base Original 1044 30
Base Reduzida 1 1003 30
Base Reduzida 2 1003 28
Base Reduzida 3 1003 12
colunas={'Número de Instâncias': ['1044','1003','1003','1003'], 
         'Número de Atributos': ['30','30','28','12']}
#Vamos agora transformar o dicionário em dataframe
tabela=pd.DataFrame(colunas,index=['Base Original','Base Reduzida 1','Base Reduzida 2','Base Reduzida 3'])
display(tabela)
22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory
https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 24/24

Weitere ähnliche Inhalte

Empfohlen

PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Applitools
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at WorkGetSmarter
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...DevGAMM Conference
 
Barbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationBarbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationErica Santiago
 

Empfohlen (20)

PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
 
More than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike RoutesMore than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike Routes
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
 
Barbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationBarbie - Brand Strategy Presentation
Barbie - Brand Strategy Presentation
 

Descri_Check-point_2.ipynb - Colaboratory.pdf

  • 1. 22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 1/24 #@title Texto de título predefinido #Importação de todas as bibliotecas import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from sklearn.decomposition import PCA from sklearn.preprocessing import OrdinalEncoder %matplotlib inline #Importando a dataset portugues port=pd.read_csv('/student-por.csv') #verificando informações básicas sobre a base de dados port.info() <class 'pandas.core.frame.DataFrame'> RangeIndex: 649 entries, 0 to 648 Data columns (total 33 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 school 649 non-null object 1 sex 649 non-null object 2 age 649 non-null int64 3 address 649 non-null object 4 famsize 649 non-null object 5 Pstatus 649 non-null object 6 Medu 649 non-null int64 7 Fedu 649 non-null int64 8 Mjob 649 non-null object 9 Fjob 649 non-null object 10 reason 649 non-null object 11 guardian 649 non-null object
  • 2. 22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 2/24 12 traveltime 649 non-null int64 13 studytime 649 non-null int64 14 failures 649 non-null int64 15 schoolsup 649 non-null object 16 famsup 649 non-null object 17 paid 649 non-null object 18 activities 649 non-null object 19 nursery 649 non-null object 20 higher 649 non-null object 21 internet 649 non-null object 22 romantic 649 non-null object 23 famrel 649 non-null int64 24 freetime 649 non-null int64 25 goout 649 non-null int64 26 Dalc 649 non-null int64 27 Walc 649 non-null int64 28 health 649 non-null int64 29 absences 649 non-null int64 30 G1 649 non-null int64 31 G2 649 non-null int64 32 G3 649 non-null int64 dtypes: int64(16), object(17) memory usage: 167.4+ KB #Visualizando a base de dados português display(port)
  • 3. 22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 3/24 school sex age address famsize Pstatus Medu Fedu Mjob Fjob ... famrel freetime goout Dalc Walc health 0 GP F 18 U GT3 A 4 4 at_home teacher ... 4 3 4 1 1 3 1 GP F 17 U GT3 T 1 1 at_home other ... 5 3 3 1 1 3 2 GP F 15 U LE3 T 1 1 at_home other ... 4 3 2 2 3 3 3 GP F 15 U GT3 T 4 2 health services ... 3 2 2 1 1 5 4 GP F 16 U GT3 T 3 3 other other ... 4 3 2 1 2 5 ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 644 MS F 19 R GT3 T 2 3 services other ... 5 4 2 1 2 5 645 MS F 18 U LE3 T 3 1 teacher services ... 4 3 4 1 1 1 646 MS F 18 U GT3 T 1 1 other other ... 1 1 1 1 1 5 647 MS M 17 U LE3 T 3 1 services services ... 2 4 5 3 4 2 648 MS M 18 R LE3 T 3 2 services other ... 4 4 1 3 4 5 649 rows × 33 columns #Vamos incluir uma coluna com o nome do curso ('Matemática ou Português') port.insert(30,'Course Subject','Portuguese') display(port)
  • 4. 22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 4/24 school sex age address famsize Pstatus Medu Fedu Mjob Fjob ... famrel freetime goout Dalc Walc health 0 GP F 18 U GT3 A 4 4 at_home teacher ... 4 3 4 1 1 3 1 GP F 17 U GT3 T 1 1 at_home other ... 5 3 3 1 1 3 2 GP F 15 U LE3 T 1 1 at_home other ... 4 3 2 2 3 3 3 GP F 15 U GT3 T 4 2 health services ... 3 2 2 1 1 5 4 GP F 16 U GT3 T 3 3 other other ... 4 3 2 1 2 5 ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 644 MS F 19 R GT3 T 2 3 services other ... 5 4 2 1 2 5 645 MS F 18 U LE3 T 3 1 teacher services ... 4 3 4 1 1 1 646 MS F 18 U GT3 T 1 1 other other ... 1 1 1 1 1 5 647 MS M 17 U LE3 T 3 1 services services ... 2 4 5 3 4 2 648 MS M 18 R LE3 T 3 2 services other ... 4 4 1 3 4 5 649 rows × 33 columns #Importando os dados do curso de matemática mat=pd.read_csv('/student-mat.csv') display(mat)
  • 5. 22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 5/24 school sex age address famsize Pstatus Medu Fedu Mjob Fjob ... famrel freetime goout Dalc Walc health 0 GP F 18 U GT3 A 4 4 at_home teacher ... 4 3 4 1 1 3 1 GP F 17 U GT3 T 1 1 at_home other ... 5 3 3 1 1 3 2 GP F 15 U LE3 T 1 1 at_home other ... 4 3 2 2 3 3 3 GP F 15 U GT3 T 4 2 health services ... 3 2 2 1 1 5 4 GP F 16 U GT3 T 3 3 other other ... 4 3 2 1 2 5 ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 390 MS M 20 U LE3 A 2 2 services services ... 5 5 4 4 5 4 391 MS M 17 U LE3 T 3 1 services services ... 2 4 5 3 4 2 392 MS M 21 R GT3 T 1 1 other other ... 5 5 3 3 3 3 393 MS M 18 R LE3 T 3 2 services other ... 4 4 1 3 4 5 394 MS M 19 U LE3 T 1 1 other at_home ... 3 2 3 3 3 5 395 rows × 33 columns #Adicionando a coluna "Subject course" para a base de dados de matemática mat.insert(30,'Course Subject','Math') school sex age address famsize Pstatus Medu Fedu Mjob Fjob ... freetime goout Dalc Walc health absenc 0 GP F 18 U GT3 A 4 4 at_home teacher ... 3 4 1 1 3 1 GP F 17 U GT3 T 1 1 at_home other ... 3 3 1 1 3 2 GP F 15 U LE3 T 1 1 at_home other ... 3 2 2 3 3 3 GP F 15 U GT3 T 4 2 health services ... 2 2 1 1 5 4 GP F 16 U GT3 T 3 3 other other ... 3 2 1 2 5 ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 390 MS M 20 U LE3 A 2 2 services services ... 5 4 4 5 4 391 MS M 17 U LE3 T 3 1 services services ... 4 5 3 4 2 392 MS M 21 R GT3 T 1 1 other other ... 5 3 3 3 3 393 MS M 18 R LE3 T 3 2 services other ... 4 1 3 4 5 394 MS M 19 U LE3 T 1 1 other at_home ... 2 3 3 3 5 395 rows × 34 columns #Display com a inserção da nova coluna display(mat)
  • 6. 22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 6/24 #Juntando os dados para os cursos de português e matemática students=pd.concat([mat,port],axis=0,ignore_index=True) school sex age address famsize Pstatus Medu Fedu Mjob Fjob ... freetime goout Dalc Walc health absenc 0 GP F 18 U GT3 A 4 4 at_home teacher ... 3 4 1 1 3 1 GP F 17 U GT3 T 1 1 at_home other ... 3 3 1 1 3 2 GP F 15 U LE3 T 1 1 at_home other ... 3 2 2 3 3 3 GP F 15 U GT3 T 4 2 health services ... 2 2 1 1 5 4 GP F 16 U GT3 T 3 3 other other ... 3 2 1 2 5 ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 1039 MS F 19 R GT3 T 2 3 services other ... 4 2 1 2 5 1040 MS F 18 U LE3 T 3 1 teacher services ... 3 4 1 1 1 1041 MS F 18 U GT3 T 1 1 other other ... 1 1 1 1 5 1042 MS M 17 U LE3 T 3 1 services services ... 4 5 3 4 2 1043 MS M 18 R LE3 T 3 2 services other ... 4 1 3 4 5 1044 rows × 34 columns display(students) #Da base students, podemos selecionar apenas os atributos de cada estudante excluindo as classes que serão #os valores a serem preditos do modelo. E então também podemos obter as classes separadamente
  • 7. 22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 7/24 atributos=students.drop(columns=['Course Subject','G1','G2','G3']) classes=students[['G1','G2','G3']] Questão 1 #Resposta aos itens das questões 1 # Alternativa a) #Determinando o número de atributos num_atrib=len(atributos.columns) #O número de atributos é igual a 30 print('O número de atributos é igual a: ',num_atrib) #Determinando o número de instâncias num_instancias=len(atributos.index) #O número de instância é igual a 1044 print('O número de instâncias é igual a: ',num_instancias) #Determinando o número de classes num_classes=len(classes.columns) #O número de classes é igual a 30 print('O número de classes é igual a: ',num_classes) O número de atributos é igual a: 30 O número de instâncias é igual a: 1044 O número de classes é igual a: 3 #Questão 1 item b) #Vamos obter um info sobre a base atributos atributos.info() <class 'pandas.core.frame.DataFrame'> RangeIndex: 1044 entries, 0 to 1043
  • 8. 22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 8/24 Data columns (total 30 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 school 1044 non-null object 1 sex 1044 non-null object 2 age 1044 non-null int64 3 address 1044 non-null object 4 famsize 1044 non-null object 5 Pstatus 1044 non-null object 6 Medu 1044 non-null int64 7 Fedu 1044 non-null int64 8 Mjob 1044 non-null object 9 Fjob 1044 non-null object 10 reason 1044 non-null object 11 guardian 1044 non-null object 12 traveltime 1044 non-null int64 13 studytime 1044 non-null int64 14 failures 1044 non-null int64 15 schoolsup 1044 non-null object 16 famsup 1044 non-null object 17 paid 1044 non-null object 18 activities 1044 non-null object 19 nursery 1044 non-null object 20 higher 1044 non-null object 21 internet 1044 non-null object 22 romantic 1044 non-null object 23 famrel 1044 non-null int64 24 freetime 1044 non-null int64 25 goout 1044 non-null int64 26 Dalc 1044 non-null int64 27 Walc 1044 non-null int64 28 health 1044 non-null int64 29 absences 1044 non-null int64 dtypes: int64(13), object(17) memory usage: 244.8+ KB #Continuação Questão 1 b) #Agora vamos ver quantos atributos são categóricos e quantos são numéricos
  • 9. 22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 9/24 #os atributos do tipo objeto são variáveis do tipo categórica categorico=atributos.select_dtypes(include='object') print('Os atributos do tipo categórico são: ', len(categorico.columns)) #Vamos ver os atributos que são do tipo inteiro numerico=atributos.select_dtypes(include='int64') print('Os atributos do tipo numerico são: ', len(numerico.columns)) #No entanto, apesar de 13 atributos aparecem como numéricos. No entanto, estes atributos são categóricos, uma vez que foram #atributos a eles valores numéricos para especificar uma classe. #Por exemplo o atributo Dalc correspondente ao consumo diário de alcool de cada estudante: onde 1 representa muito baixo #e 5 representa muito alto. Isto, apesar de ser um número, na verdade se trata de uma variável categórica #Assim sendo, na verdade apenas 2 atributos são numéricos verdadeiramente. Os quais são a idade ('age') e o número #de faltas nas aulas ('Absences'). Posteriormente, estes dados serão transformados em numéricos Os atributos do tipo categórico são: 17 Os atributos do tipo numerico são: 13 #Questão 1 c) #Para os atributos categóricos #Selecionando os indices dos atributos categóricos (excluindo age e absences) index_cat=categorico.columns  #Criando um vetor de classes categoricas do tamanho do index_cat classes_cat=np.zeros(len(index_cat)) #Calculando o número de classes existentes em cada variável categórica for i in range(len(index_cat)):     classes_cat[i]=len(categorico.iloc[:,i].value_counts())      #Transformando a variável classes categóricas em uma série do Pandas classes cat=pd.Series(classes cat,index=index cat)
  • 10. 22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 10/24 school 2.0 sex 2.0 address 2.0 famsize 2.0 Pstatus 2.0 Mjob 5.0 Fjob 5.0 reason 4.0 guardian 3.0 schoolsup 2.0 famsup 2.0 paid 2.0 activities 2.0 nursery 2.0 higher 2.0 internet 2.0 romantic 2.0 dtype: float64 _ p ( _ , _ ) display(classes_cat) #Visualizando o número de classes existentes em cada variável categórica #Questão 1 d) Variáveis numéricas #Vamos passar o comando info para verificar o tipo das variáveis display(numerico.info()) #Logo observa-se que todas as variáveis são escalares (não-vetores) do tipo inteira (Dtype: int64) #Vamos passar o comando describe para ver as escalas presentes nos dados display(numerico.describe())
  • 11. 22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 11/24 <class 'pandas.core.frame.DataFrame'> RangeIndex: 1044 entries, 0 to 1043 Data columns (total 13 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 age 1044 non-null int64 1 Medu 1044 non-null int64 2 Fedu 1044 non-null int64 3 traveltime 1044 non-null int64 4 studytime 1044 non-null int64 5 failures 1044 non-null int64 6 famrel 1044 non-null int64 7 freetime 1044 non-null int64 8 goout 1044 non-null int64 9 Dalc 1044 non-null int64 10 Walc 1044 non-null int64 11 health 1044 non-null int64 12 absences 1044 non-null int64 dtypes: int64(13) memory usage: 106.2 KB None age Medu Fedu traveltime studytime failures famrel freetime goout D count 1044.000000 1044.000000 1044.000000 1044.000000 1044.000000 1044.000000 1044.000000 1044.000000 1044.000000 1044.000 mean 16.726054 2.603448 2.387931 1.522989 1.970307 0.264368 3.935824 3.201149 3.156130 1.494 std 1.239975 1.124907 1.099938 0.731727 0.834353 0.656142 0.933401 1.031507 1.152575 0.911 min 15.000000 0.000000 0.000000 1.000000 1.000000 0.000000 1.000000 1.000000 1.000000 1.000 25% 16.000000 2.000000 1.000000 1.000000 1.000000 0.000000 4.000000 3.000000 2.000000 1.000 50% 17.000000 3.000000 2.000000 1.000000 2.000000 0.000000 4.000000 3.000000 3.000000 1.000 75% 18.000000 4.000000 3.000000 2.000000 2.000000 0.000000 5.000000 4.000000 4.000000 2.000 max 22.000000 4.000000 4.000000 4.000000 4.000000 3.000000 5.000000 5.000000 5.000000 5.000 Como a maioria das variáveis númericas são representadas como categorias numéricas (0,1,2,3,4,5..). Logo, a escala fica na faixa que corresponde a quantidade de classes existentes. Para a variável age que é verdadeiramente numérica, esta variável fica na faixa de 15 a 22
  • 12. 22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 12/24 anos, que é idade aproximada de conclusão do ensino médio. Para a variável númerica absences (faltas) a ordem de grandeza está entre 0 a 75, que foram o menor e maior valor observado de faltas entre todos os alunos. #Questão 1 e) #Dados faltosos: Verificação pela função isnull atributos.isnull().sum()  #Ou seja, observa-se pelo comando acima que a base de dados está limpa em termos de elementos faltantes, sendo #zero para todas as variáveis (sejam elas categóricas ou numéricas) school 0 sex 0 age 0 address 0 famsize 0 Pstatus 0 Medu 0 Fedu 0 Mjob 0 Fjob 0 reason 0 guardian 0 traveltime 0 studytime 0 failures 0 schoolsup 0 famsup 0 paid 0 activities 0 nursery 0 higher 0 internet 0 romantic 0 famrel 0 freetime 0
  • 13. 22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 13/24 goout 0 Dalc 0 Walc 0 health 0 absences 0 dtype: int64 Questão 2 #A questão 2 envolve as primeiras manipulações com os dados para organizar a base: #Vamos aplicar a transformação das variáveis discretas para numéricas index_cat=categorico.columns  ordinal=OrdinalEncoder() ordinal.fit(categorico) cat_to_num=pd.DataFrame(ordinal.transform(categorico),columns=index_cat) cat_to_num.head(10)
  • 14. 22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 14/24 school sex address famsize Pstatus Mjob Fjob reason guardian schoolsup famsup paid activities nursery higher i 0 0.0 0.0 1.0 0.0 0.0 0.0 4.0 0.0 1.0 1.0 0.0 0.0 0.0 1.0 1.0 1 0.0 0.0 1.0 0.0 1.0 0.0 2.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 2 0.0 0.0 1.0 1.0 1.0 0.0 2.0 2.0 1.0 1.0 0.0 1.0 0.0 1.0 1.0 3 0.0 0.0 1.0 0.0 1.0 1.0 3.0 1.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0 4 0.0 0.0 1.0 0.0 1.0 2.0 2.0 1.0 0.0 0.0 1.0 1.0 0.0 1.0 1.0 5 0.0 1.0 1.0 1.0 1.0 3.0 2.0 3.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0 6 0.0 1.0 1.0 1.0 1.0 2.0 2.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 7 0.0 0.0 1.0 0.0 0.0 2.0 4.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 1.0 8 0.0 1.0 1.0 1.0 0.0 3.0 2.0 1.0 1.0 0.0 1.0 1.0 0.0 1.0 1.0 9 0.0 1.0 1.0 0.0 1.0 2.0 2.0 1.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0 school sex address famsize Pstatus Mjob Fjob reason guardian schoolsup ... traveltime studytime failures fam 0 0.0 0.0 1.0 0.0 0.0 0.0 4.0 0.0 1.0 1.0 ... 2 2 0 1 0.0 0.0 1.0 0.0 1.0 0.0 2.0 0.0 0.0 0.0 ... 1 2 0 2 0.0 0.0 1.0 1.0 1.0 0.0 2.0 2.0 1.0 1.0 ... 1 2 3 3 0.0 0.0 1.0 0.0 1.0 1.0 3.0 1.0 1.0 0.0 ... 1 3 0 4 0.0 0.0 1.0 0.0 1.0 2.0 2.0 1.0 0.0 0.0 ... 1 2 0 ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 1039 1.0 0.0 0.0 0.0 1.0 3.0 2.0 0.0 1.0 0.0 ... 1 3 1 1040 1.0 0.0 1.0 1.0 1.0 4.0 3.0 0.0 1.0 0.0 ... 1 2 0 1041 1.0 0.0 1.0 0.0 1.0 2.0 2.0 0.0 1.0 0.0 ... 2 2 0 1042 1.0 1.0 1.0 1.0 1.0 3.0 3.0 0.0 1.0 0.0 ... 2 1 0 1043 1.0 1.0 0.0 1.0 1.0 3.0 2.0 0.0 1.0 0.0 ... 3 1 0 1044 rows × 30 columns #Agora vamos concatenar as variáveis categóricas transformadas em numéricas junto com as variáveis numéricas base_modificada=pd.concat([cat_to_num,numerico],axis=1) display(base_modificada) Questão 3
  • 15. 22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 15/24 #Avaliando a base em termo das idades dos alunos base_modificada['age'].value_counts(bins=5) #Observa-se que há apenas 14 amostras entre as idades superiores a 19 até 22. Ou seja, serão eliminadas da base de dados #valores de idade maiores que 19 anos, por não serem representativas na base (14.992, 16.4] 475 (17.8, 19.2] 278 (16.4, 17.8] 277 (19.2, 20.6] 9 (20.6, 22.0] 5 Name: age, dtype: int64 #Removendo os dados de idade BaseReduzida1=base_modificada.drop(base_modificada[base_modificada.age > 19].index) #Observa que os 14 dados de idade acima de 19 anos foram eliminados display(BaseReduzida1)
  • 16. 22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 16/24 school sex address famsize Pstatus Mjob Fjob reason guardian schoolsup ... traveltime studytime failures fam 0 0.0 0.0 1.0 0.0 0.0 0.0 4.0 0.0 1.0 1.0 ... 2 2 0 1 0.0 0.0 1.0 0.0 1.0 0.0 2.0 0.0 0.0 0.0 ... 1 2 0 2 0.0 0.0 1.0 1.0 1.0 0.0 2.0 2.0 1.0 1.0 ... 1 2 3 3 0.0 0.0 1.0 0.0 1.0 1.0 3.0 1.0 1.0 0.0 ... 1 3 0 4 0.0 0.0 1.0 0.0 1.0 2.0 2.0 1.0 0.0 0.0 ... 1 2 0 ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 1039 1.0 0.0 0.0 0.0 1.0 3.0 2.0 0.0 1.0 0.0 ... 1 3 1 1040 1.0 0.0 1.0 1.0 1.0 4.0 3.0 0.0 1.0 0.0 ... 1 2 0 1041 1.0 0.0 1.0 0.0 1.0 2.0 2.0 0.0 1.0 0.0 ... 2 2 0 1042 1.0 1.0 1.0 1.0 1.0 3.0 3.0 0.0 1.0 0.0 ... 2 1 0 1043 1.0 1.0 0.0 1.0 1.0 3.0 2.0 0.0 1.0 0.0 ... 3 1 0 1030 rows × 30 columns #Vamos avaliar agora a variável faltas absences BaseReduzida1['absences'].value_counts(bins=4) #Observa-se que 1003 dos 1030 dados restantes estão dispostos entre 0 a 18.75 faltas. Ou seja, isso quer dizer que igual #acima de 19 faltas, há poucos dados que não são representativos no conjunto por isso serão excluídos. (-0.076, 18.75] 1003 (18.75, 37.5] 22 (37.5, 56.25] 4 (56.25, 75.0] 1 Name: absences, dtype: int64 #Removendo os dados de absences BaseReduzida1.drop(BaseReduzida1[BaseReduzida1.absences >= 19].index, inplace=True) #Observa que os 26 dados de absences acima ou igual a 19 faltas foram eliminados display(BaseReduzida1)
  • 17. 22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 17/24 school sex address famsize Pstatus Mjob Fjob reason guardian schoolsup ... traveltime studytime failures fam 0 0.0 0.0 1.0 0.0 0.0 0.0 4.0 0.0 1.0 1.0 ... 2 2 0 1 0.0 0.0 1.0 0.0 1.0 0.0 2.0 0.0 0.0 0.0 ... 1 2 0 2 0.0 0.0 1.0 1.0 1.0 0.0 2.0 2.0 1.0 1.0 ... 1 2 3 3 0.0 0.0 1.0 0.0 1.0 1.0 3.0 1.0 1.0 0.0 ... 1 3 0 4 0.0 0.0 1.0 0.0 1.0 2.0 2.0 1.0 0.0 0.0 ... 1 2 0 ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 1039 1.0 0.0 0.0 0.0 1.0 3.0 2.0 0.0 1.0 0.0 ... 1 3 1 1040 1.0 0.0 1.0 1.0 1.0 4.0 3.0 0.0 1.0 0.0 ... 1 2 0 1041 1.0 0.0 1.0 0.0 1.0 2.0 2.0 0.0 1.0 0.0 ... 2 2 0 1042 1.0 1.0 1.0 1.0 1.0 3.0 3.0 0.0 1.0 0.0 ... 2 1 0 1043 1.0 1.0 0.0 1.0 1.0 3.0 2.0 0.0 1.0 0.0 ... 3 1 0 1003 rows × 30 columns Como resultado do método de remoção de outliers a partir da contagem da frequência de aparição dos termos verdadeiramente numéricos (age e absences). Foi possível remover 41 dados, trazendo a base de 1044 amostras para 1003 amostras, permanecendo com 30 atributos na base de dados. Questão 4 Questão 5 #Como métrica para seleção de determinados atributos, iremos utilizar um filtro baseada no coeficiente de #Correlação de Pearson. A correlação de Pearson mede o grau de correlação linear entre duas variáveis
  • 18. 22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 18/24 #Valores próximo a 1 indicam forte dependência linear positiva e valores próxima a -1 forte dependência linear negativa #Valores de correlação perto de 0, indicam ausência de correlação linear. #Obtém-se a correlação de Pearson diretamente pela função df.corr() #Vamos importar a biblioteca matplotlib e seaborn para ver o gráfico de correlação corr=BaseReduzida1.corr() #Plot the heatmap of correlation matrix for features X plt.figure(figsize=(25,18)) sns.heatmap(corr,annot=True,center=0)
  • 19. 22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 19/24 <AxesSubplot:> A partir da representação da Matriz de Correlação ( Perason) observa-se que a base acima é praticamente toda descorrelacionada. No entanto, há dois termos de correlação cruzada que são maiores que 0.6. O que é uma correlação muito maior que os outros valores da base.
  • 20. 22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 20/24 O primeiro termo de correlação cruzada entre fathers e mothers education que é igual a 0.65. Este fato deve ocorrer porque não é uma certa tendência de que pessoas que tenham se formado no ensino superior se casem com pessoas de mesma condição, sendo que o mesmo ocorre também para pessoas que não se formaram no ensino superior e tendem a casar com pessoas que também não tiveram acesso ao ensino superior. Dessa forma, pode-se pressupor que ao utilizar apenas uma dessas métricas seja suficiente para a análise dos dados. Por isso, será excluído fathers education, uma vez que usualmente a mãe em nossa sociedade é quem acaba tendo maior responsabilidade sobre o filho. No entanto, ressalta-se que essa escolha é arbitrária e poderia ser mantida o atributo fathers education ao invés de mathers education. O segundo termo de correlação cruzada alta é entre workday-alcohol-comsumption e weekend-alcohol-comsuption cujo valor é igual a 0.63. Esta correlação alta infere-se com base no fato de que pessoas que consomem mais álcool em dias de semana (dias de trabalho) tendem a também consumir mais álcool aos fins de semana. E como, o objetivo é predizer as notas finais dos cursos de matemática será escolhido como atributo para se manter na base a variável Dalc (workday-alcohol-comsuption), uma vez que, se pressupõe que o consumo excessivo de álcool durante a semana teria maior afeto na nota de um teste do que no consumo aos fins de semana. Questão 6 #Eliminando os atributos Fedu e Walc BaseReduzida2=BaseReduzida1.drop(columns=['Fedu','Walc']) display(BaseReduzida2)
  • 21. 22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 21/24 school sex address famsize Pstatus Mjob Fjob reason guardian schoolsup ... Medu traveltime studytime failure 0 0.0 0.0 1.0 0.0 0.0 0.0 4.0 0.0 1.0 1.0 ... 4 2 2 1 0.0 0.0 1.0 0.0 1.0 0.0 2.0 0.0 0.0 0.0 ... 1 1 2 2 0.0 0.0 1.0 1.0 1.0 0.0 2.0 2.0 1.0 1.0 ... 1 1 2 3 0.0 0.0 1.0 0.0 1.0 1.0 3.0 1.0 1.0 0.0 ... 4 1 3 4 0.0 0.0 1.0 0.0 1.0 2.0 2.0 1.0 0.0 0.0 ... 3 1 2 ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... . 1039 1.0 0.0 0.0 0.0 1.0 3.0 2.0 0.0 1.0 0.0 ... 2 1 3 1040 1.0 0.0 1.0 1.0 1.0 4.0 3.0 0.0 1.0 0.0 ... 3 1 2 1041 1.0 0.0 1.0 0.0 1.0 2.0 2.0 0.0 1.0 0.0 ... 1 2 2 1042 1.0 1.0 1.0 1.0 1.0 3.0 3.0 0.0 1.0 0.0 ... 3 2 1 1043 1.0 1.0 0.0 1.0 1.0 3.0 2.0 0.0 1.0 0.0 ... 3 3 1 1003 rows × 28 columns Com isso a base reduzida eliminando os dois atributos anteriormente citados ficou com 1003 amostras e 28 atributos. Questão 7 #Vamos aplicar a técnica de PCA para extração de atributos. pca=PCA(n_components=12) pca.fit(BaseReduzida2) print('A porcentagem de variância explicada pelo PCA em cada direção ortogonal é: ',pca.explained_variance_ratio_) print('A variância total explicada pelo modelo PCA é: ',np.sum(pca.explained_variance_ratio_),'%') A porcentagem de variância explicada pelo PCA em cada direção ortogonal é: [0.52404636 0.06883044 0.06274128 0.04978905 0.03874 0.0271087 0.02447616 0.02240142 0.01944636 0.01814193 0.01709241] A variância total explicada pelo modelo PCA é: 0.9095381871190333 % Ou seja, transformando os 28 atributos (com 2 já removidos anteriormente - BaseReduzida2) do problema em 12 novas direções principais que são combinações lineares destes 28 atributos. Será possível reduzir a dimensionalidade do problema original de 28 para 12 sem interferir
  • 22. 22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 22/24 significativamente na variância captada pelo modelo. Uma vez que o modelo PCA com 12 atributos consegue explicar 90% do total variância observada na base de dados original completa. A seguir iremos apresentar como a base de dados é transformada. 0 1 2 3 4 5 6 7 8 9 10 11 0 2.258322 1.144421 0.244795 -0.660412 -0.863878 0.508764 -0.738544 1.187843 -1.856944 -1.346022 -1.732801 -0.153472 1 0.155053 2.511152 -0.004079 0.513573 -0.315369 -0.570116 -1.368382 -0.206716 -0.688787 -0.042618 -0.044304 0.057420 2 6.191371 1.997491 0.808957 1.707169 0.845601 -1.750644 0.503036 -0.709853 0.240352 -0.180415 -0.020578 0.159295 3 -1.819603 -1.083187 -0.136213 2.501605 0.155695 -0.568213 0.044840 1.913987 -0.349452 -0.481550 -1.356821 0.483917 4 0.188476 -0.727425 -0.788204 1.844753 0.178152 -0.275915 -0.451374 0.260278 0.224789 -0.350927 -0.024004 -0.020368 ... ... ... ... ... ... ... ... ... ... ... ... ... 998 0.251650 0.188222 -1.851403 0.240105 -0.436521 2.328089 -1.706025 -1.480079 0.789844 0.183064 -0.363848 0.585327 999 0.309896 -0.627946 1.717025 -1.893593 -2.276277 1.337052 -0.685832 -0.341805 -0.271531 0.800240 -0.008331 -0.660519 1000 2.240399 1.647629 -0.776463 3.178936 -1.325863 2.265280 1.538404 0.621457 1.156382 1.050953 -0.456935 -0.543449 1001 2.417901 -0.070697 0.262296 -2.685400 -2.119311 -0.216044 2.116586 0.433616 0.278001 0.053390 -0.221507 -0.312013 1002 0.299914 -0.306514 -1.977470 0.569296 -1.237650 1.480774 1.175720 -1.700767 0.523528 -1.392135 0.964070 1.329268 1003 rows × 12 columns BaseReduzida3=pd.DataFrame(pca.fit_transform(BaseReduzida2)) display(BaseReduzida3) Ou seja, eliminou-se de 28 atributos (BaseReduzida2) para 12 atributos (BaseReduzida3) captando 90% da variância explicada pelos dados presentes na BaseReduzida2. #Vamos por fim preencher a Tabela criando um dicionário e transformando em um dataframe
  • 23. 22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 23/24 Número de Instâncias Número de Atributos Base Original 1044 30 Base Reduzida 1 1003 30 Base Reduzida 2 1003 28 Base Reduzida 3 1003 12 colunas={'Número de Instâncias': ['1044','1003','1003','1003'],           'Número de Atributos': ['30','30','28','12']} #Vamos agora transformar o dicionário em dataframe tabela=pd.DataFrame(colunas,index=['Base Original','Base Reduzida 1','Base Reduzida 2','Base Reduzida 3']) display(tabela)
  • 24. 22/04/22, 21:43 Descri_Check-point_2.ipynb - Colaboratory https://colab.research.google.com/drive/1UCxicvH4joF0Yp7powygIxQ6waCb09V-#scrollTo=ae68b337&printMode=true 24/24