Mantemos a série histórica dos chutes em disciplinas da UFABC. As pessoas mais caretas chamam isso de matrículas indeferidas na primeira fase de matrícula.
Nossos códigos e dados são open source. Usem e abusem!
código fonte Licença GPLv3 licença
Vamos começar carregando alguns pacotes. Talvez seja necessário instalá-los.
# Se for necessário intalar esses pacotes
# install.packages("squash")
# install.packages("gridExtra")
# install.packages("plotrix")
# install.packages(c("ggplot2","RColorBrewer","scales"))
# install.packages("manipulate")
# install.packages("parallel")
# install.packages("rmarkdown")
# Carregando os Pacotes Necessários
# install.packages("dplyr")
library( dplyr)
library(squash); library(gridExtra); library(plotrix)
library(ggplot2); library(scales); library(grid); library(RColorBrewer)
library(manipulate)
library(knitr)
library(kableExtra)
library(rmarkdown)
library(gridExtra)
library(grid)
options(knitr.table.format = "markdown")
# Pacotes para paralelizar
# library(parallel)
# numero cores (total-1) Esse é o máximo razoavel
# no_cores <- detectCores() - 1
# Iniciar o cluster
# cl <- makeCluster(no_cores)
Vamos importar os dados dos arquivos. Esses arquivos estão na pasta dados
# Importa arquivos de Dados de Disciplina
disciplinas.bct<-read.csv("./dados/listasdedisciplinas/discbct.csv")
disciplinas.bch<-read.csv("./dados/listasdedisciplinas/discbch.csv")
disciplinas.nucleo<-read.csv("./dados/listasdedisciplinas/discnucleo.csv")
disciplinas.bct.mat<-read.csv("./dados/listasdedisciplinas/discmatbi.csv")
disciplinas<-unique(as.data.frame(read.csv("./dados/listasdedisciplinas/disciplinas.csv")))
rotulos.cursos<-disciplinas
disciplinas<-unique(disciplinas[1])
# Importa arquivos com Dados de Chutes
chutes.2011.1<-readLines("./dados/chutes/2011.1.txt")
chutes.2011.2<-readLines("./dados/chutes/2011.2.txt")
chutes.2011.3<-readLines("./dados/chutes/2011.3.txt")
chutes.2012.1<-readLines("./dados/chutes/2012.1.txt")
chutes.2012.2<-readLines("./dados/chutes/2012.2.txt")
chutes.2012.3<-readLines("./dados/chutes/2012.3.txt")
chutes.2013.1<-readLines("./dados/chutes/2013.1.txt")
chutes.2013.2<-readLines("./dados/chutes/2013.2.txt")
chutes.2013.3<-readLines("./dados/chutes/2013.3.txt")
chutes.2014.1<-readLines("./dados/chutes/2014.1.txt")
chutes.2014.2<-readLines("./dados/chutes/2014.2.txt")
chutes.2014.3<-readLines("./dados/chutes/2014.3.txt")
chutes.2015.1<-readLines("./dados/chutes/2015.1.txt")
chutes.2015.2<-readLines("./dados/chutes/2015.2.txt")
chutes.2015.3<-readLines("./dados/chutes/2015.3.txt")
chutes.2016.1<-readLines("./dados/chutes/2016.1.txt")
chutes.2016.2<-readLines("./dados/chutes/2016.2.txt")
chutes.2016.3<-readLines("./dados/chutes/2016.3.txt")
chutes.2017.1<-readLines("./dados/chutes/2017.1.txt")
chutes.2017.2<-readLines("./dados/chutes/2017.2.txt")
chutes.2017.3<-readLines("./dados/chutes/2017.3.txt")
chutes.2018.1<-readLines("./dados/chutes/2018.1.txt")
chutes.2018.2<-readLines("./dados/chutes/2018.2.txt")
ultimo=chutes.2018.2
qual.quad=2018.2
numero.quad=23
A função a seguir é a função mais importante! Ela conta a ocorrência de uma string num arquivo. É com ela que contaremos os chutes nos arquivos de chutes
# Conta chutes
contachutes<-function(v,w){length(grep(v,w))}
Vamos colocar rótulos nas disciplinas
func.rotulo<-function(v){
if(v %in% t(disciplinas.nucleo))
{ "nucleocomum"} else {
tolower(paste(t(rotulos.cursos[rotulos.cursos[,1] ==v,2,drop=FALSE]),collapse=" "))}}
rotulos.disciplinas<-sapply(t(disciplinas[1]),func.rotulo)
rotulos.disciplinas<-data.matrix(rotulos.disciplinas)
colnames(rotulos.disciplinas) <- c("Cursos")
Vamos contar os chutes em todas as disciplinas no ultimo quadrimestre. (filtrar para mostrar apenas as com mais de 50 chutes e ordenar.)
# Boa parte do que faremos consiste em aplicar uma função numa lista com sapply
chutes <-sapply(t(disciplinas),contachutes, w=ultimo)
chutes <-sort(chutes[which(chutes > 40)], decreasing = TRUE)
chutes<-data.matrix(chutes)
colnames(chutes) <- c("Chutes")
Vamos ver as disciplinas com mais chutes
chutes.label<-merge(chutes,rotulos.disciplinas, by = "row.names")
chutes.label=chutes.label[order(chutes.label[,2],decreasing = TRUE),]
kable(chutes.label)
| |Row.names | Chutes|Cursos |
|:--|:--------------------------------------------------|------:|:-------------------------|
|46 |mecanica dos solidos i | 402|nucleocomum |
|54 |principios de administracao | 370|nucleocomum |
|37 |introducao as equacoes diferenciais ordinarias | 355|bct |
|17 |engenharia economica | 327|nucleocomum |
|20 |engenharia unificada i | 279|nucleocomum |
|24 |fenomenos eletromagneticos | 255|bct |
|14 |economia de empresas | 226|egest |
|51 |pensamento economico | 215|bch |
|35 |introducao a probabilidade e a estatistica | 210|bch bct |
|25 |fundamentos de desenho tecnico | 197|nucleocomum |
|4 |bases epistemologicas da ciencia moderna | 187|bct bch |
|5 |bases matematicas | 179|bct bch |
|47 |metodos experimentais em engenharia | 157|nucleocomum |
|36 |introducao as engenharias | 148|nucleocomum |
|7 |circuitos eletricos e fotonica | 140|nucleocomum |
|45 |materiais e suas propriedades | 130|nucleocomum |
|34 |interpretacoes do brasil | 122|bch |
|59 |sistemas digitais | 122|bcc |
|50 |organizacao do trabalho | 118|egest |
|40 |libras | 107|lbio lmat lfis lqui lfilo |
|8 |circuitos eletricos i | 105|een eiar einfo ebiom |
|32 |identidade e cultura | 104|bch |
|18 |engenharia economica aplicada a sistemas de gestao | 103|egest |
|57 |sistemas cad/cam | 99|eiar |
|41 |macroeconomia i | 96|bceco |
|53 |praticas em ciencias e humanidades | 93|bch |
|52 |pesquisa operacional | 87|egest |
|61 |temas e problemas em filosofia | 83|bch |
|60 |sistemas e processos de producao | 80|egest |
|10 |desenvolvimento e sustentabilidade | 79|bch |
|58 |sistemas cam | 76|egest |
|23 |fenomenos de transporte | 73|nucleocomum |
|39 |laboratorio de maquinas eletricas | 72|een eiar |
|42 |maquinas eletricas | 72|een eiar |
|21 |estado e relacoes de poder | 70|bch |
|19 |engenharia laboral | 67|egest |
|3 |bases computacionais da ciencia | 65|bch bct |
|56 |projeto assistido por computador | 64|eiar |
|11 |desenvolvimento integrado do produto | 62|egest |
|1 |aeroelasticidade | 60|eaero |
|13 |economia brasileira contemporanea i | 60|bceco |
|33 |interacoes atomicas e moleculares | 59|bct |
|9 |custos | 58|egest |
|62 |termodinamica aplica | 58|descon |
|63 |termodinamica aplicada | 58|descon |
|64 |termodinamica aplicada i | 58|nucleocomum |
|6 |bioetica | 57|bnc bbio |
|30 |gestao de operacoes | 56|egest |
|12 |econometria 3 | 51|bceco |
|27 |geracao distribuida | 51|descon |
|48 |microeconomia i | 51|bceco |
|28 |gerencia de ativos | 49|egest |
|2 |analise de sistemas e modelagem ambiental | 47|eau |
|15 |economia institucional i | 47|bceco |
|55 |programacao para web | 47|descon |
|22 |estrutura e dinamica social | 46|bct bch |
|16 |economia internacional i | 45|bceco |
|38 |laboratorio de guiagem | 45|navegacao e controle |
|49 |navegacao e controle | 45|descon |
|26 |fundamentos de robotica | 43|eiar |
|43 |materiais compositos | 43|emat |
|44 |materiais compositos e aplicacoes estruturais | 43|eaero |
|29 |gestao da inovacao | 41|descon |
|31 |historia do pensamento economico | 41|bceco |
Vamos colocar esses dados num Barplot básico:
barplot(t(chutes),20,main="Chutes por Disciplina")
Vamos analisar alguns grupos de disciplinas em especial. Começaremos pelo BC&T
listadedisciplinas<-t(disciplinas.bct)
chutes.bct <- sapply(listadedisciplinas, contachutes,w=ultimo)
chutes.bct<-unique(data.matrix(chutes.bct))
colnames(chutes.bct) <- c("Chutes")
chutes.bct<-chutes.bct[order(chutes.bct,decreasing = TRUE),]
chutes.bct
introducao as equacoes diferenciais ordinarias fenomenos eletromagneticos
355 255
introducao a probabilidade e a estatistica bases epistemologicas da ciencia moderna
210 187
bases matematicas interacoes atomicas e moleculares
179 59
estrutura e dinamica social ciencia, tecnologia e sociedade
46 37
estrutura da materia transformacoes quimicas
20 18
comunicacao e rede funcoes de varias variaveis
15 11
processamento da informacao bases experimentais das ciencias naturais
9 0
Total de Chutes no BC&T
sum(data.matrix(chutes.bct))
[1] 1401
listadedisciplinas<-t(disciplinas.bch)
chutes.bch <- sapply(listadedisciplinas, contachutes,w=ultimo)
chutes.bch<-unique(data.matrix(chutes.bch))
colnames(chutes.bch) <- c("Chutes")
chutes.bch<-chutes.bch[order(chutes.bch,decreasing = TRUE),]
chutes.bch
pensamento economico introducao a probabilidade e a estatistica
215 210
bases epistemologicas da ciencia moderna bases matematicas
187 179
desenvolvimento e sustentabilidade estado e relacoes de poder
79 70
bases computacionais da ciencia estrutura e dinamica social
65 46
ciencia, tecnologia e sociedade estrutura da materia
37 20
pensamento critico
0
kable(chutes.bch)
| | x|
|:------------------------------------------|---:|
|pensamento economico | 215|
|introducao a probabilidade e a estatistica | 210|
|bases epistemologicas da ciencia moderna | 187|
|bases matematicas | 179|
|desenvolvimento e sustentabilidade | 79|
|estado e relacoes de poder | 70|
|bases computacionais da ciencia | 65|
|estrutura e dinamica social | 46|
|ciencia, tecnologia e sociedade | 37|
|estrutura da materia | 20|
|pensamento critico | 0|
Total de Chutes no BC&H
sum(data.matrix(chutes.bch))
[1] 1108
chutes.nucleo <- sapply(t(disciplinas.nucleo), contachutes,w=ultimo)
chutes.nucleo<-unique(data.matrix(chutes.nucleo))
colnames(chutes.nucleo) <- c("Chutes")
chutes.nucleo<-chutes.nucleo[order(chutes.nucleo,decreasing = TRUE),]
chutes.nucleo
mecanica dos solidos i principios de administracao engenharia economica
402 370 327
engenharia unificada i fundamentos de desenho tecnico metodos experimentais em engenharia
279 197 157
introducao as engenharias circuitos eletricos e fotonica materiais e suas propriedades
148 140 130
circuitos eletricos i fenomenos de transporte termodinamica aplicada i
105 73 58
mecanica dos fluidos i circuitos eletricos 2 calculo numerico
30 28 0
Abaixo criamos a lista de cursos e uma função que retorna as disciplinas desse curso.
cursos<-unique(rotulos.cursos[,2])
disciplinasw<-data.frame(disciplinas)
rotulos.disciplinas2<-data.frame(disciplinasw[,1], sapply(disciplinasw[,1],func.rotulo))
colnames(rotulos.disciplinas2) <- c("disciplinas","Cursos")
disciplinas.curso<-function(v){rotulos.disciplinas2[grepl(tolower(v),rotulos.disciplinas2[,2]),1,drop=FALSE]}
func.chutes.curso<-function(v){chutes.label[grepl(tolower(v),chutes.label[,3]),2 ,drop=FALSE]}
soma.chutes.curso<-function(v){ if(dim(func.chutes.curso(v))[1]>0){as.numeric(sum(func.chutes.curso(v)))} else {0}}
chutes.cursos<-c()
for (i in 1:length(cursos)) {
chutes.cursos[[i]]<-as.numeric(soma.chutes.curso(cursos[i]))
}
matrixd<-data.frame(as.vector(cursos), chutes.cursos)
# matrixd<-transform(matrixd, chutes.cursos = as.numeric(chutes.cursos))
matrixd<-matrixd[(matrixd[,2]>90),]
matrixd<-matrixd[(matrixd[,1]!=""),]
matrixd<-matrixd[(matrixd[,1]!="descon"),]
matrixd<-matrixd[order(t(matrixd[,2]), decreasing = TRUE),]
colnames(matrixd)<-c("disciplinas","chutes")
kable(matrixd,row.names=FALSE)
|disciplinas | chutes|
|:-----------|------:|
|nucleocomum | 2281|
|BCH | 1453|
|BCT | 1356|
|EGEST | 982|
|EIAR | 455|
|BCECO | 391|
|EEN | 249|
|BCC | 122|
|LMAT | 107|
|LQUI | 107|
|LBIO | 107|
|LFILO | 107|
|LFIS | 107|
|EINFO | 105|
|EBIOM | 105|
|EAERO | 103|
chutes.egest <- sapply(t(disciplinas.curso("EGEST")), contachutes,w=ultimo)
chutes.egest<-data.matrix(chutes.egest)
colnames(chutes.egest) <- c("Chutes")
chutes.egest<-chutes.egest[order(chutes.egest,decreasing = TRUE),]
chutes.egest
economia de empresas
226
organizacao do trabalho
118
engenharia economica aplicada a sistemas de gestao
103
pesquisa operacional
87
sistemas e processos de producao
80
sistemas cam
76
engenharia laboral
67
desenvolvimento integrado do produto
62
custos
58
gestao de operacoes
56
gerencia de ativos
49
algebra linear
36
inovacao tecnologica
35
sistemas cad/cae
30
engenharia logistica
29
introducao aos processos de fabricacao metal - mecanico
20
planejamento e controle da producao
12
estagio curricular em engenharia de gestao
0
estatistica aplicada a sistemas de gestao
0
qualidade em sistemas
0
trabalho de graduacao i em engenharia de gestao
0
trabalho de graduacao 2 em engenharia de gestao
0
trabalho de graduacao 3 em engenharia de gestao
0
A função abaixo contas os chutes em todas as disciplinas em todos os quadrimestres. ## Chutes Vamos construir a tabela com a série histórica em todas as disciplinas. Mas não vamos exibir agora. Ps: a execução do comando demora alguns minutinhos.
arquivos = list.files(path="./dados/chutes/", pattern="*.txt") # Importa os arquivos do diretório
quad=gsub(".txt","",arquivos)
bct=list()
##### Conta os Chutes - Essa função
for (i in 1:numero.quad) {
bct[[i]]<-sapply(t(disciplinas),contachutes, w=readLines(paste("./dados/chutes/",arquivos[i],sep="")))
}
##### Transforma numa matriz
bct2<-data.frame(bct)
bct2<-data.matrix(bct2)
colnames(bct2) <- quad
Vamos exportar esses dados para o arquivo serie.bct.csv
write.csv(bct2, file = "./saidas/serie.bct.csv")
Arquivo série histórica
Vamos calcular o número total de chutes por quadrimestre.
arquivos = list.files(path="./dados/chutes/", pattern="*.txt")
quad=gsub(".txt","",arquivos)
x4=list()
for (i in 1:numero.quad) {
x4[[i]]=sum(bct[[i]])
}
z4<-data.frame(x4)
z4<-data.matrix(z4)
colnames(z4) <- quad
rownames(z4)<-"chutes"
t(z4)
chutes
2011.1 3626
2011.2 3333
2011.3 3946
2012.1 5353
2012.2 3882
2012.3 4834
2013.1 4485
2013.2 4176
2013.3 5178
2014.1 6100
2014.2 6514
2014.3 7345
2015.1 8143
2015.2 9123
2015.3 10488
2016.1 8188
2016.2 7281
2016.3 9437
2017.1 8352
2017.2 8970
2017.3 7957
2018.1 7542
2018.2 8497
Vamos fazer um barplot
barplot(z4,main="Total de Chutes por Quadrimestre")
x=list()
for (i in 1:numero.quad) {
x[[i]]=sapply(t(disciplinas.bct),contachutes, w=readLines(paste("./dados/chutes/",arquivos[i],sep="")))
}
z<-data.frame(x)
z<-data.matrix(z)
colnames(z) <- quad
library(knitr)
kable(z)
| | 2011.1| 2011.2| 2011.3| 2012.1| 2012.2| 2012.3| 2013.1| 2013.2| 2013.3| 2014.1| 2014.2| 2014.3| 2015.1| 2015.2| 2015.3| 2016.1| 2016.2| 2016.3| 2017.1| 2017.2| 2017.3| 2018.1| 2018.2|
|:----------------------------------------------|------:|------:|------:|------:|------:|------:|------:|------:|------:|------:|------:|------:|------:|------:|------:|------:|------:|------:|------:|------:|------:|------:|------:|
|bases experimentais das ciencias naturais | 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|
|estrutura da materia | 0| 81| 0| 14| 8| 0| 0| 40| 40| 0| 11| 10| 6| 1| 0| 0| 5| 0| 0| 30| 0| 0| 20|
|bases matematicas | 84| 10| 0| 80| 0| 0| 0| 0| 0| 42| 67| 17| 0| 56| 48| 0| 158| 83| 46| 68| 37| 124| 179|
|origem da vida e diversidade dos seres vivos | 0| 22| 0| 20| 10| 34| 0| 0| 61| 0| 14| 0| 17| 3| 0| 0| 0| 0| 0| 0| 0| 0| 0|
|natureza da informacao | 0| 0| 118| 0| 0| 0| 15| 0| 0| 30| 0| 0| 0| 0| 0| 53| 0| 7| 9| 0| 6| 22| 0|
|fenomenos mecanicos | 79| 0| 229| 0| 7| 0| 19| 0| 64| 99| 0| 6| 139| 0| 0| 79| 0| 0| 301| 0| 323| 0| 0|
|transformacoes nos seres vivos e ambiente | 0| 0| 10| 0| 2| 0| 20| 0| 5| 9| 0| 0| 0| 0| 0| 3| 0| 0| 0| 0| 0| 0| 0|
|funcoes de uma variavel | 6| 96| 94| 0| 2| 0| 0| 0| 17| 132| 84| 0| 117| 267| 23| 100| 0| 209| 83| 0| 135| 35| 0|
|geometria analitica | 0| 80| 95| 0| 24| 129| 0| 0| 0| 123| 68| 61| 123| 0| 0| 143| 0| 148| 79| 0| 59| 66| 0|
|processamento da informacao | 243| 0| 60| 210| 0| 38| 25| 3| 0| 0| 216| 77| 115| 27| 55| 180| 25| 0| 56| 0| 0| 81| 9|
|fenomenos termicos | 180| 0| 0| 306| 0| 174| 104| 47| 0| 283| 95| 0| 279| 0| 323| 153| 0| 210| 248| 0| 0| 162| 0|
|transformacoes quimicas | 96| 0| 4| 163| 0| 40| 70| 13| 0| 315| 43| 0| 141| 16| 0| 247| 9| 0| 40| 1| 0| 188| 18|
|introducao as equacoes diferenciais ordinarias | 111| 0| 127| 110| 0| 300| 94| 22| 0| 20| 177| 66| 0| 161| 303| 0| 227| 19| 0| 148| 33| 0| 355|
|bases epistemologicas da ciencia moderna | 92| 1| 0| 16| 0| 0| 491| 89| 215| 322| 0| 13| 83| 56| 28| 17| 143| 0| 28| 163| 74| 21| 187|
|comunicacao e rede | 0| 134| 0| 98| 0| 0| 0| 26| 50| 138| 0| 0| 41| 2| 0| 68| 90| 0| 83| 24| 0| 26| 15|
|fenomenos eletromagneticos | 0| 304| 0| 174| 33| 0| 0| 142| 67| 0| 157| 93| 0| 579| 0| 0| 285| 0| 0| 231| 0| 0| 255|
|transformacoes bioquimicas | 0| 551| 0| 185| 178| 0| 0| 483| 126| 51| 0| 113| 2| 0| 274| 0| 0| 0| 0| 0| 0| 0| 0|
|funcoes de varias variaveis | 0| 265| 0| 32| 0| 0| 21| 5| 61| 391| 265| 260| 311| 104| 0| 122| 15| 0| 32| 215| 0| 119| 11|
|estrutura e dinamica social | 14| 146| 0| 53| 2| 0| 0| 94| 26| 26| 83| 94| 22| 151| 72| 64| 25| 100| 94| 315| 21| 22| 46|
|energia: origem, conversao e uso | 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|
|fisica quantica | 0| 95| 127| 0| 88| 78| 0| 0| 127| 16| 0| 75| 32| 0| 303| 83| 0| 95| 33| 0| 300| 99| 0|
|ciencia, tecnologia e sociedade | 0| 0| 130| 0| 28| 0| 0| 0| 205| 60| 0| 15| 22| 28| 62| 50| 42| 18| 17| 54| 42| 32| 37|
|introducao a probabilidade e a estatistica | 10| 83| 30| 40| 0| 39| 109| 0| 43| 76| 99| 79| 31| 24| 52| 0| 246| 16| 0| 135| 141| 0| 210|
|interacoes atomicas e moleculares | 0| 0| 74| 52| 0| 116| 15| 0| 0| 77| 15| 26| 91| 62| 0| 110| 128| 0| 232| 123| 0| 51| 59|
Vamos analisar a série histórica de chutes no BC%T
x2=list()
for (i in 1:numero.quad) {
x2[[i]]=sum(x[[i]])
}
z31<-data.frame(x2)
colnames(z31) <- quad
rownames(z31)<-"chutes"
z3<-data.matrix(z31)
t(z3)
chutes
Q2014.1 915
Q2014.2 1868
Q2014.3 1098
Q2015.1 1553
Q2015.2 382
Q2015.3 948
Q2016.1 983
Q2016.2 964
Q2016.3 1107
Q2017.1 2210
Q2017.2 1394
Q2017.3 1005
<NA> 1572
<NA> 1537
<NA> 1543
<NA> 1472
<NA> 1398
<NA> 905
<NA> 1381
<NA> 1507
<NA> 1171
<NA> 1048
<NA> 1401
Barplot
barplot(z3,main="Total de Chutes no BCT por Quadrimestre")
###################### Numero de chutes por Aluno
chutesporaluno<-read.csv("./dados/chutes/2018.2.csv")
Ras<-unique(chutesporaluno[1])
Ras<-Ras[!is.na(Ras)]
output4<-margin.table(table(chutesporaluno), 1)
output5<-table(output4)
numero.alunos.chutados<-sum(output5)
barplot(output4,main="Chutes por Aluno")
Vamos ver o número de chutes por aluno:
data_dist <- table(output4)
numero.chutes<-function(v){ if(v==0){numero.alunos.matriculados.2018.1[1]-sum(data_dist)} else { as.numeric(data_dist[v])} }
data_dist2<-t(data.frame(0:8,sapply(0:8,numero.chutes)))
colnames(data_dist2)<-0:8
manipulate(barplot(data_dist2, main="Número de Chutes por Aluno"), x = slider(1,length(data_dist)), y = slider(1, length(data_dist2)))
da<-matrix(data_dist2)
E sua frequência
data_dist4 <- data_dist2/numero.alunos.matriculados.2018.1[1]
manipulate(barplot(data_dist4, main="Percentagem de Número de Chutes por Aluno"), x = slider(1,length(data_dist)), y = slider(8, length(data_dist)))
sum(data_dist)
[1] 4470
deferidasporaluno.2018.1<-read.csv("./dados/chutes/deferidas2018.1.csv")
numero.matriculas.2018.1<-dim(deferidasporaluno.2018.1)
numero.alunos.matriculados.2018.1<-dim(unique(deferidasporaluno.2018.1))
output6<-margin.table(table(deferidasporaluno.2018.1),1)
data_distw <- table(output6)
manipulate(barplot(data_distw[x:y], main="Número de Matrículas Deferidas por Aluno"), x = slider(1,length(data_distw)), y = slider(8, length(data_distw)))
sqrt(var((data_dist)))
[1] 725.2551
slices <- table(output6)
lbls <- 1:7
pie3D(slices,labels=lbls,explode=0.061,
main="Número de Matrículas Deferida por Aluno")
Total de alunos que fizeram matrícula no Q1
numero.alunos.matriculados.2018.1[1]
[1] 10158
Total de pedidos de matriculas em disciplina no Q1
numero.matriculas.2018.1[1]
[1] 41317
Média de disciplinas matriculadas por aluno
numero.matriculas.2018.1[1]/numero.alunos.matriculados.2018.1[1]
[1] 4.067435
Percentagem de alunos chutados em alguma disciplina.
percent(sum(data_dist)/numero.alunos.matriculados.2018.1[1])
[1] "44%"
Vamos começar classificando os RAS por ano
# Funçao que retorna os n ultimos caracteres
substrultimos <- function(x, n){
substr(x, nchar(x)-n+1, nchar(x))}
ano.ingresso.ra<-function(v){
if( grepl(2018, v)[1]){
18 }
else
{if( grepl(2017, v)[1]){
17}
else {
if(as.numeric(substrultimos(v,2)) <17 &&
as.numeric(substrultimos(v,2))>6 ){ as.numeric(substrultimos(v,2))} else 0}}}
temponauniversidade<-function(v){18-ano.ingresso.ra(v)}
Ras.ingresso<-data.frame(Ras,sapply(Ras, ano.ingresso.ra))
colnames(Ras.ingresso)<-c("RA", "Ano")
Vamos ver a frequência de chutes por ano de ingresso.
anos<-6:17
listadechutes<-data.frame(output4)
listadechutes<-listadechutes[!is.na(listadechutes[,1]),]
colnames(listadechutes)<-c("RA", "Chutes")
dfa<-merge(listadechutes, Ras.ingresso, by="RA")
df2=data.frame(dfa[3],dfa[2])
addmargins(table(df2))
Chutes
Ano 1 2 3 4 5 6 7 8 10 Sum
0 1 2 1 2 1 0 0 0 6 13
7 0 0 0 0 0 0 0 0 1 1
8 13 2 1 0 0 0 0 0 1 17
9 19 2 2 1 0 0 0 0 1 25
10 41 18 6 5 0 0 0 0 1 71
11 88 31 23 7 2 3 0 0 0 154
12 158 91 46 27 8 2 1 0 0 333
13 210 120 65 32 13 3 2 1 0 446
14 271 167 96 39 20 12 1 0 0 606
15 363 247 142 66 33 10 5 2 0 868
16 404 288 155 91 34 13 4 3 0 992
17 512 245 104 25 6 0 0 0 0 892
18 14 11 22 4 1 0 0 0 0 52
Sum 2094 1224 663 299 118 43 13 6 10 4470
write.csv(addmargins(table(df2)), file="test.csv")
Densidade no Q2
barplot(table(dfa[3]))
slices2<-table(df2$Ano)
pie3D(slices2,labels=6:17,explode=0.1,
main="Número de Alunos Chutados por Ano")
# Filtrar por disciplina
filtro.disciplina<-function(v){toString(ultimo[grepl(v,ultimo)])}
# filtro.disciplina("principios de administracao")
filtro.disciplina.Ra<-function(v){
aux<- unique(na.omit(as.numeric(unlist(strsplit(unlist(filtro.disciplina(v)), "[^0-9]+")))))
aux<-aux[as.numeric(aux)>9999]
aux
}
Ras.ingresso.disciplina<-function(v){data.frame(filtro.disciplina.Ra(v),sapply(filtro.disciplina.Ra(v), ano.ingresso.ra))}
Vamos olhar Princípios de Administração
barplot(table(Ras.ingresso.disciplina("principios de administracao")[2]), main = "Chutes em principios de administracao")
barplot(table(Ras.ingresso.disciplina("engenharia unificada i")[2]), main = "engenharia unificada i")
Vamos olhar circuitos elétricos e fotônica
barplot(table(Ras.ingresso.disciplina("circuitos eletricos e fotonica")[2]), main = "Chutes em circuitos eletricos e fotonica")
turno<-function(v,w){length(grep(v,ultimo))}
chutes.turno<-data.frame(c("diurno","noturno"), c(turno("matutino") ,turno("noturno")))
colnames(chutes.turno)<-c("turno", "chutes")
chutes.turno
turno chutes
1 diurno 2733
2 noturno 5976
Barplot
pie3D(t(chutes.turno[2]),labels=c("diurno","noturno"))
campus<-function(v){length(grep(v,ultimo))}
chutes.campus<-data.frame(c("SA","SBC"), c(turno("santo andre") ,turno("sao bernardo")))
colnames(chutes.campus)<-c("campus", "chutes")
chutes.campus
campus chutes
1 SA 4405
2 SBC 4263
Barplot
pie3D(t(chutes.campus[2]),labels=c("SA","SBC"))
Melhorou a situação em SBC a noite neste quadrimestre.
campus<-function(v){length(grep(v,ultimo))}
campus.turno <-function(camp,tur){ length(grep(tur,ultimo[grep(camp,ultimo)]))}
vcampus.turno <- Vectorize(campus.turno, SIMPLIFY = FALSE)
chutes.campus<-data.frame(c("SA -","SBC"), c(turno("noturno (sao bernardo)") ,turno("sao bernardo")))
colnames(chutes.campus)<-c("campus", "chutes")
turnos<-c("matutino","noturno")
campus<-c("santo andre","sao bernardo")
chutes.campus.turno<- outer(turnos, campus, vcampus.turno)
colnames(chutes.campus.turno)<-campus
rownames(chutes.campus.turno)<-turnos
chutes.campus.turno
santo andre sao bernardo
matutino 1355 1346
noturno 3050 2917
sa.hist<-function(w){length(grep("santo andre",w))}
sbc.hist<-function(w){length(grep("sao bernardo",w))}
arquivos = list.files(path="./dados/chutes/", pattern="*.txt") # Importa os arquivos do diretório
quad=gsub(".txt","",arquivos)
sa=list()
sbc=list()
##### Conta os Chutes - Essa função já é paralelizada!
for (i in 1:numero.quad) {
sa[[i]]<-sa.hist(readLines(paste("./dados/chutes/",arquivos[i],sep="")))
sbc[[i]]<-sbc.hist(readLines(paste("./dados/chutes/",arquivos[i],sep="")))
}
plot(matrix(t(sa)),type = "o",ylab="SA", main="Chutes em SA")
plot(matrix(t(sbc)),type = "o",ylab="SBC", main="Chutes em SBC")
plot(matrix(t(sa)),type = "o",ylab="SBC", main="Chutes em SA e SBC",col="red", ylim=c(1, 7100))
points(matrix(t(sbc)),col="green",pch = 19,type = "p")
lines(matrix(t(sbc)),col="green")
arquivos2 = list.files(path="./dados/deferidas/", pattern="*.txt") # Importa os arquivos do diretório
quad2=gsub("def","",gsub(".txt","",arquivos2))
filtro.Ra<-function(v){
aux<-unique(na.omit(unlist(strsplit(unlist(v), "[^0-9]+"))))
aux<- aux[as.numeric(aux)>99999]
aux
}
def=c()
for (i in 1:length(arquivos2)) {
def[[i]]<-length(filtro.Ra(readLines(paste("./dados/deferidas/",arquivos2[i],sep=""))))
}
vdef<-def
def<-data.frame(def)
rownames(def) <- quad2
barplot(t(as.vector(def)),main="Alunos Matriculados")
def
def
2013.1 5742
2013.2 7289
2013.3 6924
2014.1 6647
2014.3 7727
2015.1 7676
2015.2 7324
2015.3 9097
2016.1 8752
2016.2 8328
2017.1 9804
2017.2 9069
2017.3 10522
2018.1 10159
plot(vdef,type="o")
Conta o numero de alunos chutados por quadrimestre
chutados=c()
for (i in 1:length(arquivos)) {
chutados[[i]]<-length(filtro.Ra(readLines(paste("./dados/chutes/",arquivos[i],sep=""))))
}
chutados<-data.frame(chutados)
quad=gsub(".txt","",arquivos)
rownames(chutados) <- quad
Modelo de numero de alunos UFABC
### Log fit - be sure to use quotes around the variable names in the call
logdef<-data.frame(1:14,def[1])
colnames(logdef)<-c("quad","chutes")
log.fit <- function( yourdata,dep, ind){
# Self-starting...
y <- yourdata[, dep]
x <- yourdata[, ind]
log.ss <- nls(y ~ SSlogis(x, phi1, phi2, phi3))
# C
C <- summary(log.ss)$coef[1]
# a
A <- exp((summary(log.ss)$coef[2]) * (1/summary(log.ss)$coef[3]))
# k
K <- (1 / summary(log.ss)$coef[3])
plot(y ~ x, main = "Curva Logistica", xlab=ind, ylab=dep,type="o")
lines(0:max(x), predict(log.ss, data.frame(x=0:max(x))), col="red")
r1 <- sum((x - mean(x))^2)
r2 <- sum(residuals(log.ss)^2)
r_sq <- (r1 - r2) / r1
out <- data.frame(cbind(c(C=C, a=A, k=K, R.value=sqrt(r_sq))))
names(out)[1] <- "Curva Logistica"
return(out)
}
log.fit(logdef,"chutes","quad")
Curva Logistica
C 2.467767e+04
a 3.111124e+00
k 5.754050e-02
R.value NaN
Usando a logística temos o seguinte numero de alunos previsto como máximo efetivamente matriculados
1.245091e+04
[1] 12450.91
arquivos = list.files(path="./dados/cancelamento/", pattern="*.txt") # Importa os arquivos do diretório
cancelamentos=list()
##### Conta os Chutes - Essa função
for (i in 1:length(arquivos)) {
cancelamentos[[i]]<-sapply(t(disciplinas),contachutes, w=readLines(paste("./dados/cancelamento/",arquivos[i],sep="")))
}
cancelamentos<-data.frame(cancelamentos)
#cancelamentos <-sort(cancelamentos[which(cancelamentos > 12)], decreasing = TRUE)
quad=gsub("_",".",gsub("cancelamento_disciplinas_","Q",gsub(".txt","",arquivos)))
cancelamentos<-data.frame(cancelamentos)
colnames(cancelamentos)<-quad
colSums(data.frame(cancelamentos))
Q2014.1 Q2014.2 Q2014.3 Q2015.1 Q2015.2 Q2015.3 Q2016.1 Q2016.2 Q2016.3 Q2017.1 Q2017.2 Q2017.3
4432 4979 5296 6178 6515 6888 6450 4344 3230 3545 3380 3178
barplot( colSums(data.frame(cancelamentos)),main="Número de Cancelamentos")
Lembramos a distribuição geral da UFABC
barplot(data_dist, main="Número de Chutes por Aluno")
Agora vamos criar funções para contar os chutes por curso:
###################### Numero de chutes por Aluno
chutesporaluno.ultimoq<-data.frame(read.csv("./dados/chutes/2018.2.csv"))
colnames(chutesporaluno.ultimoq)<-c("ra","turma")
Ras<-unique(chutesporaluno.ultimoq[1])
Ras<-Ras[!is.na(Ras)]
output4<-margin.table(table(chutesporaluno.ultimoq), 1)
chutes.alunos.curso.Ra<-function(v){
chutesporaluno.ultimoq[grep(paste(t(disciplinas.curso(v)),collapse="|"),
chutesporaluno.ultimoq$turma),][1]
}
chutes.alunos.curso<-function(v){
chutesporaluno.ultimoq[grep(paste(t(chutes.alunos.curso.Ra(v)),collapse="|"),
chutesporaluno.ultimoq$ra),]
}
Vamos ver alguns casos
total<-length(t(table(chutes.alunos.curso("EGEST")[1])))
CHEGEST<-t(table(chutes.alunos.curso("EGEST")[1]))
barplot(table(CHEGEST),main="Número de chutes por Aluno na Gestão")
total<-length(t(table(chutes.alunos.curso("BCECO")[1])))
CHEBCECO<-t(table(chutes.alunos.curso("BCECO")[1]))
barplot(table(CHEBCECO),main="Número de chutes por Aluno na Economia")
total<-length(t(table(chutes.alunos.curso("EIAR")[1])))
CHEGEST<-t(table(chutes.alunos.curso("EIAR")[1]))
barplot(table(CHEGEST),main="Número de chutes por Aluno na EIAR")
total<-length(t(table(chutes.alunos.curso("nucleocomum")[1])))
CHnucleocomum<-t(table(chutes.alunos.curso("nucleocomum")[1]))
barplot(table(CHnucleocomum),main="Número de chutes por Aluno no Núcleo Comum")
total<-length(t(table(chutes.alunos.curso("bct")[1])))
CHbct<-t(table(chutes.alunos.curso("bct")[1]))
barplot(table(CHbct),main="Número de chutes por Aluno no BC&T")
total<-length(t(table(chutes.alunos.curso("BCC")[1])))
CHEGEST<-t(table(chutes.alunos.curso("BCC")[1]))
barplot(table(CHEGEST),main="Número de chutes por Aluno no Bach. em Comp.")
Vamos analisar o numero de alunos chutados em cada curso
chutes.alunos.curso.Ra<-function(v){
unique(chutesporaluno.ultimoq[grep(paste(t(disciplinas.curso(v)),collapse="|"),
chutesporaluno.ultimoq$turma),][1])
}
chutes.alunos.curso2<-function(v){
unique(chutesporaluno.ultimoq[grep(paste(t(chutes.alunos.curso.Ra(v)),collapse="|"),
chutesporaluno.ultimoq$ra),][1])
}
nomes.cursos<-read.csv("./dados/listasdedisciplinas/cursos.csv")
nomes.cursos<-nomes.cursos[1:28,]
alunoschutadosporcurso<-function(v){nrow(chutes.alunos.curso.Ra(v))}
chutes.out<-t(sapply( nomes.cursos,alunoschutadosporcurso))
library(knitr)
colnames(chutes.out)<-nomes.cursos
rownames(chutes.out)<-c( "Alunos chutados em pelo menos 1 disciplina do curso")
as<-chutes.out[,order(-chutes.out[1,])]
kable(as[1:12],col.names="Alunos chutados em pelo menos 1 disciplina do curso")
| | Alunos chutados em pelo menos 1 disciplina do curso|
|:-----------|---------------------------------------------------:|
|nucleocomum | 1655|
|BCT | 1216|
|BCH | 1090|
|EGEST | 653|
|EIAR | 469|
|BCECO | 347|
|EEN | 261|
|BCC | 226|
|EAERO | 192|
|EINFO | 189|
|LMAT | 165|
|EBIOM | 155|