Редактирование большой базы данных в Excel - любой простой в изучении язык, который обеспечивает манипулирование массивами, кроме VBA?Python?Какая библиотека? - PullRequest
0 голосов
/ 15 июня 2019

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

Совсем недавно я успешно написал собственный макрос в VBA, который хранит два больших массива в памяти,в памяти он сравнивает оба массива только по одному столбцу в каждом (например, по именам), затем общие элементы, которые находятся в обоих массивах, копируются в другие временные массивы ВМЕСТЕ с другими записями в той же строке массива.Таким образом, если имя строки (11) было «Том», и оно является общим для обоих массивов, и рядом с Томом была его зарплата в 10 000 и его номер телефона, весь ряд был бы скопирован.

Это было непросто, но я как-то понял.

Теперь, этот работает как брелок для массивов размером до 10 000 строк x 5 столбцов + еще один массив того же размера, 10000 строк x 5 столбцов.Он сравнивает и записывает на новый лист в течение нескольких секунд.Отлично!

Но теперь я попробовал гораздо больший массив с помощью этого метода, скажем, 200 000 строк x 10 столбцов + второй массив для сравнения 10 000 строк x 10 столбцов ... и потребовалосьмного времени.

Проблема в том, что Excel работает только на 25% CPU - я проверил, что в сети это нормально.

Таким образом, я предполагаю, что для повышения производительностиМне нужно использовать другой «инструмент», в данном случае другой язык программирования.

Я слышал, что Python великолепен, Python легок и т. Д., Но я не программист, я только выучил несколько десятковИмена объектов, и я знаю некоторую логику, поэтому я нашел в VBA.

Это Python?Или, возможно, смена языка программирования не поможет?Для меня очень важно, чтобы язык не был слишком сложным - я видел C ++, и он жжет мне глаза, я буквально не представляю, что происходит в этих кодах.

Если действительно Pythonс каких библиотек мне начинать? Может быть, сначала выучить некоторые простые вещи, а затем перейти к этим массивам и т. д.?Спасибо!

Ответы [ 2 ]

0 голосов
/ 15 июня 2019

В идеале вы хотите создать базу данных (таких как SQLite, PostgreSQL, MySQL и т. Д.) И вставить в нее свои данные.SQL - это язык общения с базой данных (язык манипулирования данными DML) или создания / редактирования структуры базы данных (язык определения данных DDL).

Почему база данных?Вы получите подтверждение данных и возможность запрашивать данные со многими взаимосвязями (например, «Один ко многим», например, у одного автора может быть много книг, но у вас будет таблица «Автор» и таблица «Книга», и вам нужно будет присоединиться к ним).

Pandas работает не только с базами данных, но и с CSV и текстовыми файлами, Microsoft Excel, HDF5 и отлично подходит для чтения и записи в них в структурах памяти, а также для слияния, объединения, разделения данных.Самый быстрый способ получить то, что вам нужно, - это, вероятно, прочитать имеющиеся у вас данные в фреймы Panda, а затем манипулировать оттуда.Это делает базу данных необязательной, хотя рекомендуется.См. Слияние панд 101 , чтобы понять, что вы можете делать с пандами.

Еще один инструмент python, который вы можете использовать, - это SQLAlchemy, который является реляционным картографом объекта ORM (преобразует, скажем, строку в авторетаблица к объекту класса Author в python).Хотя важно знать принципы SQL и базы данных, вам не нужно напрямую использовать операторы SQL при использовании SQLAlchemy.

Каждая из этих областей огромна, как океан.Вы можете погрузить пальцы ног в каждую, но если вы зайдете слишком глубоко, вам захочется научиться плавать.У меня есть книги размером с кулак, чтобы дать (что я еще не закончил) примерное представление о том, что я имею в виду.

Возможная схема может выглядеть следующим образом:

База данных (необязательно)но рекомендуется):

  1. Узнайте о реляционных данных
  2. Изучите дизайн базы данных
  3. Изучите SQL

Панды (настоятельно рекомендуется):

  1. Научиться читать и записывать данные (в Excel / базу данных)
  2. Научиться объединять, объединять, объединять и обновлять DataFrame
0 голосов
/ 15 июня 2019

Я не собираюсь снисходительно, но все, что я скажу, будет звучать как снисходительно, пусть будет так.

Операция, которую вы делаете, называется присоединением. Это обычная операция в любой базе данных. К сожалению, Excel не является базой данных.

Я подозреваю, что вы выполняете операцию NxM в Excel. Операция 200 000 строк x 10 000 строк быстро взрывается. Выберите ключ в N, найдите строку в M и получите результат. Когда вы делаете это, независимо от языка программирования, порядок вычислений становится настолько большим, что невозможно выполнить задачу за разумное время.

В этом случае 200 000 строк x 10000 строк требуют около 5000 запросов на каждую строку в среднем в 200 000 строк. Это 1 000 000 000 раз.

Итак, как реальные базы данных делают это в разумные сроки? Используйте индекс. Когда вы просматриваете эти 10 000 строк таблицы, то, что вы ищете, индексируется, поэтому поиск строки становится log2 (10 000). Общий порядок вычислений становится N * log2 (M), что гораздо более управляемо. Если вы хешируете ключ, стоимость поиска почти равна O (1), то есть постоянна. Итак, порядок вычисления становится N.

Что вы делаете, вероятно, в реальном выражении базы данных, полное сканирование таблицы. В реальной базе данных этого следует избегать, потому что она медленная.

Если вы используете какую-либо реальную (SQL) базу данных или язык программирования, который обеспечивает поиск по ключам в наборе данных, ваше объединение станет действительно быстрым. Это никак не связано с любым языком программирования. Это действительно 101 компьютерная наука.

Я ничего не знаю о том, что может делать Excel. Если в Excel предусмотрена возможность поиска строки на основе индексации или хеширования, возможно, вы сможете значительно ускорить ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...