Pandas vs. SQL — パート 4: Pandas の方が便利
tl;dr:この投稿では、Pandas と SQL を 3 つの軸の 3 つ目である利便性で比較します。Pandas データフレーム データ モデルがデータ サイエンスと機械学習のユース ケースでより便利になる 6 つの方法について説明します。
Pandas と SQL の壮大な戦いの第 4 回目では、データ サイエンスと機械学習において Pandas が SQL よりも便利であることを説明します。Pandas は、データ サイエンティストがデータ サイエンティストのために設計したものであり、オープンソースのデータ サイエンス コミュニティによって熱心に貢献された何千もの改善の恩恵を受けています。だから、それがぴったりであることは驚くことではありません!
始める前に、以前の Pandas と SQL の比較を見逃した方は、パート 1: The Food Court and the Michelin-Style Restaurant、Part 2: Pandas Is More Concise、およびPart 3: Pandas Is More をご覧ください。フレキシブル。以前の投稿では、データフレームデータ モデルとデータフレーム代数の比較に焦点を当てていましたが、この投稿では、データフレームのエルゴノミクス、特にデータフレームの使用方法に焦点を当てます。
簡単に検索できるように、Pandas データフレームがリレーショナル/SQL の対応物よりも便利な複数の方法の便利なリストを次に示します。
- Pandas では、作業を進めながらクエリを段階的に作成できます。SQL ではできません。
- Pandas では、中間結果の操作と名前付けは簡単です。SQL ではより困難です。
- Pandas では、データをすばやく把握するのは簡単です。SQL では、はるかに困難です。
- Pandas は視覚化をネイティブでサポートしています。SQL はそうではありません。
- Pandas を使用すると、機械学習を簡単に実行できます。SQL はそうではありません。
- Pandas は、ユーザーが中間ステップの正しさを検証できるように順序を保持し、ユーザーが順序どおりに操作できるようにします。SQL はそうではありません。
1. Pandas では、クエリを段階的に作成できます。SQL ではできません。
Pandas と SQL の重要な違いは、Pandas ではユーザーが他の操作の上に操作を段階的に重ねて、より複雑なクエリを作成できることです。同時に、ユーザーはこれらのクエリ フラグメントの中間結果を調べて、処理が進むにつれて正確性を検証することができます。Pandas を使えばデバッグは簡単です。
したがって、データセットで、Geary Street に対応する許可に注目したいとします。次のように、データセットのサブセットを抽出できます。
私たちが気づいたかもしれないことの 1 つは、ギアリーが多くの近隣にまたがっており、ここでは としてエンコードされていること'Neighborhoods - Analysis Boundaries'
です。この列だけを調べたい (そして残りの 42 列を削除したい) と仮定すると、前の式の最後に'Neighborhoods - Analysis Boundaries'
句を追加するだけで済みます。[['Neighborhoods - Analysis Boundaries']]
これはたくさんの行です: 1966. 次に、最後の 2 つのステップとして、許可が最も多いギアリーの地域を特定したいとします。'sort_values'
これを行う 1 つの方法は、 a の後に aを追加すること'value_counts'
です。
興味深いことに、一番上の地区はテンダーロインで、次にアウター リッチモンドが続きます。この一連の操作は確かに SQL で表現できますが、はるかに手間がかかることに注意してください。SQL クエリの最後に単純に演算子を追加することはできません。変更を加える必要があるクエリ内の特定の場所があります。たとえば、表示される列を変更するにSELECT
は、早い段階でクエリの一部を変更する必要があります。代わりに、Pandas を使用すると、操作的に (または命令的に) 考えることができ、中間結果を調べながら、最終結果を段階的に構築できます。
2. Pandas では、中間結果の操作と命名は簡単です。SQL ではより困難です。
Pandas は、実際のプログラミング言語である Python に組み込まれているため、データフレームを操作するための使い慣れたプログラムの慣用句の多くを取り入れています。特に、データフレーム式を変数に割り当てることができます。これらの変数は、操作したり、他の変数に割り当てたりすることができます。
簡単な例を使って説明します。このデータセットはデータ クリーニング チャレンジからのものであるため、null 値が多数あると思われるとします。次を使用して、列ごとにいくつあるかを確認できます。
それは多くの null 値です! データセットのクリーン バージョンを作成し、null 値が多すぎる列を削除し、しきい値を 190000 個の非 null 値に設定するとします。(全体のデータセットには約 199000 行あります。)
うわー — 列の数が 43 から 13 に減りました。ここで見たように、標準のプログラムによる変数割り当てを使用して、新しい変数を簡単に定義することができまし'sf_permits_cleaned'
た (前の変数を作成したのと同じように)。'missing_values_count'
このアプローチは、プログラマーにとって自然です。SQL では、ビューを介して同様の効果を達成できますが、ビューの定義とそれらの操作は直感的ではなく、より面倒です。
3. Pandas では、データを簡単に把握できます。SQL では、はるかに困難です。
Pandas は、データフレームのデータとメタデータを理解する簡単な方法を提供します。単に変数名を使用してデータフレームを印刷する場合、または関数を使用する場合、この例は既に見ました'head/tail()'
。便宜上、画面に収まるように、'...'
ユーザーがデータの概要を把握しやすいように、特定の行と列を非表示にしています。
列とその型の概要を調べたい場合、Pandas が提供する便利な関数の 1 つ'info()'
に があります。これは、データセットの列、その型、および null 値の数を一覧表示します。この関数を使用して、作成したばかりのデータフレームを検査できます。
したがって、null 値を含む唯一の列は説明列のようです。他のすべての列は完全に入力されています。
数値列を対象とするもう 1 つの便利な Pandas 関数は です'describe()'
。これは、これらの列の便利な要約を、カウント、平均、標準偏差、および分位数とともに提供します。
うーん、通り番号 0 があるようです。
残念ながら、SQL には、データセットの形状と特性を理解するための同様の便利さはありません。この目的のためにカスタム クエリを作成する必要があります。前の例では、このクエリの長さは数値列の数に比例します。
4. Pandas は視覚化をネイティブでサポートしています。SQL はそうではありません。
数字の表の分析は、これまでのところしか得られません。多くの場合、必要なのは、データフレーム内の情報を視覚的に理解する方法です。別の視覚化ツールまたは BI (ビジネス インテリジェンス) ツールにデータを読み込む必要がある SQL とは異なり、Pandas はライブラリ内に組み込みの視覚化サポートを提供します。たとえば、単純に呼び出して、さまざまな許可'plot()'
の棒グラフを表示できます。'Current Status'
許可の大部分は、完了済み、発行済み、提出済みのカテゴリにあり、その他のカテゴリには少数が含まれているようです。
この機能の威力は明らかです。SQL データベースとは異なり、ビジュアライゼーションを生成したい場合にライブラリを離れる必要はありません。すぐに実行できます。ビジュアライゼーション エクスペリエンスを「パワーアップ」したい場合は、Matplotlib、seaborn、およびaltairなど、pandas と緊密に統合されたビジュアライゼーション ライブラリが多数あります。また、私のように怠け者で、視覚化を生成するためのコードをまったく書きたくない場合は、Pandas ネイティブの視覚化推奨ライブラリであるLuxを使用して、すべてデータセットに合わせて視覚化を自動的に生成できます。 . ルクスの詳細については、こちらをご覧ください。
5. Pandas は機械学習を容易にします。SQL はそうではありません。
機械学習はデータ サイエンスの重要な要素であり、ユーザーは画像、動画、テキストなどの非構造化データを理解できるだけでなく、将来について予測することもできます。Pandas はデータ サイエンス エコシステムに緊密に統合されているため、 scikit-learn、pytorch、numpyなどの一般的なライブラリを含む機械学習ライブラリとうまく連携することは当然のことです。ここでは、比較的新しい自然言語処理ライブラリであるspaCyライブラリを使用して、データセット内のテキスト列を理解します。SpaCy は、単語の埋め込み、名前付きエンティティの認識、品詞のタグ付け、分類などを実行するためのさまざまな単語の事前トレーニング済みモデルを提供します。spaCy をインストールするには、次のコマンドを実行します。
インストールが完了したので、データセット内の各許可申請 (行) に含まれる活動の種類 (解体、撤去、交換など) を理解したいとします。これは前もって理解するのは難しいですが、テキスト フィールドの中に埋もれています'Description'
。パッケージを使用して、このフィールドで言及されている動詞のリストを抽出しましょう。その一環として、最初に spaCy の'en_core_web_md'
モデルをロードし、次にモデルを使用して説明のトークン化で各動詞を抽出し、次のように配列に格納してフォローアップします。
したがって、上で見たように、モデルは動詞を抽出するという妥当な仕事をしますが、たとえいくつか (インストールなど) を見逃していたとしてもです。大規模な事前トレーニング済みモデル (トランスフォーマー モデルなど)の可用性が高まるにつれて、そのようなモデルがpandas内の日常のデータ処理にさらに統合されることを期待しています。
SQL データベースへの機械学習の統合は非常に困難です。一部のデータベースは機械学習固有の構成要素 (BigQuery ML など) を提供しますが、ユーザーが達成できることは限られており、きめ細かい制御はできません。別の厄介なアプローチは、UDF を使用して機械学習を行うことです。多くの場合、ユーザーは機械学習を実行するためにデータベース コンテキストの外部にデータをエクスポートします。
6. Pandas は、ユーザーが中間ステップの正しさを検証できるように順序を保持し、ユーザーが順序どおりに操作できるようにします。SQL はそうではありません。
パンダは秩序を保ちます。これは、より複雑なクエリ式を構築しているため、デバッグと検証にとって重要です。動詞の spaCy 抽出後の新しい例を続けます。この'explode'
関数を使用して、前のデータフレームの個々の動詞を動詞ごとに 1 行ずつ複数の行に展開したいとします。次のように簡単にできます。
元の行 1 に対応する 3 つの行があり、それぞれの動詞が抽出されていることに注意してください。この順序の保存により、このステップの正確性を簡単に検証できます。SQL データベースを使用すると、順序が保証されないため、これは非常に難しくなります。そのため、出力全体を調べて、特定の行がどこで終了したかを確認する必要があります (または、特定の出力順序を強制する句を追加する必要があります)。ORDER BY
結論
この投稿では、エンドユーザーの観点から、Pandas が SQL よりも便利なさまざまな方法について説明しました。これには、順序の保存、インクリメンタル コンポジション、ネーミングと操作、および途中での検査によって、Pandas クエリを正しく構築しやすくすることが含まれます。これには、視覚化や機械学習など、他のデータ サイエンスやデータ分析のニーズとの統合も含まれます。Pandas を使用すると、ユーザーは Pandas 内で完全に視覚化して予測モデリングを実行できますが、出力を他の一般的な視覚化および機械学習ライブラリに接続するためのフックも提供されます。パッケージ、特に PyData エコシステム内。最終的に、Pandas は本格的なプログラミング言語である Python 内にあり、その構成要素のすべての力を継承しています。
Pandas が SQL よりも便利である、またはその逆の例を他に思いつくことがあれば、ぜひ聞かせてください! TwitterやLinkedInでフォローして、 Pandas / Python / データ サイエンスのコンテンツをさらにご覧ください。