Open fjuniorr opened 3 years ago
o pacote pandas
do python também não interpreta um campo descrito como numérico, tanto para arquivo do PdA, quanto para o arquivo hospedado no git:
ao contrário do que aponta o esquema das colunas numéricas desse arquivo:
{
"name": "REPASSE_PREVISTO",
"type": "number",
"format": "default",
"title": "Repasse Previsto",
"description": "Valor total de recursos previstos para a execução da parceria, por ano.",
"groupChar": ".",
"decimalChar": ","
},
{
"name": "REPASSE_ATUALIZADO",
"type": "number",
"format": "default",
"title": "Repasse Atualizado",
"description": "Valor total de recursos efetivamente disponibilizados para a execução da parceria",
"groupChar": ".",
"decimalChar": ","
},
entretanto, quando se usa .
como decimalChar
, como exemplificado em alteração do mesmo arquivo acima, a interpretação do tipo da variável ocorre corretamente:
@Andrelamor se você ler diretamente o csv usando o pandas ele não "sabe" dos metadados que existem no datapackage.json
. O processo pra ele fazer isso de forma adequada é tipo isso
from frictionless import Package
dp = Package('https://raw.githubusercontent.com/dados-mg/termos-parceria-contratos-gestao/master/datapackage.json')
resource = dp.get_resource('repasses')
df = resource.to_pandas()
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 181 entries, 0 to 180
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 ID_INSTRUMENTO 181 non-null object
1 ANO 181 non-null int64
2 REPASSE_PREVISTO 181 non-null float64
3 REPASSE_ATUALIZADO 181 non-null float64
4 OBSERVACOES 0 non-null object
@fjuniorr então teremos de considerar ofertar esse 'combo' frictionless+pandas para a comunidade em geral, para minimizar o custo de transformação da notação dos números
Lembrar de ler este comentário sobre o assunto em questão.
O diagrama abaixo representa am alto nível o relacionamento entre os seguinte componentes
O datapusher é atualmente a conexão entre os nossos dados entre o FileStore a o DataStore e
No entanto, o processo de inferência realizado nas colunas dos arquivos não consegue reconhecer os tipos e formatos que podem ser descritos via table schema.
Um exemplo é uma variável
fieldNumeric
descrita comoque possui um csv correspondente
Essa coluna seria interpretada pelo datapusher como um campo texto, o que estaria incorreto.
Além do reconhecimento do tipo e formatono nível de metadado, também é necessário a conversão dos dados em si para um tipo que seja aceito pela PostgreSQL (ie. PostgreSQL não vai aceitar o valor
NA
em uma colunanumeric
, e, portanto, o mesmo precisa ser convertido).Enquanto não conseguirmos conceber e implementar uma solução definitiva para esse problema vamos utilizar o artifício de carregar todas as colunas no DataStore como texto (parcialmente implementado no commit https://github.com/dados-mg/dpckan/pull/40/commits/146e9258afd27f6981c5bfc4942684588e1ec192).
Já esbarramos nesse problema antes nos issues https://github.com/dados-mg/issues/issues/18 e https://github.com/dados-mg/issues/issues/30, mas sem a clareza conceitual de como seguir.
[^1]: A inferência é atualmente feita pelo pacote messytables que foi descontinuado em favor do tabulator-py que por sua vez foi descontinuado em favor do frictionless-py
Links
Alguns links de referência relevantes para o futuro