[心得] 用R连接gooel试算表

楼主: KKbiger (UUUU)   2017-07-20 16:18:57
[关键字]:
google 试算表
[重点摘要]:
网页废话版:
http://yichunsung.github.io/r_notebook/notebook_for_goolesheets
因为我工作时有很多工作伙伴不懂coding、数据库这些东西。
唯一会的就是goole试算表和execl,后来便想到干脆用R连接google试算表
方便大家需要资料的人自己上去google试算表中抓,省去很多电话打来打去的时间
网页版的是我写给一些会用R的工作伙伴的笔记,想说顺道分享上来。
1. 前言
直接利用R存取google试算表的资料,简化一些不必要的操作
2. 套件安装
利用googlesheets套件可以轻松地串接R与存取在云端上的google试算表。
※ 范例:
install.packages('googlesheets')
library(googlesheets)
3. 连结google帐户
安装好套件后,首先第一步骤是要连结你的google帐户,在此之前你可以先去随意于网页
上建立一个测试用资料表,但也可以不用,googlesheets套件好用之处在于你可以完全利
用R去建立、存取和删除你帐户中的任何试算表。
利用这个函数googlesheets::gs_auth()建立与google帐户的授权
※ 范例:
gs_auth(new_user = TRUE) # 与帐户建立新的受权
gs_user() # 查看user资料
此时会自动帮你开启浏览器,你必须于浏览器中登入你的google帐号。登入成功后浏览器
会显示讯息,之后便可回到R的执行环境之下。 gs_user()这个函数可以查看该帐户的资
讯。
4. 查看google试算表
使用gs_ls()这个函数可以直接查看该帐户中所有可用的google试算表,如果该帐户中无
任何可存取的试算表他就会显示讯息告知你无任何试算表可使用
※ 范例:
gs_ls() # 查看帐户中的google试算表list
5. 读取
gs_tittle() : 注册帐户中可使用的Spreadsheet进入R,function内的参数为该
Spreadsheet名称。
gs_read() : 读取选择的spreadsheet中的某个Worksheet。
利用gs_title() 注册帐户中一个Spreadsheets,再利用gs_read()去读取Spreadsheet中
的其中一个worksheet,读取后他将存成一个data frame。
※ 范例:
test_gs <- gs_title('testFile') # 读取帐户中名为"testFile"的 Spreadsheet
UBspot <- gs_read(ss=test_gs, ws = "工作表1", skip=0)
# ss = spreadSheet, ws = worksheet
gs_url() : 利用连结注册,function内的参数为该Spreadsheet的公开连结。
gs_read() : 读取选择的spreadsheet中的某个Worksheet。
可利用gs_url()注册的spreadsheet分为两类,一种是已发布的公开spreadsheet,另一种
是一般私人spreadsheet。
要利用私人的Spreadsheet,一样需要取得帐户授权,步骤如上面相同,只是注册
spreadsheet时由gs_title()改成gs_url(),而已经发布且公开的Spreadsheet则不需要帐
户授权的步骤,因为是公开发布的资料,所以任何人都可以透过该URL去注册这个
Spreadsheet。
但通常公开发布的资料表并不会开放权限给外人写入,只有读取功能而已。但相对地,如
果你有一份资料想要提供给超多人使用,这就是一个很好的途径,不然私人资料表你就得
透过google的共用功能去分享给别人。
注: 网页版有图教学如何公开发布goole试算表
http://yichunsung.github.io/r_notebook/notebook_for_goolesheets
发布成功后,便可以取得连结,在不需要帐户登入或授权情况下可以注册该spreadsheet
。除此之外,对R来说使用gs_url()最重要的场合就是让shinyapps去读取这个资料表,这
部分后面会有详尽的范例。
※ 范例:
Purl <-
"https://docs.google.com/spreadsheets/d/1aoXyR7foNOsSergX39cEalNGOJNBMrWbIog0d
ASocpw/edit?usp=sharing"
sibi_spreadsheet <- gs_url(Purl)
sibidf <- gs_read(ss=sibi_spreadsheet, ws = "K3_station_list", skip=0)
6. 写入新的资料
新增资料
※ 范例:
newdata <- data.frame(name=c("Ulaanbaatar Railway Station",
"Ulaanbaatar Airport"),
eng = c("Ulaanbaatar Railway Station",
"Ulaanbaatar Airport"),
lat = c(47.908592, 47.840388),
lng = c(106.883938, 106.769976)
)
gs_add_row(ss=test_gs, ws = "工作表1", input = newdata) # 新增资料
在你已授权的帐户中建立一个新的spreadsheet。
※ 范例:
gs_new("CWB-data", ws_title = "Beiliao", input = Beiliao, trim = TRUE,
verbose = FALSE)
在已注册的Spreadsheet中新增一个新的worksheet。
※ 范例:
CWB_gs <- gs_title('CWB-data')
gs_ws_new(ss = test_gs, ws_title = "Zhudong", input = test2, trim = TRUE,
verbose = FALSE)
7. Shinyapps应用
把google sheets当作数据库,而shinnyapps的server.R可以连结进去
程式码在下面,Demo:
https://yichunsung.shinyapps.io/testgooglesheets/
这样的东西方便性在于,未来你要更新资料,你不必在把server.R打开来重新更新code,
你可以直接上去Google Sheet增加资料就好,接口简单直观,对于不用R的工作伙伴而言
也非常轻松可以协助更新资料。
另外注意,gs_read()千万记得放在shinyServer(function(input, output){}里面,才会
自动更新资料
server.R:
library(shiny)
library(googlesheets)
library(plotly)
GTPurl <-
"https://docs.google.com/spreadsheets/d/11VFUdSCfZahqIuaO5eAvtCyyIjpnnYkG4w7KliiY_fc/edit?usp=sharing"
GTPtest <- gs_url(GTPurl)
shinyServer(function(input, output) {
GTPtestdf <- gs_read(ss=GTPtest, ws = "工作表1", skip=0)
GTPtestdf$date <- as.Date(GTPtestdf$date)
output$the_data <- renderDataTable({
GTPtestdf
})
output$plotlyData <- renderPlotly({
GTPdataplotly <- plot_ly(
data = GTPtestdf,
x = GTPtestdf$date,
y = GTPtestdf$TA_Day,
type = "scatter",
mode = "liners+markers"
)
GTPdataplotly
})
})
ui.R:
library(shiny)
library(googlesheets)
library(plotly)
shinyUI(fluidPage(
titlePanel("Quick demo"),
sidebarLayout(
sidebarPanel(
dateRangeInput("dates",
label = h3("date"),
start = "2017-01-01",
end = "2017-01-01",
format = "yyyy-mm-dd"),
selectInput("title",
label = h3("station"),
choices = c("title1", "title2", "title3"),
selected = "title1"),
submitButton("Submit"),
br()
),
mainPanel(
tabsetPanel(
tabPanel("result",
dataTableOutput("the_data")),
tabPanel("Plot",
plotlyOutput("plotlyData"))
)
)
)
))
Reference
https://shiny.rstudio.com/articles/persistent-data-storage.html#gsheets
https://github.com/jennybc/googlesheets/issues/126
https://www.r-bloggers.com/reading-data-from-google-sheets-into-r/
https://is.gd/t7yHAm
作者: clansoda (小笨)   2017-07-20 17:24:00
这个package算好用,唯一的缺陷是如果你要当数据库用在大型资料上他会慢得吓死人,顶多是几个MB的资料好用
作者: Wush978 (拒看低质媒体)   2017-07-20 18:35:00
读取大型的资料还OK, 但是写入超级超级慢...
作者: clansoda (小笨)   2017-07-20 20:26:00
而且他overwrite这块没有做出来,只能append跟delete
楼主: KKbiger (UUUU)   2017-07-20 22:19:00
是的 写入相当慢
作者: cywhale (cywhale)   2017-07-20 22:57:00
没试过这样的方式~也许有机会应用~~

Links booklink

Contact Us: admin [ a t ] ucptt.com