Quando um número não é um número?

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br

[ad_1]

Você já se perguntou se o seu número de telefone é realmente um número? Tem números, mas mede alguma coisa?

Que tal o número do seu cartão de crédito? Caixa postal? Número da Segurança Social? Código postal? O que aconteceria se você subtraísse um desses de outro?

Acontece que muitos dos “números” com os quais lidamos todos os dias são, na verdade, identificadores e não uma medida de algo. Infelizmente, muitos gerenciadores de dados não fazem distinção entre os dois, embora fazer essa distinção seja bastante simples.

Identificação vs. Medição

Temos um talão de cheque em nossa mesa que contém as seguintes informações:

  • VERIFICAR NO. – 12345
  • NOSSA REFERÊNCIA. NÃO. – 290227
  • SUA FATURA NO. – 090202
  • DATA DA FATURA – 30/01/09
  • VALOR DA FATURA – 100,00
  • MONTANTE PAGO – 100,00

Os três primeiros itens são usados ​​para identificar de forma única o cheque de acordo com três sistemas de contabilidade diferentes. Podemos pensar nessas informações como metadados associados às medições reais que a verificação acompanha. Embora todos esses itens tenham ‘NÃO’. (número) em seu nome, eles realmente deveriam ser chamados identificadores numéricos, nomes que consistem em números.

Os últimos três itens, a data e os valores, são medidas reais que possuem unidades de dias e dólares, respectivamente.

Este esboço de verificação não é diferente de muitos registros de dados, pois contém identificadores (os números ‘NÃO’), localizadores espaço-temporais (a data) e Medidas (as quantidades). O mundo dos dados científicos seria um lugar muito mais amigável se os gerentes de dados entendessem a distinção entre essas categorias e tornassem essa distinção óbvia em seus conjuntos de dados.

Já lidamos com datas, latitudes e longitudes em postagens anteriores que descrevem esses localizadores espaço-temporais. Esta postagem focará na diferença entre identificadores e Medidas.

Para a maioria dos conjuntos de dados não estatísticos, a maneira mais fácil de dizer a diferença entre um identificador e um medição é perguntar a si mesmo se há alguma unidade envolvida. Se não houver unidades envolvidas, geralmente estamos falando sobre um identificador, um nome, um identificador para uma informação individual. Os identificadores únicos são importantes porque nos permitem ter certeza de que estamos falando sobre uma informação específica. Você não quer que todas as suas faturas saiam com o mesmo número de fatura. Na verdade, você deve fazer todo o possível para garantir que não haja duas faturas com esse número.

Leia Também  Galeria de recursos COVID-19 | R-bloggers

As medições são diferentes. Eles não pretendem ser únicos. Você pode enviar uma fatura de $ 100 quantas vezes quiser. As medidas têm unidades. As medições podem ser representadas como uma distância ao longo de um eixo. As medições, ao contrário dos identificadores, podem ser usadas em equações matemáticas.

Strings vs. Floats e Ints

Para os leitores humanos, parece que os identificadores numéricos e as medidas são expressos da mesma maneira – como uma série de “números”. No entanto, ao escrever software para processar dados, é importante diferenciar entre sequências numéricas – matrizes de caracteres ASCII do conjunto [0…9]e pontos flutuantes ou valores inteiros. Em linguagens tipadas como Fortran, C ou Java, essa distinção é aplicada. Em linguagens não tipadas como python e R, qualquer falta de uma distinção clara entre identificadores numéricos e medidas pode levar a alguns resultados interessantes.

Aqui está um código python que adiciona dois inteiros:

>>> a = 7
>>> b = 7
>>> c = a + b
>>> c
14

Aqui está um código de aparência semelhante que “adiciona” (ie concatena) dois “números”:

>>> a="7"
>>> b = '7'
>>> c = a + b
>>> c
'77'

Alguns diriam que isso defende o uso de linguagens digitadas ao trabalhar com dados científicos. Não compartilhamos esse julgamento. Linguagens de programação ágeis como python e R oferecem tantas vantagens em relação à eficiência do programador e facilidade de leitura concisa que seria tolice abandoná-las. Em vez disso, defendemos uma abordagem mais cuidadosa ao gerenciamento de dados que pode resolver o problema para linguagens digitadas e não digitadas.

