Si si krijojnë grupe përdoruesish si grafika në Grafana [+docker imazh me një shembull]

Si si krijojnë grupe përdoruesish si grafika në Grafana [+docker imazh me një shembull]

Si e zgjidhëm problemin e vizualizimit të grupeve të përdoruesve në shërbimin Promopult me ndihmën e Grafana.

Promopult — Ă«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 . Dhe do tĂ« ishte e mirĂ« tĂ« merrnim ndonjĂ« pĂ«rfitim nga secili.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

  1. ÇfarĂ« Ă«shtĂ« analiza e grupeve dhe pĂ«rse Ă«shtĂ« e nevojshme.
  2. Si të bëni grupe sipas muajit të regjistrimit të përdoruesve në SQL.
  3. Si të transferoni grupet në Grafana.

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ë Grafana.

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 demo:

Si si krijojnë grupe përdoruesish si grafika në Grafana [+docker imazh me një shembull]

Ta prekësh me dorë:

Repo GitHub me shembuj — 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:

https://chartio.com/resources/tutorials/performing-cohort-analysis-using-mysql/

https://www.holistics.io/blog/calculate-cohort-retention-analysis-with-sql/

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster