Как использовать таблицы из Google Drive на R | RStudio

Обзор

googledrive позволяет взаимодействовать с файлами на Google Диске из R.

Установка

Установить из CRAN:

install.packages("googledrive")

Использование

Загрузить googledrive

library("googledrive")

Соглашения о пакете

  • Большинство функций начинаются с префикса drive_. Автозаполнение – ваш друг.
  • Цель состоит , чтобы обеспечить доступ Drive , который чувствует себя похож на утилиты Unix файловых систем, например, findlsmvcpmkdir, и rm.
  • Метаданные для одного или нескольких файлов dribbleна Диске хранятся в тиббле «Диск». Это фрейм данных с одной строкой на файл. Дриблинг возвращается (и принимается) почти каждой функцией в googledrive. Цели дизайна:
    • Дайте людям то, что они хотят: имя файла
    • Отслеживайте, что хочет API: идентификатор файла
    • Сохраняйте все остальные метаданные, отправленные обратно API
  • googledrive поддерживает конвейерную обработку и, по сути, реэкспортирует %>%, но не требует его использования.

Быстрая демонстрация

Вот как вывести список n_maxфайлов, которые вы видите на « Моем диске» . Здесь вы можете ожидать, что вас отправят в ваш браузер для аутентификации и авторизации пакета googledrive для работы от вашего имени с Google Диском.

drive_find(n_max = 30)
#> # A dribble: 30 × 3
#>    name                       id                                drive_resource  
#>    <chr>                      <drv_id>                          <list>          
#>  1 2021-09-16_r_logo.jpg      1dandXB0QZpjeGQq_56wTXKNwaqgsOa9D <named list [41…
#>  2 2021-09-16_r_about.html    1XfCI_orH4oNUZh06C4w6vXtno-BT_zmZ <named list [40…
#>  3 2021-09-16_imdb_latin1.csv 163YPvqYmGuqQiEwEFLg2s1URq4EnpkBw <named list [39…
#>  4 2021-09-16_chicken.txt     1axJz8GSmecSnaYBx0Sb3Gb-SXVaTzKw7 <named list [40…
#>  5 2021-09-16_chicken.pdf     14Hd6_VQAeEgcwBBJamc-FUlnXhp117T2 <named list [40…
#>  6 2021-09-16_chicken.jpg     1aslW1T-B8UKzAEotDWpmRFaMyMux5-it <named list [41…
#>  7 2021-09-16_chicken.csv     1Mj--zJYZJSMKsNVjk2tYFef5LnCsNoDT <named list [39…
#>  8 pqr                        143iq-CswFTwJTjVfKkcFMDW0jYqDeUj2 <named list [34…
#>  9 mno                        1gcUTnFbsF6uioJrLCsVQ78_F1wEzyNtI <named list [33…
#> 10 jkl                        17T40phn99w0hY-B_Ev0deTvVg9fmUSnt <named list [33…
#> # … with 20 more rows

Вы можете сузить запрос, указав имя, по которому patternвы хотите сопоставить имена. Или указав тип файла: typeаргумент понимает типы MIME, расширения файлов и несколько понятных человеку ключевых слов.

drive_find(pattern = "chicken")
drive_find(type = "spreadsheet")     ## Google Sheets!
drive_find(type = "csv")             ## MIME type = "text/csv"
drive_find(type = "application/pdf") ## MIME type = "application/pdf"

Кроме того, вы можете уточнить поиск с помощью qпараметра запроса. Принятые условия поиска можно найти в документации Google Drive API . Например, чтобы увидеть все файлы, которые вы отметили звездочкой и которые могут читать «все, у кого есть ссылка», сделайте следующее:

(files <- drive_find(q = c("starred = true", "visibility = 'anyoneWithLink'")))
#> # A dribble: 2 × 3
#>   name       id                                drive_resource   
#>   <chr>      <drv_id>                          <list>           
#> 1 r_logo.jpg 1wFAZdmBiSRu4GShsqurxD7wIDSCZvPud <named list [41]>
#> 2 THANKS     19URV7BT0_E1KhYdfDODszK5aiELOwTSz <named list [40]>

Обычно вы хотите сохранить результат вызова googledrive, как мы это делаем filesвыше. filesпредставляет собой каплю с информацией о нескольких файлах и может использоваться в качестве входных данных для нисходящих вызовов. В любой момент им также можно управлять как обычным фреймом данных.

Определить файлы

drive_find()выполняет поиск по свойствам файла, но вы также можете идентифицировать файлы по имени (на самом деле путь) или по идентификатору файла на Диске, используя drive_get().

