Χρήση MongoDB με Pandas, NumPy και PyArrow Data Engineering

Χρήση MongoDB με Pandas, NumPy και PyArrow Data Engineering

Oktober 2, 2022 0 Von admin

Αυτό το άρθρο δημοσιεύτηκε ως μέρος του Data Science Blogathon.

Εισαγωγή

Εάν είστε επιστήμονας δεδομένων ή προγραμματιστής Python φοράει το καπέλο του επιστήμονα δεδομένων, πιθανότατα έπρεπε να εργαστείτε με μερικά από αυτά τα εργαλεία και τεχνολογίες: Pandas, NumPy, PyArrow και MongoDB.

Εάν είστε νέοι σε αυτούς τους όρους, ακολουθεί μια γρήγορη περιγραφή μιας γραμμής αυτών των εργαλείων και τεχνολογιών:

  • Πάντα: Το Pandas είναι ένα γρήγορο, ισχυρό και εύχρηστο εργαλείο ανάλυσης και χειρισμού δεδομένων ανοιχτού κώδικα που βασίζεται στην Python.
  • NumPy: Το NumPy είναι μια βιβλιοθήκη για τη γλώσσα προγραμματισμού Python, που προσθέτει υποστήριξη για μεγάλους, πολυδιάστατους πίνακες και πίνακες, μαζί με μια μεγάλη συλλογή μαθηματικών συναρτήσεων υψηλού επιπέδου για λειτουργία σε αυτούς τους πίνακες
  • PyArrow: Βιβλιοθήκη Python για Apache Arrow
  • MongoDB: MongoDB είναι μια βάση δεδομένων εγγράφων ανοιχτού κώδικα και κορυφαία βάση δεδομένων NoSQL.

Σε αυτό το σεμινάριο, θα δούμε πώς να εισάγουμε και να εξάγουμε δεδομένα από τη βάση δεδομένων MongoDB στο Pandas DataFrame, τον πίνακα NumPy και τον πίνακα βέλους χρησιμοποιώντας το PyMongoArrow. Είναι ένα εργαλείο που κατασκευάστηκε από την MongoDB που σας επιτρέπει να μεταφέρετε δεδομένα μέσα και έξω από το MongoDB σε διάφορες άλλες μορφές δεδομένων, όπως το Pandas DataFrame, το NumPy array και το Arrow Table με πολύ εύκολο και αποτελεσματικό τρόπο.

Εγκατάσταση & Ρύθμιση

Για αυτό το άρθρο, υποθέτουμε ότι έχετε εγκατεστημένη την πρόσφατη έκδοση της Python στο σύστημά σας. Εγκαθιστώ PyMongoArrow εκτελώντας τις ακόλουθες εντολές στο τερματικό/powershell σας. Εάν έχετε ήδη εγκαταστήσει το PyMongoArrow, βεβαιωθείτε ότι είναι >=0.5.0 έκδοση, ώστε να μπορείτε να χρησιμοποιήσετε όλες τις λειτουργίες που εμφανίζονται σε αυτό το σεμινάριο.

python -m pip install pymongoarrow

Για να χρησιμοποιήσετε το PyMongoArrow με MongoDB Atlas (μια πλήρως διαχειριζόμενη βάση δεδομένων MongoDB στο cloud), πρέπει επίσης να εγκαταστήσουμε το πρόγραμμα οδήγησης pymongo του MongoDB με το επιπλέον SRV.

python -m pip install 'pymongo[srv]'

Εάν δεν έχετε εγκατεστημένα τα Panda, Numpy και PyArrow στο σύστημά σας, εκτελέστε τις ακόλουθες εντολές για να το κάνετε:

python -m pip install pandas numpy pyarrow

Σύνδεση στη βάση δεδομένων MongoDB σας

Σε αυτό το σεμινάριο, υποθέτουμε ότι είστε εξοικειωμένοι με τα βασικά των εννοιών PyMongo και MongoDB. Εάν όχι, κατευθυνθείτε προς το επίσημη τεκμηρίωση του PyMongo για ένα γρήγορο σεμινάριο.

