De correlatiefunctie gebruiken in PostgreSQL
Een functie die handig kan zijn om te bepalen hoe twee getallen zich tot elkaar verhouden, is de correlatiefunctie.
In deze tutorial zullen we de corr() PostrgreSQL-functie uitleggen en deze ook in de praktijk laten zien.
De correlatiecoëfficiënt is een veelgebruikte methode om de sterkte van de relatie tussen twee getallen of twee reeksen getallen te bepalen. Deze coëfficiënt wordt berekend als een getal tussen -1 en 1. waarbij 1 de sterkst mogelijke positieve correlatie is en -1 de sterkst mogelijke negatieve correlatie.
Een positieve correlatie betekent dat als een getal stijgt, het tweede getal ook toeneemt.
Een negatieve correlatie betekent dat als één getal toeneemt, het tweede getal afneemt.
Of de uitkomst van het tweede nummer wel of niet wordt VEROORZAAKT door het eerste, wordt hier niet bepaald, alleen dat de uitkomsten van de twee nummers samen plaatsvinden.
Als de formule 0 retourneert, is er absoluut GEEN correlatie tussen de twee reeksen getallen.
In een voorbeeld waarin de correlatiecoëfficiënt 0,7 is, neemt voor elke toename van 1 van het getal op de x-as het getal op de y-as toe met 0,7.
Hoe groter het getal, hoe sterker de correlatie. Of het al dan niet wordt voorafgegaan door het teken "-" maakt niet uit.
Een van de meest populaire correlatiecoëfficiënten is de Pearson-correlatiecoëfficiënt, en meer informatie is te vinden in een andere tutorial hier.
Nadat we een paar tests hadden uitgevoerd met de postgresql-correlatiefunctie, kwam deze alle drie keer gelijk aan de berekening van de Pearson-correlatiecoëfficiënt.
Bij het gebruik van de PostgreSQL-functie is de belangrijke opmerking dat het een aggregatiefunctie is. Dat betekent dat het de correlatie van de gehelen van twee reeksen getallen zal berekenen. Het zal de correlatie van twee getallen binnen de reeks niet weergeven.
Het gebruik van de correlatiefunctie die al in postgres zit, is vrij eenvoudig.
We gebruikten het als een geaggregeerde functie van twee reeksen getallen om de correlatiecoëfficiënt te bepalen over een reeks tijd van website-activiteiten en inkomsten in een Chartio-demobron die we op onze site hebben.
Door deze twee metingen op een spreidingsplot uit te zetten, ontstaat een patroon van positieve correlatie. Het gebruik van de correlatiecoëfficiënt PostgreSQL-functie toont een resultaat van 0,9, wat een bijna directe correlatie is.
Die zoekopdracht ziet er als volgt uit:
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
In dit specifieke geval moet u de aggregatiefunctie gebruiken van de metrieken die in een subquery zijn verzameld. Dit is heel eenvoudig, voeg gewoon de twee kolommen toe waarvan u de correlatie tussen de haakjes probeert te bepalen, gescheiden door een kolom en uw uitvoer is de correlatiecoëfficiënt zoals berekend door de aggregatiefunctie die, zoals we in de volgende zelfstudie aangeven, is bijna precies hetzelfde als de Pearson-formule.