特定時間の視聴チャンネル遷移調査

弊社チューナの利用状況調査として特定曜日、時間帯を一つピックアップ、
視聴チャンネル遷移について調べました。

東京エリアの日曜20時付近の視聴チャンネル遷移調査

概要

  1. 弊社のTVチューナの利用履歴を用いて視聴チャンネル遷移をまとめました
  2. 他チャンネルに視聴が移った数を見ることで各チャンネルの人気や特徴的な遷移が見られるか確認しました
  3. 特定の曜日、時間に絞ることでより特徴的な傾向が見られるか確認しました

方法

  1. TVチューナの操作履歴から過去の日曜日の20時の前後10分間の視聴データを抽出
  2. 視聴終了から5分以内に他チャンネルを1分以上視聴したケースを視聴遷移と定義

制限事項

  1. 1分未満の視聴時間の操作に関してはザッピングと判断して除外
  2. 日曜20時としたのは大河ドラマ、人気バラエティの開始する時間付近のためで他意はありません

pandas

In [1]:
import pandas as pd

pandasのデータフレームに読み込み

  • 利用履歴のデータベースから必要なデータを抽出して使用します(csvデータは非公開です)
In [2]:
base_tr_df = pd.read_csv('sunday_20.csv', encoding='shift-jis')
base_tr_df_without225 = pd.read_csv('sunday_20_without225.csv', encoding='shift-jis')

同チャンネル遷移を0に変更

  • 今回は他チャンネルの遷移のみに着目するため同チャンネルへの遷移を0に変更します
In [3]:
TOKYO_STATION_NAME = {
    1024 : 'NHK総合東京',
    1032 : 'Eテレ東京',
    1040 : '日本テレビ',
    1048 : 'TBS',
    1056 : 'フジテレビ',
    1064 : 'テレビ朝日',
    1072 : 'テレビ東京',
    23608 : 'TOKYO MX1',
}
def adjust_count(row):
    if row['base_sv_id'] == row['next_base_sv_id']:
        return 0
    return row['count']

def get_adjust_df(input_df):
    input_df['curr_station'] = input_df['base_sv_id'].apply(lambda x:TOKYO_STATION_NAME[x])
    input_df['next_station'] = input_df['next_base_sv_id'].apply(lambda x:TOKYO_STATION_NAME[x])

    tr_df = pd.DataFrame()
    tr_df['curr_station'] = input_df['curr_station']
    tr_df['next_station'] = input_df['next_station']
    tr_df['is_mobile'] = input_df['is_mobile']
    tr_df['count'] = input_df.apply(adjust_count, axis=1)
    return tr_df
    
tr_df = get_adjust_df(base_tr_df)
tr_df_without225 = get_adjust_df(base_tr_df_without225)

遷移表

  • pandas + pivot実行のみだと見た目が少し変ですがご了承ください
  • 縦が遷移元チャンネル、横が遷移先チャンネルです
In [4]:
tr_df.pivot_table(index = ['curr_station'],
                  columns = ['next_station'],
                  values = ['count'],
                  aggfunc = 'sum')
Out[4]:
count
next_station Eテレ東京 NHK総合東京 TBS TOKYO MX1 テレビ朝日 テレビ東京 フジテレビ 日本テレビ
curr_station
Eテレ東京 0.0 9.0 NaN NaN 2.0 2.0 5.0 7.0
NHK総合東京 36.0 0.0 21.0 1.0 27.0 16.0 26.0 74.0
TBS 3.0 27.0 0.0 NaN 33.0 23.0 39.0 42.0
TOKYO MX1 NaN 2.0 NaN 0.0 NaN 1.0 2.0 2.0
テレビ朝日 2.0 21.0 37.0 1.0 0.0 31.0 33.0 86.0
テレビ東京 2.0 35.0 30.0 1.0 31.0 0.0 44.0 72.0
フジテレビ 2.0 35.0 42.0 2.0 32.0 33.0 0.0 48.0
日本テレビ 5.0 63.0 36.0 1.0 73.0 38.0 57.0 0.0