Για αυτό το σεμινάριο, θα χρησιμοποιήσουμε το Free atlas cluster του MongoDB ως πηγή δεδομένων για λόγους απλότητας. Εάν έχετε ήδη λογαριασμό Atlas και δημιουργήσατε το πρώτο σας σύμπλεγμα, μεταβείτε στον πίνακα ελέγχου Atlas στο λάβετε τη συμβολοσειρά σύνδεσης. Εάν δεν έχετε δημιουργήσει ακόμη το πρώτο σας σύμπλεγμα Atlas, δεν χρειάζεται να ανησυχείτε – μπορείτε να ακολουθήσετε μερικά πολύ εύκολα βήματα για να δημιουργήστε το πρώτο σας σύμπλεγμα Atlas (τη βάση δεδομένων σας στο cloud), ανακτήστε τη συμβολοσειρά σύνδεσης για σύνδεση σε αυτήν και ακολουθήστε την.

Τώρα, ας εισάγουμε όλα τα απαραίτητα πακέτα:

import pymongo
import pymongoarrow
from pymongo import MongoClient

Τώρα, ας δημιουργήσουμε μια παρουσία MongoClient για να δημιουργήσουμε μια σύνδεση με τη βάση δεδομένων MongoDB στον Άτλαντα. Τώρα, εισαγάγετε τη συμβολοσειρά σύνδεσης συμπλέγματος ως όρισμα στη συνάρτηση «MongoClient.

client = MongoClient('Enter your Atlas cluster connection string here')

Σημείωση: Εάν συνδέεστε σε μια τοπικά εκτελούμενη παρουσία MongoDB που εκτελείται στον προεπιλεγμένο κεντρικό υπολογιστή και θύρα, τότε μπορείτε να συνδεθείτε σε αυτό και να την ακολουθήσετε. „πελάτης = MongoClient(‚localhost,‘ 27017)“

Ας συνδεθούμε σε μια δοκιμαστική βάση δεδομένων με το όνομα „test_database“ και μια δοκιμαστική συλλογή με το όνομα „test_collection“.

db = client.test_database
col = db.test_collection

Μια σημαντική σημείωση σχετικά με τις συλλογές (και τις βάσεις δεδομένων) στο MongoDB είναι ότι δημιουργούνται νωχελικά – καμία από τις παραπάνω εντολές δεν έχει εκτελέσει καμία λειτουργία στον διακομιστή MongoDB. Οι συλλογές και οι βάσεις δεδομένων δημιουργούνται όταν εισάγεται το πρώτο έγγραφο σε αυτές.

Τώρα, ας εισαγάγουμε μερικά έγγραφα στη συλλογή test_database.test_collection. Αλλά προτού το κάνουμε αυτό, ας εισαγάγουμε γρήγορα τη βιβλιοθήκη ημερομηνίας, καθώς ένα από τα πεδία στο έγγραφό μας θα είναι ημερομηνία.

from datetime import datetime
col.insert_many([
{'_id': 1, 'measure': 43, 'status':'active', 'installed_on': datetime(2022, 1, 8, 3, 43, 12)},
{'_id': 2, 'measure': 32, 'status':'active', 'installed_on': datetime(2022, 2, 2, 11, 43, 27)},
{'_id': 3, 'measure': 62, 'status':'inactive', 'installed_on': datetime(2022, 3, 12, 3, 53, 12)},
{'_id': 4, 'measure': 59, 'status':'active', 'installed_on': datetime(2022, 4, 8, 3, 22, 45)}
])

Τώρα, ας επαληθεύσουμε ότι τα δεδομένα έχουν εγγραφεί με επιτυχία στη βάση δεδομένων σας εκτελώντας τις ακόλουθες εντολές:

import pprint
for doc in col.find({}):
   pprint.pprint(doc)
έξοδος κώδικα

Όπως μπορείτε να δείτε, έχουμε εισαγάγει με επιτυχία 4 έγγραφα στη συλλογή μας.

Τώρα, ας εκτελέσουμε γρήγορα αυτές τις δύο γραμμές κώδικα για να επιδιορθώσετε το PyMongo. Αυτό θα μας επιτρέψει να χρησιμοποιήσουμε τη λειτουργικότητα του PyMongoArrow απευθείας σε περιπτώσεις συλλογής του PyMongo.

from pymongoarrow.monkey import patch_all
patch_all()

Εξαγωγή δεδομένων MongoDB σε άλλες μορφές

Εξαγωγή δεδομένων από το MongoDB στο Pandas DataFrame

Τώρα που έχουμε εισαγάγει δεδομένα στη βάση δεδομένων MongoDB, ας δούμε γρήγορα πώς μπορούμε να εξάγουμε δεδομένα σε άλλες μορφές δεδομένων. Θα χρησιμοποιήσουμε το PyMongoArrow find_pandas_all() λειτουργία εξαγωγής αποτελεσμάτων MongoDB που έχουν οριστεί στο Pandas DataFrame. Θα περάσουμε σε αυτή τη συνάρτηση ένα κατηγόρημα ερωτήματος για να φιλτράρουμε τα επιθυμητά έγγραφα. Για παράδειγμα, θέλουμε το MongoDB να επιστρέψει όλα τα έγγραφα που έχουν τιμή πεδίου ‚μέτρο‘ μεγαλύτερη από 40.

