<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Awork Lab!</title>
    <link>https://aworklab.tistory.com/</link>
    <description>Systemic Workspace</description>
    <language>ko</language>
    <pubDate>Sun, 16 Aug 2026 19:54:51 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>awork.net</managingEditor>
    <item>
      <title>색상 조합 빠르게 만들어 내는 사이트</title>
      <link>https://aworklab.tistory.com/35</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;palleton.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nQfeS/btqwARZuWeM/1Lb3SbDX1m5OwRxHy901MK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nQfeS/btqwARZuWeM/1Lb3SbDX1m5OwRxHy901MK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nQfeS/btqwARZuWeM/1Lb3SbDX1m5OwRxHy901MK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnQfeS%2FbtqwARZuWeM%2F1Lb3SbDX1m5OwRxHy901MK%2Fimg.png&quot; data-filename=&quot;palleton.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;figure id=&quot;og_1562495587021&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;http://paletton.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-original-url=&quot;http://paletton.com&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Paletton - The Color Scheme Designer&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Paletton, the color scheme designer In love with colors, since 2002. Paletton application Colorpedia About Paletton About Paletton Paletton.com is a designer color tool designed for creating color combinations that work together well. It uses classical col&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;paletton.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;요즘 PPT 제작 시 강조되는 것이 색상 조합이다. 매번 적은 종류의 색상을 편안하게 조합하는 법을 외워서 쓰는 것이 쉬운 일이 아니다. Paletton이라는 사이트는 이러한 고민을 한 방에 해결해 준다&lt;/p&gt;
&lt;p&gt;적당히 원하는 색상을 고르면 색상 조합을 만들어 주며, 심지어 웹이나 그래픽 상에 어떻게 적용되는지 미리 볼 수도 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;650&quot; height=&quot;466&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGkIsl/btqwy1oF1Wl/GdSgXJtdi8ZLtKbY9eHkmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGkIsl/btqwy1oF1Wl/GdSgXJtdi8ZLtKbY9eHkmk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGkIsl/btqwy1oF1Wl/GdSgXJtdi8ZLtKbY9eHkmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGkIsl%2Fbtqwy1oF1Wl%2FGdSgXJtdi8ZLtKbY9eHkmk%2Fimg.png&quot; width=&quot;650&quot; height=&quot;466&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;646&quot; height=&quot;430&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ObXsd/btqwAlUtCEP/eUncR2Tz9EejWEES2TTHl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ObXsd/btqwAlUtCEP/eUncR2Tz9EejWEES2TTHl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ObXsd/btqwAlUtCEP/eUncR2Tz9EejWEES2TTHl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FObXsd%2FbtqwAlUtCEP%2FeUncR2Tz9EejWEES2TTHl0%2Fimg.png&quot; width=&quot;646&quot; height=&quot;430&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;644&quot; height=&quot;431&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vOWq8/btqwCq0VfaD/nyHtYBzpiIY2gWiHE1vwM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vOWq8/btqwCq0VfaD/nyHtYBzpiIY2gWiHE1vwM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vOWq8/btqwCq0VfaD/nyHtYBzpiIY2gWiHE1vwM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvOWq8%2FbtqwCq0VfaD%2FnyHtYBzpiIY2gWiHE1vwM0%2Fimg.png&quot; width=&quot;644&quot; height=&quot;431&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Etc</category>
      <category>palleton</category>
      <category>색상</category>
      <category>색상조합</category>
      <author>awork.net</author>
      <guid isPermaLink="true">https://aworklab.tistory.com/35</guid>
      <comments>https://aworklab.tistory.com/35#entry35comment</comments>
      <pubDate>Sun, 7 Jul 2019 19:37:51 +0900</pubDate>
    </item>
    <item>
      <title>fs 패키지로 여러 파일 한 번에 병합하기</title>
      <link>https://aworklab.tistory.com/33</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;fs.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cLL3T1/btqvWpXuKEs/SwnswIsiGWgLxwD6HcSGm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cLL3T1/btqvWpXuKEs/SwnswIsiGWgLxwD6HcSGm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cLL3T1/btqvWpXuKEs/SwnswIsiGWgLxwD6HcSGm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcLL3T1%2FbtqvWpXuKEs%2FSwnswIsiGWgLxwD6HcSGm1%2Fimg.png&quot; data-filename=&quot;fs.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;동일한 포맷의 여러개 파일을 동시에 불러온 다음, 일일히 bind_rows (혹은 rbind)를 해야할 때가 있다. for 반복문으로 붙이는 경우가 종종 있는데, fs 패키지를 사용할 경우 한 번에 간단히 끝낼 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1560179155068&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;https://www.bigdatahub.co.kr/product/list.do?menu_id=1000150&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-original-url=&quot;https://www.bigdatahub.co.kr/product/list.do?menu_id=1000150&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;전시 카테고리&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;총 0 개의 데이터가 있습니다. &lt;!-- ※ 데이터 검색결과 0 건 --&gt;&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.bigdatahub.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;SK 데이터 허브에서, 패밀리 레스토랑 이용에 대한 월간 데이터를 병합하는 상황을 가정해보자. 2018년 1월부터 2019년 4월의 데이터를 CSV 형태로 다운받아 한 폴더에 넣어둔다.&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;동일한 형태로 정리가 잘되어 있기 때문에, 데이터 프레임 형식을 손볼 필요는 없다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;513&quot; height=&quot;313&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nShVb/btqvW1u6SJq/eOqVxgrcXvq6Rd2ep6WOLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nShVb/btqvW1u6SJq/eOqVxgrcXvq6Rd2ep6WOLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nShVb/btqvW1u6SJq/eOqVxgrcXvq6Rd2ep6WOLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnShVb%2FbtqvW1u6SJq%2FeOqVxgrcXvq6Rd2ep6WOLk%2Fimg.png&quot; width=&quot;513&quot; height=&quot;313&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4&gt;&lt;b&gt;for 문을 사용하는 경우&lt;/b&gt;&lt;/h4&gt;
&lt;pre class=&quot;brush:python vim&quot;&gt;&lt;code&gt;library(tidyverse)
dir = 'family_restaurant'
files.list = paste0(dir,'/',list.files('family_restaurant'))
files.list

merged = NULL
for(i in seq(length(files.list))){
  temp = read_csv(files.list[i] %&amp;gt;% toString())
  merged = bind_rows(merged, temp)
}

merged %&amp;gt;% View()

head = c('type', 'year', 'month', 'day', 'days', 'state', 'county', 'town', 'sex', 'ages', 'ratio')
names(merged) = head
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;821&quot; height=&quot;254&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvHed2/btqvX0vEHYI/OzlYYI64kcBhsNO2ZsjqKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvHed2/btqvX0vEHYI/OzlYYI64kcBhsNO2ZsjqKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvHed2/btqvX0vEHYI/OzlYYI64kcBhsNO2ZsjqKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvHed2%2FbtqvX0vEHYI%2FOzlYYI64kcBhsNO2ZsjqKK%2Fimg.png&quot; width=&quot;821&quot; height=&quot;254&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;성공적으로 병합이 되었다.&lt;/p&gt;
&lt;h4&gt;&lt;b&gt;fs 패키지를 사용하는 경우&amp;nbsp;&lt;/b&gt;&lt;/h4&gt;
&lt;pre class=&quot;brush:python&quot;&gt;&lt;code&gt;library(tidyverse)
library(fs)
list = dir_info(&quot;family_restaurant&quot;,resurcive = T) %&amp;gt;% 
  filter(str_detect(path, '\\.csv$') == T)
