![Si si krijojnë grupe përdoruesish si grafika në Grafana [+docker imazh me një shembull]](/wp-content/uploads/2019/08/293a4d703ef9e7e69ee414be16217f1d.jpeg)
Si e zgjidhëm problemin e vizualizimit të grupeve të përdoruesve në shërbimin Promopult me ndihmën e Grafana.
â Ă«shtĂ« njĂ« shĂ«rbim i fuqishĂ«m me njĂ« numĂ«r tĂ« madh pĂ«rdoruesish. GjatĂ« 10 viteve tĂ« punĂ«s, numri i regjistrimeve nĂ« sistem ka kaluar njĂ« milion. Ato qĂ« kanĂ« pasur pĂ«rvojĂ« me shĂ«rbime tĂ« tilla e dinĂ« se ky masiv pĂ«rdoruesish nuk Ă«shtĂ« aspak homogjen.
Disa janĂ« regjistruar dhe "flenĂ«" pĂ«rgjithmonĂ«. Disa harrojnĂ« fjalĂ«kalimin dhe regjistrohen edhe disa herĂ« brenda gjashtĂ« muajve. Disa gjenerojnĂ« tĂ« ardhura, ndĂ«rsa disa erdhĂ«n pĂ«r veglat falas NĂ« njĂ« masĂ« kaq tĂ« madhe tĂ« dhĂ«nash si tonat, analizimi i sjelljes sĂ« njĂ« pĂ«rdoruesi tĂ« vetĂ«m dhe marrja e vendimeve mikro Ă«shtĂ« pa kuptim. Por kapja e trendeve dhe punimi me grupe tĂ« mĂ«dha â Ă«shtĂ« e mundshme dhe e domosdoshme. Kjo Ă«shtĂ« ajo qĂ« ne, nĂ« thelb, po bĂ«jmĂ«.
Në masa të mëdha të dhënash si tonat, analizimi i sjelljes së një përdoruesi të vetëm dhe marrja e vendimeve mikro është e pavlerë. Megjithatë, kapja e trendeve dhe puna me grupe të mëdha është e mundshme dhe e nevojshme. Këto janë pikërisht ato që bëjmë.
Përmbledhje
- ĂfarĂ« Ă«shtĂ« analiza e grupeve dhe pĂ«rse Ă«shtĂ« e nevojshme.
- Si të bëni grupe sipas muajit të regjistrimit të përdoruesve në SQL.
- Si të transferoni grupet në .
Nëse tashmë e dini se çfarë është analiza e grupeve dhe si ta realizoni atë në SQL, kaloni drejt seksionit të fundit.
1. ĂfarĂ« Ă«shtĂ« analiza e kohrave dhe pĂ«rse Ă«shtĂ« e nevojshme
Analiza e kohrave është një metodë e bazuar në krahasimin e grupeve të ndryshme (kohrave) të përdoruesve. Në shumicën e rasteve, ne formojmë grupe sipas javës ose muajit kur përdoruesi filloi të përdorë shërbimin. Nga këtu llogaritet koha e jetës së përdoruesit, dhe kjo është një tregues, mbi të cilin mund të kryhen analiza mjaft të komplikuara. Për shembull, të kuptojmë:
- si ndikon kanali i tërheqjes në kohën e jetës së përdoruesit;
- si përdorimi i ndonjë funksioni ose shërbimi ndikon në kohën e jetës;
- si ndikoi lansimi i veçorisë X në kohën e jetës krahasuar me vitin e kaluar.
2. Si të krijoni kohrat në SQL?
MadhĂ«sia e artikullit dhe shĂ«ndeti i mendjes nuk lejojnĂ« qĂ« tĂ« paraqesim kĂ«tu tĂ« dhĂ«nat tona reale â nĂ« dump-in provues statistika pĂ«r njĂ« periudhĂ« njĂ«gjysmĂ« vjeçare: 1200 pĂ«rdorues dhe 53,000 transaksione. NĂ« mĂ«nyrĂ« qĂ« tĂ« mund tĂ« luani me kĂ«to tĂ« dhĂ«na, ne kemi pĂ«rgatitur njĂ« imazh docker me MySQL dhe Grafana, ku mund ta provoni kĂ«tĂ« vetĂ«. Lidhja nĂ« GitHub Ă«shtĂ« nĂ« fund tĂ« artikullit.
Dhe këtu ne do të tregojmë krijimin e kohrave me një shembull të thjeshtuar.
Supozoni se kemi një shërbim. Në të regjistrohen përdoruesit dhe shpenzojnë para për shërbime. Me kalimin e kohës, përdoruesit ndalojnë përdorimin. Ne duam të know si gjatë jetojnë përdoruesit dhe sa prej tyre ndalojnë pas muajit të parë dhe të dytë të përdorimit të shërbimit.
Për të përgjigjur këtyre pyetjeve, na nevojitet të ndërtojmë kohrat sipas muajit të regjistrimit. Aktivitetin do ta masim sipas shpenzimeve në çdo muaj. Në vend të shpenzimeve, mund të jenë porositë, tarifat e abonimit ose çdo aktivitet tjetër i lidhur me kohën.
Të dhënat fillestare
Shembujt janë bërë në MySQL, por për DBMS të tjera nuk duhet të ketë dallime të rëndësishme.
Tabelat e pĂ«rdoruesve â users:
userId
RegistrationDate
1
2019-01-01
2
2019-02-01
3
2019-02-10
4
2019-03-01
Tabela e shpenzimeve â billing:
userId
Data
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
Zgjedhim të gjitha shpenzimet e përdoruesve dhe datën e regjistrimit:
SELECT
b.userId,
b.Date,
u.RegistrationDate
FROM billing AS b LEFT JOIN users AS u ON b.userId = u.userId
Rezultati:
userId
Data
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
Kohortat i ndërtuam sipas muajve, për këtë transformojmë të gjitha datat në muaj:
DATE_FORMAT(Date, '%Y-%m')Tani na nevojitet tĂ« dimĂ« sa muaj ka qenĂ« aktiv pĂ«rdoruesi â kjo Ă«shtĂ« diferenca mes muajit tĂ« shpenzimit dhe muajit tĂ« regjistrimit. NĂ« MySQL ka njĂ« funksion PERIOD_DIFF() â diferenca mes dy muajve. ShtojmĂ« PERIOD_DIFF() nĂ« kĂ«rkesĂ«:
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
NumĂ«rojmĂ« pĂ«rdoruesit e aktivizuar çdo muaj â grupojmĂ« tĂ« dhĂ«nat sipas BillingMonth, RegistrationMonth dhe 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
Rezultati:
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
NĂ« janar, shkurt dhe mars u shfaq njĂ« pĂ«rdorues i ri â MonthsDiff = 0. NjĂ« pĂ«rdorues i janarit ishte aktiv edhe nĂ« shkurt â RegistrationMonth = 2019-01, BillingMonth = 2019-02, gjithashtu njĂ« pĂ«rdorues i shkurtit ishte aktiv nĂ« mars.
Në një masë të madhe të dhënash, natyrisht, patternet duket më mirë.
Si të transferoni koportat në Grafana
Korporatat i kemi mĂ«suar tĂ« formojmĂ«, por kur ka shumĂ« tĂ« dhĂ«na, Ă«shtĂ« e vĂ«shtirĂ« tâi analizosh ato. Rekordat mund tĂ« eksportohen nĂ« Excel dhe tĂ« formohen tabela tĂ« bukura, por ky nuk Ă«shtĂ« metoda jonĂ«!
Korporatat mund të tregohen si një grafik interaktiv në .
Për këtë, shtojmë një kërkesë tjetër për të transformuar të dhënat në një format të përshtatshëm për Grafana:
SELECT
DATE_ADD(CONCAT(s.RegistrationMonth, '-01'), INTERVAL s.MonthsDiff MONTH) AS time_sec,
SUM(s.Users) AS value,
s.RegistrationMonth AS metric
FROM (
## kërkesë e vjetër, që kthen kohortat
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
Dhe shkarkojmë të dhënat në Grafana.
Shembulli i grafikës nga :
![Si si krijojnë grupe përdoruesish si grafika në Grafana [+docker imazh me një shembull]](/wp-content/uploads/2019/08/9aa161a1d0e8fd7790875d4f12202d56.jpeg)
Ta prekësh me dorë:
â ky Ă«shtĂ« njĂ« imazh docker me MySQL dhe Grafana, qĂ« mund tĂ« startohet nĂ« kompjuterin tuaj. NĂ« bazĂ« tashmĂ« ka tĂ« dhĂ«na demo pĂ«r njĂ« vit e gjysmĂ«, nga janari 2018 deri nĂ« korrik 2019.
Nëse dëshironi, mund të ngarkoni të dhënat tuaja në këtë imazh.
P.S. Artikuj për analizën e kohortave në SQL:
Burimi: habr.com
