Uploaded avatar of iHiD

É o Analytical April!

@iHiD
há Mais de 3 anos
Vídeo

Olá a todos! Já tivemos o Fevereiro Funcional e o Março Mecânico. Agora é tempo de Abril Analítico, em que nos vamos focar em linguagens que são ótimas para a ciência de dados.

Como já vens a esperar dos últimos meses, neste vídeo o Erik e eu vamos dar-te uma visão rápida do que o mês tem para oferecer e das diferentes linguagens que vamos explorar.

Então, como habitualmente, o Erik vai falar-nos das linguagens daqui a pouco, mas eu vou começar por dar-te alguns dos detalhes práticos do mês.

Primeiro, as linguagens em destaque deste mês. Temos apenas três este mês: Julia, Python e R. Cada uma destas linguagens é bastante diferente e, obviamente, o Python é uma linguagem muito polivalente, mas este mês vamos incentivar-te a experimentar usá-las com uma mentalidade de ciência de dados.

Para receberes o distintivo do Abril Analítico, tens de completar cinco exercícios numa dessas linguagens. Vamos explorar as diferenças entre elas daqui a pouco, mas em termos do Exercism, o nosso percurso de Python tem um programa de estudos fantástico, por isso recomendo mesmo que o experimentes. Também esperamos lançar um programa de estudos de Julia durante o mês; grande parte do trabalho já está feito e só precisa de ser polido. O R não tem um programa de estudos, mas tem muitos exercícios interessantes para experimentares.

Temos cinco exercícios em destaque para experimentares:

  • etl: onde podes explorar a reformatação de dados para um formato diferente
  • largest-series-product: onde podes praticar formas eficientes de procurar padrões numa string de algarismos
  • saddle-points: para explorar o trabalho com arrays/matrizes multidimensionais
  • sum-of-multiples: para praticar a filtragem e a soma de uma sequência de números
  • word-count: converter uma string em palavras e contá-las

Um lembrete: além do distintivo do Abril Analítico, há um distintivo #12in23, que dura o ano todo, que podes obter resolvendo os vários exercícios em destaque em qualquer altura do ano. Por isso, para receberes esse distintivo, tens de resolver esses 5 exercícios em Python, R ou Julia em algum momento deste ano! Para a lista completa de exercícios, há uma publicação no fórum com ligação a partir da página do Abril Analítico.

Por fim, antes de nos aprofundarmos nas linguagens, um lembrete: durante o mês de março lançámos o nosso novo servidor Discord. Tem havido imensa atividade divertida por lá, por isso não deixes de espreitar. A ligação está na descrição abaixo!

Muito bem, vamos explorar as linguagens. Vamos ver uma visão rápida de cada uma das linguagens e depois aprofundamos as suas características e casos de uso. Vamos começar pelo Python.

Python

  • Concebida e desenvolvida por Guido van Rossum no final dos anos 80, como sucessora da linguagem de programação ABC. Lançada pela primeira vez em 1991.
  • Desenvolvida nos Países Baixos, no Centrum Wiskunde & Informatica (CWI), um laboratório de investigação financiado pelo governo, famoso por ser o local onde Edsger Dijkstra fez a maior parte do seu trabalho.
  • O Guido programava em C e com scripts de shell, mas ambos tinham desvantagens. O Python procura o melhor dos dois mundos, sem as desvantagens.
  • Gerida pela Python Software Foundation, e as alterações à linguagem acontecem através das Python Enhancement Proposals (PEPs), semelhantes às RFC.

R

  • Criada por Ross Ihaka e Robert Gentleman na Universidade de Auckland. O R pode ser considerado uma implementação diferente da linguagem S (com diferenças relativamente pequenas), à qual se seguiu o S-plus, uma implementação comercial (não aberta) do S. Embora o R partilhe a maior parte da sintaxe com o S, a sua semântica é inspirada no Scheme
  • Objetivo: criar uma linguagem mais adequada à computação e aos gráficos estatísticos e mais fácil de usar do que software comparável concebido por informáticos

