[LINGUAGEM] Comparativo: R vs. Python para data science


Fonte: Imasters


A análise comparativa do pequeno grupo de linguagens de programação usadas em ambientes de data science e analytics é recorrente na Web. E da mesma forma que tratamos escolhas de frameworks para uma determinada linguagem ou distribuições de OS para um projeto de segurança de informação, optar por uma linguagem para um trabalho de data science depende de um amplo espectro de fatores relacionados às condições disponíveis para o projeto que vamos implementar. Afaste o preconceito e promova a versatilidade para que seja possível decidir sobre qual estratégia de programação adotar de acordo com as características apresentadas no ambiente operacional do projeto.
É importante observar que este artigo aplica uma comparação side-by-side apenas entre Python e R. Será importante observar, em artigos futuros, como podemos aplicar Scala e Java, por exemplo, bem como Julia e MatLab.
Python é uma linguagem general purpose. A sintaxe simples e acessível otimiza, e muito, o tempo de desenvolvimento. Além disso, a versatilidade da linguagem garante a possibilidade de implementação de ferramentas de diversas disciplinas em um único ambiente. A facilidade de integração com outras linguagens também é um fator de destaque nesta análise, principalmente se pensarmos em projetos onde construção de interfaces e interação com outros sistemas são fatores preponderantes.
R é uma linguagem com foco explícito em estatística. Se a matemática é o fator de maior peso na construção do seu projeto, não hesite em escolhê-la. R foi desenvolvida por estatísticos para estatística. Possui excelente documentação em redocumentation.org e um riquíssimo ecossistema de pacotes para diferentes áreas de aplicação.
Neste texto, vamos usar como exemplo uma base de dados estruturada e fictícia com algumas estatísticas de performance de equipes de futebol em uma determinada competição. Com esta base, vamos aplicar algumas técnicas comuns na análise de dados e avaliar, linha a linha, as diferenças entre Python e R na prática.

Importando um arquivo CSV

Comecemos com operações bastante triviais. Em Python, precisaremos importar a biblioteca pandas que, aliás, merece ser assunto de um artigo especialmente dedicado à ela. Pandasnos permitirá trabalhar com Dataframes, que são arrays bidimensionais onde podemos aplicar diferentes datatypes para cada coluna. Podemos observar que a operação em ambas as linguagens é bastante simples:
  • R
1campeonato <- campeonato.csv="" code="" read.csv="">
  • Python
1import pandas
2campeonato = pandas.read_csv("campeonato.csv")

Retornando o número de linhas do arquivo

Retornar o número de linhas de um arquivo é outra operação bastante simples. O exemplo é autoexplicativo:
  • R
1dim(campeonato)
  • Python
1campeonato.shape

Retornando a primeira linha

Outra operação simples. Aqui, pode-se notar o perfil de orientação à objetos do Python, onde head é um método de nosso objeto de dataframe. Já R possui uma função head explícita para essa operação.
  • R
1head(campeonato,1)
  • Python
1campeonato.head(1)

Retornando médias

O retorno das linhas abaixo será a média de cada uma das colunas de nosso arquivo de exemplo. Aqui, é interessante observar que o retorno de R para colunas onde temos strings ao invés de números é NA (Not Available). Enquanto Python ignora por default operações de média para grupos de valores não-numéricos, R é mais formal no tratamento estatístico e retorna a indisponibilidade do cálculo de forma explícita. Além disso, mais uma vez podemos observar o perfil orientado a objetos de Python através do método mean().
  • R
1sapply(campeonato, mean, na.rm=TRUE)
  • Python
1campeonato.mean()

Construindo Clusters de equipes

Aqui vamos aplicar um dos algoritmos clássicos de clusterização: o k-means (k-médias). Para isso, é importante realizarmos uma pequena limpeza de valores não-numéricos.
Em R, testamos o formato em cada iteração de coluna. Em seguida, usamos o pacote clusterpara aplicar o algoritmo k-means.
Em Python, usamos os métodos get_numeric_data e dropna para limpeza de dados não-numéricos. Em seguida, para aplicar k-means, usamos o pacote de machine learning scikit-learn.
  • R
