top of page

프로젝트 진행 과정 및 방법

순서: 데이터 수집 > 데이터 전처리 > 대표색 추출 > 시각화 > 대표색 = 정당색 판단

더 자세한 내용과 코드는 GitHub 페이지에서 확인하실 수 있습니다.

1. 데이터 수집
382825325-514957ff-bf2b-4ba3-81cc-7e6652c1b37b.png

중앙선거관리위원회의 도서관 사이트에 아카이빙된 선거 자료 > 후보자선전물 자료 중 선거 벽보 pdf 파일을 활용했습니다.

Google Colab 환경에서 Python의 requests, Beautiful Soup 패키지를 사용해 pdf 파일을 스크래핑했습니다.

원래 계획은 2024년 4월 치러진 22대 총선까지를 프로젝트에 포함시키는 것이었습니다. 선거 기간에는 선관위 홈페이지에 정책공약 마당에서 모든 후보의 공보물을 확인할 수 있었기에 공보물의 표지를 데이터로 활용할 계획이었습니다.

 

그러나 선거 다음날 바로 선관위 정책공약마당에서 낙선한 후보자들의 공보물이 내려갔기에 계획이 무산되었습니다. 선관위에 문의한 결과, 위 공보물들은 개인정보 보호를 위해 내려갔으며 선관위 도서관 홈페이지에 아카이빙되기까지는 2-3개월이 소요된다는 답변을 받았으나, 같은 해 10월까지 선관위 도서관 사이트에 22대 총선 후보자선전물이 게시되지 않았습니다. 어쩔 수 없이 프로젝트에는 선관위 도서관 사이트에서 접근 가능한 2022년 8회 지선까지의 데이터를 활용했습니다.

2. 데이터 전처리

우선 벽보 이미지에서 대표색을 추출하기 위해 pdf 파일을 jpg 파일로 변환하였습니다. 그리고 기존 이미지의 사이즈가 너무 커서 얼굴 인식 알고리즘의 정확도가 오히려 떨어지는 문제가 있었기에 width = 1000으로 통일하여 모든 데이터를 리사이즈했습니다.

후보자의 얼굴, 머리카락, 정장 등에 의해 살구색, 검정색이 선거 벽보의 대표색으로 추출되지 않도록 인물 영역을 인식하여 마스킹 했습니다. 인물 인식을 위해서는 Google이 제공하는 Semantic Segmentation(의미적 분할) 딥러닝 모델인 Deeplab을 사용하였습니다. Semantic Segmentation은 입력된 이미지에 각 픽셀에 특정한 클래스 라벨을 할당하는 것을 목적으로 하는 컴퓨터 비전의 한 분야로 자율주행, 영상 의학 등 다양한 분야에 널리 활용되고 있는 기술입니다.

일반적인 사진에서 인물을 추출하는 용도로 학습된 모델의 특성상 도형, 텍스트 등의 요소가 인물과 밀접한 곳에 배치되어 있는 벽보에서는 인물의 경계를 제대로 인식하지 못하는 문제가 있었습니다. 이 문제를 해결하기 위해 텍스트 영역을 인식하는 Convex Hull 알고리즘을 먼저 사용하여 텍스트 영역에 박스 처리를 해 Deeplab 모델에 인식되지 않도록 했습니다. 또한 대다수의 텍스트가 벽보 하단에 위치하고 있는 것을 고려하여 일부 하단 영역 역시 인식되지 않도록 처리했습니다.

완성된 알고리즘에 이미지를 넘긴 후, 인물 클래스가 붙은 영역을 초록색 (0, 255, 0)으로 마스킹 처리했습니다. 아래는 전처리 파이프라인을 적용한 결과입니다.

2020.04.15 _ 21대(회) _ 국회의원 _ 서울 _ 종로구 _ 기호 1번 _ 더불어민주당 _ ��당선 _ 이낙연 (1).jpg
2020.04.15 _ 21대(회) _ 국회ᄋ��ᅴ원 _ 서울 _ 종로구 _ 기호 2번 _ 미래통합당 _ 낙선 _ 황교안 (1).jpg
3. 대표색 추출