Julia

  • Desenvolvida por Jeff Bezanson, Stefan Karpinski, Viral B. Shah e Alan Edelman de forma aberta, tem atualmente mais de mil contribuidores
  • Objetivo: criar uma linguagem gratuita e de alto nível que tivesse a velocidade do C, o dinamismo do Ruby, a metaprogramação do LISP, as capacidades de uso geral do Python, o suporte estatístico do R, o suporte de álgebra linear do MatLab e a potência de processamento de strings do Perl, tudo isto sendo capaz de suportar execução massivamente paralela
  • Excelente para computação científica, mas também uma linguagem de uso geral (o framework Genie para aplicações web)

Como acontece com muitas linguagens, todas as três nasceram da insatisfação :)

Muito bem. Então, em termos de casos de uso, quando usarias cada uma destas linguagens em vez das outras?

Python

  • Linguagem verdadeiramente de uso geral (sites, scripts, computação científica)
  • Pode ser usada para muitos fins diferentes: IA (TensorFlow), scripts de computação científica (NumPy), sites (Django), sistemas embebidos (MicroPython), interligação com hardware (por exemplo, Raspberry Pi), jogos (EVE Online) e o Python até foi a Marte
  • Ótima para aprender a programar: uma infinidade de recursos e uma enorme comunidade. Há muita orientação sobre como escrever código Pythónico (ou seja, como escrever código Python idiomático, com exemplos), sendo «O explícito é melhor que o implícito» e «A legibilidade conta». Muitos sistemas operativos já a trazem instalada por predefinição
  • Uma das linguagens mais usadas neste momento, por isso, muita documentação, muitas bibliotecas e uma grande comunidade

R

  • O R é usado numa grande variedade de contextos, incluindo por investigadores para analisar dados de experiências, por universidades para ensinar estatística e análise de dados, no setor financeiro, onde a estatística é fundamental (por exemplo, nos seguros), no retalho (a Amazon usa o R para análise de dados) e na indústria transformadora (a John Deere estima quantas peças sobresselentes produzir), pelo National Weather Service para ajudar a prever o tempo e catástrofes, no jornalismo de dados (analisar dados do mundo real e dar-lhes sentido, muitas vezes com visualização) e é muito usado na saúde, por exemplo, para determinar a segurança de um medicamento com base em ensaios pré-clínicos

Julia:

  • Excelente para computação científica, mineração de dados, aprendizagem automática, álgebra linear e computação distribuída. A notação será parecida com a notação matemática, o que torna a passagem da equação ao código relativamente fácil
  • Computação distribuída: as tarefas (=corrotinas) e os canais permitem executar código em paralelo a comunicar entre si, e há suporte multiprocesso com passagem de mensagens (ótimo para computação de alto desempenho)
  • Usada no projeto Celeste (um supercomputador a correr código Julia para analisar 178 terabytes de dados astronómicos) (o que faz da Julia parte do clube dos petaflops, onde até então só estavam C, C++ e Fortran; a Julia foi a primeira linguagem dinâmica, com mil biliões de cálculos de vírgula flutuante por segundo, ou seja, 1 seguido de 15 zeros), no Clima (Climate Modeling Alliance), que tem pessoas do Caltech, do MIT e do Jet Propulsion Laboratory da NASA a desenvolver um modelo de previsão climática, no CERN e na ASML

E, do ponto de vista da programação, em que diferem? São funcionais, orientadas a objetos, etc.?

Python:

  • Dinâmica e fortemente tipada
  • Multiparadigma: imperativa, funcional, mas na verdade uma linguagem orientada a objetos (tudo é um objeto)
  • O intérprete predefinido, o CPython, compila para bytecode e este é depois interpretado numa máquina virtual. O PyPy é um substituto do CPython que compila just-in-time para código máquina

R:

  • Dinâmica e fortemente tipada
  • Multiparadigma: um núcleo funcional, mas também suporta estilos procedural ou orientado a objetos

Julia:

  • Dinâmica e fortemente tipada, compilada just-in-time
  • Multiparadigma: imperativa, orientada a objetos (sobrecarga através de multiple dispatch), funcional (funções de ordem superior, aplicação parcial, operador de pipe)
  • O código é compilado just-in-time, ahead-of-time, em tempo de execução

Continuando a olhá-las do ponto de vista da programação, alguma destas linguagens tem características especialmente marcantes?