(x <- drive_get("~/abc/def/googledrive-NEWS.md"))
#> ✓ The input `path` resolved to exactly 1 file.
#> # A dribble: 1 × 4
#>   name                path                          id            drive_resource
#>   <chr>               <chr>                         <drv_id>      <list>        
#> 1 googledrive-NEWS.md ~/abc/def/googledrive-NEWS.md 1h1lhFfQrDZe… <named list […

as_id()может использоваться для преобразования различных входных данных в отмеченный вектор идентификаторов файлов. Он работает с идентификаторами файлов (по понятным причинам!), Различными формами URL-адресов дисков и т dribble. Д.

x$id
#> <drive_id[1]>
#> [1] 1h1lhFfQrDZevE2OEX10-rbi2BfvGogFm

# let's retrieve same file by id (also a great way to force-refresh metadata)
drive_get(x$id)
#> # A dribble: 1 × 3
#>   name                id                                drive_resource   
#>   <chr>               <drv_id>                          <list>           
#> 1 googledrive-NEWS.md 1h1lhFfQrDZevE2OEX10-rbi2BfvGogFm <named list [39]>
drive_get(as_id(x))
#> # A dribble: 1 × 3
#>   name                id                                drive_resource   
#>   <chr>               <drv_id>                          <list>           
#> 1 googledrive-NEWS.md 1h1lhFfQrDZevE2OEX10-rbi2BfvGogFm <named list [39]>

В общем, функции googledrive, которые работают с файлами, позволяют вам указать файл (ы) по имени / пути, идентификатору файла или в формате dribble. Если это неоднозначно, используйте, as_id()чтобы пометить вектор символов как содержащий идентификаторы файлов на Диске, а не пути к файлам. Эта функция также может извлекать идентификаторы файлов из различных URL-адресов.

Загрузить файлы

Мы можем загружать файлы любого типа.

(chicken <- drive_upload(
  drive_example_local("chicken.csv"),
  "index-chicken.csv"
))
#> Local file:
#> • '/private/tmp/RtmpIm6bTU/temp_libpath68f2f2fb7a9/googledrive/extdata/example_files/chicken.csv'
#> Uploaded into Drive file:
#> • 'index-chicken.csv' <id: 14y8vNq9VXYuOuoHsexumu4y73hqBP_RB>
#> With MIME type:
#> • 'text/csv'
#> # A dribble: 1 × 3
#>   name              id                                drive_resource   
#>   <chr>             <drv_id>                          <list>           
#> 1 index-chicken.csv 14y8vNq9VXYuOuoHsexumu4y73hqBP_RB <named list [39]>

Обратите внимание, что файл был загружен как text/csv. Поскольку это был .csvдокумент, и мы не указали тип, googledrive угадала тип MIME. Мы можем отменить это, используя typeпараметр для загрузки в виде электронной таблицы Google. Давайте сначала удалим этот файл.

drive_rm(chicken)
#> File deleted:
#> • 'index-chicken.csv' <id: 14y8vNq9VXYuOuoHsexumu4y73hqBP_RB>

# example of using a dribble as input
chicken_sheet <- drive_example_local("chicken.csv") %>% 
  drive_upload(
    name = "index-chicken-sheet",
    type = "spreadsheet"
  )
#> Local file:
#> • '/private/tmp/RtmpIm6bTU/temp_libpath68f2f2fb7a9/googledrive/extdata/example_files/chicken.csv'
#> Uploaded into Drive file:
#> • 'index-chicken-sheet' <id: 17oaVZ09fbpjdV-KMUdcguAD8i1hKeSjNZnq_fbR4iiw>
#> With MIME type:
#> • 'application/vnd.google-apps.spreadsheet'

Намного лучше!

Делиться файлами

Чтобы другие люди могли получить доступ к вашему файлу, вам необходимо изменить права доступа. Вы можете проверить статус совместного использования, запустив drive_reveal(..., "permissions"), который добавляет логический столбец sharedи сохраняет более подробные метаданные в permissions_resourceпеременной.

chicken_sheet %>% 
  drive_reveal("permissions")
#> # A dribble: 1 × 5
#>   name                shared id                drive_resource  permissions_reso…
#>   <chr>               <lgl>  <drv_id>          <list>          <list>           
#> 1 index-chicken-sheet FALSE  17oaVZ09fbpjdV-K… <named list [3… <named list [2]>

Вот как предоставить любому, у кого есть ссылка, разрешение на просмотр этого набора данных.

(chicken_sheet <- chicken_sheet %>%
   drive_share(role = "reader", type = "anyone"))
