Dances with the Last Samurai
django + pandas + python-docx
통계업무도구 만들기
이 성 용
Dances with the Last Samurai
개발자 아닌 사람이
개발부서가 아닌 통계부서에서
하지 말라는 개발하는 이야기
이 성 용
saintdragon2@gmail.com
저는 개발자는 아닙니다
• 농업토목공학 전공
• 구조해석 등 수치해석 프로그래밍
• 기상자료, 수문 자료 처리 경험
과거
저는 개발자는 아닙니다
과학기술정보통신부 산하 기관 취업
명함 어디에도 개발 비슷한 말도 없음
현재
국제 통계 업무 책임자가 되었습니다
• 연구개발활동조사
• 기업, 연구소, 대학 등 1년간 연구개발비, 연구원 수 전수 조사
• 정부, 통계청, OECD에 제출
과학
기술
전문
얼마나 적이고
적이고
적인 방법으로 작성될까요?
56,109
조사업체
1~2 dataset / week
4 sheets
600 columns
조사업체
• 보고서 40 page
• 통계청 제출용 50 page
• OECD 제출용 30 page
• 통계표 400 page
• 보고서 40 page
• 통계청 제출용 50 page
• OECD 제출용 30 page
• 통계표 400 page
• 만약 통계표 383 page에서
이상한 수치를 발견한다면?
4 sheets
56,109 rows
600 columns
버전 관리도 어렵다.
도대체 몇 번을
전화하는 겁니까?
클라우드 서비스도 이용할 수 없다…
업무 프로세스: 수제(Handmade) 통계
신입 직원이니까 시키는 대로 해보자
• Vlookup으로 전년도, 전전년도 자료와 비교
• 수시로 들어오는 자료 산출 요청
• 예1: “국회의원 OO인데, 최근 10년 지역별 연구원 통계 작성해주세요”
• 예2: “OO전자 지난 5년간 연구비 변화가 어떻지?”
HUMAN ERROR 가 발생할 수밖에 없는 구조
1년치 엑셀 파일 여는데만 2~3분
(자동저장이 발동된다면…)
개발을 해야 한다고 생각했지만..
언어장벽.
정의justice definition
function기능 함수
equation균등화 방정식
DB
PYTHON
DB가 있어야 해요. 개발을 해야 합니다!
• Q. 이런 일을 하는데, DB는 필수입니다. 엄청 편할 것 같지 않나요?
• A: 이미 DB는 있어요. 폴더 찾아보세요.
DB
• 이미 있다는 DB는……..연도별 엑셀 파일…
일관되지 않은 데이터 양식
• “경상북도 남성 연구원 수”를 표현하는 다양한 방법
경상북도 남성 연구원
경상북도_남성_연구원
경북 연구원 남
경북 연구원 남성
개발을 하겠습니다!
업무파악이 우선입니다.
개발을 하면 안 되는 이유
• 기존의 업무 체계를 바꾸는 것은 위험이 따른다
• 혼자 하는 일이 아니다
• 우리는 IT 부서가 아니다
꾸준히 증가하는 조사 대상 기관
25692
29526
32673
36715
41869
48381
56109
20,000
30,000
40,000
50,000
60,000
2008 2009 2010 2011 2012 2013 2014 2015 2016
조사 대상 기관 수
아무런 위험도 감수하지 않는 것이
가장 큰 위험이다
개발의 원칙
• 매일, 조금씩, 최소한
• 낮에 개발하지 않는다 (내가 개발하는 동안, 내가 해야 할 일을 동료가 부담하게 된다 )
• 오늘 밤 개발해서 내일 쓴다
• 현재의 체제를 최대한 유지한다
• 모든 결과물은 excel 로
• 새로운 체제를 동료에게 강요하지 않는다
• 테스트! 테스트! 테스트!
• 절대로 나를 믿지 말라
우리가 하려는 것
awesome.py
주변 사람들의 반응
awesome.py내 컴퓨터에 뭘 자꾸 설치 하겠다는거냐.
• The web framework for perfectionist with deadline
• 누구나 브라우저만 있다면 바로 사용 가능
• 파이썬 설치, 환경 설정 불필요!
• 배포도 불필요 (url 링크만 공유하면 끝)
• 웹은 누구에게나 가장 친숙한 구조
• 사용하기도 쉽고
• 만들기도 쉽다 (UI 예제도 많다)
Django를 쓰세요
• 간단하고 작은 프로그램일 수록 거부반응도 작다
• 반복적이고 일상적인 프로그램
• 복잡한 작동은 Django 뒤로 감추기
작고 간단한 것부터!
• Web crawler
• 웹검색 결과 copy & paste 작업을 자동화
• Ex) 사업자등록번호 검증
• Kreport에서 사업자등록번호 검색 후 저장
Selenium
Selenium + Django
Selenium + Django
통계업무도구
개발 시작
본격적으로…
Pandas + Django
기존 방식
• 전년도 자료와 올해 자료 비교
• 엑셀 vlookup 함수로 비교표
만든 뒤 검토
• 1주일에 2회
• 무한 마우스 스크롤
개선 방식
• Data Analysis Library
• 엑셀 읽고 쓰기 쉬움
• 엑셀 기능을 대체 할 수 있음
• Open Source
• Easy to Use
?
?
• 모델을 만들면, 관리자 페이지 자동 생성
자료: django girls (https://tutorial.djangogirls.org/ko/django_models/)
댓글 달기
• 기록 남기고 공유 가능
댓글 달기 -> Slack 전달
이상한 데이터 자동으로 검출하기
일일이 그래프 보고 댓글 달기 귀찮아서 자동화…
이상한 데이터에 관한 이메일 만들기
이메일 쓰기 귀찮아서 자동화…
이상한 데이터에 관한 이메일 만들기
댓글달고, problem resolve로 체크하기 시연
영상
통계 산출 업무 자동화
• 400페이지에 달하는 통계표를 자동으로 뽑아보자
• 현재는 손으로 엑셀로 하고 있음
• 끝없는 엑셀 피벗의 향연
통계 산출하기
• Django 모델 Pandas DataFrame으로 변환하기
통계 산출하기
• Django 모델 Pandas DataFrame으로 변환하기
통계 산출하기
• Django 모델 Pandas DataFrame으로 변환하기
보고서 작성 자동화
(Python-Docx)
https://python-docx.readthedocs.io/en/latest/
인쇄업체
보고서 작성 자동화
(Python-Docx)
https://python-docx.readthedocs.io/en/latest/
PYCHARM 라이선스 살게요!
PYCHARM을
왜 Jet Brains에서 구입합니까!!??
행정상 안된다고 할 때.
PYCHARM 라이선스 살게
요!
어떻게 하면 되나요?
A, B, C !!#$!#@$ 하면 됩니다.
싸우지 마세요
• 행정/재무 담당자는 오지 탐험 가이드, 경호원과 같은 존재
• 담당자가 아니라 규정과 관행이 막고 있는 것을 잊지 말자
• 동반자가 될 수 있음!
1년간 고생한 결과
• 낮에 Pycharm을 열 수 있다!
• 밤에 개발하지 마세요
• 동료와 함께 쓰는 즐거움
• 옆 박사님도 개발을…
• 외주…
Do It Yourself
• 외주 vs 직접 개발
• 때론 직접 하는 것이 더 효율적
Dances with the Last Samurai
감사합니다
이 성 용
saintdragon2@gmail.com

Pycon2017 이성용 Dances with the Last Samurai