Python:

  • Sintaxe agradável: a sensibilidade aos espaços em branco torna o âmbito fácil de ver. O código costuma ser fácil de ler, por exemplo, condições Boolean legíveis por humanos (and/or)
  • Expressiva: faz muito com relativamente pouco código (compreensões de listas, geradores, decoradores)
  • Uma enorme quantidade de bibliotecas disponíveis para os mais variados fins
  • Como já foi referido, é verdadeiramente uma linguagem de uso geral, pois pode ser usada em muitos cenários diferentes

Julia

  • Multiple dispatch. Decide que função chamar com base nos tipos de todos os argumentos (como a sobrecarga de funções)
  • Dinâmica, mas com um desempenho excelente. O desempenho da Julia pode rivalizar com o do Fortran e aproximar-se do do C. O código «normal» é frequentemente eficiente (não são precisos truques malucos e as funções mais pequenas são até incentivadas). Há bibliotecas para executar código na GPU
  • Computação distribuída: as tarefas (=corrotinas) e os canais permitem executar código em paralelo a comunicar entre si, e há suporte multiprocesso com passagem de mensagens (ótimo para computação de alto desempenho)
  • Excelente para computação científica, mineração de dados, aprendizagem automática, álgebra linear e computação distribuída. A notação será parecida com a notação matemática, o que torna a passagem da equação ao código relativamente fácil

R:

  • Tipos de dados flexíveis: o vetor é o tipo central, até os escalares são vetores. Os vetores podem ter metadados associados (por exemplo, os nomes dos seus elementos). As listas são heterogéneas (podem ter elementos de tipos diferentes). Há um tipo especial, o dataframe, para uma coleção de vetores (todos com o mesmo comprimento).
  • As operações vetorizadas permitem atualizar vetores de forma concisa, eficiente e legível
  • O R é um conjunto integrado de ferramentas de software para manipulação de dados, cálculo e representação gráfica. Exploração, visualização e manipulação de dados fáceis através do R Studio. Excelente para mineração de dados
  • Uma ótima comunidade, simpática e diversificada. A R for Data Science Online Learning Community é uma comunidade de pessoas que aprendem R, com todos os níveis de experiência, que trabalham em conjunto para melhorar as suas competências. Há um grupo Slack aberto onde os membros podem manter o contacto e ajudar-se uns aos outros com problemas.

Se alguém não tiver a certeza de qual experimentar durante abril, como recomendas que tome a decisão?

Como tudo em TI: depende! Neste caso, diria que depende sobretudo dos teus objetivos e da tua experiência pessoal.

Se és relativamente novo na programação, tens interesse em IA ou em aprendizagem automática, ou queres aprender uma linguagem que possas usar para muitas coisas diferentes, provavelmente recomendo começar pelo Python: A quantidade de recursos disponíveis para Python é gigantesca, incluindo muitos cursos online gratuitos O Python é usado por todo o lado em IA e aprendizagem automática O Python pode ser usado para um grande número de finalidades O percurso de Python tem o Modo de Aprendizagem ativado, o que te pode ajudar a aprender os conceitos centrais da linguagem de forma divertida

Se tens interesse em trabalho estatístico, queres explorar e visualizar dados ou tens curiosidade sobre uma forma diferente de trabalhar com dados, a linguagem R é uma excelente escolha: Os tipos de dados do R baseiam-se em coleções de dados (vetores/listas) e as operações podem ser aplicadas às coleções com facilidade (sem necessidade de ciclos) O IDE RStudio é excelente para explorar e visualizar dados O R tem um excelente suporte para análise estatística O R permite criar gráficos de dados com facilidade

Se tens interesse em computação científica, queres executar código em simultâneo, dás mesmo importância ao desempenho ou queres aprender uma linguagem moderna e elegante que oferece algo diferente da maioria das outras linguagens, recomendo a Julia:

  • O multiple dispatch será novidade para muitos e é incrivelmente poderoso
  • A Julia é excelente para computação científica
  • O sistema de tipos da Julia é flexível e expressivo
  • A Julia tem um desempenho excelente
  • A Julia é excelente para execução concorrente

Claro que, se tiveres tempo, recomendo que experimentes as três! Nunca se sabe bem de que linguagem vamos gostar sem a experimentar.

01 de abril de 2023 · Foi útil?