17
Universidade Federal do Rio de Janeiro Consumo de Álcool por Estudantes Professor: Alexandre Evsukoff Período: 2016/2 Disciplina: COC361 - Inteligência Computacional Rafael Gonçalves Damasceno DRE: 114009017 Rodrigo Carvalho Ribeiro de Jesus DRE: 114039371 1. Introdução 1.1. Propósito do Documento Este documento representa o relatório preliminar da disciplina Inteligência Computacional [COC361], ministrada pelo professor Alexandre Evsukoff, no período 2016/2. O objetivo deste relatório é documentar as análises feitas em cima do dataset escolhido, que tiveram como objetivo solidificar o entendimento do dataset e auxiliar na familiarização com as ferramentas que serão usadas ao longo da disciplina. 1.2 Escopo do Projeto e formulação do problema A preocupação acerca do consumo de álcool, em conjunto com suas motivações e seu impacto na vida das pessoas, vem se mostrando como um tema de grande discussão e questionamento. Inspirado nesse contexto, o projeto elaborado faz uso do dataset disponibilizado no portal UC Irvine Machine Learning Repository sobre o consumo de álcool por estudantes, que também traz informações sobre a vida doméstica dos alunos e sobre seu desempenho acadêmico. O projeto, desenvolvido em Python, tem como objetivo analisar os dados em relação ao consumo de álcool e as características pertencentes aos estudantes entrevistados. Dessa forma, espera-se realizar a classificação dentro deste dataset e desenvolver a capacidade de predição do consumo de álcool de acordo com as características dos atributos envolvidos. 2. Descrição dos Dados Os dados utilizados por este projeto são provenientes da coleta e análise realizada por Paulo Cortez e Alice Silva da Universidade do Minho, em Portugal, com estudantes portugueses dos cursos de Matemática e Português nas escolas Gabriel Pereira e Mousinho da Silveira. O dataset se encontra disponível em dois arquivos separados, um relacionado à disciplina de português, que tem 32 atributos e 649 registros, e outro à matemática, que tem 395 registros e os mesmos 32 atributos. A Tabela 1 apresenta como estes dados estão dispostos em ambos os arquivos, acompanhados da descrição das variáveis e o significado dos possíveis valores para cada uma delas.

Universidade Fede ral d o Ri o d e Jan ei ro · 2017-01-20 · 1.2 Escopo d o Pr o j eto e fo rmu l ação d o p ro b l ema A ... 9th grade, 3 - secondary education or 4 - higher

  • Upload
    vanmien

  • View
    212

  • Download
    0

Embed Size (px)

Citation preview

Universidade Federal do Rio de Janeiro Consumo de Álcool por Estudantes Professor: Alexandre Evsukoff Período: 2016/2 Disciplina: COC361 - Inteligência Computacional

Rafael Gonçalves Damasceno DRE: 114009017 Rodrigo Carvalho Ribeiro de Jesus DRE: 114039371

1. Introdução

1.1. Propósito do Documento

Este documento representa o relatório preliminar da disciplina Inteligência Computacional [COC361], ministrada pelo professor Alexandre Evsukoff, no período 2016/2. O objetivo deste relatório é documentar as análises feitas em cima do dataset escolhido, que tiveram como objetivo solidificar o entendimento do dataset e auxiliar na familiarização com as ferramentas que serão usadas ao longo da disciplina.

1.2 Escopo do Projeto e formulação do problema

A preocupação acerca do consumo de álcool, em conjunto com suas motivações e

seu impacto na vida das pessoas, vem se mostrando como um tema de grande discussão e questionamento. Inspirado nesse contexto, o projeto elaborado faz uso do dataset disponibilizado no portal UC Irvine Machine Learning Repository sobre o consumo de álcool por estudantes, que também traz informações sobre a vida doméstica dos alunos e sobre seu desempenho acadêmico.

O projeto, desenvolvido em Python, tem como objetivo analisar os dados em relação ao consumo de álcool e as características pertencentes aos estudantes entrevistados. Dessa forma, espera-se realizar a classificação dentro deste dataset e desenvolver a capacidade de predição do consumo de álcool de acordo com as características dos atributos envolvidos.

2. Descrição dos Dados

