class: center, middle, inverse, title-slide # Introdução à Linguagem R ## para Cientistas Ambientais ### Beatriz Milz ### SENACAMB - Semana Nacional de Ciências Ambientais ### Novembro de 2021 --- class: middle <style type="text/css"> /* custom.css */ .left-code { color: #777; width: 38%; height: 92%; float: left; } .right-plot { width: 60%; float: right; padding-left: 1%; } </style> .pull-left[ ## Beatriz Milz - 2019 - * - Doutoranda em Ciência Ambiental - PROCAM/IEE/USP - 2016-2018 - Mestrado em Ciências - Programa de Pós-Graduação em Análise Ambiental Integrada - UNIFESP - 2012-2015 - Bacharelado em Gestão Ambiental - EACH/USP ] .pull-right[ <BR> <center> <img src="https://avatars.githubusercontent.com/u/42153618?v=4" alt="Avatar" style="border-radius: 50%; max-width: 50%; "></center> ] --- ### R: Comunidades, eventos, pacotes, livros.. <center> <a href='https://education.rstudio.com/trainers/'> <img src='img/Hex/CertifiedRstudioTrainer.png' width="150px"></a> <a href='https://rladies.org/'> <img src='img/Hex/1hexlogorladies.jpeg' width="150px"></a> <a href='https://curso-r.com/'> <img src="img/Hex/curso-r-azul.jpg" width="150px"></a> <a href='https://livro.curso-r.com/'> <img src='https://curso-r.com/images/produtos/hex-livro.png' width="150px"></a> <a href='https://saopaulo2019.satrdays.org/'> <img src='img/Hex/2satrdaysp.png' width="150px"></a> <a href='https://latin-r.com/'> <img src='img/Hex/4LatinR_hex_violeta-cut.jpg' width="150px"></a> <a href='https://carpentries.org/'> <img src='img/Hex/carpentries.png' width="150px"> </a> <a href='https://user2021.r-project.org/'> <img src='https://user2021.r-project.org/img/artwork/user-logo-color.png' width="150px"> </a> <a href='https://cienciadedatos.github.io/dados/'> <img src='https://cienciadedatos.github.io/dados/reference/figures/dados-hex.png' width="150px"></a> <a href='https://beatrizmilz.github.io/mananciais/'> <img src='https://beatrizmilz.github.io/mananciais/reference/figures/hexlogo.png' width="150px"></a> </center> --- ## Cronograma .pull-left[ ### Dia 1 - Mais teórico! <img src="https://media.giphy.com/media/HgO7UWoXbkzrW/giphy.gif" width="55%" style="display: block; margin: auto;" /> ] .pull-right[ ### Dia 2 - Mais prático! <img src="https://i.giphy.com/media/aNqEFrYVnsS52/giphy.webp" width="90%" style="display: block; margin: auto;" /> ] --- ## Página do curso
https://beatrizmilz.github.io/2021-senacamb-intro-R/ --- ## O que é o R? > "R é um ambiente de software livre para computação estatística e gráficos". (https://www.r-project.org/) -- - **Por que usar o R**? - É uma linguagem de programação que possui muitas ferramentas para análise de dados - É _código aberto_ (open source) - Possui uma comunidade ativa de pessoas desenvolvedoras - É flexível, permite desenvolver funções e pacotes para facilitar o trabalho - Está disponível, gratuitamente, em diferentes plataformas: Windows, Linux e Mac - Mantido pela [R Development Core Team](https://cran.r-project.org/) --- class: middle, center # As vantagens de analisar dados usando linguagens de programação .footnote[Slide da [Curso-R](https://curso-r.com/)] --- class: middle, center ### As principais linguagens de programação para ciência de dados são ## Código Aberto .footnote[Slide da [Curso-R](https://curso-r.com/)] --- ## O que significa ser código aberto? <br> 1. Acesso gratuito. 2. Todos podem usar as melhores ferramentas independentemente do poder financeiro. 3. Estudantes podem usar as mesmas ferramentas que profissionais. 4. Você pode corrigir problemas e aprimorar a linguagem. 5. Você pode desenvolver suas próprias ferramentas. 6. Possibilita a existência de uma comunidade ativa. .footnote[Slide da [Curso-R](https://curso-r.com/)] --- class: middle, center ## O código é uma linguagem .footnote[Slide da [Curso-R](https://curso-r.com/)] --- - Podemos documentar a nossa análise Slide da [Curso-R](https://curso-r.com/) ```r image_read("https://jeroen.github.io/images/frink.png") %>% image_rotate(270) %>% image_background("blue", flatten = TRUE) %>% image_border("red", "10x10") %>% image_annotate("Linguagens de programação ainda\nsão linguagens!", color = "white", size = 30) ``` -- .pull-left[ #### Entrada <img src = "https://jeroen.github.io/images/frink.png" style="width:25%"> ] -- .pull-right[ #### Saída <img src="index_files/figure-html/frink-out-1.png" width="100%" style="display: block; margin: auto;" /> ] --- class: middle, center ## O código é texto .footnote[Slide da [Curso-R](https://curso-r.com/)] --- ## Podemos copiar e colar <br> <center> <img src="img/copy-paste.png" style="width: 50%"> </center> .footnote[Slide da [Curso-R](https://curso-r.com/)] --- class: middle, center ## Por que o R? .footnote[Slide da [Curso-R](https://curso-r.com/)] --- ## O ciclo da ciência de dados <img src="img/ciclo-ciencia-de-dados.png" style = "display: block; margin-left: auto; margin-right: auto; width: 60%;"> .footnote[Slide da [Curso-R](https://curso-r.com/)] --- class: inverse, middle, center # Como aprender R tem sido importante para mim? --- ## Reprodutibilidade <div class="figure" style="text-align: center"> <img src="https://github.com/allisonhorst/stats-illustrations/raw/master/rstats-artwork/reproducibility_court.png" alt="Ilustração por <a href='https://twitter.com/allison_horst'>Allison Horst</a>" width="55%" /> <p class="caption">Ilustração por <a href='https://twitter.com/allison_horst'>Allison Horst</a></p> </div> --- ## Ferramentas antes de R .pull-left[ - Relatórios e mapas mensais com: <img src="img/pacote-office.jpeg" width="50%" style="display: block; margin: auto;" /><img src="img/QGis_Logo.png" width="50%" style="display: block; margin: auto;" /> ] .pull-right[ - Sem reprodutibilidade - Demorado - Muito trabalho repetitivo! ] --- .pull-left[ ## Ferramentas com R <img src="img/rstats.jpeg" width="60%" style="display: block; margin: auto;" /><img src="img/rstudio.png" width="60%" style="display: block; margin: auto;" /> ] .pull-right[ <img src="img/tidyverse.png" width="55%" style="display: block; margin: auto;" /><img src="img/sf.gif" width="55%" style="display: block; margin: auto;" /> ] --- ## Exemplo: pacote Mananciais - Preciso dos dados do Portal de Mananciais da SABESP"https://mananciais.sabesp.com.br/Situacao - Desenvolvi o pacote mananciais para facilitar o acesso à esses dados: https://beatrizmilz.github.io/mananciais/ - Existe uma apresentação específica nesse tema: https://beatrizmilz.com/talk/2021-ser-uff/ ---
--- class: middle, center
data
sistema
volume_porcentagem
volume_variacao
volume_operacional
pluviometria_dia
pluviometria_mensal
pluviometria_hist
2021-11-08
Cantareira
28.0
-0.2
275.18121
0
28.6
149.0
2021-11-08
Alto Tietê
39.4
-0.1
220.59076
0
17.1
130.1
2021-11-08
Guarapiranga
50.7
-0.1
86.81134
0
9.0
124.0
2021-11-08
Cotia
44.3
-0.4
7.30442
0
8.2
126.1
2021-11-08
Rio Grande
82.8
-0.3
92.88120
0
16.4
140.2
2021-11-08
Rio Claro
44.6
0.0
6.09068
0
33.8
195.5
2021-11-08
São Lourenço
68.6
-0.1
60.96625
0
7.2
154.6
--- <img src="index_files/figure-html/plot-label-fc-1.png" width="100%" style="display: block; margin: auto;" /> --- class: inverse, middle, center # RStudio --- ## RStudio **RStudio** é uma IDE (_integrated development environment_) da Linguagem R, ou seja, um ambiente de desenvolvimento que utilizamos para editar e executar os códigos em R. <img src="img/01-rstudio.png" width="700px" style="display: block; margin: auto;" /> --- ## RStudio <img src="img/haydee1.jpg" width="700px" style="display: block; margin: auto;" /> Fonte: [Haydee Svab](https://www.slideshare.net/mobile/haydeesvab/anlise-crtica-de-dados-primeiros-passos-com-r) --- ## RStudio <img src="img/haydee2.jpg" width="700px" style="display: block; margin: auto;" /> Fonte: [Haydee Svab](https://www.slideshare.net/mobile/haydeesvab/anlise-crtica-de-dados-primeiros-passos-com-r) --- ## RStudio <img src="img/haydee3.jpg" width="700px" style="display: block; margin: auto;" /> Fonte: [Haydee Svab](https://www.slideshare.net/mobile/haydeesvab/anlise-crtica-de-dados-primeiros-passos-com-r) --- ## RStudio <img src="img/haydee4.jpg" width="700px" style="display: block; margin: auto;" /> Fonte: [Haydee Svab](https://www.slideshare.net/mobile/haydeesvab/anlise-crtica-de-dados-primeiros-passos-com-r) --- ## RStudio <img src="img/haydee5.jpg" width="700px" style="display: block; margin: auto;" /> Fonte: [Haydee Svab](https://www.slideshare.net/mobile/haydeesvab/anlise-crtica-de-dados-primeiros-passos-com-r) --- ## RStudio <img src="img/haydee6.jpg" width="700px" style="display: block; margin: auto;" /> Fonte: [Haydee Svab](https://www.slideshare.net/mobile/haydeesvab/anlise-crtica-de-dados-primeiros-passos-com-r) --- ## RStudio <img src="img/haydee7.jpg" width="700px" style="display: block; margin: auto;" /> Fonte: [Haydee Svab](https://www.slideshare.net/mobile/haydeesvab/anlise-crtica-de-dados-primeiros-passos-com-r) --- ## RStudio <img src="img/haydee8.jpg" width="700px" style="display: block; margin: auto;" /> Fonte: [Haydee Svab](https://www.slideshare.net/mobile/haydeesvab/anlise-crtica-de-dados-primeiros-passos-com-r) --- ### `R` como calculadora - O `R` permite realizar muitas operações matemáticas! .pull-left[ ```r 2 + 5 # adição ``` ``` ## [1] 7 ``` ```r 9 - 4 # subtração ``` ``` ## [1] 5 ``` ] .pull-right[ ```r 5 * 2 # multiplicação ``` ``` ## [1] 10 ``` ```r 7 / 5 # divisão ``` ``` ## [1] 1.4 ``` ] - `CTRL + ENTER`: executa a linha selecionada no script. --- ### `R` como calculadora ```r # oito elevado ao quadrado 8 ^ 2 # potencia ``` ``` ## [1] 64 ``` ```r # a raiz quadrada de 1024 sqrt(1024) ``` ``` ## [1] 32 ``` A ordem matemática das operações também vale no R. --- ## O que é um objeto? - Ao se desenvolver um projeto, você irá trabalhar com diversos tipos de arquivos, além de informações que serão repetidas ao longo do script. - Para reutilizar essas informações ao longo do script utilizamos o que chamamos de **objeto** - Um objeto retém e representa um valor, função ou base de dados --- ## Atribuindo valor a um objeto no R - Para atribuir um valor a um objeto no R, utilizamos o operador: .center[**`<-`**] .center[`nome_do_objeto <- valor`] - Atalho: `ALT` + `-`: cria o `<-` sinal de atribuição. Exemplo: ```r minha_idade <- 28 minha_idade ``` ``` ## [1] 28 ``` --- ## Exemplo: ```r nome <- "Daenerys Targaryen" nome ``` ``` ## [1] "Daenerys Targaryen" ``` ```r salario <- 3984.23 salario ``` ``` ## [1] 3984.23 ``` ```r ativo <- TRUE ativo ``` ``` ## [1] TRUE ``` --- ## Nomes de objetos - Os nomes devem começar com uma letra. Podem conter letras, números, _ e . - Não usar acentuação e espaços nos nomes de objetos. - Recomendação : **usar_snake_case**, ou seja, palavras escritas em minúsculo separadas pelo underscore (`_`). - O `R` é *case sensitive*, isto é, faz a diferenciação entre as letras minúsculas e maiúsculas. Portanto, um objeto chamado `teste` é diferente de uma outro objeto chamada `Teste`. --- ## Funções - Funções permitem __automatizar tarefas__ comuns de forma mais poderosa do que copiar e colar. - O R possui muitas funções já implementadas. - Pacotes são coleções de funções, dados e documentação que ampliam as capacidades do R básico. Veremos como instalá-los no final desta atividade! - Você pode desenvolver suas próprias funções! 👩💻 --- ### Exemplo de funções básicas do R ```r # Combinar elementos - Função c() ano_nascimento_irmaos <- c(1993, 1998, 2001, 2012, 2012) ``` -- ```r # Podemos fazer operações com o resultado idade_irmaos <- 2020 - ano_nascimento_irmaos idade_irmaos ``` ``` ## [1] 27 22 19 8 8 ``` -- ```r # Calculando a média - Função mean() media_idade_irmaos <- mean(idade_irmaos) media_idade_irmaos ``` ``` ## [1] 16.8 ``` --- ### Estrutura de uma função - __Nome__ - é como ela fica salva no ambiente, esse nome é importante para usarmos a função. - __Argumentos__ - são parâmetros usados internamente pela função. Muitas funções possuem argumentos com valores padrão. ```r # para usar essa função nome_da_funcao(nome_do_argumento = valor_do_argumento) ``` --- ### Exemplo sobre argumentos ```r # Arredondar valores - função round() # help(round) # round(x, digits = 0) round(media_idade_irmaos) ``` ``` ## [1] 17 ``` ```r round(media_idade_irmaos, digits = 1) ``` ``` ## [1] 16.8 ``` --- ## Funções importantes do R base | Função | O que retorna? | |--:|--:| | `sum()` | Soma | | `mean()` | Média | | `median()` | Mediana | | `var()` | Variância (simples) | | `sd()` | Desvio Padrão | | `max()` | Valor máximo | | `min()` | Valor mínimo | | `round()` | Valor arredondado | --- ## Help! - Pedir ajuda: **help**(nome_da_funcao) ou **?**nome_da_funcao. ```r help(sum) ?sum ``` - Se a dúvida permanecer, procure no [Stack OverFlow](https://stackoverflow.com/) ou Google. - E se ainda tiver dúvidas, pergunte para a comunidade (há grupos no Telegram e outras redes sociais). --- class: middle, center, inverse # Operadores Relacionais e Lógicos --- ## Operadores Relacionais - Igual a: **==** - Diferente de: **!=** - Maior que: **>** - Maior ou igual: **>=** - Menor que: **<** - Menor ou igual: **<=** --- ## Operadores Relacionais Igual a: **==** ```r TRUE == TRUE ``` ``` ## [1] TRUE ``` ```r TRUE == FALSE ``` ``` ## [1] FALSE ``` --- ## Operadores Relacionais Diferente de **!=** ```r TRUE != TRUE ``` ``` ## [1] FALSE ``` ```r TRUE != FALSE ``` ``` ## [1] TRUE ``` --- ## Operadores Relacionais .pull-left[ Menor que: **<** ```r 3 < 5 ``` ``` ## [1] TRUE ``` Maior que: **>** ```r 3 > 5 ``` ``` ## [1] FALSE ``` ] .pull-right[ Menor ou igual a: **<=** ```r 10 <= 10 ``` ``` ## [1] TRUE ``` Maior ou igual a: **>=** ```r 10 >= 10 ``` ``` ## [1] TRUE ``` ] --- ## Operadores Lógicos - AND - E: **&** Será verdadeiro se os dois forem verdadeiros (`TRUE`) .pull-left[ ```r x <- 5 x >= 3 & x <=7 ``` ``` ## [1] TRUE ``` ] .pull-right[ ```r y <- 2 y >= 3 & y <= 7 ``` ``` ## [1] FALSE ``` ] --- ## Operadores Lógicos - OR - OU: **|** Será verdadeiro se um dos dois forem verdadeiros (`TRUE`) .pull-left[ ```r y <- 2 y >= 3 | y <=7 ``` ``` ## [1] TRUE ``` ] .pull-right[ ```r y <- 1 y >= 3 | y == 0 ``` ``` ## [1] FALSE ``` ] --- ## Operadores Lógicos - NOT - Negação: **!** ```r !TRUE ``` ``` ## [1] FALSE ``` ```r !FALSE ``` ``` ## [1] TRUE ``` ```r x <- 5 (!x < 4) ``` ``` ## [1] TRUE ``` --- class: middle, center, inverse # Tipos básicos de dados --- ## Tipos básicos de dados São os tipos básicos de dados que podem ser representados na linguagem R. É neles que guardamos as informações que necessitamos para um algoritmo. - **Integer**: números inteiros - **Double/Numeric**: números racionais - **Logical**: tipos lógicos, `TRUE` ou `FALSE` - **Character**: texto (sempre entre aspas) - **Factor**: dados categóricos (não falaremos aqui) - A função `class()` retorna o tipo do dado. --- ## Números - Números racionais serão considerados como `double/numeric`: ```r class(3) ``` ``` ## [1] "numeric" ``` ```r class(3.1) ``` ``` ## [1] "numeric" ``` --- ## Lógicos - Verdadeiro (`TRUE`) ou Falso (`FALSE`) ```r class(TRUE) ``` ``` ## [1] "logical" ``` - O R entende `TRUE` sendo igual a um, e `FALSE` sendo igual a zero. - Isso significa que podemos fazer operações matemáticas com eles (como por exemplo somar): ```r TRUE + TRUE + TRUE + FALSE ``` ``` ## [1] 3 ``` --- ## Textos - **Qualquer** código entre aspas será interpretado como texto (`character`): ```r class("TEXTO") ``` ``` ## [1] "character" ``` ```r escola <- c("Fundamental", "Médio", "Superior") class(escola) ``` ``` ## [1] "character" ``` ```r class("3") ``` ``` ## [1] "character" ``` --- ## NA Uma característica importante do R que pode dificultar a comparação são os valores ausentes ou **NAs** (não disponíveis). **NA** representa um valor desconhecido. --- ## NA - Operações envolvendo um valor desconhecido também será desconhecido: .pull-left[ ```r NA > 10 ``` ``` ## [1] NA ``` ```r 10 == NA ``` ``` ## [1] NA ``` ] .pull-right[ ```r NA + 10 ``` ``` ## [1] NA ``` ```r NA / 2 ``` ``` ## [1] NA ``` ] --- ## NA ```r NA == NA ``` ``` ## [1] NA ``` --- ## NA `is.na()` é a função que testa se um objeto é NA. ```r vetor_numerico <- c(NA, 1, 5, 2, 5, NA) is.na(vetor_numerico) ``` ``` ## [1] TRUE FALSE FALSE FALSE FALSE TRUE ``` ```r !is.na(vetor_numerico) ``` ``` ## [1] FALSE TRUE TRUE TRUE TRUE FALSE ``` --- ## Argumento importante: ### `na.rm = TRUE` .pull-left[ ```r sum(vetor_numerico) ``` ``` ## [1] NA ``` ```r sum(vetor_numerico, na.rm = TRUE) ``` ``` ## [1] 13 ``` ] .pull-right[ ```r mean(vetor_numerico) ``` ``` ## [1] NA ``` ```r mean(vetor_numerico, na.rm = TRUE) ``` ``` ## [1] 3.25 ``` ] --- ## Conversão de classes Podemos alterar o tipo de dado de um objeto com as funções iniciadas com `as.`: - `as.numeric()` - `as.integer()` - `as.logical()` - `as.character()` - `as.factor()` --- ## Conversão de classes **Exemplos de conversão de classes** ```r vetor_logical <- c(TRUE, FALSE, TRUE, FALSE) as.integer(vetor_logical) ``` ``` ## [1] 1 0 1 0 ``` ```r as.numeric(vetor_logical) ``` ``` ## [1] 1 0 1 0 ``` ```r as.character(vetor_logical) ``` ``` ## [1] "TRUE" "FALSE" "TRUE" "FALSE" ``` --- ## Conversão de classes **Exemplos de conversão de classes** ```r frutas <- c("banana", "maça", "melancia") as.integer(frutas) ``` ``` ## [1] NA NA NA ``` ```r as.numeric(frutas) ``` ``` ## [1] NA NA NA ``` ```r as.character(frutas) ``` ``` ## [1] "banana" "maça" "melancia" ``` --- class: middle, center, inverse # Tipos de objetos --- ## Tipos de objetos - No R, os 4 principais tipos de dados são: `vetor`, `matriz`, `lista`, `data.frame` - Vamos focar em dois: `vetor` e `data.frame`, pois: - são os que mais usamos nas tarefas comuns de análise de dados, - são conceitos importantes para utilizar o tidyverse. --- ## Vetores - Armazena elementos de mesma classe, apenas uma dimensão. - São criados usando a função `c()` - Exemplo: ```r primeiro_semestre <- c("Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho") ``` ```r # Retorna o comprimento do vetor - quantos elementos ele tem? length(primeiro_semestre) ``` ``` ## [1] 6 ``` --- ## Dataframes - Possuem duas dimensões: linhas e colunas. - Cada colunas pode ser de classes diferentes. - Pense em uma tabela, como está acostumada a ver no Excel por exemplo. |especie |ilha | comprimento_bico| profundidade_bico| comprimento_nadadeira| massa_corporal|sexo | ano| |:-----------------|:---------|----------------:|-----------------:|---------------------:|--------------:|:-----|----:| |Pinguim-de-adélia |Torgersen | 39.1| 18.7| 181| 3750|macho | 2007| |Pinguim-de-adélia |Torgersen | 39.5| 17.4| 186| 3800|fêmea | 2007| |Pinguim-de-adélia |Torgersen | 40.3| 18.0| 195| 3250|fêmea | 2007| |Pinguim-de-adélia |Torgersen | NA| NA| NA| NA|NA | 2007| |Pinguim-de-adélia |Torgersen | 36.7| 19.3| 193| 3450|fêmea | 2007| |Pinguim-de-adélia |Torgersen | 39.3| 20.6| 190| 3650|macho | 2007| --- class: middle, center, inverse # Pacotes no R --- ## Pacotes no R **Pacotes** são coleções de funções, dados e documentação que estendem as capacidades do `R` básico. Eles precisam ser instalados e carregados. <img src="img/icon-packages.jpg" width="30%" style="display: block; margin: auto;" /> --- ## Instalação de Pacotes: - Via CRAN: `install.packages("nome-do-pacote")` ```r install.packages("tidyverse") ``` - Via GitHub: `devtools::install_github("nome-da-org/nome-do-repo)` ```r devtools::install_github("tidyverse/dplyr") ``` --- ## Carregar pacotes: - Função: `library(nome-do-pacote)` ```r library(tidyverse) ``` ## Dicas sobre Pacotes 1. Você só precisa instalar o pacote uma vez, mas precisa carregá-lo sempre que começar uma nova sessão; 2. Para instalar o pacote use as aspas; 3. Para carregar o pacote, não é necessário utilizar aspas. --- ## Conheça a comunidade #rstats <div class="figure" style="text-align: center"> <img src="img/horst-starwars-hands.png" alt="Ilustração por <a href='https://twitter.com/allison_horst'>Allison Horst</a>" width="40%" /> <p class="caption">Ilustração por <a href='https://twitter.com/allison_horst'>Allison Horst</a></p> </div> --- class: center ## Muito obrigada! .pull-left[ <img src="https://media.giphy.com/media/M9NbzZjAcxq9jS9LZJ/giphy.gif" width="50%" style="display: block; margin: auto;" /> Slides criados usando os pacotes em R 📦 : [**xaringan**](https://github.com/yihui/xaringan)<br> [gadenbuie/xaringanthemer](https://github.com/gadenbuie/xaringanthemer) O chakra vem da biblioteca javascript [remark.js](https://remarkjs.com), e os pacotes [**knitr**](http://yihui.name/knitr), e [R Markdown](https://rmarkdown.rstudio.com). ] .pull-right[ <center> <img src="https://avatars.githubusercontent.com/u/42153618?v=4" alt="Avatar" style="border-radius: 50%; max-width: 50%; "></center> <i class="fas fa-home"></i> [beatrizmilz.com](https://beatrizmilz.com) <i class="fab fa-twitter"></i> [@BeaMilz](https://twitter.com/BeaMilz) <!-- <i class="far fa-envelope"></i> [milz.bea@gmail.com](mailto:milz.bea@gmail.com) --> ] <!-- inicio academic icons --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/jpswalsh/academicons@1/css/academicons.min.css"> <!-- final academic icons --> <!-- inicio font awesome --> <script src="https://kit.fontawesome.com/1f72d6921a.js" crossorigin="anonymous"></script> <!-- final font awesome -->