list
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;796&quot; height=&quot;281&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXhJd9/btqvX0oTa5z/GHtGV7gTk2oqgXxyj4QKTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXhJd9/btqvX0oTa5z/GHtGV7gTk2oqgXxyj4QKTk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXhJd9/btqvX0oTa5z/GHtGV7gTk2oqgXxyj4QKTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXhJd9%2FbtqvX0oTa5z%2FGHtGV7gTk2oqgXxyj4QKTk%2Fimg.png&quot; width=&quot;796&quot; height=&quot;281&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;dir_info는 지정한 경로에 있는 파일들의 정보를 표시한다&lt;/p&gt;
&lt;pre class=&quot;brush:python ini&quot;&gt;&lt;code&gt;list2 = dir_ls('family_restaurant', glob = '*.csv')
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;807&quot; height=&quot;196&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SnKU0/btqvZhjaZo0/T2bqjWycK6U3DsCN8V0KC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SnKU0/btqvZhjaZo0/T2bqjWycK6U3DsCN8V0KC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SnKU0/btqvZhjaZo0/T2bqjWycK6U3DsCN8V0KC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSnKU0%2FbtqvZhjaZo0%2FT2bqjWycK6U3DsCN8V0KC1%2Fimg.png&quot; width=&quot;807&quot; height=&quot;196&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;dir_ls는 list.file과 비슷한 기능을 한다. 세부 명령어에 glob를 쓰면 *같은 와일드 카드를 사용할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;brush:python erlang-repl&quot;&gt;&lt;code&gt;list2 = dir_ls('family_restaurant', glob = '*.csv')

merged2 = list2 %&amp;gt;% 
  map_df(read_csv, .id = 'file', col_types = cols())
head2 = c('file','type', 'year', 'month', 'day', 'days', 'state', 'county', 'town', 'sex', 'ages', 'ratio')
names(merged2) = head2
merged2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;795&quot; height=&quot;228&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dNGQnN/btqvWSZuYys/34Ne0lm07JBPSIgHeDN8k0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dNGQnN/btqvWSZuYys/34Ne0lm07JBPSIgHeDN8k0/img.png&quot; data-alt=&quot;ㅜ&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dNGQnN/btqvWSZuYys/34Ne0lm07JBPSIgHeDN8k0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdNGQnN%2FbtqvWSZuYys%2F34Ne0lm07JBPSIgHeDN8k0%2Fimg.png&quot; width=&quot;795&quot; height=&quot;228&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ㅜ&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;훨씬 더 간편하게 파일이 병합된 것을 알 수 있다.&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;fs패키지의 보다 자세한 명령어는 아래 페이지에서 찾아볼 수 있다.&lt;/p&gt;
&lt;figure id=&quot;og_1560180301918&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;https://fs.r-lib.org&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-original-url=&quot;https://fs.r-lib.org&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Cross-Platform File System Operations Based on 'libuv'&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;A cross-platform interface to file system operations, built on top of the 'libuv' C library.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;fs.r-lib.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>FS</category>
      <category>R</category>
      <category>파일 병합</category>
      <author>awork.net</author>
      <guid isPermaLink="true">https://aworklab.tistory.com/33</guid>
      <comments>https://aworklab.tistory.com/33#entry33comment</comments>
      <pubDate>Tue, 11 Jun 2019 00:24:00 +0900</pubDate>
    </item>
    <item>
      <title>태스크 스케쥴러로 자동으로 R 스크립트 실행하기</title>
      <link>https://aworklab.tistory.com/32</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스케쥴러.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccFibC/btqvW02LQoK/d0vclKfHB6nVuGoWuWlb2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccFibC/btqvW02LQoK/d0vclKfHB6nVuGoWuWlb2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccFibC/btqvW02LQoK/d0vclKfHB6nVuGoWuWlb2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccFibC%2FbtqvW02LQoK%2Fd0vclKfHB6nVuGoWuWlb2k%2Fimg.png&quot; data-filename=&quot;스케쥴러.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;지난 포스트에 R에서 텔레그램봇으로 메세지를 보내는 방법을 업데이트 했었다.&lt;/p&gt;
&lt;p&gt;만약, 일정 시간마다 내가 작업한 R 스크립트를 윈도우에서 자동으로 실행하고 그 결과를 텔레그램으로 보낼 수 있다면 실시간으로 상황을 확인할 수 있을 것이다.&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1560000731381&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;https://aworklab.tistory.com/29&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-original-url=&quot;https://aworklab.tistory.com/29&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bv1Azp/hyBvr1MosZ/x5DlBwfpIkKKoKjkRv7Xzk/img.png?width=700&amp;amp;height=400&amp;amp;face=0_0_700_400,https://scrap.kakaocdn.net/dn/cyeM9Q/hyBwS4wEjY/jVXKAxkXdliC9BgNGFiDZK/img.png?width=700&amp;amp;height=400&amp;amp;face=0_0_700_400,https://scrap.kakaocdn.net/dn/5t2VM/hyBvf1mXu9/VTgb8s7mSBxHM6b6ndBdBK/img.png?width=789&amp;amp;height=619&amp;amp;face=0_0_789_619');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;R로 텔레그램봇에 메세지 보내기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;텔레그램봇을 활용하면, R에서 수집한 정보를 외부에서 메신저를 통해서 확인할 수 있다. R 스크립트를 일정 시간마다 정기적으로 돌리면서 결과값을 보내거나, 혹은 특정 조건이 발견되었을 때 경고 메세지를 발..&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;aworklab.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;이 번에 작업해볼 내용은 아래와 같다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1. 네이버 야구 메인 페이지에 있는 뉴스 20개의 URL을 수집한다&lt;/p&gt;
&lt;p&gt;2. URL을 텔레그램봇으로 자동 전송 한다&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;brush:python&quot;&gt;&lt;code&gt;library(tidyverse)
library(telegram.bot)
library(rvest)

# scarpping naver basellball news 20

url = 'https://sports.news.naver.com/kbaseball/index.nhn'
parsed = read_html(url)

url = parsed %&amp;gt;%
  html_node('div.home_news') %&amp;gt;% 
  html_nodes('ul') %&amp;gt;% 
  html_nodes('a') %&amp;gt;% 
  html_attr('href') %&amp;gt;% 
  as.tibble %&amp;gt;% 
  mutate(url = paste0('https://sports.news.naver.com', value)) %&amp;gt;% 
  select(-value)

# send 20 news url to telegram

bot = Bot(token = 'API 토큰을 여기 입력')
print(bot$getMe())
updates = bot$getUpdates()
updates[[1]]$message$chat

x = url[1,1] %&amp;gt;% toString()

chat_id = updates[[1]]$message$chat$id
bot$sendMessage(chat_id = chat_id, text = 'hello')

for(i in seq(nrow(url))){
  sender = url[i,1] %&amp;gt;% toString()
  bot$sendMessage(chat_id = chat_id, text = sender)
}



&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;697&quot; height=&quot;253&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cR58xP/btqvVEzPsR3/nTReZWHg3FMLVASXJZCx6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cR58xP/btqvVEzPsR3/nTReZWHg3FMLVASXJZCx6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cR58xP/btqvVEzPsR3/nTReZWHg3FMLVASXJZCx6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcR58xP%2FbtqvVEzPsR3%2FnTReZWHg3FMLVASXJZCx6K%2Fimg.png&quot; width=&quot;697&quot; height=&quot;253&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이 파일을 'r_schedule.R'로 저장한 후 윈도우즈 태스크 스케쥴에 등록해 보자&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;brush:python livecodeserver&quot;&gt;&lt;code&gt;library(taskscheduleR)
setwd(&quot;D:/r_study&quot;)
telegram.schedule = file.path('D:/r_study/r_schedule.R')

## 지금으로 부터 10초 뒤 실행하고 10분 마다 재 실행
taskscheduler_create(taskname = 'send_telegram', rscript = telegram.schedule,
                     schedule = 'MINUTE',
                     starttime = format(Sys.time() + 10, '%H:%M'),
                     startdate = format(Sys.time(), '%Y/%m/%d'),
                     modifier = 10)