Os dados utilizados por este projeto são provenientes da coleta e análise realizada por Paulo Cortez e Alice Silva da Universidade do Minho, em Portugal, com estudantes portugueses dos cursos de Matemática e Português nas escolas Gabriel Pereira e Mousinho da Silveira.

O dataset se encontra disponível em dois arquivos separados, um relacionado à disciplina de português, que tem 32 atributos e 649 registros, e outro à matemática, que tem 395 registros e os mesmos 32 atributos. A Tabela 1 apresenta como estes dados estão dispostos em ambos os arquivos, acompanhados da descrição das variáveis e o significado dos possíveis valores para cada uma delas.

Tabela 1: Disposição das variáveis do dataset original. campo descrição opções

school Escola do estudante (binary: 'GP' - Gabriel Pereira or 'MS' - Mousinho da Silveira)

sex Sexo do estudante (binary: 'F' - female or 'M' - male)

age Idade do estudante (numeric: from 15 to 22)

address Tipo do endereço do estudante (binary: 'U' - urban or 'R' - rural)

famsize Tamanho da família (binary: 'LE3' - less or equal to 3 or 'GT3' - greater than 3)

Pstatus Pais moram juntos (binary: 'T' - living together or 'A' - apart)

Medu Escolaridade da mãe (numeric: 0 - none, 1 - primary education (4th grade), 2 - 5th to 9th grade, 3 - secondary education or 4 - higher education)

Fedu Escolaridade do pai (numeric: 0 - none, 1 - primary education (4th grade), 2 - 5th to 9th grade, 3 - secondary education or 4 - higher education)

Mjob Trabalho da mãe (nominal: 'teacher', 'health' care related, civil 'services' (e.g. administrative or police), 'at_home' or 'other')

Fjob Trabalho do pai (nominal: 'teacher', 'health' care related, civil 'services' (e.g. administrative or police), 'at_home' or 'other')

reason Razão para escolher a escola (nominal: close to 'home', school 'reputation', 'course' preference or 'other')

guardian Responsável legal (nominal: 'mother', 'father' or 'other')

traveltime Tempo entre a casa e a escola (numeric: 1 - <15 min., 2 - 15 to 30 min., 3 - 30 min. to 1 hour, or 4 - >1 hour)

studytime Tempo de estudo semanal (numeric: 1 - <2 hours, 2 - 2 to 5 hours, 3 - 5 to 10 hours, or 4 - >10 hours)

failures Número de reprovações (numeric: n if 1<=n<3, else 4)

schoolsup Bolsa (binary: yes or no)

famsup Mesada (binary: yes or no)

paid Aulas extras pagas para o curso (binary: yes or no)

activities Atividades extra curriculares (binary: yes or no)

nursery Fez o Jardim de Infância (binary: yes or no)

higher Deseja cursar ensino superior (binary: yes or no)

internet Possui acesso à Internet em casa (binary: yes or no)

romantic Está em um relacionamento amoroso (binary: yes or no)

famrel Qualidade do relacionamento familiar (numeric: from 1 - very bad to 5 - excellent)

freetime Tempo livre na escola (numeric: from 1 - very low to 5 - very high)

goout Sai com os amigos (numeric: from 1 - very low to 5 - very high)

Dalc Consumo de álcool nos dias de semana (numeric: from 1 - very low to 5 - very high)

Walc Consumo de álcool no final de semana (numeric: from 1 - very low to 5 - very high)

health Estado de saúde atual (numeric: from 1 - very bad to 5 - very good)

absences Número de faltas na escola (numeric: from 0 to 93)

G1 Nota do primeiro período (numeric: from 0 to 20)

G2 Nota do segundo período (numeric: from 0 to 20)

G3 Nota final (numeric: from 0 to 20, output target)

Para permitir uma melhor avaliação dos dados e a sua análise, foi utilizado somente valores numéricos para as variáveis do projeto. Dessa forma, foram necessárias certas modificações nos valores disponibilizados, como binarização e agrupamentos de opções, procurando não criar uma falsa proximidade dentre as opções disponíveis para cada atributo. Esses agrupamentos foram feitos nos atributos 'Fjob' (onde agrupamos opções de trabalhos fora de casa), 'Mjob' (mesmo caso), e 'guardian' (onde agrupamos mãe e pai como uma opção só de responsável, deixando a outra opção como "outros"). Além disso, foi decidido excluir ao atributo relacionado à razão de escolha da escola pelo estudante pelo

