class: title-slide, left, bottom # 데이터 과학자가 바라본 선거 공공데이터 ---- ## **중앙선거관리위원회** ### 이광춘 / 한국 알(R) 사용자회 ### 2022-07-28 --- class: inverse, middle name: intro-toc # 발표 개요 ---- .pull-left[ 중앙선관위에서 공개하는 선거 공공데이터는 투표/득표로 대표되는 **.warmyellow[정형 데이터]** 외에도 다양한 형태로 제공되고 있다. 하지만, 일부 선거 공공데이터는 데이터 과학 발전에도 불구하고 여전히 데이터로 제대로 인식되지 못하고 **.red[과거 패러다임]**에 묻혀 문서, 표, 그래프, 이미지, 동영상 등으로 별도 관리되고 있다. 2016년부터 인공지능으로 대표되는 데이터 과학영역에 눈부신 발전이 있음에도 불구하고 이를 선거 공공데이터가 담아내고 있지 못해 데이터 과학자로 **.green[경험한 사례를 들어 공감대를 형성]**하고자 한다. ] .pull-right[ .left[ 1\. [선거 공공데이터](#nec-election) 2\. [데이터 과학 사례](#nec-data-science) 3\. [선거 공공데이터 활성화](#nec-krvote) 4\. [마무리](#asia-goodbye) ] ] <!--end of right-column--> <!----------------- 1. 데이터 ----------------------------------> --- name: nec-election # 주요 선거 일정 <br> <br> <br> <center> <!-- Timeline generated in R 4.2.0 by googleVis 0.7.0 package --> <!-- Fri Jun 10 11:12:09 2022 --> <!-- jsHeader --> <script type="text/javascript"> // jsData function gvisDataTimelineID59b41203625d () { var data = new google.visualization.DataTable(); var datajson = [ [ "대통령", "15대", new Date(1997,11,18,0,0,0), new Date(2002,11,18,0,0,0) ], [ "대통령", "16대", new Date(2002,11,19,0,0,0), new Date(2007,11,18,0,0,0) ], [ "대통령", "17대", new Date(2007,11,19,0,0,0), new Date(2012,11,19,0,0,0) ], [ "대통령", "18대", new Date(2012,11,19,0,0,0), new Date(2017,4,9,0,0,0) ], [ "대통령", "19대", new Date(2017,4,10,0,0,0), new Date(2022,4,9,0,0,0) ], [ "대통령", "20대", new Date(2022,4,10,0,0,0), new Date(2027,4,9,0,0,0) ], [ "국회의원", "17대", new Date(2004,4,30,0,0,0), new Date(2008,4,29,0,0,0) ], [ "국회의원", "18대", new Date(2008,4,30,0,0,0), new Date(2012,4,29,0,0,0) ], [ "국회의원", "19대", new Date(2012,4,30,0,0,0), new Date(2016,4,29,0,0,0) ], [ "국회의원", "20대", new Date(2016,4,30,0,0,0), new Date(2020,4,29,0,0,0) ], [ "국회의원", "21대", new Date(2020,4,30,0,0,0), new Date(2024,4,29,0,0,0) ], [ "지방선거", "3회", new Date(2002,6,1,0,0,0), new Date(2006,5,30,0,0,0) ], [ "지방선거", "4회", new Date(2006,6,1,0,0,0), new Date(2010,5,30,0,0,0) ], [ "지방선거", "5회", new Date(2010,6,1,0,0,0), new Date(2014,5,30,0,0,0) ], [ "지방선거", "6회", new Date(2014,6,1,0,0,0), new Date(2018,5,30,0,0,0) ], [ "지방선거", "7회", new Date(2018,6,1,0,0,0), new Date(2022,5,30,0,0,0) ], [ "지방선거", "8회", new Date(2022,6,1,0,0,0), new Date(2026,5,30,0,0,0) ] ]; data.addColumn('string','type'); data.addColumn('string','subtype'); data.addColumn('datetime','start'); data.addColumn('datetime','end'); data.addRows(datajson); return(data); } // jsDrawChart function drawChartTimelineID59b41203625d() { var data = gvisDataTimelineID59b41203625d(); var options = {}; options["width"] = 600; options["height"] = 550; var chart = new google.visualization.Timeline( document.getElementById('TimelineID59b41203625d') ); chart.draw(data,options); } // jsDisplayChart (function() { var pkgs = window.__gvisPackages = window.__gvisPackages || []; var callbacks = window.__gvisCallbacks = window.__gvisCallbacks || []; var chartid = "timeline"; // Manually see if chartid is in pkgs (not all browsers support Array.indexOf) var i, newPackage = true; for (i = 0; newPackage && i < pkgs.length; i++) { if (pkgs[i] === chartid) newPackage = false; } if (newPackage) pkgs.push(chartid); // Add the drawChart function to the global list of callbacks callbacks.push(drawChartTimelineID59b41203625d); })(); function displayChartTimelineID59b41203625d() { var pkgs = window.__gvisPackages = window.__gvisPackages || []; var callbacks = window.__gvisCallbacks = window.__gvisCallbacks || []; window.clearTimeout(window.__gvisLoad); // The timeout is set to 100 because otherwise the container div we are // targeting might not be part of the document yet window.__gvisLoad = setTimeout(function() { var pkgCount = pkgs.length; google.load("visualization", "1", { packages:pkgs, callback: function() { if (pkgCount != pkgs.length) { // Race condition where another setTimeout call snuck in after us; if // that call added a package, we must not shift its callback return; } while (callbacks.length > 0) callbacks.shift()(); } }); }, 100); } // jsFooter </script> <!-- jsChart --> <script type="text/javascript" src="https://www.google.com/jsapi?callback=displayChartTimelineID59b41203625d"></script> <!-- divChart --> <div id="TimelineID59b41203625d" style="width: 600; height: 550;"> </div> </center> .footnote[ - [이광춘, "krvote - 대한민국 선거 데이터 패키지", 2022-06-09](https://ai-carpentry.github.io/krvote/)] --- name: nesdc-offering-type # 중앙선관위 데이터 제공방식 .panelset[ .panel[.panel-name[중앙선관위 - 웹사이트] .center[ <img src="fig/asia-nec-info.jpg" alt="중앙선관위 - 웹사이트" width="80%" /> ] ] .panel[.panel-name[중앙선관위 - 자료실] .center[ <img src="fig/nesdc_download_files.png" alt="중앙선관위 - 자료실" width="100%" /> ] ] .panel[.panel-name[공공데이터포털 - API] .center[ <img src="fig/asia-data-portal-api.jpg" alt="공공데이터포털 - API 명세" width="80%" /> ] ] ] --- name: nesdc-offering-data # 중앙선관위 제공 데이터 .panelset[ .panel[.panel-name[투/개표] .center[ <img src="fig/asia-nec-info.jpg" alt="중앙선관위 - 웹사이트" width="80%" /> ] [선거통계시스템](http://info.nec.go.kr/) ] .panel[.panel-name[여론조사] .center[ <img src="fig/nec-nesdc.jpg" alt="중앙선거여론조사심의위원회" width="70%" /> ] [중앙선거여론조사심의위원회](https://www.nesdc.go.kr/portal/main.do) ] .panel[.panel-name[의식조사] .center[ <img src="fig/nec-minds-pdf.jpg" alt="유권자의식조사" width="40%" /> ] [제20대 대통령선거 유권자의식조사, PDF](https://www.nec.go.kr/site/nec/ex/bbs/View.do?cbIdx=1129&bcIdx=187615) ] .panel[.panel-name[정당회계] .center[ <img src="fig/nec-party.jpg" alt="정당회계" width="40%" /> ] [2020년도 정당의 활동개황 및 회계보고, PDF](https://www.nec.go.kr/site/nec/ex/bbs/View.do?cbIdx=1129&bcIdx=151337) ] .panel[.panel-name[TV토론] .center[ <img src="fig/nec-debate.jpg" alt="TV토론" width="70%" /> ] [제 20대 대통령선거 후보자 토론회 다시보기](https://debates.go.kr/2022_vote/sub01/sub01_1.php?substg=1&id=632) ] .panel[.panel-name[지도] .center[ <img src="fig/nec-precinct-map.jpg" alt="선거구 지도" width="70%" /> ] [선거구지도 - 대한민국 행정동 경계(admdongkor)](https://github.com/vuski/admdongkor) ] .panel[.panel-name[정책공약] .center[ <img src="fig/nec-precinct-map.jpg" alt="선거구 지도" width="70%" /> ] [정책공약마당](https://policy.nec.go.kr/) ] .panel[.panel-name[공보물] .center[ <img src="fig/nec-phamplet.jpg" alt="후보자선전물" width="70%" /> ] [선거정보도서관-후보자선전물](https://http://elecinfo.nec.go.kr/) ] ] <!----------------- 2. 데이터 과학 사례 ------------------------> --- name: nec-data-science # 데이터 사이언스 사례 .panelset[ .panel[.panel-name[사전투표율] .center[ <img src="fig/nec-ds-early-voting.jpeg" alt="사전투표율" width="80%" /> ] [제20대 대통령 선거, 사전투표 역사를 새로 쓰다](http://www.ohmynews.com/NWS_Web/View/at_pg.aspx?CNTN_CD=A0002815847) ] .panel[.panel-name[역대선거] .center[ <img src="fig/nec-ds-local-election.jpeg" alt="선거" width="80%" /> ] [지방선거 시도지사 절반, 5월 12일 결정된다](http://www.ohmynews.com/NWS_Web/View/at_pg_w.aspx?CNTN_CD=A0002820588) ] .panel[.panel-name[여론조사] .center[ <img src="fig/nec-ds-polls.jpeg" alt="여론조사" width="80%" /> ] [여론조사를 네 분류로 나눠보니, 눈에 띄는 흐름](http://www.ohmynews.com/NWS_Web/View/at_pg_w.aspx?CNTN_CD=A0002802812) ] .panel[.panel-name[TV토론] .center[ <img src="fig/nec-ds-debate.jpeg" alt="TV토론" width="80%" /> ] [데이터를 통해 본 대선 TV 토론회](http://www.ohmynews.com/NWS_Web/View/at_pg.aspx?CNTN_CD=A0002814657) ] .panel[.panel-name[지도] .center[ <img src="fig/nec-ds-map.jpeg" alt="지도" width="80%" /> ] [대선득표율로 지방선거 판세를 가늠해보자](http://www.ohmynews.com/NWS_Web/View/at_pg_w.aspx?CNTN_CD=A0002818973) ] .panel[.panel-name[공약] .center[ <img src="fig/nec-ds-policy.jpeg" alt="공약" width="80%" /> ] [유력 대선후보 4인, 10대 공약 중 압도적 분야는 '00'](http://www.ohmynews.com/NWS_Web/View/at_pg_w.aspx?CNTN_CD=A0002810838) ] .panel[.panel-name[정당사무소] .center[ <img src="fig/nec-ds-party.jpeg" alt="정당사무소" width="60%" /> ] [양강 구도 속 부지런히 움직이는 제3후보는?](http://www.ohmynews.com/NWS_Web/View/at_pg_w.aspx?CNTN_CD=A0002810396) ] ] <!----------------- 3. 활성화 ------------------------> --- name: nec-krvote # krvote 데이터 패키지 .panelset[ .panel[.panel-name[패키지] .center[ ![](fig/asia-pkg-why.jpg) ] [Desirée De Leon, Alison Hill, "A Handbook for Teaching and Learning with R and RStudio", 2019-09-11](https://rstudio4edu.github.io/rstudio4edu-book/) ] .panel[.panel-name[데이터패키지] .center[ <img src = "fig/asia-pkg-overview.jpg" width="80%" /> ] [Desirée De Leon, Alison Hill, "A Handbook for Teaching and Learning with R and RStudio", 2019-09-11](https://rstudio4edu.github.io/rstudio4edu-book/) ] .panel[.panel-name[전처리작업] <br> .center[ <img src = "fig/asia-data-workflow.png" width="100%" /> ] [이광춘, "krvote - 대한민국 선거 데이터 패키지", 2022-06-09](https://ai-carpentry.github.io/krvote/) ] .panel[.panel-name[후처리작업] <br> .center[ <img src = "fig/asia-data-workflow-pkg.png" width="100%" /> ] [이광춘, "krvote - 대한민국 선거 데이터 패키지", 2022-06-09](https://ai-carpentry.github.io/krvote/) ] .panel[.panel-name[krvote] .center[
] ] .panel[.panel-name[활용사례] <br> <br> <br> <br> <br> .center[ [제19대 대통령 선거 결과](https://aispiration.com/president/president-election-2017.html) <br> <br> [제8대 경기지사 대쉬보드](https://aispiration.com/president/gg-dashboard.html) ] ] ] --- name: nec-ai # 선거 공공데이터 활성화 .panelset[ .panel[.panel-name[여론조사] .center[<img src = "fig/nesdc-homepage.jpg" width="80%" />] ] .panel[.panel-name[보고서] .center[<img src = "fig/nesdc-report.jpg" width="55%" />] [9150 - 제8회 전국동시지방선거 성남시장선거](https://www.nesdc.go.kr/files/result/202207/FILE_202203140434198960.pdf.htm) ] .panel[.panel-name[이미지] .center[<img src = "fig/nesdc-png.jpg" width="100%" />] ] .panel[.panel-name[PDF] .center[<img src = "fig/nesdc-pdf.jpg" width="75%" />] ] .panel[.panel-name[시각화] <br> <br> .center[<img src = "fig/nesdc-viz.png" width="100%" />] ] .panel[.panel-name[→] <br> <br> .center[<img src = "fig/nesdc-viz.png" width="100%" />] ] .panel[.panel-name[다함께 미래로] .center[<img src = "fig/nesdc-future.png" width="90%" />] ] ] <!----------------- 4. 마무리 ------------------------> --- name: asia-goodbye class: middle, inverse .pull-left[ # **경청해 주셔서 <br>감사합니다.** <br/> ## [한국 R 사용자회](https://r2bit.com/) ] .pull-right[ .right[ <img style="border-radius: 100%;" src="fig/korea_R_logo.png" width="300px"/> ] ]