import pandas as pd
df = col.find_pandas_all({'measure': {'$gt': 40}})

Ας εκτυπώσουμε γρήγορα το περιεχόμενο του θέματος για να επαληθεύσουμε ότι τα δεδομένα έχουν εγγραφεί με επιτυχία σε αυτό.

print(df)
MongoDB

Όπως μπορείτε να δείτε, έχουμε εξαγάγει με επιτυχία δεδομένα MongoDB σε ένα Pandas DataFrame.

Εξαγωγή δεδομένων από το MongoDB σε NumPy Array

Εδώ, θα χρησιμοποιήσουμε το PyMongoArrow find_numpy_all() λειτουργία για την εξαγωγή αποτελεσμάτων MongoDB που έχουν οριστεί σε NumPy Array. Σε αυτήν την περίπτωση, θα αφήσουμε κενό το πεδίο κατηγορήματος ερωτήματος για να μας επιστρέψει όλα τα έγγραφα της συλλογής.

Γνωρίζατε ότι το PyMongoArrow σάς επιτρέπει επίσης να ορίσετε το σχήμα δεδομένων με μη αυτόματο τρόπο, ώστε οι τιμές των εξαγόμενων πεδίων δεδομένων να είναι στην επιθυμητή μορφή; Μπορείτε να ορίσετε το σχήμα δημιουργώντας το pymongoarrow.api.Schema χρησιμοποιώντας μια αντιστοίχιση ονομάτων πεδίων σε προσδιοριστές τύπου. Για παράδειγμα:

from pymongoarrow.api import Schema
# let's define the schema
schema = Schema({'_id': int, 'measure': float, 'status': str, 'installed_on': datetime})
import numpy as np
npa = col.find_numpy_all({},schema=schema)

Ας εκτυπώσουμε γρήγορα το περιεχόμενο του πίνακα „NPA“ για να επαληθεύσουμε ότι τα δεδομένα έχουν εγγραφεί με επιτυχία σε αυτόν.

npa
έξοδος κώδικα

Εξαγωγή δεδομένων από το MongoDB στον πίνακα βέλους

Εδώ, θα χρησιμοποιήσουμε το PyMongoArrow’s find_arrow_all() λειτουργία για την εξαγωγή αποτελεσμάτων MongoDB που ορίζονται στον πίνακα βέλους. Σε αυτήν την περίπτωση, θα αφήσουμε κενό το πεδίο κατηγορήματος ερωτήματος για να μας επιστρέψει όλα τα έγγραφα της συλλογής.

import pyarrow
arrow_table = col.find_arrow_all({})

Ας εκτυπώσουμε γρήγορα το περιεχόμενο του πίνακα ‚arrow_table‘ για να επαληθεύσουμε ότι τα δεδομένα έχουν εγγραφεί με επιτυχία σε αυτόν.

print(arrow_table)
έξοδος κώδικα

Εισαγωγή δεδομένων από άλλες μορφές δεδομένων

Εισαγωγή δεδομένων από το Pandas DataFrame στο MongoDB

Η εισαγωγή δεδομένων από το Pandas DataFrame είναι ξεκάθαρη με χρήση του PyMongoArrow γράφω() λειτουργία. Η συνάρτηση εγγραφής (συλλογή, πίνακας) παίρνει δύο ορίσματα:

συλλογή – Όνομα της συλλογής στην οποία θέλετε να γράψετε τα δεδομένα.
πινακοειδής – που είναι μια παρουσία του αποτελέσματος.ArrowWriteResult. Θα μπορούσε να είναι το πλαίσιο δεδομένων του panda, το NumPy ndarray ή ο πίνακας βέλους

Ας εισαγάγουμε τη συνάρτηση ‚write‘ και ας την καλέσουμε. Θα του περάσουμε δύο ορίσματα, δηλαδή «το όνομα της συλλογής όπου θέλουμε να γράψουμε τα δεδομένα και το «πλαίσιο δεδομένων που θέλουμε να γράψουμε στο MongoDB». Θα χρησιμοποιήσουμε ξανά το ‚df‘ DataFrame που δημιουργήσαμε στο προηγούμενο παράδειγμα.