taskscheduler_delete('send_telegram') # 스케쥴 삭제
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;673&quot; height=&quot;130&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ndFsf/btqvUQAxypO/rydFJamIuMLux2jgEkbke0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ndFsf/btqvUQAxypO/rydFJamIuMLux2jgEkbke0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ndFsf/btqvUQAxypO/rydFJamIuMLux2jgEkbke0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FndFsf%2FbtqvUQAxypO%2FrydFJamIuMLux2jgEkbke0%2Fimg.png&quot; width=&quot;673&quot; height=&quot;130&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;716&quot; height=&quot;228&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dSGlMC/btqvTVI1yOK/M31MG04v2i4b6w79VdhL6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dSGlMC/btqvTVI1yOK/M31MG04v2i4b6w79VdhL6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dSGlMC/btqvTVI1yOK/M31MG04v2i4b6w79VdhL6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdSGlMC%2FbtqvTVI1yOK%2FM31MG04v2i4b6w79VdhL6k%2Fimg.png&quot; width=&quot;716&quot; height=&quot;228&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAssHu/btqvWqnkSAA/rVIAme4QOR0PkjO8IlKse0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAssHu/btqvWqnkSAA/rVIAme4QOR0PkjO8IlKse0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAssHu/btqvWqnkSAA/rVIAme4QOR0PkjO8IlKse0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAssHu%2FbtqvWqnkSAA%2FrVIAme4QOR0PkjO8IlKse0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>R</category>
      <category>telegram</category>
      <category>봇</category>
      <category>사무자동화</category>
      <category>스케쥴</category>
      <category>자동화</category>
      <category>태스크 스케쥴</category>
      <category>텔레그램</category>
      <author>awork.net</author>
      <guid isPermaLink="true">https://aworklab.tistory.com/32</guid>
      <comments>https://aworklab.tistory.com/32#entry32comment</comments>
      <pubDate>Sat, 8 Jun 2019 22:48:15 +0900</pubDate>
    </item>
    <item>
      <title>R에서 윈도우 폴더와 파일 다루기</title>
      <link>https://aworklab.tistory.com/31</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;윈도우.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HgzC2/btqvTGrNeyE/t0IB8zs62DGk7XIJEWnlq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HgzC2/btqvTGrNeyE/t0IB8zs62DGk7XIJEWnlq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HgzC2/btqvTGrNeyE/t0IB8zs62DGk7XIJEWnlq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHgzC2%2FbtqvTGrNeyE%2Ft0IB8zs62DGk7XIJEWnlq0%2Fimg.png&quot; data-filename=&quot;윈도우.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4&gt;&lt;b&gt;현재 작업 폴더 정보와 작업 폴더 지정&lt;/b&gt;&lt;/h4&gt;
&lt;pre class=&quot;brush:python vala&quot;&gt;&lt;code&gt;# get current working directory
getwd()
# set working directory
setwd(&quot;D:/r_study&quot;)

