terça-feira, 25 de outubro de 2016

Scape de string no PostGres

Para dar scape de string no Postgres é muito simples, segue exemplo abaixo:


select E'd\'agua';

quarta-feira, 19 de outubro de 2016

Instalando o Gdal 2.1 no Ubuntu 16.04

Primeiramente baixe o instalador que pode ser encontrado AQUI

Após o download basta executar os seguintes comandos:

$ cd gdal-2.1.0/
$ ./configure --prefix=/usr/
$ make
$ sudo make install
$ cd swig/python/
$ sudo python setup.py install

sexta-feira, 14 de outubro de 2016

Criando funções em R

#criando funções com valores de entrada padrão
soma_valores = function(x=0,y=0){
  return (x+y)
}
soma_valores()

Manipulando data em R

dta <- Sys.Date() #recuperando a data corrente

as.character(dta) #convertendo para string

dta2 <- as.Date("2016-04-30") #convertendo string para data

dtas <- seq(from = dta2, to = dta, by=1) # lista com sequencia de datas

dtaFormatada <- as.Date("07/Ago/12", format = "%d/%b/%y") #data formatada

dtaFormatada2 <- as.Date("2012-Agosto-07", format = "%Y-%B-%d") #data formatada

format(dtaFormatada, "%d") #recuperando o dia da data

format(dtaFormatada, "%m/%Y") #recuperando o mes e ano

range(dtas) #recuperando o range de datas envolvidas

dta3 <- seq(from = as.Date("2016-04-01"), to = dta2, by=1)

all(dtas %in% dta3) #verificando se todas as datas de um array está contido em outro

which(dtas %in% dta3) #verificando quais datas estão contidas em outro array

which(!(dtas %in% dta3)) #verficando quais datas não estão contidas dentro de um array

dtas[which(!(dtas %in% dta3))] #recuperando os valores das datas de quais não estão contidas dentro de um array

dtas4 <- dtas > as.Date("2016-05-05") & dtas <= as.Date("2016-05-15") #criando subset com comparativo de datas

quinta-feira, 13 de outubro de 2016

Operações aritméticas com vetores em R

// Comment
#OPERAÇÕES COM VETORES
v1 <- 1:10="" 2="" de="" do="" multiplicando="" os="" por="" quadrada="" raiz="" sqrt="" todas="" um="" v1="" valores="" vetor="">= 3 #checando quais valores são maiores ou igual a 3

c(1,2,3,4) %in% v1 #verificando se determinados valores existem dentro de um vetor

c(1,2,3,4) * tail(v1,4) #pegando alguns elementos de um vetor e multiplicando dois vetores

c(1,2,3,4) * c(3,5) #multiplicando dois vetores

seq(from=10, to=100, by=0.5) #criando uma sequencia de números

vector(mode = "numeric", length = 2) #criando vetores em branco

vector(mode = "character", length = 10) #criando vetores de texto em branco

vector(mode = "logical", length = 3) #criando vetores de boleano em branco

rep(x = 22, times = 10) #criando vetor com valores repetidos
x = c(18, 0, 9)

rep(x, 3) #criando um vetor a partir da repetição de outro

v1[1:2] #recuperando elementos específicos de um array

v1[c(1,2,3)] 
v1[v1>1 & v1 < 4] #recuperando um intervalo de valores
v1[v1>4 | v1 < 10]

#Manipulando Vetores em R
a <- c(1:5)
b <- c(6,NA,7,NA,8,NA,9)
c <- c("1","2","5","6")

clean <- complete.cases(b) #filtra apenas os itens completos de uma array
is.na(b) #filtra apenas os objetos vazios de um array

b[clean] #filtrando os itens do array completos

quarta-feira, 31 de agosto de 2016

Comparando geometrias dentro de uma área específica com PostGIS

Uma tarefa muito útil nos bancos de dados geográficos é a possibilidade de se comparar geometrias mesmo que seja virtualmente, no exemplo abaixo pode se comparar um ponto no exemplo com uma geometria que é gerada pelo operador st_envelope do PostGIS. No segundo exemplo tem executamos a mesma tarefa do primeiro porém comparando os valores min e max de X e Y.

1- SELECT x  FROM table where geom && ST_MakeEnvelope(-85.994,-55.994, -32.994,10.005)

2- SELECT x FROM table 
where (ST_X(geom) >= -85.994 and ST_X(geom) <= -32.994)
and (ST_Y(geom) >= -55.994 and ST_Y(geom) <= 10.005)

Exportando GEOJson do Postgis

Um recurso muito bom do Postgis é a facilidade de exportar um geojson diretamente pela consulta de sql,  eliminando aquela tarefa um tanto quanto chata de utilizar o ogr2. Segue script abaixo, exportando um polígono para geojson.

