こんにちは、えんせきです。
今日も小ネタです。インフルエンザ明けて始めてお酒を飲みに行きました。ビールはうまいですね。
つまりなにしたの?
例えばCrossVaridationをするときとかにデータセットの1/10と9/10に分けるとかをより柔軟にやろうと思ったら
setを使うのが便利だと思っていて今日はそれを紹介する。
なんでやったの
リファレンスにももちろん書いてある。ただ、さくっと実行例が見たいし、なんだかんだで毎回Jupyter Notebookで動作を確認しているので
ブログにまとめることにした
扱うこと
- 集合を作る
- 要素数を取得する
- 要素の追加と削除
- 和・積・差・対称
- 要素を含むかの判定
- 集合が集合に含まれるかの判定
集合を作る
>>> s = set([1,2,3,4,5,4,3]) >>> print(s) {1, 2, 3, 4, 5}
普通にリストを渡すと重複要素を除いた集合にしてくれる。故にDataFrameのインデックスとかで使いやすい。
要素の追加と削除
>>> s.add(6) >>> s.remove(2) >>> print(s) {1, 3, 4, 5, 6}
要素がない可能性がある時はremoveの代わりにdiscardを使うとKeyErrorが出ない。
和・積・差・対称
>>> s1 = set([1,2,3,4,5]) >>> s2 = set([9,8,7,5,3]) >>> # 和集合 >>> print(s1 | s2) {1, 2, 3, 4, 5, 7, 8, 9} >>> print(s1.union(s2)) {1, 2, 3, 4, 5, 7, 8, 9} >>> # 積集合 >>> print(s1 & s2) {3, 5} >>> print(s1.intersection(s2)) {3, 5} >>> # 差集合 >>> print(s1 - s2) {1, 2, 4} >>> print(s1.difference(s2)) {1, 2, 4} >>> # 対称差 >>> print(s1 ^ s2) {1, 2, 4, 7, 8, 9} >>> print(s1.symmetric_difference(s2)) {1, 2, 4, 7, 8, 9}
差集合をよく使う。母集合があれば補集合にできる。
要素を含むかの判定
>>> # 含まれるかの判定 >>> print(5 in s1) True >>> # 含まれないかの判定 >>> print(5 not in s1) False
あんまり使わない。Listのままでできるから
集合が集合に含まれるかの判定
>>> s3 = set([1,2,3,4,5,6,7,8,9]) >>> s4 = set([4,5,6]) >>> # 集合s4が集合s3に含まれているかの判定 >>> print(s4.issubset(s3)) True >>> print(s4 <= s3) True >>> # 真部分集合の判定 >>> print(s4 < s3) True >>> print(s4 < s4) False >>> # 集合s4の全ての要素が集合s3に含まれるか判定 >>> print(s3.issuperset(s4)) True >>> print(s3 >= s4) True >>> # 真上位集合の判定 >>> print(s3 > s4) True >>> print(s4 > s4) False
変な集合が出てきたときになんかの集合に全部突っ込まれた集合があるのか確認する時に使う。
リファレンス
4. 組み込み型 — Python 3.6.5 ドキュメント
(当然こちらを読むべき。ただ僕は忘れた時にこれを見ると動作を確認しちゃう)