3

ユーザーがさまざまな分布形式を選択して農業生産量データをモデル化できるようにする Python デスクトップ アプリケーションを作成しています。私は時系列の農業データ (100 万行近く) を SQLite データベースに保存しています (ただし、誰かがより良い選択を知っている場合、これは確定していません)。イリノイ州で 1990 年から 2010 年までのトウモロコシの収量など、ユーザーがデータを選択したら、ドロップダウンから分布形式を選択してもらいます。次に、私の関数は分布をデータに当てはめ、その当てはめられた分布形式から引き出された 10,000 ポイントを Numpy 配列で出力します。このデータは、プログラムの実行中に一時的なものにしたいと考えています。

効率的にするために、指定された地域と分布に対して、これを適合させ、その後の数値の描画を 1 回だけ行いたいと思います。私は Python で一時ファイルを調査してきましたが、多くの異なる Numpy 配列を保存するための最良の方法であるかどうかはわかりません。PyTables も興味深いアプローチのようで、Numpy と互換性があるようですが、一時データの処理に適しているかどうかはわかりません。最近では、MongoDB のような SQL ソリューションも非常に人気があるようには見えません。これは、履歴書作成の観点からも興味深いものです。

編集: 以下のコメントを読んで調査した後、PyTables を使用する予定ですが、これに取り組むための最良の方法を見つけようとしています。以下のようなテーブルを作成することは可能ですか? Float32Col の代わりに scikits 時系列クラスの createTimeSeriesTable() を使用できますか?下の Float32Col はデータを保持します。または、この問題に対処するためのより良い方法はありますか?

class Yield(IsDescription):
    geography_id = UInt16Col()
    data = Float32Col(shape=(50, 1)) # for 50 years of data

この問題に関するヘルプは大歓迎です。

4

1 に答える 1

1

一時データのユースケースは何ですか? 一度にすべてを読み取るつもりですか (そして、サブセットだけを読み取りたくないのですか)?

その場合は、配列を一時ファイルに保存するだけです (たとえばnumpy.savepickleバイナリ プロトコルを使用して)。その場合、手の込んだソリューションは必要ありません。

余談ですが、元の時系列データを保存するには、SQLite よりも PyTables を強くお勧めします。

あなたがしているように聞こえることに基づいて、リレーショナル データベースの「リレーショナル」部分 (結合など) は必要ありません。テーブルを結合したり関連付けたりする必要がなく、高速で単純なクエリだけが必要で、メモリ内のデータを numpy 配列として必要とする場合、PyTables は優れたオプションです。PyTables は HDF を使用してデータを格納します。これは、SQLite データベースよりもディスク上ではるかにコンパクトにすることができます。PyTables は、データの大きなチャンクを numpy 配列としてメモリにロードする場合もかなり高速です。

于 2012-04-09T20:59:33.303 に答える