>100 Views
September 07, 23
スライド概要
データサイエンス体験動画「データサイエンス チュートリアル 猫のタロー編」の第12回目は、Section 10「queryを使った複数条件での抽出」です。
Section 6「列の参照」では、列名を指定して、比較演算子を書くことによって、その列の条件に当てはまる行のみを参照する方法を解説しましたが、今回は、複数条件の組み合わせが、簡潔に記述できる「query」について解説します。
解説するプログラムは、次の4つです。
㉒ データ名.query(“数字1 <= 列名 <=数字2”) ※「<=」は、本当は小文字です!
㉓ データ名.query(“列名 ! = 列名”)
㉔ データ名.query(“列名 == 列名”)
㉕ データ名.query(“論理演算1" and "論理演算2")
「query」は、複数の比較演算子を用いる場合や「and」、「or」、「not」等の論理演算子を使う場合にも対応していますので、とっても便利なものです。
また、結果の確認のために、「len()」、「describe()」も使います。復習してみてください!
■この動画のブログ
データサイエンス チュートリアル
https://tutorial4datascience.blogspot.com/
1 1st STEP ビッグデータの 読み込みとデータの確認 Section 10 queryを使った複数条件での抽出 ㉒ データ名.query(“数字1 <= 列名 <= 数字2”) ㉓ データ名.query(“列名 ! = 列名”) ㉔ データ名.query(“列名 == 列名”) ㉕ データ名.query(“論理演算1" and "論理演算2")
2 Section 10 Queryを使った複数条件での抽出 1.列の値に対する条件に応じて行を抽出する「query」 DataFrameの列の値に対する条件に応じて行を抽出するには、「query()」を用います。 比較演算子や複数条件の組み合わせ等が、簡潔に記述できて便利です。 比較演算子(「Section 6の【参考】 比較演算子」を参照)を用いて、列の条件に当ては まる行のみを参照する方法には、 ⑬ データ名[データ名[“列名”] > 数字] がありましたが、複数の比較演算子を用いる場合は複雑になります(※)。 複数の比較演算子を用いるには、 「query()」を使います。 ㉒ データ名.query(“数字1 <= 列名 <= 数字2”) この場合、「数字1 <=」は「数字1以上」、「<= 数字2」は「数字2以下」です。 ※ データ名[((データ名[“列名”] >= 数字1) and (データ名[“列名”] <= 数字2))] のように、()が2重になって混乱してしまいます。
3 Section 10 Queryを使った複数条件での抽出 参考:query()の応用 ●ある列の値が欠損値である行を抽出する場合は、下記を使います。 ㉓ データ名.query(“列名 ! = 列名”) ●また、ある列の値が欠損でない行を抽出する場合は、下記を使います。 ㉔ データ名.query(“列名 == 列名”) ●「query()」は、二つの比較演算子を用いるだけでなく、「and」、「or」、「not」等の 論理演算子も使うことができます。 id_pos3.query("CustomerID ! = CustomerID" and "Description ! = Description") これは、 「列名CustomerIDの欠損値がある行」かつ「列名Descriptionの欠損値 がある行」を抽出します。
4 Section 10 Queryを使った複数条件での抽出 ㉒ データ名.query(“数字1 <= 列名 <= 数字2”) では、㉒を使って、先ずは⑬と同じことをやってみましょう。データは、欠損値を含む行を削除した 「id_pos4」を使います。
5 Section 10 Queryを使った複数条件での抽出 ㉒ データ名.query(“数字1 <= 列名 <= 数字2”) 「len()」を使って、2つの行数を確認しましょう。 どちらも、列「Quantity」が1,000より大きい行が106あることがわかりました。同じ処理をしたこと が確認できました。
6 Section 10 Queryを使った複数条件での抽出 ㉒ データ名.query(“数字1 <= 列名 <= 数字2”) では、複数の比較演算子を用いてみましょう。 列「Quantity」が1,000以上、かつ、2,000以 下の行を抽出します。
7 Section 10 Queryを使った複数条件での抽出 ㉒ データ名.query(“数字1 <= 列名 <= 数字2”) 念のため、「⑮ データ名.describe()」を使って、列「Quantity」の最小値と最大値を確認してみ ましょう。最小値は1,000、最大値は2,000になっていて、「1000 ≦ 列Quantity ≦ 2000」を 満たしていますね!
8 Section 10 Queryを使った複数条件での抽出 ㉒ データ名.query(“数字1 <= 列名 <= 数字2”) 次に、欠損値を含むデータ「id_pos3」を使い、 列「CustomerID」の欠損値のある行を 抽出してみましょう。 このSectionの参考に記載の「データ名.query(“列名 ! = 列名”) 」を使います。 「id_pos3」において「CustomerID」 の欠損値が ある行が135,080行で すから、処理は正しく終了しました。
9 Section 10 Queryを使った複数条件での抽出 ㉒ データ名.query(“数字1 <= 列名 <= 数字2”) データ「id_pos3」には、列「CustomerID」の他にも列「Description」にも欠損値が存在しまし た。列「CustomerID」と列「Description」の列の双方に、欠損値のある行を抽出しましょう。 その場合は、「and」を用いて、下記のようにプログラムを書きます。