1 of 34

공무원 환경에서의 �업무 자동화

코로나19 동향 보고서 자동화 &

법안 검토 반복업무 자동화

2 of 34

About Me

보건복지위원회 입법조사관

상임위, 법제실, 예산정책처 등 �국회에서 2009년부터 근무

PyCon Korea 2018-2021 발표

매번 법률 분석만 발표하다가�이번에는 일 쉽게 하는 방법에 �대해 발표하게 되었습니다.

https://sites.google.com/view/jaeyoon-kim�(source code)

3 of 34

Contents

Why?

‘코로나19 동향 보고서’ 자동화

법안 검토 지원 시스템

Epilogue

4 of 34

Why?

일을 더 쉽게 하고 싶어서

저는 지금까지 Python을 �데이터 분석용으로만 써 왔는데,

퇴근을 빨리 하는 데에도 Python이 유용한 것을 뒤늦게 깨달았습니다.

이미 대중화된 기술이지만,

유용하게 봐주셨으면 합니다.

5 of 34

Why?

“공무원 환경”에서 �일을 더 쉽게 하고 싶어서

“공무원 환경”

  • 보고는 출력된 문서로
  • 아래아 한글 사용
  • 셀 병합, 복잡한 표
  • 진지한 폰트, 개조식
  • 협업도구 없음, 오직 email

6 of 34

‘코로나19 동향 보고서’ 자동화

7 of 34

‘코로나19 동향 보고서’

새 부서에 가보니 매주 이런 보고서를 월요일 오전 10시에 보고하고 있습니다.

그런데 이걸 8명의 사람이 수작업으로 만듭니다.

8 of 34

자동화 이전 상황

매주 8명의 담당자들이 만들어온 결과물을 수동으로 취합

모든 차트에 들어가는 “2020년 3월 23일 미국 무제한 양적 완화” 세로선

→ 아래아 한글에서 수동으로 그려줘야 함

각 담당자들이 만들어오는 차트의 크기가 달라지거나 오류 발생.

결과물이 제 때 안 들어올 때도

도대체 왜? 일을 이렇게 하고 있는가? ( 내 시간, 손목, 멘탈… )

9 of 34

나는 한다. 자동화를.

Bank of Korea

api

Data Process

Make Charts

Thomson Reuter Eikon

FRED- fredapi

FinanceData�Reader

Our world in data Github

Make Tables

Covid-19 data

Economic data

pandas,

datetime

urllib,

requests

matplotlib,

seaborn

win32com.client

Ref. 2018 Pycon 인생은 짧아요, 엑셀 대신 파이썬/ 이승준님

Ref. 2019 Pycon 코알못 직장인의 파이썬-아래한글 도전기/�신명진님

data source

아래아 한글

word processor

automation

pandas

10 of 34

11 of 34

데이터 불러오기

OWID에서 데이터 불러오기

urllib으로 고정된 github 주소의 csv를 다운로드�(가끔 과거 통계를 바꾸기 때문에 전체 데이터 다운로드)

국가간 순위가 중요한 보고서이므로, 200개 이상의 국가 통계가 발표된 시점을 기준시점으로 잡음

12 of 34

표 만들기

코로나 19 전세계 일일 발생동향 총괄표를 간단한 pandas 기능을 이용하여 만들어주고,

R1이라는 데이터프레임에 입력

13 of 34

아래아 한글 자동화 – 기본사항

미리 준비한 코로나동향재료.hwp를 �열어서 조작 시작

여기서 Field는 한글에서의 누름틀을 의미

기준 날짜, 현재 날짜, 몇 월 몇 주차, 제 몇 호 등과 같이 기본적으로 보고서에 들어갈 사항을 자동화하는 코드

Field(누름틀)에 ‘호수’와 ‘날짜’ 자동으로 입력한 결과

14 of 34

아래아 한글 자동화 – pandas dataframe → 한글 표

한글 표의 좌측상단에 미리 Field(누름틀)를 설정

Field에서 오른쪽, 아래 이동을 통해 값을 채워넣음

예: Hwp.Haction.Run(“MoveRight”)

단위 수, 소수 단위 및 1000단위 콤마를 찍도록 설정

15 of 34

엑셀과 유사한 시각화를 해주기 위해 코드가 과하게 길어짐 (“공무원 환경”과 보고 받는 사람에 대한 고려)

코로나19 신규 확진자가 천명 내외로 나오는 한국과 1만 또는 10만 단위로 나오는 경우를 구분

def plot(name, digit, unit, ff) → plot(국가 또는 지역명, 실제 숫자 단위, 텍스트로 표시할 숫자 단위, 필드명)

16 of 34

차트 시각화

def 이후의 시행은 아주 간략합니다.

17 of 34

금융 데이터 시각화

한국은행 데이터 다운로드 받아 차트 그리기

차트별로 따로 설계된 디자인 요소 때문에 코드가 불가피하게 복잡하고 길어짐.

18 of 34

금융 데이터 표 작성

환율표의 자동 작성 코드

표를 hwp에 채우는 코드를 먼저 def 하고

데이터를 이용하여 전전주 마지막 날짜(휴일 때문에 금요일이 아닐 수 있음!) 대비 전주 마지막 날짜의 변동치를 계산

내린 경우에는 파란색, 오른 경우에는 빨간색을 칠하도록 설정

hwp.HAction.Run("CharShapeTextColorRed")