Analisável por máquina Dados

Vamos introduzir o termo máquina analisável para se referir a arquivos de dados que obedecem a certas regras básicas que permitem que o software vá além da simples leitura dos dados. Quando um bom software encontra máquina analisável dados, ele pode realmente dar os primeiros passos para “entender” o que os dados representam.

Identificadores e medidas em um arquivo CSV

Os arquivos Comma Separated Value (CSV) são os de fato padrão para intercâmbio de dados científicos envolvendo quantidades limitadas de dados. CSV é o formato escolhido por muitos data warehouses porque pode ser lido e cuspido por qualquer software que pretenda trabalhar com dados. Infelizmente, não existe um padrão para exatamente como usar o formato CSV. O único aspecto com que todos parecem concordar é que os campos devem ser delimitados pelo caractere Unicode ‘COMMA’ (U + 002C).

Leia Também  Treinamentos R online ao vivo e interativos - Introdução e aprendizado de máquina

Junto com o uso de vírgulas como delimitadores, recomendamos apenas duas regras adicionais para tornar seus arquivos CSV analisáveis ​​por máquina.

1. Use nomes padrão para localizadores espaço-termporais

Os localizadores espaço-temporais têm nomes e abreviações bem conhecidos. Os campos nomeados ‘datetime’, ‘lat’, ‘lon’ e ”profundidade ‘devem ser reconhecidos como colunas especiais por qualquer software de gerenciamento de dados. Se os arquivos CSV sempre usassem nomes padrão como ‘lat’ (ou ‘latitude’, ‘Lat’ ou ‘Latitude’), o software poderia ser escrito que estaria sempre ciente de quais colunas continham variáveis ​​espaço-termoporais.

2. Coloque os identificadores entre aspas

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br

Muitos arquivos CSV usam aspas esporadicamente, geralmente apenas quando são necessárias porque o valor de um caractere tem uma vírgula incorporada. Seria mais consistente se aspas entre cada identificador ou variável de caractere nativo (por exemplo ‘nome’) em cada registro. Os únicos elementos que não estão entre aspas seriam as medidas numéricas reais. O software que analisa dados CSV como esse não precisa inferir tipos de dados a partir dos nomes das colunas. Se um valor estiver entre aspas, é obviamente do tipo caractere. Todos os outros valores devem ser interpretados como numéricos.

Existem vantagens distintas em criar arquivos CSV dessa maneira. Quando um arquivo como este é importado para uma planilha, por exemplo, os códigos de caracteres com zeros à esquerda sempre os retêm. Você não gostaria que os códigos postais de Boston tivessem apenas 4 dígitos? (James Bond é “007”, não 7.)

Isso é tudo. Apenas duas regras simples para tornar os dados científicos mais úteis para mais pessoas. Não parece difícil porque não é.

Exemplos

Abaixo, examinamos dois exemplos do governo federal de conjuntos de dados agregados que fazem um excelente trabalho de diferenciação entre identificadores e medidas. No primeiro exemplo, nomes de variáveis ​​explícitos permitem a correção simples de erros de análise automatizada. No segundo exemplo, a análise automática funciona sem intervenção.

Exemplo 1) Dados de qualidade da água

Aplaudimos o USGS e o US EPA por trabalharem juntos para fornecer uma fonte única de dados sobre a qualidade da água, disponível ao público, por meio do Water Quality Portal. É um grande esforço reunir e harmonizar conjuntos de dados de diferentes agências. Vamos ver como eles facilitaram a ingestão desses dados de maneira programática.