&amp;gt; getwd()
[1] &quot;D:/r_study&quot;
&amp;gt; # set working directory
&amp;gt; setwd(&quot;D:/r_study&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;&lt;b&gt;폴더&lt;/b&gt;&amp;nbsp;&lt;/h4&gt;
&lt;pre class=&quot;brush:python livecodeserver&quot;&gt;&lt;code&gt;dir.create(&quot;new_folder&quot;) # 폴더 생성
unlink('new_folder', recursive = T) # 폴더 제거
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGzaCA/btqvUPIkhzS/sCZsntDq7igNzCUEhTklr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGzaCA/btqvUPIkhzS/sCZsntDq7igNzCUEhTklr0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGzaCA/btqvUPIkhzS/sCZsntDq7igNzCUEhTklr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGzaCA%2FbtqvUPIkhzS%2FsCZsntDq7igNzCUEhTklr0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4&gt;&lt;b&gt;파일 다루기&lt;/b&gt;&lt;/h4&gt;
&lt;pre class=&quot;brush:python livecodeserver&quot;&gt;&lt;code&gt;
file.create('hey.txt') # 파일 생성
file.remove('hey.txt') # 파일 제거

file.create(paste0('file',1:100,'txt')) # 연속 파일 생성
file.remove(paste0('file', 1:100, 'txt')) # 연속 파일 제거

file.copy('CALL_RENT_04MONTH.csv', 'new_folder') # 파일 복사

shell.exec('CALL_RENT_04MONTH.csv') # 파일 실행
file.show('CALL_RENT_04MONTH.csv') # 파일 실행
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;&lt;b&gt;파일 정보&lt;/b&gt;&lt;/h4&gt;
&lt;pre class=&quot;brush:python livecodeserver&quot;&gt;&lt;code&gt;
list.files()
list.files(recursive = T)
list.files(recursive = T, full.names = T) # 파일 리스트

ss = fileSnapshot() # 파일 스냅샷
&amp;gt; ss
File snapshot:
 path = D:\r_study
 timestamp = 
 file.info = TRUE
 md5sum = FALSE
 digest = NULL
 full.names = FALSE
 args = list()
 3 files recorded.

ss$info # 파일정보 
&amp;gt; ss$info
                         size isdir mode               mtime               ctime               atime exe
CALL_RENT_04MONTH.csv 3449348 FALSE  666 2019-06-08 11:25:36 2019-06-08 11:22:52 2019-06-08 11:25:35  no
r_schedule.log           2244 FALSE  666 2019-06-08 21:44:03 2019-06-08 21:23:00 2019-06-08 21:23:00  no
r_schedule.R              289 FALSE  666 2019-06-08 20:06:30 2019-06-08 20:06:30 2019-06-08 20:06:30  no

file.info('CALL_RENT_04MONTH.csv') # 파일 정보
&amp;gt; file.info('CALL_RENT_04MONTH.csv')
                         size isdir mode               mtime               ctime               atime exe
CALL_RENT_04MONTH.csv 3449348 FALSE  666 2019-06-08 11:25:36 2019-06-08 11:22:52 2019-06-08 11:25:35  no
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PnM96/btqvUzMvG9i/z0Tkssry4kJ1G7cMCZYWGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PnM96/btqvUzMvG9i/z0Tkssry4kJ1G7cMCZYWGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PnM96/btqvUzMvG9i/z0Tkssry4kJ1G7cMCZYWGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPnM96%2FbtqvUzMvG9i%2Fz0Tkssry4kJ1G7cMCZYWGk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>R</category>
      <category>실행</category>
      <category>윈도우즈</category>
      <category>파일</category>
      <category>폴더</category>
      <author>awork.net</author>
      <guid isPermaLink="true">https://aworklab.tistory.com/31</guid>
      <comments>https://aworklab.tistory.com/31#entry31comment</comments>
      <pubDate>Sat, 8 Jun 2019 22:10:11 +0900</pubDate>
    </item>
    <item>
      <title>전국 렌터카 업종 통화량 위치 표시</title>
      <link>https://aworklab.tistory.com/30</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;렌터카.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k0Kau/btqvUymtz6i/9AuTWuxbXLfNKYdCfxQs10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k0Kau/btqvUymtz6i/9AuTWuxbXLfNKYdCfxQs10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k0Kau/btqvUymtz6i/9AuTWuxbXLfNKYdCfxQs10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk0Kau%2FbtqvUymtz6i%2F9AuTWuxbXLfNKYdCfxQs10%2Fimg.png&quot; data-filename=&quot;렌터카.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;figure id=&quot;og_1559990239070&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;https://www.bigdatahub.co.kr/product/view.do?pid=1002093&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-original-url=&quot;https://www.bigdatahub.co.kr/product/view.do?pid=1002093&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;데이터 기본 설명&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Q&amp;amp;A Data에 대한 질문사항은 이메일로 문의해주세요. ※ 데이터 문의 이메일 : bigdatahub@sk.com&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.bigdatahub.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;SK Datahub에서 제공하는 19년&amp;nbsp;4월&amp;nbsp;전국&amp;nbsp;렌터카&amp;nbsp;업종&amp;nbsp;이용&amp;nbsp;통화량 데이터를 활용하여 지역 및 크기를 표시해보자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;736&quot; height=&quot;386&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1j2xa/btqvTVoFEsA/knxepkwYq0Dszx9yeOu5CK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1j2xa/btqvTVoFEsA/knxepkwYq0Dszx9yeOu5CK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1j2xa/btqvTVoFEsA/knxepkwYq0Dszx9yeOu5CK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1j2xa%2FbtqvTVoFEsA%2FknxepkwYq0Dszx9yeOu5CK%2Fimg.png&quot; width=&quot;736&quot; height=&quot;386&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;지역 정보는 3가지로 이루어져 있다 [시도] - [군구] - [동면읍리]&amp;nbsp;&lt;/p&gt;
&lt;p&gt;일단 시도와 군구 두 가지만 합하여 처리해보자&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;brush:python tap&quot;&gt;&lt;code&gt;library(tidyverse)
library(lubridate)
library(ggmap)

x = read_csv('CALL_RENT_04MONTH.csv')
x$date = ymd(x$date)

focus = x %&amp;gt;% 
  group_by(city, county) %&amp;gt;% 
  summarise(n= n()) %&amp;gt;% 
  na.omit() %&amp;gt;% 
  arrange(desc(n)) %&amp;gt;% 
  mutate(address = paste0(city,',',county)) %&amp;gt;% 
  select(1:2,4,3)
focus

&amp;gt; focus
# A tibble: 250 x 4
# Groups:   city [17]
   city       county        address                  n
                                  
 1 제주도     제주시        제주도,제주시         1798
 2 제주도     서귀포시      제주도,서귀포시       1327
 3 경기도     평택시        경기도,평택시         1063
 4 경기도     용인시 처인구 경기도,용인시 처인구   993
 5 서울특별시 강서구        서울특별시,강서구      924
 6 서울특별시 강남구        서울특별시,강남구      891
 7 서울특별시 중구          서울특별시,중구        755
 8 대구광역시 달서구        대구광역시,달서구      694
 9 경기도     화성시        경기도,화성시          659
10 서울특별시 송파구        서울특별시,송파구      643
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;geocode로 경도 위도정보를 얻기 위하여 시군과 군구를 붙이고, summarise로 통화 수를 구한다.&lt;/p&gt;
&lt;p&gt;구글맵의 api는 아래 사이트에서 발급 받을 수 있다.&lt;/p&gt;
&lt;figure id=&quot;og_1559990794981&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;https://accounts.google.com/ServiceLogin?service=cloudconsole&amp;amp;passive=1209600&amp;amp;osid=1&amp;amp;continue=https://console.cloud.google.com/?root-redirect-event%3D1%26ref%3Dhttps://console.cloud.google.com&amp;amp;followup=https://console.cloud.google.com/?root-redirect-event%3D1%26ref%3Dhttps://console.cloud.google.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-original-url=&quot;https://console.cloud.google.com&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Google Cloud Platform&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;하나의 계정으로 모든 Google 서비스를 Google Cloud Platform을 사용하려면 로그인하세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;accounts.google.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre class=&quot;brush:python nix&quot;&gt;&lt;code&gt;api = '구글맵 API값 여기 입력'
register_google(key = api)

cord.data = focus$address %&amp;gt;% enc2utf8() %&amp;gt;% geocode() 
cord.data

focus2 = bind_cols(focus, cord.data) %&amp;gt;% 
  filter(lon &amp;gt; 0 )
  
korea = get_googlemap('Korea, Republic of', maptype = 'roadmap', zoom = 7)
ggmap(korea) +
  geom_point(data = focus2, 
             aes(x = lon, y = lat, size = n), color = 'red' )

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9sjz8/btqvTGechoG/5fHC1PVg9QNxUy6MSmZIB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9sjz8/btqvTGechoG/5fHC1PVg9QNxUy6MSmZIB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9sjz8/btqvTGechoG/5fHC1PVg9QNxUy6MSmZIB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9sjz8%2FbtqvTGechoG%2F5fHC1PVg9QNxUy6MSmZIB0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>geocode</category>
      <category>ggmap</category>
      <category>R</category>
      <category>skdatahub</category>
      <category>렌터카</category>
      <category>위치정보</category>
      <author>awork.net</author>
      <guid isPermaLink="true">https://aworklab.tistory.com/30</guid>
      <comments>https://aworklab.tistory.com/30#entry30comment</comments>
      <pubDate>Sat, 8 Jun 2019 19:48:24 +0900</pubDate>
    </item>
    <item>
      <title>R로 텔레그램봇에 메세지 보내기</title>
      <link>https://aworklab.tistory.com/29</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;r_텔레그램봇.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FOvq3/btqvMHh9sRx/N6sG7tySlR3ZpLDtyuljYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FOvq3/btqvMHh9sRx/N6sG7tySlR3ZpLDtyuljYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FOvq3/btqvMHh9sRx/N6sG7tySlR3ZpLDtyuljYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFOvq3%2FbtqvMHh9sRx%2FN6sG7tySlR3ZpLDtyuljYK%2Fimg.png&quot; data-filename=&quot;r_텔레그램봇.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;텔레그램봇을 활용하면, R에서 수집한 정보를 외부에서 메신저를 통해서 확인할 수 있다.&amp;nbsp;R 스크립트를 일정 시간마다 정기적으로 돌리면서 결과값을 보내거나, 혹은 특정 조건이 발견되었을 때 경고 메세지를 발송할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&lt;b&gt;텔레그램 봇 생성하기&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;554&quot; height=&quot;434&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzUUxM/btqvLSET7rY/dPOnxdShLHHYCcEyOVK1k1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzUUxM/btqvLSET7rY/dPOnxdShLHHYCcEyOVK1k1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzUUxM/btqvLSET7rY/dPOnxdShLHHYCcEyOVK1k1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzUUxM%2FbtqvLSET7rY%2FdPOnxdShLHHYCcEyOVK1k1%2Fimg.png&quot; width=&quot;554&quot; height=&quot;434&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;PC버전 텔레그램을 설치한 후 BotFather를 검색해서 채널에 들어간다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sxDyg/btqvLvDaK26/qL9Qm3VJKTZ3mkIuJz9cD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sxDyg/btqvLvDaK26/qL9Qm3VJKTZ3mkIuJz9cD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sxDyg/btqvLvDaK26/qL9Qm3VJKTZ3mkIuJz9cD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsxDyg%2FbtqvLvDaK26%2FqL9Qm3VJKTZ3mkIuJz9cD0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;/newbot 명령을 입력한 후 새로운 봇을 생성한다 (봇의 이름은 반드시 bot으로 끝내야 하며 first_name과 username을 별도로 입력해줘야 한다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;362&quot; height=&quot;373&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dMmxUc/btqvLRF1mfm/ByQ2Wkf4GzPG9FcKVGe341/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dMmxUc/btqvLRF1mfm/ByQ2Wkf4GzPG9FcKVGe341/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dMmxUc/btqvLRF1mfm/ByQ2Wkf4GzPG9FcKVGe341/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdMmxUc%2FbtqvLRF1mfm%2FByQ2Wkf4GzPG9FcKVGe341%2Fimg.png&quot; width=&quot;362&quot; height=&quot;373&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;봇생성을 완료하면, API Token이라고 표시된 곳에 출력되는 값을 복사한다&lt;/p&gt;
&lt;pre class=&quot;brush:python stylus&quot;&gt;&lt;code&gt;install.packages('telegram.bot')
library(telegram.bot)
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;R에서 telegram.bot 패키지를 설치한다&lt;/p&gt;
&lt;pre class=&quot;brush:python gams&quot;&gt;&lt;code&gt;bot = Bot(token = 'ENTER YOUR API Toekn')
print(bot$getMe())

&amp;gt; print(bot$getMe())
$id
[1] id가 이 곳에 출력

$is_bot
[1] TRUE

$first_name
[1] &quot;봇의 first name&quot;

$username
[1] &quot;봇의 username&quot;


&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&lt;b&gt;봇에 메세지 보내기&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;API가 정상적으로 입력된 것을 확인할 수 있다. 이제 텔레그램에서 봇과 대화를 해야 한다. 봇이 메세지를 먼저 보낼 수 없기 때문에, 텔레그램에서 봇을 찾아서 먼저 대화를 걸어야 한다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;536&quot; height=&quot;398&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8fth8/btqvJ6YoKSc/LuVDeLKrloRvyQzONkTkmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8fth8/btqvJ6YoKSc/LuVDeLKrloRvyQzONkTkmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8fth8/btqvJ6YoKSc/LuVDeLKrloRvyQzONkTkmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8fth8%2FbtqvJ6YoKSc%2FLuVDeLKrloRvyQzONkTkmK%2Fimg.png&quot; width=&quot;536&quot; height=&quot;398&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;검색 창에 봇의 username을 치면 자신의 봇을 찾을 수 있다. 채팅창을 열고 메세지를 전송한다. 이제 봇과 대화중인 대화방을 R에서 찾아야 한다&lt;/p&gt;
&lt;pre class=&quot;brush:python gams&quot;&gt;&lt;code&gt;updates = bot$getUpdates()
updates[[1]]$message$chat

&amp;gt; updates[[1]]$message$chat
$id
[1] 대화방 id가 출력

$first_name
[1] &quot;사용자의 firstname&quot;

$last_name
[1] &quot;사용자의 lastname&quot;

$type
[1] &quot;private&quot;

&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;대화방의 id를 변수로 저장한 다음, 봇에게 메세지를 보내보자&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;brush:python lua&quot;&gt;&lt;code&gt;chat_id = updates[[1]]$message$chat$id
chat_id

bot$sendMessage(chat_id = chat_id, text = 'hello bot!')
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;321&quot; height=&quot;407&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mvgoZ/btqvK6RboIG/tjV4OZ2q5VvYkvsmjQfbvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mvgoZ/btqvK6RboIG/tjV4OZ2q5VvYkvsmjQfbvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mvgoZ/btqvK6RboIG/tjV4OZ2q5VvYkvsmjQfbvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmvgoZ%2FbtqvK6RboIG%2FtjV4OZ2q5VvYkvsmjQfbvK%2Fimg.png&quot; width=&quot;321&quot; height=&quot;407&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;채팅방으로 메세지가 전송된 것을 알 수 있다&lt;/p&gt;</description>
      <category>R/Advanced</category>
      <category>R</category>
      <category>telegrambot</category>
      <category>텔레그램</category>
      <category>텔레그램봇</category>
      <author>awork.net</author>
      <guid isPermaLink="true">https://aworklab.tistory.com/29</guid>
      <comments>https://aworklab.tistory.com/29#entry29comment</comments>
      <pubDate>Sun, 2 Jun 2019 13:12:18 +0900</pubDate>
    </item>
    <item>
      <title>ggmap을 사용하여 서울 지하철 역 위치 및 사용자 수 표시</title>
      <link>https://aworklab.tistory.com/28</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;ggmap2.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpdI9p/btqu3qVRf8r/kbQTVmQ5AVFOkU81ksnB9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpdI9p/btqu3qVRf8r/kbQTVmQ5AVFOkU81ksnB9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpdI9p/btqu3qVRf8r/kbQTVmQ5AVFOkU81ksnB9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpdI9p%2Fbtqu3qVRf8r%2FkbQTVmQ5AVFOkU81ksnB9K%2Fimg.png&quot; data-filename=&quot;ggmap2.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;서울 지하철역의 위치에 따른 역 사용자 수를 시각적으로 파악하려면 어떻게 해야 할까?&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;역의 위치 정보와 사용자 수 정보를 각각 획득한 후 ggmap을 통하여 분류하면 될 것 같다&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;우선 지하철 역의 주소를 찾아 보자&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;&lt;a href=&quot;http://data.seoul.go.kr/dataList/datasetView.do?infId=OA-12035&amp;amp;srvType=A&amp;amp;serviceKind=1&quot;&gt;http://data.seoul.go.kr/dataList/datasetView.do?infId=OA-12035&amp;amp;srvType=A&amp;amp;serviceKind=1&lt;/a&gt;&lt;/p&gt;
&lt;figure class=&quot;og-loading&quot; contenteditable=&quot;false&quot;&gt;불러오는 중입니다...&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4zsBW/btqu1BK0wrW/vPeSluTKWYrO0broYvjw7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4zsBW/btqu1BK0wrW/vPeSluTKWYrO0broYvjw7K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4zsBW/btqu1BK0wrW/vPeSluTKWYrO0broYvjw7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4zsBW%2Fbtqu1BK0wrW%2FvPeSluTKWYrO0broYvjw7K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqsk9U/btqu3rUMssa/7NMpqlWMb4FLz2IAUxlN6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqsk9U/btqu3rUMssa/7NMpqlWMb4FLz2IAUxlN6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqsk9U/btqu3rUMssa/7NMpqlWMb4FLz2IAUxlN6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbqsk9U%2Fbtqu3rUMssa%2F7NMpqlWMb4FLz2IAUxlN6k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;위 데이터를 불러온 후 역명, 호선, 주소를 가져온다&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;brush : python&quot;&gt;&lt;code&gt;library(tidyverse)
library(ggmap)
library(readxl)

#########################################
# import subway address

setwd('e:/R_study')
raw.subway = read_excel('seoul_subway_address.xlsx')
View(raw.subway)
head(raw.subway)

subway.add = raw.subway %&amp;gt;% 
  select(c(3,2,6)) %&amp;gt;% 
  rename(line = 호선, station = 역명, address = 상세주소) %&amp;gt;% 
  separate(address, c('address', 'etc'), sep = '[(]') %&amp;gt;% 
  select(-etc)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5yLYa/btqu1st12GW/Q2Ly7BDbo8NDV5KvmZOpCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5yLYa/btqu1st12GW/Q2Ly7BDbo8NDV5KvmZOpCk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5yLYa/btqu1st12GW/Q2Ly7BDbo8NDV5KvmZOpCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5yLYa%2Fbtqu1st12GW%2FQ2Ly7BDbo8NDV5KvmZOpCk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;한글 주소에서 geocode를 사용하여 경도와 위도를 얻은 후 col bind를 진행 해보자&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;brush:python clean&quot;&gt;&lt;code&gt; 
#########################################
# generate coordinate with geocode 

register_google(key='구글맵 API를 여기에 입력') 
coordinate = subway.add$address %&amp;gt;% enc2utf8() %&amp;gt;% geocode()

## merging 

subway.lon.lat = bind_cols(subway.add, coordinate)
subway.lon.lat
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/A6rO1/btqu3zLOSrq/aBdyThpxsJC6WKrffE0knK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/A6rO1/btqu3zLOSrq/aBdyThpxsJC6WKrffE0knK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/A6rO1/btqu3zLOSrq/aBdyThpxsJC6WKrffE0knK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FA6rO1%2Fbtqu3zLOSrq%2FaBdyThpxsJC6WKrffE0knK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;위경도 정보를 얻었으니, 서울 지도를 불러 온 후 위치를 표시해 보자&lt;/p&gt;
&lt;pre class=&quot;brush:python clean&quot;&gt;&lt;code&gt;#########################################
# display subway position on map 

map.seoul = get_googlemap('seoul',
                          maptype = 'roadmap',
                          zoom = 11)
ggmap(map.seoul) + geom_point(data = subway.lon.lat, 
                              aes(x = lon, y = lat), color = 'blue')
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCuCjr/btqu1tsUPwF/KOstVY1YDwe96IDxyudR6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCuCjr/btqu1tsUPwF/KOstVY1YDwe96IDxyudR6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCuCjr/btqu1tsUPwF/KOstVY1YDwe96IDxyudR6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCuCjr%2Fbtqu1tsUPwF%2FKOstVY1YDwe96IDxyudR6K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;지하철 별 사용자 수 데이터를 가져와 보자&lt;/p&gt;
&lt;figure id=&quot;og_1557159406060&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;https://www.data.go.kr/dataset/3045253/openapi.do&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-original-url=&quot;https://www.data.go.kr/dataset/3045253/openapi.do&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/c3OttP/hyA3W7DTN7/ThikZObtVm6lfjq1zh6b00/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;공공데이터포털&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유&amp;bull;활용할 수 있도록 공공데이터(Dataset)와 Open API로 제공하는 사이트입니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.data.go.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/doStsn/btqu1be0pzA/56sgrDg6824a4VvxjBUK51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/doStsn/btqu1be0pzA/56sgrDg6824a4VvxjBUK51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/doStsn/btqu1be0pzA/56sgrDg6824a4VvxjBUK51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdoStsn%2Fbtqu1be0pzA%2F56sgrDg6824a4VvxjBUK51%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;이 데이터를 R로 불러온 후 날짜, 호선, 역명, 구분, 합계 데이터로 새로운 Tibble을 생성한다&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;brush:python clean&quot;&gt;&lt;code&gt;#########################################
# import subway transforting capability 

raw.pop = read.csv('subway_pop.csv') %&amp;gt;% as.tibble
subway.pop = raw.pop %&amp;gt;% 
  select(-c(6:25), -3) %&amp;gt;% 
  rename(date = 날짜, line = 호선, station = 역명, type = 구분, pop = 합.계) %&amp;gt;% 
  separate(line, c('line', 'etc'), sep = 1) %&amp;gt;% 
  select(-etc)
subway.pop
subway.lon.lat[1,2] &amp;lt;- '서울역'
subway.lon.lat
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c43NHB/btqu2UCUCfR/Jky801zGpBLg2V7O3PhYK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c43NHB/btqu2UCUCfR/Jky801zGpBLg2V7O3PhYK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c43NHB/btqu2UCUCfR/Jky801zGpBLg2V7O3PhYK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc43NHB%2Fbtqu2UCUCfR%2FJky801zGpBLg2V7O3PhYK0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;위경도 데이터와 사용자수 데이터를 left_join으로 병합한다&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;상하차 수 중 하차 데이터만 filter로 가져온다&lt;/p&gt;
&lt;pre class=&quot;clean&quot;&gt;&lt;code&gt;#########################################
# left join coordinate and popuation

subway.merged = left_join(subway.pop, subway.lon.lat, by = c('station')) %&amp;gt;% na.omit()
subway.merged

subway.final = subway.merged %&amp;gt;% 
  filter(line.x == line.y) %&amp;gt;%
  filter(type == '하차') %&amp;gt;% 
  select(-line.y) %&amp;gt;% 
  rename(line = line.x)

subway.final$date = as.Date(subway.final$date)
subway.final$line = as.factor(subway.final$line)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/W5WXS/btqu3szozT5/U8R5uLiBhwIls4GKNEmrxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/W5WXS/btqu3szozT5/U8R5uLiBhwIls4GKNEmrxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/W5WXS/btqu3szozT5/U8R5uLiBhwIls4GKNEmrxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FW5WXS%2Fbtqu3szozT5%2FU8R5uLiBhwIls4GKNEmrxK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;사용자수와 경위도 정보를 ggmap을 사용하여 표시해보자&lt;/p&gt;
&lt;pre class=&quot;brush : python&quot;&gt;&lt;code&gt;#########################################
# display subway position on map 

subway.final

map.seoul = get_googlemap('seoul',
                          maptype = 'roadmap',
                          zoom = 11)
ggmap(map.seoul) + geom_point(data = subway.final, 
                              aes(x = lon, y = lat, size = pop, color = 'blue'))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPoHUV/btqu2bSESBf/M8ioFe6rqrSIHy9k9RXLA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPoHUV/btqu2bSESBf/M8ioFe6rqrSIHy9k9RXLA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPoHUV/btqu2bSESBf/M8ioFe6rqrSIHy9k9RXLA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPoHUV%2Fbtqu2bSESBf%2FM8ioFe6rqrSIHy9k9RXLA1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;역의 위치를 표시하는 점의 크기로 내리는 사용자의 수를 알 수 있다&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>R/Advanced</category>
      <category>geocode</category>
      <category>ggmap</category>
      <category>R</category>
      <category>빅데이터</category>
      <category>사용자수</category>
      <category>지하철</category>
      <category>통계</category>
      <author>awork.net</author>
      <guid isPermaLink="true">https://aworklab.tistory.com/28</guid>
      <comments>https://aworklab.tistory.com/28#entry28comment</comments>
      <pubDate>Tue, 7 May 2019 01:23:45 +0900</pubDate>
    </item>
    <item>
      <title>시간형 자료를 lubridate로 관리하기</title>
      <link>https://aworklab.tistory.com/27</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;lubridate.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/clhmVQ/btqu1sUW5tR/f9JASeqjm793GKuTzO0kIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/clhmVQ/btqu1sUW5tR/f9JASeqjm793GKuTzO0kIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/clhmVQ/btqu1sUW5tR/f9JASeqjm793GKuTzO0kIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FclhmVQ%2Fbtqu1sUW5tR%2Ff9JASeqjm793GKuTzO0kIK%2Fimg.png&quot; data-filename=&quot;lubridate.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;as.Date보다 손쉽게 시간형 데이터를 관리할 수 있는 패키지다&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&lt;b&gt;기본 포맷&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;brush:python subunit&quot;&gt;&lt;code&gt;## 시간형을 선언하지 않으면 문자열로 인식한다
&amp;gt; '2019-05-06' %&amp;gt;% str
 chr &quot;2019-05-06&quot;
 
## as.Date로 시간형으로 선언할 수 있다.
&amp;gt; as.Date('2019-05-06') %&amp;gt;% str
 Date[1:1], format: &quot;2019-05-06&quot;
 
## 형식을 지키지 않으면 시간으로 인식하지 못한다
&amp;gt; as.Date('20190506')
Error in charToDate(x) : 문자열이 표준서식을 따르지 않습니다

## 순서를 변경해도 인식하지 못한다
&amp;gt; as.Date('05-06-2019')
[1] &quot;0005-06-20&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;lubridate는 형식에 구애받지 않고, 사람이 일반적으로 상상할 수 있는 다양한 형식으로 입력한 데이터를 시간 데이터로 인식한다.&lt;/p&gt;
&lt;pre class=&quot;brush:python lsl&quot;&gt;&lt;code&gt;library(lubridate)

## yyyy-mm-dd
&amp;gt; ymd('2019-05-06')
[1] &quot;2019-05-06&quot;

## mm-dd-yyyy
&amp;gt; mdy('05/06/2019')
[1] &quot;2019-05-06&quot;

## dd-mm-yyyy
&amp;gt; dmy('06/05/2019')
[1] &quot;2019-05-06&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;세계에는 다양한 날짜 기입 방법이 있다. 연-월-일 / 월-일-연 / 일-월-연의 형식만 ymd, mdy, dmy로 지정해 주면 r이 알아서 데이터를 인식하여 표시해준다.&lt;/p&gt;
&lt;pre class=&quot;brush:python clean&quot;&gt;&lt;code&gt;## yyyy-mm-dd hh:mm:ss
&amp;gt; ymd_hms('2019-05-06 05:23:22')
[1] &quot;2019-05-06 05:23:22 UTC&quot;

## yyyy-mm-dd hh:mm
&amp;gt; ymd_hm('2019-05-06 05:22')
[1] &quot;2019-05-06 05:22:00 UTC&quot;

## yyyy-mm-dd hh
&amp;gt; ymd_h('2019.05.06 05')
[1] &quot;2019-05-06 05:00:00 UTC&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;as.POXITct 보다 훨씬 유연하기 때문에 사용하기 편하다.&lt;/p&gt;
&lt;h3&gt;&lt;b&gt;시간 정보 추출&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;셀에서 특정 시간 정보를 추출하는 방법은 아래와 같다&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;brush:python vbscript&quot;&gt;&lt;code&gt;## 시간 정보 선택
time = ymd_hms('2019.05.06 05:33:22')
time

lub.time = matrix(nrow = 1, ncol = 8) %&amp;gt;% as.tibble %&amp;gt;% 
  rename(year = V1, month = V2, day = V3, wday = V4, yday = V5, hour = V6, min = V7, sec = V8)

lub.time$year = year(time)
lub.time$month = month(time)
lub.time$day = day(time)
lub.time$wday = wday(time)
lub.time$yday = yday(time)
lub.time$hour = hour(time)
lub.time$min = minute(time)
lub.time$sec = second(time)

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/svIwp/btqu1BjOGnf/JlBGaBeiHfCkZFnZspk71k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/svIwp/btqu1BjOGnf/JlBGaBeiHfCkZFnZspk71k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/svIwp/btqu1BjOGnf/JlBGaBeiHfCkZFnZspk71k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsvIwp%2Fbtqu1BjOGnf%2FJlBGaBeiHfCkZFnZspk71k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3&gt;&lt;b&gt;시간 정보 연산&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;brush:python lsl&quot;&gt;&lt;code&gt; 
## 시간 정보 연산 
&amp;gt; ymd('2018.12.31') + 1
[1] &quot;2019-01-01&quot;

&amp;gt; ymd('2019.2.28') + 1
[1] &quot;2019-03-01&quot;

&amp;gt; ymd('2019.05.06') - 100
[1] &quot;2019-01-26&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;lubridate로 입력된 시간정보는 자유롭게 날짜와 시간을 더하고 뺄 수 있다&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;범위 형태로 날짜의 행렬을 반환 받을 수도 있다&lt;/p&gt;
&lt;pre class=&quot;brush:python stylus&quot;&gt;&lt;code&gt;ymd('2019.05.1') + days(0:30)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cAceyU/btqu2HRbj6o/LL8zErzInbY5pIs5mbNNBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cAceyU/btqu2HRbj6o/LL8zErzInbY5pIs5mbNNBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cAceyU/btqu2HRbj6o/LL8zErzInbY5pIs5mbNNBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAceyU%2Fbtqu2HRbj6o%2FLL8zErzInbY5pIs5mbNNBk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3&gt;&lt;b&gt;LA Lakers 데이터셋을 활용한 실습&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckyW2s/btqu1tM7qZa/XEKtcH5IgdkXoZ2pNdKWzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckyW2s/btqu1tM7qZa/XEKtcH5IgdkXoZ2pNdKWzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckyW2s/btqu1tM7qZa/XEKtcH5IgdkXoZ2pNdKWzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckyW2s%2Fbtqu1tM7qZa%2FXEKtcH5IgdkXoZ2pNdKWzK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;lakers는 2008-2009 시즌 동안 LA 레이커스팀의 득점 데이터를 기록한 데이터다&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;lubridate 패키지 함수를 사용하여 아래 작업을 할 것이다&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;날짜와 시간 데이터를 하나로 합침&amp;nbsp;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;월별로 슛의 종류 별 득점의 합&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;brush:python dos&quot;&gt;&lt;code&gt;time.ex = lakers %&amp;gt;% as.tibble
time.merged = time.ex %&amp;gt;% mutate(time.stmp = ymd_hm(paste(date, time))) %&amp;gt;% 
  select(time.stmp, everything()) %&amp;gt;% select(-date, -time) %&amp;gt;% na.omit()
time.merged
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWvIzE/btqu1bMIinU/6jhzspmQ8LOjfoedE0uGYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWvIzE/btqu1bMIinU/6jhzspmQ8LOjfoedE0uGYk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWvIzE/btqu1bMIinU/6jhzspmQ8LOjfoedE0uGYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWvIzE%2Fbtqu1bMIinU%2F6jhzspmQ8LOjfoedE0uGYk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;시간 정보가 하나로 합쳐진 것을 알 수 있다. 이제 시간에서 월 정보를 추출한 후 그룹 정렬과 요약을 할 것이다&lt;/p&gt;
&lt;pre class=&quot;brrush:python&quot;&gt;lakers.shoot = time.merged %&amp;gt;% group_by(month(time.stmp), type) %&amp;gt;% 
  filter(points != 0) %&amp;gt;% 
  summarise(sum.point = sum(points)) %&amp;gt;% rename(month = 'month(time.stmp)')
str(lakers.shoot)
lakers.shoot$month = as.factor(lakers.shoot$month)
lakers.shoot$type = as.factor(lakers.shoot$type)
lakers.shoot
&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6L0Df/btqu3rUGqcR/qKkiORYY9cprLjhY4Nnd10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6L0Df/btqu3rUGqcR/qKkiORYY9cprLjhY4Nnd10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6L0Df/btqu3rUGqcR/qKkiORYY9cprLjhY4Nnd10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6L0Df%2Fbtqu3rUGqcR%2FqKkiORYY9cprLjhY4Nnd10%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;brush:python smali&quot;&gt;&lt;code&gt; 
lakers.shoot %&amp;gt;% ggplot() + geom_col(aes(x = month, y = sum.point, fill = type))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baxAUU/btqu1sOdYtk/Hv3af68TBgGOWS0JU6Wapk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baxAUU/btqu1sOdYtk/Hv3af68TBgGOWS0JU6Wapk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baxAUU/btqu1sOdYtk/Hv3af68TBgGOWS0JU6Wapk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaxAUU%2Fbtqu1sOdYtk%2FHv3af68TBgGOWS0JU6Wapk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3&gt;&lt;b&gt;특정 기간 동안의 데이터를 lubridate로 검색하기&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;brush:python livecodeserver&quot;&gt;&lt;code&gt;serch.term = interval(ymd_hms('2009-01-02 00:00:00'), ymd_hms('2009-01-31 23:59:59'))
time.merged %&amp;gt;% filter(time.stmp %within% serch.term)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c5s914/btqu1t7sEqI/sgmDiHSvaDqwU7B1sS0kn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c5s914/btqu1t7sEqI/sgmDiHSvaDqwU7B1sS0kn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c5s914/btqu1t7sEqI/sgmDiHSvaDqwU7B1sS0kn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc5s914%2Fbtqu1t7sEqI%2FsgmDiHSvaDqwU7B1sS0kn0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>R/Basic</category>
      <category>Lakers</category>
      <category>lubridate</category>
      <category>R</category>
      <category>농구</category>
      <category>레이커스</category>
      <category>시간</category>
      <category>연월일</category>
      <author>awork.net</author>
      <guid isPermaLink="true">https://aworklab.tistory.com/27</guid>
      <comments>https://aworklab.tistory.com/27#entry27comment</comments>
      <pubDate>Mon, 6 May 2019 21:30:47 +0900</pubDate>
    </item>
    <item>
      <title>구글 스프레드시트로 geocode 변환하기</title>
      <link>https://aworklab.tistory.com/26</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;구글_geocode.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UrRux/btqu13Ao2NB/otHuOKBgsaKg91lkS8Hk70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UrRux/btqu13Ao2NB/otHuOKBgsaKg91lkS8Hk70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UrRux/btqu13Ao2NB/otHuOKBgsaKg91lkS8Hk70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUrRux%2Fbtqu13Ao2NB%2FotHuOKBgsaKg91lkS8Hk70%2Fimg.png&quot; data-filename=&quot;구글_geocode.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HDbXm/btqu3rUC9QS/saxgAGPtjC7jBYBurD3iu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HDbXm/btqu3rUC9QS/saxgAGPtjC7jBYBurD3iu1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HDbXm/btqu3rUC9QS/saxgAGPtjC7jBYBurD3iu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHDbXm%2Fbtqu3rUC9QS%2FsaxgAGPtjC7jBYBurD3iu1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;R에서 geocode를 사용하려면 Google Map API를 발급받고 별도의 코드를 입력해줘야 한다. 무료 모드일 경우 변환 횟수에도 사실상 제한이 있다. 구글 스프레드시트를 사용할 경우 보다 간편하게 주소를 위도와 경도로 변환할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAEjhc/btqu1sm7Ps8/rHTNnWklDSnDX34kXYHm1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAEjhc/btqu1sm7Ps8/rHTNnWklDSnDX34kXYHm1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAEjhc/btqu1sm7Ps8/rHTNnWklDSnDX34kXYHm1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAEjhc%2Fbtqu1sm7Ps8%2FrHTNnWklDSnDX34kXYHm1K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;구글 스프레드시트에서 문서를 생성한 후, 부가기능에서 부가기능 열기를 선택한다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mu4Um/btqu06rg3WY/fVrkmTA4Z53ThAM5tPTap0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mu4Um/btqu06rg3WY/fVrkmTA4Z53ThAM5tPTap0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mu4Um/btqu06rg3WY/fVrkmTA4Z53ThAM5tPTap0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmu4Um%2Fbtqu06rg3WY%2FfVrkmTA4Z53ThAM5tPTap0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;부가기능 검색창에서 geocode를 입력 후 Geocode by Awesome Table을 선택한다&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJye30/btqu15ybXIQ/hcKyZjH1GLwk6kgzEnKDMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJye30/btqu15ybXIQ/hcKyZjH1GLwk6kgzEnKDMK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJye30/btqu15ybXIQ/hcKyZjH1GLwk6kgzEnKDMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJye30%2Fbtqu15ybXIQ%2FhcKyZjH1GLwk6kgzEnKDMK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;서울시 지하철역의 주소를 경도와 위도로 변환해 보자. 주사가 들어가 있는 열을 선택 후 부가기능 - Geocode by Awesome Table - Start Geocoding을 선택한다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cQDRTh/btqu2Hp6Cyz/HLhQnlCCOTfY46A5g0TCOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cQDRTh/btqu2Hp6Cyz/HLhQnlCCOTfY46A5g0TCOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQDRTh/btqu2Hp6Cyz/HLhQnlCCOTfY46A5g0TCOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQDRTh%2Fbtqu2Hp6Cyz%2FHLhQnlCCOTfY46A5g0TCOK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byks0E/btqu14zkY7v/pwY4klaElLXUCCKsODQD5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byks0E/btqu14zkY7v/pwY4klaElLXUCCKsODQD5k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byks0E/btqu14zkY7v/pwY4klaElLXUCCKsODQD5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbyks0E%2Fbtqu14zkY7v%2FpwY4klaElLXUCCKsODQD5k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;Geocode!를 누르면 자동으로 변환된 위도와 경도 정보가 셀에 입력된다. 작업이 완료되면 해당 정보를 활용할 수 있다.&lt;/p&gt;</description>
      <category>Etc</category>
      <category>geocode</category>
      <category>R</category>
      <category>경도</category>
      <category>구글</category>
      <category>구글 스프레드시트</category>
      <category>스프레드시트</category>
      <category>엑셀</category>
      <category>위도</category>
      <category>주소</category>
      <author>awork.net</author>
      <guid isPermaLink="true">https://aworklab.tistory.com/26</guid>
      <comments>https://aworklab.tistory.com/26#entry26comment</comments>
      <pubDate>Mon, 6 May 2019 19:32:04 +0900</pubDate>
    </item>
    <item>
      <title>ggmap으로 지도에 표시하기</title>
      <link>https://aworklab.tistory.com/25</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;ggmap.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byohJA/btqu04mGhze/gCZL8PRs0vEHPmbyXQtfRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byohJA/btqu04mGhze/gCZL8PRs0vEHPmbyXQtfRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byohJA/btqu04mGhze/gCZL8PRs0vEHPmbyXQtfRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyohJA%2Fbtqu04mGhze%2FgCZL8PRs0vEHPmbyXQtfRK%2Fimg.png&quot; data-filename=&quot;ggmap.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;요즘 공공 데이터로 다양한 자료들을 쉽게 접할 수 있다.&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;그 중에는 수치형 데이터 뿐 아니라 위치 기반형도 존재하는데, ggmap 패키지와 Google map API를 활용하면 R에서 간편하게 위치를 표시할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/C0Ilh/btqu1a72cOk/Xzi80xGXqi8QHX6KI5Jz8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/C0Ilh/btqu1a72cOk/Xzi80xGXqi8QHX6KI5Jz8k/img.png&quot; style=&quot;width: 48.7782%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/C0Ilh/btqu1a72cOk/Xzi80xGXqi8QHX6KI5Jz8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FC0Ilh%2Fbtqu1a72cOk%2FXzi80xGXqi8QHX6KI5Jz8k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;&quot; height=&quot;&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEKnUh/btqu05y9P8f/k77Zx609qV0wlikkmJtlG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEKnUh/btqu05y9P8f/k77Zx609qV0wlikkmJtlG0/img.png&quot; style=&quot;width: 48.8963%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEKnUh/btqu05y9P8f/k77Zx609qV0wlikkmJtlG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEKnUh%2Fbtqu05y9P8f%2Fk77Zx609qV0wlikkmJtlG0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;&quot; height=&quot;&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;서울의 3개 프로구단이 홈구장으로 사용중인 고척 스카이돔과 잠실 야구장의 위치를 표시해 보자&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;figure id=&quot;og_1557137432219&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;https://accounts.google.com/ServiceLogin?service=cloudconsole&amp;amp;passive=1209600&amp;amp;osid=1&amp;amp;continue=https://console.cloud.google.com/&amp;amp;followup=https://console.cloud.google.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-original-url=&quot;https://console.cloud.google.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Google Cloud Platform&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;하나의 계정으로 모든 Google 서비스를 Google Cloud Platform을 사용하려면 로그인하세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;accounts.google.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;우선, Google map의 데이터를 가져오기 위해서는 API를 발급 받아야 한다.&amp;nbsp;위 사이트에 가입을 하면 개인 학습 용도로는 무료로 사용가능한 사용권을 얻을 수 있다.&lt;br /&gt;(가입 시 결제 정보를 기입해야 하지만, 실제 결제는 일어나지 않는다)&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;각 구장의 실제 주소는 아래와 같다&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;잠실 야구장 :&amp;nbsp;서울&amp;nbsp;송파구&amp;nbsp;올림픽로&amp;nbsp;25&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;고척 스카이돔 :&amp;nbsp;서울&amp;nbsp;구로구&amp;nbsp;경인로&amp;nbsp;430&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;Google map을 사용하기 위해서는 주소를 경도와 위도로 변환해야 하는데, ggmap 패키지 안에 있는 geocode 함수를 사용하면 된다. geocode에 주소를 넣으면 경도와 위도의 값을 반환 받을 수 있다.&lt;/p&gt;
&lt;pre class=&quot;brush : python&quot;&gt;&lt;code&gt;library(tidyverse)
library(ggmap)

# Googke Map API 입력 (API가 없으면 geocode가 작동하지 않는다)
register_google(key='API키를 이 곳에 입력') 

# 주소 tibble 생성
address = c('서울 송파구 올림픽로 25', '서울 구로구 경인로 430') 
name = c('잠실', '고척')

list = cbind(name, address) %&amp;gt;% as.tibble

# geocode 함수로 경도 위도 데이터 생성
coordinate = list$address %&amp;gt;% enc2utf8() %&amp;gt;% geocode()
coordinate

# 주소와 경도 위도 값의 결합
geocoded = cbind(list, coordinate) %&amp;gt;% as.tibble
geocoded
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEG8hf/btqu0VwMgzd/67O9PBkt2K0lTQM5TGGfAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEG8hf/btqu0VwMgzd/67O9PBkt2K0lTQM5TGGfAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEG8hf/btqu0VwMgzd/67O9PBkt2K0lTQM5TGGfAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEG8hf%2Fbtqu0VwMgzd%2F67O9PBkt2K0lTQM5TGGfAk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;이제 경도와 위도로 변환된 좌표를 구글 맵 위에 표시해보자. 구글 맵에 표시하기 위해서는 당연히 구글맵을 불러와야 한다. 두 야구장은 서울에 있으므로 서울의 지도를 불러와서 점으로 위치를 표시 해 보자&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;brush : python&quot;&gt;&lt;code&gt;stadium = get_googlemap('seoul',
                        maptype = 'roadmap',
                        zoom = 11)
ggmap(stadium) +
  geom_point(data = geocoded, 
             aes(x = lon, y = lat), color = 'red', size = 3)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAgbFn/btqu1ukS8Ih/9K6QqWGWocaKvIztPMTf9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAgbFn/btqu1ukS8Ih/9K6QqWGWocaKvIztPMTf9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAgbFn/btqu1ukS8Ih/9K6QqWGWocaKvIztPMTf9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAgbFn%2Fbtqu1ukS8Ih%2F9K6QqWGWocaKvIztPMTf9K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;서울시 지도위에 정확히 야구장의 위치들이 표시 된다.&lt;/p&gt;</description>
      <category>R/Basic</category>
      <category>API</category>
      <category>geocode</category>
      <category>ggmap</category>
      <category>R</category>
      <category>야구장</category>
      <author>awork.net</author>
      <guid isPermaLink="true">https://aworklab.tistory.com/25</guid>
      <comments>https://aworklab.tistory.com/25#entry25comment</comments>
      <pubDate>Mon, 6 May 2019 19:19:22 +0900</pubDate>
    </item>
  </channel>
</rss>