Share via


percentil(), percentiles() (função de agregação)

A percentile() função calcula uma estimativa para o percentil de classificação mais próxima especificado da população definida por expr. A precisão depende da densidade da população na região do percentil.

percentiles() funciona de forma semelhante a percentile(). No entanto, percentiles() pode calcular vários valores de percentil ao mesmo tempo, o que é mais eficiente do que calcular cada valor de percentil separadamente.

Para calcular percentis ponderados, veja percentilesw().

Nota

Esta função é utilizada em conjunto com o operador summarize.

Syntax

percentile(expr,percentil)

percentiles(expr,percentis)

Saiba mais sobre as convenções de sintaxe.

Parâmetros

Nome Tipo Necessário Descrição
expr string ✔️ A expressão a utilizar para cálculo de agregação.
percentil int ou long ✔️ Uma constante que especifica o percentil.
percentis int ou long ✔️ Um ou mais percentis separados por vírgulas.

Devoluções

Devolve uma tabela com as estimativas para expr dos percentis especificados no grupo, cada um numa coluna separada.

Nota

Para devolver os percentis numa única coluna, veja Devolver percentis como uma matriz.

Exemplos

Calcular um único percentil

O exemplo seguinte mostra o valor de DamageProperty ser maior do que 95% do conjunto de amostras e inferior a 5% do conjunto de exemplo.

StormEvents | summarize percentile(DamageProperty, 95) by State

Saída

A tabela de resultados apresentada inclui apenas as primeiras 10 linhas.

Estado percentile_DamageProperty_95
SUL DO ATLÂNTICO 0
FLORIDA 40000
GEÓRGIA 143333
MISSISSIPPI 80000
SAMOA AMERICANA 250000
KENTUCKY 35000
Lisboa 150000
KANSAS 51392
Viana do Castelo 49167
ALABAMA 50000

Calcular vários percentis

O exemplo seguinte mostra o valor de DamageProperty calculado em simultâneo com 5, 50 (mediana) e 95.

StormEvents | summarize percentiles(DamageProperty, 5, 50, 95) by State

Saída

A tabela de resultados apresentada inclui apenas as primeiras 10 linhas.

Estado percentile_DamageProperty_5 percentile_DamageProperty_50 percentile_DamageProperty_95
SUL DO ATLÂNTICO 0 0 0
FLORIDA 0 0 40000
GEÓRGIA 0 0 143333
MISSISSIPPI 0 0 80000
SAMOA AMERICANA 0 0 250000
KENTUCKY 0 0 35000
Lisboa 0 2000 150000
KANSAS 0 0 51392
Viana do Castelo 0 0 49167
ALABAMA 0 0 50000
... ...

Devolver percentis como uma matriz

Em vez de devolver os valores em colunas individuais, utilize a percentiles_array() função para devolver os percentis numa única coluna do tipo de matriz dinâmica.

Syntax

percentiles_array(expr,percentis)

Parâmetros

Nome Tipo Necessário Descrição
expr string ✔️ A expressão a utilizar para cálculo de agregação.
percentis int, longo ou dinâmico ✔️ Um ou mais percentis separados por vírgulas ou uma matriz dinâmica de percentis. Cada percentil pode ser um número inteiro ou um valor longo.

Devoluções

Devolve uma estimativa para expr dos percentis especificados no grupo como uma única coluna do tipo de matriz dinâmica.

Exemplos

Percentis separados por vírgulas

Vários percentis podem ser obtidos como uma matriz numa única coluna dinâmica, em vez de em múltiplas colunas como com percentis().

TransformedSensorsData
| summarize percentiles_array(Value, 5, 25, 50, 75, 95), avg(Value) by SensorName

Saída

A tabela de resultados apresenta apenas as primeiras 10 linhas.

