기상청 API를 통한 asos 데이터 가져오기
library(RMariaDB)
con <- dbConnect(
drv = RMariaDB::MariaDB(),
username = 'ducj',
password = 'whckdwp1!@',
host = NULL,
port = 3306,
db = 'db'
)
dbListTables(con)
key='IQr2d9Wp84iZd8LWOvB2m3yW969idNg/uQh52nZVitgb6zpiM4h9QvOFD0xe3hko'
library(xml2);library(rvest);library(RCurl);library(XML);library(dplyr);library(rjson)
ASOS_read=function(dateCd='HR',startDt,startHh,endDt,endHh,stnlds,schListCnt,pageIndex,key){
if(dateCd=="HR"){
url=paste0('https://data.kma.go.kr/apiData/getData?type=json&dataCd=ASOS&dateCd=',dateCd,'&startDt=',startDt,'&startHh=',startHh,
'&endDt=',endDt,'&endHh=',endHh,'&stnIds=',stnlds,'&schListCnt=',schListCnt,'&pageIndex=',pageIndex,'&apiKey=',key)}
if(dateCd=='DAY'){
url=paste0('https://data.kma.go.kr/apiData/getData?type=json&dataCd=ASOS&dateCd=',dateCd,'&startDt=',startDt,
'&endDt=',endDt,'&stnIds=',stnlds,'&schListCnt=',schListCnt,'&pageIndex=',pageIndex,'&apiKey=',key)
}
bind_rows(fromJSON(paste0(suppressWarnings(readLines(url,encoding='UTF-8')),collapse = ''))[[4]]$info)
}
library(readr)
Info=read_csv('/home/ducj2/lotto/stnInfo_20191127191218.csv',locale = locale(encoding='cp949'))
colnames(Info)[c(1,2,3,4,6,7,8)]=c('STN_ID','startDate','endDate','stationName','lat','lon','alt')
# dbWriteTable(con, 'ASOSInfo',Info,overwrite=T)
dbListTables(con)
i=102
startDate=as.Date('2018-01-01')
endDate=as.Date('2018-12-31')
ls=list()
for(i in as.character(unique(Info$STN_ID))){
message(i)
try(silent = T,{
temp=ASOS_read(dateCd='DAY',startDt=format(startDate,'%Y%m%d'),startHh = '',
endDt =format(endDate,'%Y%m%d'),endHh='',
stnlds=i,schListCnt = 999,pageIndex = 1,key=key)
})
if(nrow(temp)>0)
if(nrow(Info)>1){
temp_Info=Info[Info$STN_ID==i,]
old=temp_Info[!is.na(temp_Info$endDate),'endDate']
new=temp_Info[is.na(temp_Info$endDate),'startDate']
temp2=rbind(left_join(temp[as.Date(temp$TM)<as.Date(old$endDate),],temp_Info[!is.na(temp_Info$endDate),c(1:4,6:8)],by='STN_ID'),
left_join(temp[as.Date(temp$TM)>as.Date(new$startDate),],temp_Info[is.na(temp_Info$endDate),c(1:4,6:8)],by='STN_ID'))
}else temp2=left_join(temp,Info[Info$STN_ID==i,c(1:4,6:8)],by='STN_ID')
ls[[i]]=temp2
}
# dbWriteTable(con, 'ASOS_Dt',unique(bind_rows(ls)[,-grep('ISCS',colnames(bind_rows(ls)))]), overwrite = TRUE)
query='select * from ASOS_Dt'
colnames(dbGetQuery(con,query))
dbWriteTable(con, 'ASOS_Dt',unique(bind_rows(dbGetQuery(con,query),bind_rows(ls)[,-grep('ISCS',colnames(bind_rows(ls)))])), overwrite = TRUE)
dbWriteTable(con, paste0('ASOS_Dt_',format(Sys.Date(),'%Y%m%d')),left_join(bind_rows(ls),Info2[,c(1:4,6:8)],by='STN_ID'), overwrite = TRUE)
dbListTables(con)
[공간정보오픈플렛폼]위경도 변환, 주소 변환
공간정보 오픈 플랫폼에서 제공하는 위도, 경도를 주소로 변환하는 방법과 주소를 위도, 경도로 바꾸는 방법을 알아보고자 한다.
회원가입을 한 뒤 위와 같이 접속
api key
key=''
#address
add=c('대구대','경주시 성건동')
post=paste0('http://api.vworld.kr/req/address?service=address&request=getCoord&key=',key,
'&address=',add,'&type=road')
CRS 등 &CRS=EPSG:4326 처럼 추가로 입력하면 된다.
iconv는 인코딩을 변경하는 코드이며, URLencode는 URL에 맞게 변환하는 코드이다.
url=sapply((iconv(post, from = "cp949", to = "UTF-8")),URLencode)
library(XML)
library(rjson)
url_query=sapply(url,function(x){readLines(x,encoding='UTF-8')})
data.frame(dplyr::rbind_list(lapply(
sapply(url_query,function(x){paste0(x,collapse = '')}),
function(x)data.frame(fromJSON(x)))))[,20:21]
URL이 여러개 입력될 것을 고려하여 sapply를 사용하였다.
readLines는 URL을 불러오는 코드이며, fromJSON을 통해 api를 리스트형식으로 받아올 수 있다.
위경도를 주소로 변환
lonlat을 '128.3,38.3'처럼 만들어 post에 입력
입력된 URL을 앞에서와 같이 json형식으로 받아옴.
lonlat=data.frame(dplyr::rbind_list(lapply(sapply(url_query,
function(x){paste0(x,collapse = '')}),
function(x)data.frame(fromJSON(x)))))[,20:21]
lonlat=paste0(lonlat[,1],',',lonlat[,2])
post=paste0('http://api.vworld.kr/req/address?service=address&request=getAddress&key=',key,
'&point=',lonlat,'&type=road')
url=sapply(iconv(post, from = "cp949", to = "UTF-8"),URLencode)
library(XML)
library(rjson)
url_query=sapply(url,function(x){readLines(x,encoding='UTF-8')})
# url_query <- readLines(url,encoding='UTF-8')
data.frame(dplyr::rbind_list(lapply(sapply(url_query,function(x){paste0(x,collapse = '')}),
function(x)data.frame(fromJSON(x)))))
'R' 카테고리의 다른 글
[ggplot2] 시각화 정리 (0) | 2019.12.08 |
---|---|
[R][SQL] RMariaDB 외부 접속 설정하기 (0) | 2019.11.29 |
[ggmap] pie chart 그리기 예제 (0) | 2019.11.26 |
ddply와 setDT 비교 (0) | 2019.11.11 |
[공공데이터 포털] 버스 정류소 API 가져오기 (0) | 2019.11.02 |
[ggmap] pie chart 그리기 예제
library(ggplot2)
library(scatterpie)
library(maps)
set.seed(123)
long <- rnorm(50, sd=100)
lat <- rnorm(50, sd=50)
d <- data.frame(long=long, lat=lat)
d <- with(d, d[abs(long) < 150 & abs(lat) < 70,])
n <- nrow(d)
d$region <- factor(1:n)
d$A <- abs(rnorm(n, sd=1))
d$B <- abs(rnorm(n, sd=2))
d$C <- abs(rnorm(n, sd=3))
d$D <- abs(rnorm(n, sd=4))
d$radius <- 6 * abs(rnorm(n))
head(d)
world <- map_data('world')
p <- ggplot(world, aes(long, lat)) +
geom_map(map=world, aes(map_id=region), fill=NA, color="black") +
coord_quickmap()
p + geom_scatterpie(aes(x=long, y=lat, group=region, r=radius),
data=d, cols=LETTERS[1:4], color=NA, alpha=.8) +
geom_scatterpie_legend(d$radius, x=-160, y=-55)
'R' 카테고리의 다른 글
[R][SQL] RMariaDB 외부 접속 설정하기 (0) | 2019.11.29 |
---|---|
[공간정보오픈플렛폼]위경도 변환, 주소 변환 (0) | 2019.11.27 |
ddply와 setDT 비교 (0) | 2019.11.11 |
[공공데이터 포털] 버스 정류소 API 가져오기 (0) | 2019.11.02 |
숫자가 너무커서 제대로 안불러와질 때 (0) | 2019.09.16 |
GPU 메모리 조절 방법
먼저 python에서
tf.GPUOptions(per_process_gpu_memory_fraction=0.333)
sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))
을 활용하면 메모리를 제한 할 수 있다.
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
session = tf.Session(config=config, ...)
을 활용하면 탄력적으로 메모리를 활용한다.
이제 R에서
gpu_options <- tf$GPUOptions(per_process_gpu_memory_fraction = 0.333)
config <- tf$ConfigProto(gpu_options = gpu_options)
config=tf$ConfigProto()
tf$Session(config=config)
gpu_options <- tf$GPUOptions(allow_growth = TRUE)
config <- tf$ConfigProto(gpu_options = gpu_options)
k_set_session(tf$Session(config = config))
을 활용하면 탄력적으로 메모리를 활용한다.
'딥러닝' 카테고리의 다른 글
전이학습(Transfer Learning) (0) | 2021.05.25 |
---|---|
기울기 소실 문제와 ResNet (0) | 2021.05.25 |
순환신경망(1/3) (0) | 2021.04.11 |
tensorboard 외부접속 (0) | 2020.11.27 |
CNN channel 1개와 3개의 성능비교(cats and dogs) (0) | 2019.06.18 |
[나라장터] 크롤링
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
import pandas as pd
import datetime
import time
import os
times=20
while True:
if(str(datetime.datetime.now())[11:13]=='10'):
times=20
print(times)
if(not(str(datetime.datetime.now())[0:10].replace('-','')+'.csv' in os.listdir('G:/내 드라이브'))):
times=50
print(times)
driver=webdriver.Chrome('c:/selenium/chromedriver')
results=[]
querylist=['홈페이지','플랫폼','포털','시스템','구축','빅데이터','산학협력','산학포털','LINC','업무지원','평생교육','솔루션']
querylist2=['중앙신체검사소','한국감정원','한국교육학술정보원','한국산업단지공단','한국사학진흥재단','한국산업기술평가관리원','한국가스공사','신용보증기금','중앙119구조본부','한국정보화진흥원','중앙교육연수원','한국장학재단','대구경북첨단의료산업진흥재단','의료기술시험훈련원','한국뇌연구원','한의기술응용센터','한국도로공사','한국건설관리공사','교통안전공단','국립농산물품질관리원','농림축산검역본부','국립종자원','한국전력기술','대한법률구조공단','우정사업조달사무소','기상통신소','조달품질원','한국법무보호복지공단','에너지경제연구원','근로복지공단','노동부고객상담센터','한국산업인력공단','한국산업안전보건공단','국립재난안전연구원','한국동서발전','한국석유공사','한국에너지공단','한국토지주택공사','주택관리공단','한국시설안전공단','중소기업진흥공단','한국산업기술시험원','한국세라믹기술원','한국남동발전','한국승강기안전관리원','국방기술품질원','중앙관세분석소','한국저작권위원회','대구광역시','대구광역시교육청','대구광역시교육연구정보원','경상북도교육청','경상북도교육연구원','경상북도교육정보센터','국립대구과학관']
n=len(querylist)*len(querylist2)
t=0
try:
for query in querylist:
for query2 in querylist2:
t=t+1
driver.get('http://www.g2b.go.kr:8101/ep/tbid/tbidFwd.do')
# 업무 종류 체크
# task_dict = {'용역': 'taskClCds5', '민간': 'taskClCds20', '기타': 'taskClCds4'}
# for task in task_dict.values():
# checkbox = driver.find_element_by_id(task)
# checkbox.click()
instNm=driver.find_element_by_id('instNm')
instNm.clear()
instNm.send_keys(query2)
instNm.send_keys(Keys.RETURN)
# 입찰정보 검색 페이지로 이동
# 검색어
# id값이 bidNm인 태그 가져오기
bidNm = driver.find_element_by_id('bidNm')
# 내용을 삭제 (버릇처럼 사용할 것!)
bidNm.clear()
# 검색어 입력후 엔터
bidNm.send_keys(query)
bidNm.send_keys(Keys.RETURN)
# 검색 조건 체크
option_dict = {'검색기간 1달': 'setMonth1_1', '입찰마감건 제외': 'exceptEnd'}
for option in option_dict.values():
checkbox = driver.find_element_by_id(option)
checkbox.click()
# 목록수 100건 선택 (드롭다운)
recordcountperpage = driver.find_element_by_name('recordCountPerPage')
selector = Select(recordcountperpage)
selector.select_by_value('100')
# 검색 버튼 클릭
search_button = driver.find_element_by_class_name('btn_mdl')
search_button.click()
# 검색 결과 확인
elem = driver.find_element_by_class_name('results')
div_list = elem.find_elements_by_tag_name('div')
# 검색 결과 모두 긁어서 리스트로 저장
#results.append(query)
#if len(div_list)!=0:
# results.append(query)
for div in div_list:
results.append(div.text)
a_tags = div.find_elements_by_tag_name('a')
if a_tags:
for a_tag in a_tags:
link = a_tag.get_attribute('href')
results.append(link)
# 검색결과 모음 리스트를 12개씩 분할하여 새로운 리스트로 저장
#result = [results[i * 13:(i + 1) * 13] for i in range((len(results) + 13 - 1) // 13 )]
result = [results[i * 12:(i + 1) * 12] for i in range((len(results) + 12 - 1) // 12 )]
# 결과 출력
print(round(t/n*100,2))
#print(result)
except Exception as e:
# 위 코드에서 에러가 발생한 경우 출력
print(e)
finally:
# 에러와 관계없이 실행되고, 크롬 드라이버를 종료
driver.quit()
my_df=pd.DataFrame(result)
my_df.to_csv('G:/내 드라이브/test.csv',index=False,header=False,encoding='cp949')
my_df.to_csv('G:/내 드라이브/'+str(datetime.datetime.now())[0:10].replace('-','')+'.csv',index=False,header=False,encoding='cp949')
time.sleep(60*times)
'python > crawling' 카테고리의 다른 글
[Selenium] 기상자료 크롤링 (1) | 2021.04.03 |
---|---|
크롤링과 python (0) | 2021.04.03 |
python selenium 자주쓴거 정리 (0) | 2020.03.23 |
나라장터 open api crawling (0) | 2020.03.01 |
selenium 사용해서 위경도 가져오기 (0) | 2019.03.20 |
ddply와 setDT 비교
속도로 보았을 때 ddply 보다 setDT의 속도가 월등히 빠르다. 이에 따라 예제 코드를 아래와 같이 제시한다.
library(plyr)
data(iris)
temp=ddply(iris,.(Species),summarise,mean=mean(Sepal.Length))
temp=data.table::setDT(iris)[,.(mean=mean(Sepal.Length)),'Species']library(plyr)
data(iris)
temp=ddply(iris,.(Species),summarise,mean=mean(Sepal.Length))
temp=data.table::setDT(iris)[,.(mean=mean(Sepal.Length)),'Species']
temp2=reshape2::melt(temp,id='Species')
library(ggplot2)
ggplot(temp2, aes(Species, value, fill=factor(Species)))+
geom_bar(stat='identity', position = 'dodge')+coord_flip()
'R' 카테고리의 다른 글
[공간정보오픈플렛폼]위경도 변환, 주소 변환 (0) | 2019.11.27 |
---|---|
[ggmap] pie chart 그리기 예제 (0) | 2019.11.26 |
[공공데이터 포털] 버스 정류소 API 가져오기 (0) | 2019.11.02 |
숫자가 너무커서 제대로 안불러와질 때 (0) | 2019.09.16 |
apply 와 sapply의 차이 (0) | 2019.07.15 |