Uploaded avatar of iHiD

É o Analytical April!

@iHiD
Mais de 3 anos atrás
Vídeo

Oi, pessoal! Já tivemos o Functional February e o Mechanical March. Agora chegou a vez do Analytical April, em que vamos focar nas linguagens que são ótimas para ciência de dados.

Como vocês já esperam dos últimos meses, neste vídeo eu e o Erik vamos dar uma visão geral rápida sobre o que o mês traz e as diferentes linguagens que vamos explorar.

Então, como sempre, o Erik vai falar sobre as linguagens daqui a pouco, mas eu vou começar dando alguns detalhes práticos do mês.

Primeiro, as linguagens em destaque deste mês. Temos apenas três: Julia, Python e R. Cada uma delas é bem diferente e, claro, Python é uma linguagem bastante multiuso, mas neste mês vamos incentivar você a experimentar essas linguagens com uma mentalidade de ciência de dados.

Para ganhar a medalha do Analytical April, você precisa concluir cinco exercícios em uma dessas linguagens. Vamos explorar as diferenças entre elas daqui a pouco, mas, nos termos do Exercism, nossa trilha de Python tem um programa de estudos fantástico, então recomendo muito que você experimente. Também esperamos lançar um programa de estudos de Julia durante o mês: boa parte do trabalho já está feita e só falta dar um polimento. R não tem um programa de estudos, mas tem muitos exercícios interessantes para você brincar.

Temos cinco exercícios em destaque para experimentar:

  • etl: em que você pode explorar a reformatação de dados para um formato diferente
  • largest-series-product: em que você pode praticar formas eficientes de procurar padrões em uma string de dígitos
  • saddle-points: para explorar o trabalho com arrays multidimensionais/matrizes
  • 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 da medalha do Analytical April, existe uma medalha #12in23 que vale o ano todo e que você pode ganhar resolvendo os vários exercícios em destaque em qualquer momento do ano. Ou seja, você vai precisar resolver esses 5 exercícios em Python, R ou Julia em algum momento deste ano para ganhar essa medalha! Para ver a lista completa de exercícios, há um post no fórum linkado na página do Analytical April.

Por último, antes de entrarmos nas linguagens, um lembrete: durante março lançamos nosso novo servidor do Discord. Tem rolado muita atividade divertida por lá, então não deixe de conferir. O link está na descrição abaixo!

Bom, vamos explorar as linguagens. Vamos ter uma visão geral rápida de cada uma e depois entramos nos recursos e nos casos de uso. Vamos começar com Python.

Python

  • Concebida e desenvolvida por Guido van Rossum no fim da década de 1980 como sucessora da linguagem de programação ABC. Lançada pela primeira vez em 1991.
  • Desenvolvida na Holanda, no Centrum Wiskunde & Informatica (CWI) (famoso por ser o lugar onde Edsger Dijkstra fez a maior parte do seu trabalho), um laboratório de pesquisa financiado pelo governo.
  • Guido programava em C e com shell scripts, mas os dois tinham desvantagens. Python busca o melhor dos dois mundos, sem as desvantagens.
  • É mantida pela Python Software Foundation e as mudanças na linguagem acontecem por meio de Python Enhancement Proposals (PEPs) (algo parecido com as RFCs)

R

  • Criada por Ross Ihaka e Robert Gentleman na Universidade de Auckland. R pode ser considerada uma implementação diferente da linguagem S (com diferenças relativamente pequenas), que foi sucedida pelo S-plus, uma implementação comercial (não aberta) de S. Embora R compartilhe a maior parte da sintaxe com S, sua semântica é inspirada em Scheme
  • Objetivo: criar uma linguagem mais adequada à computação estatística e a gráficos, e mais fácil de usar do que softwares comparáveis projetados por cientistas da computação