​K-means clustering 알고리즘을 이용해 전처리된 각 벽보 이미지를 스캔하며 유사한 색을 가진 픽셀을 그룹으로 묶도록 했습니다. 인물을 마스킹할 때 사용한 색인 초록색(0, 255, 0)을 제외하고 픽셀 수가 가장 많이 탐지된 색(이하 대표색)과 그 비율을 추출했습니다.


추출된 선거 벽보의 ​대표색 RGB 값을 선관위가 공공데이터포털을 통해 제공하는 중앙선거관리위원회 투·개표정보 데이터와 합쳐서 하나의 데이터 프레임으로 저장했습니다. 시각화 단계에서는 이렇게 만들어진 데이터프레임을 활용했습니다.

 RGB (68, 109, 168) 
53.3%
 RGB (189, 90, 112) 
61.9%
4. 시각화

대표색이 일반적으로 하얀색 / 정당색 / 검은색 중 하나와 유사한 색상인 것에서 착안, 비슷한 색상을 묶어서 볼 수 있도록 명암순으로 색상을 나열하고자 했습니다. 색의 RGB값을 Gray scale(red * 0.299 + green * 0.587  + blue * 0.114)로 변환한 후, 큰 값을 가진 대표색부터 작은 값을 가진 대표색까지 왼쪽에서 오른쪽으로 순서대로 나열해 시각화했습니다. 이렇게 완성된 명암 순 스펙트럼을 분석에 활용했습니다.

5. 대표색 = 정당색 판단

정당색을 선거 벽보의 대표색으로 활용하였는지 확인하고자 했습니다. 선거 벽보의 대표색이 정당색과 가까운 색이면, 선거 벽보에 정당색을 사용했다고 판단했습니다. 이때 정당색과 가까운 색이란 정당색 RGB값을 좌표로 볼 때, 정당색 좌표와의 유클리드 거리가 75 이하인 색으로 정의했습니다. 각 선거에서 정당색을 대표색으로 사용한 벽보를 센 후, 각 선거 전체 벽보 수로 나누어 비율을 측정했습니다.

정당색 rgb (r1, g1, b1) 대표색 rgb (r2, g2, b2) 일 때,

루트{(r1-r2)^2+(g1-g2)^2+(b1-b2)^2} ≤ 75

화면 캡처 2024-10-28 230055.png
화면 캡처 2024-10-28 230031.png

여담

프로젝트 진행 중에 여러 가설을 세워 분석을 수행했습니다.

그 가설 중에서는 더 이상의 분석이나 해석이 불가했던 가설도 있었습니다.

1. 후보자의 득표율이 높을수록
    후보자의 벽보에 정당색이 더 많이 나타날 것이다? 

초기 가설은 "후보자 개인이 유리하다고 느낄수록 포스터에 정당색을 더 많이 활용할 것"이었습니다.

이 가설에 맞추어 각 후보자의 벽보 대표색을 득표율 순으로 정렬했습니다. 그 결과는 다음과 같습니다.

득표율 순으로 나열했을 때 정당색을 더 많이 사용하는 경향성을 확인할 수 없었습니다. 이에 저희는 후보 개인의 유리함이 아닌 정당의 유리함이 포스터에 정당색 반영과 더욱 관련이 있을 것이라고 생각해 더 많은 의석 수를 가져간 정당과 그렇지 못한 정당을 비교하는 작업을 수행하게 되었습니다. (인사이트 1)

2. 유리한 지역에 출마하는 정당의 후보자는
    선거 벽보에 정당색을 더 많이 활용할 것이다?

진보 정당은 영남권보다 호남권에서, 보수 정당은 호남권보다 영남권에서 정당색을 더 많이 활용할 것이라는 가설에 확인하기 위해 분석을 진행했습니다. 

8대 지선 기초 더불어민주당 (경상권 & 명암 순).png
8대 지선 기초 더불어민주다��ᆼ (호남권 & 명암 순).png
8대 지선 기초 국민의힘 (경상권 & 명암 순).png
8대 지선 기초 구�ᆨ민의힘 (호남권 & 명암 순).png

하지만 우선 진보 정당은 영남권에서, 보수 정당은 호남권에서 출마하는 후보 수 자체가 적어 유의미한 분석을 진행하기 어려웠고, 가설과 일치하지 않는 스펙트럼을 다수 확인할 수 있었기에 기사에서 제외했습니다.

bottom of page