* Table은 앞서 설명한 dataframe → 한글 표 코드를 def한 것 (첨부 코드 참조)

19 of 34

법안 검토 반복업무 자동화

20 of 34

자동화 이전의 상황

6개월만에 또 새로운 부서로 이동.

입법조사관 개인이 수작업으로 다음의 작업을 합니다.

의안원문, 비용추계서 다운로드, 폴더 구조 만들기

법안 검토보고, 심사보고서에 기본 사항 입력�(법안 번호, 제출일, 회부일, 제안이유 등)

문제는 법안은 1년에 5,000개가 넘게 들어온다는 것 �(입법조사관들이 이 단순반복업무를 1년에 5,000번 하고 있다는 것임)

→ 기계적인 일은 말 그대로 기계가 하도록 하자 (아직 베타 버전)

21 of 34

나는 또 한다. 자동화를.

1) make folder structure

2) download legislative bills

data gathering

os

도움: 2019 Pycon 코알못 직장인의 파이썬-아래한글 도전기/�신명진님

urllib

requests

3) 검토보고서 표지 자동작성

open.assembly.go.kr (api)

likms.assembly.go.kr (web)

urllib

requests

bs4

win32com.client

4) 자료요청서

자동작성

5) 심사보고서 표지 자동작성

win32com.client

※ 신구조문대비표 복사

work allocation

excel file

pandas

make reports

data source

22 of 34

23 of 34

자동화할 법률안 목록 입력

국회 상임위원회 입법조사관의 업무는 법률안을 단위로 이루어짐.

따라서 새로 들어온 법률안의 소관과 담당을 정한 목록을 매주 엑셀로 만들어서 행정실에서 공지하고 있는데,

이 엑셀을 입력해서 자동화를 하기로 합니다.

※ 행정실의 소관·담당 지정 업무도 자동화를 해 드려야 하는데 그것은 나중에…

24 of 34

법안별 폴더 만들기

담당 조사관별로 별도로 작성(ㅁㅁㅁ업무 폴더), 입력된 엑셀의 데이터를 이용

※ 추후에 자동 메일링으로 발전시키기 위한 설계

25 of 34

폴더에 내용 넣기 – 법안, 비용추계서 다운로드

  1. ‘열린국회정보’ open api를 이용해서 법안 의안정보 url 얻기
  2. 해당 url에 가서 법안과 비용추계서의 다운로드 id를 알아내기�(다운로드 url을 조합하기 위해 필요)
  3. urllib으로 다운로드 url에서 법안, 비용추계서 다운로드, 각 법안별로 딱 맞는 폴더에 넣어주기

26 of 34

2차 크롤링 예시

http://likms.assembly.go.kr/bill/billDetail.do?billId=PRC_W2R1B0I6G0W3K1Y5V4K8H0Q7J7D6D9

  1. 빨간색 표시한 아래아 한글 파일을 다운로드 받고 싶은데, 이를 위해서는 filegate의 다운로드 id를 알아내야 함 → html소스의 빨간 부분

27 of 34

검토보고서 자동화 1

누름틀(field)로 도배가 된 검토보고서 자동화용 파일 준비

프로그래밍을 위해 field 이름을 잘 기억해두세요.

Field 이름과 빨간색으로 표시되는 description을 일치시키는 방법도 있습니다.

28 of 34

검토보고서 자동화 2

열린국회정보(open.assembly.go.kr)의

open api에서 얻을 수 있는 정보를 모두 추출.

api에서 제공하는 날짜 형식은 “0000-00-00”인데

보고서에서 사용하는 형식은 “2021. 8. 7.”이므로

텍스트 함수를 이용해서 정리해줄 것.

29 of 34

검토보고서 자동화 3

앞서와 같이 2차 크롤링을 할 것.

이번에는 법률안의 제안이유와 주요내용을 가져오기 위함.

매우 아쉽게도 “제안이유 및 주요내용”으로 통으로 써 있는 경우와

“제안이유“와 “주요내용”이 분리된 경우가 다르므로,

경우의 수를 나누어서 각각 처리.

텍스트의 정리를 위해서 re(정규표현식) 사용.

30 of 34

검토보고서 자동화 4

이제 win32를 이용해서

준비된 “검토보고서재료.hwp“에

준비된 데이터를 다 넣습니다.

정부가 제출한 법률안과 국회의원이 발의한 법률안의 표시 방법이 다르므로,�이를 고려해서 설계

※ win32는 윈도우에 기반한 모듈이어서 google colab을 비롯한 리눅스 환경에서는 작동하지 않는 점이 가장 큰 문제. 환경 의존적이지 않은 다른 방법을 개발할 필요가 있음.

31 of 34

Epilogue

1. 자동화가 유용한 경우는 � 한정적

코로나19 보고서 자동화 결과

4명분의 단순 반복업무가 사라졌습니다.

그러나 분석 업무는 여전히 사람이 합니다.

32 of 34

Epilogue

2. 자동화의 지속가능성 문제

전임 과에 놔두고 온 코드는 언젠가는 고장이 날 겁니다.

제가 예전 부서의 코드를 계속 관리하기는 어렵습니다.

후임자들이 이 코드를 관리할 수 있을까요?

33 of 34

Epilogue

3. 목마른 사람이 우물을 파야

전자정부 사업은 계속 하는데, 도구는 부족

실제 일을 하는 사람의 참여가 필요

"What will happen if civil servants can program their own computer?"

34 of 34

감사합니다.