SensorName percentiles_Value avg_Value
sensor-82 ["0.048141473520867069","0.24407515500271132","0.48974511106780577","0.74160998970950343","0.94587903204190071"] 0.493950914
sensor-130 ["0.049200214398937764","0.25735850440187535","0.51206374010048239","0.74182335059053839","0.95210342463616771"] 0.505111463
sensor-56 ["0.04857779335488676","0.24709868149337144","0.49668762923789589","0.74458470404241883","0.94889104840865857"] 0.497955018
sensor-24 ["0.051507199150534679","0.24803904945640423","0.50397070213183581","0.75653888126010793","0.9518782718727431"] 0.501084379
sensor-47 ["0.045991246974755672","0.24644331118208851","0.48089197707088743","0.74475142784472248","0.9518322864959039"] 0.49386228
sensor-135 ["0.05132897529660399","0.24204987641954018","0.48470113942206461","0.74275730068433621","0.94784079559229406"] 0.494817619
sensor-74 ["0.048914714739047828","0.25160926036445724","0.49832498850160978","0.75257887767110776","0.94932261924236094"] 0.501627252
sensor-173 ["0.048333149363009836","0.26084250046756496","0.51288012531934613","0.74964772791583412","0.95156058795294"] 0.505401226
sensor-28 ["0.048511161184567046","0.2547387968731824","0.50101318228599656","0.75693845702682039","0.95243122486483989"] 0.502066244
sensor-34 ["0.049980293859462954","0.25094722564949412","0.50914023067384762","0.75571549713447961","0.95176564809278674"] 0.504309494
... ... ...

Matriz dinâmica de percentis

Os percentis para percentiles_array podem ser especificados numa matriz dinâmica de números inteiros ou de vírgula flutuante. A matriz tem de ser constante, mas não tem de ser literal.

TransformedSensorsData
| summarize percentiles_array(Value, dynamic([5, 25, 50, 75, 95])), avg(Value) by SensorName

Saída

A tabela de resultados apresenta apenas as primeiras 10 linhas.

SensorName percentiles_Value avg_Value
sensor-82 ["0.048141473520867069","0.24407515500271132","0.48974511106780577","0.74160998970950343","0.94587903204190071"] 0.493950914
sensor-130 ["0.049200214398937764","0.25735850440187535","0.51206374010048239","0.74182335059053839","0.95210342463616771"] 0.505111463
sensor-56 ["0.04857779335488676","0.24709868149337144","0.49668762923789589","0.74458470404241883","0.94889104840865857"] 0.497955018
sensor-24 ["0.051507199150534679","0.24803904945640423","0.50397070213183581","0.75653888126010793","0.9518782718727431"] 0.501084379
sensor-47 ["0.045991246974755672","0.24644331118208851","0.48089197707088743","0.74475142784472248","0.9518322864959039"] 0.49386228
sensor-135 ["0.05132897529660399","0.24204987641954018","0.48470113942206461","0.74275730068433621","0.94784079559229406"] 0.494817619
sensor-74 ["0.048914714739047828","0.25160926036445724","0.49832498850160978","0.75257887767110776","0.94932261924236094"] 0.501627252
sensor-173 ["0.048333149363009836","0.26084250046756496","0.51288012531934613","0.74964772791583412","0.95156058795294"] 0.505401226
sensor-28 ["0.048511161184567046","0.2547387968731824","0.50101318228599656","0.75693845702682039","0.95243122486483989"] 0.502066244
sensor-34 ["0.049980293859462954","0.25094722564949412","0.50914023067384762","0.75571549713447961","0.95176564809278674"] 0.504309494
... ... ...

Percentil de classificação mais próxima

O percentil P-ésimo (0 <P<= 100) de uma lista de valores ordenados, ordenados por ordem ascendente, é o menor valor na lista. A percentagem P dos dados é menor ou igual ao valor de percentil P (do artigo da Wikipédia sobre percentis).

Defina 0 percentis para ser o membro mais pequeno da população.

Nota

Dada a natureza aproximada do cálculo, o valor devolvido real pode não ser membro da população. A definição de classificação mais próxima significa que P=50 não está em conformidade com a definição interpolativa da mediana. Ao avaliar a importância desta discrepância para a aplicação específica, deve ter em conta o tamanho da população e um erro de estimativa .

Erro de estimativa em percentis

A agregação de percentis fornece um valor aproximado através do T-Digest.

Nota

  • Os limites no erro de estimativa variam com o valor do percentil pedido. A melhor precisão está em ambas as extremidades da escala [0..100]. Os percentis 0 e 100 são os valores mínimo e máximo exatos da distribuição. A precisão diminui gradualmente para o meio da escala. É o pior na mediana e está limitado a 1%.
  • Os limites de erro são observados na classificação e não no valor. Suponha que percentil(X, 50) devolveu um valor de Xm. A estimativa garante que pelo menos 49% e, no máximo, 51% dos valores de X são menores ou iguais a Xm. Não existe um limite teórico na diferença entre Xm e o valor mediano real de X.
  • Por vezes, a estimativa pode resultar num valor preciso, mas não existem condições fiáveis para definir quando será o caso.