会員ログの活用法 第10回
診療科ごとに、よく見られている製品ページははっきり分かれる。製品ごとの閲覧数の合計だけでは、この違いは見えない。
製品ページの報告では、製品ごとの閲覧数が並びます。閲覧数の多い製品は、会員全体に関心を持たれているように見えます。
ただ、会員の診療科によって、関心のある製品は違います。会員の多い診療科が見る製品は数が大きくなり、少ない診療科が見る製品は埋もれます。全体の数字だけを見ていると、どの診療科にどの製品が届いているのかが分かりません。
会員IDで名簿の診療科とアクセスログをつなぐと、診療科ごとに、どの製品ページがどれくらいの割合で見られているかを並べられます。
診療科,製品A,製品B,製品C,製品D,製品E,製品F,製品G,製品H 循環器内科,31.2,30.6,4.9,6.0,7.3,6.8,5.7,7.5 糖尿病・内分泌内科,8.7,9.9,40.7,7.5,9.3,6.8,7.1,9.9 消化器内科,8.2,9.5,10.2,34.4,9.5,11.2,8.5,8.5 皮膚科,7.5,10.4,8.5,9.5,40.3,6.5,9.5,8.0 整形外科,7.7,7.7,12.4,9.3,8.2,35.6,10.8,8.2 精神科,9.5,8.9,5.8,10.0,10.0,8.4,36.8,10.5 内科,10.0,9.0,7.3,10.0,9.5,7.1,10.0,37.2 小児科,11.2,13.0,14.8,12.6,11.2,13.5,12.1,11.7
このグラフの数え方
架空のサンプルデータで集計した例です。
ここに挙げた使い方は一例です。サンプルの数字は架空のもので、実際の結果や施策の効果を約束するものではありません。
ここから先は、システム担当者に渡してください。集計SQLで出た結果を、AIプロンプトと一緒にAIへ貼ると、上のようなグラフと読み取りが返ってきます。
select m.specialty,
c.title as product,
count(*) as views
from access_log a
join member m on m.member_id = a.member_id
join content c on c.content_id = a.content_id
where c.content_type = '製品'
and m.specialty is not null
and a.accessed_at >= '2026-04-01' and a.accessed_at < '2026-10-01' -- 期間。実際には集計する期間に差し替える
group by 1, 2
order by 1, 2;次の表は、会員サイトの製品ページの閲覧を、会員の診療科と製品ごとに数えた集計です。
specialty=会員の診療科、product=製品ページ、views=閲覧数です。
個人を特定できる列は含めていません。
1. 診療科を行、製品を列にして、診療科ごとの閲覧の割合(その診療科の合計に対する%)を、色の濃さで表したヒートマップを、画像で描いてください。
2. 次の点を読み取って、3行程度で教えてください。
・診療科ごとに、よく見られている製品はどれか
・どの製品にも偏っていない診療科はあるか
・製品ごとの閲覧数の合計だけで判断すると、何を見落とすか
(ここに集計結果を貼る)SQLとプロンプトは、準備編の汎用テーブルを前提にした例です。実際のテーブル名・列名に合わせて書き換えてください。動作や結果を保証するものではありません。
使う表: member(会員)/content(コンテンツ)/access_log(アクセスログ) (表の形は準備編)
会員の名簿(診療科)とアクセスログが、会員IDでつながっていないと、この問いには答えられません。
アクセス解析では閲覧者の診療科が分からず、「どの診療科の会員が、どの製品を見ているか」を出せないからです。
writeWiredでは、会員IDの付いたアクセスログとメール・フォームの記録が最初から同じ場所に揃っています。会員サイトCMSとしてのwriteWired