quarta-feira, junho 11, 2014
A Parábola dos Lenhadores
Este conto eu ouvi do consultor da IBM Gustavo Grillo e achei uma excelente parábola sobre o uso errado de uma ferramenta.
Consegui encontrar na internet o link do post do próprio Gustavo. Segue o link e o conteúdo da "estória".
https://www.ibm.com/developerworks/community/blogs/rationalbrasil/entry/a_f_c3_a1bula_dos_lenhadores10?lang=en
Era uma vez, nas profundezas de uma densa floresta, uma vila de lenhadores. A vila era sustentada pelos lenhadores que cortavam árvores com seus reluzentes, ainda que antigos, machados. Eles eram bons nisso.
A cada ano que passava eles precisavam cortar mais e mais árvores para acompanhar a demanda, que era cada vez maior. Ao mesmo tempo, alguns lenhadores, decepcionados com a vida dura que levavam, acabavam indo embora da vila para tentar novos trabalhos, e não eram substituídos pois não haviam mais jovens na vila.
Um belo dia, um dos lenhadores pensou: "Não é possível, deve haver uma maneira melhor de fazer isso!" e resolveu viajar até uma vila do outro lado da montanha para descobrir como eles cortavam as árvores por lá.
Eis que ele volta todo entusiasmado e com uma nova ferramenta: uma serra de corte transversal, dessas que lembram um serrote, só que com a lâmina bem mais comprida em que fica um lenhador de cada lado e quando um puxa o outro empurra. Ele havia aprendido como usar a nova serra e desenvolveu um novo processo para cortar as árvores com esta nova ferramenta.
Este lenhador treinou toda a vila à exaustão, fazendo com que todos aprendessem a usar a nova serra e seguissem o novo processo. Os lenhadores se tornaram mais produtivos e ficaram felizes apesar de alguns pequenos problemas que a nova serra causava.
Algum tempo depois, um vendedor itinerante chegou à vila dos lenhadores e percebeu que eles usavam a serra transversal. Ele reuniu os lenhadores e anunciou:"Eu tenho uma ferramenta que vai revolucionar a forma como vocês trabalham". E mostrou a ferramenta.
Os lenhadores ficaram um pouco céticos, e disseram: "Ok, vamos testar a sua ferramenta, mas temos uma exigência. Sabe, nós gastamos tanto tempo e esforço, treinando no uso da serra transversal e no processo que nós não queremos mudar a forma como trabalhamos, nem o nosso processo. Deu muito trabalho desenvolver isso tudo e vamos tentar usar a sua ferramenta, mas do nosso jeito"
O vendedor coçou a cabeça, ficou meio apreensivo, mas acabou concordando. Ele trouxe os melhores técnicos da sua empresa para ensinar os lenhadores a usar a nova ferramenta, mas depois de poucos dias de testes e demonstrações os lenhadores concluíram que eles eram mais produtivos com as suas velhas serras transversais do que com a nova ferramenta.
Desapontado, o vendedor voltou com os técnicos para a sua empresa. O dono da empresa o chamou para que explicasse como não havia conseguido efetuar a venda:
- Nós temos a melhor ferramenta do mercado para cortar madeira! Ela é insuperável no corte de árvores! A economia deles é baseada no corte de árvores! Como as demonstrações não mostraram isso?
E ele respondeu:
- Bom, nós realmente temos a melhor ferramenta. Mas os lenhadores precisariam ter ligado as motosserras, e as utilizado da forma que uma motosserra deve ser usada.
Moral da história: Se você usa uma motosserra como machado, não reclame que ela não atende às suas necessidades.
segunda-feira, junho 09, 2014
Funções principais para programação em R
Antes de falar das funções principais, aquelas funções que a gente sempre vai usar, vou passar a tradução de "Por que usar R?" do site Quick-R - Stat Methods:
Se você atualmente usa outro pacote estatístico, pro que usar R?
Geral:
help(nome_da_funcao) # abre no navegador a definição/ajuda da função; no RStudio a página é aberta em uma janela lateral.
?função # idem ao help.
getwd() # mostra o diretório (caminho) configurado para o workspace atual.
setwd("caminho/para/diretorio") # configura o diretório para o workspace; qualquer referência de arquivos, por exemplo, serão feitas a partir do "work directory".
library(biblioteca) # carrega a biblioteca para uso de suas funções.
source("script.R") # carrega o script/fonte para uso das funções.
dir() # exibe os arquivos e pastas do diretório do workspace; similar ao "dir" do prompt do DOS/Windows ou o 'ls" dos Unix like.
ls() # lista os objetos existentes no ambiente; no Linux usa-se "ls" para listar o conteúdo do diretório e no R para listar o conteúdo corrente carregado no ambiente.
objects() # igual ao ls().
rm(objeto) # remove um objeto do ambiente; deleta.
julian(data_dia_juliano,origin=data_base) # retorna o dia juliano (o dia a partir da data passada ou 1/1/1970 se omitido).
Sys.getenv(variável_x) # obtém o valor da variável de ambiente "variável_x".
Sys.putenv(variável_x) # atribui o valor da variável de ambiente "variável_x".
Sys.time() # retorna a data e hora do sistema, respeitando o fuso do sistema ("t" minúsculo)
Sys.Date() # retorna a data do sistema ("D" maiúsculo; respeitando o fuso do sistema, sem exibir a hora, claro).
system("cmd") # executa o comando "cmd" do sistema operacional (Windows).
Para objetos:
length(objeto) # retorna o número de elementos ou componentes de um objeto; seu tamanho.
cat(objeto) # imprime os elementos/argumentos do objeto.
str(objeto) # imprime a estrutura de um objeto (structure).
class(objeto) # imprime a classe ou tipo de um objeto.
identical(objeto1, objeto2) # testa se 2 objetos são idênticos (TRUE/FALSE).
vector(tamanho) # retorna um vetor com determinado tamanho.
matrix(linhas,colunas) # retorna uma matriz com as dimensões passadas.
mat.or.vec(linhas,colunas) # retorna uma matriz se o segundo parâmetro for maior que 1 ou um vetor para o segundo parâmetro igual a 1.
subset(objeto, condição, select=colunas) # retorna um subconjunto do objeto com elementos/linhas que obedeçam à condição e, se informado e o objeto se tratar de um dataframe, um vetor com as colunas para esse subset.
Para strings:
toupper(objeto) # retorna o conteúdo do "objeto" passado para letras maiúsculas.
tolower(objeto) # retorna o conteúdo do "objeto" passado para letras minúsculas.
grep(padrão, objeto) # busca o padrão no objeto.
regexpr(padrão, objeto) # busca o padrão no objeto.
sub(padrão, novo_valor, objeto) # substitui o padrão encontrado pelo novo_valor no objeto.
formatC(objeto, ...) # formata números usando a especificação no estilo C.
Para vetores:
c(objeto1,objeto2,...) # combina objetos em um vetor.
sequence(valor) # retorna um vetor com a sequencia de 1 até o "valor" passado; se "valor" for um vetor de valores, cria sequencias de 1 até cada valor de forma concatenada.
seq(inicio,limite,quantidade) # cria uma sequência de valores respeitando a quantidade de itens e o limite.
rep(objeto, quantidade) # repete o objeto tantas vezes a quantidade indicar; pode ser um número ou um vetor que será repetido de forma sequencial.
rev(objeto) # retorna de "objeto" em ordem um a um de trás para frente.
range(objeto) # retorna o valor mínimo e o valor máximo do "objeto".
paste(objeto) # concatena de forma sequencial o objeto (vetor) convertendo esse resultado em caracteres; gera uma string unindo os elementos.
append(objeto1, objeto2, after=posição) # adiciona elementos "objeto2" (pode ser de um vetor) a um vetor "objeto1", podendo indicar a posição de inserção dos elementos que por padrão é no final.
sort(objeto) # retorna os elementos de "objeto" de forma ordenada.
order(objeto) # retorna os elementos de "objeto" de forma ordenada.
unique(objeto) # retorna o vetor "objeto" sem elementos repetidos, que são removidos.
rnorm(quantidade) # retorna um vetor com valores aleatórios
Para dataframe:
names(objeto) # nomes das colunas do objeto/dataframe.
cbind(objeto1, objeto2, ...) # combina objetos como colunas; anexa o objeto2 ao objeto1.
rbind(objeto1, objeto2, ...) # combina objetos como linhas; anexa o objeto2 ao objeto1.
Funções matemáticas simples:
sign(objeto) # retorna um objeto do mesmo tamanho de "objeto", porém com conteúdo representando o sinal do valor em "objeto", podendo ser "-1" se o valor daquela posição em "objeto" for negativa, 0 se for 0 e 1 se for positiva.
abs(objeto) # retorna o valor absoluto dos elementos do objeto.
floor(objeto) # retorna o arredondamento do valor ou dos elementos do objeto para baixo.
ceiling(objeto) # retorna o arredondamento do valor ou dos elementos do objeto para cima.
round(objeto, digitos) # retorna o arredondamento do valor ou dos elementos contendo a quantidade de dígitos informada.
signif(objeto, digitos) # retorna o arredondamento do valor ou dos elementos contendo a considerando a quantidade de dígitos informada e retornando um a menso.
trunc(objeto) #trunca o valor do objeto ou dos elementos.
Foi difícil, mas acho que a organização ficou coerente, não?
Lembre-se que o R foi feito para trabalhar com conjunto de dados e sua análise.
Se você atualmente usa outro pacote estatístico, pro que usar R?
- É gratuito! Se você é professor ou estudante, os benefícios são óbvios.
- Roda em uma variedade de plataformas incluindo Windows, Unix e MacOS.
- Provê uma plataforma sem paralelo para programação de novos métodos estatísticos de uma maneira fácil e direta... honesta.
- Contém rotinas estatísticas avançadas ainda não disponível em outros pacotes.
- Tem capacidades gráficas no estado-da-arte.
Geral:
help(nome_da_funcao) # abre no navegador a definição/ajuda da função; no RStudio a página é aberta em uma janela lateral.
?função # idem ao help.
getwd() # mostra o diretório (caminho) configurado para o workspace atual.
setwd("caminho/para/diretorio") # configura o diretório para o workspace; qualquer referência de arquivos, por exemplo, serão feitas a partir do "work directory".
library(biblioteca) # carrega a biblioteca para uso de suas funções.
source("script.R") # carrega o script/fonte para uso das funções.
dir() # exibe os arquivos e pastas do diretório do workspace; similar ao "dir" do prompt do DOS/Windows ou o 'ls" dos Unix like.
ls() # lista os objetos existentes no ambiente; no Linux usa-se "ls" para listar o conteúdo do diretório e no R para listar o conteúdo corrente carregado no ambiente.
objects() # igual ao ls().
rm(objeto) # remove um objeto do ambiente; deleta.
julian(data_dia_juliano,origin=data_base) # retorna o dia juliano (o dia a partir da data passada ou 1/1/1970 se omitido).
Sys.getenv(variável_x) # obtém o valor da variável de ambiente "variável_x".
Sys.putenv(variável_x) # atribui o valor da variável de ambiente "variável_x".
Sys.time() # retorna a data e hora do sistema, respeitando o fuso do sistema ("t" minúsculo)
Sys.Date() # retorna a data do sistema ("D" maiúsculo; respeitando o fuso do sistema, sem exibir a hora, claro).
system("cmd") # executa o comando "cmd" do sistema operacional (Windows).
Para objetos:
length(objeto) # retorna o número de elementos ou componentes de um objeto; seu tamanho.
cat(objeto) # imprime os elementos/argumentos do objeto.
str(objeto) # imprime a estrutura de um objeto (structure).
class(objeto) # imprime a classe ou tipo de um objeto.
identical(objeto1, objeto2) # testa se 2 objetos são idênticos (TRUE/FALSE).
vector(tamanho) # retorna um vetor com determinado tamanho.
matrix(linhas,colunas) # retorna uma matriz com as dimensões passadas.
mat.or.vec(linhas,colunas) # retorna uma matriz se o segundo parâmetro for maior que 1 ou um vetor para o segundo parâmetro igual a 1.
subset(objeto, condição, select=colunas) # retorna um subconjunto do objeto com elementos/linhas que obedeçam à condição e, se informado e o objeto se tratar de um dataframe, um vetor com as colunas para esse subset.
Para strings:
toupper(objeto) # retorna o conteúdo do "objeto" passado para letras maiúsculas.
tolower(objeto) # retorna o conteúdo do "objeto" passado para letras minúsculas.
grep(padrão, objeto) # busca o padrão no objeto.
regexpr(padrão, objeto) # busca o padrão no objeto.
sub(padrão, novo_valor, objeto) # substitui o padrão encontrado pelo novo_valor no objeto.
formatC(objeto, ...) # formata números usando a especificação no estilo C.
Para vetores:
c(objeto1,objeto2,...) # combina objetos em um vetor.
sequence(valor) # retorna um vetor com a sequencia de 1 até o "valor" passado; se "valor" for um vetor de valores, cria sequencias de 1 até cada valor de forma concatenada.
seq(inicio,limite,quantidade) # cria uma sequência de valores respeitando a quantidade de itens e o limite.
rep(objeto, quantidade) # repete o objeto tantas vezes a quantidade indicar; pode ser um número ou um vetor que será repetido de forma sequencial.
rev(objeto) # retorna de "objeto" em ordem um a um de trás para frente.
range(objeto) # retorna o valor mínimo e o valor máximo do "objeto".
paste(objeto) # concatena de forma sequencial o objeto (vetor) convertendo esse resultado em caracteres; gera uma string unindo os elementos.
append(objeto1, objeto2, after=posição) # adiciona elementos "objeto2" (pode ser de um vetor) a um vetor "objeto1", podendo indicar a posição de inserção dos elementos que por padrão é no final.
sort(objeto) # retorna os elementos de "objeto" de forma ordenada.
order(objeto) # retorna os elementos de "objeto" de forma ordenada.
unique(objeto) # retorna o vetor "objeto" sem elementos repetidos, que são removidos.
rnorm(quantidade) # retorna um vetor com valores aleatórios
Para dataframe:
names(objeto) # nomes das colunas do objeto/dataframe.
cbind(objeto1, objeto2, ...) # combina objetos como colunas; anexa o objeto2 ao objeto1.
rbind(objeto1, objeto2, ...) # combina objetos como linhas; anexa o objeto2 ao objeto1.
Funções matemáticas simples:
sign(objeto) # retorna um objeto do mesmo tamanho de "objeto", porém com conteúdo representando o sinal do valor em "objeto", podendo ser "-1" se o valor daquela posição em "objeto" for negativa, 0 se for 0 e 1 se for positiva.
abs(objeto) # retorna o valor absoluto dos elementos do objeto.
floor(objeto) # retorna o arredondamento do valor ou dos elementos do objeto para baixo.
ceiling(objeto) # retorna o arredondamento do valor ou dos elementos do objeto para cima.
round(objeto, digitos) # retorna o arredondamento do valor ou dos elementos contendo a quantidade de dígitos informada.
signif(objeto, digitos) # retorna o arredondamento do valor ou dos elementos contendo a considerando a quantidade de dígitos informada e retornando um a menso.
trunc(objeto) #trunca o valor do objeto ou dos elementos.
Foi difícil, mas acho que a organização ficou coerente, não?
Lembre-se que o R foi feito para trabalhar com conjunto de dados e sua análise.
quarta-feira, junho 04, 2014
As sete ferramentas da qualidade
Segue o link para um post que descreve muito bem as 7 ferramentas de qualidade organizadas por Ishikawa. Estas ferramentas conseguiriam tratar a grande maioria dos problemas.
São elas:
- Diagrama de pareto
- Diagrama de causa e efeito
- Histograma
- Folhas de verificação
- Gráfico de dispersão
- Fluxogramas
- Cartas de controle
Vale a pena ler!
Assinar:
Postagens (Atom)