Estes comandos são apenas para recordar a sintaxe rápida pois a explicação depende de muita leitura, recomendo os livros do Verde (Aurélio Jargas) https://aurelio.net/ em especial https://aurelio.net/sed/sed-howto/#conhecendo-o-sed
# insere o texto "begin transation" na primeira linha do arquivo
# focos_terrama2q.sql
sed -i '1s/^/begin transaction; /' focos_terrama2q.sql
# insere o texto na linha específica (linha 29322846)
sed -i '29322846s/^/commit; /' focos_terrama2q.sql
# insere o texto na ultima linha
echo "commit; " >> focos_terrama2q.sql
# insere algum texto a cada 100000 linhas
sed '0~100000 s/$/\ncommit;\nbegin;/g' < focos_terrama2q.sql > focos.sql
segunda-feira, 4 de maio de 2020
segunda-feira, 20 de abril de 2020
Time Zone no Banco de Dados PostgreSQL
Neste post estou preocupado como a definição de tempo do meu banco de dados. Pois quando o sistema for instalado em usuários de outros fusos o sistema pode apresentar erro. Com os comandos SQL abaixo direitamente no PGSQL você poderá saber o que está definido e como fazer a devida conversão.
-- Show timezone of current session. show timezone; -- Set timezone of current session. set time zone 'Brazil/East'; -- Identify or remembering timezone. select * from pg_timezone_names;
Uma dica de como manter o fuso definido está em:
https://kb.objectrocket.com/postgresql/postgresql-set-time-zone-1064
Para definir definitivamente nas configuração do Banco e não na seção devem ser utilizado os seguintes comandos:
sudo -u postgres pg_conftool 11 main set timezone "UTC" sudo -u postgres pg_conftool 11 main set log_timezone "UTC" service postgresql restart
sexta-feira, 27 de março de 2020
Como combinar todos os arquivos CSV de uma mesma pasta para um pandas dataframe automaticamente
Muitas vezes temos que ler vários arquivos idênticos, por exemplo focos por dia, para depois analisar todos os registros juntos. Uma maneira de fazer isto muito rápido foi publicado por Kade Killary
em:
https://medium.com/@kadek/elegantly-reading-multiple-csvs-into-pandas-e1a76843b688
Resumindo o texto o que deve ser realizado está apresentado nas 3 linhas abaixo
import glob
import pandas as pd
df = pd.concat([pd.read_csv(f) for f in glob.glob('data*.csv')], ignore_index = True)
A explicação disto pode ser interpretada por partes da seguinte maneira
# glob.glob('data*.csv') - returns List[str]
# pd.read_csv(f) - returns pd.DataFrame()
# for f in glob.glob() - returns a List[DataFrames]
# pd.concat() - returns one pd.DataFrame()
sexta-feira, 16 de agosto de 2019
Como criar ambiente virtual de Python com o CONDA
Para controlar as versões de python e bibliotecas que são utilizadas é muito interessante fazer o gerenciamento de virtual envs. Uma excelente introdução foi escrita por Gilberto Queiróz e está disponível em https://github.com/gqueiroz/ser347/blob/master/2018/aula-12/anaconda.ipynb
Para listar os ambientes:
conda info -e
Para listar os ambientes:
conda info -e
quinta-feira, 20 de setembro de 2018
Trigger no PostgreSQL
Abaixo está um exemplo dos comandos PL/SQL utlizados para criar um gatilho no banco de dados de tal maneira que ao inserir ou atualizar uma linha de registro serão populadas duas colunas concatenando dados já existentes no registro.
Neste caso estão sendo concatenados numeros com zeros a direita para compor um atributo do tipo varchar. Este exemplo foi escrito pelo Dr. Gilberto Queiroz Ribeiro
CREATE OR REPLACE FUNCTION focos_bdq_c2_insert()
RETURNS trigger AS $$
BEGIN
NEW.complete_id_state := concat(lpad(NEW.id_0::character varying::text, 4, '0'::text),
lpad(NEW.id_1::character varying::text, 3, '0'::text))::varchar;
NEW.complete_id_munic := concat(lpad(NEW.id_0::character varying::text, 4, '0'::text),
lpad(NEW.id_1::character varying::text, 3, '0'::text),
lpad(NEW.id_2::character varying::text, 8, '0'::text))::varchar;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER focos_bdq_c2_insert BEFORE INSERT OR UPDATE ON focos_bdq_c2 FOR EACH ROW EXECUTE PROCEDURE focos_bdq_c2_insert();
quinta-feira, 27 de abril de 2017
Processamento de Imagens utilizando python e GDAL
Neste Exemplo são apresentados métodos de leitura de arquivos matriciais fazendo uma varredura em uma pasta para então processar todos os arquivo. Um ponto importante é que os dados foram lidos como array multidimensional, portanto sem informação espacial, porém o arquivo de saída foi transformado em um Geotiff.
import glob, os, sys
import numpy as np
import osgeo.gdal as gdal
from osgeo import osr
path_in_aqm = r"c:\Projetos\AQM_Renata\Area_Queimada_modis_americadosul\aqm" #2005_01_AQM.bin
path_in_foco = r"c:\Projetos\AQM_Renata\Area_Queimada_modis_americadosul\focos" #2005_01_grd_focos.bin
path_out = r"c:\Projetos\AQM_Renata\Area_Queimada_modis_americadosul\aqm_focos_tif"
anos = range(2005,2016)
meses = ["%02d"%a for a in range(1,13)]
#ano = 2014
#mes = "06"
for ano in anos:
for mes in meses:
arq_aqm = os.path.join(path_in_aqm,"%s_%s_AQM.bin"%(ano,mes))
arq_foco = os.path.join(path_in_foco,"%s_%s_grd_focos.bin"%(ano,mes))
arq_saida = os.path.join(path_out,"%s_%s_aqm_focos.tif"%(ano,mes))
img_aqm = np.fromfile(arq_aqm,dtype=np.int16,count=-1)
img_foco = np.fromfile(arq_foco,dtype=np.int16,count=-1)
img_aqm = np.resize(img_aqm,(6300,5000))
img_foco = np.resize(img_foco,(6300,5000))
idx_aqm = np.where(img_aqm==1,20,0)
idx_foco = np.where(img_foco>0,40,0)
nova_area = (idx_aqm+idx_foco).astype("uint8")
#nova_area.tofile(path_in_aqm + "/comparacao_%s_%s_uint8.bin"%(ano,mes))
# definicioes para gravar um aquivo no formato envi usando gdal
spatialRef = osr.SpatialReference()
spatialRef.SetWellKnownGeogCS( "EPSG:4326" )
geotransform = ( -83.005, 0.01 , 0 , 13.005, 0 , -0.01)
driver = gdal.GetDriverByName("GTIFF")
ds = driver.Create(arq_saida, 5000,6300,1,gdal.GDT_Byte , ['COMPRESS=LZW'])
ds.GetRasterBand(1).WriteArray(nova_area)
ds.SetProjection(spatialRef.ExportToWkt())
ds.SetGeoTransform(geotransform)
ds=None
print "Final do Processamento"
print "-"*10
import numpy as np
import osgeo.gdal as gdal
from osgeo import osr
path_in_aqm = r"c:\Projetos\AQM_Renata\Area_Queimada_modis_americadosul\aqm" #2005_01_AQM.bin
path_in_foco = r"c:\Projetos\AQM_Renata\Area_Queimada_modis_americadosul\focos" #2005_01_grd_focos.bin
path_out = r"c:\Projetos\AQM_Renata\Area_Queimada_modis_americadosul\aqm_focos_tif"
anos = range(2005,2016)
meses = ["%02d"%a for a in range(1,13)]
#ano = 2014
#mes = "06"
for ano in anos:
for mes in meses:
arq_aqm = os.path.join(path_in_aqm,"%s_%s_AQM.bin"%(ano,mes))
arq_foco = os.path.join(path_in_foco,"%s_%s_grd_focos.bin"%(ano,mes))
arq_saida = os.path.join(path_out,"%s_%s_aqm_focos.tif"%(ano,mes))
img_aqm = np.fromfile(arq_aqm,dtype=np.int16,count=-1)
img_foco = np.fromfile(arq_foco,dtype=np.int16,count=-1)
img_aqm = np.resize(img_aqm,(6300,5000))
img_foco = np.resize(img_foco,(6300,5000))
idx_aqm = np.where(img_aqm==1,20,0)
idx_foco = np.where(img_foco>0,40,0)
nova_area = (idx_aqm+idx_foco).astype("uint8")
#nova_area.tofile(path_in_aqm + "/comparacao_%s_%s_uint8.bin"%(ano,mes))
# definicioes para gravar um aquivo no formato envi usando gdal
spatialRef = osr.SpatialReference()
spatialRef.SetWellKnownGeogCS( "EPSG:4326" )
geotransform = ( -83.005, 0.01 , 0 , 13.005, 0 , -0.01)
driver = gdal.GetDriverByName("GTIFF")
ds = driver.Create(arq_saida, 5000,6300,1,gdal.GDT_Byte , ['COMPRESS=LZW'])
ds.GetRasterBand(1).WriteArray(nova_area)
ds.SetProjection(spatialRef.ExportToWkt())
ds.SetGeoTransform(geotransform)
ds=None
print "Final do Processamento"
print "-"*10
domingo, 23 de abril de 2017
Como criar uma crosstable utilizando Python Pandas?
Um exemplo de como utilizar o Pandas para formatar os dados criando uma tabela de referência cruzada:
import pandas as pd
dados = pd.read_csv("arquivo.csv")
dados.describe()
nfocos_ref nfocos_atnpp nf_aqua_terra julianday ano
count 366.000000 366.000000 366.000000 366.000000 366.0
mean 6.344262 52.486339 11.292350 183.500000 2016.0
std 11.279588 88.889148 18.364328 105.799338 0.0
min 0.000000 0.000000 0.000000 1.000000 2016.0
25% 0.000000 0.000000 0.000000 92.250000 2016.0
50% 0.000000 8.500000 2.000000 183.500000 2016.0
75% 8.000000 62.750000 15.000000 274.750000 2016.0
max 68.000000 546.000000 117.000000 366.000000 2016.0
pv=dados.pivot_table(index='ano', columns='julianday', values='nfocos_atnpp',aggfunc='sum')
ano/julianday 1 2 3 4 5 6 7 8 9 10
1998 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1999 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2009 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 2.0 O links para a documentação oficial é:
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.crosstab.html
Assinar:
Postagens (Atom)