data analysis & visualization

동적지도자료 만들기

좌표계 변환 및 다시 불러오기

In [1]:
import shapefile
from json import dumps
import geopandas as gpd
#좌표계 변환
sf=gpd.read_file('/home/ducj/data/ducj/files/json/shp/CTPRVN_201703/TL_SCCO_CTPRVN.shp',encoding='cp949')
sf=sf.to_crs(epsg='4326')
sf.to_file('/home/ducj/data/ducj/files/json/shp/CTPRVN_201703/test.shp',encoding='cp949')

#변환 후 불러오기
reader = shapefile.Reader('/home/ducj/data/ducj/files/json/shp/CTPRVN_201703/test.shp',encoding='cp949')
In [2]:
#shape file 을 json 파일로 변환하기 위한 코드
fields = reader.fields[1:]
field_names = [field[0] for field in fields]
buffer = []
for sr in reader.shapeRecords():
    atr = dict(zip(field_names, sr.record))
    geom = sr.shape.__geo_interface__
    name=sr.record[2]
    buffer.append(dict(type="Feature", \
     properties=atr,id=name,geometry=geom)) 

#json파일로 저장
from json import dumps
geojson = open("/home/ducj/data/ducj/files/json/shp/CTPRVN_201703/pyshp-demo.json", "w")
geojson.write(dumps({"type": "FeatureCollection",\
"features": buffer}, indent=2) + "\n")
geojson.close()

미세먼지 자료 크롤링을 위한 코드

In [4]:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
from time import sleep
import pandas as pd

# create a new chrome session
options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
driver = webdriver.Chrome(chrome_options=options, executable_path="/home/ducj/crawling/chromedriver")
driver.implicitly_wait(3)
driver.maximize_window()
url='https://www.airkorea.or.kr/web/sidoQualityCompare?itemCode=10007&pMENU_NO=101'
driver.get(url)
sleep(0.3)
html = driver.page_source
dfs = pd.read_html(html)
driver.close()
In [6]:
dfs[0]
Out[6]:
Unnamed: 0 서울 부산 대구 인천 광주 대전 울산 경기 강원 충북 충남 전북 전남 세종 경북 경남 제주
0 시간평균 61 41 42 55 31 40 42 66 78 47 49 32 25 51 53 35 27
1 일평균 64 40 43 55 36 42 41 68 79 49 49 34 26 48 51 36 29
2 최고값 87 96 64 73 75 56 70 99 146 73 78 64 50 61 96 66 38
3 최저값 45 27 22 39 27 26 30 42 47 23 19 1 15 40 22 21 18

크롤링으로 생성#54620; 데이터를 필요한 형태로 변환

In [7]:
#데이터 생성
data=pd.DataFrame([dfs[0].transpose()[1::][0].index,dfs[0].transpose()[1::][0]]).transpose()
data=pd.DataFrame({'area':data[0],'dust':data[1]})
#데이터 수치로 변환
data['dust']=data['dust'].astype(float)
data.reset_index(inplace=True,drop=True)
data=data.set_index('area')
print(data.dtypes)
data.head()
dust    float64
dtype: object
Out[7]:
dust
area
서울 61.0
부산 41.0
대구 42.0
인천 55.0
광주 31.0

앞에서 생성한 json 파일 불러와 지역이름을 동일하게 변환

In [9]:
import folium
import json
json = json.load(open("/home/ducj/data/ducj/files/json/shp/CTPRVN_201703/pyshp-demo.json", encoding='utf-8'))

for i in range(17):
    json['features'][i]['id']=data['dust'].index[i]
In [184]:
# for i in range(17):
#     json['features'][i]['properties']['CTP_KOR_NM']=data['dust'].index[i]

지도형식으로 시각화

In [ ]:
map=folium.Map(location=[37.5502, 126.982], tiles='Stamen toner') # 서울시
folium.Choropleth(
    geo_data=json,
    name='choropleth',
    data=data['dust'],
    key_on='feature.id',
    fill_color='YlGn',
    fill_opacity=0.7,
    line_opacity=0.2).add_to(map)

folium.LayerControl().add_to(map)

map.save('/home/ducj/nas/data.html')

크롬 설치하기

https://linuxize.com/post/how-to-install-google-chrome-web-browser-on-ubuntu-18-04/

크롬 버전 체크하기

google-chrome --version


크롬드라이버 설치하기


wget -N http://chromedriver.storage.googleapis.com/해당버전/chromedriver_linux64.zip

unzip chromedriver_linux64.zip

chmod +x chromedriver

sudo mv -f chromedriver /usr/local/share/chromedriver

sudo ln -s /usr/local/share/chromedriver /usr/local/bin/chromedriver

sudo ln -s /usr/local/share/chromedriver /usr/bin/chromedriver


python 실행 후 테스트하기


from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options

from time import sleep

# create a new chrome session
options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
driver = webdriver.Chrome(chrome_options=options, executable_path="/home/ducj/crawling/chromedriver")

driver.implicitly_wait(3)
driver.maximize_window()

# Navigate to the application home page

driver.get("http://www.google.com")

driver.get("https://www.google.co.kr/maps")

sleep(0.05)

search=driver.find_element_by_css_selector('input#searchboxinput.tactile-searchbox-input')

search.clear()

search.send_keys('대구대')

search.send_keys(Keys.ENTER)

driver.current_url

driver.close()

RPubs - statistical hypothesis test


'통계' 카테고리의 다른 글

[SMOTE] 알고리즘  (0) 2021.02.14
기초통계분석  (0) 2019.07.07
감마분포 & 균일분포  (0) 2019.05.29
R에서 일반화 가법모형(설명X)  (0) 2019.04.13

scaling

R/handling2019. 4. 16. 05:37
RPubs - 표준화


'R > handling' 카테고리의 다른 글

expand.grid를 복수로 생성할 때  (0) 2019.05.25
reshape  (0) 2019.04.14
plyr 패키지를 통한 핸들링  (0) 2019.04.12
파일 불러오기  (0) 2019.04.08

RPubs - url을 통한 크롤링(정적 크롤링만 가능)


reshape

R/handling2019. 4. 14. 05:28
RPubs - reshape패키지 활용


'R > handling' 카테고리의 다른 글

expand.grid를 복수로 생성할 때  (0) 2019.05.25
scaling  (0) 2019.04.16
plyr 패키지를 통한 핸들링  (0) 2019.04.12
파일 불러오기  (0) 2019.04.08