#> Permissions updated:
#> • role = reader
#> • type = anyone
#> For file:
#> • 'index-chicken-sheet' <id: 17oaVZ09fbpjdV-KMUdcguAD8i1hKeSjNZnq_fbR4iiw>
#> # A dribble: 1 × 5
#>   name                shared id                drive_resource  permissions_reso…
#>   <chr>               <lgl>  <drv_id>          <list>          <list>           
#> 1 index-chicken-sheet TRUE   17oaVZ09fbpjdV-K… <named list [3… <named list [2]>

Это происходит так часто, что есть даже удобная обертка drive_share_anyone().

Публикация файлов

Версии документов, таблиц и презентаций Google можно публиковать в Интернете. Вы можете проверить статус публикации, запустив drive_reveal(..., "published"), который добавляет логический столбец publishedи сохраняет более подробные метаданные в revision_resourceпеременной.

chicken_sheet %>% 
  drive_reveal("published")
#> # A dribble: 1 × 7
#>   name   published shared id    drive_resource permissions_res… revision_resour…
#>   <chr>  <lgl>     <lgl>  <drv> <list>         <list>           <list>          
#> 1 index… FALSE     TRUE   17oa… <named list [… <named list [2]> <named list [7]>

По умолчанию drive_publish()будет опубликована ваша самая последняя версия.

(chicken_sheet <- drive_publish(chicken_sheet))
#> File now published:
#> • 'index-chicken-sheet' <id: 17oaVZ09fbpjdV-KMUdcguAD8i1hKeSjNZnq_fbR4iiw>
#> # A dribble: 1 × 7
#>   name   published shared id    drive_resource permissions_res… revision_resour…
#>   <chr>  <lgl>     <lgl>  <drv> <list>         <list>           <list>          
#> 1 index… TRUE      TRUE   17oa… <named list [… <named list [2]> <named list [9]>

Скачать файлы

Файлы Google

Мы можем скачивать файлы с Google Диска. Собственные типы файлов Google (такие как Документы Google, Таблицы Google, Презентации Google и т. Д.) Необходимо экспортировать в файлы некоторых обычных типов. Существуют разумные значения по умолчанию, или вы можете указать это явно typeили неявно через расширение файла в path. Например, если я хочу загрузить таблицу Google «chicken_sheet» как файл, .csvя могу запустить следующее.

drive_download("index-chicken-sheet", type = "csv")
#> File downloaded:
#> • 'index-chicken-sheet' <id: 17oaVZ09fbpjdV-KMUdcguAD8i1hKeSjNZnq_fbR4iiw>
#> Saved locally as:
#> • 'index-chicken-sheet.csv'

В качестве альтернативы я мог бы указать тип через pathпараметр.

drive_download(
  "index-chicken-sheet",
  path = "index-chicken-sheet.csv",
  overwrite = TRUE
)
#> File downloaded:
#> • 'index-chicken-sheet' <id: 17oaVZ09fbpjdV-KMUdcguAD8i1hKeSjNZnq_fbR4iiw>
#> Saved locally as:
#> • 'index-chicken-sheet.csv'

Обратите внимание на приведенный выше пример, который я указал overwrite = TRUE, чтобы перезаписать ранее сохраненный локальный файл CSV.

Наконец, вы можете просто разрешить экспорт в тип по умолчанию. В случае с Google Таблицами это книга Excel:

drive_download("index-chicken-sheet")
#> File downloaded:
#> • 'index-chicken-sheet' <id: 17oaVZ09fbpjdV-KMUdcguAD8i1hKeSjNZnq_fbR4iiw>
#> Saved locally as:
#> • 'index-chicken-sheet.xlsx'
Все остальные файлы

Загрузка файлов, не относящихся к типу файлов Google, еще проще, т. Е. Не требует какого-либо преобразования или информации о типе.

# download it and prove we got it
drive_download("chicken.txt")
#> File downloaded:
#> • 'chicken.txt' <id: 1xMvlJHia_qYNZmucaStDcOF9A9PD4BOT>
#> Saved locally as:
#> • 'chicken.txt'
readLines("chicken.txt") %>% head()
#> [1] "A chicken whose name was Chantecler"      
#> [2] "Clucked in iambic pentameter"             
#> [3] "It sat on a shelf, reading Song of Myself"
#> [4] "And laid eggs with a perfect diameter."   
#> [5] ""                                         
#> [6] "—Richard Maxson"

Очистить

file.remove(c(
  "index-chicken-sheet.csv", "index-chicken-sheet.xlsx", "chicken.txt"
))
#> [1] TRUE TRUE TRUE
drive_find("index-chicken") %>% drive_rm()
#> File deleted:
#> • 'index-chicken-sheet' <id: 17oaVZ09fbpjdV-KMUdcguAD8i1hKeSjNZnq_fbR4iiw>

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *