0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[PowerQuery] 累積和リスト

Posted at

背景

PowerBIの練習で、以下の記事みたいな分析をしようとしています。
[Python] くりっく株365ヒストリカルデータを解析する(リピート注文) #Python - Qiita

以下のアプローチでやろうとしていています。

  1. 行に前日終値と当日終値を持たせる
  2. 前日終値<買い指値<=当日終値 の条件列を持たせる
  3. 上記条件がマッチした間の、高値・安値・間隔を計算する

「上記条件がマッチした間」を分類したいので、条件列を0/1にして、その累積和を取ることにしました。
Python(pandas)だとこんな感じ。

df[f'Closs_Over_{th}'] = ((df['prev'] < th) & (th <= df['bid'])).cumsum()

コード

シンタックスハイライトは、PowerQuery(mlang)がなかったため、そこそこ見栄えがよさそうなPythonにしています。
パフォーマンスはあまり良くなさそうです。約10年間の日足で数秒かかりました。

累積リスト関数
= (l) => let
        BufferedRows = List.Buffer(l),
        GroupedTh = List.Generate(
            () => [i = 0, 累積 = 0],
            each [i] <= List.Count(BufferedRows),
            each
                [
                    i = [i] + 1,
                    累積 = [累積] +  BufferedRows{[i]}
                ],
            each [累積]
        )
    in
        GroupedTh

引数はテーブル列などを渡します。

利用例
let
    ソース = Nikkei,
    追加されたカスタム = Table.AddColumn(ソース, "Th", each if(([前日清算価格] < Th) and (Th<= [当日清算価格])) then 1 else 0),
    並べ替えられた行 = Table.Sort(追加されたカスタム,{{"取引日", Order.Ascending}}),
    累積和リスト = 累積和リスト(並べ替えられた行[Th]),
    追加されたカスタム1 = Table.AddColumn(並べ替えられた行, "ThAcc", each 累積和リスト{[Index]}),
    グループ化された行 = Table.Group(追加されたカスタム1, {"ThAcc"}, {{"High", each List.Max([高値]), type nullable number}, {"Low", each List.Min([安値]), type nullable number}, {"Begin", each List.Min([取引日]), type nullable date}, {"End", each List.Max([取引日]), type nullable date}}),
    追加されたカスタム2 = Table.AddColumn(グループ化された行, "期間", each [End]-[Begin])
in
    追加されたカスタム2

テーブルはIndex列を持っています。Table.AddColumn(..., each 累積和リスト{[Index]})で、対応する行の累積和リストを追加してます。
使いまわしたいのでリスト生成のみで関数化しましたが、特に使いまわさない場合は 参考記事のように、List.Generate内で直接得たいテーブル形式にしてしまった方がよいと思います。

参考

Power Query の List.Generate 関数ってなんだよー #Excel - Qiita
List.Generate - PowerQuery M | Microsoft Learn

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?