sql >> Databasteknik >  >> RDS >> PostgreSQL

Använda PostgreSQL-korrelationsfunktionen

Använda korrelationsfunktionen i PostgreSQL

En funktion som kan vara användbar för att bestämma hur två tal relaterar till varandra är korrelationsfunktionen.

I den här handledningen kommer vi att förklara funktionen corr() PostrgreSQL samt visa den i verklig värld.

Korrelationskoefficienten är en allmänt använd metod för att bestämma styrkan av sambandet mellan två tal eller två uppsättningar tal. Denna koefficient beräknas som ett tal mellan -1 och 1. 1 är den starkaste möjliga positiva korrelationen och -1 är den starkast möjliga negativa korrelationen.

En positiv korrelation betyder att när ett tal ökar kommer även det andra talet att öka.

En negativ korrelation betyder att när ett tal ökar minskar det andra talet.

Huruvida resultatet av det andra numret orsakas av det första bestäms inte här, bara att resultaten av de två numren sker i samverkan med varandra.

Om formeln returnerar 0 så finns det absolut INGEN korrelation mellan de två uppsättningarna av siffror.

I ett exempel där korrelationskoefficienten är 0,7, för varje ökning med 1 av talet på x-axeln ökar talet på y-axeln med 0,7.

Ju större siffran är, desto starkare är korrelationen. Om det föregås av "-"-tecknet eller inte spelar ingen roll.

En av de mest populära korrelationskoefficienterna är Pearsons korrelationskoefficient, och mer information kan hittas i en annan handledning här.

Efter att vi kört några tester på postgresql-korrelationsfunktionen, blev den lika med beräkningen av Pearsons korrelationskoefficient alla tre gångerna.

När du använder PostgreSQL-funktionen är den viktiga noteringen att det är en aggregeringsfunktion. Det betyder att det kommer att beräkna korrelationen av helheterna i två serier av tal. Den visar inte korrelationen mellan två tal i serien.

Att använda korrelationsfunktionen redan i postgres är ganska okomplicerat.

Vi använde det som en aggregerad funktion av två serier av tal för att bestämma korrelationskoefficienten över en tidsserie av webbplatsaktiviteter och intäkter i en Chartio-demokälla som vi har på vår webbplats.

Genom att plotta dessa två mätningar på ett spridningsdiagram framträder ett mönster av positiv korrelation. Genom att använda korrelationskoefficienten PostgreSQL-funktionen visar resultatet 0,9 vilket är en nästan direkt korrelation.

Den frågan ser ut så här:

    SELECT
        corr("Amount", "Activities") as "Corr Coef Using PGSQL Func"

    FROM(
    SELECT
        DATE_TRUNC('day', p.payment_date)::DATE AS "Day",
        SUM(p.amount) AS "Amount",
        COUNT(DISTINCT a.activity_id) AS "Activities"
    FROM
        public.payments p
        INNER JOIN public.subscriptions s ON p.subscription_id = s.subscription_id
        INNER JOIN public.users u ON s.user_id = u.user_id
        INNER JOIN public.activity a ON a.user_id = u.user_id

    GROUP BY 1) as a

I det här specifika fallet måste du använda aggregeringsfunktionen för mätvärdena som samlats in i en underfråga. Detta är väldigt enkelt, lägg bara till de två kolumnerna du försöker bestämma korrelationen mellan mellan parenteserna separerade av en kolumn och din utdata kommer att vara korrelationskoefficienten som beräknas av aggregeringsfunktionen som, som vi påpekar i följande handledning är nästan exakt samma som Pearson Formula.


  1. varför PG::UniqueViolation:FEL:dubblettnyckelvärde bryter mot unik begränsning?

  2. Allt du behöver veta om databasnormalisering

  3. SQL-fel:ORA-02000:saknar ALLTID nyckelord när du skapar en identitetskolumnbaserad tabell

  4. Byt ut en partition i SQL Server (T-SQL)