Skip to content

nrkno/nrktv_mobil_og_storskjerm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 

Repository files navigation

Innledning

Her skal jeg forsøke å sammenligne bruken av NRK TV på mobil og storskjerm. Hensikten er å gi innsikt i hva NRK TV-appen skal være på mobile enheter. Jeg skal sammenligne

  • antall besøk
  • antall skjermvisninger
  • påloggingsandel
  • når på døgnet aktiviteten er
  • hvilken type bruk som er typisk for plattformen

Jeg skal også se på

  • hvor mange som er på logget begge plattformene

Perioden jeg ser på er de siste tretti dagene.

Overordnede metrikker

Jeg ser først på antall klienter og antall besøk på hver plattform.

Det er tilsynelatende sånn at det ikke alltid genereres en ny sessionId når et nytt besøk starter. Dette har jeg lagt merke til fordi det er en del tilfeller der det mangler flere previousViewId for samme sessionId. Jeg tolker dette som at det er et nytt besøk. Jeg har derfor lagt inn litt ekstra logikk for å telle med disse besøkene.

#standardSQL
WITH
  KILDE AS (
    SELECT DISTINCT platform, sessionId, nrkUserId IS NOT NULL `pålogget`,
                    visitorId,
                    COUNTIF(previousViewId IS NULL) OVER(PARTITION BY sessionId ORDER BY firstTimeStamp) sub_sesjon
      FROM `nrk-datahub.snowplow_processed.views_v02`
     WHERE partitionDate = CURRENT_DATE - 1
       AND nrkService = 'nrktv'
       AND platform IN ('mob','tv')
       AND appId NOT IN ('no.nrk.nrktvapp.swift', 'no.nrk.goldendelicious.cdntest', 'no.nrk.NRK-Super')),

  `BESØKSTYPE` AS (  
    SELECT platform, sub_sesjon, sessionId, visitorId,
           LOGICAL_OR(`pålogget`) OVER(PARTITION BY sessionId, sub_sesjon) `pålogget besøk`,
      FROM KILDE),

  OPPSUMMERING AS (
    SELECT platform, sub_sesjon, COUNT(DISTINCT IF(`pålogget besøk`, sessionId, NULL)) `pålogget besøk`,
           COUNT(DISTINCT sessionId) `besøk`
      FROM `BESØKSTYPE`
     GROUP BY ALL)

SELECT platform plattform, `Antall klienter`, SUM(`besøk`) `Antall besøk`,
       ROUND(SUM(`besøk`) / `Antall klienter`, 2) `Besøk per klient`,
       ROUND(SUM(`pålogget besøk`) / SUM(`besøk`) * 100, 1) `Andel påloggede besøk i prosent`
  FROM OPPSUMMERING
       JOIN (SELECT platform, COUNT(DISTINCT visitorId) `Antall klienter` FROM `BESØKSTYPE` GROUP BY 1) USING(platform)
 GROUP BY ALL
platformAntall klienterAntall besøkBesøk per klientAndel påloggede besøk i prosent
tv4237616943991.6460.0
mob1853202937981.5965.6

Nå skal jeg se om det er noen forskjell i hvor mye det navigeres på de to plattformene.

#standardSQL
WITH
  KILDE AS (
    SELECT platform, nrkUserId IS NOT NULL `pålogget`, sessionId, viewId,
           COUNTIF(previousViewId IS NULL) OVER(PARTITION BY sessionId ORDER BY firstTimeStamp) sub_sesjon
      FROM `nrk-datahub.snowplow_processed.views_v02`
     WHERE partitionDate = CURRENT_DATE - 1
       AND nrkService = 'nrktv'
       AND platform IN ('mob','tv')
       AND appId NOT IN ('no.nrk.nrktvapp.swift', 'no.nrk.goldendelicious.cdntest', 'no.nrk.NRK-Super')),

  `BESØKSTYPE` AS (  
    SELECT platform, sub_sesjon, sessionId, viewId,
           LOGICAL_OR(`pålogget`) OVER(PARTITION BY sessionId, sub_sesjon) `pålogget besøk`,
      FROM KILDE),

  OPPSUMMERING AS (
    SELECT platform, sub_sesjon, `pålogget besøk`, sessionId, COUNT(DISTINCT viewId) skjermvisninger,
      FROM `BESØKSTYPE`
     GROUP BY ALL)

