Автоматизировать чтение, запись, объединение и разделение нескольких файлов Excel с помощью R
Одно из достоинств области аналитики данных - это ее открытость для множества инструментов. Эта область уже показала, что знание одного-единственного инструмента является препятствием. Чтобы выжить и развиваться в этой сфере, вам необходимо:
Мастер на все руки и мастер своего дела. - неизвестный
Excel - один из основных инструментов при работе с данными в большинстве предприятий. Я сам имел опыт работы с Excel для анализа данных и обнаружил несколько недостатков, работая с ними. Проблемы, с которыми я столкнулся, не были моими собственными, но с ними сталкивается и большинство пользователей.
Здесь я предлагаю свои причины перейти с Excel на языки программирования с открытым исходным кодом или, скорее, использовать их возможности:
- Столбцы Excel не разграничивают входные и выходные данные.
- Определяемые пользователем формулы не интуитивно понятны, поскольку вместо имен переменных помечаются местоположения ячеек.
- Открытие / обработка файлов большого размера происходит медленно, и система часто дает сбой (бизнес не может часто обновлять компьютеры).
- Объединение разных файлов Excel в один файл является обременительным и аналогичным образом работает с разными листами в одном файле.
- Excel находится за платным доступом.
Как уже упоминалось, программирование с открытым исходным кодом является одним из вариантов, и здесь я буду использовать R для автоматизации простой обработки файлов Excel.
Обсуждаемые темы:
- Машиночитаемое именование файлов
- Чтение файлов Excel
- Слияние файлов Excel
- Разделение файлов Excel
- Создать несколько файлов Excel
Цель
Цель - два чтения трех файлов Excel с глобальными данными, касающимися продолжительности жизни, расходов ВВП, использования природного топлива и наличия воды. Объедините файлы в один файл Excel с тремя листами и сохраните их в рабочей папке. Объедините три листа в один, используя Outer Join
, и сохраните данные для каждой страны в соответствующей папке континента.
Итак, приступим.
Машиночитаемое именование файлов
Правильное именование файлов важно, поскольку оно пригодится при работе с автоматизацией. Лучше всего назвать файл так, чтобы он был машиночитаемым. При именовании файлов попробуйте реализовать следующие правила:
- Избегайте диакритических знаков, пробелов и текста с учетом регистра.
- Используйте разделители или разделители, такие как «-» или «_».
- Используйте машиночитаемые форматы даты, например ГГГГ-ММ-ДД.
- Добавьте контроль версий в конце для облегчения навигации (например, -01, -02,…, -10).
Пример наименования файла: 2021–07-15_Excel_Automation-01.xlsx
Чтение файлов Excel
Для чтения файлов используется пакет xlsx
. Есть две функции: read.xlsx()
и read.xlsx2()
для чтения файлов в xlsx
пакете. read.xlsx2()
работает быстро и эффективно при работе с большими наборами данных. Здесь приведенный ниже код предназначен для чтения книг Excel с одним листом.
# reading individual files fuel <- read.xlsx2("global-fuel-vs-gdp.xlsx",sheetIndex = 1) life_exp <- read.xlsx2("global-life-expectancy.xlsx",sheetIndex = 1) water <- read.xlsx2("global-water-share.xlsx",sheetIndex = 1)
Поскольку мы здесь для автоматизации, давайте рассмотрим это. Чтобы подойти к проблеме чтения нескольких файлов, используйте функцию list.files()
, чтобы создать список, содержащий имена всех интересующих файлов. Сохраняйте данные Excel с отдельных листов во фреймах данных. Используйте правильное соглашение об именах для определенных объектов фрейма данных, так как это поможет в автоматизации. Назначение фреймов данных отдельным листам достигается двумя циклами For и функцией assign()
.
# set the working directory setwd("C:/Users/amalasi/Documents/R/Blog post/Blog17-Excel1")
Слияние файлов Excel
После загрузки данных Excel данные готовы к обработке. Здесь обсуждаются два возможных способа объединения данных. Первый путь - создать одну книгу, содержащую несколько листов, соответствующих листам всех книг. Второй путь - объединить все листы в книге, созданной по первому пути, в один лист.
Создание одной книги с несколькими листами, соответствующих нескольким листам всех книг
Использование функции write.xlsx()
внутри цикла for может помочь добавить несколько книг с несколькими листами в одну книгу в виде разных листов. Следует проявлять осторожность при использовании функции write.xlsx()
, впервые убедитесь, что для параметра append
установлено значение по умолчанию, которое равно FALSE. Это создает книгу, и для добавления отдельных листов в эту книгу просто установите параметр append=TRUE
.
Создание одного листа путем объединения нескольких листов книги
Уловка здесь заключается в том, чтобы не забыть назвать все временные фреймы данных, которые создаются в процессе автоматизации, так, чтобы они имели заданный шаблон (помните соглашение, определенное в именовании машиночитаемых файлов). Это очень помогает, по крайней мере, в этой части.
Цель этого упражнения - объединить листы с помощью внешнего соединения. Для этого создайте список всех соответствующих фреймов данных, которые будут объединены для создания единого фрейма данных или листа. С помощью функций ls()
и mget()
создается список временных фреймов данных, который назначается объекту с именем local_list. Определив объект списка, можно легко управлять фреймами данных внутри цикла For. Этот фрагмент кода создаст объект с именем global_final со всеми данными, объединенными в один лист.
Разделение файлов Excel
При работе с объемной книгой с несколькими листами все отдельные листы могут быть извлечены и назначены отдельным фреймам данных с помощью приведенного ниже кода. Это достигается с помощью функции getSheets()
.
Создавайте несколько файлов и папок
Последней целью было создать файлы для конкретной страны и сохранить их в папках, соответствующих их континентам. Вот два шага, которые необходимы для полного достижения цели.
Первый шаг - создать папки, названные в честь континентов, что достигается с помощью функции dir.create()
.
Второй шаг - разбить лист на несколько фреймов данных с информацией по отдельным странам и сохранить их. Начните с индексации отдельных стран, так как это помогает в создании цикла For. Затем с помощью filter()
извлеките информацию о стране и сохраните ее во временном объекте. Затем создайте книгу, определите лист и запишите данные на листы. Последний шаг - сохранить файлы в целевых папках.
Ссылка на полный код находится здесь.
Вывод
Статья наглядно демонстрирует, как потратить несколько часов на создание сценария кода на R и может сэкономить огромное количество времени в долгосрочной перспективе при слиянии и разделении нескольких файлов Excel.
Приведенный выше код не зависит от количества листов в книге и может обрабатывать листы с различными столбцами данных.
Ключевым обучением было: определение соглашений об именовании машиночитаемых файлов, а также чтение, запись, объединение и разделение нескольких листов и книг Excel.
Следующими шагами будет использование сводных таблиц, Vlookup и других функций Excel с использованием R.
Если меня интересуют другие блоги, связанные с автоматизацией, то обязательно загляните в этот блог:
Другие блоги на R и построение графиков на R:
Источник данных
- Https://ourworldindata.org/grapher/life-expectancy
- Https://ourworldindata.org/water-sanitation-2020-update
- Https://ourworldindata.org/energy-poverty-air-pollution
Ссылка на репозиторий Github.
Вы можете связаться со мной в LinkedIn и Twitter, чтобы следить за моим путешествием по науке о данных и визуализации данных.