4 분 소요

1. 서울특별시 부동산 XML 형태 가져오기

1-1. 라이브러리 설치

# 라이브러리 가져오기
import lxml
import requests
from bs4 import BeautifulSoup
import pandas as pd
import time
import math

1-2. 인증키와 URL 가져오기

service_key = ''
url = f'http://openapi.seoul.go.kr:8088/{service_key}/xml/tbLnOpendataRtmsV/1/5/'
print(url)
http://openapi.seoul.go.kr:8088/596a6f71646a616e37305945544979/xml/tbLnOpendataRtmsV/1/5/

1-3. 데이터 요청

req = requests.get(url)
req.content
b'<?xml version="1.0" encoding="UTF-8"?>\n<tbLnOpendataRtmsV>\n<list_total_count>2664624</list_total_count>\n<RESULT>\n<CODE>INFO-000</CODE>\n<MESSAGE>\xec\xa0\x95\xec\x83\x81 \xec\xb2\x98\xeb\xa6\xac\xeb\x90\x98\xec\x97\x88\xec\x8a\xb5\xeb\x8b\x88\xeb\x8b\xa4</MESSAGE>\n</RESULT>\n<row>\n<ACC_YEAR>2023</ACC_YEAR>\n<SGG_CD>11500</SGG_CD>\n<SGG_NM>\xea\xb0\x95\xec\x84\x9c\xea\xb5\xac</SGG_NM>\n<BJDONG_CD>10300</BJDONG_CD>\n<BJDONG_NM>\xed\x99\x94\xea\xb3\xa1\xeb\x8f\x99</BJDONG_NM>\n<LAND_GBN>1</LAND_GBN>\n<LAND_GBN_NM>\xeb\x8c\x80\xec\xa7\x80</LAND_GBN_NM>\n<BONBEON>0851</BONBEON>\n<BUBEON>0033</BUBEON>\n<BLDG_NM>SK\xed\x8c\x8c\xed\x81\xac\xeb\xa6\xac\xec\x9b\x80(851-33)</BLDG_NM>\n<DEAL_YMD>20230609</DEAL_YMD>\n<OBJ_AMT>29500</OBJ_AMT>\n<BLDG_AREA>26.12</BLDG_AREA>\n<TOT_AREA>15.910000</TOT_AREA>\n<FLOOR>3</FLOOR>\n<RIGHT_GBN/>\n<CNTL_YMD/>\n<BUILD_YEAR>2022</BUILD_YEAR>\n<HOUSE_TYPE>\xec\x97\xb0\xeb\xa6\xbd\xeb\x8b\xa4\xec\x84\xb8\xeb\x8c\x80</HOUSE_TYPE>\n<REQ_GBN>\xec\xa7\x81\xea\xb1\xb0\xeb\x9e\x98</REQ_GBN>\n<RDEALER_LAWDNM/>\n</row>\n<row>\n<ACC_YEAR>2023</ACC_YEAR>\n<SGG_CD>11215</SGG_CD>\n<SGG_NM>\xea\xb4\x91\xec\xa7\x84\xea\xb5\xac</SGG_NM>\n<BJDONG_CD>10700</BJDONG_CD>\n<BJDONG_NM>\xed\x99\x94\xec\x96\x91\xeb\x8f\x99</BJDONG_NM>\n<LAND_GBN>1</LAND_GBN>\n<LAND_GBN_NM>\xeb\x8c\x80\xec\xa7\x80</LAND_GBN_NM>\n<BONBEON>0111</BONBEON>\n<BUBEON>0012</BUBEON>\n<BLDG_NM/>\n<DEAL_YMD>20230609</DEAL_YMD>\n<OBJ_AMT>26500</OBJ_AMT>\n<BLDG_AREA>16.88</BLDG_AREA>\n<TOT_AREA>29.900000</TOT_AREA>\n<FLOOR>3</FLOOR>\n<RIGHT_GBN/>\n<CNTL_YMD/>\n<BUILD_YEAR>2021</BUILD_YEAR>\n<HOUSE_TYPE>\xec\x98\xa4\xed\x94\xbc\xec\x8a\xa4\xed\x85\x94</HOUSE_TYPE>\n<REQ_GBN>\xec\xa4\x91\xea\xb0\x9c\xea\xb1\xb0\xeb\x9e\x98</REQ_GBN>\n<RDEALER_LAWDNM>\xec\x84\x9c\xec\x9a\xb8 \xec\xa4\x91\xea\xb5\xac</RDEALER_LAWDNM>\n</row>\n<row>\n<ACC_YEAR>2023</ACC_YEAR>\n<SGG_CD>11500</SGG_CD>\n<SGG_NM>\xea\xb0\x95\xec\x84\x9c\xea\xb5\xac</SGG_NM>\n<BJDONG_CD>10300</BJDONG_CD>\n<BJDONG_NM>\xed\x99\x94\xea\xb3\xa1\xeb\x8f\x99</BJDONG_NM>\n<LAND_GBN>1</LAND_GBN>\n<LAND_GBN_NM>\xeb\x8c\x80\xec\xa7\x80</LAND_GBN_NM>\n<BONBEON>0105</BONBEON>\n<BUBEON>0020</BUBEON>\n<BLDG_NM>(105-20)</BLDG_NM>\n<DEAL_YMD>20230609</DEAL_YMD>\n<OBJ_AMT>24000</OBJ_AMT>\n<BLDG_AREA>62.64</BLDG_AREA>\n<TOT_AREA>36.690000</TOT_AREA>\n<FLOOR>3</FLOOR>\n<RIGHT_GBN/>\n<CNTL_YMD/>\n<BUILD_YEAR>2011</BUILD_YEAR>\n<HOUSE_TYPE>\xec\x97\xb0\xeb\xa6\xbd\xeb\x8b\xa4\xec\x84\xb8\xeb\x8c\x80</HOUSE_TYPE>\n<REQ_GBN>\xec\xa4\x91\xea\xb0\x9c\xea\xb1\xb0\xeb\x9e\x98</REQ_GBN>\n<RDEALER_LAWDNM>\xec\x84\x9c\xec\x9a\xb8 \xea\xb0\x95\xec\x84\x9c\xea\xb5\xac</RDEALER_LAWDNM>\n</row>\n<row>\n<ACC_YEAR>2023</ACC_YEAR>\n<SGG_CD>11500</SGG_CD>\n<SGG_NM>\xea\xb0\x95\xec\x84\x9c\xea\xb5\xac</SGG_NM>\n<BJDONG_CD>10300</BJDONG_CD>\n<BJDONG_NM>\xed\x99\x94\xea\xb3\xa1\xeb\x8f\x99</BJDONG_NM>\n<LAND_GBN>1</LAND_GBN>\n<LAND_GBN_NM>\xeb\x8c\x80\xec\xa7\x80</LAND_GBN_NM>\n<BONBEON>0851</BONBEON>\n<BUBEON>0033</BUBEON>\n<BLDG_NM>SK\xed\x8c\x8c\xed\x81\xac\xeb\xa6\xac\xec\x9b\x80(851-33)</BLDG_NM>\n<DEAL_YMD>20230609</DEAL_YMD>\n<OBJ_AMT>30500</OBJ_AMT>\n<BLDG_AREA>28.54</BLDG_AREA>\n<TOT_AREA>17.060000</TOT_AREA>\n<FLOOR>2</FLOOR>\n<RIGHT_GBN/>\n<CNTL_YMD/>\n<BUILD_YEAR>2022</BUILD_YEAR>\n<HOUSE_TYPE>\xec\x97\xb0\xeb\xa6\xbd\xeb\x8b\xa4\xec\x84\xb8\xeb\x8c\x80</HOUSE_TYPE>\n<REQ_GBN>\xec\xa7\x81\xea\xb1\xb0\xeb\x9e\x98</REQ_GBN>\n<RDEALER_LAWDNM/>\n</row>\n<row>\n<ACC_YEAR>2023</ACC_YEAR>\n<SGG_CD>11470</SGG_CD>\n<SGG_NM>\xec\x96\x91\xec\xb2\x9c\xea\xb5\xac</SGG_NM>\n<BJDONG_CD>10300</BJDONG_CD>\n<BJDONG_NM>\xec\x8b\xa0\xec\x9b\x94\xeb\x8f\x99</BJDONG_NM>\n<LAND_GBN>1</LAND_GBN>\n<LAND_GBN_NM>\xeb\x8c\x80\xec\xa7\x80</LAND_GBN_NM>\n<BONBEON>0410</BONBEON>\n<BUBEON>0026</BUBEON>\n<BLDG_NM>\xed\x9c\xb4\xeb\xa8\xbc\xed\x8c\x8c\xed\x81\xac\xed\x83\x80\xec\x9a\xb4(410-26)</BLDG_NM>\n<DEAL_YMD>20230609</DEAL_YMD>\n<OBJ_AMT>16000</OBJ_AMT>\n<BLDG_AREA>29.2</BLDG_AREA>\n<TOT_AREA>21.960000</TOT_AREA>\n<FLOOR>2</FLOOR>\n<RIGHT_GBN/>\n<CNTL_YMD/>\n<BUILD_YEAR>2011</BUILD_YEAR>\n<HOUSE_TYPE>\xec\x97\xb0\xeb\xa6\xbd\xeb\x8b\xa4\xec\x84\xb8\xeb\x8c\x80</HOUSE_TYPE>\n<REQ_GBN>\xec\xa4\x91\xea\xb0\x9c\xea\xb1\xb0\xeb\x9e\x98</REQ_GBN>\n<RDEALER_LAWDNM>\xec\x84\x9c\xec\x9a\xb8 \xec\x96\x91\xec\xb2\x9c\xea\xb5\xac</RDEALER_LAWDNM>\n</row>\n</tbLnOpendataRtmsV>\n'
soup = BeautifulSoup(req.content, "lxml") # XML 파싱
print(soup)
<?xml version="1.0" encoding="UTF-8"?><html><body><tblnopendatartmsv>
<list_total_count>2664624</list_total_count>
<result>
<code>INFO-000</code>
<message>정상 처리되었습니다</message>
</result>
<row>
<acc_year>2023</acc_year>
<sgg_cd>11500</sgg_cd>
<sgg_nm>강서구</sgg_nm>
<bjdong_cd>10300</bjdong_cd>
<bjdong_nm>화곡동</bjdong_nm>
<land_gbn>1</land_gbn>
<land_gbn_nm>대지</land_gbn_nm>
<bonbeon>0851</bonbeon>
<bubeon>0033</bubeon>
<bldg_nm>SK파크리움(851-33)</bldg_nm>
<deal_ymd>20230609</deal_ymd>
<obj_amt>29500</obj_amt>
<bldg_area>26.12</bldg_area>
<tot_area>15.910000</tot_area>
<floor>3</floor>
<right_gbn></right_gbn>
<cntl_ymd></cntl_ymd>
<build_year>2022</build_year>
<house_type>연립다세대</house_type>
<req_gbn>직거래</req_gbn>
<rdealer_lawdnm></rdealer_lawdnm>
</row>
<row>
<acc_year>2023</acc_year>
<sgg_cd>11215</sgg_cd>
<sgg_nm>광진구</sgg_nm>
<bjdong_cd>10700</bjdong_cd>
<bjdong_nm>화양동</bjdong_nm>
<land_gbn>1</land_gbn>
<land_gbn_nm>대지</land_gbn_nm>
<bonbeon>0111</bonbeon>
<bubeon>0012</bubeon>
<bldg_nm></bldg_nm>
<deal_ymd>20230609</deal_ymd>
<obj_amt>26500</obj_amt>
<bldg_area>16.88</bldg_area>
<tot_area>29.900000</tot_area>
<floor>3</floor>
<right_gbn></right_gbn>
<cntl_ymd></cntl_ymd>
<build_year>2021</build_year>
<house_type>오피스텔</house_type>
<req_gbn>중개거래</req_gbn>
<rdealer_lawdnm>서울 중구</rdealer_lawdnm>
</row>
<row>
<acc_year>2023</acc_year>
<sgg_cd>11500</sgg_cd>
<sgg_nm>강서구</sgg_nm>
<bjdong_cd>10300</bjdong_cd>
<bjdong_nm>화곡동</bjdong_nm>
<land_gbn>1</land_gbn>
<land_gbn_nm>대지</land_gbn_nm>
<bonbeon>0105</bonbeon>
<bubeon>0020</bubeon>
<bldg_nm>(105-20)</bldg_nm>
<deal_ymd>20230609</deal_ymd>
<obj_amt>24000</obj_amt>
<bldg_area>62.64</bldg_area>
<tot_area>36.690000</tot_area>
<floor>3</floor>
<right_gbn></right_gbn>
<cntl_ymd></cntl_ymd>
<build_year>2011</build_year>
<house_type>연립다세대</house_type>
<req_gbn>중개거래</req_gbn>
<rdealer_lawdnm>서울 강서구</rdealer_lawdnm>
</row>
<row>
<acc_year>2023</acc_year>
<sgg_cd>11500</sgg_cd>
<sgg_nm>강서구</sgg_nm>
<bjdong_cd>10300</bjdong_cd>
<bjdong_nm>화곡동</bjdong_nm>
<land_gbn>1</land_gbn>
<land_gbn_nm>대지</land_gbn_nm>
<bonbeon>0851</bonbeon>
<bubeon>0033</bubeon>
<bldg_nm>SK파크리움(851-33)</bldg_nm>
<deal_ymd>20230609</deal_ymd>
<obj_amt>30500</obj_amt>
<bldg_area>28.54</bldg_area>
<tot_area>17.060000</tot_area>
<floor>2</floor>
<right_gbn></right_gbn>
<cntl_ymd></cntl_ymd>
<build_year>2022</build_year>
<house_type>연립다세대</house_type>
<req_gbn>직거래</req_gbn>
<rdealer_lawdnm></rdealer_lawdnm>
</row>
<row>
<acc_year>2023</acc_year>
<sgg_cd>11470</sgg_cd>
<sgg_nm>양천구</sgg_nm>
<bjdong_cd>10300</bjdong_cd>
<bjdong_nm>신월동</bjdong_nm>
<land_gbn>1</land_gbn>
<land_gbn_nm>대지</land_gbn_nm>
<bonbeon>0410</bonbeon>
<bubeon>0026</bubeon>
<bldg_nm>휴먼파크타운(410-26)</bldg_nm>
<deal_ymd>20230609</deal_ymd>
<obj_amt>16000</obj_amt>
<bldg_area>29.2</bldg_area>
<tot_area>21.960000</tot_area>
<floor>2</floor>
<right_gbn></right_gbn>
<cntl_ymd></cntl_ymd>
<build_year>2011</build_year>
<house_type>연립다세대</house_type>
<req_gbn>중개거래</req_gbn>
<rdealer_lawdnm>서울 양천구</rdealer_lawdnm>
</row>
</tblnopendatartmsv>
</body></html>