SELECT DISTINCT platform, `pålogget besøk`, skjermvisninger,
                COUNT(*) OVER(PARTITION BY platform, `pålogget besøk` ORDER BY skjermvisninger) `kumulativ sum`,
                COUNT(*) OVER(PARTITION BY platform, `pålogget besøk`) `Antall besøk`
  FROM OPPSUMMERING
 ORDER BY 1, 2, 3
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.path import Path
import numpy as np
import pandas_gbq
spørring = """
#standardSQL
WITH
  KILDE AS (
    SELECT platform, nrkUserId IS NOT NULL `pålogget`, sessionId, viewId,
           COUNTIF(previousViewId IS NULL) OVER(PARTITION BY sessionId ORDER BY firstTimeStamp) sub_sesjon
      FROM `nrk-datahub.snowplow_processed.views_v02`
     WHERE partitionDate = CURRENT_DATE - 1
       AND nrkService = 'nrktv'
       AND platform IN ('mob','tv')
       AND appId NOT IN ('no.nrk.nrktvapp.swift', 'no.nrk.goldendelicious.cdntest', 'no.nrk.NRK-Super')),

  `BESØKSTYPE` AS (  
    SELECT platform, sub_sesjon, sessionId, viewId,
           LOGICAL_OR(`pålogget`) OVER(PARTITION BY sessionId, sub_sesjon) `pålogget besøk`,
      FROM KILDE),

  OPPSUMMERING AS (
    SELECT platform, sub_sesjon, `pålogget besøk`, sessionId, COUNT(DISTINCT viewId) skjermvisninger,
      FROM `BESØKSTYPE`
     GROUP BY ALL)

SELECT DISTINCT platform, `pålogget besøk`, skjermvisninger,
                COUNT(*) OVER(PARTITION BY platform, `pålogget besøk` ORDER BY skjermvisninger) `kumulativ sum`,
                COUNT(*) OVER(PARTITION BY platform, `pålogget besøk`) `Antall besøk`
  FROM OPPSUMMERING
 ORDER BY 1, 2, 3
"""

df = pandas_gbq.read_gbq(spørring)
df["mediandiff"] = abs(df.pst - .5)
df["pst"] = df["kumulativ sum"] / df["Antall besøk"]
median=df[(df.mediandiff == df.groupby("platform").mediandiff.min().iloc[0]) | (df.mediandiff == df.groupby("platform").mediandiff.min().iloc[1])][["platform","skjermvisninger","pst"]].set_index("platform")
fig, ax = plt.subplots(figsize=(11,7))
ax.set_xlim([0,40])
ax.set_title("Kumulativ fordeling av antall skjermvisninger\n (jo flere skjermvisninger, dess mer tid brukt på navigasjon)")
ax.annotate("Påloggede og ikke-påloggede brukere\nskiller seg lite fra hverandre innad\ni plattformen fom. fire skjermvisninger", xy=(4,.4), xytext=(15,.4), arrowprops=dict(arrowstyle="->", facecolor="black"), va="bottom", ha="left")
ax.annotate("", xy=(4,.48), xytext=(15,.4), arrowprops=dict(arrowstyle="->", facecolor="black"))
ax.annotate("Etter to skjermvisninger er det en større\nandel påloggede enn ikke-påloggede.", xy=(2,.26), xytext=(10,.26), arrowprops=dict(arrowstyle="->", facecolor="black"))
ax.annotate(f"For mob er det ca. {round(1 - median.loc["mob"].pst, 3) * 100} % som har {int(median.loc["mob"].skjermvisninger)} eller flere skjermvisninger,\nmens det på tv er ca. {round(1 - median.loc["tv"].pst, 3) * 100} % som har {int(median.loc["tv"].skjermvisninger)} eller flere skjermvisninger.\nDet betyr at det navigeres litt mer på mobil enn på tv.", xy=(median.loc["mob"].skjermvisninger, median.loc["mob"].pst), xytext=(10,.6), arrowprops=dict(arrowstyle="->", facecolor="black"))
df.pivot(index="skjermvisninger", columns=["platform","pålogget besøk"], values="pst").plot(ax=ax, marker="o")
plt.show()

figurer/navigasjonslengde.png

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published