mesmo motivo apresentado anteriormente. O resultado dessas modificações pode ser encontrado na Tabela 2.

Tabela 2: Disposição das variáveis do dataset depois das modificações estipuladas. campo descrição opções

school Escola do estudante (numérico: 0 - Gabriel Pereira ou 1 - Mousinho da Silveira)

sex Sexo do estudante (numérico: 0 - feminino ou 1 - masculino)

age Idade do estudante (numérico: de 15 a 22)

address Tipo do endereço da casa do estudante (numérico: 0 - rural ou 1 - urbano)

famsize Tamanho da família (numérico: 0 - menor ou igual a 3 ou 1 - maior que 3)

Pstatus Pais moram juntos (numérico: 0 - moram juntos ou 1 - separados)

Medu Escolaridade da mãe (numérico: 0 - nenhum, 1 - ensino fundamental 1 (4th grade), 2 - ensino fundamental 2 (5th to 9th grade), 3 - ensino médio ou 4 - ensino superior)

Fedu Escolaridade do pai (numérico: 0 - nenhum, 1 - ensino fundamental 1 (4th grade), 2 - ensino fundamental 2 (5th to 9th grade), 3 - ensino médio ou 4 - ensino superior)

Mjob Trabalho da mãe (numérico: 0 - em casa, 1 - fora de casa)

Fjob Trabalho do pai (numérico: 0 - em casa, 1 - fora de casa)

guardian Responsável legal (numérico: 0 - um dos pais ou 1 - outros)

traveltime Tempo entre a casa e a escola (numérico: 1 - <15 min., 2 - 15 to 30 min., 3 - 30 min. to 1 hora, ou 4 - >1 hora)

studytime Tempo de estudo semanal (numérico: 1 - <2 horas, 2 - 2 to 5 horas, 3 - 5 to 10 horas, ou 4 - >10 horas)

failures Número de reprovações (numérico: n se n<3, senão 4)

schoolsup Bolsa (numérico: 1:'sim' ou 0:'não')

famsup Mesada (numérico: 1:'sim' ou 0:'não')

paid Aulas extras pagas para o curso (numérico: 1:'sim' ou 0:'não')

activities Atividades extra curriculares (numérico: 1:'sim' ou 0:'não')

nursery Fez o jardim de infância (numérico: 1:'sim' ou 0:'não')

higher Deseja cursar ensino superior (numérico: 1:'sim' ou 0:'não')

internet Possui acesso à Internet em casa (numérico: 1:'sim' ou 0:'não')

romantic Está em um relacionamento amoroso (numérico: 1:'sim' ou 0:'não')

famrel Qualidade do relacionamento familiar (numérico: from 1 - muito ruim to 5 - excelente)

freetime Tempo livre na escola (numérico: from 1 - muito pouco to 5 - muito)

