![Kuidas koguda kasutajagruppe graafikute kujul Grafanas [+docker-pilt nÀidisega]](/wp-content/uploads/2019/08/293a4d703ef9e7e69ee414be16217f1d.jpeg)
Kuidas me lahendasime kasutajate cohortide visualiseerimise ĂŒlesande Promopult teenuses Grafana abil.
on vĂ”imas teenus, millel on suur kasutajaskond. KĂŒmne aasta jooksul on sĂŒsteemi registreerimiste arv ĂŒletanud miljoni. Need, kes on selliste teenustega kokku puutunud, teavad, et see kasutajaskond pole kaugeltki ĂŒhtlane.
MĂ”ned registreerusid ja jĂ€id igaveseks unustusse. MĂ”ned unustasid oma parooli ja registreerusid paar korda kuue kuu jooksul taas. MĂ”ni toob raha kassasse, samas kui teised tulid tasuta . Ja oleks hea, kui igaĂŒks sellest mingit kasu tooks.
Nii suurte andmehulkade puhul nagu meil on, pole mĂ”tet analĂŒĂŒsida ĂŒksikute kasutajate kĂ€itumist ja teha mikrootsuseid. Kuid trende kinni pĂŒĂŒda ja töötada suurte gruppidega on vĂ”imalik ja vajalik. Just seda me teeme.
KokkuvÔte
- Mis on cohortide analĂŒĂŒs ja milleks see vajalik on.
- Kuidas luua kogruppe registreerimiskuu pÔhjal SQL-is.
- Kuidas viia kogrupid ĂŒle .
Kui tead juba, mis on cohortide analĂŒĂŒs ja kuidas seda SQL-is teha, mine kohe viimasesse jaotisse.
1. Mis on cohortide analĂŒĂŒs ja milleks see vajalik on
Cohortide analĂŒĂŒs on meetod, mis pĂ”hineb erinevate kasutajate rĂŒhmade (cohortide) vĂ”rdlemisel. Enamasti moodustame me rĂŒhmad registreerimisnĂ€dala vĂ”i -kuu jĂ€rgi, mil kasutaja hakkas teenust kasutama. Selle alusel arvutatakse kasutaja eluiga, mis on juba nĂ€itaja, mille pĂ”hjal saab teha ĂŒsna keerukat analĂŒĂŒsi. NĂ€iteks, et mĂ”ista:
- kuidas mÔjutab kaasamise kanal kasutaja eluiga;
- kuidas mÔjutab mÔne funktsiooni vÔi teenuse kasutamine eluiga;
- kuidas mÔjutas funktsiooni X kÀivitamine eluiga vÔrreldes eelmise aastaga.
2. Kuidas luua kogruppe SQL-is?
Artikli mahud ja mĂ”istlikud argumendid ei vĂ”imalda meil tuua siia meie reaalseid andmeid â testdumpis on statistika pooleteise aasta jooksul: 1200 kasutajat ja 53 000 tehingut. Et saaksite nende andetega mĂ€ngida, oleme ette valmistanud docker-pildi MySQL ja Grafana jaoks, milles saate kĂ”ike ise katsetada. Link GitHubi lehele leiab artikli lĂ”pust.
Siin nÀitame kogruppe loomist lihtsustatud nÀite abil.
Oletame, et meil on teenus. Selles registreeruvad kasutajad ja kulutavad raha teenustele. Aja jooksul kaotavad kasutajad huvi. Me tahame teada, kui kaua kasutajad pĂŒsivad ja kui palju neist loobub pĂ€rast 1. ja 2. kuu kasutamist teenusest.
Nendele kĂŒsimustele vastamiseks peame koostama kooti registreerimise kuu jĂ€rgi. Aktiviteeti mÔÔdame igakuistelt kuludelt. Kulude asemel vĂ”ivad olla tellimused, liikmemaksud vĂ”i muu ajaga seotud tegevus.
Algandmed
NĂ€ited on tehtud MySQL-is, kuid teiste andmebaasisĂŒsteemide vahel ei tohiks olla olulisi erinevusi.
Kasutajate tabel â users:
userId
RegistrationDate
1
2019-01-01
2
2019-02-01
3
2019-02-10
4
2019-03-01
Kulu tabel â billing:
userId
, samuti veel mustandina olev API
Sum
1
2019-01-02
11
1
2019-02-22
11
2
2019-02-12
12
3
2019-02-11
13
3
2019-03-11
13
4
2019-03-01
14
4
2019-03-02
14
Valime kÔik kasutajate kanded ja registreerimise kuupÀeva:
SELECT
b.userId,
b.Date,
u.RegistrationDate
FROM billing AS b LEFT JOIN users AS u ON b.userId = u.userId
Tulemus:
userId
, samuti veel mustandina olev API
RegistrationDate
1
2019-01-02
2019-01-02
1
2019-02-22
2019-01-02
2
2019-02-12
2019-02-01
3
2019-02-11
2019-02-10
3
2019-03-11
2019-02-10
4
2019-03-01
2019-03-01
4
2019-03-02
2019-03-01
Kogume koote kuude kaupa, selleks muundame kÔik kuupÀevad kuudeks:
DATE_FORMAT(Date, '%Y-%m')NĂŒĂŒd peame teadma, kui palju kuude jooksul kasutaja aktiivne oli â see on vahe kulutamiskuu ja registreerimise kuu vahel. MySQL-is on funktsioon PERIOD_DIFF() â kahe kuu vahe. Lisame PERIOD_DIFF() pĂ€ringusse:
SELECT
b.userId,
DATE_FORMAT(b.Date, '%Y-%m') AS BillingMonth,
DATE_FORMAT(u.RegistrationDate, '%Y-%m') AS RegistrationMonth,
PERIOD_DIFF(DATE_FORMAT(b.Date, '%Y%m'), DATE_FORMAT(u.RegistrationDate, '%Y%m')) AS MonthsDiff
FROM billing AS b LEFT JOIN users AS u ON b.userId = u.userId
userId
BillingMonth
RegistrationDate
MonthsDiff
1
2019-01
2019-01
0
1
2019-02
2019-01
1
2
2019-02
2019-02
0
3
2019-02
2019-02
0
3
2019-03
2019-02
1
4
2019-03
2019-03
0
4
2019-03
2019-03
0
Loeme igas kuus aktiveerunud kasutajad â grupeerime kirjed BillingMonth, RegistrationMonth ja MonthsDiff pĂ”hjal:
SELECT
COUNT(DISTINCT(b.userId)) AS UsersCount,
DATE_FORMAT(b.Date, '%Y-%m') AS BillingMonth,
DATE_FORMAT(u.RegistrationDate, '%Y-%m') AS RegistrationMonth,
PERIOD_DIFF(DATE_FORMAT(b.Date, '%Y%m'), DATE_FORMAT(u.RegistrationDate, '%Y%m')) AS MonthsDiff
FROM billing AS b LEFT JOIN users AS u ON b.userId = u.userId
GROUP BY BillingMonth, RegistrationMonth, MonthsDiff
Tulemus:
UsersCount
BillingMonth
RegistrationMonth
MonthsDiff
1
2019-01
2019-01
0
1
2019-02
2019-01
1
2
2019-02
2019-02
0
1
2019-03
2019-02
1
1
2019-03
2019-03
0
Jaanuaris, veebruaris ja mĂ€rtsis ilmus igas kuus ĂŒks uus kasutaja â MonthsDiff = 0. Ăks jaanuari kasutaja oli aktiivne ka veebruaris â RegistrationMonth = 2019-01, BillingMonth = 2019-02, samuti oli ĂŒks veebruari kasutaja aktiivne mĂ€rtsis.
Suurte andmehulkade puhul on mustrid loomulikult paremini nÀhtavad.
Kuidas kooted Grafanas kuvada
Kooted oskasime koostada, kuid kui kirjeid on palju, on neid raske analĂŒĂŒsida. Kirjed saab eksportida Excelisse ja luua ilusaid tabeleid, kuid see ei ole meie meetod!
Kooted saab esitada interaktiivse graafikuna. .
Selleks lisame veel ĂŒhe pĂ€ringu, et muuta andmed Grafana jaoks sobivaks:
VALI
DATE_ADD(CONCAT(s.RegistrationMonth, '-01'), INTERVAL s.MonthsDiff MONTH) AS time_sec,
SUM(s.Users) AS value,
s.RegistrationMonth AS metric
FROM (
## vana pÀring, mis tagastab kogumid
VALI
COUNT(DISTINCT(b.userId)) AS Users,
DATE_FORMAT(b.Date, '%Y-%m') AS BillingMonth,
DATE_FORMAT(u.RegistrationDate, '%Y-%m') AS RegistrationMonth,
PERIOD_DIFF(DATE_FORMAT(b.Date, '%Y%m'), DATE_FORMAT(u.RegistrationDate, '%Y%m')) AS MonthsDiff
FROM billing AS b LEFT JOIN users AS u ON b.userId = u.userId
WHERE
u.RegistrationDate BETWEEN '2018-01-01' AND CURRENT_DATE
GROUP BY
BillingMonth, RegistrationMonth, MonthsDiff
) AS s
GROUP BY
time_sec, metric
Ja eksportime andmed Grafanasse.
NĂ€ide graafikust :
![Kuidas koguda kasutajagruppe graafikute kujul Grafanas [+docker-pilt nÀidisega]](/wp-content/uploads/2019/08/9aa161a1d0e8fd7790875d4f12202d56.jpeg)
KĂ€eotsaga katsuda:
â see on docker-pilt MySQL ja Grafana, mida saab oma arvutis kĂ€ivitada. Andmebaasis on juba poolteise aasta demonĂ€idised, jaanuar 2018 kuni juuli 2019.
Soovi korral saab sellesse pildisse laadida oma andmed.
P.S. Artiklid SQL-iga kogumite analĂŒĂŒsi kohta:
Allikas: habr.com
