問題タブ [pytables]

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 に答える
750 参照

python - PyTablesの問題 - テーブルのサブセットを繰り返し処理すると異なる結果

私はPyTablesを初めて使用し、エージェントベースのモデリングシミュレーションから生成され、HDF5に保存されたデータを処理するために使用することを検討しています. 私は 39 MB のテスト ファイルを使って作業していますが、何かおかしいと感じています。テーブルのレイアウトは次のとおりです。

Pythonでアクセスする方法は次のとおりです。

ここで、物事が奇妙になります。

テーブル全体を反復処理すると値が台無しになる理由がわかりませんが、行セット全体の小さなサブセットを取得するとわかりません。これはライブラリの使用方法に誤りがあると確信しているため、この問題に関するヘルプは非常に高く評価されます。

0 投票する
4 に答える
3263 参照

java - Python、PyTables、Java - すべてを結びつける

一言で言えば質問

Python と Java をうまく連携させる最善の方法は何ですか?

より詳しい説明

私はやや複雑な状況にあります。写真と言葉の両方で説明できるように最善を尽くします。現在のシステム アーキテクチャは次のとおりです。

現在のシステム アーキテクチャ

Java で記述されたエージェントベースのモデリング シミュレーションがあります。ローカルで CSV ファイルに書き込むか、Java サーバーへの接続を介してリモートでHDF5に書き込むオプションがあります。ファイル。シミュレーションを実行するたびに、ギガバイトのデータが吐き出され、シミュレーションを何十回も実行します。いくつかの傾向 (例: 最小、最大、中央値、平均) を確認するために、同じシナリオ (異なるランダム シードを使用) の複数の実行にわたって集計できる必要があります。ご想像のとおり、これらすべての CSV ファイルを移動しようとするのは悪夢です。実行ごとに複数のファイルが生成されます。前述のように、そのうちのいくつかは巨大です。これが、私たちが HDF5 ソリューションに移行しようとしてきた理由です。HDF5 ソリューションでは、スタディのすべてのデータが、数十のプレーン テキスト ファイルに分散するのではなく、1 か所に保存されます。さらに、これはバイナリ ファイル形式であるため、圧縮されていない CSVS と比較して大幅にスペースを節約できるはずです。

図が示すように、シミュレーションからの生の出力データに対して行う現在の後処理も Java で行われ、ローカル出力によって生成された CSV ファイルを読み込みます。この後処理モジュールは、JFreeChart を使用して、シミュレーションに関連するいくつかのチャートとグラフを作成します。

問題