1library(cluster)
2set.seed(1)
3dadoUtil <- code="" col="" function="">
4   sum(is.na(col)) == 0 && is.numeric(col)
5}
6dadosUTeis <- campeonato="" code="" dadoutil="" sapply="">
7clusters <- campeonato="" centers="5)</code" dadosuteis="" kmeans="">
8labels <- cluster="" clusters="" code="">
  • Python
1from sklearn.cluster import KMeans
2kmeans_model = KMeans(n_clusters=5, random_state=1)
3dadosUTeis = campeonato._get_numeric_data().dropna(axis=1)
4kmeans_model.fit(dadosUTeis)
5labels = kmeans_model.labels_

Aplicando regressão linear univariada

Vamos aplicar uma pequena análise preditiva em nossa base de estudo. Podemos observar que ambas as linguagens possuem tratamento bastante simplificado para essa função.
Enquanto R possui as funções embutidas lm e predict, Python trata regressões lineares a partir da útil e simples classe LinearRegression(). Vejamos:
  • R
1fit <- ast="" data="train)</code" fg="" lm="">
2predictions <- code="" fit="" predict="" test="">
  • Python
1from sklearn.linear_model import LinearRegression
2lr = LinearRegression()
3lr.fit(train[["fg"]], train["ast"])
4predictions = lr.predict(test[["fg"]])
Esta foi uma pequena amostra de tarefas que podem ser realizadas com ambas as linguagens. Podemos observar grande facilidade no trato sintático de R e Python. Não nos aprofundaremos em questões como integrações com outros sistemas, persistência de dados e implementações visuais, itens fundamentais para projetos em produção. No entanto, as ações acima nos ajudam a entender alguns pontos.
Fica evidente que R possui mais funções voltadas à análise de dados, como observamos na implementação do algoritmo k-means. Python opta pelo uso extensivo de métodos e classes, como podemos ver na aplicação de LinearRegression() na análise preditiva.
Ao analisar o pacote Pandas, e o faremos detalhadamente em artigos vindouros, podemos observar uma clara inspiração nos dataframes R. É comum observarmos também pequenos pacotes R inspirados em bibliotecas Python. Isso evidencia uma característica fundamental para a escolha de ambas as linguagens: uma forte e participativa comunidade que garante a manutenção e o crescimento dos ecossistemas.
Ao contemplar um projeto com a abrangência e a versatilidade de Python aliadas à efetividade e ao foco estatístico de R, você certamente garantirá uma entrega com o melhor que cada linguagem pode oferecer. Se não for possível utilizar ambas ao mesmo tempo, observe os fatores preponderantes do problema e faça sua escolha. Não deixe, no entanto, de aprofundar seus estudos nas duas linguagens. Você observará como problemas de mesma natureza podem ser resolvidos com abordagens distintas e isso certamente enriquecerá sua forma de aplicar data science.
Compatilhe no Google Plus

Sobre Grimaldo Oliveira

Mestre pela Universidade do Estado da Bahia (UNEB) no Curso de Mestrado Profissional Gestão e Tecnologias Aplicadas à Educação (GESTEC) com o projeto “GESMOODLE – Ferramenta de acompanhamento do aluno de graduação, no ambiente virtual de aprendizagem(MOODLE), no contexto da UNEB“. Possui também Especialização em Análise de Sistemas pela Faculdade Visconde de Cairu e Bacharelado em Estatística pela Universidade Federal da Bahia. Atua profissionalmente como consultor há mais de 15 anos nas áreas de Data Warehouse, Mineração de Dados, Ferramentas de Tomada de Decisão e Estatística. Atualmente é editor do blog BI com Vatapá. Livro: BI COMO DEVE SER - www.bicomodeveser.com.br

0 comentários: