Edgard Leal

My personal blog hosted on Github using Jekyll

Home View on GitHub
20 September 2015

{:br}

[caption id="attachment_102" align="aligncenter" width="223"]R logo R logo[/caption]

Iniciando

Quando comecei a utilizar o R o maior problema foi a adaptação devido ao fato de já utilizar SQL com bancos relacionais, imediatamente surgiam as dúvidas:

  1. Como faço um "where" ?
  2. Tem como fazer um "like" ?
  3. Como faço um "group by"
  4. Como faço para ordenar?
  5. Como faço um "limit"

R vs SQL ?

Quase todos os recursos disponíveis do R para análise de dados estão disponíveis na maioria dos bancos de dados relacionais, então porque utilizar o R ?

  1. O R foi criado para análise e não para persistência, controle de transações, rede e outros. Desta forma o R responde com muito mais velocidade considerando o mesmo hardware utilizado no banco relacional.
  2. Possui uma infinidade de bibliotecas disponíveis gratuitamente em seu repositório.
  3. Existem um infinidade de gráficos disponíveis nativamente como pode ser visto na figura 1 e todos os outros que se possa imaginar disponíveis como bibliotecas em seu repositório central.
  4. O R foi criado para análise estatísticas, sendo assim, se você pretende fazer este tipo de análise, não há o que discutir.

[caption id="attachment_143" align="aligncenter" width="263"]Gráfico 3d no R Fig. 1[/caption]

Comparando de forma prática:

Vamos utilizar alguns exemplos simples para nos familiarizarmos com a forma de consulta do R.

Para nossos exemplos vamos utilizar o seguinte dataset:

> library('datasets')
> head(airquality)
  Ozone Solar.R Wind Temp Month Day
1    41     190  7.4   67     5   1
2    36     118  8.0   72     5   2
3    12     149 12.6   74     5   3
4    18     313 11.5   62     5   4
5    NA      NA 14.3   56     5   5
6    28      NA 14.9   66     5   6

Filtrando

 É possível criar desde filtros simples como "where Ozone = 41" ate filtros mais complexos utilizando expressão regular.

 Abaixo alguns exemplos práticos:

Recurso SQL R
Where ... where month = 5 airquality[airquality$Month == 5,]
Like ... where Ozone like '4%' airquality[grep('4.', airquality$Ozone),]
Group by select count(*) from airquelity

group by Month

aggregate(airquality, by=list(airquality$Month), FUN=length)
Ordenamento select * from airquelity

order by Ozone

airquality[order(airquality$Ozone),]
Limit select * from airquelity

limit 10

head(airquality, 10)

E os JOINS ?

Quando trabalhamos com analise no R de forma interativa o ideal é que você providencie um dataframe reconfigurado e que contenha todas as dimensões/tabelas necessárias, mas ainda assim há situações onde se faz necessário mesclar dataframes, sendo um script de carga ou ate mesmo no modo interativo, pra isto podemos utilizar o comando merge.

>merge(frameA, frameB, by='ID')

Comando utilizados neste post:

  • library Carrega uma biblioteca informada como parâmetro
  • head     Exibe apenas os primeiros registros de um DataFrame
  • grep      Filtra registros de um DataFrame com base em expressão regular
  • aggregate Agrupa registros considerando um campo agregador e uma função aplicada a coluna de "valor"
  • order    Ordena os registros informados

Site oficial: R{:}{:en}

[caption id="attachment_102" align="aligncenter" width="223"]R logo R logo[/caption]

Starting

When I started using R the biggest problem was adapting due to the fact already using SQL with relational databases, immediately arose doubts:

  1. How to do a "where"?
  2. It is to make a "like"?
  3. How to make a "group by"?
  4. How do I order?
  5. How to make a "limit"?

R vs SQL ?

Almost all available resources of R for data analysis are available in most relational databases, so why use the R?

  1.  The R was created for analysis and not for persistence, transaction management, network and others. Thus the R responds with much more speed considering the same hardware used in the relational database.
  2.  It has a plethora of freely available libraries in your repository.
  3.  There are an infinity natively available graphics as seen in Figure 1 and all the other imaginable available as libraries in its central repository.
  4.  The R was created to analysis statistics, so if you plan to do this kind of analysis, there is nothing to discuss.

[caption id="attachment_143" align="aligncenter" width="263"]Gráfico 3d no R Fig. 1[/caption]

Comparing in a practical way:

Let's use some simple examples to become familiar with the form of consulting the R.

For our example we will use the following dataset:

 

> library('datasets')
> head(airquality)
  Ozone Solar.R Wind Temp Month Day
1    41     190  7.4   67     5   1
2    36     118  8.0   72     5   2
3    12     149 12.6   74     5   3
4    18     313 11.5   62     5   4
5    NA      NA 14.3   56     5   5
6    28      NA 14.9   66     5   6

Filtering

  You can create from simple filters such as "where Ozone = 41" even more complex filters using regular expression.


Below are some practical examples:

Recurso SQL R
Where ... where month = 5 airquality[airquality$Month == 5,]
Like ... where Ozone like '4%' airquality[grep('4.', airquality$Ozone),]
Group by select count(*) from airquelity

group by Month

aggregate(airquality, by=list(airquality$Month), FUN=length)
Ordenamento select * from airquelity

order by Ozone

airquality[order(airquality$Ozone),]
Limit select * from airquelity

limit 10

head(airquality, 10)

And the JOINS ?

When we work with analysis in R interactively ideally you arrange for a preconfigured dataframe, containing all the dimensions / required tables, but still there are situations where it is necessary to merge data frames, in a load script or even in the interactive way , for this we can use the merge command.

>merge(frameA, frameB, by='ID')

Commands used in this post:

  • library load a external library
  • head     Show firsts rows of a DataFrame
  • grep      Filter rows in DataFrame using regular expression
  • aggregate Aggregate rows in using a function to merge values ( Sum, Length ... )
  • order    Sort rows

Official Site: R{:}



blog comments powered by Disqus