c:\Users\YONSAI\anaconda4\lib\site-packages\bs4\builder\__init__.py:545: XMLParsedAsHTMLWarning:

It looks like you're parsing an XML document using an HTML parser. If this really is an HTML document (maybe it's XHTML?), you can ignore or filter this warning. If it's XML, you should know that using an XML parser will be more reliable. To parse this document as XML, make sure you have the lxml package installed, and pass the keyword argument `features="xml"` into the BeautifulSoup constructor.

1-4 데이터 가공

years            = soup.find_all('acc_year')         # 접수년월
sgg_cds          = soup.find_all('sgg_cd')           # 자치구코드
sgg_nms          = soup.find_all('sgg_nm')           # 자치구명
bjdong_cds       = soup.find_all('bjdong_cd')        # 법정동코드
bjdong_nms       = soup.find_all('bjdong_nm')        # 법정동명
land_gbns        = soup.find_all('land_gbn')         # 지번구분
land_gbn_nms     = soup.find_all('land_gbn_nm')      # 지번구분명
land_gbn_nms     = soup.find_all('land_gbn_nm')      # 지번구분명
bonbeons         = soup.find_all('bonbeon')          # 본번
bubeons          = soup.find_all('bubeon')           # 부번
bldg_nms         = soup.find_all('bldg_nm')          # 건물명
deal_ymds        = soup.find_all('deal_ymd')         # 계약일
obj_amts         = soup.find_all('obj_amt')          # 물건금액(만원)
bldg_areas       = soup.find_all('bldg_area')        # 건물면적(㎡)
tot_areas        = soup.find_all('tot_area')         # 토지면적(㎡)
floors           = soup.find_all('floor')            # 층
right_gbns       = soup.find_all('right_gbn')        # 권리구분
cntl_ymds        = soup.find_all('cntl_ymd')         # 취소일
build_years      = soup.find_all('build_years')      # 건축년도
house_types      = soup.find_all('house_type')       # 건물용도
req_gbn          = soup.find_all('req_gbn')          # 신고구분
rdealer_lawdnms  = soup.find_all('rdealer_lawdnm')   # 신고한 개업공인중개사 시군구명
# 반복문 활용
year_list           = []
sgg_cd_list         = []
bldg_nm_list        = []
obj_amt_list        = []
house_type_list     = []
rdealer_lawdnm_list = []

