๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
TIL๐Ÿ”ฅ/๋ฉ‹์Ÿ์ด์‚ฌ์ž์ฒ˜๋Ÿผ_AI School 5๊ธฐ

[๋ฉ‹์‚ฌ] AI SCHOOL 5๊ธฐ_ Day 11

by hk713 2022. 3. 24.

๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”(Data visualization)

GeoJSON

GeoJSON(์ง€์˜ค์ œ์ด์Šจ)์€ JSON(JavaScript Object Notation)์— ๊ธฐ๋ฐ˜ํ•œ ์ง€๋ฆฌ ๊ณต๊ฐ„ ๋ฐ์ดํ„ฐ ๊ตํ™˜ ํฌ๋งท์ด๋‹ค.

์ง€๋ฆฌ ์ขŒํ‘œ ์ฐธ์กฐ ์‹œ์Šคํ…œ์ธ World Geodetic์„ ์‚ฌ์šฉํ•œ๋‹ค. 

https://geojson.org/

 

GeoJSON

GeoJSON GeoJSON is a format for encoding a variety of geographic data structures. { "type": "Feature", "geometry": { "type": "Point", "coordinates": [125.6, 10.1] }, "properties": { "name": "Dinagat Islands" } } GeoJSON supports the following geometry type

geojson.org

 

pyprnt

pyprnt๋Š” JSON๊ตฌ์กฐ๋ฅผ ๋” ์‰ฝ๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด์ค€๋‹ค.

pip install pyprnt

pip ์„ค์น˜ ํ›„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

- pyprnt ์˜ˆ์‹œ

block = {'index':1,'transaction':[{"sender":"Block_Reward","receipient":"30819f300d06092a864886f70d010101050003818d0030818902818100b9cadf2ca51ca6714cf645f015652a80b9b8fc7e1aafc888334ac6f4f7dc177465595ef713765b027ab97ca7929820d1afb54b64a03cb971f0f46582d5266568f78746d30c4a651b0a0cf14dacdd619f034b330f4c14f253c72496778ff921a1b907aa0e6201369bffb2bd2e0a059d034e711ef004a3100a8998c2786349579f0203010001","value":"5.0"},{"sender":"30819f300d06092a864886f70d010101050003818d0030818902818100b9cadf2ca51ca6714cf645f015652a80b9b8fc7e1aafc888334ac6f4f7dc177465595ef713765b027ab97ca7929820d1afb54b64a03cb971f0f46582d5266568f78746d30c4a651b0a0cf14dacdd619f034b330f4c14f253c72496778ff921a1b907aa0e6201369bffb2bd2e0a059d034e711ef004a3100a8998c2786349579f0203010001","receipient":"30819f300d06092a864886f70d010101050003818d0030818902818100ab65b338fc66d9fc4870b7319f3c21aaf5a0082bce02caf9e3de6dc159c9df91477786028e7380be451d2fb94ed83070e85b588b4ed9d540461d3256bd2aafd3ae0fefa92f82799064414d0ed9e667bc18ad0f48505a2ae9b790a4363fcbef4b526453f91e9572835feabb25aebe2ff38c9abff32b6140c39cb71f8cf0491b850203010001","value":5.0,"signature":"a3da555fe4afe5fc957d466161dbae8b7fbb02c22780cae6fd5a4bbdc3ad7b8753361f74948db662086209c4272ebdadf5b7a14216c18be7f1c3b86ddb3aa43267792f3edc99cc7294fa89bc95f90cfb0ecd2df73b0dde8520499836f86b57af79d837b3c3dc806a37d067ca4a55caee7883bec035fed0b2df40c910cdde99a2"}],'timestamp':'09/23/2019,16:08:19','previous_hash':'This_Is_Genesis_Block','hash':'00e63fb0a8474d78df37e0ba99816d526ba110fc16098ecae65358890975a645','nonce':222}

prnt(block, truncate=True, width=80) # truncate๋Š” ์ถœ๋ ฅ ๊ธธ์ด๊ฐ€ ๋„ˆ๋ฌด ๊ธด ๊ฒฝ์šฐ ...์„ ์“ฐ๋ฉด์„œ ์ž˜๋ผ์ค€๋‹ค

์ถœ๋ ฅ๊ฒฐ๊ณผ

๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค.

https://github.com/kevink1103/pyprnt

 

GitHub - kevink1103/pyprnt: A Modern Python Pretty Printer

A Modern Python Pretty Printer. Contribute to kevink1103/pyprnt development by creating an account on GitHub.

github.com

 

Folium 

folium์€ ํŒŒ์ด์ฌ ์ง€๋„ ์‹œ๊ฐํ™” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค. 

folium์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์„ค์น˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

pip install folium

# ๋˜๋Š”

conda install folium -c conda-forge

๊ธฐ๋ณธ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

folium.Map(location=[์œ„๋„,๊ฒฝ๋„], zoom_start=ํ™•๋Œ€์ •๋„(์ตœ๋Œ€18))

# ์˜ˆ์‹œ์ฝ”๋“œ
map = folium.Map(location=[37.5502, 126.982], zoom_start=11)

