Kibana와 파이썬을 활용한 스팸 필터링 결과 시각화하기

스팸 필터링은 현대적인 이메일 시스템에서 매우 중요한 역할을 합니다. 스팸 필터링은 사용자가 원치 않는 광고, 스팸 메시지를 받지 않도록 도와주는데, 이는 이메일 성능을 향상시키고 사용자 경험을 개선하는 데 도움이 됩니다.

이번 기술 블로그 포스트에서는 Kibana와 파이썬을 활용하여 스팸 필터링 결과를 시각화하는 방법을 알아보겠습니다.

1. 데이터 수집 및 처리

먼저, 스팸 필터링에 사용할 데이터를 수집하고 처리해야 합니다. 이 예제에서는 파이썬을 사용하여 이메일 헤더와 본문 데이터를 추출하겠습니다.

import email

def extract_email_data(email_file):
    with open(email_file, 'rb') as f:
        msg = email.message_from_binary_file(f)
        subject = msg['Subject']
        body = ""
        if msg.is_multipart():
            for part in msg.get_payload():
                if part.get_content_type() == 'text/plain':
                    body += part.get_payload()
        else:
            body = msg.get_payload()
    
    return subject, body

이 코드는 이메일 파일을 읽고 헤더와 본문 데이터를 추출하는 extract_email_data 함수를 정의합니다.

2. Kibana 대시보드 생성

다음으로, Kibana를 사용하여 스팸 필터링 결과를 시각화할 대시보드를 생성합니다. Kibana는 Elasticsearch 데이터를 시각화하고 탐색하기 위한 도구로 매우 강력한 기능을 제공합니다.

Kibana 대시보드에서는 다양한 시각화 도구를 사용하여 이메일 데이터에 대한 정보를 시각적으로 표현할 수 있습니다. 예를 들어, 워드클라우드를 사용하여 스팸 단어의 빈도수를 확인하거나, 막대 그래프를 사용하여 스팸 메시지의 수를 확인할 수 있습니다.

3. 파이썬에서 Kibana API 호출하기

이제 파이썬에서 Kibana API를 호출하여 스팸 필터링 결과를 Kibana 대시보드에 전달할 수 있습니다. 이를 위해 requests 모듈을 사용하여 HTTP 요청을 보내고, Elasticsearch 인덱스에 데이터를 삽입할 수 있습니다.

import requests

def send_data_to_kibana(index, data):
    url = f"http://localhost:5601/api/saved_objects/index-pattern/{index}"
    headers = {
        "kbn-xsrf": "true",
        "Content-Type": "application/json"
    }
    payload = {
        "attributes": {
            "title": index + "*",
            "timeFieldName": "timestamp"
        }
    }

    response = requests.post(url, headers=headers, json=payload)
    response_json = response.json()
    if response.status_code == 200 and "id" in response_json:
        index_id = response_json["id"]

        url = f"http://localhost:5601/elasticsearch/{index}/_doc/{index_id}"
        response = requests.post(url, headers=headers, json=data)
        if response.status_code == 201:
            print("Data sent to Kibana successfully.")
        else:
            print("Failed to send data to Kibana.")

    else:
        print("Failed to create index pattern in Kibana.")

이 코드는 send_data_to_kibana 함수를 정의하고, Kibana의 API를 호출하여 Elasticsearch 인덱스에 데이터를 삽입합니다.

4. 결과 시각화

이제 데이터를 수집하고 처리하였으며, Kibana에 데이터를 전송하는 방법을 알았습니다. 이제 Kibana 대시보드를 통해 스팸 필터링 결과를 시각화할 수 있습니다. 대시보드에서 다양한 시각화 도구를 사용하여 데이터를 시각적으로 탐색하고, 필터링 결과에 대한 인사이트를 얻을 수 있습니다.

이와 같이 Kibana와 파이썬을 결합하여 스팸 필터링 결과를 시각화할 수 있습니다. Kibana의 강력한 시각화 기능과 파이썬의 데이터 처리 능력을 활용하여 더 나은 스팸 필터링 시스템을 구축할 수 있습니다.

#TechBlog #DataVisualization