Curso de introdução à programação voltada aos dados

Assunto muito importante para os novos economistas e para os antigos que não querem ficar pra trás. Esse curso cobre o básico, de forma simples, focado na linguagem R, Markdown, uso de GitHub e no tratamento e visualização de dados.

Welcome to INFO-201, Technical Foundations of Informatics. This is a course at the University of Washington’s Information School, and these materials were co-developed by Michael Freeman and Joel Ross. The purpose of this course is to teach students the necessary technical skills to begin writing code to work with data. While these resources are built for students currently enrolled in the course, they have been structured to be an online resource for anyone hoping to learn to work with information using programmatic approaches.

Fonte: Technical Foundations of Informatics

Anúncios

Impossibilidade da escolha racional do consumidor

DOS ARQUIVOS DOS RASCUNHOS: (5 anos atrás)

Sempre me interessei pela escolha do ponto de vista do consumidor, que acho menos estudada tradicionalmente que a da empresa, e esse artigo que li na época segue um pouco essa linha misturando Simon, teoria evolucionária e Tversky.

ABSTRACT

In this paper we show that a rational consumer choice along the lines traditionally suggested might lead to paradoxical results if one considers multidimensional goods, which incorporate a series of incommensurable aspects. Thereby, we explore the similarity between the resulting paradox and Kenneth Arrow’s well known Impossibility Theorem. Based on these considerations we suggest a solution for the former problem along the lines of Herbert Simon and Amos Tversky, which might—if driven to its extreme—even provide a unique and arguably rational solution for consumer choice among multidimensional goods. Eventually, we argue that the resulting framework poses a potentially useful starting point for further developing an evolutionary theory of consumer choice.

via Journal of Evolutionary Economics, Online First™ – SpringerLink.

Baixando dados fiscais do site Transparência no R

Ao contrário de outros sites do governo, o Transparência Orçamentária não tem um acesso por planilhas ou base de dados muito claro. Usei então como base para aprender um pouco de como extrair dados das tabelas de uma página genérica de internet.

O código abaixo faz o serviço, você só precisa mudar a variável ano na primeira linha para qualquer um entre 2013 e 2017.

O segredo, como sempre, é descobrir o endereço web correto. Para a busca básica, que é o que fazemos aqui, é “http://www.portaldatransparencia.gov.br/PortalFuncoes.asp?Exercicio=” seguido do ano. Esta busca específica só nos dá parte dos dados que são divididos em duas páginas. Acrescentamos “&Pagina=2” após o ano ao endereço para isso. Para ver alguma conta específica se deve adicionar &codFuncao=28” ao final. 28 é o código para encargos especiais, por exemplo. O resto do código é limpeza dos dados, que estão aqui em formato HTML.


ano = 2016

url = paste0("http://www.portaldatransparencia.gov.br/PortalFuncoes.asp?Exercicio=",ano)

page = readLines(url)

grep("Total",page)
pattern = '
<td class=\"colunaValor\">([^<]*)</td>
'
datalines = grep(pattern,page[290:length(page)],value=TRUE)
getexpr = function(s,g)substring(s,g,g+attr(g,'match.length')-1)
gg = gregexpr(pattern,datalines)
matches = mapply(getexpr,datalines,gg)
result = gsub(pattern,'\\1',matches)
names(result) = NULL

v1 = gsub(".","",result, fixed = TRUE)
v1 = as.numeric(gsub(",",".", v1, fixed = TRUE))

grep("Funç", page)
pattern2 = '
<td class=\"firstChild\"><a href=\"/PortalFuncoes_Detalhe.asp?([^<]*)</a></td>
'
datalines = grep(pattern2,page[1:length(page)],value=TRUE)
getexpr = function(s,g)substring(s,g,g+attr(g,'match.length')-1)
gg = gregexpr(pattern2,datalines)
matches = mapply(getexpr,datalines,gg)
result = gsub(pattern,'\\1',matches)
names(result) = NULL

t1 = substr(result,94,nchar(result))
t1 = substr(t1, 1, nchar(t1)-10+1)

url = paste0("http://www.portaldatransparencia.gov.br/PortalFuncoes.asp?Exercicio=",ano,"&Pagina=2")

page = readLines(url)
grep("Total",page)

pattern = '
<td class=\"colunaValor\">([^<]*)</td>
'
datalines = grep(pattern,page[290:length(page)],value=TRUE)
getexpr = function(s,g)substring(s,g,g+attr(g,'match.length')-1)
gg = gregexpr(pattern,datalines)
matches = mapply(getexpr,datalines,gg)
result = gsub(pattern,'\\1',matches)
names(result) = NULL

v2 = gsub(".","",result, fixed = TRUE)
v2 = as.numeric(gsub(",",".", v2, fixed = TRUE))

