こんにちは,shun(@datasciencemore)です!!
前回は,ベクトルについて学びましたね.
その中で,論理値ベクトルを使用することでベクトルの要素を抽出できることを覚えているでしょうか?
今回は,その論理値ベクトルに焦点を当てます.
論理値ベクトルを使いこなすことで色々応用できるようになりますよ!
0.論理値ベクトルの処理ってなに??
論理値ベクトルは,比較演算子によって条件の判定結果として作成されるんだ!!
そして,論理値ベクトルに対し,論理演算子を使用して計算をすることで,様々な条件を論理値ベクトルで表現できるんだ!!
この論理値ベクトルの作成と計算を総称して論理値ベクトルの処理って呼んでいるよ!!
相変わらず言葉だけだとよくわかりませんね笑
それでは,詳細にみていきましょう!
1.論理値ベクトルの作成
まず論理値ベクトルを作成していきます.
前回,ベクトルの要素を抽出するところでは,手動で論理値ベクトルを作成し,それのTRUE部分を抽出するという処理について学びました.
しかし,実務では手動で論理値ベクトルを作成するなどほとんどありません.
それでは,どのように論理値ベクトルを作成するのでしょうか?
正解は
条件を満たしたかどうかでTRUEとFALSEを判定し,その判定結果を論理値ベクトルとする.
です.
この条件というのは,目的に応じて様々な場合が考えられます.
例えば,
- 季節は春か?
- 気温が5℃以上か?
- 年齢が25歳以下か?
などなど...
これらの条件を判定するには,以下の比較演算子という特殊な演算子を使います.
正確に言うとnp.isinは比較演算子ではないですが,よく使用するので比較演算子と合わせて紹介します.
以下,比較演算子==と関数np.isinのコーティング例です.
1 2 3 4 |
# ベクトル x = np.arange(1, 11, 1) y = np.array([1, 7, 4, 6, 2]) y_2 = np.tile(y, 2) |
比較演算子 ==
1 2 |
# xとy_2は等しいか? x == y_2 |
1 2 |
array([ True, False, False, False, False, False, True, False, False, False]) |
関数 np.isin
1 2 |
# xはyに含まれるか? np.isin(x, y) |
1 2 |
array([ True, True, False, True, False, True, True, False, False, False]) |
2.論理値ベクトルの計算
どういうこと?
論理値ベクトルは,組み合わせたり,反転させたり,TRUEの有無を確認したり,いろいろな計算方法があるんだ!!
論理値ベクトルを組み合わせるというのは,2つの論理値ベクトルに対して,とある計算をすることで,1つの新たな論理値ベクトルを作成することをいうよ!!
これも正直何言ってるかわからないですよね笑
論理値ベクトルを組み合わせることについて,具体例で考えてみましょう.
あなたはキャベツ農家で,市場に出すキャベツを選ぶ必要があります.
市場に出すキャベツは大きすぎても小さすぎてもいけません.
(具体的に10以上30以下のサイズのキャベツなら市場に出してもOKとしましょう.)
さて,キャベツのサイズを示すベクトルがあったとして,どのような処理をしたら市場に出せるキャベツを抽出できるでしょうか?
以下の処理をしたらうまくできそうですね.
①10以上のキャベツかどうかを判定する.
②30以下のキャベツかどうかを判定する.
③1と2を両方満たしたキャベツを市場に出せると判定する.
これら3つのうち,①,②については「1.論理値ベクトルの作成」で学んだことを利用すればできそうです.
で,③については,①と②で両方TRUEと判定されたところをTRUEとすれば,TRUEの部分が①と②を両方みたすということになりますね.
この処理をイメージした図が以下になります.
図を見れば少しわかりやすくなったのではないでしょうか?
キャベツのサイズのベクトルから,①と②で判定した結果の論理値ベクトルができて,その2つの論理値ベクトルを組み合わせて,最終的に③の論理値ベクトルができていることが確認できると思います.
さて,今回の例では,①と②で両方ともTRUEならば③をTRUEとし,それ以外はFALSEとしました. それ以外にもさまざまな処理が考えられますよね.
論理値ベクトルを処理するための特別な演算子が以下に挙げる論理演算子というものです.
この論理演算子のおかげでさまざまな条件を考慮することができるのですね!
それでは,前置きがすごく長くなってしまって恐縮ですが,コーディングして確かめてみましょう.
1 2 |
# キャベツのサイズを示したベクトル定義 vec_size = np.array([7, 13, 5, 25, 38, 57, 18, 9, 32, 28]) |
1 2 3 4 5 |
# サイズ10以上か? vec_bool_1 = vec_size >= 10 # サイズ30以下か? vec_bool_2 = vec_size <= 30 |
1 2 |
# AND vec_bool_1 & vec_bool_2 |
1 |
array([False, True, False, True, False, False, True, False, False, True]) |
1 2 |
# OR vec_bool_1 | vec_bool_2 |
1 2 |
array([ True, True, True, True, True, True, True, True, True, True]) |
1 2 |
# XOR vec_bool_1 ^ vec_bool_2 |
1 2 |
array([ True, False, True, False, True, True, False, True, True, False]) |
1 2 |
# NOT ~vec_bool_1 |
1 2 |
array([ True, False, True, False, False, False, False, True, False, False]) |
1 2 |
# any any(vec_bool_1) |
1 |
True |
1 2 |
# all all(vec_bool_1) |
1 |
False |
anyとallは,他と違い返り値が論理値スカラー(要は,1つの論理値)であることに注意してくださいね.
まとめ
今回は論理値ベクトルの処理について以下の2点を学習しました.
- 論理値ベクトルの作成
- 論理値ベクトルの計算
これらを屈指することで様々な条件が表現できるのですね.
ここはめっちゃ重要なところなのでよく復習して理解を深めておいてくださいね.
これにてパッケージ編のnumpyは終了になります.
次回からパッケージ編のpandasについてやっていきます.
pandasはデータ分析に必要不可欠な最重要パッケージなので,重点的にやっていく予定です!
それでは,お疲れさまでした!!
次回
-
【pandas】pandasってなに??
こんにちは,shun(@datasciencemore)です!! 今回からpandasについて説明していきます. pandasはnumpyと同様,データ分析に欠かせないパッケージとなります. じっくり ...
続きを見る