quinta-feira, maio 29, 2014

Linguagem R - Objetos e Tipos de Dados

No R temos, segundo o próprio site do R-Project (http://cran.r-project.org/doc/manuals/r-release/R-lang.html#Basic-types), os objetos são divididos em tipos, modos e modos de armazenamento. Isto significa, por exemplo, que um objeto do tipo (type) inteiro é armazenado (storage mode) como tal, mas é tratado simplesmente como numérico (mode). Há diversos tipos de objetos como inteiro, lógico, função, expressão linguagem, listas, complexos etc. É bem completo! Porém no uso do R com conjunto de dados e análise estatística, utiliza-se os tipos básicos para trabalho com vetores. Depois veremos funções para nos auxiliar com "tipos" e "objetos".

Objetos primitivos - tipos atômicos

Pode-se dizer que o R foi feito para trabalhar com estruturas de dados, que são compostas, de forma geral, por objetos primitivos. Por exemplo, o vetor é o objeto mais simples no R: uma lista ordenada de um tipo atômico básico.
O R possui 6 tipos atômicos:

  • lógico,
  • inteiro,
  • real,
  • complex,
  • string (or character), e
  • raw (bruto/primitivo).

Estruturas de Dados

Esse é o foco dessa linguagem: o agrupamento de objetos para análise dos dados.
Temos:

  • vetor
  • fator
  • matriz
  • array
  • lista
  • dataframe

Como já dito, o mais simples tipo de estrutura de dados é o vetor (vector) que é uma lista ordenada de um objeto primitivo. Parecido com o vetor, temos o fator (factor) que é um vetor de categorias, valores que não se repetem. Matriz (matrix) é um vetor de 2 dimensões e cada elemento é localizado por referência de linha e coluna e Array é uma matriz com mais de 2 dimensões aqui no R.
Todos estes possuem objetos do mesmo tipo, mas o R possui estruturas mais interessantes que permitem a mescla de tipos.
Lista (list) é um vetor que permite que suas células tenham objetos de tipos diferentes... um vetor misto que pode ser acessado pela sua posição ou por seu nome como variável. Dataframe é como uma matriz (2 dimensões) que permite tipos diferentes por coluna; são listas de vetores do mesmo tamanho.

Nos próximos posts vamos falar de algumas funções e ver cada estrutura de dados de forma mais detalhada com exemplos.

segunda-feira, maio 26, 2014

Guerra de gerações no projeto

Essa guerrinha não levará ninguém a lugar algum. Nunca levou e não vai levar. Na realidade levará sim... para o mesmo alugar onde a arrogância sobre o outro empurra: para trás.

Estava acompanhando um webinar sobre gestão de projetos, técnicas de facilitação etc, quando um participante escreveu no chat do grupo um problema que passava em sua empresa com relação a novas ferramentas e formas de trabalho. Muitos concordaram e, para o meu espanto, o bom senso foi muito maior que eu esperava na pequena discussão (que logo acabou para retornar à apresentação). Vejo, felizmente como muitos outros (sim, felizmente), que nas empresas (principalmente nas maiores) os mais experientes tem certa resistência em aceitar novas formas de trabalho. E em contrapartida, há muitos recém chegados da faculdade, que fizeram alguns cursos ágeis ou participaram de um projeto em uma startup, achando ter a solução para todas as respostas sem nem saber quais são as perguntas.

OK...vou explicar melhor. Entre a teoria e a prática há hiato. Junto com a cultura, esse hiato desencorajou os mais antigos que aprenderam - e sempre viveram com isso em mente - que este é um vale proibido (você assistiu Planeta dos Macacos? Tipo aquilo). Os recém chegados, por outro lado, estão repletos de novas técnicas (+), cheios de si (+), mas têm certeza que são os salvadores do mundo (-) e que todo o resto é uma cambada de ignorante (-). Muitas vezes estes não entendem realmente os conceitos e nem o status quo da empresa que estão entrando, partindo da suposição que só existe uma forma das coisas funcionarem: a novíssima metodologia que alguém inventou em um lugar distante e que ele viu num blog por aí. É claro que testar técnicas é válido, mas antes de aceitar o risco, identifique-o.

Alguns de cabeça antiga esperam ser solicitados, são passivos e não discutem com seu superior, pois seria falta de respeito (muitas vezes este superior acha isso mesmo quando alguém o questiona). Os de cabeça nova querem revolucionar a empresa de forma drástica, ignorando o ambiente como um todo e pensando somente no seu quadrado e naquele período de tempo: uma errada interpretação de coragem, iteração e acolhimento de mudanças. Decorar não é entender e muitos decoraram o manifesto; têm a resposta na ponta-da-língua para tudo... desde que se enquadre no seu cenário perfeito, claro.

Você não concorda que há algo de errado quando o "Sr. João" vê um fracasso, muitas vezes óbvio, de quem voluptuosamente inicia uma empreitada sem conhecer o terreno (desconsiderando as características do local onde está e achando que tudo ocorrerá igualzinho de como naquela empresa caso-de-sucesso da palestra do Agile Brazil), como justificativa para não mudar nada?

Você não concorda que algo não está certo quando o "Marquinhos", teoricamente mais esclarecido (pois aprendeu numa escola a frente de seus colegas de trabalho mais antigos), cometer os mesmos erros básicos de algumas pessoas de gerações atrás que ignoraram a adaptação, interpretaram as coisas como lhe convinham e achavam que estava tudo errado até a ideia deles surgir para simplificar exageradamente a complexidade? Enaltecer os defeitos do outro quando se está prestes a repeti-los não é nada bom... assim como é péssimo achar que a diferença dele para o super-homem é que o super-homem enfraquece com a criptonita.

Num ambiente complexo, temos que estabilizar ou minimizar um grande número de variáveis para que seja possível lidar melhor com tudo que está fora do nosso controle. É isso que o ágil propõe. Se o problema dos projetos é comunicação e é possível utilizar formas de mantê-la eficiente, vamos utilizar estas técnicas e nos organizar de forma a mitigarmos este tipo de preocupação e, assim, podermos focar mais na mudança de requisitos, por exemplo. A maioria das técnicas e ferramentas, assim como os conceitos básicos por trás do manifesto, não foram criados agora; é tudo coisa velha aglutinada de forma excelente! É o uso correto de todo esse conhecimento unido ao entendimento dos conceitos por trás de cada princípio a ser adotado que faz e fará a diferença. É a integração das novas misturas e novos sabores com o que já existia que impulsionará o mundo. É a adaptação com a boa estratégia de mudanças na organização que levará sua empresa ao sucesso. Se você está em uma startup, excelente! Muitos problemas carregados de "outras vidas" não existirão! Mas se você está em uma multinacional (ou governo) com estrutura e pensamentos antigos e problemas culturais gigantescos, o caminho para a excelência será traçado de uma forma um pouco diferente dos desenhos Disney, como é pregados em muitos testemunhos ágeis.

Quanto ao "Sr. João" e ao "Marquinhos", deve haver bom senso e desejo de vitória coletiva, cientes de que todos erramos, sempre aprendemos e precisamos conhecer antes de criticar. É um cabo de guerra que não leva ninguém a lugar nenhum. Ao invés de se complementarem e crescerem juntos, "Srs Joões" e "Marquinhos" ficam todos numa disputa querendo apontar o erro do outro. Entender os conceito ágeis é uma excelente forma de começar. Eu disse entender, não decorar. Entender as razões de um grupo de experientes pessoas terem chegado a tais "mandamentos" é essencial, assim como entender a cultura da sua empresa e o perfil de seus colegas de trabalho.

Recomendo artigos do Klaus Wuestefeld e do Manoel Pimentel, na internet ou no MundoJÁgil; sempre falam deste ponto que para mim é o mais delicado e decisivo: comportamento. E também este link para entender um pouco como as pessoas da geração Y são como são: Porque os jovens profissionais da geração y estão infelizes.

... Má interpretação do gráfico da baleia... "pessoas precisam ser mandadas e pressionadas"... "o importante é entregar (qualidade ninguém vê)"... "nós fizemos o que o cliente pediu".
Software não é um prédio. O produto é abstrato. O projeto de desenvolvimento é algo criativo; gera um resultado único. O desenvolvimento não uma linha de produção.
Algumas certezas foram trazidas e algumas comparações foram feitas no passado e nos fizeram chegar em alguns problemas de entendimento. Por favor, entusiasta de métodos ágeis, não cometa os mesmos equívocos!

sexta-feira, maio 23, 2014

Introdução à Linguagem R

Considerando que você já está com o ambiente instalado (O que é R), vamos começar?

Ao iniciar a sessão no terminal (no Linux basta digitar "R" que ele é iniciado), você verá um sinal de maior ">" que permite que você digite o comando desejado. É o prompt do R.

Interação entre o prompt e você
Como dito, o sinal ">;" indica que você pode iniciar o diálogo. Faça um teste: digite um número, por exemplo, "5":
> 5
[1] 5

O R sempre retorna um vetor com a resposta a seu comando. No caso informei o número 5 e ele retornou um vetor de 1 posição, cuja primeira posição é o número 5.
Digite agora "1 + 1"
> 1 + 1
[1] 2

Digitei "1 + 1" e ele retornou para mim a soma de 1 e 1 em um vetor.

Comentário
Tudo que estiver após o sinal de cerquilha # é desconsiderado pelo R, ou seja, torna-se um comentário:
> 1 + 1 #esta é uma soma simples

Atribuição
A forma mais comum é utilizando sinal de menor seguido de hífen para atribuir algo que está ao lado direito desta seta para o objeto que está à esquerda. Para isto também podemos utilizar o igual "=". Uma coisa interessante no R é que podemos atribuir ao contrário usando uma seta inversa, ou seja, usamos hífen e sinal de maior (seta para a direita) para atribuir algo que está à esquerda em uma variável ou objeto à direita deste sinal.
Para exibir o conteúdo de um objeto, basta digitar o nome dele no prompt.
> a <- 5
> a
[1] 5
> 10 -> b
> b
[1] 10
> c = 3
> c
[1] 3

Ajuda
Para obter ajuda com relação a alguma função no R, use a função "help", ou uma ? antes do nome da função:
help(c)
?c


Na próxima postagem vamos ver os tipos de dados.

sábado, maio 17, 2014

O que é R?

R é um ambiente de programação derivado da linguagem S (comercial) e possui um grande número de pacotes para trabalhar com dados. Por esse motivo vem numa crescente de utilização e é bastante difundido principalmente na área científica (estatística e bioinformática), o que não impede o uso em outras frentes como jornais e revistas, por exemplo, para estudos mais profundos com geração de gráficos para o site e material impresso.

Segunda a wikipedia: "R é uma linguagem e um ambiente de desenvolvimento integrado, para cálculos estatísticos e gráficos."

Página oficial: http://www.r-project.org/

No ambiente R, temos sua linguagem fácil de se trabalhar e um grande conjunto de pacotes que a torna muito poderosa para análise de dados. Você pode criar seu pacote e enviar para o CRAN (rede de arquivamento de tudo do ambiente, IDE, linguagem etc).
A conheci pelo curso de especialização de Ciência de Dados no Coursera pela Universidade Johns Hopkins. Eles usam para todos os módulos esse ambiente. É muito interessante.

Os outros:

Vamos lá?

Planilha rápida de comandos: http://cran.r-project.org/doc/contrib/Short-refcard.pdf

Muita gente utiliza também o Python que, agregando algumas bibliotecas como Pandas, NumPy, SciPy etc, faz um trabalho semelhante. Muitos acabam preferindo o Python por já conhecer melhor a linguagem, a forma de trabalho, IDEs ou terem uma plataforma montada com outras aplicações. Cada um escolhe o que agrega mais independente do motivo.

Não vou entrar em detalhes em como instalar, pois isso muda conforme as versões... mas seguem os links:

Como trabalhar?

Ao abrir um terminal e executar o R ou abrir o IDE RStudio, é criado no ambiente uma área de trabalho em sessão, o que possibilita que você crie objetos e trabalhe com ele de duas formas:
  • Comandos livres: assim como no terminal do sistema operacional ou de outras linguagens, você pode executar os comandos que ele vai interpretando e armazenando, se necessário, na sua área de trabalho.
  • Scripts: você cria scripts que são carregados no ambiente e este executa o que está dentro do arquivo de forma sequencial. Normalmente são criadas funções que são executas ao serem acionadas após a carga do script para a área/sessão.
Independente da forma, você pode criar objetos, funções, filtros etc, que podem ser acionados a qualquer momento na sessão que você estiver (pois estão carregados na sua área de trabalho).

Uma das principais coisas que você precisa saber é como carregar dados de arquivos (como CSV, TXT e XLS), acessar bancos de dados e utilizar serviços na web, pois normalmente é assim que você obterá os dados para trabalhar. Depois das análises, é importante a forma de apresentação do resultado: tabela ou gráficos, ambos em tela ou exportados.

quinta-feira, maio 15, 2014

Scaled Agile Framework

No Agile Trends 2014 conheci o SAFe. Foi um Trend Talk da Sandra Santos (IBM) que deu um case de implantação de agile utilizando a ferramenta de AML da própria empresa utilizando este framework.
Achei muito interessante, pois para grandes empresas com necessidade de fluxo de informações que ultrapassam a fronteira de equipe de desenvolvimento, há uma dificuldade enorme em absorver ou customizar uma metodologia ou framework com foco apenas no time.

http://scaledagileframework.com/


Conforme o próprio site, é uma base de conhecimento para implementação de práticas ágeis em escala organizacional.
Muitos podem criticar, mas ajuda muito na entrada dessas práticas nos diversos níveis das empresa, de forma integrada, fácil menos complicada e concisa.
Com um desenho e fluxo pronto nos 3 níveis que possui o foco (e não só no desenvolvimento feito pela equipe como ocorre no Scrum, por exemplo), o SAFe atende a necessidade de visualização do todo por quem está no alto comando.
Claro que é mais pesado que os frameworks ágeis tradicionais por conta da necessidade de integração vertical, mas é uma boa dica para quem está em uma empresa grande e encontra dificuldades com o corpo gerencial. É uma base para criação ou ajuste no processo, pois deixa clara a necessidade da agilidade em toda a organização.

O site é intuitivo, mas não permite que clique com o botão direito... para abrir o link em nova aba, utilize ctrl + clique (no Chrome, por exemplo).

terça-feira, maio 13, 2014

TDD para qualquer um entender

Tá bom, vai... qualquer um é exagero, mas este white paper da caelum é bem interessante porque aborda TDD de uma forma mais fácil para chefes, gerentes e diretores, que não são desenvolvedores, entenderem o que é, para que serve e seus benefícios. Créditos à Caelum!

http://tdd.caelum.com.br/

Test-Driven Development (TDD) é desenvolvimento dirigido/orientado a testes que ganhou muita força com o aumento do uso de práticas ágeis nas equipes de desenvolvimento de software.

Boa leitura!

Curso interativo de Linguagem R

Curso básico e interativo de linguagem R, evoluindo de lição em lição... comando a comando seguindo uma uma sequência direcionada de aprendizagem: http://tryr.codeschool.com/
O CodeSchool tem vários cursos, alguns pagos e outros gratuitos, seguindo o mesmo esquema. O interessante é você se cadastrar e fazer os demais livres.
Coim relação ao R, estes são os tópicos abordados:
  1. R Syntax: A gentle introduction to R expressions, variables, and functions
  2. Vectors: Grouping values into vectors, then doing arithmetic and graphs with them
  3. Matrices: Creating and graphing two-dimensional data sets
  4. Summary Statistics: Calculating and plotting some basic statistics: mean, median, and standard deviation
  5. Factors: Creating and plotting categorized data
  6. Data Frames: Organizing values into data frames, loading frames from files and merging them
  7. Working With Real-World Data: Testing for correlation between data sets, linear models and installing additional packages
Vale a pena para conhecer ou praticar no início da aprendizagem.

segunda-feira, maio 12, 2014

Conteúdo de estatística básica

Procurando um site com conteúdo objetivo de estatística para reciclar o conhecimento há muito não utilizado, encontrei esse site de um software de estatística que possui justamente o que eu procurava, desde a parte mais básica até, para mim, mais avançada.
Portal Action [conteúdo de estatística em http://www.portalaction.com.br/content/estatística-básica]
Action é um software livre GPL 2.0 sob a plataforma R.