2016-06-26 4 views
1

私は今まで米国で起こった竜巻にある巨大なデータを分析しなければならない1つのプロジェクトを行っています。 Pythonがデータ解析に適しているので、私はそれを選択しました。しかし、私は明確化が必要ないくつかの質問があります: 1.私はデータ分析のためにパンダを使用しています。私が今まで行ったことは、すべての.csvファイルを含む1つの大きなデータフレーム(1GBの.csvファイル)を作成したことです。さて、私は2000年に起こった死亡者の総数を計算したいと考えてみましょう。クエリは結果を取得していますが、時間がかかります。すべてのデータをデータフレームに格納し、データをフェッチするとよいですか?あるいは、他のより速いアプローチがありますか? 2.別のアプローチは、ファイル全体のjson文字列を作成し、そのjson文字列を照会します。私はこのアプローチで何もしていない。いいですか?データを取得してPythonで解析するアプローチ

ありがとうございます。

答えて

0

パンダにはメモリ使用に関するいくつかの制限があります。メモリ割り当てが怠惰であるため、これも一般的なPythonの問題です。したがって、あなたの記憶が十分でないとすぐに、それは汚れます。

ここに2つのドメインがあります。 1.メモリの節約、2.時間の最適化。

  1. メモリ効率のために:あなたが考えることができるもの

    このlinkをお読みください。 1.1すべてのデータを一度に必要とする場合(たとえば、集約統計(sum([all columns]))には、データフレーム内の不要な列を注意深く削除するか、代わりにpandas以外のものに切り替える.hdf5、pyrocksdb、leveldb ...)

  2. いくつかの操作では、pandasデータフレームが正しく設定されています。インデックススキーマを確認してください。 。 2.2パンダ+ Pythonスクリプトよりもかなり高速になりますいくつかのタスクのためにnumpyのベクトルの方法を使用して。

  3. は、私は個人的にも、パンダのように+のSQL Liteの混合アプローチを使用して、ミニバッチ処理よりも非常に良い経験をしたことトゥイーン(ポイント1を参照)。

-1

代わりのパンダあなたはsframeライブラリを使用することができます。 https://dato.com/products/create/docs/generated/graphlab.SFrame.html

sframeライブラリーは、あなたが速くロードし、簡単にインデックス可能であるバイナリ形式に保存することができます。 Sframeを使用すると、使用可能なRAMよりもはるかに大きいデータセットを扱うことができます。これは、バッチやページデータをディスクに適用するためです。ライブラリーは、複数のコアを効果的に活用して、結合やその他の操作を高速化することができます。私の経験に基づいて、使用例にとってははるかに高速でなければなりません。

シンタックスはpandasよりもあまり便利ではありませんが、機能は似ており、sframesをpandasデータフレームに変換するto_dataframe()演算子があります。

pip install sframe 

は、CSVファイルを読み込むためにread_csvのAPIを使用することができ、その後、バイナリ形式に保存するAPIを保存して、あなたはロードするために、ロードAPIを使用することができます。

それをインストールするにはバイナリ形式。これはすべて上のリンクでカバーされています。

関連する問題