grep("Funç", page)
pattern2 = '
<td class=\"firstChild\"><a href=\"/PortalFuncoes_Detalhe.asp?([^<]*)</a></td>
'
datalines = grep(pattern2,page[1:length(page)],value=TRUE)
getexpr = function(s,g)substring(s,g,g+attr(g,'match.length')-1)
gg = gregexpr(pattern2,datalines)
matches = mapply(getexpr,datalines,gg)
result = gsub(pattern,'\\1',matches)
names(result) = NULL

t2 = substr(result,94,nchar(result))
t2 = substr(t2, 1, nchar(t2)-10+1)

tab1 = data.frame(cbind(append(t1,t2), append(v1,v2)))
colnames(tab1) = c("Funcao","Valor")
tab1[,2] = as.numeric(paste(tab1[,2]))

tab1

O resultado é salvo na variável “tab1”.

 

Baixando séries diretamente do SGS do Banco Central pelo R

Pesquisando pelos blogs a gente acaba conhecendo vários pacotes que fazem isso. Alguns ótimos, outros exageradamente grandes, mas minha dificuldade sempre foi fazer funcionar através do firewall do escritório. Pesquisei um pouco mais e adotei uma abordagem mais minimalista, baixando os dados direto das APIs dos institutos e trabalhando. Segue um código de exemplo simples, facilmente adaptável e a explicação:

Os dados do BCB estão acessíveis através de endereços web especialmente construídos, que podemos colocar no próprio browser. Vou usar como exemplo a série do IBC-BR, que é a série 24363. O endereço para ela é:

http://api.bcb.gov.br/dados/serie/bcdata.sgs.24363/dados?formato=json

Se quiser, experimente colar este endereço no seu navegador. Os dados aparecem razoavelmente ordenados, de acordo com o formato JSON. Repare que o número da série é parte do endereço, portanto, para puxar outra série basta substituir o número dela no local correto.

Para o IBC reparei que a série não vai até o final quado chamada neste endereço. Para vir ela toda eu adiciono no fim uma data inicial e ele interpreta que quero tudo, até o fim. O endereço fica assim:

http://api.bcb.gov.br/dados/serie/bcdata.sgs.24363/dados?formato=json&dataInicial=01/01/2001

Repare que coloquei 2001, mas os dados só começam em 2003. O R possui algumas bibliotecas que lêem os dados no formato JSON, eu escolhi usar a “jsonlite”.


library(jsonlite)

A função que lê os dados JSON é a fromJSON. Na linha a seguir mando ele baixar os dados do endereço, passo pelo fromJSON para traduzir para o formato data.frame e salvo em uma variável.


ibc = fromJSON("http://api.bcb.gov.br/dados/serie/bcdata.sgs.24363/dados?formato=json&amp;dataInicial=01/01/2001")

Se der um erro provavelmente você está no escritório e a TIC está bloqueando o acesso direto. Contornamos isso baixando os dados primeiro para um arquivo e lendo ele a partir daí.


download.file("http://api.bcb.gov.br/dados/serie/bcdata.sgs.24363/dados?formato=json&amp;dataInicial=01/01/2001","ibcbr.json")
ibc = fromJSON("ibcbr.json")

Já podemos ler essa variável IBC no R normalmente, PARECE que está tudo certo. Se analisarmos mais profundamente, no entanto, vemos que os dados estão codificados como “caracteres” e não como números. Vamos fazer a conversão no R mesmo.


ibc$valor = as.numeric(ibc$valor)
ibc$data = as.Date(ibc$data,"%d/%m/%Y")

ibc

plot(ibc, type="l", main="IBC-BR", ylab="", xlab="")

O último gráfico deve ficar assim:

Rplot.jpg

Esse método vale para o BCB, mas para os demais órgãos é semelhante. Só é questão de descobrir como são formados os endereços e qual formato de arquivo eles usam. Por exemplo, no IBGE os endereços são formados com regras de acordo com esta página: http://api.sidra.ibge.gov.br/home/ajuda

Trabalho de campo na economia

Interessante texto sobre como a disciplina economia pode se beneficiar da maior difusão do uso de trabalho de campo, isto é, investigação direta, para além do uso tradicional em economia industrial.

More recently, Swann (2008, p. ix) proposed a new direction and a new attitude to applied economics, what he calls “vernacular knowledge of the economy, knowledge of the economy gathered by ordinary people from their everyday interactions with markets.” He argued that “such vernacular knowledge may sit uncomfortably with the formal models of economists […] But no wise economist should discard the vernacular, because it offers insights that can never be found in formal analysis alone.”

Fonte: Fieldwork and model building in economics— Part 2 | World Economics Association

R 3.3.3 lançado

Uma rapidinha, já podem atualizar seus computadores, está disponível uma nova versão do R. Aparentemente conserta alguns bugs apenas, mas melhora a funcionalidade do download.file quando tenta baixar um arquivo de sites que redirecionam o link para um site seguro. Talvez ajude com alguns sites de governo.

Fonte: R 3.3.3 now available