SELECT ST_AsGeoJSON(ST_MakeEnvelope(-89.296875,-58.539595,-31.992188,13.068777),4326)

O exemplo da saída pode ser visualizado aqui.

Referência: http://postgis.net/docs/ST_AsGeoJSON.html


quinta-feira, 25 de agosto de 2016

Criando rotinas python com crontab

Uma maneira de operacionalizar tarefas diárias com python é utilizando o recurso crontab do linux que executa tarefas de acordo com seus parâmetros.

O primeiro passo é adicionar na primeira linha do seu arquivo python o cabeçalho que o torna executável. obs(não fica mais necessário utlizar python script.py).

#!/usr/bin/env python2

O segundo passo é dar permissão do arquivo de ser executável, para isso utilizamos o chmod +x script.py

o próximo passo é abrir a ferramenta crontab utilizando o comando crontab -e, abrirá um editor de texto com as configurações das tarefas que você pode ter já configuradas. Para adicionar a sua basta ir até o final do arquivo e configurar seu script.

A sequência de execução do crontab é primeiramente o tempo de MM HH DM M DS  caminho do script / script.py >> caminho do log de execução /log.txt 2>&1 REF: http://www.infowester.com/linuxcron.php

Voilá!, após estas configurações seu script será executado de acordo com a data configurada.


quarta-feira, 3 de agosto de 2016

Filtrando um dicionário em python

Um recurso muito útil é filtrar um ou vários objetos dentro de um dicionário, segue abaixo os exemplos de filtragem de objetos de um dicionário pela key (índice) e valor.

Primeiramente nosso dicionário de exemplo:

dict = {'conc_co':'monoxido_carbono','conc_pm':'material_particulado','umid_ar':'umidade_relativa', 'tmp_ar':'temperatura', 'vento_dir':'vento_direcao', 'vento_vel':'vento_velocidade'}

Agora o filtro pelo valor do objeto:

dict2 = {k: v for k, v in prefixos.items() if v == 'vento_velocidade'}

O resultado de dict2 será:

{'vento_vel': 'vento_velocidade'}

Agora filtrando pela chave do objeto:

dict2 = {k: v for k, v in prefixos.items() if k == 'umid_ar'}

O resultado será:

{'umid_ar': 'umidade_relativa'}


Removendo espaços em branco de uma string com python

Uma função para remover espaços em branco de uma string à esquerda, direita ou totalmente em python.

Removendo todos os espaços em branco de uma string
s = "  \t a string example\t  "
s = s.strip()

Removendo os espaços à esquerda
s = s.lstrip()

Removendo os espaços à direita
s = s.rstrip()

terça-feira, 2 de agosto de 2016

Substring em Python

O python trabalha com a manipulação de strings de uma maneira muito fácil, segue alguns exemplos de como fazer isso de uma maneira muito simples.

>>> x = "Hello World!"
>>> x[2:]
'llo World!'
>>> x[:2]
'He'
>>> x[:-2]
'Hello Worl'
>>> x[-2:]
'd!'
>>> x[2:-2]
'llo Worl'

quarta-feira, 22 de junho de 2016

Convertendo dados diversos para inteiro no python

Uma das dificuldades do python para quem já está acostumado com o tryparse() do c# é converter um objeto qualquer para outro tipo porém sem ter a certeza de que o mesmo está no formato correto e que não retornará um erro, como no python não existe nativamente, segue um exemplo de script que simula o tryparse() convertendo para inteiro.

def ignore_exception(IgnoreException=Exception,DefaultVal=None):
    """ Decorator for ignoring exception from a function
    e.g.   @ignore_exception(DivideByZero)
    e.g.2. ignore_exception(DivideByZero)(Divide)(2/0)
    """
    def dec(function):
        def _dec(*args, **kwargs):
            try:
                return function(*args, **kwargs)
            except IgnoreException:
                return DefaultVal
        return _dec
    return dec

sint = ignore_exception(ValueError)(int)
print sint("Hello World") # prints none
print sint("1340") # prints 1340

terça-feira, 14 de junho de 2016

Download de um shapefile via linha de comando com ogr2ogr

Um recurso muito fácil para realizar o download de um arquivo shapefile de um banco de dados Postgres com todos seu atributos.

ogr2ogr -overwrite -skipfailures -t_srs EPSG:4326 -f 'ESRI Shapefile' {shp} PG:'host={host} user={user} dbname={db} password={key}' -sql 'SELECT * FROM {table}'


Exportando uma query do Postgres para CSV

Um recurso muito útil do Postgres é o recurso de exportar o resultado de uma query para o formato csv que pode ser lido por diversos softwares.

Copy (Select * From tabela) To '/tmp/tabela.csv' With CSV DELIMITER ';' HEADER;

terça-feira, 31 de maio de 2016

Recuperando uma data posterior em javascript