前に触れたように、CSV は本当に受け入れがたいものであり、シミュレーションからますます多くのデータを生成するにつれてうまくスケーリングできません。さらに、後処理コードは必要以上のことを行っており、基本的に非常に貧弱な人間のリレーショナル データベースの作業を実行しています (外部キー (一意のエージェント IDこのシステムでは、他の方法でデータを視覚化することも困難です (たとえば、Prefuse、Processing、JMonkeyEngine が生データのサブセットを取得して、MatLab または SPSS で操作します)。

解決?

私のグループは、クロス テーブル結合を実行するだけでなく、データをフィルター処理してクエリを実行する方法が本当に必要であると判断しました。これが一度だけ書き込み、何度も読み取る状況であることを考えると、実際のリレーショナル データベースのオーバーヘッドはまったく必要ありません。代わりに、HDF5 ファイルのフロント エンドを改善する何らかの方法が必要です。HDF5 ファイルで XQuery をクエリ言語として使用する方法を説明している論文など、これに関するいくつかの論文を見つけましたが、その論文では、XQuery/XPath からネイティブの HDF5 呼び出しに変換するコンパイラを作成する必要があり、私たちのニーズをはるかに超えていると説明されています。PyTablesと入力します。それはまさに私たちが必要とすることをしているようです (Python リスト内包表記またはカーネル内 (C レベル) 検索のいずれかを使用して、データを照会する 2 つの異なる方法を提供します。

私が想定している提案されたアーキテクチャは次のとおりです。 想定されるアーキテクチャ

どうすればよいかよくわかりませんが、クエリ用に作成される Python コードと、HDF5 ファイルを提供する Java コード、およびデータの後処理を行う Java コードをリンクすることです。明らかに、暗黙的にクエリを実行している後処理コードの多くを書き直し、代わりに優れた PyTable にこれをよりエレガントに実行させたいと考えています。

Java/Python オプション

簡単な Google 検索で Java と Python の間の通信に関するいくつかのオプションが見つかりますが、私はこのトピックに慣れていないので、提案されたアーキテクチャーに関する実際の専門知識と批判を探しています。大規模な .h5 ファイルをネットワーク経由で転送する必要がないように、Python プロセスは Datahose と同じマシンで実行する必要があるように思われます。 Pyroは興味深い選択のようです。経験のある人はいますか?

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

python - Python、PyTables - カーネル内検索を利用する

複数のグループを持つ HDF5 ファイルがあり、各グループには 2,500 万行以上のデータ セットが含まれています。シミュレーションの各時間ステップで、各エージェントはその時間ステップで感知した他のエージェントを出力します。シナリオには約 2000 のエージェントがあり、数千のタイム ステップがあります。出力の O(n^2) の性質が膨大な数の行を説明しています。

私が計算したいのは、カテゴリ別のユニークな目撃数です。たとえば、エージェントは赤、青、緑のいずれかの側に属します。j行 i、列 j がカテゴリ i の少なくとも 1 つのエージェントによって感知されたカテゴリのエージェントの数である 2 次元のテーブルを作成したいと考えています。(このコード例では側面を使用していますが、エージェントを他の方法で分類することもできます。たとえば、エージェントが持つ武器や運ぶセンサーによって分類できます。)

出力テーブルの例を次に示します。シミュレーションは青/青の感覚を出力しないことに注意してください。これは、大量のスペースが必要であり、それらには関心がないためです。緑緑も同様)

列は

  1. tick - 時間ステップ
  2. ensingAgentId - センシングを行うエージェントの ID
  3. sensedAgentId - 感知されているエージェントの ID
  4. detRange - 2 つのエージェント間のメートル単位の範囲
  5. senseType - 行われたセンシングのタイプの列挙型

これを達成するために現在使用しているコードは次のとおりです。

注: 私は Java のバックグラウンドを持っているので、これが Pythonic でない場合は申し訳ありません。これを指摘して、このコードを改善する方法を提案してください。私は Python にもっと習熟したいと思っています。

現在、これは非常に時間がかかります。この反復とメンバーシップ チェックを行うのに約 50 秒かかります。これは、メンバーシップ基準の最も制限されたセットを使用した場合です (他の検出タイプには、反復する行がさらに多くあります)。

私の質問は、作業を Python からカーネル内検索クエリに移動することは可能ですか? もしそうなら、どのように?私が見逃している明白なスピードアップはありますか? 一連の実行 (~30) の実行ごとに、および複数の基準セット (~5) に対してこの関数を実行できる必要があるため、これを高速化できれば素晴らしいことです。

最後のメモ: psyco を使用してみましたが、ほとんど違いはありませんでした。

0 投票する
2 に答える
1632 参照

hdf5 - pyTablesを使用して作成されたテーブルのWindows上のhdfビューア?

viTablesはPython2.5でのみ機能するようです。HDFViewをダウンロードしましたが、このチュートリアルに従って作成したテーブルを開こうとすると、次のエラーメッセージが表示されます。

HDFViewを機能させるためのアイデアはありますか?フォーマットをより一般的にするためにPythonのpyTablesを使用しているときに行う必要があることはありますか?他に良いHDFビューアはありますか?

ところで、私はPyTablesを発見したばかりで、本当に興奮しています。

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

mysql - 5,000 万ノード階層以上

非常にスケーラブルな階層型データストアを実現するための優れたアイデアを持っている人はいますか? 迅速な追加と、サイトの多くのユーザーが階層内の特定のノードの下にあるノードの数に関するレポートを要求する機能が必要です。

これがシナリオです....

1 時間ごとに非常に多くのノードが追加されます。1 時間あたり 100 万ノードを追加したいとします。それらは階層全体に現れる可能性があります。理想的には数十億ノード規模ですが、目標としては 5,000 万ノードです。特定のポイントより下のノードの数をいつでも計算できる必要があり、多くの人が同時にこれを行う可能性があります。これは、多くのユーザー (おそらく 100,000 人の同時接続ユーザー) が一度に要求するレポートと考えてください。特定のノードの下にあるすべてのノードを要求する場合があります。

データベースは、隣接リスト (迅速な挿入、遅いレポート) としてフォーマットされたフラット テーブルから読み取る単一プロセスによって作成されるか、データストアが存在する場合に Web サイトのユーザーが階層を直接更新する標準設計のいずれかです。作成される膨大な数のノードに対処するため。

Treebeard と MySQL を使用して、これを Django に既に実装しています。私はマテリアライズド パス メソッドを使用していますが、これはかなり優れていますが、比較して超高速が必要です。30,000 ノードのデータストアを使用して、2 年前のラップトップで実行して、ツリーの下部で 1 分あたり 120 回の挿入を達成しています。私は明らかにこれ以上のものを望んでおり、おそらく使用するより良いデータストアがあると思います. PyTables、BigTable、MongoDB、または Cassandra でしょうか?

Python/Django への簡単な統合は良いことですが、必要に応じてシステムのこの部分をいつでも別の言語で書くことができます。フラットなデータストアから読み出された単一のプロセスを使用して、レポートに最適な非常に効率的な階層データストアに処理された場合、トランザクションの必要性を否定する同時実行性の問題は発生しないと思います。

とにかく、始めるには十分な情報です。これは適切なテクノロジーを使えば簡単ですか?

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

python - 変数名として保存されたcolnamesを使用してPyTablesテーブルを抽出する最も効率的な方法

次のコードは、必要な機能を提供します。ただし、64000行の200個の変数を含むテーブルの場合は10秒より少し長くかかります。列名と一致する変数名前空間を作成するためのより効率的な方法はありますか?

コードは分析環境内で実行され、エンドユーザーの待機時間の大部分を表します。したがって、これがPyTable列名に基づいて動的に名前空間を確立するための最良の方法であることを確認したいと思います。

0 投票する
2 に答える
378 参照

python - PyTable 列の順序

特定の列順序で PyTable を作成する方法はありますか?

デフォルトでは、createTable() の呼び出しのスキーマ定義にディクショナリまたはクラスの両方を使用する場合、列はアルファベット順に並べられます。特定の順序を確立し、numpy.genfromtxt() を使用してテキストからデータを読み取って保存する必要があります。残念ながら、私のテキスト ファイルには、ファイル データと同じように変数名が含まれていません。

この時点で、私の列はアルファベット順に並べられており、データはファイル レイアウトに従って並べられているという点でずれています。また、pyTable で同じ順序を維持することが望ましいです (必須ではありません)。

ありがとう

0 投票する
6 に答える
3404 参照

python - それほど大きくないファイルのPytablesとCSV

私は最近Pytablesに出くわし、それがとてもクールだと感じました。非常に大きなデータセットの場合、csv形式よりも優れていることは明らかです。Pythonを使用していくつかのシミュレーションを実行しています。出力はそれほど大きくありません。たとえば、200列と2000行です。

誰かが両方の経験がある場合、それほど大きくないそのようなデータセットに対して、長期的にはどちらの形式がより便利であるかを提案できますか。Pytablesにはデータ操作機能とVitablesを使用したデータの参照機能がありますが、ブラウザーには、CSVに使用できるExcelなどの機能はあまりありません。同様に、主にPythonで作業している場合、データのインポートとエクスポートにどちらかが優れていると思いますか?ファイル編成の点でもう1つ便利ですか?このような問題についてのコメントは役に立ちます。

ありがとう。

0 投票する
2 に答える
997 参照

python - 「オブジェクト」の保存

PyTables は Python オブジェクトの保存をサポートしていますか? このようなもの :

もちろん、これを行おうとするとエラーが発生します...オブジェクトの配列を適切に保存するにはどうすればよいですか?それは可能ですか? ありがとう

0 投票する
3 に答える
6205 参照

python - HDF5 : NumPy データの保存

NumPy を使用したとき、そのデータをネイティブ形式 *.npy で保存しました。それは非常に速く、このようないくつかの利点を私に与えました

  • C コードから *.npy を単純なバイナリ データとして読み取ることができました (つまり、*.npy は C 構造とバイナリ互換です)。

今、私は HDF5 (現時点では PyTables) を扱っています。チュートリアルで読んだように、彼らは NumPy シリアライザーを使用して NumPy データを保存しているので、単純な *.npy ファイルから C からこれらのデータを読み取ることができますか?

HDF5 の numpy は C 構造体ともバイナリ互換ですか?

更新日:

hdf5から読み取るmatlabクライアントがありますが、* .npyからバイナリデータを読み取る方が数倍高速であるため、C++からhdf5を読み取りたくないので、C++からhdf5を読み取る必要があります(バイナリ互換性)だから私はすでにデータを転送するための2つの方法を使用しています-* .npy(C++からバイトとして読み取り、Pythonからネイティブに)およびhdf5(Matlabからのアクセス)そして、可能であれば、唯一の方法であるhdf5を使用したいのですが、これを行うために私は持っていますC++構造でhdf5をバイナリ互換にする方法を見つけるには、助けてください.hdf5で圧縮をオフにする方法や、C++構造でhdf5をバイナリ互換にする方法があれば、それについてどこで読めるか教えてください...