MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

パンダのSQLクエリスタイルでデータのサブセットを選択するにはどうすればよいですか?


はじめに

この投稿では、Pandasを使用してSQLスタイルのフィルタリングを使用してデータ分析を実行する方法を紹介します。企業のデータのほとんどは、SQLを取得して操作する必要があるデータベースに保存されています。たとえば、Oracle、IBM、Microsoftのように、独自のSQL実装を備えた独自のデータベースを持っている企業があります。

データは常にCSVファイルに保存されるとは限らないため、データサイエンティストはキャリアのある段階でSQLに対処する必要があります。会社のデータの大部分はOracleに保存されているため、個人的にはOracleを使用することを好みます。

シナリオ– 1 以下の条件で、映画データセットからすべての映画を検索するタスクが与えられたとします。

  • 映画の言語は英語(en)またはスペイン語(es)のいずれかである必要があります。
  • 映画の人気は500から1000の間でなければなりません。
  • 映画のステータスを公開する必要があります。
  • 投票数は5000を超える必要があります。上記のシナリオでは、SQLステートメントは次のようになります。
SELECT
FROM WHERE
title AS movie_title
,original_language AS movie_language
,popularityAS movie_popularity
,statusAS movie_status
,vote_count AS movie_vote_count movies_data
original_languageIN ('en', 'es')

AND status=('Released')
AND popularitybetween 500 AND 1000
AND vote_count > 5000;

要件のSQLを確認したので、パンダを使用してこの手順を段階的に実行してみましょう。 2つの方法を紹介します。

方法1:-ブールインデックス付け

1.movi​​es_dataデータセットをDataFrameにロードします。

import pandas as pd movies = pd.read_csv("https://raw.githubusercontent.com/sasankac/TestDataSet/master/movies_data.csv")

条件ごとに変数を割り当てます。

languages = [ "en" , "es" ] condition_on_languages = movies . original_language . isin ( languages )
condition_on_status = movies . status == "Released"
condition_on_popularity = movies . popularity . between ( 500 , 1000 )
condition_on_votecount = movies . vote_count > 5000

3.すべての条件(ブール配列)を組み合わせます。

final_conditions = ( condition_on_languages & condition_on_status & condition_on_popularity & condition_on_votecount )
columns = [ "title" , "original_language" , "status" , "popularity" , "vote_count" ]
# clubbing all together movies . loc [ final_conditions , columns ]


title
original_language
ステータス
人気
vote_count
95星間
en
リリース済み
724.247784
10867
788デッドプール
en
リリース済み
514.569956
10995


メソッド2:-.query()メソッド。

.query()メソッドは、データをフィルタリングするSQLのwhere句スタイルの方法です。条件は文字列としてこのメ​​ソッドに渡すことができますが、列名にスペースを含めることはできません。

列名にスペースがある場合は、pythonreplace関数を使用してアンダースコアに置き換えてください。

私の経験から、より大きなDataFrameに適用した場合のquery()メソッドは、以前のメソッドよりも高速であることがわかりました。

import pandas as pd movies = pd . read_csv ( "https://raw.githubusercontent.com/sasankac/TestDataSet/master/movies_data.csv" )

4.クエリ文字列を作成し、メソッドを実行します。

.queryメソッドは、複数行にまたがるトリプルクォートされた文字列では機能しないことに注意してください。

final_conditions = (
"original_language in ['en','es']"
"and status == 'Released' "
"and popularity > 500 "
"and popularity < 1000"
"and vote_count > 5000"
) final_result = movies . query ( final_conditions )
final_result



予算
id
original_language
original_title
人気
release_date
収益
ランタイム
st
95
165000000
157336
en
星間
724.247784
2014年5月11日
675120017
169.0
リレー
788
58000000
293660
en
デッドプール
514.569956
2016年9月2日
783112979
108.0
リレー


多くの場合、私のコーディングには、「in」句をチェックインするための複数の値があります。したがって、上記の構文は理想的ではありません。アットマーク(@)を使用してPython変数を参照することができます。

プログラムで値をPythonリストとして作成し、(@)とともに使用することもできます。

movie_languages = [ 'en' , 'es' ]
final_conditions = (
"original_language in @movie_languages "
"and status == 'Released' "
"and popularity > 500 "
"and popularity < 1000"
"and vote_count > 5000" )
final_result = movies . query ( final_conditions )
final_result



予算
id
original_language
original_title
人気
release_date
収益
ランタイム
st
95
165000000
157336
en
星間
724.247784
2014年5月11日
675120017
169.0
リレー
788
58000000
293660
en
デッドプール
514.569956
2016年9月2日
783112979
108.0
リレー

  1. Android sqliteでSELECTクエリを使用するにはどうすればよいですか?

    例に入る前に、Androidのsqliteデータベースが何であるかを知っておく必要があります。 SQLiteは、デバイス上のテキストファイルにデータを保存するオープンソースのSQLデータベースです。 Androidには、SQLiteデータベースの実装が組み込まれています。 SQLiteは、すべてのリレーショナルデータベース機能をサポートしています。このデータベースにアクセスするために、JDBC、ODBCなどのデータベースへの接続を確立する必要はありません。 この例は、AndroidsqliteでSELECTクエリを使用する方法について示しています。 ステップ1 − Android Stud

  2. 中断せずにRedisSQLクエリを実行する方法

    RedisSQLクエリの実行は難しいことではありません。数年前、小売企業でデータウェアハウジングソリューションを管理している友人と話をしたときに、私は実際にこの点を指摘しました。彼が直面している問題を説明した後、Redisのクエリについて話し始めました。 「データウェアハウジングソリューションには問題点があります。データを記録し、リアルタイムで分析操作を実行する必要があるユースケースがあります。ただし、結果が得られるまでに数分かかる場合があります。 Redisはここで役に立ちますか? SQLベースのソリューションを一度にリッピングして置き換えることはできないことに注意してください。一度に一歩