Em sua página de dados, posso facilmente procurar dados em um raio de 5 milhas de minha localização e filtrar por “Tipo de site: Fluxo”. Clicar no botão Download fornece um stations.csv Arquivo. Vamos ler o pacote de R para analisar automaticamente esses dados:

   df % str()
   List of 36
    $ OrganizationIdentifier                         : chr "character"
    $ OrganizationFormalName                         : chr "character"
    $ MonitoringLocationIdentifier                   : chr "character"
    $ MonitoringLocationName                         : chr "character"
    $ MonitoringLocationTypeName                     : chr "character"
    $ MonitoringLocationDescriptionText              : chr "logical"
    $ HUCEightDigitCode                              : chr "numeric"
    $ DrainageAreaMeasure/MeasureValue               : chr "numeric"
    $ DrainageAreaMeasure/MeasureUnitCode            : chr "character"
    $ ContributingDrainageAreaMeasure/MeasureValue   : chr "logical"
    $ ContributingDrainageAreaMeasure/MeasureUnitCode: chr "logical"
    $ LatitudeMeasure                                : chr "numeric"
    $ LongitudeMeasure                               : chr "numeric"
    $ SourceMapScaleNumeric                          : chr "logical"
    $ HorizontalAccuracyMeasure/MeasureValue         : chr "numeric"
    $ HorizontalAccuracyMeasure/MeasureUnitCode      : chr "character"
    $ HorizontalCollectionMethodName                 : chr "character"
    $ HorizontalCoordinateReferenceSystemDatumName   : chr "character"
    $ VerticalMeasure/MeasureValue                   : chr "numeric"
    $ VerticalMeasure/MeasureUnitCode                : chr "character"
    $ VerticalAccuracyMeasure/MeasureValue           : chr "numeric"
    $ VerticalAccuracyMeasure/MeasureUnitCode        : chr "character"
    $ VerticalCollectionMethodName                   : chr "character"
    $ VerticalCoordinateReferenceSystemDatumName     : chr "character"
    $ CountryCode                                    : chr "character"
    $ StateCode                                      : chr "numeric"
    $ CountyCode                                     : chr "character"
    $ AquiferName                                    : chr "logical"
    $ FormationTypeText                              : chr "logical"
    $ AquiferTypeName                                : chr "logical"
    $ ConstructionDateText                           : chr "logical"
    $ WellDepthMeasure/MeasureValue                  : chr "logical"
    $ WellDepthMeasure/MeasureUnitCode               : chr "logical"
    $ WellHoleDepthMeasure/MeasureValue              : chr "logical"
    $ WellHoleDepthMeasure/MeasureUnitCode           : chr "logical"
    $ ProviderName                                   : chr "character" 

Que campos com nomes fantásticos! Eles até se autodescrevem como Identifier, Code, Name, Text, ou Value.

Alguns dos campos não foram analisados ​​automaticamente no tipo correto, mas, dada a excelente nomenclatura, podemos usar o col_types argumento para read_csv() para impor uma análise adequada. Cada ~Value deve ser analisado como numérico e todo o resto deve ser analisado como caractere.

Leia Também  Número do pacote R 0.11.3 lançado

Exemplo 2) Dados de terremoto

Aqui, veremos um conjunto de dados USGS de M1.0 + Terremotos da última hora.

    df % str()
   List of 22
    $ time           : chr [1:2] "POSIXct" "POSIXt"
    $ latitude       : chr "numeric"
    $ longitude      : chr "numeric"
    $ depth          : chr "numeric"
    $ mag            : chr "numeric"
    $ magType        : chr "character"
    $ nst            : chr "numeric"
    $ gap            : chr "numeric"
    $ dmin           : chr "numeric"
    $ rms            : chr "numeric"
    $ net            : chr "character"
    $ id             : chr "character"
    $ updated        : chr [1:2] "POSIXct" "POSIXt"
    $ place          : chr "character"
    $ type           : chr "character"
    $ horizontalError: chr "numeric"
    $ depthError     : chr "numeric"
    $ magError       : chr "numeric"
    $ magNst         : chr "numeric"
    $ status         : chr "character"
    $ locationSource : chr "character"
    $ magSource      : chr "character" 

As coisas parecem muito boas. Em geral, as colunas têm nomes compreensíveis por humanos e, para aqueles que não são óbvios, o USGS fornece uma página com as descrições dos campos.

Temos bem nomeado localizadores espaço-temporais: time, latitude, longitude, depth.

Colunas de dados contendo caracteres não numéricos são automaticamente analisadas como caracteres e descrevem identificadores de um tipo ou de outro: magType, net, place, type, status, locationSource, magSource

Melhores esperanças para a criação máquina analisável dados!



[ad_2]

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br