Referências adjacentes essenciais – comunidade de desenvolvimento

A análise de dados geralmente envolve cálculos de linhas cruzadas, como a razão relativa de Link (LRR), ano a ano (YOY) e médias móveis. A implementação de cálculos de linha cruzada nos conjuntos de dados ordenados envolverá a questão da referência a membros adjacentes em um conjunto. Por exemplo, um comerciante preparou seus dados de vendas por 12 meses de um ano, organizado por mês e agora deseja calcular o crescimento mensal máximo. Code in SQL: with sales as ( select column_value as amount, rownum as month from table(sys.odcinumberlist(123,345,321,345,546,542,874,234,543,983,434,897)) ), lagged_sales as ( select amount, month, lag(amount) over (order by month) as prev from sales ) select max (quantidade – prev) como max de lagged_sales; Digite as funções da janela Modo Full -Screen Modo pode fazer referência às vendas do mês anterior, mas requer a gravação de uma subconsulta, tornando o código verboso. Além disso, o SQL é baseado em conjuntos não ordenados, resultando em sua incapacidade de utilizar a ordem original dos dados, e cada função de janela requer uma cláusula de ordem separada. De fato, os dados inerentemente têm um pedido e a utilização desse pedido pode expressar convenientemente as necessidades de cálculo. Por exemplo, se os dados forem solicitados por mês, basta subtrair o membro anterior do membro atual, oferece o crescimento mensal. Se houvesse uma sintaxe para referenciar membros adjacentes, resolver problemas semelhantes seria muito mais fácil. O ESPROC SPL fornece exatamente um mecanismo para referenciar membros adjacentes em um conjunto: vendas = [123, 345, 321, 345, 546, 542, 874, 234, 543, 983, 434, 897]
vendas. (if (#> 1, ~-~[-1]0).[i] representa o membro com uma distância de I do membro atual. Aqui, ~[-1] Representa o membro anterior, ou seja, as vendas do mês anterior. Na verdade, se (#> 1, ~-~[-1]0) é uma função lambda e as vendas externas. () É uma função de loop. Spl consistentemente usa símbolos como ~, #e [] Para representar os parâmetros da função Lambda. A função Lambda da SPL aparece como uma expressão comum, com uma sintaxe mais concisa do que as funções tradicionais do Lambda, enquanto fornecem parâmetros mais ricos. Se os objetos da série ou do quadro de dados do Python usarem diretamente o Lambda, apenas a linha atual poderá ser passada como parâmetro, pois o Python não possui sintaxe para referências baseadas em índice ou de membro adjacente. Para resolver isso, primeiro ele precisa criar um objeto de janela deslizante usando a função de rolagem. Result = Sales.Rolling (Window = 2) .Apply (Lambda X: X[1] – x[0]RAW = true) .Max () Digite modo de saída de tela cheia de tela cheia A função de rolagem cria uma janela do tamanho 2, e a função Aplicar opera em dois membros adjacentes na sequência de vendas, que usa um lambda para calcular sua diferença. No entanto, o Python adiciona uma etapa extra de criar um objeto de janela, tornando -o um pouco complicado. Além disso, as funções Lambda do Python são explicitamente definidas, exigindo a palavra-chave Lambda e a definição de parâmetros passados, que é menos conciso que o SPL. Como alternativa, o Python pode adotar uma abordagem diferente: vendas = pd.Series ([123, 345, 321, 345, 546, 542, 874, 234, 543, 983, 434, 897]) Result = (Sales-Sales.Shift (1)). Max () Digite o modo de saída do modo de tela cheia. Isso requer a criação de um objeto de sequência adicional. Em comparação, o código da SPL, que faz referência a membros adjacentes diretamente na sequência original, é mais simples. O Python também fornece a função diff, que pode calcular a diferença entre os membros adjacentes: PD.Series ([123, 345, 321, 345, 546, 542, 874, 234, 543, 983, 434, 897]) Result = Sales.diff (). max () Digite Modo de tela cheia Modo de tela cheia A função DIFT suporta o parâmetro Períodos, o que permite calcular a diferença entre o membro atual e o membro a uma distância de períodos. No entanto, funções diff e semelhantes como PCT_CHANGE são todos cálculos predefinidos. Para cálculos sem uma função pronta, ele deve continuar usando o rolamento ou o turno. Por outro lado, o SPL evita esses problemas. ~[i] pode ser usado livremente em expressões, permitindo vários cálculos de membros adjacentes. Além dos membros adjacentes, geralmente precisamos fazer referência a conjuntos adjacentes. Por exemplo, usando os mesmos dados, queremos calcular a média móvel de vendas para cada mês e os dois meses anteriores. Code in SQL: with sales as ( select column_value as amount, rownum as month from table(sys.odcinumberlist(123,345,321,345,546,542,874,234,543,983,434,897)) ) select month,amount, avg(amount) over (order by month rows between 2 preceding and current row) as moving_average from vendas; Digite o modo de saída do modo de tela completa SQL em tela cheia SQL possui o conceito de conjuntos adjacentes. Por exemplo, os três dados de vendas adjacentes formam um conjunto. No entanto, o SQL não pode reter esse conjunto, e os dados no conjunto devem ser agregados imediatamente. Portanto, ele só pode usar funções agregadas internas como AVG, SUM e Count. Se a situação se tornar mais complexa, o SQL não poderá aproveitar conjuntos adjacentes para cálculos. Por exemplo, para verificar se as vendas mensais estão aumentando nos meses atuais e dois anteriores, uma abordagem simples é formar um conjunto ordenado das vendas dos três meses e verificar se é uma sequência crescente. O SQL não possui uma função agregada para verificar se as seqüências crescentes, portanto, deve ser escrito assim: com vendas como (selecione column_value como quantidade, rownum como mês da tabela (sys.odcinumberlist (123.345.321.345.546,542,874.23.544444444444444444444444444444444444444444443.54444444444444444443.543.547.547. 1) acima (ordem por mês) e atraso (quantidade, 1) sobre (ordem por mês)> lag (valor, 2) (ordem por mês) como sinalizador de vendas; Digite o modo de saída do modo de tela cheia como resultado, requer três funções de atraso e três cláusulas de ordem por mês, tornando -o pesado. SPL se estende ~[i] para ~[a,b] Para representar conjuntos adjacentes. Seja calculando as médias móveis ou a verificação do aumento das sequências, é fácil de expressar: vendas = [123, 345, 321, 345, 546, 542, 874, 234, 543, 983, 434, 897]
vendas. (~[-2,0].avg ()) vendas. (~[-2,0].PSelect (~ <= ~[-1]) == NULL) Digite o modo de saída de tela cheia de tela cheia ~[-2,0] Representa o conjunto adjacente das duas posições do membro antes da atual para o membro atual. Para calcular a média móvel, aplique a função AVG no conjunto adjacente. Para verificar se há uma sequência crescente, use a função de cálculo da posição PSELECT para pesquisar no conjunto adjacente. Se nenhum membro for menor ou igual ao membro anterior, a sequência estará aumentando. No parâmetro PSELECT, ~ e ~[-1] denotar os membros atuais e anteriores no conjunto adjacente, respectivamente. O Python também possui o conceito de conjuntos adjacentes e, semelhante ao SQL, agregações simples, como médias móveis, podem ser facilmente implementadas: vendas = pd.Series ([123, 345, 321, 345, 546, 542, 874, 234, 543, 983, 434, 897]) Result = Sales.rolling (Window = 3, min_periods = 1) .Mean () Digite o modo de saída do modo de tela cheia, no entanto, a verificação do aumento das sequências é muito mais complexa, exigindo o uso de funções Lambda novamente: resultado = Sales.rolling (Window = 3) .Apply (Lambda X: (X[0] Fonte

Você pode ter perdido