for year, sgg_cd, bldg_nm, obj_amt, house_type, rdealer_lawdnm in zip(years, sgg_cds, bldg_nms, obj_amts, house_types, rdealer_lawdnms):
  year_list.append(year.get_text())
  sgg_cd_list.append(sgg_cd.get_text())
  bldg_nm_list.append(bldg_nm.get_text())
  obj_amt_list.append(obj_amt.get_text())
  house_type_list.append(house_type.get_text())
  rdealer_lawdnm_list.append(rdealer_lawdnm.get_text())

df = pd.DataFrame({
    "acc_year": year_list, 
    "sgg_cd": sgg_cd_list, 
    "bldg_nm" : bldg_nm_list,
    "obj_amt": obj_amt_list,
    "house_type" : house_type_list,
    "rdealer_lawdnm": rdealer_lawdnm_list
})

df
acc_year sgg_cd bldg_nm obj_amt house_type rdealer_lawdnm
0 2023 11500 SK파크리움(851-33) 29500 연립다세대
1 2023 11215 26500 오피스텔 서울 중구
2 2023 11500 (105-20) 24000 연립다세대 서울 강서구
3 2023 11500 SK파크리움(851-33) 30500 연립다세대
4 2023 11470 휴먼파크타운(410-26) 16000 연립다세대 서울 양천구

