私はパンダを学びながら、この質問に対する答えを何ヶ月もパズルで解こうとしました。私は日常業務にSASを使用しており、SASのコア外サポートには最適です。ただし、SASは、他の多くの理由から、ソフトウェアとしては恐ろしいものです。
ある日SASの使用をpythonとpandasに置き換えたいと思っていますが、現在、大規模なデータセットのアウトオブコアワークフローが不足しています。分散ネットワークを必要とする「ビッグデータ」について話しているのではなく、ファイルが大きすぎてメモリに収まりますが、ハードドライブに収まるほど小さいです。
最初に考えたのは、 HDFStore
を使用して大きなデータセットをディスクに保持し、必要な部分だけをデータフレームにプルすることです。分析用。他の人は、MongoDBをより使いやすい代替手段として言及しています。私の質問は次のとおりです。
次のことを実現するためのベストプラクティスのワークフローは何ですか。
- フラットファイルを永続的なディスク上のデータベース構造にロードする
- そのデータベースにクエリを実行してデータを取得し、パンダのデータ構造にフィードする
- パンダのピースを操作した後にデータベースを更新する
実際の例をいただければ幸いです。 、特に「大きなデータ」でパンダを使用する人から。
編集-これをどのように機能させたいかの例:
- 大きなフラットを繰り返しインポートします-ファイルを作成し、永続的なディスク上のデータベース構造に保存します。これらのファイルは通常、大きすぎてメモリに収まりません。
- パンダを使用するために、メモリに収まるこのデータのサブセット(通常は一度に数列)を読み取りたいと思います。
- 選択した列に対してさまざまな操作を実行して、新しい列を作成します。
- 次に、これらの新しい列をデータベース構造に追加する必要があります。
これらの手順を実行するためのベストプラクティスの方法を見つけようとしています。パンダとパイテーブルに関するリンクを読むと、新しい列を追加することが問題になる可能性があるようです。
編集-ジェフの質問に具体的に答える:
- 私は消費者を構築しています信用リスクモデル。データの種類には、電話、SSN、住所の特性、プロパティ値、犯罪記録、破産などの軽蔑的な情報が含まれます。私が毎日使用するデータセットには、混合データタイプの平均で約1,000〜2,000のフィールドがあります。数値データと文字データの両方の連続変数、名目変数、順序変数。行を追加することはめったにありませんが、新しい列を作成する多くの操作を実行します。
- 通常の操作では、条件付きロジックを使用して複数の列を組み合わせて新しい複合を作成します。たとえば、
if var1> 2 then newvar = "A" elif var2 = 4 then newvar = "B"
。これらの操作の結果は、データセット内のすべてのレコードの新しい列になります。 - 最後に、これらの新しい列をディスク上のデータ構造に追加したいと思います。 d手順2を繰り返し、クロス集計と記述統計を使用してデータを調べ、モデルとの興味深い直感的な関係を見つけようとします。
- 通常、プロジェクトファイルは約1GBです。ファイルは、行がコンシューマーデータのレコードで構成されるように編成されています。各行には、すべてのレコードに対して同じ数の列があります。これは常に当てはまります。
- 新しい列を作成するときに行ごとにサブセット化することは非常にまれです。ただし、レポートを作成するときや説明を生成するときに行ごとにサブセット化することは非常に一般的です。統計学。たとえば、小売クレジットカードなど、特定の業種の単純な頻度を作成したい場合があります。これを行うには、レポートする列に加えて、基幹業務=小売のレコードのみを選択します。ただし、新しい列を作成するときは、データのすべての行と、操作に必要な列のみをプルします。
- モデリングプロセスでは、すべての列を分析し、結果変数との興味深い関係を探す必要があります。そして、それらの関係を説明する新しい複合列を作成します。私が探索する列は通常、小さなセットで行われます。たとえば、プロパティ値を処理する20列のセットに焦点を当て、それらがローンのデフォルトにどのように関連するかを観察します。それらが調査され、新しい列が作成されたら、次に別の列のグループ、たとえば大学教育に移動し、プロセスを繰り返します。私が行っているのは、データと結果の関係を説明する候補変数を作成することです。このプロセスの最後に、これらの複合列から方程式を作成するいくつかの学習手法を適用します。
データセットに行を追加することはめったにありません。ほとんどの場合、新しい列(統計/機械学習用語の変数または機能)を作成します。