Feed on
Posts
Comments

Power MapよりPower Queryの記事を書くべきな気がしている

ということでPower Map使いこなしたい編その2です
今回は前回の謎データではなく普通のデータで表示してみます

・データの変換
というわけで今回は気象庁|過去の気象データ・ダウンロードから持ってきたデータをPower Mapに表示してみます
前回のCSVの例として挙げた画像のやつです
あのままじゃ当然読めないのでPower Queryを使いましょう

Power Queryなんて扱ったことないし…って思った方でも大丈夫です。まったく使えなそうなサンプルがつきますので!

とりあえず邪魔くさい列なんかを消して邪魔なデータも消しとくとこんな感じです
fspic140409-3

こうしたらいったんTable.ToRecordsでTableをListに変換します
これに対してList.TransformManyでこんな感じに書くとRecordを変換できます
(あくまで今回のデータの場合ですが)

List.TransformMany(Custom1, (x) => List.RemoveRange(Record.FieldNames(x),0,2), (x, y) => [時間 = x[集計終了], 場所 = y, 降水量 = if Record.Field(x,y) <> “” then Record.Field(x,y) else 0])

TransformManyの引数は1つ目に変換するList, 2つ目にListの要素を引数とし、Listを返す関数を、3つ目に変換前のListの要素と2つ目の関数の結果の要素を引数とし、anyを返す関数を指定します
今回は2つ目でRecordのフィールド名のListを取得してそれをさらに新しいRecordに変換してます
新しいRecordは時間、場所、降水量のフィールドを持たせています
(なんか抜けてるところがあったのでそこを埋めるためにif使ってますが完全なデータなら必要ないと思います)

で、これをテーブルへ変換でTableに戻してRecordを展開するとこんな感じになります
fspic140409-4

ちゃんとできましたね!(飛ばしすぎてまったく伝わらない可能性)
あとはこれのデータ型をちょっといじれば完了です

クエリの全文はこんな感じ

let
    ソース = Csv.Document(File.Contents("F:\User\Download\data(1).csv"),null,",",null,932),
    FirstRowAsHeader = Table.PromoteHeaders(ソース),
    ChangedType = Table.TransformColumnTypes(FirstRowAsHeader,{{"集計開始", type text}, {"集計終了", type text}, {"東京", type text}, {"横浜", type text}, {"秩父", type text}, {"千葉", type text}}),
    RemovedColumns = Table.RemoveColumns(ChangedType,{"東京_1", "東京_2", "東京_3", "横浜_4", "横浜_5", "横浜_6", "秩父_7", "秩父_8", "秩父_9", "千葉_10", "千葉_11", "千葉_12"}),
    FilteredRows = Table.SelectRows(RemovedColumns, each [東京] <> ""),
    FilteredRows1 = Table.SelectRows(FilteredRows, each [東京] <> "降水量の合計(mm)"),
    Custom1 = Table.ToRecords(FilteredRows1),
    Custom2 = List.TransformMany(Custom1, (x) => List.RemoveRange(Record.FieldNames(x),0,2), (x, y) => [時間 = x[集計終了], 場所 = y, 降水量 = if Record.Field(x,y) <> "" then Record.Field(x,y) else 0]),
    TableFromList = Table.FromList(Custom2, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #"Expand Column1" = Table.ExpandRecordColumn(TableFromList, "Column1", {"時間", "場所", "降水量"}, {"時間", "場所", "降水量"}),
    ChangedType1 = Table.TransformColumnTypes(#"Expand Column1",{{"降水量", type number}, {"時間", type datetime}})
in
    ChangedType1

今回詳細エディターは使ってないのでそこまで難しくないと思います
まあいざとなればこれいじくればたぶんうまくいきます、たぶん

で、ワークシートに読み込んだら今回の場合、時間の表示形式を”yyyy/m/d h:mm”に、降水量の表示形式を”数値”にしときます
これをしないとPower Mapで正しく読めません

設定したらさくさくとPower Map起動して設定します
前回タイムラインまでやったのでそこまでやっときます
とりあえずこんな感じで
fspic140409-5

今回はツアーについてちょっと書いておしまいにします

・ツアーの追加と作成
説明難しいんですけどツアーってつまるところPowerPointでの一つのプレゼンテーションのようなものとなります
ツアーは複数のシーンから構成されていて、そのそれぞれのシーンがタイムラインを持ちます

Power BIを扱うような人ならPowerPointも知ってると思うのでこれに絡めて説明すると
・シーンっていうのは各スライドを表す
・タイムラインはアニメーションを表す
・ツアーは全体のプレゼンテーションを表す
・ツアーの再生→スライドショー
・シーンの間には遷移アニメーションを入れることができる

まあこんな感じで大体対応してます
とはいえPower Mapの場合ほとんどが固定ですが…

まあ普通に再生するとPower Mapの場合どうしても見れない地域のほうが多いのでグローバルなデータを扱う場合は必須な感じです

ツアーは”表示”の”ツアー エディター”からいじっていきます
fspic140411
こんな感じの画面ですね

これで追加したシーンを適当にいじります
シーンの表示位置がシーン再生時の位置となるのでほとんど何も考えなくてもいい感じです

シーンの切り替えやら効果は”タスク パネル”の”シーンのオプション”で変更できます
切り替えのアニメーションは次のシーンの表示位置に向けて球面上を移動する形のアニメーションのみです。この時間のみが指定できます
“切り替え効果の再生時間”の下の”効果”はあくまでシーン再生中の効果であって切り替え効果ではありません、あしからず…

シーンごとに再生する日時などを変更するととてもいい感じになります
切り替え中に日時を進めることはできない?ので各シーン中に何かする場合はさきほどの効果を使います

追加し終えたらツアーの再生でスライドショーのような感じでなめらかに動いてくれます
実際使うならこの辺で実行しつつ調整していく感じかなと


というわけで超ざっくりとですがPower Mapのツアーについてでした
やっぱり今の私だとPower Mapの使い道が分からないので使う機会がある方はぜひブログとかで書くといいと思います
超投げっぱなしの終わり方

もうちょっとしたらPower Query記述法みたいなよくわからない記事を書くかそれとももっと無難な感じのを書くかはわかりませんがそろそろなんか書きたいですね
だいぶPower Queryリファレンスも見た目だけできてきたので

もっとPower Mapのこの辺のことを書け!とかあったら言ってくださればと…ってコメント欄なかった
とりあえず上にaskとか作ったけどなんか見るの忘れそう
1週間に1回くらいは見たい

この辺で

One Response to “Power Mapを使いこなしたい その2”

  1. […] 追記(14/04/11):Power Mapについてもうちょっと書いたので一応紹介だけ Power Mapを使いこなしたい その1 « 空談録 Power Mapを使いこなしたい その2 « 空談録 […]