본문 바로가기
Python

파이썬 Set을 활용한 데이터 분석과 필터링

by SANCODE 2023. 10. 5.

안녕하세요. 이번 포스팅은 파이썬 Set에 대한 내용을 주제로 정리해 보려고 합니다. Set은 파이썬의 중요한 자료형 중 하나로, 집합과 관련된 작업을 수행할 때 유용하게 활용됩니다. Set 자료형의 기초부터 활용 사례까지 다양한 내용을 다뤄보겠습니다.



목차


    Set이란?

    파이썬에서 Set(집합)은 고유한 값을 저장하는 자료형 중 하나입니다.


    • 고유한 요소
      Set은 중복된 값을 허용하지 않습니다. 즉, Set 내에 동일한 요소는 하나만 저장됩니다.

    • 순서가 없음
      Set
      은 요소들의 순서를 유지하지 않습니다. 따라서 Set에 저장된 요소들은 순서 없이 저장되며, 인덱스로 접근할 수 없습니다.

    • 가변성
      Set은 가변적인 자료형이며, 요소를 추가, 제거, 수정할 수 있습니다.

    파이썬에서 Set은 중괄호 {}나 set() 생성자를 사용하여 생성하며, 요소들은 콤마로 구분하여 나열합니다.

    예시 코드

    my_set = {1, 2, 3, 4, 5}

    Set은 집합 연산(합집합, 교집합, 차집합 등)을 쉽게 수행할 수 있고, 중복된 데이터를 제거하거나 멤버십 테스트(특정 값이 Set에 속하는지 확인)에 유용합니다. Set은 데이터를 고유하게 관리하고 중복을 허용하지 않는 상황에서 유용하게 사용됩니다.



    Set 요소의 추가, 삭제, 수정


    Set 요소의 추가

    • add() 메서드
      add() 메서드를 사용하여 하나의 요소를 추가할 수 있습니다.
    my_set = {1, 2, 3}
    my_set.add(4)
    print(my_set)  # 출력: {1, 2, 3, 4}
    • update() 메서드
      update() 메서드를 사용하여 여러 요소를 한 번에 추가할 수 있습니다. 이 메서드는 반복 가능한(iterable) 객체(리스트, 튜플 등)를 인수로 받습니다.
    my_set = {1, 2, 3}
    my_set.update([3, 4, 5])
    print(my_set)  # 출력: {1, 2, 3, 4, 5}

    Set 요소의 삭제

    • remove() 메서드
      remove() 메서드를 사용하여 특정 요소를 삭제합니다. 만약 해당 요소가 Set에 없을 경우 KeyError 예외가 발생합니다.
    my_set = {1, 2, 3}
    my_set.remove(2)
    print(my_set)  # 출력: {1, 3}
    • discard() 메서드
      discard() 메서드를 사용하여 특정 요소를 삭제합니다. 만약 해당 요소가 Set에 없어도 예외가 발생하지 않습니다.
    my_set = {1, 2, 3}
    my_set.discard(4)  # 요소가 없어도 예외가 발생하지 않음
    print(my_set)  # 출력: {1, 2, 3}

    Set 요소의 수정

    파이썬 Set은 요소의 수정을 지원하지 않습니다. Set은 수정이 불가능하며, 요소를 추가하거나 삭제하는 용도로 사용됩니다.

    Set에서 요소를 추가, 삭제하고 수정하지는 못하지만, 중복된 요소를 허용하지 않고 고유한 값을 관리하는 데 유용합니다. 추가와 삭제 연산을 통해 Set을 효율적으로 활용할 수 있습니다.



    Set의 연산


    합집합 (Union)

    두 개의 Set을 합치는 연산으로, 중복된 요소는 한 번만 유지됩니다.

    set1 = {1, 2, 3}
    set2 = {3, 4, 5}
    
    union_set = set1.union(set2)
    # 또는
    union_set = set1 | set2
    
    print(union_set)  # 출력: {1, 2, 3, 4, 5}

    위 코드는 두 집합 set1과 set2의 합집합을 구해 중복 없이 하나로 합친 결과인 {1, 2, 3, 4, 5}를 출력합니다.


    교집합 (Intersection)

    두 개의 Set에서 공통된 요소만을 추출하는 연산입니다.

    set1 = {1, 2, 3}
    set2 = {3, 4, 5}
    
    intersection_set = set1.intersection(set2)
    # 또는
    intersection_set = set1 & set2
    
    print(intersection_set)  # 출력: {3}

    위 코드는 두 집합 set1과 set2의 교집합을 구해 두 집합 모두에 공통으로 포함된 요소 {3}를 출력합니다.


    차집합 (Difference)

    하나의 Set에서 다른 Set과 중복되지 않는 요소들을 추출하는 연산입니다.

    set1 = {1, 2, 3}
    set2 = {3, 4, 5}
    
    difference_set = set1.difference(set2)
    # 또는
    difference_set = set1 - set2
    
    print(difference_set)  # 출력: {1, 2}

    위 코드는 집합 set1에서 set2에 포함되지 않은 요소들만 추출하여 {1, 2}를 출력합니다.


    대칭 차집합 (Symmetric Difference)

    두 Set 중 하나에만 존재하는 요소들을 추출하는 연산입니다.

    set1 = {1, 2, 3}
    set2 = {3, 4, 5}
    
    symmetric_difference_set = set1.symmetric_difference(set2)
    # 또는
    symmetric_difference_set = set1 ^ set2
    
    print(symmetric_difference_set)  # 출력: {1, 2, 4, 5}

    위 코드는 set1과 set2에서 공통된 요소를 제외한 나머지 요소들만 모아 {1, 2, 4, 5}를 출력합니다.


    부분집합 확인

    한 Set이 다른 Set의 부분집합인지 확인할 수 있습니다.

    set1 = {1, 2, 3}
    set2 = {1, 2}
    
    is_subset = set2.issubset(set1)
    print(is_subset)  # 출력: True

    위 코드는 set2가 set1의 부분집합인지 확인하여, 모든 set2 요소가 set1에 포함되어 있으므로 True를 출력합니다.


    상위집합 확인

    한 Set이 다른 Set의 상위집합(자신을 포함하는 집합)인지 확인할 수 있습니다.

    set1 = {1, 2, 3}
    set2 = {1, 2}
    
    is_superset = set1.issuperset(set2)
    print(is_superset)  # 출력: True

    위 코드는 set1이 set2를 포함하는 상위 집합인지 확인하여, set1이 set2의 모든 요소를 포함하므로 True를 출력합니다.



    이러한 Set 연산을 활용하면 데이터 처리와 분석에서 중복 제거, 집합 연산, 데이터 필터링 등 다양한 작업을 쉽게 수행할 수 있습니다.



    반응형


    Set의 활용 예제


    중복 제거

    Set은 중복된 값을 허용하지 않으므로 중복 제거에 유용하게 사용됩니다.

    data = [1, 2, 2, 3, 4, 4, 5]
    unique_numbers = set(data)
    print(list(unique_numbers))  # 출력: [1, 2, 3, 4, 5]

    위 코드는 리스트 data에서 중복된 숫자를 제거하기 위해 set으로 변환한 후, 다시 리스트로 만들어 고유한 숫자들만 출력합니다.


    멤버십 테스트

    Set은 특정 값이 집합에 포함되는지 효과적으로 확인할 수 있습니다.

    fruits = {"apple", "banana", "cherry"}
    print("apple" in fruits)  # 출력: True
    print("orange" in fruits)  # 출력: False

    위 코드는 집합 fruits에 특정 요소가 포함되어 있는지 확인하여, "apple"은 포함되어 있어 True를, "orange"는 포함되어 있지 않아 False를 출력합니다.


    교집합 계산

    두 집합에서 공통된 요소를 찾을 수 있습니다.

    set1 = {1, 2, 3, 4, 5}
    set2 = {4, 5, 6, 7, 8}
    
    intersection_set = set1.intersection(set2)
    print(intersection_set)  # 출력: {4, 5}

    위 코드는 두 집합 set1과 set2의 교집합을 구하여, 두 집합에 모두 포함된 요소 {4, 5}를 출력합니다.


    데이터 필터링

    Set을 사용하여 특정 조건을 만족하는 데이터만 추출할 수 있습니다.

    scores = {75, 82, 90, 64, 95, 88}
    passed_scores = {score for score in scores if score >= 80}
    print(passed_scores)  # 출력: {82, 88, 90, 95}

    위 코드는 scores 집합에서 80 이상인 점수만 추출해 새로운 집합 passed_scores를 만들고, 그 결과 {82, 88, 90, 95}를 출력합니다.


    두 리스트의 고유한 값 추출

    두 개의 리스트에서 고유한 값들을 추출할 때 Set을 활용합니다.

    list1 = [1, 2, 3, 4, 5]
    list2 = [3, 4, 5, 6, 7]
    
    unique_values = set(list1) | set(list2)
    print(list(unique_values))  # 출력: [1, 2, 3, 4, 5, 6, 7]

    위 코드는 두 리스트를 집합으로 변환한 뒤 합집합 연산을 통해 두 리스트에 있는 모든 고유한 값을 하나의 집합으로 만들고, 이를 다시 리스트로 변환하여 [1, 2, 3, 4, 5, 6, 7]를 출력합니다.


    문자열 중 중복 문자 찾기

    Set을 사용하여 문자열에서 중복된 문자를 찾을 수 있습니다.

    text = "programming"
    duplicate_chars = set()
    for char in text:
        if text.count(char) > 1:
            duplicate_chars.add(char)
    
    print(duplicate_chars)  # 출력: {'g', 'r', 'm'}

    위 코드는 문자열 text에서 중복으로 등장하는 문자들을 찾아 duplicate_chars 집합에 추가하여, 중복된 문자들인 {'g', 'r', 'm'}를 출력합니다.

    Set은 중복 데이터를 처리하고 고유한 값을 추출하는 등 다양한 상황에서 유용하게 활용할 수 있는 자료형입니다.



    마무리

    오늘은 파이썬 Set에 대한 다양한 활용 예제를 살펴보았습니다. Set은 중복을 허용하지 않고 집합 연산을 쉽게 수행할 수 있는 유용한 자료형입니다. 중복 제거, 멤버십 테스트, 데이터 필터링, 교집합 계산 등 다양한 작업에 활용될 수 있으며, 데이터 처리와 분석에서 유용하게 사용됩니다. 파이썬의 Set을 활용하여 코드를 간결하고 효율적으로 작성할 수 있습니다.





    반응형