์ง€๋„์˜ ๊ธฐ๋ณธ ํ…Œ๋งˆ(tiles)๋Š” OpenStreetMap์ด๋‹ค.

์˜ˆ์‹œ์ฝ”๋“œ ๊ฒฐ๊ณผ (OpenStreeMap ํ…Œ๋งˆ)

tiles ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•ด ํ…Œ๋งˆ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.

์™ผ _ Stamen Toner / ์˜ค _ cartodbpositron

.choropleth() : geo data์— ๋งž์ถฐ ์ง€์—ญ์— ์ƒ‰์„ ๋”ํ•ด์ค€๋‹ค. 

๊ธฐ๋ณธ์ ์œผ๋กœ geo_data, data, columns, fill_color, key_on ์ด๋ผ๋Š” 5๊ฐ€์ง€์˜ ์˜ต์…˜์„ ์ง€์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

# ์˜ˆ์‹œ์ฝ”๋“œ
map = folium.Map(location=[37.5502, 126.982], zoom_start=11, tiles='Stamen Toner')

map.choropleth(geo_data = geo_str, # geo_data ์ „์ฒด๋ฅผ ๋˜์ง. 

               data = gu_df['์‚ด์ธ'], # ์‹œ๊ฐํ™”์˜ ๋Œ€์ƒ์ด ๋  ๋ฐ์ดํ„ฐ
               columns = [gu_df.index, gu_df['์‚ด์ธ']], #15 ์ƒ‰์น ํ•  ์—ด 
               
               fill_color = 'PuRd', 
               key_on = 'feature.id') # GeoJSON ๊ทœ์•ฝ์„ ๋”ฐ๋ฆ„.

์˜ˆ์‹œ ์ฝ”๋“œ ์‹คํ–‰ ๊ฒฐ๊ณผ

folium.CircleMarker() : ๋ฐ์ดํ„ฐ๋ณ„๋กœ radius๋ฅผ ์กฐ์ ˆํ•ด ์›ํ˜• ๋งˆ์ปค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ง€๋„์— ํ‘œ์‹œํ•ด์ค€๋‹ค.

# ์˜ˆ์‹œ ์ฝ”๋“œ
map = folium.Map(location=[37.5502, 126.982], zoom_start=11)

for n in df.index: 
    
    folium.CircleMarker ([df['lat'][n], df['lng'][n]], # ์œ„๋„, ๊ฒฝ๋„
                         
                         radius=df['์ ์ˆ˜'][n]*0.5,   # circle ์˜ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ •.
                         
                         color='#3186cc', fill=True, fill_color='#3186cc').add_to(map)

map

์˜ˆ์‹œ ์ฝ”๋“œ ์‹คํ–‰ ๊ฒฐ๊ณผ

 

HTML ๊ธฐ๋ณธ ๊ฐœ๋…

Tag’s name : html, head, body, h1, p, span, li, ol. ul, div

Tag’s Attribute(name & value) : class, id, style, href, src (ํƒœ๊ทธ ์ด๋ฆ„ ๋’ค์— ๋”ธ๋ ค์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ)

 

<h1~6> : Headline. 1์ด ์ œ์ผ ํฐ ์ œ๋ชฉ.

<p> : Paragraph. ๋ง ๊ทธ๋Œ€๋กœ ๋ฌธ๋‹จ์„ ๋‚˜๋ˆŒ ๋•Œ ์‚ฌ์šฉ.

<b> : bold. ํฌ๊ฒŒ ๊ถŒ์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค. ๋Œ€์‹  <strong> ์„ ๊ถŒ์žฅํ•œ๋‹ค!

<span> : ์ผ๋ถ€๋งŒ ์ฐ์–ด์„œ ๋””์ž์ธ ์ž…ํžˆ๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ.

<div> : ์ •๋ง ๋งŽ์ด ๋ณด์ธ๋‹ค. Division. ๊ทธ๋ƒฅ ์ƒ์ž ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ํŽธํ•˜๋‹ค.

<ul> <ol> : Un-ordered list, Orderd list. ํƒœ๊ทธ ์•ˆ์— <li>ํƒœ๊ทธ๋ฅผ ๋„ฃ์–ด ๋ชฉ๋ก์„ ๋งŒ๋“ ๋‹ค.

                   <ul>์€ ๊ฒ€์€ ์ , <ol>์€ ์ˆซ์ž๋กœ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๊ตฌ๋ถ„๋œ๋‹ค.

<a> : Anchor. ํ•˜์ดํผ๋งํฌ(href, Hyperlink-Reference)๋ฅผ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉ.

<img> : image. ๋‹ซ๋Š”ํƒœ๊ทธ ์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. src(Sorce)๋ฅผ ๋„ฃ์–ด์ค˜์•ผํ•œ๋‹ค.

 

** ์—ฌ๋Ÿฌ ํƒœ๊ทธ๊ฐ€ ๋™์ผํ•œ class๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค!

** ์—ฌ๋Ÿฌ ํƒœ๊ทธ๊ฐ€ ๋™์ผํ•œ ID๋ฅผ ๊ฐ€์งˆ ์ˆœ ์—†๋‹ค!!

 

๋Œ“๊ธ€