goout Sai com os amigos (numérico: from 1 - muito pouco to 5 - muito

Dalc Consumo de álcool nos dias de semana (numérico: from 1 - muito pouco to 5 - muito)

Walc Consumo de álcool no final de semana (numérico: from 1 - muito pouco to 5 - muito)

health Estado de saúde atual (numérico: from 1 - muito ruim to 5 - muito bom)

absences Número de faltas na escola (numérico: de 0 a 93)

G1 Nota do primeiro período (numérico: de 0 a 20)

G2 Nota do segundo período (numérico: de 0 a 20)

G3 Nota final (numérico: de 0 a 20)

3. Apresentação da Tecnologia

Para desenvolver o escopo do projeto foi decidido utilizar a linguagem Python,

devido a sua versatilidade e também por ser uma linguagem com a qual os participantes do projeto já tinham trabalhado anteriormente. Além disso, é uma linguagem amplamente usada por cientistas de dados do planeta inteiro, o que gera uma grande disponibilidade de bibliotecas voltadas para o assunto e também conteúdo de suporte a essas bibliotecas. Dessa forma, foram selecionadas algumas dessas bibliotecas para auxiliar no trabalho de data analysis , data mining e machine learning . Dessas bibliotecas, podemos destacar:

● matplotlib - biblioteca para gerar gráficos a partir do Python ● pandas - estruturas específicas para análise de dados ● numpy - pacote de computação numérica otimizado para processos que

envolvam arrays e matrizes.

● scipy - rotinas para trabalhar em diversas áreas como integração numérica, otimização e processamento de sinais.

● scikit-learn - ferramentas para análise e mineração de dados As bibliotecas matplotlib, pandas, e numpy foram utilizadas ainda no trabalho

desenvolvido para esse relatório. As bibliotecas scipy e scikit-learn devem ser utilizadas para o segundo relatório. Além dessas bibliotecas, usamos também o software ipython, um interpretador interativo que traz diversas melhorias em relação ao interpretador padrão do Python, podendo ser destacadas a possibilidade de syntax highlighting , guardar comandos entre sessões, autocomplete , e também de exportar os comandos usados em uma determinada sessão para um arquivo externo. A decisão por usar um interpretador está relacionada com a possibilidade de acompanhar o resultado diretamente quando o comando é inserido, o que facilita a exploração dos dados.

4. Caracterização e avaliação preliminar dos dados

A caracterização preliminar dos dados foi desenvolvida com o uso das tecnologias descritas na seção 3 (Apresentação da Tecnologia) deste relatório e o código desenvolvidos pode ser encontrado como Apêndice I (Código gerado) ao fim deste relatório. Além de gerar estatísticas sobre cada atributo e os gráficos apresentados no relatório, também verificamos que não existiam valores ausentes no dataset. O processo de caracterização apresentado nesta seção do relatório busca entender a distribuição do dataset e também as relações que podem existir entre os atributos presentes.

Figura1: Matriz de Correlação para o arquivo student-mat.csv de acordo com a Tabela 2.

Figura2: Matriz de Correlação para o arquivo student-por.csv de acordo com a Tabela 2.

Avaliando as matrizes de correlação para os arquivos disponibilizados, referentes às diferentes disciplinas, é possível perceber a grande similaridade entre eles, o que motiva dentre deste projeto unir os arquivos e trabalhar através de um único dataset. No entanto, avaliando as informações disponibilizadas e o código disponibilizado para unir os datasets fica claro a grande intercessão de estudantes que contribuíram para os dados, desta forma para este relatório preliminar foi escolhido caracterizar e avaliar os dados separadamente.

A maioria das correlações entre os atributos são fracas (entre -0.25 e +0.25), mas podemos destacar algumas correlações mais fortes, sendo as maiores correlações positivas encontradas entre G1, G2 e G3 (notas dos estudantes entrevistados), Dalc e Walc (consumo de álcool em dias da semana e finais de semana) e Medu e Fedu (nível de educação do pai e da mãe). Existe também correlação negativa relevante entre o número de reprovações de um aluno e suas notas (failures e G1, G2, G3).

Tabela 3: Análise das variáveis dispostas no arquivo student-mat.csv

Atributo - mat Min Max Mean Std Qtl 25 Qtl 75

school 0 1 0.116 0.321 0.0 0.0

sex 0 1 0.473 0.5 0.0 1.0

age 15 22 16.696 1.276 16.0 18.0

address 0 1 0.777 0.417 1.0 1.0

famsize 0 1 0.711 0.454 0.0 1.0

Pstatus 0 1 0.104 0.305 0.0 0.0

Medu 0 4 2.749 1.095 2.0 4.0

Fedu 0 4 2.522 1.088 2.0 3.0

Mjob 0 1 0.851 0.357 1.0 1.0

Fjob 0 1 0.949 0.22 1.0 1.0

guardian 0 1 0.081 0.273 0.0 0.0

traveltime 1 4 1.448 0.698 1.0 2.0

studytime 1 4 2.035 0.839 1.0 2.0

failures 0 3 0.334 0.744 0.0 0.0

schoolsup 0 1 0.129 0.336 0.0 0.0

famsup 0 1 0.613 0.488 0.0 1.0

paid 0 1 0.458 0.499 0.0 1.0

activities 0 1 0.509 0.501 0.0 1.0

nursery 0 1 0.795 0.404 1.0 1.0

higher 0 1 0.949 0.22 1.0 1.0

internet 0 1 0.833 0.374 1.0 1.0

romantic 0 1 0.334 0.472 0.0 1.0

famrel 1 5 3.944 0.897 4.0 5.0

freetime 1 5 3.235 0.999 3.0 4.0

goout 1 5 3.109 1.113 2.0 4.0

Dalc 1 5 1.481 0.891 1.0 2.0

Walc 1 5 2.291 1.288 1.0 3.0

health 1 5 3.554 1.39 3.0 5.0

absences 0 75 5.709 8.003 0.0 8.0

G1 3 19 10.909 3.319 8.0 13.0

G2 0 19 10.714 3.762 9.0 13.0

G3 0 20 10.415 4.581 8.0 14.0

Tabela 4: Análise das variáveis dispostas no arquivo student-por.csv

Atributo - porr Min Max Mean Std Qtl 25 Qtl 75

school 0 1 0.348 0.477 0.0 1.0

sex 0 1 0.41 0.492 0.0 1.0

age 15 22 16.744 1.218 16.0 18.0

address 0 1 0.696 0.46 0.0 1.0

famsize 0 1 0.704 0.457 0.0 1.0

Pstatus 0 1 0.123 0.329 0.0 0.0

Medu 0 4 2.515 1.135 2.0 4.0

Fedu 0 4 2.307 1.1 1.0 3.0

Mjob 0 1 0.792 0.406 1.0 1.0

Fjob 0 1 0.935 0.246 1.0 1.0

guardian 0 1 0.063 0.243 0.0 0.0

traveltime 1 4 1.569 0.749 1.0 2.0

studytime 1 4 1.931 0.83 1.0 2.0

failures 0 3 0.222 0.593 0.0 0.0

schoolsup 0 1 0.105 0.307 0.0 0.0

famsup 0 1 0.613 0.487 0.0 1.0

paid 0 1 0.06 0.238 0.0 0.0

activities 0 1 0.485 0.5 0.0 1.0

nursery 0 1 0.803 0.398 1.0 1.0

higher 0 1 0.894 0.308 1.0 1.0

internet 0 1 0.767 0.423 1.0 1.0

romantic 0 1 0.368 0.483 0.0 1.0

famrel 1 5 3.931 0.956 4.0 5.0

freetime 1 5 3.18 1.051 3.0 4.0

goout 1 5 3.185 1.176 2.0 4.0

Dalc 1 5 1.502 0.925 1.0 2.0

Walc 1 5 2.28 1.284 1.0 3.0

health 1 5 3.536 1.446 2.0 5.0

absences 0 32 3.659 4.641 0.0 6.0

G1 0 19 11.399 2.745 10.0 13.0

G2 0 19 11.57 2.914 10.0 13.0

G3 0 19 11.906 3.231 10.0 14.0

Figura3: Histogramas relativos ao arquivo student-por.csv

Figura4: Histogramas relativos ao arquivo student-mat.csv

Através das distribuições dos atributos, seguindo as tabelas e os histogramas apresentados, é possível verificar como as características e hábitos dos estudantes entrevistados se encontram no dataset. Alguns atributos seguem uma distribuição próxima à normal, como idade (age), tempo livre (freetime), sai com os amigos (goout) e notas dos alunos (G1, G2 e G3).

É interessante também notar a assimetria de certas distribuições, como a de quem quer seguir para o ensino superior (higher) e se possui acesso à Internet em casa (internet), enquanto outros atributos são muito mais próximos de uma distribuição simétrica, como se o aluno faz atividades extra-curriculares (activities). Além disso, entre os dois histogramas é possível perceber que o atributo relacionado à aula extra paga (paid) se comporta de forma diferente, com mais alunos pagando pelas aulas extras para a disciplina de matemática.

Figura5: Boxplot relativo ao arquivo student-por.csv

Figura6: Boxplot relativo ao arquivo student-mat.csv

Avaliando os gráficos Boxplot dos conjuntos pode-se perceber a presença de outliers principalmente no atributo relaciona às faltas do estudante (absences) e alguns poucos nos atributos referentes às notas (G1 e G2), assim como na idade (age), reprovações (failures), tempo de viagem para chegar à escola (traveltime) e tempo de estudo (studytime). Também é possível notar que a maioria dos atributos são binários e por isso estão concentrados próximos à margem inferior do gráfico.

5. Pesquisa Bibliográfica Using Data Mining To Predict Secondary School Student Alcohol Consumption. Fabio Pagnotta, Hossain Mohammad Amran Department of Computer Science,University of Camerino Livro Ensinando Máquinas - Autor: Alexandre G. Evsukoff Blog sobre Machine Learning https://ensinandomaquinasblog.wordpress.com/ StackExchange - Matriz de Correlação http://datascience.stackexchange.com/questions/10459/calculation-and-visualization-of-correlation-matrix-with-pandas Documentação do pandas http://pandas.pydata.org/pandas-docs/stable/ Trabalhando com DataFrames http://www.gregreda.com/2013/10/26/working-with-pandas-dataframes/ Paper sobre o uso do dataset https://www.researchgate.net/publication/296695247_USING_DATA_MINING_TO_PREDICT_SECONDARY_SCHOOL_STUDENT_ALCOHOL_CONSUMPTION Boxplot http://blog.bharatbhole.com/creating-boxplots-with-matplotlib/

I. Apêndice: Código gerado # coding: utf-8 import pandas import numpy as np from matplotlib import cm as cm from matplotlib import pyplot as plt from prettytable import PrettyTable materia = raw_input('Mat ou Por? ') # Abrindo o arquivo mat = pandas.read_csv('student-%s.csv' % materia, sep=';') # Adaptando os dados del mat['reason'] mat['school'] = mat['school'].apply(lambda x: 0 if x == 'GP' else 1) mat['sex'] = mat['sex'].apply(lambda x: 0 if x == 'F' else 1) mat['address'] = mat['address'].apply(lambda x: 0 if x == 'R' else 1) mat['famsize'] = mat['famsize'].apply(lambda x: 0 if x == 'LE3' else 1) mat['Pstatus'] = mat['Pstatus'].apply(lambda x: 0 if x == 'T' else 1) mat['Mjob'] = mat['Mjob'].apply(lambda x: 0 if x == 'at_home' else 1) mat['Fjob'] = mat['Fjob'].apply(lambda x: 0 if x == 'at_home' else 1) mat['guardian'] = mat['guardian'].apply(lambda x: 1 if x == 'other' else 0) for i in ['schoolsup', 'famsup', 'paid', 'activities', 'nursery', 'higher', 'internet', 'romantic']: mat[i] = mat[i].apply(lambda x: 1 if x == 'yes' else 0) print str(mat.isnull().values.sum()) + ' valores ausentes' # Visualização tabela = PrettyTable(['Variavel', 'Min', 'Max', 'Mean', 'Std', 'Qtl 25', 'Qtl 75']) n = int(np.sqrt(len(mat.columns)))+1 fig = plt.figure(figsize=(12,9)) for i in range(len(mat.columns)): c = mat.columns[i] v = mat[c] ax1 = fig.add_subplot(n, n, i) ax1.hist(v, bins=len(v.unique())) ax1.set_title(c + ' - ' + materia) ax1.set_xlabel('Valor') ax1.set_ylabel('Frequencia') ax1.axis('off') tabela.add_row([c, v.min(), v.max(), round(v.mean(), 3), round(v.std(), 3),\ round(v.quantile(.25), 3), round(v.quantile(.75), 3)]) plt.tick_params(labeltop='off', labelbottom='off') plt.savefig('histograma_' + materia + '.png') plt.close() with open('tabela-%s.html' % materia,'w') as file: file.write(tabela.get_html_string()) def correlation_matrix(df): fig = plt.figure()

ax1 = fig.add_subplot(111) cmap = cm.get_cmap('jet', 30) cax = ax1.imshow(df.corr(), interpolation="nearest", cmap=cmap, clim=[-1,1]) ax1.grid(True) plt.title('Matriz de Correlacao - %s' % materia) labels = df.columns ax1.set_xticks(np.arange(len(df.columns))) ax1.set_yticks(np.arange(len(df.columns))) ax1.set_xticklabels(labels, fontsize=10, rotation='vertical') ax1.set_yticklabels(labels, fontsize=10) cbar = fig.colorbar(cax, ticks=[-1, -0.75, -0.5, -0.25, 0, .25,.5,.75,1]) fig.subplots_adjust(bottom=0.15) plt.savefig('correlacao_%s.png' % materia) def boxplot(df): fig = plt.figure() plt.title('Boxplot - %s' % materia) ax = fig.add_subplot(111) ax.set_xticklabels(df.columns, fontsize=10, rotation='vertical') bp = ax.boxplot([df[k] for k in df.columns]) fig.subplots_adjust(bottom=0.15) plt.savefig('boxplot_%s.png' % materia) plt.close() boxplot(mat) correlation_matrix(mat)