→ 서울시 도서관 정보로
코드를 입력하세요<div class='openAPI'>
<h1>[openAPI란]</h1>
<p>설명</p>
</div>
## 방법 1
<h1>서울시 공공도서관</h1>
http://openapi.seoul.go.kr:8088/7771616662636c613731754b726d4c/xml/SeoulPublicLibraryInfo/1/5/
<a href
='http://openapi.seoul.go.kr:8088/7771616662636c613731754b726d4c/xml/SeoulPublicLibraryInfo/1/5/'> 클릭하면 위의 사이트로 이동 </a>
<p>교재는 <font color='red'>332페이지</font> json 처리 코드 있음</p>
## 방법 2
<div class='공공도서관'>
<h1>[서울시 공공도서관]</h1>
<p>http://openapi.seoul.go.kr:8088/7771616662636c613731754b726d4c/xml/SeoulPublicLibraryInfo/1/5/</p>
<a href
='http://openapi.seoul.go.kr:8088/7771616662636c613731754b726d4c/xml/SeoulPublicLibraryInfo/1/5/'> 클릭하면 위의 사이트로 이동 </a>
<p>교재는 <font color='red'>332페이지</font> json 처리 코드 있음</p>
</div>

코드를 입력## url을 분리하기
## 이유
## 1) 깃에 내 키를 오픈할 수 없으니까 -> 분리했다가 결합
## 2) 사용자가 json, xml 중 뭐를 사용할지 모르니까
api_Key = '7771616662636c613731754b726d4c'
url = 'http://openapi.seoul.go.kr:8088/'
url += api_Key
url += '/json/SeoulPublicLibraryInfo/1/206/'
## 데이터를 보고 싶으면 1~206 중 입력해주기 -> 보고 싶은 데이터만 보기 가능
url #url이 잘 연결되나 확인하세요
코드를 입력하세요## 특정 URL에서 JSON 데이터를 가져와 파이썬 딕셔너리로 변환하고,
## 필요한 데이터를 추출하는 과정
## 필요한 라이브러리 임포트
import urllib.request ## 주어진 URL에서 데이터를 가져
import json
plainText = urllib.request.urlopen(url).read().decode() #URL에서 데이터를 가져오기
jsonData = json.loads(plainText) ## 문자열 형태의 JSON 데이터를 파이썬 딕셔너리로 변환
## 특정 데이터 추출
dataCount = jsonData['SeoulPublicLibraryInfo']['list_total_count']
## 데이터 갯수 보여줘 ## url을 /로 나눈 뒤 뒤에서 두번째 요소롤 보여줘
dataCount,url.split('/')[-2] #참고
코드를 입력하세요## 결과
(206, '206')
dataCount = jsonData['SeoulPublicLibraryInfo']['row'] ## 특정 데이터 추출
libData = jsonData['SeoulPublicLibraryInfo']['row'] ## 데이터를 json으로 바꿔줌
import pandas as pd
# pd.DataFrame(libData)
df = pd.DataFrame(libData) ##데이터프레임으로 변환
df.head() ##df.head(5)-> 디폴트 -> 데이터의 구조와 내용을 빠르게 파악 가능

코드를 입력하세요## 데이터 보기
df['TEL_NO'][:3], df.iloc[:,5][:3]
#이 중에서 3개만 샘플로 보자
# iloc : 행과 열로 샘플 보기 가능']]
df[['TEL_NO', 'HMPG_URL']] # 데이터 보여주기 여러 방법으로 가능
df.iloc[:,[5,6]]


