├── README.md
├── ch_01
├── 101_python_package_data_collect.ipynb
├── 102_OPEN_API_이용해서_데이터_수집하기.ipynb
├── 103_urllib_crawling_fnguide.ipynb
├── 104_requests_module.py
├── 105_selenium_crawling.py
├── 106_sqlite_database.py
├── 107_mysql_db.py
├── 108_collect_stock_data.py
└── a
├── ch_02
├── 201_pandas_packages.ipynb
├── 202_seaborn_이용하기.ipynb
├── 203_plotly이용하기.zip
├── 204_dash_html.py
├── 205_dash_markdown.py
├── 206_dash_real_estate.py
├── 207_dash_real_estate_callback.py
└── a
├── ch_03
├── 301_인구통계_시각화.ipynb
├── 302_currency_stock_real.py
├── 303_base_interest_rates.py
├── 304_dashboard.py
├── 305_real_estate_lent_ratio.py
├── 306_gang_nam_time.py
├── 307_dividend.py
├── 307_stock_div_ana.ipynb
└── a
└── 소스코드.zip
/README.md:
--------------------------------------------------------------------------------
1 | # 금융 데이터를 위한 파이썬
2 |
3 | - 부제: 부동산&주식 데이터 수집·분석·활용까지
4 | - 저자: 테리엇
5 | - 출간일: 2020년 6월 26일
6 | - 정가: 24,000원
7 | - 페이지: 288
8 |
9 | ## 구매 링크
10 |
11 | - [yes24](http://www.yes24.com/Product/Goods/90593157?scode=032&OzSrank=1)
12 | - [교보문고](http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9791190014984&orderClick=LAG&Kc=)
13 | - [알라딘](https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=242925880)
14 | - [인터파크](http://book.interpark.com/product/BookDisplay.do?_method=detail&sc.shopNo=0000400000&sc.prdNo=333468455&sc.saNo=003002001&bid1=search&bid2=product&bid3=img&bid4=001)
15 |
16 | 
17 |
18 | ## 책 소개
19 |
20 | 데이터 수집 · 분석 · 활용을 위한 최적의 도구,
21 | ‘파이썬’으로 정복하는 금융 데이터!
22 |
23 | 파이썬은 문법이 쉽고 이미 개발된 다양한 패키지가 있는, 가장 적은 노력으로 큰 효과를 볼 수 있는 프로그래밍 언어이다. 이 책은 파이썬으로 비전문가가 금융 데이터를 ‘쉽고’, ‘빠르게’ 수집 · 분석 · 활용할 수 있는 방법을 소개한다. 또한 부동산, 주식 투자, 재무제표 등 실생활에 적용 가능한 금융 관련 소재를 다뤄 누구나 쉽고 흥미롭게 접근 가능하다. 더 나아가 이 책에서 소개하는 방법을 통해 다른 영역의 데이터 역시 활용할 수 있도록 저자의 경험과 노하우를 제공한다.
24 |
25 | 데이터를 수집하고 분석하는 일은 더 이상 전문가의 영역이 아니다. 이미 많이 공개되어 있는 금융 데이터와 이 책을 활용하여 금융 데이터를 수집 · 분석 · 활용하는 것의 유용성을 깨닫고 투자까지 연결하는 등 데이터를 효율적으로 다룰 수 있게 되기를 바란다.
26 |
27 | ## 이 책의 특징
28 |
29 | - 파이썬을 이용하여 데이터를 수집하고 분석하는 방법을 이해할 수 있다.
30 | - 데이터 분석 및 프레젠테이션을 위한 시각화 기법을 다룬다.
31 | - 금융 데이터를 활용하는 노하우가 담겨 있다.
32 |
33 | ## 이 책이 필요한 독자
34 |
35 | - 실생활에 파이썬을 적용하는 것에 관심이 있는 분
36 | - 데이터를 수집하고 분석하고자 하는 학생과 직장인
37 | - 데이터를 효율적으로 활용하는 방법이 궁금한 분
38 |
39 | ## 목차
40 |
41 | Chapter1. 금융 데이터 수집하기
42 | 1.1 파이썬 패키지를 이용하여 데이터 수집하기
43 | 1.2 OPEN API를 이용하여 데이터 수집하기
44 | 1.3 웹 크롤링을 이용하여 데이터 수집하기
45 | 1.4 수집한 데이터 저장하기
46 | 1.5 실제 데이터를 수집해 보자
47 |
48 | Chapter2. 금융 데이터 분석하기
49 | 2.1 데이터 정리하기
50 | 2.2 데이터 시각화 및 분석하기
51 | 2.3 데이터 프레젠테이션하기
52 | 2.4 dash 웹 대시보드 만들기
53 |
54 | Chapter3. 금융 데이터 활용하기
55 | 3.1 인구 통계 시각화하기
56 | 3.2 유동성과 주가, 부동산 가격 비교하기
57 | 3.3 주요 각국의 기준금리 비교하기
58 | 3.4 금융 대시보드 만들기
59 | 3.5 매매가 대비 전세가 높은 아파트 찾아보기
60 | 3.6 강남역에서 가까운 아파트 찾아보기
61 |
62 |
63 | ## 출판사 리뷰
64 | 개개인이 금융 데이터를 수집하는 것이 어려웠던 과거와는 달리, 이제는 누구나 공개된 금융 데이터를 수집하고, 분석 및 활용할 수 있게 되었다. 이런 데이터를 수집・활용하는 방법은 여러 가지가 있지만 쉬운 문법과 다양한 패키지가 있는 파이썬을 이용하는 것이 가장 효율적이다.
65 |
66 | 본 도서는 비전문가가 파이썬으로 금융 관련 데이터를 수집하고 분석 및 자동화하는 방안에 대해 다룬다. 주식, 부동산, 금융 분야 등 재테크에 관심이 있는 독자뿐만 아니라, 데이터 분석에 관심이 있지만 어떻게 시작해야 할지 모르는 독자도 이 책을 통해 데이터를 수집, 분석 및 자동화하기까지의 전체 프로젝트를 경험할 수 있다. 그리고 금융 데이터를 분석하고 시각화함으로써 경제를 잘 이해할 수 있으며 투자에까지 연결할 수 있다. 책을 다 읽은 독자라면 금융 데이터 외에 자신이 관심 있는 분야의 데이터까지 직접 분석하고 활용할 수 있을 것이다.
67 |
--------------------------------------------------------------------------------
/ch_01/102_OPEN_API_이용해서_데이터_수집하기.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 13,
6 | "metadata": {},
7 | "outputs": [],
8 | "source": [
9 | "from urllib.request import urlopen\n",
10 | "\n",
11 | "API_KEY = \"부여받은 인증키를 입력합니다\"\n",
12 | "LAWD_CD = \"11110\"\n",
13 | "DEAL_YMD = \"201512\"\n",
14 | "\n",
15 | "url = \"http://openapi.molit.go.kr/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcNrgTrade?serviceKey={}&LAWD_CD={}&DEAL_YMD={}\".format(API_KEY,LAWD_CD,DEAL_YMD)\n",
16 | "result = urlopen(url)"
17 | ]
18 | },
19 | {
20 | "cell_type": "code",
21 | "execution_count": 14,
22 | "metadata": {},
23 | "outputs": [
24 | {
25 | "name": "stdout",
26 | "output_type": "stream",
27 | "text": [
28 | "b'- <\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1>120,000\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81>395\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84>\\xec\\xa0\\x9c2\\xec\\xa2\\x85\\xea\\xb7\\xbc\\xeb\\xa6\\xb0\\xec\\x83\\x9d\\xed\\x99\\x9c\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84><\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84>2001\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84><\\xeb\\x85\\x84>2015\\xeb\\x85\\x84><\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81>160.64\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99> \\xed\\x9a\\xa8\\xec\\x9e\\x90\\xeb\\x8f\\x99\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99><\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac>\\xec\\xa2\\x85\\xeb\\xa1\\x9c\\xea\\xb5\\xac\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac><\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad>\\xec\\xa0\\x9c2\\xec\\xa2\\x85\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\xa3\\xbc\\xea\\xb1\\xb0\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad><\\xec\\x9b\\x94>12\\xec\\x9b\\x94><\\xec\\x9c\\xa0\\xed\\x98\\x95>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x9c\\xa0\\xed\\x98\\x95><\\xec\\x9d\\xbc>31\\xec\\x9d\\xbc><\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>11110\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>
- <\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1>483,000\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81>937\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84>\\xec\\xa0\\x9c2\\xec\\xa2\\x85\\xea\\xb7\\xbc\\xeb\\xa6\\xb0\\xec\\x83\\x9d\\xed\\x99\\x9c\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84><\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84>1990\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84><\\xeb\\x85\\x84>2015\\xeb\\x85\\x84><\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81>503.5\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99> \\xec\\xb2\\xb4\\xeb\\xb6\\x80\\xeb\\x8f\\x99\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99><\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac>\\xec\\xa2\\x85\\xeb\\xa1\\x9c\\xea\\xb5\\xac\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac><\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad>\\xec\\xa0\\x9c2\\xec\\xa2\\x85\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\xa3\\xbc\\xea\\xb1\\xb0\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad><\\xec\\x9b\\x94>12\\xec\\x9b\\x94><\\xec\\x9c\\xa0\\xed\\x98\\x95>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x9c\\xa0\\xed\\x98\\x95><\\xec\\x9d\\xbc>15\\xec\\x9d\\xbc><\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>11110\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>
- <\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1>22,000\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81>31\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84>\\xed\\x8c\\x90\\xeb\\xa7\\xa4\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84><\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84>2007\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84><\\xeb\\x85\\x84>2015\\xeb\\x85\\x84><\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81> \\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99> \\xec\\xa2\\x85\\xeb\\xa1\\x9c1\\xea\\xb0\\x80\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99><\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac>\\xec\\xa2\\x85\\xeb\\xa1\\x9c\\xea\\xb5\\xac\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac><\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x83\\x81\\xec\\x97\\x85\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad><\\xec\\x9b\\x94>12\\xec\\x9b\\x94><\\xec\\x9c\\xa0\\xed\\x98\\x95>\\xec\\xa7\\x91\\xed\\x95\\xa9\\xec\\x9c\\xa0\\xed\\x98\\x95><\\xec\\x9d\\xbc>10\\xec\\x9d\\xbc><\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>11110\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c><\\xec\\xb8\\xb5>-1\\xec\\xb8\\xb5>
- <\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1>158,000\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81>276\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84>\\xec\\x88\\x99\\xeb\\xb0\\x95\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84><\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84>1959\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84><\\xeb\\x85\\x84>2015\\xeb\\x85\\x84><\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81>72.8\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99> \\xec\\x99\\x80\\xeb\\xa3\\xa1\\xeb\\x8f\\x99\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99><\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac>\\xec\\xa2\\x85\\xeb\\xa1\\x9c\\xea\\xb5\\xac\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac><\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x83\\x81\\xec\\x97\\x85\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad><\\xec\\x9b\\x94>12\\xec\\x9b\\x94><\\xec\\x9c\\xa0\\xed\\x98\\x95>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x9c\\xa0\\xed\\x98\\x95><\\xec\\x9d\\xbc>8\\xec\\x9d\\xbc><\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>11110\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>
- <\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1>158,000\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81>276\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84>\\xec\\x88\\x99\\xeb\\xb0\\x95\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84><\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84>1959\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84><\\xeb\\x85\\x84>2015\\xeb\\x85\\x84><\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81>72.8\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99> \\xec\\x99\\x80\\xeb\\xa3\\xa1\\xeb\\x8f\\x99\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99><\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac>\\xec\\xa2\\x85\\xeb\\xa1\\x9c\\xea\\xb5\\xac\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac><\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x83\\x81\\xec\\x97\\x85\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad><\\xec\\x9b\\x94>12\\xec\\x9b\\x94><\\xec\\x9c\\xa0\\xed\\x98\\x95>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x9c\\xa0\\xed\\x98\\x95><\\xec\\x9d\\xbc>8\\xec\\x9d\\xbc><\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>11110\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>
- <\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1>247,500\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81>154\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84>\\xec\\xa0\\x9c2\\xec\\xa2\\x85\\xea\\xb7\\xbc\\xeb\\xa6\\xb0\\xec\\x83\\x9d\\xed\\x99\\x9c\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84><\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84>1976\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84><\\xeb\\x85\\x84>2015\\xeb\\x85\\x84><\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81>105.8\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99> \\xec\\x82\\xbc\\xec\\xb2\\xad\\xeb\\x8f\\x99\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99><\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac>\\xec\\xa2\\x85\\xeb\\xa1\\x9c\\xea\\xb5\\xac\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac><\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad>\\xec\\xa0\\x9c1\\xec\\xa2\\x85\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\xa3\\xbc\\xea\\xb1\\xb0\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad><\\xec\\x9b\\x94>12\\xec\\x9b\\x94><\\xec\\x9c\\xa0\\xed\\x98\\x95>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x9c\\xa0\\xed\\x98\\x95><\\xec\\x9d\\xbc>21\\xec\\x9d\\xbc><\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>11110\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>
- <\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1>160,000\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81>79\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84>\\xec\\xa0\\x9c1\\xec\\xa2\\x85\\xea\\xb7\\xbc\\xeb\\xa6\\xb0\\xec\\x83\\x9d\\xed\\x99\\x9c\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84><\\xeb\\x85\\x84>2015\\xeb\\x85\\x84><\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81>178.5\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99> \\xec\\x82\\xbc\\xec\\xb2\\xad\\xeb\\x8f\\x99\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99><\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac>\\xec\\xa2\\x85\\xeb\\xa1\\x9c\\xea\\xb5\\xac\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac><\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad>\\xec\\xa0\\x9c1\\xec\\xa2\\x85\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\xa3\\xbc\\xea\\xb1\\xb0\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad><\\xec\\x9b\\x94>12\\xec\\x9b\\x94><\\xec\\x9c\\xa0\\xed\\x98\\x95>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x9c\\xa0\\xed\\x98\\x95><\\xec\\x9d\\xbc>29\\xec\\x9d\\xbc><\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>11110\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>
- <\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1>174,000\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81>323\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84>\\xec\\xa0\\x9c2\\xec\\xa2\\x85\\xea\\xb7\\xbc\\xeb\\xa6\\xb0\\xec\\x83\\x9d\\xed\\x99\\x9c\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84><\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84>1976\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84><\\xeb\\x85\\x84>2015\\xeb\\x85\\x84><\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81>191.7\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99> \\xeb\\xb4\\x89\\xec\\x9d\\xb5\\xeb\\x8f\\x99\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99><\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac>\\xec\\xa2\\x85\\xeb\\xa1\\x9c\\xea\\xb5\\xac\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac><\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x83\\x81\\xec\\x97\\x85\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad><\\xec\\x9b\\x94>12\\xec\\x9b\\x94><\\xec\\x9c\\xa0\\xed\\x98\\x95>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x9c\\xa0\\xed\\x98\\x95><\\xec\\x9d\\xbc>28\\xec\\x9d\\xbc><\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>11110\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>
- <\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1>162,000\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81>201\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84>\\xec\\xa0\\x9c2\\xec\\xa2\\x85\\xea\\xb7\\xbc\\xeb\\xa6\\xb0\\xec\\x83\\x9d\\xed\\x99\\x9c\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84><\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84>1961\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84><\\xeb\\x85\\x84>2015\\xeb\\x85\\x84><\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81>112.5\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99> \\xec\\x9d\\xb8\\xec\\x9d\\x98\\xeb\\x8f\\x99\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99><\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac>\\xec\\xa2\\x85\\xeb\\xa1\\x9c\\xea\\xb5\\xac\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac><\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x83\\x81\\xec\\x97\\x85\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad><\\xec\\x9b\\x94>12\\xec\\x9b\\x94><\\xec\\x9c\\xa0\\xed\\x98\\x95>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x9c\\xa0\\xed\\x98\\x95><\\xec\\x9d\\xbc>3\\xec\\x9d\\xbc><\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>11110\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>
- <\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1>14,700\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81>9\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84>\\xec\\xa0\\x9c2\\xec\\xa2\\x85\\xea\\xb7\\xbc\\xeb\\xa6\\xb0\\xec\\x83\\x9d\\xed\\x99\\x9c\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84><\\xeb\\x85\\x84>2015\\xeb\\x85\\x84><\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81> \\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99> \\xec\\x98\\x88\\xec\\xa7\\x80\\xeb\\x8f\\x99\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99><\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac>\\xec\\xa2\\x85\\xeb\\xa1\\x9c\\xea\\xb5\\xac\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac><\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x83\\x81\\xec\\x97\\x85\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad><\\xec\\x9b\\x94>12\\xec\\x9b\\x94><\\xec\\x9c\\xa0\\xed\\x98\\x95>\\xec\\xa7\\x91\\xed\\x95\\xa9\\xec\\x9c\\xa0\\xed\\x98\\x95><\\xec\\x9d\\xbc>18\\xec\\x9d\\xbc><\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>11110\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>
- <\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1>420,000\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81>1073\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84>\\xec\\xa0\\x9c1\\xec\\xa2\\x85\\xea\\xb7\\xbc\\xeb\\xa6\\xb0\\xec\\x83\\x9d\\xed\\x99\\x9c\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84><\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84>1964\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84><\\xeb\\x85\\x84>2015\\xeb\\x85\\x84><\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81>81\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99> \\xec\\xa2\\x85\\xeb\\xa1\\x9c5\\xea\\xb0\\x80\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99><\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac>\\xec\\xa2\\x85\\xeb\\xa1\\x9c\\xea\\xb5\\xac\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac><\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x83\\x81\\xec\\x97\\x85\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad><\\xec\\x9b\\x94>12\\xec\\x9b\\x94><\\xec\\x9c\\xa0\\xed\\x98\\x95>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x9c\\xa0\\xed\\x98\\x95><\\xec\\x9d\\xbc>23\\xec\\x9d\\xbc><\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>11110\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>
- <\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1>63,000\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81>10\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84>\\xed\\x8c\\x90\\xeb\\xa7\\xa4\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84><\\xeb\\x85\\x84>2015\\xeb\\x85\\x84><\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81> \\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99> \\xec\\xa2\\x85\\xeb\\xa1\\x9c6\\xea\\xb0\\x80\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99><\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac>\\xec\\xa2\\x85\\xeb\\xa1\\x9c\\xea\\xb5\\xac\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac><\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x83\\x81\\xec\\x97\\x85\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad><\\xec\\x9b\\x94>12\\xec\\x9b\\x94><\\xec\\x9c\\xa0\\xed\\x98\\x95>\\xec\\xa7\\x91\\xed\\x95\\xa9\\xec\\x9c\\xa0\\xed\\x98\\x95><\\xec\\x9d\\xbc>1\\xec\\x9d\\xbc><\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>11110\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c><\\xec\\xb8\\xb5>31\\xec\\xb8\\xb5>
- <\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1>80,000\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81>10\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84>\\xed\\x8c\\x90\\xeb\\xa7\\xa4\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84><\\xeb\\x85\\x84>2015\\xeb\\x85\\x84><\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81> \\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99> \\xec\\xa2\\x85\\xeb\\xa1\\x9c6\\xea\\xb0\\x80\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99><\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac>\\xec\\xa2\\x85\\xeb\\xa1\\x9c\\xea\\xb5\\xac\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac><\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x83\\x81\\xec\\x97\\x85\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad><\\xec\\x9b\\x94>12\\xec\\x9b\\x94><\\xec\\x9c\\xa0\\xed\\x98\\x95>\\xec\\xa7\\x91\\xed\\x95\\xa9\\xec\\x9c\\xa0\\xed\\x98\\x95><\\xec\\x9d\\xbc>7\\xec\\x9d\\xbc><\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>11110\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c><\\xec\\xb8\\xb5>30\\xec\\xb8\\xb5>
- <\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1>75,000\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81>12\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84>\\xed\\x8c\\x90\\xeb\\xa7\\xa4\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84><\\xeb\\x85\\x84>2015\\xeb\\x85\\x84><\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81> \\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99> \\xec\\xa2\\x85\\xeb\\xa1\\x9c6\\xea\\xb0\\x80\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99><\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac>\\xec\\xa2\\x85\\xeb\\xa1\\x9c\\xea\\xb5\\xac\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac><\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x83\\x81\\xec\\x97\\x85\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad><\\xec\\x9b\\x94>12\\xec\\x9b\\x94><\\xec\\x9c\\xa0\\xed\\x98\\x95>\\xec\\xa7\\x91\\xed\\x95\\xa9\\xec\\x9c\\xa0\\xed\\x98\\x95><\\xec\\x9d\\xbc>16\\xec\\x9d\\xbc><\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>11110\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c><\\xec\\xb8\\xb5>31\\xec\\xb8\\xb5>
- <\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1>138,700\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81>270\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84>\\xec\\xa0\\x9c1\\xec\\xa2\\x85\\xea\\xb7\\xbc\\xeb\\xa6\\xb0\\xec\\x83\\x9d\\xed\\x99\\x9c\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84><\\xeb\\x85\\x84>2015\\xeb\\x85\\x84><\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81>77.3\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99> \\xeb\\xaa\\x85\\xeb\\xa5\\x9c2\\xea\\xb0\\x80\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99><\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac>\\xec\\xa2\\x85\\xeb\\xa1\\x9c\\xea\\xb5\\xac\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac><\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x83\\x81\\xec\\x97\\x85\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad><\\xec\\x9b\\x94>12\\xec\\x9b\\x94><\\xec\\x9c\\xa0\\xed\\x98\\x95>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x9c\\xa0\\xed\\x98\\x95><\\xec\\x9d\\xbc>19\\xec\\x9d\\xbc><\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>11110\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>
- <\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1>100,000\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81>68\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84>\\xec\\xa0\\x9c2\\xec\\xa2\\x85\\xea\\xb7\\xbc\\xeb\\xa6\\xb0\\xec\\x83\\x9d\\xed\\x99\\x9c\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84><\\xeb\\x85\\x84>2015\\xeb\\x85\\x84><\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81>73\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99> \\xeb\\xaa\\x85\\xeb\\xa5\\x9c2\\xea\\xb0\\x80\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99><\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac>\\xec\\xa2\\x85\\xeb\\xa1\\x9c\\xea\\xb5\\xac\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac><\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad>\\xec\\xa0\\x9c2\\xec\\xa2\\x85\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\xa3\\xbc\\xea\\xb1\\xb0\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad><\\xec\\x9b\\x94>12\\xec\\x9b\\x94><\\xec\\x9c\\xa0\\xed\\x98\\x95>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x9c\\xa0\\xed\\x98\\x95><\\xec\\x9d\\xbc>21\\xec\\x9d\\xbc><\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>11110\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>
- <\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1>79,500\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81>41\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84>\\xec\\xa0\\x9c2\\xec\\xa2\\x85\\xea\\xb7\\xbc\\xeb\\xa6\\xb0\\xec\\x83\\x9d\\xed\\x99\\x9c\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84><\\xeb\\x85\\x84>2015\\xeb\\x85\\x84><\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81>98.2\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99> \\xec\\xb0\\xbd\\xec\\x8b\\xa0\\xeb\\x8f\\x99\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99><\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac>\\xec\\xa2\\x85\\xeb\\xa1\\x9c\\xea\\xb5\\xac\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac><\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x83\\x81\\xec\\x97\\x85\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad><\\xec\\x9b\\x94>12\\xec\\x9b\\x94><\\xec\\x9c\\xa0\\xed\\x98\\x95>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x9c\\xa0\\xed\\x98\\x95><\\xec\\x9d\\xbc>7\\xec\\x9d\\xbc><\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>11110\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>
- <\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1>16,500\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81>8\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84>\\xed\\x8c\\x90\\xeb\\xa7\\xa4\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84><\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84>1997\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84><\\xeb\\x85\\x84>2015\\xeb\\x85\\x84><\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81> \\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99> \\xec\\xb0\\xbd\\xec\\x8b\\xa0\\xeb\\x8f\\x99\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99><\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac>\\xec\\xa2\\x85\\xeb\\xa1\\x9c\\xea\\xb5\\xac\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac><\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x83\\x81\\xec\\x97\\x85\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad><\\xec\\x9b\\x94>12\\xec\\x9b\\x94><\\xec\\x9c\\xa0\\xed\\x98\\x95>\\xec\\xa7\\x91\\xed\\x95\\xa9\\xec\\x9c\\xa0\\xed\\x98\\x95><\\xec\\x9d\\xbc>10\\xec\\x9d\\xbc><\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>11110\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c><\\xec\\xb8\\xb5>2\\xec\\xb8\\xb5>
- <\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1>12,000\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81>35\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84>\\xec\\xa0\\x9c2\\xec\\xa2\\x85\\xea\\xb7\\xbc\\xeb\\xa6\\xb0\\xec\\x83\\x9d\\xed\\x99\\x9c\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84><\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84>1997\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84><\\xeb\\x85\\x84>2015\\xeb\\x85\\x84><\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81> \\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99> \\xec\\xb0\\xbd\\xec\\x8b\\xa0\\xeb\\x8f\\x99\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99><\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac>\\xec\\xa2\\x85\\xeb\\xa1\\x9c\\xea\\xb5\\xac\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac><\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x83\\x81\\xec\\x97\\x85\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad><\\xec\\x9b\\x94>12\\xec\\x9b\\x94><\\xec\\x9c\\xa0\\xed\\x98\\x95>\\xec\\xa7\\x91\\xed\\x95\\xa9\\xec\\x9c\\xa0\\xed\\x98\\x95><\\xec\\x9d\\xbc>16\\xec\\x9d\\xbc><\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>11110\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>
- <\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1>1,700\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81>9\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84>\\xed\\x8c\\x90\\xeb\\xa7\\xa4\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84><\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84>1993\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84><\\xeb\\x85\\x84>2015\\xeb\\x85\\x84><\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81> \\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99> \\xec\\xb0\\xbd\\xec\\x8b\\xa0\\xeb\\x8f\\x99\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99><\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac>\\xec\\xa2\\x85\\xeb\\xa1\\x9c\\xea\\xb5\\xac\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac><\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad>\\xec\\xa0\\x9c3\\xec\\xa2\\x85\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\xa3\\xbc\\xea\\xb1\\xb0\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad><\\xec\\x9b\\x94>12\\xec\\x9b\\x94><\\xec\\x9c\\xa0\\xed\\x98\\x95>\\xec\\xa7\\x91\\xed\\x95\\xa9\\xec\\x9c\\xa0\\xed\\x98\\x95><\\xec\\x9d\\xbc>17\\xec\\x9d\\xbc><\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>11110\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>
- <\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1>1,700\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81>9\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84>\\xed\\x8c\\x90\\xeb\\xa7\\xa4\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84><\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84>1993\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84><\\xeb\\x85\\x84>2015\\xeb\\x85\\x84><\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81> \\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99> \\xec\\xb0\\xbd\\xec\\x8b\\xa0\\xeb\\x8f\\x99\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99><\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac>\\xec\\xa2\\x85\\xeb\\xa1\\x9c\\xea\\xb5\\xac\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac><\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad>\\xec\\xa0\\x9c3\\xec\\xa2\\x85\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\xa3\\xbc\\xea\\xb1\\xb0\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad><\\xec\\x9b\\x94>12\\xec\\x9b\\x94><\\xec\\x9c\\xa0\\xed\\x98\\x95>\\xec\\xa7\\x91\\xed\\x95\\xa9\\xec\\x9c\\xa0\\xed\\x98\\x95><\\xec\\x9d\\xbc>17\\xec\\x9d\\xbc><\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>11110\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>
- <\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1>10,800\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81>33\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84>\\xea\\xb5\\x90\\xec\\x9c\\xa1\\xec\\x97\\xb0\\xea\\xb5\\xac\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84><\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84>1997\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84><\\xeb\\x85\\x84>2015\\xeb\\x85\\x84><\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81> \\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99> \\xec\\xb0\\xbd\\xec\\x8b\\xa0\\xeb\\x8f\\x99\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99><\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac>\\xec\\xa2\\x85\\xeb\\xa1\\x9c\\xea\\xb5\\xac\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac><\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x83\\x81\\xec\\x97\\x85\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad><\\xec\\x9b\\x94>12\\xec\\x9b\\x94><\\xec\\x9c\\xa0\\xed\\x98\\x95>\\xec\\xa7\\x91\\xed\\x95\\xa9\\xec\\x9c\\xa0\\xed\\x98\\x95><\\xec\\x9d\\xbc>21\\xec\\x9d\\xbc><\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>11110\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>
- <\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1>9,180\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81>29\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84>\\xea\\xb5\\x90\\xec\\x9c\\xa1\\xec\\x97\\xb0\\xea\\xb5\\xac\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84><\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84>1997\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84><\\xeb\\x85\\x84>2015\\xeb\\x85\\x84><\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81> \\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99> \\xec\\xb0\\xbd\\xec\\x8b\\xa0\\xeb\\x8f\\x99\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99><\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac>\\xec\\xa2\\x85\\xeb\\xa1\\x9c\\xea\\xb5\\xac\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac><\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x83\\x81\\xec\\x97\\x85\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad><\\xec\\x9b\\x94>12\\xec\\x9b\\x94><\\xec\\x9c\\xa0\\xed\\x98\\x95>\\xec\\xa7\\x91\\xed\\x95\\xa9\\xec\\x9c\\xa0\\xed\\x98\\x95><\\xec\\x9d\\xbc>21\\xec\\x9d\\xbc><\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>11110\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c><\\xec\\xb8\\xb5>9\\xec\\xb8\\xb5>
- <\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1>9,180\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81>30\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84>\\xec\\x97\\x85\\xeb\\xac\\xb4\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84><\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84>1997\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84><\\xeb\\x85\\x84>2015\\xeb\\x85\\x84><\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81> \\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99> \\xec\\xb0\\xbd\\xec\\x8b\\xa0\\xeb\\x8f\\x99\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99><\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac>\\xec\\xa2\\x85\\xeb\\xa1\\x9c\\xea\\xb5\\xac\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac><\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x83\\x81\\xec\\x97\\x85\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad><\\xec\\x9b\\x94>12\\xec\\x9b\\x94><\\xec\\x9c\\xa0\\xed\\x98\\x95>\\xec\\xa7\\x91\\xed\\x95\\xa9\\xec\\x9c\\xa0\\xed\\x98\\x95><\\xec\\x9d\\xbc>21\\xec\\x9d\\xbc><\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>11110\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>
- <\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1>10,800\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81>35\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84>\\xec\\x97\\x85\\xeb\\xac\\xb4\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84><\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84>1997\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84><\\xeb\\x85\\x84>2015\\xeb\\x85\\x84><\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81> \\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99> \\xec\\xb0\\xbd\\xec\\x8b\\xa0\\xeb\\x8f\\x99\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99><\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac>\\xec\\xa2\\x85\\xeb\\xa1\\x9c\\xea\\xb5\\xac\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac><\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x83\\x81\\xec\\x97\\x85\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad><\\xec\\x9b\\x94>12\\xec\\x9b\\x94><\\xec\\x9c\\xa0\\xed\\x98\\x95>\\xec\\xa7\\x91\\xed\\x95\\xa9\\xec\\x9c\\xa0\\xed\\x98\\x95><\\xec\\x9d\\xbc>21\\xec\\x9d\\xbc><\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>11110\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c><\\xec\\xb8\\xb5>10\\xec\\xb8\\xb5>
- <\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1>95,000\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81>348\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84>\\xec\\xa0\\x9c1\\xec\\xa2\\x85\\xea\\xb7\\xbc\\xeb\\xa6\\xb0\\xec\\x83\\x9d\\xed\\x99\\x9c\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84><\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84>1990\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84><\\xeb\\x85\\x84>2015\\xeb\\x85\\x84><\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81>166.3\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99> \\xec\\xb0\\xbd\\xec\\x8b\\xa0\\xeb\\x8f\\x99\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99><\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac>\\xec\\xa2\\x85\\xeb\\xa1\\x9c\\xea\\xb5\\xac\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac><\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad>\\xec\\xa0\\x9c3\\xec\\xa2\\x85\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\xa3\\xbc\\xea\\xb1\\xb0\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad><\\xec\\x9b\\x94>12\\xec\\x9b\\x94><\\xec\\x9c\\xa0\\xed\\x98\\x95>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x9c\\xa0\\xed\\x98\\x95><\\xec\\x9d\\xbc>23\\xec\\x9d\\xbc><\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>11110\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>
- <\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1>15,500\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81>56\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84>\\xec\\xa0\\x9c2\\xec\\xa2\\x85\\xea\\xb7\\xbc\\xeb\\xa6\\xb0\\xec\\x83\\x9d\\xed\\x99\\x9c\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84><\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84>1996\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84><\\xeb\\x85\\x84>2015\\xeb\\x85\\x84><\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81> \\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99> \\xec\\xb0\\xbd\\xec\\x8b\\xa0\\xeb\\x8f\\x99\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99><\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac>\\xec\\xa2\\x85\\xeb\\xa1\\x9c\\xea\\xb5\\xac\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac><\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad>\\xec\\xa0\\x9c2\\xec\\xa2\\x85\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\xa3\\xbc\\xea\\xb1\\xb0\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad><\\xec\\x9b\\x94>12\\xec\\x9b\\x94><\\xec\\x9c\\xa0\\xed\\x98\\x95>\\xec\\xa7\\x91\\xed\\x95\\xa9\\xec\\x9c\\xa0\\xed\\x98\\x95><\\xec\\x9d\\xbc>30\\xec\\x9d\\xbc><\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>11110\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c><\\xec\\xb8\\xb5>-1\\xec\\xb8\\xb5>
- <\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1>233,000\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81>945\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84>\\xec\\x88\\x99\\xeb\\xb0\\x95\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84><\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84>1975\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84><\\xeb\\x85\\x84>2015\\xeb\\x85\\x84><\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81>297.5\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99> \\xec\\x88\\xad\\xec\\x9d\\xb8\\xeb\\x8f\\x99\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99><\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac>\\xec\\xa2\\x85\\xeb\\xa1\\x9c\\xea\\xb5\\xac\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac><\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad>\\xec\\xa4\\x80\\xec\\xa3\\xbc\\xea\\xb1\\xb0\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad><\\xec\\x9b\\x94>12\\xec\\x9b\\x94><\\xec\\x9c\\xa0\\xed\\x98\\x95>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x9c\\xa0\\xed\\x98\\x95><\\xec\\x9d\\xbc>15\\xec\\x9d\\xbc><\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>11110\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>
- <\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1>12,250\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81>59\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84>\\xec\\xa0\\x9c1\\xec\\xa2\\x85\\xea\\xb7\\xbc\\xeb\\xa6\\xb0\\xec\\x83\\x9d\\xed\\x99\\x9c\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84><\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84>2015\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84><\\xeb\\x85\\x84>2015\\xeb\\x85\\x84><\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81> \\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99> \\xec\\x88\\xad\\xec\\x9d\\xb8\\xeb\\x8f\\x99\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99><\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac>\\xec\\xa2\\x85\\xeb\\xa1\\x9c\\xea\\xb5\\xac\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac><\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad>\\xec\\xa0\\x9c2\\xec\\xa2\\x85\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\xa3\\xbc\\xea\\xb1\\xb0\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad><\\xec\\x9b\\x94>12\\xec\\x9b\\x94><\\xec\\x9c\\xa0\\xed\\x98\\x95>\\xec\\xa7\\x91\\xed\\x95\\xa9\\xec\\x9c\\xa0\\xed\\x98\\x95><\\xec\\x9d\\xbc>18\\xec\\x9d\\xbc><\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>11110\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>
- <\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1>30,000\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81>25\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84>\\xec\\xa0\\x9c2\\xec\\xa2\\x85\\xea\\xb7\\xbc\\xeb\\xa6\\xb0\\xec\\x83\\x9d\\xed\\x99\\x9c\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84><\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84>2013\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84><\\xeb\\x85\\x84>2015\\xeb\\x85\\x84><\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81> \\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99> \\xec\\x88\\xad\\xec\\x9d\\xb8\\xeb\\x8f\\x99\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99><\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac>\\xec\\xa2\\x85\\xeb\\xa1\\x9c\\xea\\xb5\\xac\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac><\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x83\\x81\\xec\\x97\\x85\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad><\\xec\\x9b\\x94>12\\xec\\x9b\\x94><\\xec\\x9c\\xa0\\xed\\x98\\x95>\\xec\\xa7\\x91\\xed\\x95\\xa9\\xec\\x9c\\xa0\\xed\\x98\\x95><\\xec\\x9d\\xbc>23\\xec\\x9d\\xbc><\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>11110\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>
- <\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1>14,500\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81>54\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84>\\xec\\xa0\\x9c1\\xec\\xa2\\x85\\xea\\xb7\\xbc\\xeb\\xa6\\xb0\\xec\\x83\\x9d\\xed\\x99\\x9c\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84><\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84>2015\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84><\\xeb\\x85\\x84>2015\\xeb\\x85\\x84><\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81> \\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99> \\xec\\x88\\xad\\xec\\x9d\\xb8\\xeb\\x8f\\x99\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99><\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac>\\xec\\xa2\\x85\\xeb\\xa1\\x9c\\xea\\xb5\\xac\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac><\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad>\\xec\\xa0\\x9c2\\xec\\xa2\\x85\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\xa3\\xbc\\xea\\xb1\\xb0\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad><\\xec\\x9b\\x94>12\\xec\\x9b\\x94><\\xec\\x9c\\xa0\\xed\\x98\\x95>\\xec\\xa7\\x91\\xed\\x95\\xa9\\xec\\x9c\\xa0\\xed\\x98\\x95><\\xec\\x9d\\xbc>30\\xec\\x9d\\xbc><\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>11110\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>
- <\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1>2,800,000\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81>1878\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84>\\xec\\xa0\\x9c2\\xec\\xa2\\x85\\xea\\xb7\\xbc\\xeb\\xa6\\xb0\\xec\\x83\\x9d\\xed\\x99\\x9c\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84><\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84>1953\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84><\\xeb\\x85\\x84>2015\\xeb\\x85\\x84><\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81>964\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99> \\xed\\x8f\\x89\\xeb\\x8f\\x99\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99><\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac>\\xec\\xa2\\x85\\xeb\\xa1\\x9c\\xea\\xb5\\xac\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac><\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x83\\x81\\xec\\x97\\x85\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad><\\xec\\x9b\\x94>12\\xec\\x9b\\x94><\\xec\\x9c\\xa0\\xed\\x98\\x95>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x9c\\xa0\\xed\\x98\\x95><\\xec\\x9d\\xbc>11\\xec\\x9d\\xbc><\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>11110\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>
- <\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1>2,639,010\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81>2346\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84>\\xec\\x97\\x85\\xeb\\xac\\xb4\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84><\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84>1986\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84><\\xeb\\x85\\x84>2015\\xeb\\x85\\x84><\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81>872.4\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99> \\xed\\x8f\\x89\\xeb\\x8f\\x99\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99><\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac>\\xec\\xa2\\x85\\xeb\\xa1\\x9c\\xea\\xb5\\xac\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac><\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x83\\x81\\xec\\x97\\x85\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad><\\xec\\x9b\\x94>12\\xec\\x9b\\x94><\\xec\\x9c\\xa0\\xed\\x98\\x95>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x9c\\xa0\\xed\\x98\\x95><\\xec\\x9d\\xbc>11\\xec\\x9d\\xbc><\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>11110\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>
- <\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1>128,000\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81>221\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84>\\xec\\xa0\\x9c1\\xec\\xa2\\x85\\xea\\xb7\\xbc\\xeb\\xa6\\xb0\\xec\\x83\\x9d\\xed\\x99\\x9c\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84><\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84>1988\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84><\\xeb\\x85\\x84>2015\\xeb\\x85\\x84><\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81>239\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99> \\xed\\x8f\\x89\\xec\\xb0\\xbd\\xeb\\x8f\\x99\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99><\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac>\\xec\\xa2\\x85\\xeb\\xa1\\x9c\\xea\\xb5\\xac\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac><\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad>\\xec\\xa0\\x9c1\\xec\\xa2\\x85\\xec\\xa0\\x84\\xec\\x9a\\xa9\\xec\\xa3\\xbc\\xea\\xb1\\xb0\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad><\\xec\\x9b\\x94>12\\xec\\x9b\\x94><\\xec\\x9c\\xa0\\xed\\x98\\x95>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x9c\\xa0\\xed\\x98\\x95><\\xec\\x9d\\xbc>14\\xec\\x9d\\xbc><\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>11110\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>
- <\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1>192,000\\xea\\xb1\\xb0\\xeb\\x9e\\x98\\xea\\xb8\\x88\\xec\\x95\\xa1><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81>587\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84>\\xec\\xa0\\x9c1\\xec\\xa2\\x85\\xea\\xb7\\xbc\\xeb\\xa6\\xb0\\xec\\x83\\x9d\\xed\\x99\\x9c\\xea\\xb1\\xb4\\xeb\\xac\\xbc\\xec\\xa3\\xbc\\xec\\x9a\\xa9\\xeb\\x8f\\x84><\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84>1986\\xea\\xb1\\xb4\\xec\\xb6\\x95\\xeb\\x85\\x84\\xeb\\x8f\\x84><\\xeb\\x85\\x84>2015\\xeb\\x85\\x84><\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81>438\\xeb\\x8c\\x80\\xec\\xa7\\x80\\xeb\\xa9\\xb4\\xec\\xa0\\x81><\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99> \\xed\\x99\\x8d\\xec\\xa7\\x80\\xeb\\x8f\\x99\\xeb\\xb2\\x95\\xec\\xa0\\x95\\xeb\\x8f\\x99><\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac>\\xec\\xa2\\x85\\xeb\\xa1\\x9c\\xea\\xb5\\xac\\xec\\x8b\\x9c\\xea\\xb5\\xb0\\xea\\xb5\\xac><\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad>\\xec\\xa0\\x9c1\\xec\\xa2\\x85\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\xa3\\xbc\\xea\\xb1\\xb0\\xec\\x9a\\xa9\\xeb\\x8f\\x84\\xec\\xa7\\x80\\xec\\x97\\xad><\\xec\\x9b\\x94>12\\xec\\x9b\\x94><\\xec\\x9c\\xa0\\xed\\x98\\x95>\\xec\\x9d\\xbc\\xeb\\xb0\\x98\\xec\\x9c\\xa0\\xed\\x98\\x95><\\xec\\x9d\\xbc>21\\xec\\x9d\\xbc><\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>11110\\xec\\xa7\\x80\\xec\\x97\\xad\\xec\\xbd\\x94\\xeb\\x93\\x9c>
10135'\n"
29 | ]
30 | }
31 | ],
32 | "source": [
33 | "xml = result.read()\n",
34 | "print(xml)"
35 | ]
36 | },
37 | {
38 | "cell_type": "code",
39 | "execution_count": 17,
40 | "metadata": {},
41 | "outputs": [
42 | {
43 | "name": "stdout",
44 | "output_type": "stream",
45 | "text": [
46 | "\n",
47 | "- <거래금액>120,000거래금액><건물면적>395건물면적><건물주용도>제2종근린생활건물주용도><건축년도>2001건축년도><년>2015년><대지면적>160.64대지면적><법정동> 효자동법정동><시군구>종로구시군구><용도지역>제2종일반주거용도지역><월>12월><유형>일반유형><일>31일><지역코드>11110지역코드>
- <거래금액>483,000거래금액><건물면적>937건물면적><건물주용도>제2종근린생활건물주용도><건축년도>1990건축년도><년>2015년><대지면적>503.5대지면적><법정동> 체부동법정동><시군구>종로구시군구><용도지역>제2종일반주거용도지역><월>12월><유형>일반유형><일>15일><지역코드>11110지역코드>
- <거래금액>22,000거래금액><건물면적>31건물면적><건물주용도>판매건물주용도><건축년도>2007건축년도><년>2015년><대지면적> 대지면적><법정동> 종로1가법정동><시군구>종로구시군구><용도지역>일반상업용도지역><월>12월><유형>집합유형><일>10일><지역코드>11110지역코드><층>-1층>
- <거래금액>158,000거래금액><건물면적>276건물면적><건물주용도>숙박건물주용도><건축년도>1959건축년도><년>2015년><대지면적>72.8대지면적><법정동> 와룡동법정동><시군구>종로구시군구><용도지역>일반상업용도지역><월>12월><유형>일반유형><일>8일><지역코드>11110지역코드>
- <거래금액>158,000거래금액><건물면적>276건물면적><건물주용도>숙박건물주용도><건축년도>1959건축년도><년>2015년><대지면적>72.8대지면적><법정동> 와룡동법정동><시군구>종로구시군구><용도지역>일반상업용도지역><월>12월><유형>일반유형><일>8일><지역코드>11110지역코드>
- <거래금액>247,500거래금액><건물면적>154건물면적><건물주용도>제2종근린생활건물주용도><건축년도>1976건축년도><년>2015년><대지면적>105.8대지면적><법정동> 삼청동법정동><시군구>종로구시군구><용도지역>제1종일반주거용도지역><월>12월><유형>일반유형><일>21일><지역코드>11110지역코드>
- <거래금액>160,000거래금액><건물면적>79건물면적><건물주용도>제1종근린생활건물주용도><년>2015년><대지면적>178.5대지면적><법정동> 삼청동법정동><시군구>종로구시군구><용도지역>제1종일반주거용도지역><월>12월><유형>일반유형><일>29일><지역코드>11110지역코드>
- <거래금액>174,000거래금액><건물면적>323건물면적><건물주용도>제2종근린생활건물주용도><건축년도>1976건축년도><년>2015년><대지면적>191.7대지면적><법정동> 봉익동법정동><시군구>종로구시군구><용도지역>일반상업용도지역><월>12월><유형>일반유형><일>28일><지역코드>11110지역코드>
- <거래금액>162,000거래금액><건물면적>201건물면적><건물주용도>제2종근린생활건물주용도><건축년도>1961건축년도><년>2015년><대지면적>112.5대지면적><법정동> 인의동법정동><시군구>종로구시군구><용도지역>일반상업용도지역><월>12월><유형>일반유형><일>3일><지역코드>11110지역코드>
- <거래금액>14,700거래금액><건물면적>9건물면적><건물주용도>제2종근린생활건물주용도><년>2015년><대지면적> 대지면적><법정동> 예지동법정동><시군구>종로구시군구><용도지역>일반상업용도지역><월>12월><유형>집합유형><일>18일><지역코드>11110지역코드>
- <거래금액>420,000거래금액><건물면적>1073건물면적><건물주용도>제1종근린생활건물주용도><건축년도>1964건축년도><년>2015년><대지면적>81대지면적><법정동> 종로5가법정동><시군구>종로구시군구><용도지역>일반상업용도지역><월>12월><유형>일반유형><일>23일><지역코드>11110지역코드>
- <거래금액>63,000거래금액><건물면적>10건물면적><건물주용도>판매건물주용도><년>2015년><대지면적> 대지면적><법정동> 종로6가법정동><시군구>종로구시군구><용도지역>일반상업용도지역><월>12월><유형>집합유형><일>1일><지역코드>11110지역코드><층>31층>
- <거래금액>80,000거래금액><건물면적>10건물면적><건물주용도>판매건물주용도><년>2015년><대지면적> 대지면적><법정동> 종로6가법정동><시군구>종로구시군구><용도지역>일반상업용도지역><월>12월><유형>집합유형><일>7일><지역코드>11110지역코드><층>30층>
- <거래금액>75,000거래금액><건물면적>12건물면적><건물주용도>판매건물주용도><년>2015년><대지면적> 대지면적><법정동> 종로6가법정동><시군구>종로구시군구><용도지역>일반상업용도지역><월>12월><유형>집합유형><일>16일><지역코드>11110지역코드><층>31층>
- <거래금액>138,700거래금액><건물면적>270건물면적><건물주용도>제1종근린생활건물주용도><년>2015년><대지면적>77.3대지면적><법정동> 명륜2가법정동><시군구>종로구시군구><용도지역>일반상업용도지역><월>12월><유형>일반유형><일>19일><지역코드>11110지역코드>
- <거래금액>100,000거래금액><건물면적>68건물면적><건물주용도>제2종근린생활건물주용도><년>2015년><대지면적>73대지면적><법정동> 명륜2가법정동><시군구>종로구시군구><용도지역>제2종일반주거용도지역><월>12월><유형>일반유형><일>21일><지역코드>11110지역코드>
- <거래금액>79,500거래금액><건물면적>41건물면적><건물주용도>제2종근린생활건물주용도><년>2015년><대지면적>98.2대지면적><법정동> 창신동법정동><시군구>종로구시군구><용도지역>일반상업용도지역><월>12월><유형>일반유형><일>7일><지역코드>11110지역코드>
- <거래금액>16,500거래금액><건물면적>8건물면적><건물주용도>판매건물주용도><건축년도>1997건축년도><년>2015년><대지면적> 대지면적><법정동> 창신동법정동><시군구>종로구시군구><용도지역>일반상업용도지역><월>12월><유형>집합유형><일>10일><지역코드>11110지역코드><층>2층>
- <거래금액>12,000거래금액><건물면적>35건물면적><건물주용도>제2종근린생활건물주용도><건축년도>1997건축년도><년>2015년><대지면적> 대지면적><법정동> 창신동법정동><시군구>종로구시군구><용도지역>일반상업용도지역><월>12월><유형>집합유형><일>16일><지역코드>11110지역코드>
- <거래금액>1,700거래금액><건물면적>9건물면적><건물주용도>판매건물주용도><건축년도>1993건축년도><년>2015년><대지면적> 대지면적><법정동> 창신동법정동><시군구>종로구시군구><용도지역>제3종일반주거용도지역><월>12월><유형>집합유형><일>17일><지역코드>11110지역코드>
- <거래금액>1,700거래금액><건물면적>9건물면적><건물주용도>판매건물주용도><건축년도>1993건축년도><년>2015년><대지면적> 대지면적><법정동> 창신동법정동><시군구>종로구시군구><용도지역>제3종일반주거용도지역><월>12월><유형>집합유형><일>17일><지역코드>11110지역코드>
- <거래금액>10,800거래금액><건물면적>33건물면적><건물주용도>교육연구건물주용도><건축년도>1997건축년도><년>2015년><대지면적> 대지면적><법정동> 창신동법정동><시군구>종로구시군구><용도지역>일반상업용도지역><월>12월><유형>집합유형><일>21일><지역코드>11110지역코드>
- <거래금액>9,180거래금액><건물면적>29건물면적><건물주용도>교육연구건물주용도><건축년도>1997건축년도><년>2015년><대지면적> 대지면적><법정동> 창신동법정동><시군구>종로구시군구><용도지역>일반상업용도지역><월>12월><유형>집합유형><일>21일><지역코드>11110지역코드><층>9층>
- <거래금액>9,180거래금액><건물면적>30건물면적><건물주용도>업무건물주용도><건축년도>1997건축년도><년>2015년><대지면적> 대지면적><법정동> 창신동법정동><시군구>종로구시군구><용도지역>일반상업용도지역><월>12월><유형>집합유형><일>21일><지역코드>11110지역코드>
- <거래금액>10,800거래금액><건물면적>35건물면적><건물주용도>업무건물주용도><건축년도>1997건축년도><년>2015년><대지면적> 대지면적><법정동> 창신동법정동><시군구>종로구시군구><용도지역>일반상업용도지역><월>12월><유형>집합유형><일>21일><지역코드>11110지역코드><층>10층>
- <거래금액>95,000거래금액><건물면적>348건물면적><건물주용도>제1종근린생활건물주용도><건축년도>1990건축년도><년>2015년><대지면적>166.3대지면적><법정동> 창신동법정동><시군구>종로구시군구><용도지역>제3종일반주거용도지역><월>12월><유형>일반유형><일>23일><지역코드>11110지역코드>
- <거래금액>15,500거래금액><건물면적>56건물면적><건물주용도>제2종근린생활건물주용도><건축년도>1996건축년도><년>2015년><대지면적> 대지면적><법정동> 창신동법정동><시군구>종로구시군구><용도지역>제2종일반주거용도지역><월>12월><유형>집합유형><일>30일><지역코드>11110지역코드><층>-1층>
- <거래금액>233,000거래금액><건물면적>945건물면적><건물주용도>숙박건물주용도><건축년도>1975건축년도><년>2015년><대지면적>297.5대지면적><법정동> 숭인동법정동><시군구>종로구시군구><용도지역>준주거용도지역><월>12월><유형>일반유형><일>15일><지역코드>11110지역코드>
- <거래금액>12,250거래금액><건물면적>59건물면적><건물주용도>제1종근린생활건물주용도><건축년도>2015건축년도><년>2015년><대지면적> 대지면적><법정동> 숭인동법정동><시군구>종로구시군구><용도지역>제2종일반주거용도지역><월>12월><유형>집합유형><일>18일><지역코드>11110지역코드>
- <거래금액>30,000거래금액><건물면적>25건물면적><건물주용도>제2종근린생활건물주용도><건축년도>2013건축년도><년>2015년><대지면적> 대지면적><법정동> 숭인동법정동><시군구>종로구시군구><용도지역>일반상업용도지역><월>12월><유형>집합유형><일>23일><지역코드>11110지역코드>
- <거래금액>14,500거래금액><건물면적>54건물면적><건물주용도>제1종근린생활건물주용도><건축년도>2015건축년도><년>2015년><대지면적> 대지면적><법정동> 숭인동법정동><시군구>종로구시군구><용도지역>제2종일반주거용도지역><월>12월><유형>집합유형><일>30일><지역코드>11110지역코드>
- <거래금액>2,800,000거래금액><건물면적>1878건물면적><건물주용도>제2종근린생활건물주용도><건축년도>1953건축년도><년>2015년><대지면적>964대지면적><법정동> 평동법정동><시군구>종로구시군구><용도지역>일반상업용도지역><월>12월><유형>일반유형><일>11일><지역코드>11110지역코드>
- <거래금액>2,639,010거래금액><건물면적>2346건물면적><건물주용도>업무건물주용도><건축년도>1986건축년도><년>2015년><대지면적>872.4대지면적><법정동> 평동법정동><시군구>종로구시군구><용도지역>일반상업용도지역><월>12월><유형>일반유형><일>11일><지역코드>11110지역코드>
- <거래금액>128,000거래금액><건물면적>221건물면적><건물주용도>제1종근린생활건물주용도><건축년도>1988건축년도><년>2015년><대지면적>239대지면적><법정동> 평창동법정동><시군구>종로구시군구><용도지역>제1종전용주거용도지역><월>12월><유형>일반유형><일>14일><지역코드>11110지역코드>
- <거래금액>192,000거래금액><건물면적>587건물면적><건물주용도>제1종근린생활건물주용도><건축년도>1986건축년도><년>2015년><대지면적>438대지면적><법정동> 홍지동법정동><시군구>종로구시군구><용도지역>제1종일반주거용도지역><월>12월><유형>일반유형><일>21일><지역코드>11110지역코드>
10135\n"
48 | ]
49 | }
50 | ],
51 | "source": [
52 | "from bs4 import BeautifulSoup\n",
53 | "\n",
54 | "xmlsoup = BeautifulSoup(xml, 'lxml-xml')\n",
55 | "print(xmlsoup)"
56 | ]
57 | },
58 | {
59 | "cell_type": "code",
60 | "execution_count": 21,
61 | "metadata": {},
62 | "outputs": [
63 | {
64 | "data": {
65 | "text/plain": [
66 | "35"
67 | ]
68 | },
69 | "execution_count": 21,
70 | "metadata": {},
71 | "output_type": "execute_result"
72 | }
73 | ],
74 | "source": [
75 | "xml_item = xmlsoup.findAll(\"item\")\n",
76 | "len(xml_item)"
77 | ]
78 | },
79 | {
80 | "cell_type": "code",
81 | "execution_count": 67,
82 | "metadata": {},
83 | "outputs": [
84 | {
85 | "name": "stderr",
86 | "output_type": "stream",
87 | "text": [
88 | "100%|██████████| 35/35 [00:00<00:00, 1635.21it/s]\n"
89 | ]
90 | },
91 | {
92 | "data": {
93 | "text/plain": [
94 | "[['120,000', '395', '제2종근린생활', '2001', '2015', '12', '일반', '31', '11110'],\n",
95 | " ['483,000', '937', '제2종근린생활', '1990', '2015', '12', '일반', '15', '11110'],\n",
96 | " ['22,000', '31', '판매', '2007', '2015', '12', '집합', '10', '11110'],\n",
97 | " ['158,000', '276', '숙박', '1959', '2015', '12', '일반', '8', '11110'],\n",
98 | " ['158,000', '276', '숙박', '1959', '2015', '12', '일반', '8', '11110'],\n",
99 | " ['247,500', '154', '제2종근린생활', '1976', '2015', '12', '일반', '21', '11110'],\n",
100 | " ['160,000', '79', '제1종근린생활', '', '2015', '12', '일반', '29', '11110'],\n",
101 | " ['174,000', '323', '제2종근린생활', '1976', '2015', '12', '일반', '28', '11110'],\n",
102 | " ['162,000', '201', '제2종근린생활', '1961', '2015', '12', '일반', '3', '11110'],\n",
103 | " ['14,700', '9', '제2종근린생활', '', '2015', '12', '집합', '18', '11110'],\n",
104 | " ['420,000', '1073', '제1종근린생활', '1964', '2015', '12', '일반', '23', '11110'],\n",
105 | " ['63,000', '10', '판매', '', '2015', '12', '집합', '1', '11110'],\n",
106 | " ['80,000', '10', '판매', '', '2015', '12', '집합', '7', '11110'],\n",
107 | " ['75,000', '12', '판매', '', '2015', '12', '집합', '16', '11110'],\n",
108 | " ['138,700', '270', '제1종근린생활', '', '2015', '12', '일반', '19', '11110'],\n",
109 | " ['100,000', '68', '제2종근린생활', '', '2015', '12', '일반', '21', '11110'],\n",
110 | " ['79,500', '41', '제2종근린생활', '', '2015', '12', '일반', '7', '11110'],\n",
111 | " ['16,500', '8', '판매', '1997', '2015', '12', '집합', '10', '11110'],\n",
112 | " ['12,000', '35', '제2종근린생활', '1997', '2015', '12', '집합', '16', '11110'],\n",
113 | " ['1,700', '9', '판매', '1993', '2015', '12', '집합', '17', '11110'],\n",
114 | " ['1,700', '9', '판매', '1993', '2015', '12', '집합', '17', '11110'],\n",
115 | " ['10,800', '33', '교육연구', '1997', '2015', '12', '집합', '21', '11110'],\n",
116 | " ['9,180', '29', '교육연구', '1997', '2015', '12', '집합', '21', '11110'],\n",
117 | " ['9,180', '30', '업무', '1997', '2015', '12', '집합', '21', '11110'],\n",
118 | " ['10,800', '35', '업무', '1997', '2015', '12', '집합', '21', '11110'],\n",
119 | " ['95,000', '348', '제1종근린생활', '1990', '2015', '12', '일반', '23', '11110'],\n",
120 | " ['15,500', '56', '제2종근린생활', '1996', '2015', '12', '집합', '30', '11110'],\n",
121 | " ['233,000', '945', '숙박', '1975', '2015', '12', '일반', '15', '11110'],\n",
122 | " ['12,250', '59', '제1종근린생활', '2015', '2015', '12', '집합', '18', '11110'],\n",
123 | " ['30,000', '25', '제2종근린생활', '2013', '2015', '12', '집합', '23', '11110'],\n",
124 | " ['14,500', '54', '제1종근린생활', '2015', '2015', '12', '집합', '30', '11110'],\n",
125 | " ['2,800,000', '1878', '제2종근린생활', '1953', '2015', '12', '일반', '11', '11110'],\n",
126 | " ['2,639,010', '2346', '업무', '1986', '2015', '12', '일반', '11', '11110'],\n",
127 | " ['128,000', '221', '제1종근린생활', '1988', '2015', '12', '일반', '14', '11110'],\n",
128 | " ['192,000', '587', '제1종근린생활', '1986', '2015', '12', '일반', '21', '11110']]"
129 | ]
130 | },
131 | "execution_count": 67,
132 | "metadata": {},
133 | "output_type": "execute_result"
134 | }
135 | ],
136 | "source": [
137 | "from tqdm import tqdm\n",
138 | "\n",
139 | "com_re = list()\n",
140 | "\n",
141 | "for t in tqdm(xml_item):\n",
142 | " price=t.find(\"거래금액\").text\n",
143 | " bd_size=t.find(\"건물면적\").text\n",
144 | " bd_use=t.find(\"건물주용도\").text\n",
145 | " try:\n",
146 | " built_ym=t.find(\"건축년도\").text\n",
147 | " except:\n",
148 | " built_ym=\"\"\n",
149 | " buiit_y=t.find(\"년\").text\n",
150 | " built_m=t.find(\"월\").text\n",
151 | " bd_type=t.find(\"유형\").text\n",
152 | " built_d=t.find(\"일\").text\n",
153 | " lawd_cd=t.find(\"지역코드\").text\n",
154 | "\n",
155 | " com_re.append([price, bd_size, bd_use, built_ym, buiit_y, built_m, bd_type, built_d, lawd_cd])\n",
156 | " \n",
157 | "com_re"
158 | ]
159 | }
160 | ],
161 | "metadata": {
162 | "kernelspec": {
163 | "display_name": "Python 3",
164 | "language": "python",
165 | "name": "python3"
166 | },
167 | "language_info": {
168 | "codemirror_mode": {
169 | "name": "ipython",
170 | "version": 3
171 | },
172 | "file_extension": ".py",
173 | "mimetype": "text/x-python",
174 | "name": "python",
175 | "nbconvert_exporter": "python",
176 | "pygments_lexer": "ipython3",
177 | "version": "3.7.3"
178 | },
179 | "toc": {
180 | "base_numbering": 1,
181 | "nav_menu": {},
182 | "number_sections": true,
183 | "sideBar": true,
184 | "skip_h1_title": false,
185 | "title_cell": "Table of Contents",
186 | "title_sidebar": "Contents",
187 | "toc_cell": false,
188 | "toc_position": {},
189 | "toc_section_display": true,
190 | "toc_window_display": false
191 | }
192 | },
193 | "nbformat": 4,
194 | "nbformat_minor": 2
195 | }
196 |
--------------------------------------------------------------------------------
/ch_01/103_urllib_crawling_fnguide.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# urllib 패키지를 이용하여 웹크롤링하기"
8 | ]
9 | },
10 | {
11 | "cell_type": "markdown",
12 | "metadata": {},
13 | "source": [
14 | "## 삼성전자 재무제표 데이터 수집"
15 | ]
16 | },
17 | {
18 | "cell_type": "code",
19 | "execution_count": 4,
20 | "metadata": {},
21 | "outputs": [],
22 | "source": [
23 | "from urllib.request import urlopen\n",
24 | "\n",
25 | "URL = \"http://comp.fnguide.com/SVO2/ASP/SVD_Finance.asp?pGB=1&gicode=A005930\"\n",
26 | "\n",
27 | "req = urlopen(URL)\n",
28 | "html = req.read()"
29 | ]
30 | },
31 | {
32 | "cell_type": "code",
33 | "execution_count": 5,
34 | "metadata": {},
35 | "outputs": [],
36 | "source": [
37 | "from bs4 import BeautifulSoup\n",
38 | " \n",
39 | "soup = BeautifulSoup(html, 'html.parser')"
40 | ]
41 | },
42 | {
43 | "cell_type": "code",
44 | "execution_count": 6,
45 | "metadata": {},
46 | "outputs": [
47 | {
48 | "data": {
49 | "text/plain": [
50 | "
\n",
51 | "포괄손익계산서\n",
52 | "\n",
53 | "\n",
54 | "\n",
55 | "\n",
56 | "\n",
57 | "\n",
58 | "\n",
59 | "\n",
60 | "\n",
61 | "\n",
62 | "\n",
63 | "IFRS(연결) | \n",
64 | "2016/12 | \n",
65 | "2017/12 | \n",
66 | "2018/12 | \n",
67 | "2019/12 | \n",
68 | "전년동기 | \n",
69 | "전년동기(%) | \n",
70 | "
\n",
71 | "\n",
72 | "\n",
73 | "\n",
74 | "\n",
75 | " 매출액 \n",
76 | " | \n",
77 | "2,018,667 | \n",
78 | "2,395,754 | \n",
79 | "2,437,714 | \n",
80 | "2,304,009 | \n",
81 | "2,437,714 | \n",
82 | "-5.5 | \n",
83 | "
\n",
84 | "\n",
85 | "\n",
86 | " 매출원가 \n",
87 | " | \n",
88 | "1,202,777 | \n",
89 | "1,292,907 | \n",
90 | "1,323,944 | \n",
91 | "1,472,395 | \n",
92 | "1,323,944 | \n",
93 | "11.2 | \n",
94 | "
\n",
95 | "\n",
96 | "\n",
97 | " 매출총이익 \n",
98 | " | \n",
99 | "815,890 | \n",
100 | "1,102,847 | \n",
101 | "1,113,770 | \n",
102 | "831,613 | \n",
103 | "1,113,770 | \n",
104 | "-25.3 | \n",
105 | "
\n",
106 | "\n",
107 | "\n",
108 | "\n",
109 | " | \n",
110 | "523,484 | \n",
111 | "566,397 | \n",
112 | "524,903 | \n",
113 | "553,928 | \n",
114 | "524,903 | \n",
115 | "5.5 | \n",
116 | "
\n",
117 | "\n",
118 | " 인건비 | \n",
119 | "59,763 | \n",
120 | "67,972 | \n",
121 | "64,514 | \n",
122 | "64,226 | \n",
123 | "64,514 | \n",
124 | "-0.4 | \n",
125 | "
\n",
126 | "\n",
127 | " 유무형자산상각비 | \n",
128 | "10,018 | \n",
129 | "13,366 | \n",
130 | "14,477 | \n",
131 | "20,408 | \n",
132 | "14,477 | \n",
133 | "41.0 | \n",
134 | "
\n",
135 | "\n",
136 | " 연구개발비 | \n",
137 | "141,114 | \n",
138 | "163,556 | \n",
139 | "183,541 | \n",
140 | "199,072 | \n",
141 | "183,541 | \n",
142 | "8.5 | \n",
143 | "
\n",
144 | "\n",
145 | " 광고선전비 | \n",
146 | "44,321 | \n",
147 | "53,508 | \n",
148 | "39,985 | \n",
149 | "46,145 | \n",
150 | "39,985 | \n",
151 | "15.4 | \n",
152 | "
\n",
153 | "\n",
154 | " 판매비 | \n",
155 | "141,679 | \n",
156 | "139,165 | \n",
157 | "123,417 | \n",
158 | "117,222 | \n",
159 | "123,417 | \n",
160 | "-5.0 | \n",
161 | "
\n",
162 | "\n",
163 | " 관리비 | \n",
164 | "80,025 | \n",
165 | "77,031 | \n",
166 | "57,548 | \n",
167 | "55,131 | \n",
168 | "57,548 | \n",
169 | "-4.2 | \n",
170 | "
\n",
171 | "\n",
172 | " 기타원가성비용 | \n",
173 | " | \n",
174 | " | \n",
175 | " | \n",
176 | " | \n",
177 | " | \n",
178 | " | \n",
179 | "
\n",
180 | "\n",
181 | " 기타 | \n",
182 | "46,564 | \n",
183 | "51,799 | \n",
184 | "41,423 | \n",
185 | "51,724 | \n",
186 | "41,423 | \n",
187 | "24.9 | \n",
188 | "
\n",
189 | "\n",
190 | "\n",
191 | " 영업이익 \n",
192 | " | \n",
193 | "292,407 | \n",
194 | "536,450 | \n",
195 | "588,867 | \n",
196 | "277,685 | \n",
197 | "588,867 | \n",
198 | "-52.8 | \n",
199 | "
\n",
200 | "\n",
201 | "\n",
202 | " 영업이익(발표기준) \n",
203 | " | \n",
204 | "292,407 | \n",
205 | "536,450 | \n",
206 | "588,867 | \n",
207 | "277,685 | \n",
208 | "588,867 | \n",
209 | "-52.8 | \n",
210 | "
\n",
211 | "\n",
212 | "\n",
213 | "\n",
214 | " | \n",
215 | "113,856 | \n",
216 | "97,374 | \n",
217 | "99,993 | \n",
218 | "101,616 | \n",
219 | "99,993 | \n",
220 | "1.6 | \n",
221 | "
\n",
222 | "\n",
223 | " 이자수익 | \n",
224 | "15,043 | \n",
225 | "16,142 | \n",
226 | "22,971 | \n",
227 | "26,600 | \n",
228 | "22,971 | \n",
229 | "15.8 | \n",
230 | "
\n",
231 | "\n",
232 | " 배당금수익 | \n",
233 | " | \n",
234 | " | \n",
235 | " | \n",
236 | " | \n",
237 | " | \n",
238 | " | \n",
239 | "
\n",
240 | "\n",
241 | " 외환이익 | \n",
242 | "90,525 | \n",
243 | "72,789 | \n",
244 | "66,957 | \n",
245 | "67,690 | \n",
246 | "66,957 | \n",
247 | "1.1 | \n",
248 | "
\n",
249 | "\n",
250 | " 대손충당금환입액 | \n",
251 | " | \n",
252 | " | \n",
253 | " | \n",
254 | " | \n",
255 | " | \n",
256 | " | \n",
257 | "
\n",
258 | "\n",
259 | " 매출채권처분이익 | \n",
260 | " | \n",
261 | " | \n",
262 | " | \n",
263 | " | \n",
264 | " | \n",
265 | " | \n",
266 | "
\n",
267 | "\n",
268 | " 당기손익-공정가치측정 금융자산관련이익 | \n",
269 | " | \n",
270 | " | \n",
271 | " | \n",
272 | " | \n",
273 | " | \n",
274 | " | \n",
275 | "
\n",
276 | "\n",
277 | " 금융자산처분이익 | \n",
278 | " | \n",
279 | " | \n",
280 | " | \n",
281 | " | \n",
282 | " | \n",
283 | " | \n",
284 | "
\n",
285 | "\n",
286 | " 금융자산평가이익 | \n",
287 | " | \n",
288 | " | \n",
289 | " | \n",
290 | " | \n",
291 | " | \n",
292 | " | \n",
293 | "
\n",
294 | "\n",
295 | " 금융자산손상차손환입 | \n",
296 | " | \n",
297 | " | \n",
298 | " | \n",
299 | " | \n",
300 | " | \n",
301 | " | \n",
302 | "
\n",
303 | "\n",
304 | " 파생상품이익 | \n",
305 | "8,288 | \n",
306 | "8,443 | \n",
307 | "10,065 | \n",
308 | "7,326 | \n",
309 | "10,065 | \n",
310 | "-27.2 | \n",
311 | "
\n",
312 | "\n",
313 | " 기타금융수익 | \n",
314 | " | \n",
315 | " | \n",
316 | " | \n",
317 | " | \n",
318 | " | \n",
319 | " | \n",
320 | "
\n",
321 | "\n",
322 | "\n",
323 | "\n",
324 | " | \n",
325 | "107,066 | \n",
326 | "89,789 | \n",
327 | "86,089 | \n",
328 | "82,749 | \n",
329 | "86,089 | \n",
330 | "-3.9 | \n",
331 | "
\n",
332 | "\n",
333 | " 이자비용 | \n",
334 | "5,878 | \n",
335 | "6,554 | \n",
336 | "6,746 | \n",
337 | "6,864 | \n",
338 | "6,746 | \n",
339 | "1.7 | \n",
340 | "
\n",
341 | "\n",
342 | " 외환손실 | \n",
343 | "92,322 | \n",
344 | "72,695 | \n",
345 | "71,498 | \n",
346 | "68,524 | \n",
347 | "71,498 | \n",
348 | "-4.2 | \n",
349 | "
\n",
350 | "\n",
351 | " 대손상각비 | \n",
352 | " | \n",
353 | " | \n",
354 | " | \n",
355 | " | \n",
356 | " | \n",
357 | " | \n",
358 | "
\n",
359 | "\n",
360 | " 당기손익-공정가치측정 금융자산관련손실 | \n",
361 | " | \n",
362 | " | \n",
363 | " | \n",
364 | " | \n",
365 | " | \n",
366 | " | \n",
367 | "
\n",
368 | "\n",
369 | " 매출채권처분손실 | \n",
370 | " | \n",
371 | " | \n",
372 | " | \n",
373 | " | \n",
374 | " | \n",
375 | " | \n",
376 | "
\n",
377 | "\n",
378 | " 금융자산처분손실 | \n",
379 | " | \n",
380 | " | \n",
381 | " | \n",
382 | " | \n",
383 | " | \n",
384 | " | \n",
385 | "
\n",
386 | "\n",
387 | " 금융자산평가손실 | \n",
388 | " | \n",
389 | " | \n",
390 | " | \n",
391 | " | \n",
392 | " | \n",
393 | " | \n",
394 | "
\n",
395 | "\n",
396 | " 금융자산손상차손 | \n",
397 | " | \n",
398 | " | \n",
399 | " | \n",
400 | " | \n",
401 | " | \n",
402 | " | \n",
403 | "
\n",
404 | "\n",
405 | " 파생상품손실 | \n",
406 | "8,865 | \n",
407 | "10,540 | \n",
408 | "7,844 | \n",
409 | "7,361 | \n",
410 | "7,844 | \n",
411 | "-6.2 | \n",
412 | "
\n",
413 | "\n",
414 | " 기타금융원가 | \n",
415 | " | \n",
416 | " | \n",
417 | " | \n",
418 | " | \n",
419 | " | \n",
420 | " | \n",
421 | "
\n",
422 | "\n",
423 | "\n",
424 | "\n",
425 | " | \n",
426 | "32,383 | \n",
427 | "30,107 | \n",
428 | "14,850 | \n",
429 | "17,787 | \n",
430 | "14,850 | \n",
431 | "19.8 | \n",
432 | "
\n",
433 | "\n",
434 | " 이자수익 | \n",
435 | " | \n",
436 | " | \n",
437 | " | \n",
438 | " | \n",
439 | " | \n",
440 | " | \n",
441 | "
\n",
442 | "\n",
443 | " 배당금수익 | \n",
444 | "2,399 | \n",
445 | "1,289 | \n",
446 | "1,314 | \n",
447 | "1,547 | \n",
448 | "1,314 | \n",
449 | "17.7 | \n",
450 | "
\n",
451 | "\n",
452 | " 외환이익 | \n",
453 | " | \n",
454 | " | \n",
455 | " | \n",
456 | " | \n",
457 | " | \n",
458 | " | \n",
459 | "
\n",
460 | "\n",
461 | " 재고자산감모손실환입 | \n",
462 | " | \n",
463 | " | \n",
464 | " | \n",
465 | " | \n",
466 | " | \n",
467 | " | \n",
468 | "
\n",
469 | "\n",
470 | " 재고자산폐기(처분)이익 | \n",
471 | " | \n",
472 | " | \n",
473 | " | \n",
474 | " | \n",
475 | " | \n",
476 | " | \n",
477 | "
\n",
478 | "\n",
479 | " 당기손익-공정가치측정 금융자산평가이익 | \n",
480 | " | \n",
481 | " | \n",
482 | " | \n",
483 | " | \n",
484 | " | \n",
485 | " | \n",
486 | "
\n",
487 | "\n",
488 | " 자산처분(폐기)이익 | \n",
489 | "22,468 | \n",
490 | "3,143 | \n",
491 | "4,235 | \n",
492 | "3,524 | \n",
493 | "4,235 | \n",
494 | "-16.8 | \n",
495 | "
\n",
496 | "\n",
497 | " 자산평가이익 | \n",
498 | " | \n",
499 | " | \n",
500 | " | \n",
501 | " | \n",
502 | " | \n",
503 | " | \n",
504 | "
\n",
505 | "\n",
506 | " 자산손상차손환입 | \n",
507 | " | \n",
508 | " | \n",
509 | " | \n",
510 | " | \n",
511 | " | \n",
512 | " | \n",
513 | "
\n",
514 | "\n",
515 | " 파생상품이익 | \n",
516 | " | \n",
517 | " | \n",
518 | " | \n",
519 | " | \n",
520 | " | \n",
521 | " | \n",
522 | "
\n",
523 | "\n",
524 | " 임대료수익 | \n",
525 | "1,077 | \n",
526 | "1,435 | \n",
527 | "1,409 | \n",
528 | "1,534 | \n",
529 | "1,409 | \n",
530 | "8.9 | \n",
531 | "
\n",
532 | "\n",
533 | " 로열티수익 | \n",
534 | " | \n",
535 | " | \n",
536 | " | \n",
537 | " | \n",
538 | " | \n",
539 | " | \n",
540 | "
\n",
541 | "\n",
542 | " 수수료수익 | \n",
543 | " | \n",
544 | " | \n",
545 | " | \n",
546 | " | \n",
547 | " | \n",
548 | " | \n",
549 | "
\n",
550 | "\n",
551 | " 대손충당금환입 | \n",
552 | " | \n",
553 | " | \n",
554 | " | \n",
555 | " | \n",
556 | " | \n",
557 | " | \n",
558 | "
\n",
559 | "\n",
560 | " 충당부채환입액 | \n",
561 | " | \n",
562 | " | \n",
563 | " | \n",
564 | " | \n",
565 | " | \n",
566 | " | \n",
567 | "
\n",
568 | "\n",
569 | " 기타 | \n",
570 | "6,439 | \n",
571 | "24,239 | \n",
572 | "7,893 | \n",
573 | "11,182 | \n",
574 | "7,893 | \n",
575 | "41.7 | \n",
576 | "
\n",
577 | "\n",
578 | "\n",
579 | "\n",
580 | " | \n",
581 | "24,638 | \n",
582 | "14,196 | \n",
583 | "11,420 | \n",
584 | "14,147 | \n",
585 | "11,420 | \n",
586 | "23.9 | \n",
587 | "
\n",
588 | "\n",
589 | " 이자비용 | \n",
590 | " | \n",
591 | " | \n",
592 | " | \n",
593 | " | \n",
594 | " | \n",
595 | " | \n",
596 | "
\n",
597 | "\n",
598 | " 외환손실 | \n",
599 | " | \n",
600 | " | \n",
601 | " | \n",
602 | " | \n",
603 | " | \n",
604 | " | \n",
605 | "
\n",
606 | "\n",
607 | " 재고자산감모손실 | \n",
608 | " | \n",
609 | " | \n",
610 | " | \n",
611 | " | \n",
612 | " | \n",
613 | " | \n",
614 | "
\n",
615 | "\n",
616 | " 재고자산폐기(처분)손실 | \n",
617 | " | \n",
618 | " | \n",
619 | " | \n",
620 | " | \n",
621 | " | \n",
622 | " | \n",
623 | "
\n",
624 | "\n",
625 | " 당기손익-공정가치측정 금융자산평가손실 | \n",
626 | " | \n",
627 | " | \n",
628 | " | \n",
629 | " | \n",
630 | " | \n",
631 | " | \n",
632 | "
\n",
633 | "\n",
634 | " 자산처분(폐기)손실 | \n",
635 | "1,265 | \n",
636 | "1,225 | \n",
637 | "907 | \n",
638 | "1,445 | \n",
639 | "907 | \n",
640 | "59.3 | \n",
641 | "
\n",
642 | "\n",
643 | " 자산평가손실 | \n",
644 | " | \n",
645 | " | \n",
646 | " | \n",
647 | " | \n",
648 | " | \n",
649 | " | \n",
650 | "
\n",
651 | "\n",
652 | " 자산손상차손 | \n",
653 | "8,153 | \n",
654 | "1,434 | \n",
655 | " | \n",
656 | " | \n",
657 | " | \n",
658 | " | \n",
659 | "
\n",
660 | "\n",
661 | " 파생상품손실 | \n",
662 | " | \n",
663 | " | \n",
664 | " | \n",
665 | " | \n",
666 | " | \n",
667 | " | \n",
668 | "
\n",
669 | "\n",
670 | " 기타대손상각비 | \n",
671 | " | \n",
672 | " | \n",
673 | " | \n",
674 | " | \n",
675 | " | \n",
676 | " | \n",
677 | "
\n",
678 | "\n",
679 | " 충당부채전입액 | \n",
680 | " | \n",
681 | " | \n",
682 | " | \n",
683 | " | \n",
684 | " | \n",
685 | " | \n",
686 | "
\n",
687 | "\n",
688 | " 기타 | \n",
689 | "15,220 | \n",
690 | "11,537 | \n",
691 | "10,513 | \n",
692 | "12,702 | \n",
693 | "10,513 | \n",
694 | "20.8 | \n",
695 | "
\n",
696 | "\n",
697 | "\n",
698 | "\n",
699 | " | \n",
700 | "195 | \n",
701 | "2,014 | \n",
702 | "5,398 | \n",
703 | "4,130 | \n",
704 | "5,398 | \n",
705 | "-23.5 | \n",
706 | "
\n",
707 | "\n",
708 | " 지분법손익 | \n",
709 | "195 | \n",
710 | "2,014 | \n",
711 | "5,398 | \n",
712 | "4,130 | \n",
713 | "5,398 | \n",
714 | "-23.5 | \n",
715 | "
\n",
716 | "\n",
717 | " 종속기업,공동지배기업및관계기업투자주식처분손익 | \n",
718 | " | \n",
719 | " | \n",
720 | " | \n",
721 | " | \n",
722 | " | \n",
723 | " | \n",
724 | "
\n",
725 | "\n",
726 | " 종속기업,공동지배기업및관계기업투자주식손상관련손익 | \n",
727 | " | \n",
728 | " | \n",
729 | " | \n",
730 | " | \n",
731 | " | \n",
732 | " | \n",
733 | "
\n",
734 | "\n",
735 | " 기타 | \n",
736 | " | \n",
737 | " | \n",
738 | " | \n",
739 | " | \n",
740 | " | \n",
741 | " | \n",
742 | "
\n",
743 | "\n",
744 | "\n",
745 | " 세전계속사업이익 \n",
746 | " | \n",
747 | "307,137 | \n",
748 | "561,960 | \n",
749 | "611,600 | \n",
750 | "304,322 | \n",
751 | "611,600 | \n",
752 | "-50.2 | \n",
753 | "
\n",
754 | "\n",
755 | "\n",
756 | " 법인세비용 \n",
757 | " | \n",
758 | "79,876 | \n",
759 | "140,092 | \n",
760 | "168,151 | \n",
761 | "86,933 | \n",
762 | "168,151 | \n",
763 | "-48.3 | \n",
764 | "
\n",
765 | "\n",
766 | "\n",
767 | " 계속영업이익 \n",
768 | " | \n",
769 | "227,261 | \n",
770 | "421,867 | \n",
771 | "443,449 | \n",
772 | "217,389 | \n",
773 | "443,449 | \n",
774 | "-51.0 | \n",
775 | "
\n",
776 | "\n",
777 | "\n",
778 | " 중단영업이익 \n",
779 | " | \n",
780 | " | \n",
781 | " | \n",
782 | " | \n",
783 | " | \n",
784 | " | \n",
785 | " | \n",
786 | "
\n",
787 | "\n",
788 | "\n",
789 | " 당기순이익 \n",
790 | " | \n",
791 | "227,261 | \n",
792 | "421,867 | \n",
793 | "443,449 | \n",
794 | "217,389 | \n",
795 | "443,449 | \n",
796 | "-51.0 | \n",
797 | "
\n",
798 | "\n",
799 | "\n",
800 | " 지배주주순이익 \n",
801 | " | \n",
802 | "224,157 | \n",
803 | "413,446 | \n",
804 | "438,909 | \n",
805 | "215,051 | \n",
806 | "438,909 | \n",
807 | "-51.0 | \n",
808 | "
\n",
809 | "\n",
810 | "\n",
811 | " 비지배주주순이익 \n",
812 | " | \n",
813 | "3,104 | \n",
814 | "8,422 | \n",
815 | "4,540 | \n",
816 | "2,338 | \n",
817 | "4,540 | \n",
818 | "-48.5 | \n",
819 | "
\n",
820 | "\n",
821 | "
"
822 | ]
823 | },
824 | "execution_count": 6,
825 | "metadata": {},
826 | "output_type": "execute_result"
827 | }
828 | ],
829 | "source": [
830 | "soup.find(\"table\")"
831 | ]
832 | },
833 | {
834 | "cell_type": "code",
835 | "execution_count": 7,
836 | "metadata": {},
837 | "outputs": [],
838 | "source": [
839 | "soup_table_all = soup.find_all(\"table\")"
840 | ]
841 | },
842 | {
843 | "cell_type": "code",
844 | "execution_count": 8,
845 | "metadata": {},
846 | "outputs": [
847 | {
848 | "data": {
849 | "text/plain": [
850 | "6"
851 | ]
852 | },
853 | "execution_count": 8,
854 | "metadata": {},
855 | "output_type": "execute_result"
856 | }
857 | ],
858 | "source": [
859 | "len(soup_table_all)"
860 | ]
861 | },
862 | {
863 | "cell_type": "code",
864 | "execution_count": 9,
865 | "metadata": {},
866 | "outputs": [
867 | {
868 | "data": {
869 | "text/plain": [
870 | "\n",
871 | "포괄손익계산서\n",
872 | "\n",
873 | "\n",
874 | "\n",
875 | "\n",
876 | "\n",
877 | "\n",
878 | "\n",
879 | "\n",
880 | "\n",
881 | "\n",
882 | "\n",
883 | "IFRS(연결) | \n",
884 | "2016/12 | \n",
885 | "2017/12 | \n",
886 | "2018/12 | \n",
887 | "2019/12 | \n",
888 | "전년동기 | \n",
889 | "전년동기(%) | \n",
890 | "
\n",
891 | "\n",
892 | "\n",
893 | "\n",
894 | "\n",
895 | " 매출액 \n",
896 | " | \n",
897 | "2,018,667 | \n",
898 | "2,395,754 | \n",
899 | "2,437,714 | \n",
900 | "2,304,009 | \n",
901 | "2,437,714 | \n",
902 | "-5.5 | \n",
903 | "
\n",
904 | "\n",
905 | "\n",
906 | " 매출원가 \n",
907 | " | \n",
908 | "1,202,777 | \n",
909 | "1,292,907 | \n",
910 | "1,323,944 | \n",
911 | "1,472,395 | \n",
912 | "1,323,944 | \n",
913 | "11.2 | \n",
914 | "
\n",
915 | "\n",
916 | "\n",
917 | " 매출총이익 \n",
918 | " | \n",
919 | "815,890 | \n",
920 | "1,102,847 | \n",
921 | "1,113,770 | \n",
922 | "831,613 | \n",
923 | "1,113,770 | \n",
924 | "-25.3 | \n",
925 | "
\n",
926 | "\n",
927 | "\n",
928 | "\n",
929 | " | \n",
930 | "523,484 | \n",
931 | "566,397 | \n",
932 | "524,903 | \n",
933 | "553,928 | \n",
934 | "524,903 | \n",
935 | "5.5 | \n",
936 | "
\n",
937 | "\n",
938 | " 인건비 | \n",
939 | "59,763 | \n",
940 | "67,972 | \n",
941 | "64,514 | \n",
942 | "64,226 | \n",
943 | "64,514 | \n",
944 | "-0.4 | \n",
945 | "
\n",
946 | "\n",
947 | " 유무형자산상각비 | \n",
948 | "10,018 | \n",
949 | "13,366 | \n",
950 | "14,477 | \n",
951 | "20,408 | \n",
952 | "14,477 | \n",
953 | "41.0 | \n",
954 | "
\n",
955 | "\n",
956 | " 연구개발비 | \n",
957 | "141,114 | \n",
958 | "163,556 | \n",
959 | "183,541 | \n",
960 | "199,072 | \n",
961 | "183,541 | \n",
962 | "8.5 | \n",
963 | "
\n",
964 | "\n",
965 | " 광고선전비 | \n",
966 | "44,321 | \n",
967 | "53,508 | \n",
968 | "39,985 | \n",
969 | "46,145 | \n",
970 | "39,985 | \n",
971 | "15.4 | \n",
972 | "
\n",
973 | "\n",
974 | " 판매비 | \n",
975 | "141,679 | \n",
976 | "139,165 | \n",
977 | "123,417 | \n",
978 | "117,222 | \n",
979 | "123,417 | \n",
980 | "-5.0 | \n",
981 | "
\n",
982 | "\n",
983 | " 관리비 | \n",
984 | "80,025 | \n",
985 | "77,031 | \n",
986 | "57,548 | \n",
987 | "55,131 | \n",
988 | "57,548 | \n",
989 | "-4.2 | \n",
990 | "
\n",
991 | "\n",
992 | " 기타원가성비용 | \n",
993 | " | \n",
994 | " | \n",
995 | " | \n",
996 | " | \n",
997 | " | \n",
998 | " | \n",
999 | "
\n",
1000 | "\n",
1001 | " 기타 | \n",
1002 | "46,564 | \n",
1003 | "51,799 | \n",
1004 | "41,423 | \n",
1005 | "51,724 | \n",
1006 | "41,423 | \n",
1007 | "24.9 | \n",
1008 | "
\n",
1009 | "\n",
1010 | "\n",
1011 | " 영업이익 \n",
1012 | " | \n",
1013 | "292,407 | \n",
1014 | "536,450 | \n",
1015 | "588,867 | \n",
1016 | "277,685 | \n",
1017 | "588,867 | \n",
1018 | "-52.8 | \n",
1019 | "
\n",
1020 | "\n",
1021 | "\n",
1022 | " 영업이익(발표기준) \n",
1023 | " | \n",
1024 | "292,407 | \n",
1025 | "536,450 | \n",
1026 | "588,867 | \n",
1027 | "277,685 | \n",
1028 | "588,867 | \n",
1029 | "-52.8 | \n",
1030 | "
\n",
1031 | "\n",
1032 | "\n",
1033 | "\n",
1034 | " | \n",
1035 | "113,856 | \n",
1036 | "97,374 | \n",
1037 | "99,993 | \n",
1038 | "101,616 | \n",
1039 | "99,993 | \n",
1040 | "1.6 | \n",
1041 | "
\n",
1042 | "\n",
1043 | " 이자수익 | \n",
1044 | "15,043 | \n",
1045 | "16,142 | \n",
1046 | "22,971 | \n",
1047 | "26,600 | \n",
1048 | "22,971 | \n",
1049 | "15.8 | \n",
1050 | "
\n",
1051 | "\n",
1052 | " 배당금수익 | \n",
1053 | " | \n",
1054 | " | \n",
1055 | " | \n",
1056 | " | \n",
1057 | " | \n",
1058 | " | \n",
1059 | "
\n",
1060 | "\n",
1061 | " 외환이익 | \n",
1062 | "90,525 | \n",
1063 | "72,789 | \n",
1064 | "66,957 | \n",
1065 | "67,690 | \n",
1066 | "66,957 | \n",
1067 | "1.1 | \n",
1068 | "
\n",
1069 | "\n",
1070 | " 대손충당금환입액 | \n",
1071 | " | \n",
1072 | " | \n",
1073 | " | \n",
1074 | " | \n",
1075 | " | \n",
1076 | " | \n",
1077 | "
\n",
1078 | "\n",
1079 | " 매출채권처분이익 | \n",
1080 | " | \n",
1081 | " | \n",
1082 | " | \n",
1083 | " | \n",
1084 | " | \n",
1085 | " | \n",
1086 | "
\n",
1087 | "\n",
1088 | " 당기손익-공정가치측정 금융자산관련이익 | \n",
1089 | " | \n",
1090 | " | \n",
1091 | " | \n",
1092 | " | \n",
1093 | " | \n",
1094 | " | \n",
1095 | "
\n",
1096 | "\n",
1097 | " 금융자산처분이익 | \n",
1098 | " | \n",
1099 | " | \n",
1100 | " | \n",
1101 | " | \n",
1102 | " | \n",
1103 | " | \n",
1104 | "
\n",
1105 | "\n",
1106 | " 금융자산평가이익 | \n",
1107 | " | \n",
1108 | " | \n",
1109 | " | \n",
1110 | " | \n",
1111 | " | \n",
1112 | " | \n",
1113 | "
\n",
1114 | "\n",
1115 | " 금융자산손상차손환입 | \n",
1116 | " | \n",
1117 | " | \n",
1118 | " | \n",
1119 | " | \n",
1120 | " | \n",
1121 | " | \n",
1122 | "
\n",
1123 | "\n",
1124 | " 파생상품이익 | \n",
1125 | "8,288 | \n",
1126 | "8,443 | \n",
1127 | "10,065 | \n",
1128 | "7,326 | \n",
1129 | "10,065 | \n",
1130 | "-27.2 | \n",
1131 | "
\n",
1132 | "\n",
1133 | " 기타금융수익 | \n",
1134 | " | \n",
1135 | " | \n",
1136 | " | \n",
1137 | " | \n",
1138 | " | \n",
1139 | " | \n",
1140 | "
\n",
1141 | "\n",
1142 | "\n",
1143 | "\n",
1144 | " | \n",
1145 | "107,066 | \n",
1146 | "89,789 | \n",
1147 | "86,089 | \n",
1148 | "82,749 | \n",
1149 | "86,089 | \n",
1150 | "-3.9 | \n",
1151 | "
\n",
1152 | "\n",
1153 | " 이자비용 | \n",
1154 | "5,878 | \n",
1155 | "6,554 | \n",
1156 | "6,746 | \n",
1157 | "6,864 | \n",
1158 | "6,746 | \n",
1159 | "1.7 | \n",
1160 | "
\n",
1161 | "\n",
1162 | " 외환손실 | \n",
1163 | "92,322 | \n",
1164 | "72,695 | \n",
1165 | "71,498 | \n",
1166 | "68,524 | \n",
1167 | "71,498 | \n",
1168 | "-4.2 | \n",
1169 | "
\n",
1170 | "\n",
1171 | " 대손상각비 | \n",
1172 | " | \n",
1173 | " | \n",
1174 | " | \n",
1175 | " | \n",
1176 | " | \n",
1177 | " | \n",
1178 | "
\n",
1179 | "\n",
1180 | " 당기손익-공정가치측정 금융자산관련손실 | \n",
1181 | " | \n",
1182 | " | \n",
1183 | " | \n",
1184 | " | \n",
1185 | " | \n",
1186 | " | \n",
1187 | "
\n",
1188 | "\n",
1189 | " 매출채권처분손실 | \n",
1190 | " | \n",
1191 | " | \n",
1192 | " | \n",
1193 | " | \n",
1194 | " | \n",
1195 | " | \n",
1196 | "
\n",
1197 | "\n",
1198 | " 금융자산처분손실 | \n",
1199 | " | \n",
1200 | " | \n",
1201 | " | \n",
1202 | " | \n",
1203 | " | \n",
1204 | " | \n",
1205 | "
\n",
1206 | "\n",
1207 | " 금융자산평가손실 | \n",
1208 | " | \n",
1209 | " | \n",
1210 | " | \n",
1211 | " | \n",
1212 | " | \n",
1213 | " | \n",
1214 | "
\n",
1215 | "\n",
1216 | " 금융자산손상차손 | \n",
1217 | " | \n",
1218 | " | \n",
1219 | " | \n",
1220 | " | \n",
1221 | " | \n",
1222 | " | \n",
1223 | "
\n",
1224 | "\n",
1225 | " 파생상품손실 | \n",
1226 | "8,865 | \n",
1227 | "10,540 | \n",
1228 | "7,844 | \n",
1229 | "7,361 | \n",
1230 | "7,844 | \n",
1231 | "-6.2 | \n",
1232 | "
\n",
1233 | "\n",
1234 | " 기타금융원가 | \n",
1235 | " | \n",
1236 | " | \n",
1237 | " | \n",
1238 | " | \n",
1239 | " | \n",
1240 | " | \n",
1241 | "
\n",
1242 | "\n",
1243 | "\n",
1244 | "\n",
1245 | " | \n",
1246 | "32,383 | \n",
1247 | "30,107 | \n",
1248 | "14,850 | \n",
1249 | "17,787 | \n",
1250 | "14,850 | \n",
1251 | "19.8 | \n",
1252 | "
\n",
1253 | "\n",
1254 | " 이자수익 | \n",
1255 | " | \n",
1256 | " | \n",
1257 | " | \n",
1258 | " | \n",
1259 | " | \n",
1260 | " | \n",
1261 | "
\n",
1262 | "\n",
1263 | " 배당금수익 | \n",
1264 | "2,399 | \n",
1265 | "1,289 | \n",
1266 | "1,314 | \n",
1267 | "1,547 | \n",
1268 | "1,314 | \n",
1269 | "17.7 | \n",
1270 | "
\n",
1271 | "\n",
1272 | " 외환이익 | \n",
1273 | " | \n",
1274 | " | \n",
1275 | " | \n",
1276 | " | \n",
1277 | " | \n",
1278 | " | \n",
1279 | "
\n",
1280 | "\n",
1281 | " 재고자산감모손실환입 | \n",
1282 | " | \n",
1283 | " | \n",
1284 | " | \n",
1285 | " | \n",
1286 | " | \n",
1287 | " | \n",
1288 | "
\n",
1289 | "\n",
1290 | " 재고자산폐기(처분)이익 | \n",
1291 | " | \n",
1292 | " | \n",
1293 | " | \n",
1294 | " | \n",
1295 | " | \n",
1296 | " | \n",
1297 | "
\n",
1298 | "\n",
1299 | " 당기손익-공정가치측정 금융자산평가이익 | \n",
1300 | " | \n",
1301 | " | \n",
1302 | " | \n",
1303 | " | \n",
1304 | " | \n",
1305 | " | \n",
1306 | "
\n",
1307 | "\n",
1308 | " 자산처분(폐기)이익 | \n",
1309 | "22,468 | \n",
1310 | "3,143 | \n",
1311 | "4,235 | \n",
1312 | "3,524 | \n",
1313 | "4,235 | \n",
1314 | "-16.8 | \n",
1315 | "
\n",
1316 | "\n",
1317 | " 자산평가이익 | \n",
1318 | " | \n",
1319 | " | \n",
1320 | " | \n",
1321 | " | \n",
1322 | " | \n",
1323 | " | \n",
1324 | "
\n",
1325 | "\n",
1326 | " 자산손상차손환입 | \n",
1327 | " | \n",
1328 | " | \n",
1329 | " | \n",
1330 | " | \n",
1331 | " | \n",
1332 | " | \n",
1333 | "
\n",
1334 | "\n",
1335 | " 파생상품이익 | \n",
1336 | " | \n",
1337 | " | \n",
1338 | " | \n",
1339 | " | \n",
1340 | " | \n",
1341 | " | \n",
1342 | "
\n",
1343 | "\n",
1344 | " 임대료수익 | \n",
1345 | "1,077 | \n",
1346 | "1,435 | \n",
1347 | "1,409 | \n",
1348 | "1,534 | \n",
1349 | "1,409 | \n",
1350 | "8.9 | \n",
1351 | "
\n",
1352 | "\n",
1353 | " 로열티수익 | \n",
1354 | " | \n",
1355 | " | \n",
1356 | " | \n",
1357 | " | \n",
1358 | " | \n",
1359 | " | \n",
1360 | "
\n",
1361 | "\n",
1362 | " 수수료수익 | \n",
1363 | " | \n",
1364 | " | \n",
1365 | " | \n",
1366 | " | \n",
1367 | " | \n",
1368 | " | \n",
1369 | "
\n",
1370 | "\n",
1371 | " 대손충당금환입 | \n",
1372 | " | \n",
1373 | " | \n",
1374 | " | \n",
1375 | " | \n",
1376 | " | \n",
1377 | " | \n",
1378 | "
\n",
1379 | "\n",
1380 | " 충당부채환입액 | \n",
1381 | " | \n",
1382 | " | \n",
1383 | " | \n",
1384 | " | \n",
1385 | " | \n",
1386 | " | \n",
1387 | "
\n",
1388 | "\n",
1389 | " 기타 | \n",
1390 | "6,439 | \n",
1391 | "24,239 | \n",
1392 | "7,893 | \n",
1393 | "11,182 | \n",
1394 | "7,893 | \n",
1395 | "41.7 | \n",
1396 | "
\n",
1397 | "\n",
1398 | "\n",
1399 | "\n",
1400 | " | \n",
1401 | "24,638 | \n",
1402 | "14,196 | \n",
1403 | "11,420 | \n",
1404 | "14,147 | \n",
1405 | "11,420 | \n",
1406 | "23.9 | \n",
1407 | "
\n",
1408 | "\n",
1409 | " 이자비용 | \n",
1410 | " | \n",
1411 | " | \n",
1412 | " | \n",
1413 | " | \n",
1414 | " | \n",
1415 | " | \n",
1416 | "
\n",
1417 | "\n",
1418 | " 외환손실 | \n",
1419 | " | \n",
1420 | " | \n",
1421 | " | \n",
1422 | " | \n",
1423 | " | \n",
1424 | " | \n",
1425 | "
\n",
1426 | "\n",
1427 | " 재고자산감모손실 | \n",
1428 | " | \n",
1429 | " | \n",
1430 | " | \n",
1431 | " | \n",
1432 | " | \n",
1433 | " | \n",
1434 | "
\n",
1435 | "\n",
1436 | " 재고자산폐기(처분)손실 | \n",
1437 | " | \n",
1438 | " | \n",
1439 | " | \n",
1440 | " | \n",
1441 | " | \n",
1442 | " | \n",
1443 | "
\n",
1444 | "\n",
1445 | " 당기손익-공정가치측정 금융자산평가손실 | \n",
1446 | " | \n",
1447 | " | \n",
1448 | " | \n",
1449 | " | \n",
1450 | " | \n",
1451 | " | \n",
1452 | "
\n",
1453 | "\n",
1454 | " 자산처분(폐기)손실 | \n",
1455 | "1,265 | \n",
1456 | "1,225 | \n",
1457 | "907 | \n",
1458 | "1,445 | \n",
1459 | "907 | \n",
1460 | "59.3 | \n",
1461 | "
\n",
1462 | "\n",
1463 | " 자산평가손실 | \n",
1464 | " | \n",
1465 | " | \n",
1466 | " | \n",
1467 | " | \n",
1468 | " | \n",
1469 | " | \n",
1470 | "
\n",
1471 | "\n",
1472 | " 자산손상차손 | \n",
1473 | "8,153 | \n",
1474 | "1,434 | \n",
1475 | " | \n",
1476 | " | \n",
1477 | " | \n",
1478 | " | \n",
1479 | "
\n",
1480 | "\n",
1481 | " 파생상품손실 | \n",
1482 | " | \n",
1483 | " | \n",
1484 | " | \n",
1485 | " | \n",
1486 | " | \n",
1487 | " | \n",
1488 | "
\n",
1489 | "\n",
1490 | " 기타대손상각비 | \n",
1491 | " | \n",
1492 | " | \n",
1493 | " | \n",
1494 | " | \n",
1495 | " | \n",
1496 | " | \n",
1497 | "
\n",
1498 | "\n",
1499 | " 충당부채전입액 | \n",
1500 | " | \n",
1501 | " | \n",
1502 | " | \n",
1503 | " | \n",
1504 | " | \n",
1505 | " | \n",
1506 | "
\n",
1507 | "\n",
1508 | " 기타 | \n",
1509 | "15,220 | \n",
1510 | "11,537 | \n",
1511 | "10,513 | \n",
1512 | "12,702 | \n",
1513 | "10,513 | \n",
1514 | "20.8 | \n",
1515 | "
\n",
1516 | "\n",
1517 | "\n",
1518 | "\n",
1519 | " | \n",
1520 | "195 | \n",
1521 | "2,014 | \n",
1522 | "5,398 | \n",
1523 | "4,130 | \n",
1524 | "5,398 | \n",
1525 | "-23.5 | \n",
1526 | "
\n",
1527 | "\n",
1528 | " 지분법손익 | \n",
1529 | "195 | \n",
1530 | "2,014 | \n",
1531 | "5,398 | \n",
1532 | "4,130 | \n",
1533 | "5,398 | \n",
1534 | "-23.5 | \n",
1535 | "
\n",
1536 | "\n",
1537 | " 종속기업,공동지배기업및관계기업투자주식처분손익 | \n",
1538 | " | \n",
1539 | " | \n",
1540 | " | \n",
1541 | " | \n",
1542 | " | \n",
1543 | " | \n",
1544 | "
\n",
1545 | "\n",
1546 | " 종속기업,공동지배기업및관계기업투자주식손상관련손익 | \n",
1547 | " | \n",
1548 | " | \n",
1549 | " | \n",
1550 | " | \n",
1551 | " | \n",
1552 | " | \n",
1553 | "
\n",
1554 | "\n",
1555 | " 기타 | \n",
1556 | " | \n",
1557 | " | \n",
1558 | " | \n",
1559 | " | \n",
1560 | " | \n",
1561 | " | \n",
1562 | "
\n",
1563 | "\n",
1564 | "\n",
1565 | " 세전계속사업이익 \n",
1566 | " | \n",
1567 | "307,137 | \n",
1568 | "561,960 | \n",
1569 | "611,600 | \n",
1570 | "304,322 | \n",
1571 | "611,600 | \n",
1572 | "-50.2 | \n",
1573 | "
\n",
1574 | "\n",
1575 | "\n",
1576 | " 법인세비용 \n",
1577 | " | \n",
1578 | "79,876 | \n",
1579 | "140,092 | \n",
1580 | "168,151 | \n",
1581 | "86,933 | \n",
1582 | "168,151 | \n",
1583 | "-48.3 | \n",
1584 | "
\n",
1585 | "\n",
1586 | "\n",
1587 | " 계속영업이익 \n",
1588 | " | \n",
1589 | "227,261 | \n",
1590 | "421,867 | \n",
1591 | "443,449 | \n",
1592 | "217,389 | \n",
1593 | "443,449 | \n",
1594 | "-51.0 | \n",
1595 | "
\n",
1596 | "\n",
1597 | "\n",
1598 | " 중단영업이익 \n",
1599 | " | \n",
1600 | " | \n",
1601 | " | \n",
1602 | " | \n",
1603 | " | \n",
1604 | " | \n",
1605 | " | \n",
1606 | "
\n",
1607 | "\n",
1608 | "\n",
1609 | " 당기순이익 \n",
1610 | " | \n",
1611 | "227,261 | \n",
1612 | "421,867 | \n",
1613 | "443,449 | \n",
1614 | "217,389 | \n",
1615 | "443,449 | \n",
1616 | "-51.0 | \n",
1617 | "
\n",
1618 | "\n",
1619 | "\n",
1620 | " 지배주주순이익 \n",
1621 | " | \n",
1622 | "224,157 | \n",
1623 | "413,446 | \n",
1624 | "438,909 | \n",
1625 | "215,051 | \n",
1626 | "438,909 | \n",
1627 | "-51.0 | \n",
1628 | "
\n",
1629 | "\n",
1630 | "\n",
1631 | " 비지배주주순이익 \n",
1632 | " | \n",
1633 | "3,104 | \n",
1634 | "8,422 | \n",
1635 | "4,540 | \n",
1636 | "2,338 | \n",
1637 | "4,540 | \n",
1638 | "-48.5 | \n",
1639 | "
\n",
1640 | "\n",
1641 | "
"
1642 | ]
1643 | },
1644 | "execution_count": 9,
1645 | "metadata": {},
1646 | "output_type": "execute_result"
1647 | }
1648 | ],
1649 | "source": [
1650 | "soup_table_all[0]"
1651 | ]
1652 | },
1653 | {
1654 | "cell_type": "code",
1655 | "execution_count": 10,
1656 | "metadata": {},
1657 | "outputs": [],
1658 | "source": [
1659 | "soup.find(attrs={\"class\":\"us_table_ty1 h_fix zigbg_no\"})\n",
1660 | "soup_table = soup.find(\"table\", attrs={\"class\":\"us_table_ty1 h_fix zigbg_no\"})"
1661 | ]
1662 | },
1663 | {
1664 | "cell_type": "code",
1665 | "execution_count": 11,
1666 | "metadata": {},
1667 | "outputs": [
1668 | {
1669 | "data": {
1670 | "text/html": [
1671 | "\n",
1672 | "\n",
1685 | "
\n",
1686 | " \n",
1687 | " \n",
1688 | " | \n",
1689 | " IFRS(연결) | \n",
1690 | " 2016/12 | \n",
1691 | " 2017/12 | \n",
1692 | " 2018/12 | \n",
1693 | " 2019/12 | \n",
1694 | " 전년동기 | \n",
1695 | " 전년동기(%) | \n",
1696 | "
\n",
1697 | " \n",
1698 | " \n",
1699 | " \n",
1700 | " 0 | \n",
1701 | " 매출액 | \n",
1702 | " 2,018,667 | \n",
1703 | " 2,395,754 | \n",
1704 | " 2,437,714 | \n",
1705 | " 2,304,009 | \n",
1706 | " 2,437,714 | \n",
1707 | " -5.5 | \n",
1708 | "
\n",
1709 | " \n",
1710 | " 1 | \n",
1711 | " 매출원가 | \n",
1712 | " 1,202,777 | \n",
1713 | " 1,292,907 | \n",
1714 | " 1,323,944 | \n",
1715 | " 1,472,395 | \n",
1716 | " 1,323,944 | \n",
1717 | " 11.2 | \n",
1718 | "
\n",
1719 | " \n",
1720 | " 2 | \n",
1721 | " 매출총이익 | \n",
1722 | " 815,890 | \n",
1723 | " 1,102,847 | \n",
1724 | " 1,113,770 | \n",
1725 | " 831,613 | \n",
1726 | " 1,113,770 | \n",
1727 | " -25.3 | \n",
1728 | "
\n",
1729 | " \n",
1730 | " 3 | \n",
1731 | " 판매비와관리비계산에 참여한 계정 펼치기 | \n",
1732 | " 523,484 | \n",
1733 | " 566,397 | \n",
1734 | " 524,903 | \n",
1735 | " 553,928 | \n",
1736 | " 524,903 | \n",
1737 | " 5.5 | \n",
1738 | "
\n",
1739 | " \n",
1740 | " 4 | \n",
1741 | " 인건비 | \n",
1742 | " 59,763 | \n",
1743 | " 67,972 | \n",
1744 | " 64,514 | \n",
1745 | " 64,226 | \n",
1746 | " 64,514 | \n",
1747 | " -0.4 | \n",
1748 | "
\n",
1749 | " \n",
1750 | "
\n",
1751 | "
"
1752 | ],
1753 | "text/plain": [
1754 | " IFRS(연결) 2016/12 2017/12 2018/12 2019/12 \\\n",
1755 | "0 매출액 2,018,667 2,395,754 2,437,714 2,304,009 \n",
1756 | "1 매출원가 1,202,777 1,292,907 1,323,944 1,472,395 \n",
1757 | "2 매출총이익 815,890 1,102,847 1,113,770 831,613 \n",
1758 | "3 판매비와관리비계산에 참여한 계정 펼치기 523,484 566,397 524,903 553,928 \n",
1759 | "4 인건비 59,763 67,972 64,514 64,226 \n",
1760 | "\n",
1761 | " 전년동기 전년동기(%) \n",
1762 | "0 2,437,714 -5.5 \n",
1763 | "1 1,323,944 11.2 \n",
1764 | "2 1,113,770 -25.3 \n",
1765 | "3 524,903 5.5 \n",
1766 | "4 64,514 -0.4 "
1767 | ]
1768 | },
1769 | "execution_count": 11,
1770 | "metadata": {},
1771 | "output_type": "execute_result"
1772 | }
1773 | ],
1774 | "source": [
1775 | "from html_table_parser import parser_functions as parser\n",
1776 | "import pandas as pd\n",
1777 | "\n",
1778 | "table = parser.make2d(soup_table)\n",
1779 | "df = pd.DataFrame(table[1:], columns=table[0])\n",
1780 | "df.head()"
1781 | ]
1782 | },
1783 | {
1784 | "cell_type": "markdown",
1785 | "metadata": {},
1786 | "source": [
1787 | "## 함수로 만들고, 시도건수 추가"
1788 | ]
1789 | },
1790 | {
1791 | "cell_type": "code",
1792 | "execution_count": 12,
1793 | "metadata": {},
1794 | "outputs": [],
1795 | "source": [
1796 | "from urllib.error import HTTPError\n",
1797 | "import logging\n",
1798 | "import time\n",
1799 | "\n",
1800 | "def collect_sheet(code, try_cnt):\n",
1801 | " try:\n",
1802 | " URL = \"http://comp.fnguide.com/SVO2/ASP/SVD_Finance.asp?pGB=1&gicode={}\".format(code)\n",
1803 | " \n",
1804 | " req = urlopen(URL)\n",
1805 | " html = req.read()\n",
1806 | " soup = BeautifulSoup(html, 'html.parser')\n",
1807 | " soup_table_all = soup.find_all(\"table\")\n",
1808 | " soup.find(attrs={\"class\":\"us_table_ty1 h_fix zigbg_no\"})\n",
1809 | " soup_table = soup.find(\"table\", attrs={\"class\":\"us_table_ty1 h_fix zigbg_no\"})\n",
1810 | " table = parser.make2d(soup_table)\n",
1811 | " df = pd.DataFrame(table[1:], columns=table[0])\n",
1812 | " \n",
1813 | " return df\n",
1814 | " \n",
1815 | " except HTTPError as e:\n",
1816 | " if try_cnt>=3:\n",
1817 | " logging.warning(e)\n",
1818 | " return None\n",
1819 | " else:\n",
1820 | " time.sleep(3)\n",
1821 | " collect_div(corp_code,try_cnt=+1) "
1822 | ]
1823 | },
1824 | {
1825 | "cell_type": "code",
1826 | "execution_count": 13,
1827 | "metadata": {},
1828 | "outputs": [],
1829 | "source": [
1830 | "df=collect_sheet(\"A005930\",1)"
1831 | ]
1832 | },
1833 | {
1834 | "cell_type": "code",
1835 | "execution_count": 14,
1836 | "metadata": {},
1837 | "outputs": [
1838 | {
1839 | "data": {
1840 | "text/html": [
1841 | "\n",
1842 | "\n",
1855 | "
\n",
1856 | " \n",
1857 | " \n",
1858 | " | \n",
1859 | " IFRS(연결) | \n",
1860 | " 2016/12 | \n",
1861 | " 2017/12 | \n",
1862 | " 2018/12 | \n",
1863 | " 2019/12 | \n",
1864 | " 전년동기 | \n",
1865 | " 전년동기(%) | \n",
1866 | "
\n",
1867 | " \n",
1868 | " \n",
1869 | " \n",
1870 | " 0 | \n",
1871 | " 매출액 | \n",
1872 | " 2,018,667 | \n",
1873 | " 2,395,754 | \n",
1874 | " 2,437,714 | \n",
1875 | " 2,304,009 | \n",
1876 | " 2,437,714 | \n",
1877 | " -5.5 | \n",
1878 | "
\n",
1879 | " \n",
1880 | " 1 | \n",
1881 | " 매출원가 | \n",
1882 | " 1,202,777 | \n",
1883 | " 1,292,907 | \n",
1884 | " 1,323,944 | \n",
1885 | " 1,472,395 | \n",
1886 | " 1,323,944 | \n",
1887 | " 11.2 | \n",
1888 | "
\n",
1889 | " \n",
1890 | " 2 | \n",
1891 | " 매출총이익 | \n",
1892 | " 815,890 | \n",
1893 | " 1,102,847 | \n",
1894 | " 1,113,770 | \n",
1895 | " 831,613 | \n",
1896 | " 1,113,770 | \n",
1897 | " -25.3 | \n",
1898 | "
\n",
1899 | " \n",
1900 | " 3 | \n",
1901 | " 판매비와관리비계산에 참여한 계정 펼치기 | \n",
1902 | " 523,484 | \n",
1903 | " 566,397 | \n",
1904 | " 524,903 | \n",
1905 | " 553,928 | \n",
1906 | " 524,903 | \n",
1907 | " 5.5 | \n",
1908 | "
\n",
1909 | " \n",
1910 | " 4 | \n",
1911 | " 인건비 | \n",
1912 | " 59,763 | \n",
1913 | " 67,972 | \n",
1914 | " 64,514 | \n",
1915 | " 64,226 | \n",
1916 | " 64,514 | \n",
1917 | " -0.4 | \n",
1918 | "
\n",
1919 | " \n",
1920 | "
\n",
1921 | "
"
1922 | ],
1923 | "text/plain": [
1924 | " IFRS(연결) 2016/12 2017/12 2018/12 2019/12 \\\n",
1925 | "0 매출액 2,018,667 2,395,754 2,437,714 2,304,009 \n",
1926 | "1 매출원가 1,202,777 1,292,907 1,323,944 1,472,395 \n",
1927 | "2 매출총이익 815,890 1,102,847 1,113,770 831,613 \n",
1928 | "3 판매비와관리비계산에 참여한 계정 펼치기 523,484 566,397 524,903 553,928 \n",
1929 | "4 인건비 59,763 67,972 64,514 64,226 \n",
1930 | "\n",
1931 | " 전년동기 전년동기(%) \n",
1932 | "0 2,437,714 -5.5 \n",
1933 | "1 1,323,944 11.2 \n",
1934 | "2 1,113,770 -25.3 \n",
1935 | "3 524,903 5.5 \n",
1936 | "4 64,514 -0.4 "
1937 | ]
1938 | },
1939 | "execution_count": 14,
1940 | "metadata": {},
1941 | "output_type": "execute_result"
1942 | }
1943 | ],
1944 | "source": [
1945 | "df.head()"
1946 | ]
1947 | }
1948 | ],
1949 | "metadata": {
1950 | "kernelspec": {
1951 | "display_name": "Python 3",
1952 | "language": "python",
1953 | "name": "python3"
1954 | },
1955 | "language_info": {
1956 | "codemirror_mode": {
1957 | "name": "ipython",
1958 | "version": 3
1959 | },
1960 | "file_extension": ".py",
1961 | "mimetype": "text/x-python",
1962 | "name": "python",
1963 | "nbconvert_exporter": "python",
1964 | "pygments_lexer": "ipython3",
1965 | "version": "3.7.3"
1966 | },
1967 | "toc": {
1968 | "base_numbering": 1,
1969 | "nav_menu": {},
1970 | "number_sections": true,
1971 | "sideBar": true,
1972 | "skip_h1_title": false,
1973 | "title_cell": "Table of Contents",
1974 | "title_sidebar": "Contents",
1975 | "toc_cell": false,
1976 | "toc_position": {},
1977 | "toc_section_display": true,
1978 | "toc_window_display": false
1979 | }
1980 | },
1981 | "nbformat": 4,
1982 | "nbformat_minor": 2
1983 | }
1984 |
--------------------------------------------------------------------------------
/ch_01/104_requests_module.py:
--------------------------------------------------------------------------------
1 | import requests
2 |
3 | input_data = {"pGB":1, "gicode":"A005930"}
4 | result = requests.get("http://comp.fnguide.com/SVO2/ASP/SVD_Finance.asp", data=input_data)
5 | print(result.text)
6 |
7 | # beautifulsoupdㅡ로 파싱
8 | from bs4 import BeautifulSoup
9 | soup = BeautifulSoup(result.text, 'html.parser')
10 | soup_table = soup.find("table", attrs={"class":"us_table_ty1 h_fix zigbg_no"})
11 |
12 | # 판다스 데이터프레임으로 변환
13 | from html_table_parser import parser_functions as parser
14 | import pandas as pd
15 |
16 | table = parser.make2d(soup_table)
17 | df = pd.DataFrame(table[1:], columns=table[0])
18 | df.head()
--------------------------------------------------------------------------------
/ch_01/105_selenium_crawling.py:
--------------------------------------------------------------------------------
1 | # coding = utf-8
2 |
3 | from selenium import webdriver
4 |
5 | browser = webdriver.Chrome('/Applications/chromedriver')
6 |
7 | browser.get("http://www.seibro.or.kr/websquare/control.jsp?w2xPath=/IPORTAL/user/company/BIP_CNTS01042V.xml&menuNo=286#")
8 |
9 | search_btn = browser.find_element_by_id("image1")
10 | search_btn.click()
11 |
12 | # html소스를 가져와서, 원하는 위치를 찾습니다.
13 | html = browser.page_source
14 |
15 | from bs4 import BeautifulSoup
16 | from html_table_parser import parser_functions as parser
17 | import pandas as pd
18 |
19 | soup = BeautifulSoup(html, "html.parser")
20 | table = soup.find("table", attrs={"id":"grid1_body_table"})
21 | p = parser.make2d(table)
22 | df = pd.DataFrame(p[2:],columns=p[1])
23 | df.head()
24 |
25 | import time
26 | import random
27 | from tqdm import tqdm
28 |
29 | prev_no = 0
30 | prev_table = None
31 |
32 | for i in tqdm(range(0,200)):
33 |
34 | try:
35 | next_btn = browser.find_element_by_id("cntsPaging01_next_btn")
36 | next_btn.click()
37 | except:
38 | time.sleep(2)
39 | try:
40 | next_btn = browser.find_element_by_id("cntsPaging01_next_btn")
41 | next_btn.click()
42 | except:
43 | time.sleep(2)
44 | next_btn = browser.find_element_by_id("cntsPaging01_next_btn")
45 | next_btn.click()
46 |
47 | def get_html(browser, cnt):
48 |
49 | if cnt>=4:
50 | return -1, -1
51 |
52 | html = browser.page_source
53 | soup = BeautifulSoup(html, 'html.parser')
54 |
55 | cur_no = soup.find("a", attrs={"class":"w2pageList_control_label w2pageList_label_selected"})
56 | cur_no = cur_no.text
57 |
58 | table = soup.find("table", attrs={"id": "grid1_body_table"})
59 |
60 | if cur_no!=prev_no and prev_table!=table:
61 | return cur_no, table
62 | else:
63 | time.sleep(1)
64 | get_html(browser, cnt+1)
65 |
66 | cur_no, table = get_html(browser, 1)
67 |
68 | if cur_no== -1:
69 | print("\n종료. 테이블 정보가 바뀌지 않았습니다.")
70 | break
71 |
72 | p=parser.make2d(table)
73 | temp=pd.DataFrame(p[2:],columns=p[1])
74 | df = pd.concat([df, temp],0)
75 | prev_no = cur_no
76 | prev_table = html
77 |
78 | if cur_no=="95":
79 | print("\n최종 페이지 도달")
80 | break
81 |
82 | time.sleep(random.randrange(3,5))
83 |
84 | df.to_excel("stock_div.xlsx")
85 |
--------------------------------------------------------------------------------
/ch_01/106_sqlite_database.py:
--------------------------------------------------------------------------------
1 | # 1) DB 연결하고, SQL실행하기
2 | import sqlite3
3 | conn = sqlite3.connect("test.db")
4 |
5 | c = conn.cursor()
6 | c.execute('''CREATE TABLE stocks
7 | (date text, trans text, symbol text, qty real, price real)''')
8 |
9 | conn.commit()
10 | conn.close()
11 |
12 |
13 | # 2) 판다스 데이터 프레임 만들고 DB에 테이블로 저장하기
14 | import sqlite3
15 | con = sqlite3.connect("test.db")
16 |
17 |
18 | import pandas as pd
19 |
20 | df = pd.DataFrame({"a":[1,2,3],
21 | "b":[4,5,6],
22 | "id":["a", "b","c"]})
23 |
24 | df.to_sql("df", con)
25 |
26 |
27 | # 3) UNIQUE 인덱스 생성하기
28 | con = sqlite3.connect("test.db")
29 | df = pd.DataFrame({"a":[1,2,3],
30 | "b":[4,5,6],
31 | "id":["a", "b","c"]})
32 |
33 | df.to_sql("df", con, index=False, if_exists="replace")
34 | c = con.cursor()
35 | c.execute("CREATE UNIQUE INDEX id ON df (id)")
36 | con.commit()
37 | con.close()
38 |
39 |
40 | # 4) 인덱스 확인하기
41 | con = sqlite3.connect("test.db")
42 | c = con.cursor()
43 | c.execute("PRAGMA index_list(df)").fetchall()
44 | c.execute("PRAGMA index_info('id')").fetchall()
45 | con.close()
46 |
47 | # 5) 추가 데이터 저장하기 -> 에러가 발생합니다.
48 | df_2 = pd.DataFrame({"a":[4], "b":[4], "id":["c"]})
49 |
50 | df_2 = df_2.set_index("id")
51 | con = sqlite3.connect("test.db")
52 | df_2.to_sql("df", con, if_exists="append")
53 |
54 |
55 | # 6) REPLACE INTO로 넣기
56 | con = sqlite3.connect("test.db")
57 | c =con.cursor()
58 | c.execute("REPLACE INTO df (a, b, id) VALUES (?, ?, ?)", (4, 4, "c"))
59 | con.commit()
60 | con.close()
61 |
62 | # 7) read_sql함수 이용하기
63 | con = sqlite3.connect("test.db")
64 | temp = pd.read_sql("SELECT * FROM df", con)
65 | print(temp)
66 | con.close()
67 |
--------------------------------------------------------------------------------
/ch_01/107_mysql_db.py:
--------------------------------------------------------------------------------
1 | import pymysql
2 |
3 | db_conf = {
4 | "host": "127.0.0.1",
5 | "user": "test",
6 | "password": "test11",
7 | "database": "temp",
8 | }
9 |
10 | con = pymysql.connect(**db_conf)
11 |
12 | # 테이블 생성
13 | cur = con.cursor()
14 | cur.execute("DROP TABLE IF EXISTS stocks")
15 | cur.execute(
16 | """
17 | CREATE TABLE stocks (
18 | date VARCHAR(10),
19 | trans VARCHAR(20),
20 | symbol VARCHAR(10),
21 | qty INT,
22 | price INT,
23 | primary key (date) )
24 | """
25 | )
26 | con.commit()
27 | con.close()
28 |
29 | # insert table
30 | con = pymysql.connect(**db_conf)
31 | cur = con.cursor()
32 | cur.execute(
33 | """
34 | INSERT INTO stocks (date, trans, symbol, qty, price)
35 | VALUES (%s, %s, %s ,%s, %s)
36 | """, ("2019-10-12", "sell", "K029093", 6 ,10000)
37 | )
38 | con.commit()
39 | con.close()
40 |
41 | # SELECT
42 | con = pymysql.connect(**db_conf)
43 | cur = con.cursor()
44 | cur.execute("SELECT * FROM stocks")
45 | df = cur.fetchall()
46 | con.commit()
47 | con.close()
48 |
49 | print(df)
50 |
51 |
52 | # 2) pandas_mysql
53 | import pandas as pd
54 | import pymysql
55 | from sqlalchemy import create_engine
56 |
57 | pymysql.install_as_MySQLdb()
58 | engine = create_engine("mysql://test:test11@localhost/temp")
59 | con = engine.connect()
60 | test1 = pd.DataFrame({"a":[1,2,3,4]})
61 | test1.to_sql('test1', con, if_exists="append", index=False)
62 | con.close()
63 |
64 |
65 |
--------------------------------------------------------------------------------
/ch_01/108_collect_stock_data.py:
--------------------------------------------------------------------------------
1 | import FinanceDataReader as fdr
2 | import pymysql
3 | from tqdm import tqdm
4 | from datetime import datetime
5 |
6 | db_conf = {
7 | "host": "127.0.0.1",
8 | "user": "test",
9 | "password": "test11",
10 | "database": "finance",
11 | }
12 |
13 | def create_table(db_conf):
14 |
15 | con = pymysql.connect(**db_conf)
16 | cur = con.cursor()
17 |
18 | cur.execute(
19 | """
20 | CREATE TABLE IF NOT EXISTS STOCK_CODE (
21 | symbol VARCHAR(6),
22 | name VARCHAR(30),
23 | sector VARCHAR(40),
24 | industry VARCHAR(200),
25 | collected_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
26 | primary key (symbol))
27 | """)
28 |
29 | cur.execute(
30 | """
31 | CREATE TABLE IF NOT EXISTS STOCK_DATA (
32 | date VARCHAR(10),
33 | open int,
34 | high int,
35 | low int,
36 | close int,
37 | volume int,
38 | change_rate float,
39 | symbol VARCHAR(6),
40 | collected_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
41 | primary key (date, symbol))
42 | """
43 | )
44 |
45 | con.commit()
46 | con.close()
47 |
48 | return 0
49 |
50 | def insert_code(df):
51 |
52 | con = pymysql.connect(**db_conf)
53 | cur = con.cursor()
54 |
55 | for symbol, name, sector, industry in zip(df["Symbol"], df["Name"], df["Sector"], df["Industry"]):
56 | cur.execute(
57 | """
58 | REPLACE INTO STOCK_CODE (symbol, name, sector, industry) VALUES (%s, %s, %s, %s)
59 | """, (symbol, name, sector, industry))
60 |
61 | con.commit()
62 | con.close()
63 |
64 | return 0
65 |
66 | def insert_stock_data(db_conf, symbol, df):
67 |
68 | df = df.reset_index(drop=False)
69 | df["Date"] = df["Date"].astype(str)
70 | df["Change"] = df["Change"].fillna(0)
71 |
72 | con = pymysql.connect(**db_conf)
73 | cur = con.cursor()
74 |
75 | for date, open, high, low, close, volume, change in zip(df["Date"], df["Open"], df["High"], df["Low"], df["Close"], df["Volume"], df["Change"]):
76 | cur.execute(
77 | """
78 | REPLACE INTO STOCK_DATA (date, open, high, low, close, volume, change_rate, symbol) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
79 | """, (date, open, high, low, close, volume, change, symbol))
80 |
81 | con.commit()
82 | con.close()
83 |
84 | return 0
85 |
86 | def stock_data_collect(year):
87 | create_table(db_conf)
88 | df_krx = fdr.StockListing('KRX')
89 | df_krx = df_krx.fillna("")
90 | insert_code(df_krx)
91 |
92 | # 주가 데이터
93 | # symbol='005930'
94 | # year="2017"
95 |
96 | symbol_list = df_krx["Symbol"]
97 |
98 | for symbol in tqdm(symbol_list):
99 | try:
100 | df_sto = fdr.DataReader(symbol, year)
101 | insert_stock_data(db_conf, symbol, df_sto)
102 | except Exception as e:
103 | print(symbol, end=",")
104 | print(e)
105 |
106 | return 0
107 |
108 |
109 | if __name__ == '__main__':
110 |
111 | year = str(datetime.now().year)
112 | stock_data_collect(year)
113 |
--------------------------------------------------------------------------------
/ch_01/a:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ch_02/203_plotly이용하기.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bjpublic/python-for-finance-data/418d9a234e7389d19225769c710ae04b1dfdac3f/ch_02/203_plotly이용하기.zip
--------------------------------------------------------------------------------
/ch_02/204_dash_html.py:
--------------------------------------------------------------------------------
1 | # coding = utf-8
2 | import dash
3 | import dash_html_components as html
4 |
5 | app = dash.Dash(__name__)
6 |
7 | app.layout = html.Div(children=[
8 | html.H1(children='안녕하세요.'),
9 | html.H3('반갑습니다.'),
10 | html.Div('또 만났네요.', style={'color':'blue', 'fontSize':16}),
11 | html.P('안녕히 가세요.', className='class1', id='p1'),
12 | ])
13 |
14 | if __name__ == '__main__':
15 | app.run_server(debug=True)
16 |
--------------------------------------------------------------------------------
/ch_02/205_dash_markdown.py:
--------------------------------------------------------------------------------
1 | # coding = utf-8
2 | import dash
3 | import dash_core_components as dcc
4 |
5 | app = dash.Dash(__name__)
6 |
7 | app.layout = dcc.Markdown(
8 | """
9 | ### 안녕하세요.
10 | ** 반갑습니다. **
11 | - 오늘도 또 만났네요
12 | """
13 | )
14 |
15 | if __name__ == '__main__':
16 | app.run_server(debug=True, port=9999)
17 |
--------------------------------------------------------------------------------
/ch_02/206_dash_real_estate.py:
--------------------------------------------------------------------------------
1 | # coding = utf-8
2 | import dash
3 | import dash_core_components as dcc
4 | import dash_html_components as html
5 |
6 | import plotly.express as px
7 |
8 | import pymysql
9 | import pandas as pd
10 |
11 | def apt_deal_cnt():
12 | db_conf = {
13 | "host": "127.0.0.1",
14 | "user": "test",
15 | "password": "test11",
16 | "database": "finance",
17 | }
18 |
19 | con = pymysql.connect(**db_conf)
20 | apt_sale = pd.read_sql("SELECT * FROM APT_SALE WHERE YM>=201911 AND YM<=201912", con)
21 | con.close()
22 |
23 | apt_sale.columns = ["매매가격", "건축년도", "년", "월", "일", "동", "아파트명", "크기", "지번", "코드", "층", "년월", "id", "시간"]
24 |
25 | ji_code = pd.read_excel("./data/KIKcd_B.20181210.xlsx")
26 | ji_code["코드"] = ji_code["법정동코드"].astype(str).str[0:5]
27 | ji_code_nodup = ji_code[["코드", "시도명"]].drop_duplicates()
28 | apt_sale = pd.merge(apt_sale, ji_code_nodup, on="코드", how="left")
29 |
30 | g =px.histogram(apt_sale, x="시도명", y="시도명").update_xaxes(categoryorder="total descending")
31 |
32 | return g
33 |
34 |
35 | app = dash.Dash(__name__)
36 |
37 | app.layout = html.Div(children=[
38 | html.H1(children='아파트 매매거래 건수'),
39 | html.Br(),
40 | dcc.Graph(figure=apt_deal_cnt())
41 | ])
42 |
43 | if __name__ == '__main__':
44 | app.run_server(debug=True, port=9971)
45 |
--------------------------------------------------------------------------------
/ch_02/207_dash_real_estate_callback.py:
--------------------------------------------------------------------------------
1 | # coding = utf-8
2 | import dash
3 | import dash_core_components as dcc
4 | import dash_html_components as html
5 | from dash.dependencies import Input, Output
6 |
7 | import plotly.express as px
8 |
9 | import pymysql
10 | import pandas as pd
11 |
12 | db_conf = {
13 | "host": "127.0.0.1",
14 | "user": "test",
15 | "password": "test11",
16 | "database": "finance",
17 | }
18 |
19 | con = pymysql.connect(**db_conf)
20 | apt_sale = pd.read_sql("SELECT * FROM APT_SALE WHERE YM>=201901 AND YM<=201912", con)
21 | con.close()
22 |
23 | apt_sale.columns = ["매매가격", "건축년도", "년", "월", "일", "동", "아파트명", "크기", "지번", "코드", "층", "년월", "id", "시간"]
24 |
25 | ji_code = pd.read_excel("./data/KIKcd_B.20181210.xlsx")
26 | ji_code["코드"] = ji_code["법정동코드"].astype(str).str[0:5]
27 | ji_code_nodup = ji_code[["코드", "시도명"]].drop_duplicates()
28 | apt_sale = pd.merge(apt_sale, ji_code_nodup, on="코드", how="left")
29 |
30 | def apt_deal_cnt(ym=201912, apt_sale=apt_sale):
31 |
32 | apt_sale = apt_sale[apt_sale["년월"]==ym]
33 | g =px.histogram(apt_sale, x="시도명", y="시도명").update_xaxes(categoryorder="total descending")
34 |
35 | return g
36 |
37 |
38 | app = dash.Dash(__name__)
39 |
40 | app.layout = html.Div(children=[
41 | html.H1(children='아파트 매매거래 건수'),
42 | html.Br(),
43 | dcc.Slider(id="ym", min=201901, max=201912, marks={r:str(r) for r in range(201901,202001)}, value=201912),
44 | dcc.Graph(id="graph", figure=apt_deal_cnt())
45 | ])
46 |
47 | @app.callback(
48 | Output("graph", "figure"),
49 | [Input('ym', 'value')]
50 | )
51 | def update_graph(input_value):
52 | return apt_deal_cnt(input_value)
53 |
54 |
55 | if __name__ == '__main__':
56 | app.run_server(debug=True, port=9972)
57 |
--------------------------------------------------------------------------------
/ch_02/a:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ch_03/302_currency_stock_real.py:
--------------------------------------------------------------------------------
1 | import pymysql
2 | import pandas as pd
3 | import seaborn as sns
4 |
5 | # 통화량 데이터 가져오기
6 | db_conf = {
7 | "host": "127.0.0.1",
8 | "user": "test",
9 | "password": "test11",
10 | "database": "finance",
11 | }
12 |
13 | con = pymysql.connect(**db_conf)
14 | df = pd.read_sql("SELECT * FROM kor_bank WHERE stat_code='001Y453'", con)
15 | con.close()
16 |
17 | # 데이터 타입 변경
18 | df["data_value"]=df["data_value"].astype(float)
19 |
20 | df["time"]=df["time"]+"01"
21 | df["time"]=df["time"].astype('datetime64')
22 | df["time"] = df["time"] + pd.offsets.MonthEnd()
23 |
24 | sns.lineplot(data=df, x="time", y="data_value", hue="item_code1")
25 |
26 | df["change_ratio"]=df.groupby("item_code1")["data_value"].pct_change(12)*100
27 | # a=df[["change_ratio","data_value","item_code1","time"]].head(100)
28 | sns.lineplot(data=df, x="time", y="change_ratio", hue="item_code1",
29 | style="item_code1")
30 |
31 | # 주가지수 수집하기
32 | import FinanceDataReader as fdr
33 |
34 | # KOSPI지수 수집하기
35 | df_kospi = fdr.DataReader('KS11', '2015')
36 | df_kospi.head()
37 |
38 | kospi_mean=df_kospi.resample('M', how="mean")
39 | kospi_mean["change_ratio"]=kospi_mean["Close"].pct_change(12)*100
40 | kospi_mean["item_code1"]="kospi"
41 | kospi_mean=kospi_mean.reset_index(drop=False)
42 | kospi_mean=kospi_mean.rename(columns={"Date":"time","Close":"data_value"})
43 |
44 | df=pd.concat([df[["time","item_code1","data_value","change_ratio"]],
45 | kospi_mean[["time","item_code1","data_value","change_ratio"]]],0)
46 |
47 | df_graph=df[df["item_code1"].isin(["BBHA00","kospi"])]
48 | sns.lineplot(data=df_graph, x="time", y="change_ratio", hue="item_code1",
49 | style="item_code1",alpha=0.8)
50 |
51 | # 아파트 매매 데이터 불러오기
52 | con = pymysql.connect(**db_conf)
53 | df_apt = pd.read_sql("SELECT ym,avg(price) FROM apt_sale WHERE ym>='201501' and ym<='201912' GROUP BY ym", con)
54 | con.close()
55 |
56 | # 전년동월대비 증감율 구하기
57 | df_apt["change_ratio"]=df_apt["avg(price)"].pct_change()*100
58 |
59 | # 시간과 매매가격 데이터 타입 맞추
60 | df_apt.columns=["time","data_value","change_ratio"]
61 | df_apt["time"]=df_apt["time"]*100+1
62 | df_apt["time"]=df_apt["time"].astype(str).astype('datetime64')
63 | df_apt["time"] = df_apt["time"] + pd.offsets.MonthEnd()
64 | df_apt["item_code1"]="APT"
65 |
66 | # 그래프 그리기
67 | df_graph=pd.concat([df_graph,df_apt],0)
68 | df_graph.index=df_graph["time"]
69 | df_graph=df_graph["2016":]
70 | sns.set_style("whitegrid")
71 | sns.lineplot(data=df_graph, x="time", y="change_ratio", hue="item_code1",
72 | style="item_code1", markers=True, alpha=0.8)
73 |
74 | # df_graph1["time"]=df_graph1["time"].astype(int)
75 | # sns.lmplot(data=df_graph1, x="time", y="change_ratio", hue="item_code1", order=3)
76 |
77 | from sklearn.preprocessing import MinMaxScaler
78 | import numpy as np
79 |
80 | #최소-최대 정규화
81 | scaler=MinMaxScaler()
82 | df_graph1=pd.DataFrame()
83 | for d in df_graph.groupby("item_code1"):
84 | d[1]["cr_minmax"]=scaler.fit_transform(d[1][["change_ratio"]])
85 | df_graph1=pd.concat([df_graph1,d[1]],0)
86 |
87 | sns.lineplot(data=df_graph1, x="time", y="cr_minmax", hue="item_code1",
88 | style="item_code1", markers=True, alpha=0.8)
89 |
90 | df_graph_gr=df_graph1.groupby("item_code1")["cr_minmax"].rolling(6).mean()
91 | df_graph_gr=df_graph_gr.reset_index(drop=False)
92 | sns.lineplot(data=df_graph_gr, x="time", y="cr_minmax", hue="item_code1",
93 | style="item_code1")
--------------------------------------------------------------------------------
/ch_03/303_base_interest_rates.py:
--------------------------------------------------------------------------------
1 | from urllib.request import urlopen
2 | from bs4 import BeautifulSoup
3 | from html_table_parser import parser_functions as parser
4 | import pymysql
5 | import pandas as pd
6 | import time
7 |
8 |
9 | # 외국금리
10 | # https://www.global-rates.com/interest-rates/central-banks/central-bank-japan/boj-interest-rate.aspx
11 |
12 | def get_for_rate(nation,to="2019-12-31"):
13 |
14 | nation_list={"KOR":"/central-bank-south-korea/bank-of-korea-interest-rate.aspx",
15 | "JPN":"/central-bank-japan/boj-interest-rate.aspx",
16 | "USA":"/central-bank-america/fed-interest-rate.aspx",
17 | "CHI":"/central-bank-china/pbc-interest-rate.aspx",
18 | "EUR":"/european-central-bank/ecb-interest-rate.aspx"
19 | }
20 |
21 | url=nation_list.get(nation, "-1")
22 |
23 | if url=="-1":
24 | print("국가명을 확인해주세요.")
25 | return -1
26 |
27 | url="https://www.global-rates.com/interest-rates/central-banks{}".format(url)
28 | result=urlopen(url).read()
29 | soup=BeautifulSoup(result,"html.parser")
30 | table_tags=soup.find_all("table")
31 |
32 | # for idx,t in enumerate(table_tags):
33 | # try:
34 | # print("{}: ".format(idx),end="")
35 | # print(t.find_all("h3")[0].text)
36 | # except:
37 | # pass
38 |
39 | table = parser.make2d(table_tags[18])
40 | df = pd.DataFrame(table[2:], columns=table[1])
41 | df.head()
42 |
43 | df["dt"]=df["change date"].astype("datetime64")
44 | df_range=pd.DataFrame({"dt":pd.date_range(df["dt"].min(),to)})
45 |
46 | df_1=pd.merge(df_range,df,how="left")
47 | df_1["percentage"]=df_1["percentage"].fillna(method="ffill")
48 | df_1["percentage"]=df_1["percentage"].str.replace("\xa0%","").astype(float)
49 |
50 | df_1["nation"]=nation
51 | df_1=df_1.drop("change date",1)
52 | df_1=df_1.rename(columns={"percentage":"base_rate"})
53 |
54 | time.sleep(3)
55 |
56 | return df_1
57 |
58 |
59 | # 국가별 기준 금리 정보를 수집합니다.
60 | df_kor=get_for_rate("KOR")
61 | df_jpn=get_for_rate("JPN")
62 | df_usa=get_for_rate("USA")
63 | df_chi=get_for_rate("CHI")
64 | df_eur=get_for_rate("EUR")
65 | df=pd.concat([df_kor,df_jpn,df_usa,df_chi,df_eur],0)
66 |
67 | # 모든 국가에 포함된 시작일자를 구합니다.
68 | df_min_dt=df.groupby('nation')["dt"].min()
69 | df_min_dt=max(df_min_dt)
70 | df_graph=df.loc[df["dt"]>=df_min_dt]
71 |
72 | import seaborn as sns
73 | sns.lineplot(data=df_graph,x="dt",y="base_rate",hue="nation", alpha=0.7)
74 |
75 |
76 | # 금리 관련 뉴스 정보를 수집합니다.
77 | API_KEY="96f5b5ce63766554fbcb884684641572"
78 | word="금리"
79 |
80 | from urllib.parse import quote
81 |
82 | url="https://gnews.io/api/v3/search?q={}&lang=ko&token={}".format(quote(word),API_KEY)
83 | result=urlopen(url)
84 | html=result.read()
85 |
86 |
87 | import urllib.request
88 | import json
89 |
90 | client_id = "발급받은 Client ID를 넣습니다."
91 | client_secret = "발급받은 Client Secret을 넣습니다."
92 | encText = urllib.parse.quote("금리")
93 | url = "https://openapi.naver.com/v1/search/news.json?query=" + encText # json 결과
94 |
95 | request = urllib.request.Request(url)
96 | request.add_header("X-Naver-Client-Id",client_id)
97 | request.add_header("X-Naver-Client-Secret",client_secret)
98 | response = urllib.request.urlopen(request)
99 |
100 | res=response.read()
101 | result=json.loads(res)
102 |
--------------------------------------------------------------------------------
/ch_03/304_dashboard.py:
--------------------------------------------------------------------------------
1 | # coding = utf-8
2 | import dash
3 | import dash_core_components as dcc
4 | import dash_html_components as html
5 | import collect_base_interest_rates as gbr
6 | import pandas as pd
7 | import plotly.express as px
8 |
9 | app=dash.Dash(__name__)
10 |
11 | def get_interests_graph():
12 | df=pd.read_pickle("df_graph.pkl")
13 | fig=px.line(df, x="dt", y="base_rate", color="nation")
14 |
15 | return fig
16 |
17 | def get_news():
18 | """
19 | :return: 네이버뉴스 검색 리스트
20 | """
21 | result=gbr.get_naver_news()
22 |
23 | items=result["items"]
24 | link_list=[]
25 |
26 | from datetime import datetime, timezone, timedelta
27 | now=datetime.now(timezone.utc) + timedelta(hours=9)
28 | now=datetime.strftime(now,"%Y-%m-%d %H:%M:%S")
29 | link_list.append(html.Div(children="뉴스 검색시간:{}".format(now),style={"text-align":"right"}))
30 |
31 | for i in items:
32 | exc_word=[""","",""]
33 | title=i["title"]
34 | description=i["description"]
35 |
36 | for e in exc_word:
37 | title=title.replace(e,"")
38 | description=description.replace(e, "")
39 |
40 | #제목 링크 넣기
41 | link=html.A(title,href=i["originallink"],style={"font-size":"14pt"})
42 | link=html.Li(link)
43 | link_list.append(link)
44 |
45 | # 설명 추가
46 | description=html.Article(description)
47 | link_list.append(description)
48 |
49 | # 공백추가
50 | link_list.append(html.Br())
51 |
52 | return link_list
53 |
54 | def serve_layout():
55 |
56 | return html.Div(children=[
57 | html.H3("주요각국 기준 금리 현황", style={'text-align': 'center'}),
58 | dcc.Graph(id="graph1", figure=get_interests_graph()),
59 | html.Br(),
60 | html.H3("금리 관련 주요 뉴스", style={'text-align': 'center'}),
61 | html.Div(children=get_news()),
62 | ])
63 |
64 |
65 | app.layout=serve_layout
66 |
67 | if __name__ == '__main__':
68 | app.run_server()
69 |
--------------------------------------------------------------------------------
/ch_03/305_real_estate_lent_ratio.py:
--------------------------------------------------------------------------------
1 | # coding = utf-8
2 |
3 | import pymysql
4 | import pandas as pd
5 | import numpy as np
6 | import seaborn as sns
7 |
8 | db_conf = {
9 | "host": "127.0.0.1",
10 | "user": "test",
11 | "password": "test11",
12 | "database": "finance",
13 | }
14 |
15 | con = pymysql.connect(**db_conf)
16 | apt_sale = pd.read_sql("SELECT * FROM APT_SALE WHERE YM>=201911 AND YM<=202001", con)
17 | apt_lent = pd.read_sql("SELECT * FROM APT_LENT WHERE YM>=201911 AND YM<=202001", con)
18 | con.close()
19 |
20 | apt_sale.columns = ["매매가격", "건축년도", "년", "월", "일", "동", "아파트명", "크기", "지번", "코드", "층", "년월", "id", "시간"]
21 | apt_lent.columns=["건축년도","년","동","보증금가격","아파트명","월","월세","거래일","크기","지번","코드","층","년월","id","시간"]
22 |
23 | # 시도명을 붙입니다.
24 | ji_code = pd.read_excel("./data/KIKcd_B.20181210.xlsx")
25 | ji_code["코드"] = ji_code["법정동코드"].astype(str).str[0:5]
26 | ji_code_nodup = ji_code[["코드", "시도명", "시군구명"]].drop_duplicates()
27 |
28 | apt_sale = pd.merge(apt_sale, ji_code_nodup, on="코드", how="left")
29 | apt_lent = pd.merge(apt_lent, ji_code_nodup, on="코드", how="left")
30 |
31 | # 아파트 평수를 나눕니다.
32 | label = ["10평미만", "10평대","20평대", "30평대", "40평대", "50평대", "60평대", "60평대 이상"]
33 | apt_sale["평수"] = apt_sale["크기"]/3.3
34 | apt_sale["평수구분"] = pd.cut(apt_sale["평수"], [0,10, 20, 30,40,50, 60,70,np.Inf], labels=label)
35 |
36 | apt_lent["평수"] = apt_lent["크기"]/3.3
37 | apt_lent["평수구분"] = pd.cut(apt_lent["평수"], [0,10, 20, 30,40,50, 60,70,np.Inf], labels=label)
38 |
39 | # 전세 데이터만 추출합니다.
40 | apt_lent_j = apt_lent.loc[apt_lent["월세"]==0]
41 |
42 | # 평균거래가격을 계사합니다.
43 | apt_sale_gr = apt_sale.groupby(["시도명", "시군구명", "동", "지번" ,"아파트명", "평수구분"]).agg({"매매가격":"mean","아파트명":"size"})
44 | apt_sale_gr.columns = ["매매가_평균", "매매거래건수"]
45 |
46 | apt_lent_j_gr = apt_lent_j.groupby(["시도명", "시군구명", "동","지번" ,"아파트명", "평수구분"]).agg({"보증금가격":"mean","아파트명":"size"})
47 | apt_lent_j_gr.columns = ["전세가_평균", "전세거래건수"]
48 |
49 | # 거래건수 비중
50 | sns.countplot(apt_sale_gr["매매거래건수"], label="small")
51 | sns.countplot(apt_lent_j_gr["전세거래건수"], label="small")
52 |
53 | # 매매, 전세 데이터 결합
54 | apt_tot = pd.merge(apt_lent_j_gr, apt_sale_gr, how="inner", left_index=True, right_index=True)
55 |
56 | apt_tot["전세가_비율"]=apt_tot["전세가_평균"]/apt_tot["매매가_평균"]
57 | pd.set_option('display.max_columns', 100)
58 | apt_tot.sort_values("전세가_비율", ascending=False)
59 | apt_tot.head()
60 |
61 | # 전세가비율 그래프 그리기
62 | import numpy as np
63 | g = sns.distplot(apt_tot["전세가_비율"])
64 | g.set_xticks(np.arange(0,2.5,0.1))
65 | apt_tot.to_pickle("apt_tot.pkl")
66 |
--------------------------------------------------------------------------------
/ch_03/306_gang_nam_time.py:
--------------------------------------------------------------------------------
1 | # coding = utf-8
2 |
3 | import pymysql
4 | import pandas as pd
5 | import numpy as np
6 | import seaborn as sns
7 |
8 |
9 | # 강남역에서 출퇴근 하기 좋은 아파트 확인하기
10 | apt_tot=pd.read_pickle("apt_tot.pkl")
11 |
12 | # 경기도 시도명 확인
13 | apt_tot=apt_tot.reset_index(drop=False)
14 | temp=apt_tot.loc[apt_tot["시도명"].isin(["경기도"])]
15 | temp["시군구명"].value_counts()
16 |
17 | # 구리시, 하남시, 성남시
18 | apt_tot=apt_tot.reset_index(drop=False)
19 | apt_kkd=apt_tot.loc[apt_tot["시군구명"].str[0:3].isin(["구리시","하남시","성남시"])]
20 | apt_kkd["시도명"].value_counts()
21 |
22 | import tat
23 | tat.distplot(data=apt_kkd, x="전세가_비율", hue="시군구명")
24 |
25 | # 70%이상 추출하기
26 | apt_kkd_70 = apt_kkd[apt_kkd["전세가_비율"]>0.7]
27 | len(apt_kkd_70)
28 |
29 | apt_kkd_70["주소"]=apt_kkd_70["시도명"]+" "+apt_kkd_70["시군구명"] + " " + apt_kkd_70["동"] +" "+ apt_kkd_70["지번"] +" "+ apt_kkd_70["아파트명"]
30 | apt_kkd_70=apt_kkd_70.reset_index(drop=True)
31 | juso=apt_kkd_70["주소"][0]
32 |
33 | from urllib.request import urlopen
34 | from urllib.parse import quote
35 | import time
36 | import json
37 | import random
38 |
39 | # https://developers.google.com/maps/documentation/directions/intro#TravelModes
40 |
41 | api_key="발급받은 API키를 입력합니다."
42 | apt_kkd_70["시간"]=""
43 |
44 | for idx, juso in enumerate(apt_kkd_70["주소"]):
45 | try:
46 | url="https://maps.googleapis.com/maps/api/directions/json?origin="+quote(juso)+"&destination="+quote("강남역")+"&mode=transit&key="+api_key
47 | result=urlopen(url).read()
48 | json_result = json.loads(result)
49 | dur_time = json_result["routes"][-1]["legs"][-1]["duration"]["text"]
50 | apt_kkd_70.loc[apt_kkd_70["주소"]==juso,"시간"] = dur_time
51 | print("{}: {}, {}".format(idx,juso,dur_time))
52 | except Exception as e:
53 | print(e)
54 |
55 | time.sleep(random.randint(1,3))
56 |
57 | apt_kkd_70.head()
58 |
59 | def change_to_m(x):
60 | if x=="":
61 | return None
62 |
63 | if x.find("hours")>-1:
64 | h=x.split(" hours")[0]
65 | h=int(h)*60
66 | x=x.split(" hours")[1]
67 | elif x.find("hour")>-1:
68 | h=x.split(" hour")[0]
69 | h=int(h)*60
70 | x=x.split(" hour")[1]
71 | else:
72 | h=0
73 |
74 | m=x.split(" min")[0]
75 | m=int(m)
76 |
77 | return h+m
78 |
79 | apt_kkd_70["대중"]=apt_kkd_70["시간"].apply(change_to_m)
80 | len(apt_kkd_70)
81 |
82 | apt_kkd_70_1 = apt_kkd_70[apt_kkd_70["대중"].isnull()==False]
83 | len(apt_kkd_70_1)
84 |
85 | tat.distplot(data=apt_kkd_70_1, x="대중", hue="시군구명")
86 |
87 | sns.scatterplot(data=apt_kkd_70_1, x="전세가_비율", y="대중", hue="평수구분")
88 |
89 | temp = apt_kkd_70_1[(apt_kkd_70_1["대중"]<50) & (apt_kkd_70_1["전세가_비율"]>0.85)]
90 | print(temp)
--------------------------------------------------------------------------------
/ch_03/307_dividend.py:
--------------------------------------------------------------------------------
1 | # coding = utf-8
2 | from selenium import webdriver
3 | import time
4 |
5 | # 보통중 데이터 수집
6 | def get_div_data(browser,last_num,file_nm):
7 | search_btn = browser.find_element_by_id("image1")
8 | search_btn.click()
9 |
10 | # html소스를 가져와서, 원하는 위치를 찾습니다.
11 | html = browser.page_source
12 |
13 | from bs4 import BeautifulSoup
14 | from html_table_parser import parser_functions as parser
15 | import pandas as pd
16 |
17 | soup = BeautifulSoup(html, "html.parser")
18 | table = soup.find("table", attrs={"id":"grid1_body_table"})
19 | p = parser.make2d(table)
20 | df = pd.DataFrame(p[2:],columns=p[1])
21 | df.head()
22 |
23 | import time
24 | import random
25 | from tqdm import tqdm
26 |
27 | prev_no = 0
28 | prev_table = None
29 |
30 | for i in tqdm(range(0,200)):
31 |
32 | try:
33 | next_btn = browser.find_element_by_id("cntsPaging01_next_btn")
34 | next_btn.click()
35 | except:
36 | time.sleep(2)
37 | try:
38 | next_btn = browser.find_element_by_id("cntsPaging01_next_btn")
39 | next_btn.click()
40 | except:
41 | time.sleep(2)
42 | next_btn = browser.find_element_by_id("cntsPaging01_next_btn")
43 | next_btn.click()
44 |
45 | def get_html(browser, cnt):
46 |
47 | if cnt>=4:
48 | return -1, -1
49 |
50 | html = browser.page_source
51 | soup = BeautifulSoup(html, 'html.parser')
52 |
53 | cur_no = soup.find("a", attrs={"class":"w2pageList_control_label w2pageList_label_selected"})
54 | cur_no = cur_no.text
55 |
56 | table = soup.find("table", attrs={"id": "grid1_body_table"})
57 |
58 | if cur_no!=prev_no and prev_table!=table:
59 | return cur_no, table
60 | else:
61 | time.sleep(1)
62 | get_html(browser, cnt+1)
63 |
64 | cur_no, table = get_html(browser, 1)
65 |
66 | if cur_no== -1:
67 | print("\n종료. 테이블 정보가 바뀌지 않았습니다.")
68 | break
69 |
70 | p=parser.make2d(table)
71 | temp=pd.DataFrame(p[2:],columns=p[1])
72 | df = pd.concat([df, temp],0)
73 | prev_no = cur_no
74 | prev_table = html
75 |
76 | if cur_no==str(last_num):
77 | print("\n최종 페이지 도달")
78 | break
79 | time.sleep(random.randrange(3,5))
80 | df.to_pickle(file_nm)
81 |
82 |
83 | # 전체 데이터 수집하기
84 | browser = webdriver.Chrome('/Applications/chromedriver')
85 | browser.get("http://www.seibro.or.kr/websquare/control.jsp?w2xPath=/IPORTAL/user/company/BIP_CNTS01042V.xml&menuNo=286#")
86 | time.sleep(5)
87 | # 배당주 메뉴의 마지막 페이지번호, 저장할 파일명을 넣습니다.
88 | get_div_data(browser,"96","stock_div.pkl")
89 |
--------------------------------------------------------------------------------
/ch_03/a:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/소스코드.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bjpublic/python-for-finance-data/418d9a234e7389d19225769c710ae04b1dfdac3f/소스코드.zip
--------------------------------------------------------------------------------