パンダを使用して、360度のリング座標データの逆動きを正確に検出します
はじめに:リング座標データの課題
日食の天体の位置、角度センサーの読み取り、または周期信号の位相など、特定の種類のデータを処理する場合、360度のリング座標系に遭遇することがよくあります。このタイプの座標の特徴は、値が360度に達すると、0度に「巻き戻す」こと、または0度から負の値に減少すると、359度(つまり、Modulo 360操作)に「巻き戻す」ことです。
惑星の逆挙動の例をとると、惑星の黄道座標は360度以内に変化し続けます。惑星が直接から逆行に変化すると、その座標は局所的な最大値に達し、その後減少し始めます。惑星が直接的なものから直接変化すると、その座標は局所的な最小値に達し、その後増加し始めます。従来の線形座標系では、局所的な極端なポイント(Scipy.signal.argrelextremaを使用するなど)を検出することにより、これらの逆動きを識別できます。
ただし、360度のリング座標系は特別な課題を提示します。これは、惑星の座標が約350度から増加し続け、360度(つまり、0度の領域に入る)を増やし、増加し続けると、物理的に連続的な前方動きです。しかし、たとえば、数値的な観点からは、358度から0度まで、急激な低下が発生します。従来の極端な値検出アルゴリズムが直接適用されている場合、境界を横切るこの現象は、逆動きの出発点として簡単に誤解され、「偽陽性」の結果をもたらすことができます。
次の「クラッシュ例」データを考えてみましょう。これは、358度から0度の座標にまたがるプロセスを示しています。
日付座標17.03.2010 358.41273#これは逆モーションの始まりではありません18.03.2010 0.39843#境界を越えるだけです。
この例では、惑星は実際には継続的に前進していますが、座標の軌道的な性質のため、数値の直接的な観察は358から0に「減少」を明らかにします。この境界スパンを真の逆運動と区別する方法が必要です。
コア方法:パンダベースの逆モーション認識
360度のリング座標データの誤判断の問題を解決するために、Pandasの強力なデータ処理機能を使用して重要な戦略を組み合わせることができます。360度の境界スパンによって引き起こされる「誤った」変更を除外するために絶対差のしきい値を設定することにより。極度の価値判断は、連続ポイント間の変化の量が合理的な小さな範囲内にある場合にのみ考慮されます。
特定の手順は次のとおりです。
- データの準備:日付を整理し、データをパンダのデータフレームに調整します。
-
違いを計算し、しきい値を設定します。
- diff()メソッドを使用して、隣接する座標間の違いを計算します。
- 差分abs()の絶対値を取得します。
- しきい値(たとえば、1度)を設定して、絶対的な違いがそのしきい値以下のデータポイントを除外します。このステップはコアであり、360度の周囲のために巨大な数値ジャンプと思われるポイントを効果的に識別できますが、非常に小さな物理的変化を持ち、それらを極端な値から除外します。
-
ローカルの最大値を検出します(上部ピーク) :
- 現在の座標が前の座標(c.gt(c.shift()))よりも大きいかどうかを判断します。
- 現在の座標が次の座標(C.GT(C.Shift(-1)))よりも大きいかどうかを判断します。
- これらの2つの条件は同時に満たされており、現在のポイントが局所的な最大値であることを示しています。
-
ローカル最小値を検出します(ピークの下部) :
- 現在の座標が前の座標(c.lt(c.shift()))よりも小さいかどうかを判断します。
- 現在の座標が次の座標(C.LT(C.Shift(-1)))よりも小さいかどうかを判断します。
- これらの2つの条件は同時に満たされており、現在のポイントが局所最小であることを示しています。
- 条件と組み合わせる:局所最大値と局所最小値の上記の判断条件は、ステップ2で計算された差異のしきい値条件で論理的に動作します。最終的に、変更量がしきい値内であり、ローカル極端な値条件が満たされた場合にのみ逆モーションポイントとしてマークされます。
コード実装
PANDAを使用して上記のロジックを実装するためのサンプルコードは次のとおりです。
PDとしてパンダをインポートします IOをインポートします #データデータ= "" " 日付、座標 13.03.2010,350.60172 14.03.2010,352.53184 15.03.2010,354.47785 16.03.2010,356.43861 17.03.2010,358.41273 18.03.2010、0.39843 19.03.2010,2.39354 20.03.2010,4.39545 21.03.2010,6.40106 22.03.2010,8.40673 23.03.2010,10.40828 24.03.2010,12.40098 25.03.2010、14.37956 26.03.2010、16.33824 13.08.2010,166.41245 14.08.2010,167.00584 15.08.2010,167.53165 16.08.2010,167.98625 17.08.2010,168.36589 18.08.2010,168.66672 19.08.2010,168.88494 20.08.2010,169.01682 21.08.2010,169.05885 22.08.2010,169.00792 23.08.2010,168.86147 24.08.2010,168.61771 25.08.2010,168.27591 26.08.2010,167.83665 "" " df = pd.read_csv(io.stringio(data)、parse_dates = ['date']) #抽出座標列c = df ['coords'] #ステップ1:隣接する座標の絶対差を計算し、しきい値を設定します。 #ここで、しきい値は1に設定されます。つまり、2つの隣接するポイントの座標の絶対差が1より大きい場合、 #それから、これは境界スパンである可能性があり、逆運動の極端なポイントと見なされるべきではないと考えられています。 #毎日の惑星の動きの場合、通常、1日に1度以上の実際の逆の変化はありません。 m0 = c.diff()。abs()。le(1) #ステップ2:局所最大値(上部ピーク)を検出します。つまり、現在のポイントは#の前後の2つのポイントよりも大きく、M0条件を組み合わせて、M1 =(C.GT(-1))&C.GT(C.Shift())&M0に及ぶ境界M1が原因であることを確認します。 #ステップ3:局所最小値(低いピーク)を検出します。つまり、現在のポイントは、#の前後の2つのポイントよりも小さいM0条件と結合して、偽の最小値がM2 =(C.LT(-1))&C.LT(C.Shift())&M0に及ぶ境界によって引き起こされないことを確認します。 #ステップ4:最終的な逆モーションフラグDF ['Reversal'] = M1 | M2 印刷(df)
サンプル分析と結果の確認
上記のコードを実行すると、反転列を含むデータフレームが取得されます。この列は、各タイムポイントがブール値(True/False)による逆動きの開始点であるかどうかを示します。
日付座標の反転 0 2010-03-13 350.60172 False 1 2010-03-14 352.53184 False 2 2010-03-15 354.47785 False 3 2010-03-16 356.43861 False 4 2010-03-17 358.41273 False 5 2010-03-18 0.39843 False#首尾よく無視された境界スパン6 2010-03-19 2.39354 False 7 2010-03-20 4.39545 False 8 2010-03-21 6.40106 False 9 2010-03-22 8.40673 False 10 2010-03-23 10.40828 False 11 2010-03-24 12.40098 False 12 2010-03-25 14.37956 False 13 2010-03-26 16.33824 False 14 2010-08-13 166.41245 False 15 2010-08-14 167.00584 False 16 2010-08-15 167.53165 False 17 2010-08-16 167.98625 False 18 2010-08-17 168.36589 False 19 2010-08-18 168.66672 False 20 2010-08-19 168.88494 False 21 2010-08-20 169.01682 False 22 2010-08-21 169.05885 True#逆モーションの実際の出発点を正常に特定する23 2010-08-22 169.00792 False 24 2010-08-23 168.86147 False 25 2010-08-24 168.61771 False 26 2010-08-25 168.27591 False 27 2010-08-26 167.83665 False
出力の結果から、わかります。
- 「クラッシュの例」セクション(インデックス0-13)では、358.41273から0.39843にジャンプする座標にもかかわらず、これらのポイントは真実ではありません。その絶対差は1(358.41273-0.39843が358にほぼ等しい)であり、M0条件はMETではありません。これにより、境界線の交差によって引き起こされる誤判断を回避できます。
- 通常の例セクション(インデックス14-27)では、座標は2010-08-21にローカル最大169.05885に達し、その後減少し始めました。隣接する違い(例:169.05885-169.01682 = 0.04203および169.05885-169.00792 = 0.05093)は両方とも1未満であり、局所的な最大条件を満たしているため、この点は正しく真であるとマークされています。
メモとベストプラクティス
-
しきい値選択の重要性:
- コードのしきい値= 1は、「例外」境界スパンから「通常の」マイナーな変更をどのように区別するかを決定する重要なパラメーターです。
- このしきい値は、データの実際の特性、サンプリング頻度、および予想される最大変化率に基づいて決定する必要があります。たとえば、毎日の惑星座標の場合、通常、1日に1度以上の実際の逆の変化はないため、1度は合理的な開始値です。データがより集中的にサンプリングされるか、動きがより速い場合、このしきい値を調整する必要がある場合があります。
- 小さすぎるしきい値を選択すると、実際の逆ポイントを見逃す可能性があります。大きすぎるしきい値を選択すると、境界スパンによって引き起こされる誤判断を効果的にフィルタリングしない場合があります。
-
データの継続性とソート:
- 入力データが年代順に正しくソートされ、時間間隔が比較的均一であることを確認してください。 Shift()およびdiff()操作の妥当性は、データのこの構造に依存します。
- データに欠損値または不規則な時間間隔がある場合、補間または再サンプリングが必要になる場合があります。
-
アプリケーションシナリオの一般性:
- この方法は、惑星の逆行検出に限定されませんが、次のような360度環(または周期的)データの実際の傾向の変化が検出される他のシナリオにも適用されます。
- 風向データの風向の変化。
- モーター角度センサーデータの回転方向の変化。
- 通信システムにおける位相検出の極端な値。
- この方法は、惑星の逆行検出に限定されませんが、次のような360度環(または周期的)データの実際の傾向の変化が検出される他のシナリオにも適用されます。
-
制限:
- 非常に高い変化やデータのまま性の場合、DIFF()と固定のしきい値に依存するだけでは十分に堅牢ではない場合があります。これらの場合、より複雑な円形統計法を考慮する必要がある場合があります。または、分析前に角度データがデカルト座標((cos(角度)、sin(角度))に変換されます。
要約します
Pandasのdiff()、Shift()関数を組み合わせ、慎重に設計された論理判断を組み合わせることで、360度の環状座標データで逆動きを効率的かつ正確に検出できます。重要なのは、絶対差のしきい値を導入することです。これは、実際の動きのトレンドの変化から座標の包囲によって引き起こされる数値ジャンプを効果的に区別することです。この方法は、惑星逆行などの定期的な境界特性を持つ時系列データを処理するために使用できます。
以上がパンダを使用して、360度のリング座標データの逆動きを正確に検出しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undress AI Tool
脱衣画像を無料で

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Stock Market GPT
AIを活用した投資調査により賢明な意思決定を実現

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

Pipinstall-rrequirements.txtを実行して、依存関係パッケージをインストールします。競合を回避し、ファイルパスが正しく、PIPが更新されていることを確認し、必要に応じて-no-depsや-userなどのオプションを使用して、必要に応じてインストール動作を調整することを確認して、最初に仮想環境を作成およびアクティブ化することをお勧めします。

このチュートリアルは、PEFT LORAアダプターをベースモデルと効率的にマージして、完全に独立したモデルを生成する方法を詳しく説明しています。この記事は、トランスフォーマーを直接使用することは間違っていることを指摘しています。Automodelはアダプターをロードし、重みを手動でマージし、PEFTライブラリでMerge_and_unloadメソッドを使用する正しいプロセスを提供します。さらに、このチュートリアルでは、単語セグメントターを扱うことの重要性も強調し、PEFTバージョンの互換性の問題とソリューションについて説明しています。

theargparsemoduleisttherecommendedwayto handlecommand-lineargumentsinpython、robustparsing、typevalidation、helpmessages、およびerrorhandling; ousesys.argvforsimplecasesrequiringminimalsetup。

Pythonは、Pythonのシンプルで強力なテストツールです。インストール後、命名ルールに従ってテストファイルが自動的に発見されます。アサーションテストのためにtest_から始まる関数を書き込み、 @pytest.fixtureを使用して再利用可能なテストデータを作成し、pytest.raisesを使用して例外を確認し、指定されたテストと複数のコマンドラインオプションをサポートし、テスト効率を改善します。

この記事の目的は、PythonとNumpyの浮動小数点数の計算精度が不十分であるという一般的な問題を調査し、その根本原因は標準64ビットの浮動小数点数の表現制限にあることを説明しています。より高い精度を必要とするシナリオを計算するために、この記事では、MPMATH、Sympy、GMPYなどの高精度数学ライブラリの使用方法、機能、および適用可能なシナリオを導入して比較し、読者が複雑な精度のニーズを解決するための適切なツールを選択できるようにします。

PYPDF2、PDFPlumber、およびFPDFは、PDFを処理するPythonのコアライブラリです。 pypdf2を使用して、pdfreaderを介してページを読み取り、extract_text()を呼び出してコンテンツを取得するなど、テキスト抽出、マージ、分割、暗号化を実行します。 PDFPlumberは、レイアウトテキストの抽出とテーブル認識を保持するのに適しており、Extract_Tables()をサポートしてテーブルデータを正確にキャプチャします。 FPDF(推奨されるFPDF2)はPDFを生成するために使用され、ドキュメントが構築され、add_page()、set_font()、およびcell()を介して出力されます。 PDFSをマージすると、PDFWriterのAppend()メソッドは複数のファイルを統合できます

@ContextManagerFromContextLibandDefineAgeneratoratoraturationは、sexactlyOnceを使用します

現在の時間を取得することは、DateTimeモジュールを介してPythonで実装できます。 1。DateTime.Now()を使用してローカル現在の時間を取得します。 Depcated Utcnow()、および日常業務は、datetime.now()とフォーマットされた文字列を組み合わせてニーズを満たすことができます。
