問題タブ [bi-temporal]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
144 参照

python - バイテンポラル データセットでの移動平均の計算

バイテンポラル データセットで移動平均を計算しようとしています。データセットは、データの日付と有効日 (データが利用可能になった日付) で構成されます。この日付のデータは、今後数回修正される可能性があります (データの日付は同じですが、発効日は異なります)。計算対象の行の発効日に有効なデータを使用して、過去 4 四半期の移動平均を計算する必要があります。

データセットは次のようになります

ID データ日付 無効にする 価値
1 2005-03-31 2005-04-15 10
1 2005-03-31 2005-05-30 11
1 2005-06-30 2005-07-15 9
1 2005-06-30 2005-08-20 9.5
1 2005-06-30 2005-10-15 9.6
1 2005-09-30 2005-10-15 10.5
1 2005-09-30 2005-11-10 11
1 2005-09-30 2006-02-20 10.75
1 2005-12-31 2006-02-13 12
1 2005-12-31 2006-02-20 11.6
1 2005-12-31 2006-05-10 11
1 2006-03-31 2006-04-20 8
1 2006-03-31 2006-05-10 8.25

結果は

ID データ日付 無効にする 価値 MAvg
0 1 2005-03-31 2005-04-15 10 10
1 1 2005-03-31 2005-05-30 11 11
2 1 2005-06-30 2005-07-15 9 10
3 1 2005-06-30 2005-08-20 9.5 10.25
4 1 2005-06-30 2005-10-15 9.6 10.30
5 1 2005-09-30 2005-10-15 10.5 10.37
6 1 2005-09-30 2005-11-10 11 10.53
7 1 2005-09-30 2006-02-20 10.75 10.45
8 1 2005-12-31 2006-02-13 12 10.9
9 1 2005-12-31 2006-02-20 11.5 10.71
10 1 2005-12-31 2006-05-10 11 10.59
11 1 2006-03-31 2006-04-20 8 9.96
12 1 2006-03-31 2006-05-10 8.25 9.9

私はパンダを使ってPythonでこれをやっています。私がこれを行っている方法は、データフレームを id と前の 4 四半期で結合し、過去 4 四半期の effdates に基づいてすべての期間の新しい effdates を計算することです。次に、id、datadate、および effdate でもう一度結合して計算します平均。

これは機能しますが、2000年から最新の四半期(約50万行)までの約2000の異なるIDとデータ日付を持つ完全なデータセットで実行すると非常に遅くなり、異なるウィンドウのいくつかのフィールドで移動平均を計算する必要があります。そこで、効率の良い方法があれば教えていただきたいです。

0 投票する
1 に答える
121 参照

oracle - SCHEMA の変更後にテンポラル テーブルでクエリが壊れないようにするにはどうすればよいですか?

個人情報用のテンポラル テーブルがあるとします。

  • UUID (varchar)
  • main_document (varchar)
  • 名前 (varchar)
  • DoB (タイムスタンプ)
  • ジャンル (varchar)
  • アドレス (varchar)
  • 給与 (10 進数)

T1で、スキーマの移行を実行し、新しい列を追加します。これ以降、テーブルには次のものがあります。

  • UUID (varchar)
  • main_document (varchar)
  • 名前 (varchar)
  • DoB (タイムスタンプ)
  • ジャンル (varchar)
  • アドレス (varchar)
  • 給与 (10 進数)
  • 電子メール(varchar)*

次に、T2で別のスキーマ移行を実行し、main_document のデータ型を NUMBER に変更します。

  • UUID (varchar)
  • メインドキュメント (数字) *
  • 名前 (varchar)
  • DoB (タイムスタンプ)
  • ジャンル (varchar)
  • アドレス (varchar)
  • 給与 (10 進数)
  • 電子メール (varchar)

次に、T3で別のスキーマ移行を実行し、ジャンル列を削除します

  • UUID (varchar)
  • main_document (数値)
  • 名前 (varchar)
  • DoB (タイムスタンプ)
  • --------------- *
  • アドレス (varchar)
  • 給与 (10 進数)
  • 電子メール (varchar)

次に、T4で別のスキーマ移行を実行し、ジャンル列を追加しましたが、データ型は NUMBER になりました。

  • UUID (varchar)
  • main_document (数値)
  • 名前 (varchar)
  • DoB (タイムスタンプ)
  • ジャンル (数字) *
  • アドレス (varchar)
  • 給与 (10 進数)
  • 電子メール (varchar)

T1、T2、T3、T4 などでスキーマが変更された場合、DB にクエリを実行する方法 (時間をさかのぼる) はありますか?

同様に、私たちは (壁の時間) T4 にいて、次を実行します: select * from people AS OF T3 , 何を返す必要がありますか? 本当にタイムトラベル?

これらのテンポラル テーブル + スキーマの移行でこの複雑さをすべて回避するためのベスト プラクティスまたは戦略はありますか?

どんな助けでも大歓迎です。

ありがとう