View a markdown version of this page

$ Perzentil - Amazon DocumentDB

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

$ Perzentil

Neu ab Version 8.0.1.

Der $percentile Operator in Amazon DocumentDB berechnet angegebene Perzentilwerte für numerische Daten. Als Akkumulator berechnet er in der Phase einer Aggregationspipeline Perzentilwerte für Dokumente innerhalb einer Gruppe. $group Als Ausdruck berechnet er Perzentile für eine Reihe von Zahlen.

Parameter

  • input: Ein Ausdruck, der in einen numerischen Wert oder ein Array numerischer Werte aufgelöst wird.

  • p: Ein Array von Perzentilwerten zwischen 0 und 1, wobei jeder Wert ein zu berechnendes Perzentil darstellt. [0.25, 0.5, 0.75]Berechnet beispielsweise das 25., 50. und 75. Perzentil.

  • method: Eine Zeichenfolge, die die Berechnungsmethode angibt. Derzeit wird nur "approximate" unterstützt.

Behavior

Die "approximate" Methode verwendet den T-Digest-Algorithmus zur Berechnung ungefährer, perzentilbasierter Metriken. Bei kleinen Datensätzen können unterschiedliche Perzentilwerte zu demselben Ergebnis führen. Beispiel: Bei nur 5 Werten pro Gruppe geben p90 und p99 möglicherweise beide den Maximalwert in der Gruppe zurück. Die Genauigkeit verbessert sich, wenn die Anzahl der Datenpunkte zunimmt.

Beispiel (MongoDB Shell)

Das folgende Beispiel zeigt, wie der $percentile Operator verwendet wird, um das 25. und 75. Perzentil der Ergebnisse pro Klasse zu berechnen.

Erstellen Sie Beispieldokumente

db.students.insertMany([ { class: "A", score: 72 }, { class: "A", score: 85 }, { class: "A", score: 90 }, { class: "A", score: 68 }, { class: "A", score: 95 }, { class: "B", score: 80 }, { class: "B", score: 75 }, { class: "B", score: 92 }, { class: "B", score: 88 }, { class: "B", score: 70 } ]);

Beispiel für eine Abfrage

db.students.aggregate([ { $group: { _id: "$class", percentiles: { $percentile: { input: "$score", p: [0.25, 0.75], method: "approximate" } } }} ]);

Ausgabe

[ { "_id": "A", "percentiles": [72, 90] }, { "_id": "B", "percentiles": [75, 88] } ]

Beispiel für die Verwendung von Ausdrücken (MongoDB Shell)

Der $percentile Operator kann auch als Ausdruck innerhalb einer $project Stufe verwendet werden, um Perzentile eines Array-Feldes zu berechnen.

Erstellen Sie Beispieldokumente

db.surveys.insertMany([ { _id: 1, responses: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] }, { _id: 2, responses: [1, 3, 5, 7, 9, 11, 13, 15, 17, 19] } ]);

Beispiel für eine Abfrage

db.surveys.aggregate([ { $project: { quartiles: { $percentile: { input: "$responses", p: [0.25, 0.5, 0.75], method: "approximate" } } }} ]);

Ausgabe

[ { "_id": 1, "quartiles": [6, 10, 16] }, { "_id": 2, "quartiles": [5, 9, 15] } ]

Codebeispiele

Um ein Codebeispiel für die Verwendung des $percentile Operators anzuzeigen, wählen Sie die Registerkarte für die Sprache, die Sie verwenden möchten. Die folgenden Beispiele zeigen sowohl die Verwendung von Akkumulatoren (in$group) als auch die Verwendung von Ausdrücken (in$project):

Node.js
const { MongoClient } = require('mongodb'); async function example() { const uri = 'mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false'; const client = new MongoClient(uri); try { await client.connect(); const db = client.db('test'); // Accumulator usage: percentiles across grouped documents const students = db.collection('students'); const accumulatorResult = await students.aggregate([ { $group: { _id: "$class", percentiles: { $percentile: { input: "$score", p: [0.25, 0.75], method: "approximate" } } }} ]).toArray(); console.log('Accumulator result:', accumulatorResult); // Expression usage: percentiles of an array field const surveys = db.collection('surveys'); const expressionResult = await surveys.aggregate([ { $project: { quartiles: { $percentile: { input: "$responses", p: [0.25, 0.5, 0.75], method: "approximate" } } }} ]).toArray(); console.log('Expression result:', expressionResult); } finally { await client.close(); } } example();
Python
from pymongo import MongoClient def example(): client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false') try: db = client['test'] # Accumulator usage: percentiles across grouped documents students = db['students'] accumulator_result = list(students.aggregate([ { '$group': { '_id': '$class', 'percentiles': { '$percentile': { 'input': '$score', 'p': [0.25, 0.75], 'method': 'approximate' } } }} ])) print('Accumulator result:', accumulator_result) # Expression usage: percentiles of an array field surveys = db['surveys'] expression_result = list(surveys.aggregate([ { '$project': { 'quartiles': { '$percentile': { 'input': '$responses', 'p': [0.25, 0.5, 0.75], 'method': 'approximate' } } }} ])) print('Expression result:', expression_result) finally: client.close() example()