Технології, як MongoDB та pandas, дають розробникам можливість ефективно зберігати та аналізувати дані. MongoDB чудово підходить для гнучкого та масштабованого зберігання, тоді як Pandas виділяється в маніпуляціях і аналізі даних.
У цій статті ми розглянемо, як безшовно інтегрувати Pandas з MongoDB.
Перед тим як почати, переконайтеся, що у вас є:
- Встановлений Python на вашій системі
- Налаштований MongoDB (локальний або хмарний)
- Встановлені бібліотеки: pymongo, pandas
pip install pymongo pandas
Підключення MongoDB до Python
Використовуйте бібліотеку pymongo, щоб встановити з’єднання з вашою базою даних MongoDB.
from pymongo import MongoClient
# Підключення до MongoDB
client = MongoClient("mongodb://localhost:27017/")
db = client["sales_data"]
collection = db["transactions"]
Отримання даних у DataFrame Pandas
MongoDB зберігає дані у вигляді документів, які можна отримати за допомогою find(). Ми перетворюємо ці документи у DataFrame Pandas. DataFrame у Pandas — це двовимірна таблична структура даних, що схожа на таблицю в базі даних. Вона складається з рядків та стовпців і надає потужні можливості для маніпуляцій, аналізу та візуалізації даних. Тут ми відображаємо перші 5 записів DataFrame за допомогою head().
# Отримання даних з MongoDB
data = list(collection.find())
# Перетворення у DataFrame
df = pd.DataFrame(data)
print(df.head())
Обробка відсутніх даних
При роботі з реальними наборами даних відсутні значення є поширеною проблемою і можуть вплинути на аналіз. Метод fillna() в Pandas використовується для заміни цих відсутніх значень на зазначене значення. Це гарантує, що в DataFrame не буде значень NaN, що в іншому випадку може спричинити помилки під час обчислень.
df.fillna(0, inplace = True)
Фільтрація даних
Pandas дозволяє фільтрувати рядки за певними умовами. Ось кілька прикладів, де ми обчислюємо транзакції з великими сумами, фільтруючи ті, у яких amount більше ніж 100. У наступному запиті ми отримуємо транзакції для категорії Groceries.
# Транзакції великої вартості
high_value_transactions = df[df["amount"] > 100]
print(high_value_transactions)
# Фільтрація за категорією
groceries_transactions = df[df["category"] == "Groceries"]
print(groceries_transactions)
Сортування даних
Сортування даних може надати уявлення про тенденції. Тут ми сортуємо транзакції за amount у спадному порядку. Потім сортуємо транзакції за sale_date в порядку зростання.
# Сортування за сумою (спадний порядок)
sorted_by_amount = df.sort_values(by="amount", ascending=False)
print(sorted_by_amount)
# Сортування за датою (спадний порядок)
df["sale_date"] = pd.to_datetime(df["sale_date"])
sorted_by_date = df.sort_values(by="sale_date", ascending=True)
print(sorted_by_date)
Групування та агрегації
Агрегації дозволяють підсумувати дані для кращих висновків. З Pandas ми можемо ефективно виконувати різні агрегації. Код нижче групує транзакції за category і підсумовує значення amount для кожної категорії, потім обчислює середні витрати на customer_id, що дає уявлення про поведінку клієнтів. Наступний приклад показує, як підрахувати кількість транзакцій за категорією.
# Загальна сума витрачених коштів за категорією
category_totals = df.groupby("category")["amount"].sum()
print(category_totals)
# Середні транзакції на клієнта
avg_transaction_per_customer = df.groupby("customer_id")["amount"].mean()
print(avg_transaction_per_customer)
# Кількість транзакцій за категорією
nums_transactions_per_category = df.groupby("category")["transaction_id"].count()
print(nums_transactions_per_category)
Динамічна фільтрація
Функція query() в Pandas є потужним інструментом для динамічної фільтрації DataFrame за допомогою виразу у вигляді рядка.
Просте порівняння рівності підтримується у більшості випадків, але діапазонні запити, більші/менші за значення, тощо не підтримуються за допомогою звичайного шифрування. Це тому, що вони вимагають доступу до незашифрованих даних для оцінки відповідної інформації для витягування. У цьому випадку, використовуючи гомоморфне шифрування, дані шифруються таким чином, щоб можна було виконувати математичні операції — порівняння, пошук або обчислення — без їх дешифрування. Система поверне лише ті дані, які відповідають математичній умові, залишаючи їх зашифрованими.
Можна уявити це як людину, що поміщає числа у герметичні коробки з механізмом, який дозволяє з'ясувати, чи є число більшим за 100, не відкриваючи коробку. Таким чином, ви можете фільтрувати коробки без перегляду чисел всередині.
Крок 3: Виконання пошуку і повернення результатів
Тепер, коли інфраструктура готова (зашифровані дані та індекси), можна виконати сам пошук. Коли користувач вводить запит (наприклад, "знайти всіх котів з ім'ям 'Міттенс'"), система шифрує запит так само, як і дані. Під час пошуку система не порівнює текст "Міттенс" з оригінальними даними (які, звісно, зашифровані), а порівнює зашифровану версію "Міттенс" з зашифрованими індексами або зашифрованими властивостями даних, залежно від вибраного алгоритму. Після того, як система виконає пошук, вона поверне результати користувачу. Все це виконується без відкриття вмісту даних для тих, хто не має відповідного ключа.
Як це працює в реальному світі?
Системи великих даних вимагають інноваційних рішень для захисту конфіденційності, особливо коли потрібно швидко отримувати великі обсяги даних. Технологія запитуваного шифрування стає корисною, коли потрібно зашифрувати дані, але все ще дозволяти виконувати пошук і аналіз.
Уявіть собі велику медичну систему, яка зберігає медичну історію мільйонів пацієнтів. Система використовує запитуване шифрування для захисту конфіденційності пацієнтів, і ми хочемо провести дослідження ефективності нового ліків:
- Зашифровані дані: Кожен запис пацієнта містить зашифровану інформацію про вік, стать, діагнози, отримані лікування та результати тестів.
- Запит: Дослідники хочуть перевірити ефективність нового ліків для лікування діабету 2 типу.
- Виконання запиту:
a. Шифрування запиту: Дослідники шифрують критерії пошуку (наприклад, "пацієнти старше 50 років з діагнозом діабет 2 типу, які отримали нові ліки").
b. Пошук по індексах: Система шукає відповідність між зашифрованим запитом і зашифрованими індексами медичних карток.
c. Зашифровані результати: Система повертає зашифровані записи, які відповідають критеріям, але без розкриття чутливої інформації, такої як імена чи номери медичних карток.
d. Статистичний аналіз: Дослідники можуть проводити статистичний аналіз на зашифрованих результатах, щоб визначити ефективність ліків, не розкриваючи ідентичність пацієнтів.
Технологія запитуваного шифрування є життєво важливим рішенням у світі, де кожен елемент інформації повинен бути захищений, але при цьому необхідний швидкий і ефективний доступ до даних. Розвиток у галузі великих даних вимагає балансу між конфіденційністю та ефективністю, і запитуване шифрування дозволяє захищати особисту інформацію без шкоди для складних пошуків і швидких відповідей.
Перекладено з: Working with DataWorkflow: Integrating Pandas with MongoDB