2. JSON 형태 가져오기

service_key = '596a6f71646a616e37305945544979'
url = f'http://openapi.seoul.go.kr:8088/{service_key}/json/tbLnOpendataRtmsV/1/5/'
print(url)
http://openapi.seoul.go.kr:8088/596a6f71646a616e37305945544979/json/tbLnOpendataRtmsV/1/5/
req = requests.get(url)
content = req.json() # HTTP 요청의 본문을 JSON 형식으로 파싱하여 해당 데이터를 변환
content
{'tbLnOpendataRtmsV': {'list_total_count': 2664624,
  'RESULT': {'CODE': 'INFO-000', 'MESSAGE': '정상 처리되었습니다'},
  'row': [{'ACC_YEAR': '2023',
    'SGG_CD': '11500',
    'SGG_NM': '강서구',
    'BJDONG_CD': '10300',
    'BJDONG_NM': '화곡동',
    'LAND_GBN': '1',
    'LAND_GBN_NM': '대지',
    'BONBEON': '0851',
    'BUBEON': '0033',
    'BLDG_NM': 'SK파크리움(851-33)',
    'DEAL_YMD': '20230609',
    'OBJ_AMT': '29500',
    'BLDG_AREA': 26.12,
    'TOT_AREA': 15.91,
    'FLOOR': 3.0,
    'RIGHT_GBN': '',
    'CNTL_YMD': '',
    'BUILD_YEAR': '2022',
    'HOUSE_TYPE': '연립다세대',
    'REQ_GBN': '직거래',
    'RDEALER_LAWDNM': ''},
   {'ACC_YEAR': '2023',
    'SGG_CD': '11215',
    'SGG_NM': '광진구',
    'BJDONG_CD': '10700',
    'BJDONG_NM': '화양동',
    'LAND_GBN': '1',
    'LAND_GBN_NM': '대지',
    'BONBEON': '0111',
    'BUBEON': '0012',
    'BLDG_NM': '',
    'DEAL_YMD': '20230609',
    'OBJ_AMT': '26500',
    'BLDG_AREA': 16.88,
    'TOT_AREA': 29.9,
    'FLOOR': 3.0,
    'RIGHT_GBN': '',
    'CNTL_YMD': '',
    'BUILD_YEAR': '2021',
    'HOUSE_TYPE': '오피스텔',
    'REQ_GBN': '중개거래',
    'RDEALER_LAWDNM': '서울 중구'},
   {'ACC_YEAR': '2023',
    'SGG_CD': '11500',
    'SGG_NM': '강서구',
    'BJDONG_CD': '10300',
    'BJDONG_NM': '화곡동',
    'LAND_GBN': '1',
    'LAND_GBN_NM': '대지',
    'BONBEON': '0105',
    'BUBEON': '0020',
    'BLDG_NM': '(105-20)',
    'DEAL_YMD': '20230609',
    'OBJ_AMT': '24000',
    'BLDG_AREA': 62.64,
    'TOT_AREA': 36.69,
    'FLOOR': 3.0,
    'RIGHT_GBN': '',
    'CNTL_YMD': '',
    'BUILD_YEAR': '2011',
    'HOUSE_TYPE': '연립다세대',
    'REQ_GBN': '중개거래',
    'RDEALER_LAWDNM': '서울 강서구'},
   {'ACC_YEAR': '2023',
    'SGG_CD': '11500',
    'SGG_NM': '강서구',
    'BJDONG_CD': '10300',
    'BJDONG_NM': '화곡동',
    'LAND_GBN': '1',
    'LAND_GBN_NM': '대지',
    'BONBEON': '0851',
    'BUBEON': '0033',
    'BLDG_NM': 'SK파크리움(851-33)',
    'DEAL_YMD': '20230609',
    'OBJ_AMT': '30500',
    'BLDG_AREA': 28.54,
    'TOT_AREA': 17.06,
    'FLOOR': 2.0,
    'RIGHT_GBN': '',
    'CNTL_YMD': '',
    'BUILD_YEAR': '2022',
    'HOUSE_TYPE': '연립다세대',
    'REQ_GBN': '직거래',
    'RDEALER_LAWDNM': ''},
   {'ACC_YEAR': '2023',
    'SGG_CD': '11470',
    'SGG_NM': '양천구',
    'BJDONG_CD': '10300',
    'BJDONG_NM': '신월동',
    'LAND_GBN': '1',
    'LAND_GBN_NM': '대지',
    'BONBEON': '0410',
    'BUBEON': '0026',
    'BLDG_NM': '휴먼파크타운(410-26)',
    'DEAL_YMD': '20230609',
    'OBJ_AMT': '16000',
    'BLDG_AREA': 29.2,
    'TOT_AREA': 21.96,
    'FLOOR': 2.0,
    'RIGHT_GBN': '',
    'CNTL_YMD': '',
    'BUILD_YEAR': '2011',
    'HOUSE_TYPE': '연립다세대',
    'REQ_GBN': '중개거래',
    'RDEALER_LAWDNM': '서울 양천구'}]}}