Uma função bem simples de se adicionar dias à uma data corrente e retornar a mesma em formato americano em javascript:

function getDataISO(dias)
{
var dayMonth = new Date().getDate();
dayMonth += dias;
var d = new Date();
d.setDate(dayMonth);

var day = d.getDate();
var monthIndex = d.getMonth()+1;
var year = d.getFullYear();

    //retorno já formatado de 9 para 09
    return year + '-' + (monthIndex > 9 ? monthIndex : '0' + monthIndex.toString()) + '-' + (day > 9 ? day : '0' + day.toString());
}

Calculando os valores mínimo e máximo de um array em javascript

Uma função bem simples mas que pode ser muito útil para retornar os valores mínimo e máximo de um array em javascript feita em prototype.

Mínimo:

Array.prototype.max = function() {
  return Math.max.apply(null, this);
};

Máximo:

Array.prototype.min = function() {
  return Math.min.apply(null, this);
};

Média:

function getAvg(grades) {
  return grades.reduce(function (p, c) {
  return p + c;
}) / grades.length;
}

Chamadas:

v = [1,5,8,74,9];

v.max();
v.min();
mean = getAvg(v);

sexta-feira, 15 de abril de 2016

Restaurando dump do Postgres

Uma das funções do banco de dados após feito seu backup é fazer a restauração do dump feito para de volta à base original, para executar basta usar o comando.

psql -h host_base -d dbname -U usuario -f estrutura.sql;
psql -h host_base -d dbname -U usuario -f dados.sql;

Referência: Postgres

quarta-feira, 30 de março de 2016

Gerando dump no Postgres usando o comando pg_dump

Uma maneira simples e rápida de gerar um dump de um banco ou tabela do Postgres é através da linha de comando. Abaixo é descrito como gerar a estrutura e popular a tabela.

pg_dump -h host_base  -U nome_usuario  -d nome_base  -f estrutura.sql -s -c -E utf-8 -F p -O -v -x;

--disable-dollar-quoting --disable-triggers --no-security-labels --no-unlogged-table-data --quote-all-identifiers -t

pg_dump -h host_base  -U nome_usuario  -d nome_base   -f dados.sql -a -b -E utf-8 -F p -O -v -x;

--disable-dollar-quoting --disable-triggers --no-security-labels --no-unlogged-table-data --quote-all-identifiers -t

Referência: pg-dump

quarta-feira, 16 de março de 2016

Instalando MongoDB no Ubuntu 15.10

O MongoDB é um dos SGDB que tem crescido muito no mercado e seu uso no linux o torna uma ferramenta muito poderosa. Segue abaixo como fazer sua instalação no Ubuntu.


  1. Adicionar a chave.
    1. sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
  2. Criando a lista repositório
    1. sudo echo "deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list
  3. Atualizando a lista de repositório
    1. sudo apt-get update
  4. Instalando o MongoDb
    1. sudo apt-get install mongodb-org
  5. Checando se está funcionando
    1. sudo systemctl status mongd
  6. Caso não funcione reinicie o servidor
  7. Caso ainda não funcione crie o script abaixo e o invoque:
echo '[Unit]
Description=High-performance, schema-free document-oriented database
After=syslog.target network.target
 
[Service]
User=mongodb
Group=mongodb
ExecStart=/usr/bin/mongod -f /etc/mongod.conf
 
[Install]
WantedBy=multi-user.target' > /lib/systemd/system/mongod.service

# Setup the required directories
mkdir -p /var/run/mongodb/
mkdir -p /var/log/mongodb/
mkdir -p /var/lib/mongodb/
mkdir -p /data/db/

chown mongodb:mongodb /var/run/mongodb/
chown mongodb:mongodb /var/log/mongodb/
chown mongodb:mongodb /var/lib/mongodb/
chown mongodb:mongodb /data/db

chmod 0755 /var/log/mongodb/
chmod 0755 /var/run/mongodb/
chmod 0755 /var/lib/mongodb/
chmod 0755 /data/db/

# Start the new service and enable it on boot
systemctl --system daemon-reload
systemctl enable mongod.service

echo "Starting"
systemctl start mongod.service

Traduzido de: http://askubuntu.com/questions/724749/install-mongo-3-2-on-ubuntu-15-10

sexta-feira, 11 de março de 2016

Criando Atalhos no Qgis utilizando Python

Uma função muito interessante no Qgis é a criação de atalhos de teclado utilizando os scripts em Python. O exemplo abaixo cria um atalho que dá um print de mensagem utilizando as teclas CTRL + 2.

# See http://gis.stackexchange.com/questions/156633/how-to-launch-processing-tool-user-interface-using-pyqgis
import qgis.utils
from processing.core.Processing import Processing
from processing.gui.CommanderWindow import CommanderWindow
cw = CommanderWindow(iface.mainWindow(), iface.mapCanvas())
def openAlgorithm():
    print 'HELLO WORLD'

