안녕하세요. 오픈소스컨설팅 박상원입니다.
최근 많은 교육 기관에서 Python을 이용해서 코딩 교육을 하고 있습니다.
하지만 많은 분들이 Python의 문법에서 다른 활용을 못 하고 흐지부지 되는 경우가 많을 텐데요.
오늘은 딱딱한 예제가 아닌 재미난 예제를 통해서 자연스럽게 프래그래밍 흥미를 붙일 수 있게 도와드리고자 합니다.
그래서 오늘 할 것은?
Pandas, 벤포드의 규칙을 이용한 재미난 것을 해보겠습니다.
시작에 앞서 각각 간단한 설명을 집고 넘어가겠습니다.
팬더스(pandas)는 파이썬의 데이터 분석 라이브러리이다. 팬더스는 수치형 테이블과 시계열 데이터를 조작하고 운영하기 위한 데이터를 제공하는데, 3조항 BSD 라이선스 조건 하에서 무료로 사용 가능하다.
namu wiki
Pandas를 이용하면 Excel에서 데이터를 불러와서 조작할 수 있으며 이는 빅데이터 분야뿐만 아니라 일반 스텝 부서에서도 업무 자동화를 꼭 필요한 강력한 툴입니다. 다만 처음엔 개념이 잡는 게 어려울 수 있으면 파면 팔수록 복잡해져서 흥미를 잃을 수 있으니 수박 겉핥기 식으로 필요한 부분만 습득을 추천 드립니다.
벤포드의 법칙이란, 광범위한 분포를 보이는 수치 데이터들의 가장 큰 자리의 숫자는 작은 숫자인 경향을 보인다는 것이다.
namu wiki
예를 들어 1,000원이 2,000원이 되려면 2배가 상승해야 됩니다. 2,000원에서 3,000원이 되려면 1.5배만 상승하면 됩니다. 이런식으로 가다보면 9,000원이 10,000이 약 1.1배만 상승하면 되죠, 결국 1이 2가되는 시간이 제일 오래 걸리므로 1이 제일 많이 분포할 것입니다.
결론은 자연적으로 만들어진 숫자 집합에서는 위 법칙을 따르며 인위적으로 조작할 경우 분포가 깨진다.
이를 이용해 세계 여러나라 회계 감시 기간은 벤포드의 법칙을 사용중이며 유명한 엔론의 분식회계 장부 사건의 경우도 벤포드의 법칙으로 탐지가 가능하다.
실습 시작
쉽게 따라하기 위해 Google의 Colaboratory를 이용하여 실습합니다.
재무재표를 이용하면 제일 재미지겠지만 민감한 부분이 있을 수 있으니 “정부 데이터 공공센터”에서 데이터를 얻어봅시다.
제가 이용할 데이터 셋은 서울 따릉이 이용 현황입니다.
직접 복잡한 계산으로 구현하는 방법도 있지만 과정이 복잡하면 흥미를 잃기에 누군가가 만들어놓은 라이브러리를 이용하겠습니다!
# 라이브러리 설치
pip insttall benfordslaw
아무 문제 없이 되었다면 “Successfully installed benfordslaw” 출력 됩니다.
분석할 데이터 셋을 왼쪽 파일 탭에 업로드 해주세요.
#pandas 임포트
import pandas as pd
#서울 바이크 데이터 불러오기
df = pd.read_csv('/content/SeoulBikeData.csv',encoding= 'cp949')
#가져온 데이터 출력
df
DF로 가져온 데이터를 확인할 수 있고, 우리는 그 중에 ” Rented Bike Count“의 데이터만 이용할 것 이므로 별도의 data 변수에 “Rented Bike Count“를 가져온다.
data = df['Rented Bike Count']
이제 아까 설치한 benfordslaw를 import해준다.
from benfordslaw import benfordslaw
bf = benfordslaw()
#pandas에서 추출해 놓은 data를 bf.fit 명령어로 분석한다
results = bf.fit(data)
신기하게도 너무나 예쁜 그래프를 보여준다.
결국 위 데이터는 벤포드의 법칙(조작되지 않은..)에 크게 위반되지 않는 데이터로 나왔다.
#그래프로 결과를 보여준다.
bf.plot()
참고) 강원도_지역내 총생산(GRDP)_20181231에 대한 분석은 다음과 같습니다.
결과…
벤포드의 법칙은 모든 데이터의 통하지 않고 연속적인, 즉 시계열 데이터에 신뢰성을 그나마 높일 수 있었습니다.
사람의 키 같은 데이터는 의미 없고 데이터의 양도 어느 정도 중요하다고 생각합니다.
실제 외국이나 많은 회계 감사 회사에서 참고용으로 사용하는 만큼 위 법칙의 힘을 무시할 수는 없겠네요.
마지막으로 오늘은 좀 더 실생활?에 응용할 수 있는 예제에 대한 포스팅을 해봤는데요.
저는 이전에는 프로그래밍을 공부할 때 문법을 마스터가 중요하다고 생각해서 끝까지 책만 보면서 for문 돌리다가 매번 흥미를 잃고 포기하였는데요. 어느날 우연찮게 제가 원하는 기능의 프로젝트를 만들면서부터 프로그래밍이 뜬구름이 아닌 좀더 쉽게 다가온 것 같습니다.
제가 경험했던 예제를 통한 학습 방법을 통해 여러분들도 단순 반복 문법 공부에서 포기하지 않고 끝까지 본인의 코드를 만드셨으면 좋겠습니다!