Julia

  • Desenvolvida por Jeff Bezanson, Stefan Karpinski, Viral B. Shah e Alan Edelman de forma aberta, e atualmente tem mais de mil colaboradores
  • Objetivo: construir uma linguagem gratuita e de alto nível que tenha a velocidade do C, o dinamismo do Ruby, a metaprogramação do LISP, a versatilidade de propósito geral do Python, o suporte a estatística do R, o suporte a álgebra linear do MatLab e o poder de processamento de strings do Perl, tudo isso sendo capaz de dar suporte a execução massivamente paralela
  • Excelente para computação científica, mas também uma linguagem de propósito geral (o framework Genie para aplicativos web)

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

Certo. Então, em termos de casos de uso, quando você usaria cada uma dessas linguagens em vez das outras?

Python

  • Linguagem genuinamente de propósito geral (sites, scripts, computação científica)
  • Pode ser usada para muitos propósitos diferentes: IA (TensorFlow), scripts de computação científica (NumPy), sites (Django), sistemas embarcados (micro python), integração com hardware (por exemplo, raspberry pi), jogos (EVE online) e o Python até foi para Marte
  • Ótima para aprender a programar: abundância de recursos e uma comunidade enorme. Há muita orientação sobre como escrever código Pythonic (ou seja, como escrever código Python idiomático, com exemplos), sendo “Explicit is better than implicit” e “Readability counts” os lemas. Muitos sistemas operacionais já vêm com ela instalada por padrão
  • Uma das linguagens mais usadas no momento, então há muita documentação, muitas bibliotecas e uma grande comunidade

R

  • R é usada em uma grande variedade de lugares, incluindo por pesquisadores para analisar dados de experimentos, por universidades para ensinar estatística e análise de dados, pelo setor financeiro, já que a estatística é fundamental (por exemplo, em seguros), o mesmo valendo para o varejo (a Amazon usa R para análise de dados) e para a manufatura (a John Deere estima quantas peças de reposição produzir), o National Weather Service ajuda a prever o tempo e desastres, o jornalismo de dados (analisando dados do mundo real e tirando conclusões deles, muitas vezes com visualização) e é muito usada na área da saúde, por exemplo, para determinar a segurança de um medicamento com base em testes pré-clínicos

Julia:

  • Ótima para computação científica, mineração de dados, aprendizado de máquina, álgebra linear e computação distribuída. A notação vai parecer familiar à notação matemática, então passar da equação para o código é relativamente fácil
  • Computação distribuída: tarefas (=corrotinas) e canais permitem executar código em paralelo que se comunica entre si, com suporte a múltiplos processos usando passagem de mensagens (ótimo para computação de alto desempenho)
  • Usada no projeto Celeste (um supercomputador executando código Julia para analisar 178 terabytes de dados astronômicos) (como resultado, Julia passa a fazer parte do clube dos petaflops, no qual, na época, só estavam C, C++ e Fortran; Julia foi a primeira linguagem dinâmica, com um quatrilhão de cálculos de ponto flutuante por segundo, ou seja, 1 seguido de 15 zeros), o Clima (Climate Modeling Alliance) tem pessoas do Caltech, do MIT e do Jet Propulsion Laboratory da NASA desenvolvendo um modelo de previsão do clima, CERN, ASML

E, do ponto de vista da programação, como elas se 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 padrão, CPython, compila para bytecode e depois isso é interpretado em uma máquina virtual. O PyPy é um substituto do CPython que compila just-in-time para código de máquina

R:

  • Dinâmica e fortemente tipada
  • Multiparadigma, com núcleo funcional, mas também dá suporte a estilos procedural e orientado a objetos

Julia:

  • Dinâmica e fortemente tipada, compilada just-in-time
  • Multiparadigma: imperativa, orientada a objetos (sobrecarga por meio de despacho múltiplo), 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

E, continuando a olhar para elas do ponto de vista da programação, alguma dessas linguagens tem algum recurso que se destaca em particular?

Python:

  • Sintaxe agradável: a sensibilidade a espaços em branco deixa o escopo fácil de enxergar. O código costuma ser fácil de ler, por exemplo, condições booleanas legíveis para humanos (and/or)
  • Expressiva: dá para fazer muita coisa com pouco código (compreensões de lista, geradores, decoradores)
  • Uma vasta quantidade de bibliotecas disponíveis para os mais variados propósitos
  • Como já mencionado, é uma linguagem genuinamente de propósito geral, pois pode ser usada em muitos cenários diferentes

Julia

  • Despacho múltiplo. Decide qual função chamar com base nos tipos de todos os argumentos (como a sobrecarga de funções)
  • Dinâmica, mas com ótimo desempenho. O desempenho de Julia pode rivalizar com o do Fortran e chegar perto do C. Código “Normal” costuma ter bom desempenho (não são necessários truques malucos, e funções menores até são incentivadas). Bibliotecas para dar suporte à execução de código em GPU
  • Computação distribuída: tarefas (=corrotinas) e canais permitem executar código em paralelo que se comunica entre si, com suporte a múltiplos processos usando passagem de mensagens (ótimo para computação de alto desempenho)
  • Ótima para computação científica, mineração de dados, aprendizado de máquina, álgebra linear e computação distribuída. A notação vai parecer familiar à notação matemática, então passar da equação para o código é relativamente fácil

R:

  • Tipos de dados flexíveis: o vetor é o tipo central, até os escalares são vetores. Vetores podem ter metadados associados a eles (por exemplo, os nomes dos seus elementos). Listas são heterogêneas (podem ter elementos de tipos diferentes). Um tipo especial, o dataframe, para coleções de vetores (todos do mesmo comprimento).
  • Operações vetorizadas permitem atualizar vetores de forma concisa, eficiente e legível
  • R é um conjunto integrado de recursos de software para manipulação de dados, cálculo e exibição gráfica. É fácil explorar, visualizar e manipular dados com o R Studio. Ótima para mineração de dados
  • Comunidade ótima, amigável e diversa. A R for Data Science Online Learning Community é uma comunidade de pessoas que aprendem R, em todos os níveis de habilidade, que trabalham juntas para melhorar suas habilidades. Há um grupo aberto no Slack onde os membros podem manter contato e se ajudar com problemas. Existe um grupo aberto no Slack onde os membros podem manter contato e se ajudar com problemas.

Se alguém estiver em dúvida sobre qual experimentar durante abril, como você recomendaria que essa pessoa decidisse?

Como tudo em TI: depende! Neste caso, eu diria que depende principalmente dos seus objetivos e da sua experiência pessoal.

Se você é relativamente novo em programação, tem interesse em IA ou aprendizado de máquina, ou quer aprender uma linguagem que possa usar para muitas coisas diferentes, eu provavelmente recomendaria começar com Python: A quantidade de recursos disponíveis para Python é gigantesca, o que inclui muitos cursos online gratuitos Python é usada em toda parte com IA e aprendizado de máquina Python pode ser usada para um grande número de propósitos A trilha de Python tem o modo de aprendizagem ativado, o que pode ajudar você a aprender os conceitos centrais da linguagem de um jeito divertido

Se você tem interesse em fazer trabalho estatístico, quer explorar e visualizar dados, ou tem curiosidade sobre uma forma diferente de trabalhar com dados, a linguagem R é uma ótima escolha: Os tipos de dados do R são baseados em coleções de dados (vetores/listas) e as operações podem ser aplicadas às coleções com facilidade (sem precisar de laços) A IDE RStudio é ótima para explorar e visualizar dados R tem um excelente suporte para análise estatística R permite criar gráficos de dados com facilidade

Se você tem interesse em computação científica, quer executar código de forma concorrente, se importa muito com desempenho, ou quer aprender uma linguagem moderna e elegante que oferece algo diferente da maioria das outras linguagens, eu recomendaria Julia:

  • O despacho múltiplo será novidade para muita gente e é incrivelmente poderoso
  • Julia é ótima para computação científica
  • O sistema de tipos de Julia é flexível e expressivo
  • Julia tem um desempenho excelente
  • Julia é ótima para execução concorrente

Claro que, se você tiver tempo, eu recomendaria experimentar as três! Você nunca sabe de verdade de qual linguagem vai gostar sem experimentar.

01 de abril de 2023 · Achou útil?