코드를 입력하세요df['CODE_VALUE'].unique() #df.head()로 확인
# 1. 서울시 도서관 전체 개수는?
len(df)
# 2. 서울시의 도서관이 있는 구의 갯수는?
#질문이 중요
len(df['CODE_VALUE'].unique()), #CODE_VALUE값만을 묶어서 df로 만들어준 다음에 그 길이를 보여줘라
df['CODE_VALUE'].unique()
# 3. 각 구별로 도서관은 몇개가 있나요?
df['CODE_VALUE'].value_counts() #숫자가 가장 많은 값부터 출력
# 4. 도서관 갯수가 많은 상위 top3는 어디인가요?
df['CODE_VALUE'].value_counts()[:3]
코드를 입력하세요##1
##206
##2
(25, array(['강남구', '강동구', '강북구', '강서구', '관악구', '광진구', '구로구', '금천구', '노원구',
'도봉구', '동대문구', '동작구', '마포구', '서대문구', '서초구', '성동구', '성북구', '송파구',
'양천구', '영등포구', '용산구', '은평구', '종로구', '중구', '중랑구'], dtype=object)
##3
CODE_VALUE
강남구 16
성북구 13
구로구 12
송파구 12
강동구 10
양천구 10
종로구 9
노원구 9
동대문구 9
서초구 9
강서구 9
도봉구 9
동작구 8
중구 8
은평구 8
광진구 7
성동구 7
강북구 7
영등포구 6
마포구 6
관악구 5
중랑구 5
용산구 4
서대문구 4
금천구 4
Name: count, dtype: int64
##4
CODE_VALUE
강남구 16
성북구 13
구로구 12
Name: count, dtype: int64
코드를 입력하세요df[df['CODE_VALUE'] == '강남구']

코드를 입력하세요## 지도 시각화
## 위 자료는 위도와 경도 가지고 있음
## 구글에서 제공하는 지도맵을 세팅(출력), 줌인아웃 사이트, 중심좌표
## 내가 표시하고자 하는 위경도값을 그 구글맵지도에 추가한다.
import folium
# 위도
latitude = 37.394946
# 경도
longitude = 127.111104
m = folium.Map(location=[latitude, longitude],
zoom_start=17,
width=750,
height=500
)
m
tmp = df[['XCNTS', 'YDNTS', 'LBRRY_NAME', 'OP_TIME']]
for lat, lon, name, time in zip(tmp['XCNTS'], tmp['YDNTS'], tmp['LBRRY_NAME'], tmp['OP_TIME']):
pop = name + time
folium.Marker([lat, lon],
popup=pop).add_to(m)
m

코드를 입력하세요import folium
# 지도 생성 (중심 좌표: 서울)
m = folium.Map(location=[37.5665, 126.9780], zoom_start=12)
# 기본 아이콘 마커 추가
folium.Marker(
location=[37.5665, 126.9780],
popup='Default Icon',
icon=folium.Icon()
).add_to(m)
# 녹색 아이콘 마커 추가
folium.Marker(
location=[37.5765, 126.9880],
popup='Green Icon',
icon=folium.Icon(color='green')
).add_to(m)
# 다른 모양 아이콘 마커 추가
folium.Marker(
location=[37.5565, 126.9680],
popup='Star Icon',
icon=folium.Icon(icon='star')
).add_to(m)
# 붉은색 아이콘 마커 추가
folium.Marker(
location=[37.5465, 126.9580],
popup='Red Icon',
icon=folium.Icon(color='red', icon='info-sign')
).add_to(m)
# 커스텀 아이콘 추가 (아이콘 URL 사용)
icon_url = 'https://example.com/icon.png'
folium.Marker(
location=[37.5365, 126.9480],
popup='Custom Icon',
icon=folium.CustomIcon(icon_url, icon_size=(30, 30))
).add_to(m)
# 지도 출력
m.save('map_with_custom_icons.html')
m

import folium
# 지도 생성 (중심 좌표: 서울)
m = folium.Map(location=[37.5665, 126.9780], zoom_start=12)
# folium.Circle을 사용하여 지리적 거리 반지름으로 동그라미 추가
folium.Circle(
location=[37.5665, 126.9780],
radius=500, # 반지름 (미터 단위)
color='blue',
fill=True,
fill_color='blue'
).add_to(m)
# folium.CircleMarker를 사용하여 픽셀 단위 반지름으로 동그라미 추가
folium.CircleMarker(
location=[37.5765, 126.9880],
radius=10, # 반지름 (픽셀 단위)
color='green',
fill=True,
fill_color='green'
).add_to(m)
# 지도 저장
m.save('map_with_circles.html')
m

코드를 입력하세요### 지도시각화
### 구글에서 제공하는 지도맵을 세팅(출력) , 줌인아웃 사이트, 중심좌표
### 내가 표시하고자 하는 위경도값을 그 구글맵지도에 추가한다.
#!pip install folium
import folium
# 위도, 경도 <지도 중심 좌표> -> 이 위도와 경도를 중심으로 지도가 표시됨 -> 줌아웃
latitude = 37.48283
longitude = 126.8830
# 지도 생성
m = folium.Map(location=[latitude, longitude], #지도의 중심 좌표
zoom_start=10, #초기 확대 수준
width=750, #너비 픽셀
height=500 #높이 픽셀
)
# 반드시 tmp 변수를 작성해야 하는것은 아님. df 자료로 작업해 됨.
# 주어진 DataFrame에서 특정 열을 선택하여 새로운 DataFrame을 만듦
tmp=df[['CODE_VALUE','XCNTS','YDNTS','LBRRY_NAME','OP_TIME']]
# LBRRY_NAME에 따른 색상 매핑을 위한 딕셔너리
color_map = {
"강남구": "blue",
"강동구": "green",
"강서구": "red",
# 추가적인 라이브러리 이름과 색상을 추가하세요
}
# 지역별 색상을 다르게 하기 위하여서 CODE_VALUE값 추가함.
# zip 함수를 사용하여 각 열을 동시에 반복
for gu, lat, lon, name, time in zip(tmp['CODE_VALUE'],tmp['XCNTS'], tmp['YDNTS'],tmp['LBRRY_NAME'],tmp['OP_TIME']):
pop=name+time
color = color_map.get(gu) #코드와 색상을 매핑
folium.Marker([lat, lon], #마커 생성
popup=pop,
icon=folium.Icon(icon_color=color, icon_size=(20,20)) # gpt 검색 , 파이썬 지도 차트 아이콘 크기
).add_to(m) #지도에 추가
m

코드를 입력하세요### 지도시각화
### 구글에서 제공하는 지도맵을 세팅(출력) , 줌인아웃 사이트, 중심좌표
### 내가 표시하고자 하는 위경도값을 그 구글맵지도에 추가한다.
### 위 지도는 너무 지저분하니까 점으로 표시해보자!
#!pip install folium
import folium
# 위도, 경도
latitude = 37.48283
longitude = 126.8830
# 지도 만들어주기
m = folium.Map(location=[latitude, longitude], #이 위도와 경도를 중심으로
zoom_start=10,
width=750,
height=500
)
# 반드시 tmp 변수를 작성해야 하는것은 아님. df 자료로 작업해 됨.
tmp=df[['CODE_VALUE','XCNTS','YDNTS','LBRRY_NAME','OP_TIME']]
# LBRRY_NAME에 따른 색상 매핑을 위한 딕셔너리
color_map = {
"강남구": "blue",
"강동구": "green",
"강서구": "red",
# 추가적인 라이브러리 이름과 색상을 추가하세요
}
# 지역별 색상을 다르게 하기 위하여서 CODE_VALUE값 추가함.
### folium.CricleMaker를 사용하여 지도의 각 위치에 원형 마커 추
for gu,lat, lon,name,time in zip(tmp['CODE_VALUE'],tmp['XCNTS'], tmp['YDNTS'],tmp['LBRRY_NAME'],tmp['OP_TIME']):
pop=name+time #누르면 이름과 운영시간 뜸
color = color_map.get(gu)
folium.CircleMarker([lat, lon],
popup=pop,
radius=5, # 원의 반지름
color=color,
fill=True,
fill_color=color,
fill_opacity=1 #투명도
).add_to(m) #지도에 저장
m
