Любой ACID (в данном случае ключевой особенностью является функция «Изоляция»), которая предоставит вам эти функции. Хорошей бесплатной базой данных для этого является PostgreSQL, альтернативой (если у вас есть к ней доступ) является MS-SQL Server.
Вы действительно хотите использовать для этого базу данных, совместимую с ACID, и не сталкивайтесь с этимсебя.
Эта проблема существует уже много десятилетий и была решена. Существует слишком много крайних случаев, которые сделают вашу жизнь по-настоящему тяжелой, если вы захотите работать с простыми файлами на диске.
Кроме того, pandas очень способен читать данные из таких баз данных.
Некоторые основы
Учитывая формулировку вопроса, я позволю себе предположить, что это может быть новая территория для вас, поэтому вот несколько «минимальных» указателей, с которых можно начать. Но некоторые вещи, которые вы будете иметь для чтения:
- SQL - язык структурированных запросов - используется для извлечения данных из таблицы базы данных. Вы можете использовать это для предварительной обработки и предварительной фильтрации данных, прежде чем превратить их в фрейм данных. Это снижает нагрузку на ваш компьютер и в сети. В зависимости от размера данных это значительно снижает нагрузку .
- Документация базы данных, которую вы используете: Самое главное, какие типы данных существуют, и инструкции по установке.
Предполагается, что вы начинаете с файла CSV, вот простой пример.
Подготовка базы данных
Сначала необходимо загрузить данные CSV в базу данных. Ради этого примера я буду использовать PostgreSQL. Другие базы данных будут иметь другой синтаксис для загрузки данных.
Я также буду очень либеральным с выбором типа данных, и я не буду использовать «первичный ключ». Но это всего лишь , чтобы сделать его максимально простым. Вы должны прочитать эти темы для своего окончательного решения!
Итак, давайте предположим следующее о БД (см. Приложение ниже о том, как запустить тестовый экземпляр с помощью Docker):
- Он работает на хосте "192.0.2.1" с использованием порта "5432"
- Имя базы данных (каждый сервер БД может запускать несколько баз данных) - это "stackoverflow"
- Имя пользователя "jdoe" с паролем "supersecret"
Кроме того, давайте использовать бесплатный файл данных для воспроизведения. Давайте использовать некоторые данные AirBNB (это было первое, что появилось в kaggle во время написания этой статьи).
Затем мы можем использовать клиент командной строки psql
для подключения, создайте таблицу и загрузите файл данных:
Соединение
В командной строке выполните следующую команду:
psql postgres://jdoe:supersecret@192.0.2.1:5432/stackoverflow
. Содержит значения, перечисленные выше. Некоторые из них могут быть опущены (например, пароль или порт по умолчанию), но я оставил их в иллюстративных целях.
Теперь вы можете запустить запрос SQL для создания новой таблицы. Это похоже на фрейм данных и содержит ваши данные для всех ваших пользователей. Этот запрос также определяет имя таблицы, имена столбцов и типы данных:
Создание таблицы и загрузка данных
Очевидно, что таблицу необходимо создать только один раз. Загрузка данных зависит от ваших потребностей. Используя SQL, каждый пользователь может также вставлять, изменять и удалять данные в таблицах.
CREATE TABLE mydata (
id INTEGER,
name TEXT,
host_id INTEGER,
host_name TEXT,
neighbourhood_group TEXT,
neighbourhood TEXT,
latitude FLOAT,
longitude FLOAT,
room_type TEXT,
price INTEGER,
minimum_nights INTEGER,
number_of_reviews INTEGER,
last_review DATE,
reviews_per_month FLOAT,
calculated_host_listings_count INTEGER,
availability_365 INTEGER
);
Теперь мы можем загрузить данные (из набора данных kaggle ):
\copy mydata FROM AB_NYC_2019.csv WITH CSV HEADER;
Подробнее см. COPY .
После этого мы можем выйти из консоли postgres и вернуться в Python / Pandas.
Pandas
Прежде всего, убедитесь, что у вас есть библиотека Python, способная подключаться к postgres, например psycopg2-binary
.
Импорт:
import pandas
import psycopg2
Connectiong и чтение:
connection = psycopg2.connect("postgresql://jdoe:supersecret@192.0.2.1/stackoverflow")
df = pandas.read_sql("SELECT * FROM mydata", connection, index_col="id")
Приложение - Запуск postgres в Docker
Новый экземпляр Docker можно запустить с помощью следующей команды:
docker run \
--rm \
--name pg-docker \
-e POSTGRES_PASSWORD=docker \
-p 5432:5432 \
postgres
Это создаст базу данных с именем postgres
, к которой может получить доступ пользователь postgres
и пароль docker
. Эти значения могут использоваться в приведенном выше примере и, конечно, не должны использоваться в производстве.