![KÄ savÄkt lietotÄju grupas kÄ diagrammas programmÄ Grafana [+ docker attÄls ar piemÄru]](/wp-content/uploads/2019/08/293a4d703ef9e7e69ee414be16217f1d.jpeg)
KÄ mÄs atrisinÄjÄm lietotÄju kohortu vizualizÄcijas problÄmu pakalpojumÄ Promopult, izmantojot Grafana.
- spÄcÄ«gs pakalpojums ar lielu lietotÄju skaitu. 10 darbÄ«bas gadu laikÄ reÄ£istrÄciju skaits sistÄmÄ pÄrsniedzis miljonu. Tie, kas ir saskÄruÅ”ies ar lÄ«dzÄ«giem pakalpojumiem, zina, ka Å”is lietotÄju klÄsts nebÅ«t nav viendabÄ«gs.
KÄds pierakstÄ«jÄs un āaizmigaā uz visiem laikiem. KÄds aizmirsa savu paroli un seÅ”u mÄneÅ”u laikÄ reÄ£istrÄjÄs vÄl pÄris reizes. KÄds atnes naudu uz kases aparÄtu, un kÄds atbrauca pÄc dÄvanÄm . Un bÅ«tu jauki no visiem gÅ«t kÄdu peļÅu.
Tik lielÄm datu kopÄm kÄ mÅ«su, nav jÄgas analizÄt atseviŔķa lietotÄja uzvedÄ«bu un pieÅemt mikrolÄmumus. TaÄu tendenÄu tverÅ”ana un darbs ar lielÄm grupÄm ir iespÄjams un nepiecieÅ”ams. Tas ir tieÅ”i tas, ko mÄs darÄm.
Kopsavilkums
- Kas ir kohortas analÄ«ze un kÄpÄc tÄ ir nepiecieÅ”ama?
- KÄ izveidot kohortas pÄc lietotÄja reÄ£istrÄcijas mÄneÅ”a SQL.
- KÄ pÄrsÅ«tÄ«t kohortas uz .
Ja jau zinÄt, kas ir kohortas analÄ«ze un kÄ to izdarÄ«t SQL, pÄrejiet tieÅ”i uz pÄdÄjo sadaļu.
1. Kas ir kohortas analÄ«ze un kÄpÄc tÄ ir nepiecieÅ”ama?
Kohortu analÄ«ze ir metode, kuras pamatÄ ir dažÄdu lietotÄju grupu (kohortu) salÄ«dzinÄÅ”ana. VisbiežÄk mÅ«su grupas tiek veidotas pÄc nedÄļas vai mÄneÅ”a, kurÄ lietotÄjs sÄka lietot pakalpojumu. No Å”ejienes tiek aprÄÄ·inÄts lietotÄja dzÄ«ves ilgums, un tas ir rÄdÄ«tÄjs, uz kura pamata var veikt diezgan sarežģītu analÄ«zi. PiemÄram, saprotiet:
- kÄ iegūŔanas kanÄls ietekmÄ lietotÄja dzÄ«ves ilgumu;
- kÄ jebkuras funkcijas vai pakalpojuma izmantoÅ”ana ietekmÄ kalpoÅ”anas laiku;
- KÄ funkcijas X palaiÅ”ana ietekmÄja kalpoÅ”anas laiku salÄ«dzinÄjumÄ ar pagÄjuÅ”o gadu.
2. KÄ izveidot kohortas SQL?
Raksta apjoms un veselais saprÄts neļauj Å”eit uzrÄdÄ«t mÅ«su reÄlos datus - testa izgÄztuvÄ statistika par pusotru gadu: 1200 lietotÄju un 53 000 darÄ«jumu. Lai jÅ«s varÄtu spÄlÄties ar Å”iem datiem, esam sagatavojuÅ”i docker attÄlu ar MySQL un Grafana, kurÄ varat to visu piedzÄ«vot pats. Saite uz GitHub raksta beigÄs.
Un Å”eit mÄs parÄdÄ«sim kohortu izveidi, izmantojot vienkÄrÅ”otu piemÄru.
PieÅemsim, ka mums ir pakalpojums. LietotÄji tur reÄ£istrÄjas un tÄrÄ naudu par pakalpojumiem. Laika gaitÄ lietotÄji atsakÄs. MÄs vÄlamies noskaidrot, cik ilgi lietotÄji dzÄ«vo un cik no tiem izkrÄ«t pÄc pakalpojuma lietoÅ”anas 1. un 2. mÄneÅ”a.
Lai atbildÄtu uz Å”iem jautÄjumiem, mums ir jÄveido kohortas, pamatojoties uz reÄ£istrÄcijas mÄnesi. AktivitÄti mÄrÄ«sim pÄc izdevumiem katrÄ mÄnesÄ«. Izdevumu vietÄ var bÅ«t pasÅ«tÄ«jumi, abonÄÅ”anas maksas vai jebkura cita uz laiku balstÄ«ta darbÄ«ba.
NeapstrÄdÄti dati
PiemÄri tika veidoti MySQL, bet citÄm DBVS nevajadzÄtu bÅ«t bÅ«tiskÄm atŔķirÄ«bÄm.
LietotÄju tabula ā lietotÄji:
LietotÄja ID
ReÄ£istrÄcijas datums
1
2019-01-01
2
2019-02-01
3
2019-02-10
4
2019-03-01
Izmaksu tabula ā norÄÄ·ini:
LietotÄja ID
datums
Summa
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
Atlasiet visus lietotÄju norakstīŔanas gadÄ«jumus un reÄ£istrÄcijas datumu:
SELECT
b.userId,
b.Date,
u.RegistrationDate
FROM billing AS b LEFT JOIN users AS u ON b.userId = u.userId
RezultÄts:
LietotÄja ID
datums
ReÄ£istrÄcijas datums
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
MÄs veidojam kohortas pa mÄneÅ”iem; lai to paveiktu, mÄs pÄrvÄrÅ”am visus datumus mÄneÅ”os:
DATE_FORMAT(Date, '%Y-%m')Tagad mums ir jÄzina, cik mÄneÅ”us lietotÄjs bija aktÄ«vs - tÄ ir atŔķirÄ«ba starp debeta mÄnesi un reÄ£istrÄcijas mÄnesi. MySQL ir funkcija PERIOD_DIFF() - divu mÄneÅ”u atŔķirÄ«ba. Pievienojiet pieprasÄ«jumam PERIOD_DIFF()
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
LietotÄja ID
NorÄÄ·inu mÄnesis
ReÄ£istrÄcijas datums
MÄneÅ”iAtŔķirÄ«ba
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
MÄs uzskaitÄm katrÄ mÄnesÄ« aktivizÄtos lietotÄjus ā ierakstus sagrupÄjam pÄc BillingMonth, RegistrationMonth un MonthsDiff:
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
RezultÄts:
LietotÄju skaits
NorÄÄ·inu mÄnesis
ReÄ£istrÄcijas mÄnesis
MÄneÅ”iAtŔķirÄ«ba
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
JanvÄrÄ«, februÄrÄ« un martÄ parÄdÄ«jÄs pa vienam jaunam lietotÄjam ā MonthsDiff = 0. Viens janvÄra lietotÄjs bija aktÄ«vs februÄrÄ« ā ReÄ£istrÄcijas mÄnesis = 2019-01, NorÄÄ·inu mÄnesis = 2019-02, un viens februÄra lietotÄjs bija aktÄ«vs martÄ.
Protams, modeļi ir labÄk redzami lielÄ datu kopÄ.
KÄ pÄrsÅ«tÄ«t kohortas uz Grafana
MÄs esam iemÄcÄ«juÅ”ies veidot kohortas, bet, ja ierakstu ir daudz, tos vairs nav viegli analizÄt. Ierakstus var eksportÄt uz Excel un veidot skaistÄs tabulÄs, taÄu tÄ nav mÅ«su metode!
Kohortas var parÄdÄ«t kÄ interaktÄ«vu grafiku .
Lai to izdarÄ«tu, mÄs pievienojam vÄl vienu vaicÄjumu, lai pÄrveidotu datus Grafana piemÄrotÄ formÄtÄ:
SELECT
DATE_ADD(CONCAT(s.RegistrationMonth, '-01'), INTERVAL s.MonthsDiff MONTH) AS time_sec,
SUM(s.Users) AS value,
s.RegistrationMonth AS metric
FROM (
## ŃŃŠ°ŃŃŠ¹ Š·Š°ŠæŃŠ¾Ń, Š²Š¾Š·Š²ŃŠ°ŃаŃŃŠøŠ¹ когоŃŃŃ
SELECT
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
Un augÅ”upielÄdÄjiet datus Grafana.
PiemÄra diagramma no :
![KÄ savÄkt lietotÄju grupas kÄ diagrammas programmÄ Grafana [+ docker attÄls ar piemÄru]](/wp-content/uploads/2019/08/9aa161a1d0e8fd7790875d4f12202d56.jpeg)
Pieskarieties ar rokÄm:
ir Docker attÄls ar MySQL un Grafana, ko varat palaist savÄ datorÄ. Datu bÄzÄ jau ir demonstrÄcijas dati par pusotru gadu, no 2018. gada janvÄra lÄ«dz 2019. gada jÅ«lijam.
Ja vÄlaties, varat ielÄdÄt savus datus Å”ajÄ attÄlÄ.
PS raksti par kohortas analīzi SQL:
Avots: www.habr.com