# Assign "Ctrl+1" to openAlgorithm()
from PyQt4.QtGui import QShortcut, QKeySequence
from PyQt4.QtCore import Qt
shortcut = QShortcut(QKeySequence(Qt.ControlModifier + Qt.Key_2), iface.mainWindow())
shortcut.setContext(Qt.ApplicationShortcut)
shortcut.activated.connect(openAlgorithm)

Após salvar e rodar o script basta testar o atalho.

Alterando atributos do Layer no Qgis

Uma função muito útil no Qgis é rodar scripts Python, neste caso cito abaixo um script para alterar os atributos de uma layer pelo terminal de scripts Python do Qgis

    layer = iface.activeLayer() #pega o layer atual da tela
    layer.startEditing() #inicia a edição do layer
    for f in layer.selectedFeatures(): #recupera as features de cada tupla
        layer.changeAttributeValue(f.id(),6,'xxxx') #alterando o atributo da coluna 6 com texto xxx
    layer.commitChanges() #confirma as alterações
    print 'fim'

Referência: Qgis Doc

terça-feira, 23 de fevereiro de 2016

Recuperando dados de um TIMESTAMP no Postgres

Uma função muito útil do Postgres é a recuperação de dados de um Timestamp, abaixo executamos a extração de dia, mês e ano de um timestamp.

SELECT EXTRACT(DAY FROM TIMESTAMP '2016-02-16 00:15:00');
SELECT EXTRACT(MONTH FROM TIMESTAMP '2016-02-16 00:15:00');
SELECT EXTRACT(YEAR FROM TIMESTAMP '2016-02-16 00:15:00');

Também podemos executar de uma outra forma para obter o mesmo resultado:

SELECT date_part('YEAR', timestamp '2014-04-25 08:44:21');
SELECT date_part('MONTH', timestamp '2014-04-25 08:44:21');
SELECT date_part('DAY', timestamp '2014-04-25 08:44:21');

Criando TRIGGERS no Postgres 9.2

Um dos recursos mais simples de um SGDB e comuns à serem utilizados são as TRIGGERS ou "Gatilhos', estes executam um processo antes ou depois de uma determinada ação no banco de dados. No exemplo abaixo é inserido um registro em uma tabela após uma tabela referente sofrer alteração em seus registros.

O primeiro passo é criar uma função que será executada toda vez que a tabela referente sofrer alteração.

OBS: A variável NEW se trata dos dados que estão vindo da alteração da tabela referente.

CREATE OR REPLACE FUNCTION atualiza_tabela () RETURNS trigger as $registro$
BEGIN
INSERT INTO tabelaX (campo1, campo2, campo3) 
VALUES ( NEW.dado1, NEW.dado12, NEW.dado3,
);

RETURN NEW;
END;
$registro$ LANGUAGE plpgsql;

Agora criamos literalmente a TRIGGER que será acionada toda vez que a tabela referente sofrer alteração, chamando a função que criamos acima.

CREATE TRIGGER TR_atualiza_tabela AFTER INSERT OR UPDATE ON tabela_referente
    FOR EACH ROW EXECUTE PROCEDURE atualiza_tabela();

Fonte: http://www.postgresql.org/docs/9.2/static/plpgsql-trigger.html

quinta-feira, 18 de fevereiro de 2016

Convertendo caracteres no Postgres

Uma função muito útil no PostgresSQL é a conversão de encoding de caracteres de um tipo para outro. No exemplo abaixo desejo converter um caracter que está no tipo LATIN1 para o tipo UTF-8.

SELECT CONVERT_FROM(convert_to('Brotas De Macaúbas', 'LATIN1'), 'UTF-8')

quinta-feira, 7 de janeiro de 2016

Utilizando aplicativos Windows no Linux

Nos dias atuais a utilização do Linux tem crescido muito por parte dos usuários comuns, no entanto alguns aplicativos comuns nativos para windows ainda não tem a versão apropriada para o Linux ou simplesmente não existe. Neste caso pode-se utilizar o aplicativo Wine que se torna uma plataforma para aplicativos Windows rodarem no linux... para efetuar sua instalação é muito simples. Segue códigos de instalação para o Ubuntu.

Primeiro vamos habilitar o uso de aplicativos x86 caso ainda não esteja habilitado:

sudo dpkg --add-architecture i386 

Vamos adicionar o repositório que contém o aplicativo:

sudo add-apt-repository ppa:wine/wine-builds

Vamos atualizar nossa lista de repositórios:

sudo apt-get update

Agora vamos instalar o Wine:

sudo apt-get install --install-recommends winehq-devel

Voilá! agora pode baixar um arquivo .EXE  e para instalar o mesmo neste formato basta cliar com o botão direito sobre o mesmo e mandar executar com o Wine e pronto!!!