df = pd.DataFrame(content['tbLnOpendataRtmsV']['row'])
df
ACC_YEAR SGG_CD SGG_NM BJDONG_CD BJDONG_NM LAND_GBN LAND_GBN_NM BONBEON BUBEON BLDG_NM ... OBJ_AMT BLDG_AREA TOT_AREA FLOOR RIGHT_GBN CNTL_YMD BUILD_YEAR HOUSE_TYPE REQ_GBN RDEALER_LAWDNM
0 2023 11500 강서구 10300 화곡동 1 대지 0851 0033 SK파크리움(851-33) ... 29500 26.12 15.91 3.0 2022 연립다세대 직거래
1 2023 11215 광진구 10700 화양동 1 대지 0111 0012 ... 26500 16.88 29.90 3.0 2021 오피스텔 중개거래 서울 중구
2 2023 11500 강서구 10300 화곡동 1 대지 0105 0020 (105-20) ... 24000 62.64 36.69 3.0 2011 연립다세대 중개거래 서울 강서구
3 2023 11500 강서구 10300 화곡동 1 대지 0851 0033 SK파크리움(851-33) ... 30500 28.54 17.06 2.0 2022 연립다세대 직거래
4 2023 11470 양천구 10300 신월동 1 대지 0410 0026 휴먼파크타운(410-26) ... 16000 29.20 21.96 2.0 2011 연립다세대 중개거래 서울 양천구

5 rows × 21 columns

3. 시각화

# 라이브러리 설치
import plotly.express as px

fig = px.bar(df, x = 'BONBEON', y = 'BLDG_AREA') # 건물 면적 시각화

fig.update_layout(
    xaxis_title = '본번',
    yaxis_title = '건물면적(㎡)'
)

fig.show()
import plotly.graph_objects as go

# Figure  생성
fig = go.Figure()

# Bar Trace 추가
fig.add_trace(go.Bar(x = df['BONBEON'], y = df['BLDG_AREA']))

fig.show()

댓글남기기