from pymongoarrow.api import write
write(db.pandas_data, df)

Ας επαληθεύσουμε γρήγορα ότι το περιεχόμενο του ‚df‘ DataFrame έχει γραφτεί με επιτυχία εκτελώντας τις ακόλουθες εντολές:

for doc in db.pandas_data.find({}):
pprint.pprint(doc)

MongoDB

Όπως μπορείτε να δείτε, έχουμε γράψει με επιτυχία δεδομένα Pandas DataFrame στο MongoDB.

Εισαγωγή δεδομένων από το NumPy Array στο MongoDB

Θα χρησιμοποιήσουμε τη συνάρτηση write() και θα τη μεταβιβάσουμε σε δύο ορίσματα, δηλαδή «όνομα της συλλογής όπου θέλουμε να γράψουμε τα δεδομένα και «numpy array που θέλουμε να γράψουμε στο MongoDB». Θα χρησιμοποιήσουμε ξανά τον πίνακα ‚NPA‘ που δημιουργήσαμε στο προηγούμενο παράδειγμα.

write(db.numpy_data, npa)

Ας επαληθεύσουμε γρήγορα ότι το περιεχόμενο του πίνακα ‚NPA‘ έχει γραφτεί με επιτυχία στο MongoDB εκτελώντας τις ακόλουθες εντολές:

for doc in db.numpy_data.find({}):
   pprint.pprint(doc)
MongoDB

Όπως μπορείτε να δείτε, έχουμε γράψει με επιτυχία τα δεδομένα του numpy array.

Εισαγωγή δεδομένων από τον πίνακα βέλους στο MongoDB

Θα χρησιμοποιήσουμε τη συνάρτηση write() και θα τη μεταβιβάσουμε σε δύο ορίσματα, δηλαδή «όνομα της συλλογής όπου θέλουμε να γράψουμε τα δεδομένα και «Πίνακας βέλους που θέλουμε να γράψουμε στο MongoDB». Θα χρησιμοποιήσουμε ξανά τον πίνακα ‚arrow_table‘ που δημιουργήσαμε στο προηγούμενο παράδειγμα.

write(db.arrow_data, arrow_table)

Ας επαληθεύσουμε γρήγορα ότι το περιεχόμενο του πίνακα ‚arrow_table‘ έχει γραφτεί με επιτυχία στο MongoDB εκτελώντας τις ακόλουθες εντολές:

for doc in db.arrow_data.find({}):
   pprint.pprint(doc)
MongoDB

Όπως μπορείτε να δείτε, έχουμε επιτυχία

συμπέρασμα

Σε όλο αυτό το άρθρο, εξετάζουμε το ίδιο εργαλείο για να γράψουμε αυτά τα δεδομένα πίσω στη βάση δεδομένων MongoDB χωρίς κόπο. Μερικά από τα βασικά συμπεράσματα είναι:

  1. Χρησιμοποιήσαμε τη συνάρτηση find_pandas_all() για να φορτώσουμε σύνολα αποτελεσμάτων ερωτημάτων MongoDB στο Pandas DataFrame.
  2. Χρησιμοποιήσαμε τη συνάρτηση find_numpy_all() για να φορτώσουμε σύνολα αποτελεσμάτων ερωτημάτων MongoDB στον πίνακα NumPy.
  3. Χρησιμοποιήσαμε τη συνάρτηση find_arrow_all() για να φορτώσουμε τα σύνολα αποτελεσμάτων ερωτημάτων MongoDB στον πίνακα βέλους
  4. Χρησιμοποιήσαμε τη συνάρτηση write() του PyMongoArrow για να γράψουμε τον τύπο DataFrame των Pandas, τον τύπο πίνακα του NumPy και τα δεδομένα τύπου πίνακα του Arrow πίσω στη βάση δεδομένων.

Σας συνιστώ ανεπιφύλακτα να δοκιμάσετε αυτό το εργαλείο και εάν έχετε οποιαδήποτε σχόλια/ερωτήσεις σχετικά με το PyMongoArrow, μη διστάσετε να τις ρωτήσετε στο MongoDB Φόρουμ κοινότητας. Αν θέλετε να μάθετε περισσότερα για το PyMongoArrow, ρίξτε μια ματιά στο δικό μας τεκμηρίωση.

Τα μέσα που εμφανίζονται σε αυτό το άρθρο δεν ανήκουν στο Analytics Vidhya και χρησιμοποιούνται κατά την κρίση του συγγραφέα.