今回はR言語とExcelで行った東京駅からの距離ごとの立地件数に関するカーネル密度推定分析をPowerBIで行えるかを検証していきます。
具体的には次のことを行います。
・CSVデータをPower BIに読み込み、Power Queryで 年代区分(2001–2005など) を作成する
・緯度・経度から 東京駅を基準にした球面距離(ハーサイン公式) をDAXで計算する
・年代ごとに 距離の中央値(カード) と 距離分布(ヒストグラム) を可視化する
・Power BI標準機能では難しい カーネル密度推定(KDE) を、Rビジュアルで描画する
・スライサーで年代を切り替え、年代別の分布の違い を直感的に比較する
• R版:
• Excel版:
1.データ読み込み
①「データ取得」→「テキスト/CSV」→ファイルを指定→「読み込み」
②右側の「データ」のデータ名を右クリック→「クエリの編集」でPowerQueryエディターを開く
※今回の手順では、データに最低限以下の列が含まれていることを前提にします(列名が違う場合は適宜読み替えてください)。
year:開設年(年代区分を作るために使用)
master[y]:緯度(latitude)
master[x]:経度(longitude)
2.前処理(年代区分)
③開設年の列の空白(null)のチェックを外す
④「列の追加」→「カスタム列」→「新しい列名」に「年代」と入力。「カスタム列の式」に下記を入力
if [year] >= 2001 and [year] <= 2005 then "2001-2005"
else if [year] >= 1996 and [year] <= 2000 then "1996-2000"
else if [year] >= 1991 and [year] <= 1995 then "1991-1995"
else if [year] >= 1986 and [year] <= 1990 then "1986-1990"
else if [year] >= 1981 and [year] <= 1985 then "1981-1985"
else null
//⑤の投稿と同様
3.前処理(欠損除外)
⑤年代列の空白(null)のチェックを外す
⑥「ホーム」→「閉じて適用」
※「yearが対象外だった」「yearが欠損していた」などの行がここで落ちます
4.東京駅からの距離計算
⑦右側の「データ」のデータ名を右クリック→「新しい列」→以下のDAXを入力
dist =
VAR lat1 = RADIANS ( 35.68112 )
VAR lon1 = RADIANS ( 139.7672 )
VAR lat2 = RADIANS ( master[y] )
VAR lon2 = RADIANS ( master[x] )
VAR dlat = lat2 - lat1
VAR dlon = lon2 - lon1
VAR a =
POWER ( SIN ( dlat / 2 ), 2 )
+ COS ( lat1 ) * COS ( lat2 ) * POWER ( SIN ( dlon / 2 ), 2 )
VAR c = 2 * ASIN ( SQRT ( a ) )
RETURN
6371 * c
//ハーバーサイン公式による球面距離計算(地球半径を6371kmとして計算)
//master[y] が 緯度(latitude)、master[x] が 経度(longitude)
5.年代別中央値
⑧右側の「データ」のデータ名を右クリック→「新しいメジャー」→以下のDAXを入力
Median_dist =
FORMAT(MEDIAN(master[dist]), "0.0") & " km"
⑨「視覚化」で「カード」 を選択→値に「Median_dist」を選択
6.年代別の距離分布(ヒストグラム)
⑩distを右クリック → 「新しいグループ」→ビン幅を5kmに指定→「OK」
⑪集合縦棒グラフ→X軸をdist(ビン)、y軸をdist(ビン)のカウント

※それぞれの年代のヒストグラム同時比較したい場合は、年代を凡例に入れてください。
7.カーネル密度推定
Power BI標準機能ではカーネル密度推定はできないため、Rビジュアルを利用します。
※Rビジュアルを使うには、Power BI 側で R の実行環境設定が必要です(オプションでRのパス設定)
⑫Rスクリプトビジュアルをクリック→値に「year(開設年の列)」と「dist(東京駅からの距離の列)」と「年代」を入れる→右クリックしてすべての値を「集計しない」に選択
⑬Rスクリプトエディターに下記のRのコードを入力
#データを読みこむ
master <- dataset
# 密度推定を求める
dens <-density(master$dist)
# 密度推定を描写する
plot(dens,
col = "black",
lwd = 2,
xlab = "Distance from Tokyo (km)",
ylab = "Density",
main = "Kernel density of distance by period")
下記のようなグラフが出力されます。
8.年代ごとにスライサーをつける
⑭視覚化で「ボタンスライサー」を選択→「値」に年代を入れる
以下のようなダッシュボードができます
試しに1981-1985で絞ってみます
2001-2005で絞ってみます
スライサーを使用することで年代別のヒストグラムと密度推定曲線、中央値を見比べることができて面白いです。
今回、R版・Excel版で行っていた「年代区分 → 東京駅からの距離算出 → 分布の可視化 → KDE」という流れを、Power BIでもかなりスムーズに再現できました。
特に、スライサーで年代を切り替えながら、中央値・ヒストグラム・密度曲線を同じ画面で見比べられるのは、探索的に分析するうえでPower BIの強みだと感じました。さらに、必要に応じて R / Python を組み込める拡張性も魅力です。
一方で、セルを直接編集して作り込むような細かい帳票作成や手作業の整形は Excel の方が得意なので、用途に応じて使い分けるのが現実的だと思います。