遷移パターンTop10

  • テレビ朝日から日本テレビへの遷移が多い
In [5]:
pv_df = tr_df.pivot_table(index = ['curr_station', 'next_station'],
                  values = ['count'],
                  aggfunc = 'sum')
pv_df.sort_values('count', ascending=False).head(10)
Out[5]:
count
curr_station next_station
テレビ朝日 日本テレビ 86
NHK総合東京 日本テレビ 74
日本テレビ テレビ朝日 73
テレビ東京 日本テレビ 72
日本テレビ NHK総合東京 63
フジテレビ 57
フジテレビ 日本テレビ 48
テレビ東京 フジテレビ 44
フジテレビ TBS 42
TBS 日本テレビ 42

遷移元の合計

  • 日本テレビが多い
  • 鉄腕ダッシュが人気番組で視聴PTも大きいため、視聴終了後に他チャンネルに遷移するケースが多いと推測します
In [6]:
src_df = tr_df.pivot_table(index = ['curr_station'],
                  values = ['count'],
                  aggfunc = 'sum')
src_df.sort_values('count', ascending=False)
Out[6]:
count
curr_station
日本テレビ 273
テレビ東京 215
テレビ朝日 211
NHK総合東京 201
フジテレビ 194
TBS 167
Eテレ東京 25
TOKYO MX1 7

遷移先の合計

  • 日本テレビが多い
  • イッテQへの視聴遷移が多いと推測します
In [7]:
dst_df = tr_df.pivot_table(index = ['next_station'],
                  values = ['count'],
                  aggfunc = 'sum')
dst_df.sort_values('count', ascending=False)
Out[7]:
count
next_station
日本テレビ 331
フジテレビ 206
テレビ朝日 198
NHK総合東京 192
TBS 166
テレビ東京 144
Eテレ東京 50
TOKYO MX1 6

遷移先 – 遷移元の差分

  • 日曜20時は他チャンネルから日本テレビへの遷移が一番多い
  • 但し、2点ほど予想と異なる点があった
    • 通常出入りのほぼないEテレ東京が2番目に多くなっている
    • 大河ドラマがあり視聴遷移先に選ばれやすい予想していたNHK総合東京がマイナスになっている
In [8]:
(dst_df - src_df).sort_values('count', ascending=False)
Out[8]:
count
next_station
日本テレビ 58
Eテレ東京 25
フジテレビ 12
TBS -1
TOKYO MX1 -1
NHK総合東京 -9
テレビ朝日 -13
テレビ東京 -71

予想と異なる原因は2/25に平昌オリンピック閉会式が放送されたため

閉会式の視聴PTが大きく20時でNHK総合東京からEテレ東京へ変わったため大きな視聴遷移が発生

  • 閉会式の放送時間
    • 2018/2/25(日) 19:30 – 20:00 : NHK総合東京
    • 2018/2/25(日) 20:00 – 21:00 : Eテレ東京

2/25のデータを除外した遷移先 – 遷移元の差分結果は下記

  • 予想通りNHK総合東京への視聴遷移が多かった
In [9]:
src_df = tr_df_without225.pivot_table(index = ['curr_station'],
                  values = ['count'],
                  aggfunc = 'sum')
src_df.sort_values('count', ascending=False)
dst_df = tr_df_without225.pivot_table(index = ['next_station'],
                  values = ['count'],
                  aggfunc = 'sum')
dst_df.sort_values('count', ascending=False)
(dst_df - src_df).sort_values('count', ascending=False)
Out[9]:
count
next_station
日本テレビ 43
NHK総合東京 22
フジテレビ 13
Eテレ東京 3
TBS 1
TOKYO MX1 -1
テレビ朝日 -13
テレビ東京 -68

まとめ

  • 日曜20時の日本テレビとNHK総合東京が強く、開始時間付近でそのチャンネルへ視聴を切り替えるパターンが多いと推測します
  • 今回の調査条件ではオリンピックのような大型イベントが原因で結果に影響を与える可能性があることも分かりました(調査条件の見直しが必要)