Principe de base : les données sont des documents
BSON
)collections
JSON
¶JavaScript Object Notation
, créé en 2005{ "nom": "jollois", "prenom": "fx" }
[ 1, 5, 10]
string
et number
) et trois constantes (true
, false
, null
)Validation possible du JSON sur jsonlint.com/
JSON
¶{
"address": {
"building": "469",
"coord": [
-73.9617,
40.6629
],
"street": "Flatbush Avenue",
"zipcode": "11225"
},
"borough": "Brooklyn",
"cuisine": "Hamburgers",
"grades": [
{
"date": "2014-12-30 01:00:00",
"grade": "A",
"score": 8
},
{
"date": "2014-07-01 02:00:00",
"grade": "B",
"score": 23
}
],
"name": "Wendy'S",
"restaurant_id": "30112340"
}
BSON
: extension de JSON
Schéma dynamique
ALTER TABLE
ou de redesign de la basefind()
: pour tout ce qui est restriction et projectionaggregate()
: pour tout ce qui est calcul de variable, d'aggrégats et de manipulations diversesUtilisation du package pymongo
pymongo.MongoClient()
import pymongo
URI = 'mongodb+srv://user:user@cluster0.ougec.mongodb.net/test'
client = pymongo.MongoClient(URI) # enlever le paramètre URI si connexion locale
db = client.test
restaurants
¶Dans ce document, nous allons travailler sur une base des restaurants New-Yorkais.
Voici le premier document est présenté ci-dessous sur les plus de 25000 restaurants new-yorkais (base de test fournie par Mongo)
{
"_id" : ObjectId("58ac16d1a251358ee4ee87de"),
"address" : {
"building" : "469",
"coord" : [
-73.961704,
40.662942
],
"street" : "Flatbush Avenue",
"zipcode" : "11225"
},
"borough" : "Brooklyn",
"cuisine" : "Hamburgers",
"grades" : [
{
"date" : ISODate("2014-12-30T00:00:00Z"),
"grade" : "A",
"score" : 8
},
{
"date" : ISODate("2014-07-01T00:00:00Z"),
"grade" : "B",
"score" : 23
},
{
"date" : ISODate("2013-04-30T00:00:00Z"),
"grade" : "A",
"score" : 12
},
{
"date" : ISODate("2012-05-08T00:00:00Z"),
"grade" : "A",
"score" : 12
}
],
"name" : "Wendy'S",
"restaurant_id" : "30112340"
}
python
¶Les données JSON
sont similaires à un dictionnaire python
. Pour récupérer le premier document, nous utilisons la fonction find()
de l'objet créé m
.
d = db.restaurants.find(limit = 1)
d
<pymongo.cursor.Cursor at 0x109fac760>
L'objet retourné est un curseur, et non le résultat. Nous avons celui-ci lorsque nous utilisons d
dans une commande telle qu'une transformation en list
par exemple. Une fois le résultat retourné (un seul élément ici), le curseur ne renvoie plus rien
list(d)
[{'_id': ObjectId('60006d6aa7aafd5a6d45ca9a'), 'address': {'building': '1007', 'coord': [-73.856077, 40.848447], 'street': 'Morris Park Ave', 'zipcode': '10462'}, 'borough': 'Bronx', 'cuisine': 'Bakery', 'grades': [{'date': datetime.datetime(2014, 3, 3, 0, 0), 'grade': 'A', 'score': 2}, {'date': datetime.datetime(2013, 9, 11, 0, 0), 'grade': 'A', 'score': 6}, {'date': datetime.datetime(2013, 1, 24, 0, 0), 'grade': 'A', 'score': 10}, {'date': datetime.datetime(2011, 11, 23, 0, 0), 'grade': 'A', 'score': 9}, {'date': datetime.datetime(2011, 3, 10, 0, 0), 'grade': 'B', 'score': 14}], 'name': 'Morris Park Bake Shop', 'restaurant_id': '30075445'}]
list(d)
[]
count_documents({})
pour dénombrer les documents{}
est à mettre obligatoirementestimated_document_count()
pour estimer le nombre de documents, à utiliser de préférence en cas de multiples serveurs et de données massivesdb.restaurants.count_documents({})
25359
db.restaurants.estimated_document_count()
25359
Pour sélectionner les documents, nous allons utiliser le paramètre dans la fonction count_documents()
(ainsi que dans les fonctions distinct()
et find()
que nous verrons plus tard).
{}
: tous les documents{ "champs": valeur }
: documents ayant cette valeur pour ce champs{ condition1, condition2 }
: documents remplissant la condition 1 ET la condition 2"champs.sous_champs"
: permet d'accéder donc à un sous-champs d'un champs (que celui-ci soit un littéral ou un tableau){ "champs": { "$opérateur": expression }}
: utilisation d'opérateurs dans la recherche$in
: comparaison à un ensemble de valeurs$gt
, $gte
, $lt
, $lte
, $ne
: comparaison (resp. greater than, greater than or equal, less than, less than or equal, not equal)db.restaurants.count_documents({ "borough": "Brooklyn" })
6086
db.restaurants.count_documents({ "borough": "Brooklyn", "cuisine": "French" })
54
db.restaurants.count_documents({ "borough": "Brooklyn", "cuisine": { "$in": ["French", "Italian"]} })
246
db.restaurants.count_documents(
{
"borough": "Brooklyn",
"cuisine": { "$in": ["French", "Italian"]}
}
)
246
street
du champs address
db.restaurants.count_documents(
{
"address.street": "Franklin Street"
}
)
25
db.restaurants.count_documents(
{
"grades.score": 0
}
)
1246
db.restaurants.count_documents(
{
"grades.score": { "$lte": 5 }
}
)
10650
On peut aussi voir la liste des valeurs distinctes d'un attribut, avec la fonction distinct()
.
borough
), pour tous les restaurantsdb.restaurants.distinct(key = "borough")
['Bronx', 'Brooklyn', 'Manhattan', 'Missing', 'Queens', 'Staten Island']
db.restaurants.distinct(
key = "cuisine",
query = { "borough": "Brooklyn" }
)
['Afghan', 'African', 'American ', 'Armenian', 'Asian', 'Australian', 'Bagels/Pretzels', 'Bakery', 'Bangladeshi', 'Barbecue', 'Bottled beverages, including water, sodas, juices, etc.', 'Brazilian', 'Café/Coffee/Tea', 'Cajun', 'Caribbean', 'Chicken', 'Chilean', 'Chinese', 'Chinese/Cuban', 'Chinese/Japanese', 'Continental', 'Creole', 'Creole/Cajun', 'Czech', 'Delicatessen', 'Donuts', 'Eastern European', 'Egyptian', 'English', 'Ethiopian', 'Filipino', 'French', 'Fruits/Vegetables', 'German', 'Greek', 'Hamburgers', 'Hawaiian', 'Hotdogs', 'Hotdogs/Pretzels', 'Ice Cream, Gelato, Yogurt, Ices', 'Indian', 'Indonesian', 'Irish', 'Italian', 'Japanese', 'Jewish/Kosher', 'Juice, Smoothies, Fruit Salads', 'Korean', 'Latin (Cuban, Dominican, Puerto Rican, South & Central American)', 'Mediterranean', 'Mexican', 'Middle Eastern', 'Moroccan', 'Not Listed/Not Applicable', 'Nuts/Confectionary', 'Other', 'Pakistani', 'Pancakes/Waffles', 'Peruvian', 'Pizza', 'Pizza/Italian', 'Polish', 'Portuguese', 'Russian', 'Salads', 'Sandwiches', 'Sandwiches/Salads/Mixed Buffet', 'Scandinavian', 'Seafood', 'Soul Food', 'Soups & Sandwiches', 'Southwestern', 'Spanish', 'Steak', 'Tapas', 'Tex-Mex', 'Thai', 'Turkish', 'Vegetarian', 'Vietnamese/Cambodian/Malaysia']
db.restaurants.distinct(
key = "grades.grade",
query = { "borough": "Brooklyn" }
)
['A', 'B', 'C', 'Not Yet Graded', 'P', 'Z']
find()
pour réaliser les restrictions et projectionslimit
pour n'avoir que les $n$ premiers documentssort
pour effectuer un tri des documentsDataFrame
(du module pandas
)Dans la fonction find()
, pour choisir les champs à afficher, le deuxième paramètre permet de faire une projection avec les critères suivants :
_id
){ "champs": 1 }
: champs à afficher{ "champs": 0 }
: champs à ne pas afficher_id
){ "_id": 0, "champs": 1, ...}
Toujours dans la fonction find()
, il est possible de faire le tri des documents, avec le paramètre sort
qui prend un tuple composé de 1 ou plusieurs tuples indiquant les critères de tri
( "champs", 1 )
: tri croissant( "champs", -1 )
: tri décroissantDans ces fonctions, on peut aussi limiter l'exploration à une partie, avec les paramètres suivant :
limit
: restreint le nombre de résultats fournisskip
: ne considère pas les n premiers documentsNotez le contenu des colonnes address
et grades
.
import pandas
pandas.DataFrame(db.restaurants.find(limit = 5))
_id | address | borough | cuisine | grades | name | restaurant_id | |
---|---|---|---|---|---|---|---|
0 | 60006d6aa7aafd5a6d45ca9a | {'building': '1007', 'coord': [-73.856077, 40.... | Bronx | Bakery | [{'date': 2014-03-03 00:00:00, 'grade': 'A', '... | Morris Park Bake Shop | 30075445 |
1 | 60006d6aa7aafd5a6d45ca9b | {'building': '469', 'coord': [-73.961704, 40.6... | Brooklyn | Hamburgers | [{'date': 2014-12-30 00:00:00, 'grade': 'A', '... | Wendy'S | 30112340 |
2 | 60006d6aa7aafd5a6d45ca9c | {'building': '351', 'coord': [-73.985135599999... | Manhattan | Irish | [{'date': 2014-09-06 00:00:00, 'grade': 'A', '... | Dj Reynolds Pub And Restaurant | 30191841 |
3 | 60006d6aa7aafd5a6d45ca9d | {'building': '2780', 'coord': [-73.98241999999... | Brooklyn | American | [{'date': 2014-06-10 00:00:00, 'grade': 'A', '... | Riviera Caterer | 40356018 |
4 | 60006d6aa7aafd5a6d45ca9e | {'building': '97-22', 'coord': [-73.8601152, 4... | Queens | Jewish/Kosher | [{'date': 2014-11-24 00:00:00, 'grade': 'Z', '... | Tov Kosher Kitchen | 40356068 |
"street"
et "borough"
)c = db.restaurants.find({ "name": "Shake Shack" }, { "address.street": 1, "borough": 1 })
pandas.DataFrame(c)
_id | address | borough | |
---|---|---|---|
0 | 60006d6ca7aafd5a6d45ec73 | {'street': 'Columbus Avenue'} | Manhattan |
1 | 60006d6ca7aafd5a6d45f66d | {'street': 'West 44 Street'} | Manhattan |
2 | 60006d6ca7aafd5a6d45f66e | {'street': 'East 86 Street'} | Manhattan |
3 | 60006d6ca7aafd5a6d45fe35 | {'street': 'North End Avenue'} | Manhattan |
4 | 60006d6ca7aafd5a6d45ff7f | {'street': 'Fulton Street'} | Brooklyn |
5 | 60006d6da7aafd5a6d461437 | {'street': 'Jfk International Airport'} | Queens |
6 | 60006d6da7aafd5a6d4618f1 | {'street': 'Grand Central Terminal'} | Manhattan |
7 | 60006d6da7aafd5a6d46197c | {'street': 'Jfk International Airport'} | Queens |
8 | 60006d6ea7aafd5a6d462178 | {'street': 'Old Fulton Street'} | Brooklyn |
9 | 60006d6ea7aafd5a6d46217a | {'street': 'Flatbush Avenue'} | Brooklyn |
10 | 60006d6ea7aafd5a6d462955 | {'street': '3Rd Ave'} | Manhattan |
c = db.restaurants.find(
{ "name": "Shake Shack" },
{ "_id": 0, "address.street": 1, "borough": 1 }
)
pandas.DataFrame(c)
address | borough | |
---|---|---|
0 | {'street': 'Columbus Avenue'} | Manhattan |
1 | {'street': 'West 44 Street'} | Manhattan |
2 | {'street': 'East 86 Street'} | Manhattan |
3 | {'street': 'North End Avenue'} | Manhattan |
4 | {'street': 'Fulton Street'} | Brooklyn |
5 | {'street': 'Jfk International Airport'} | Queens |
6 | {'street': 'Grand Central Terminal'} | Manhattan |
7 | {'street': 'Jfk International Airport'} | Queens |
8 | {'street': 'Old Fulton Street'} | Brooklyn |
9 | {'street': 'Flatbush Avenue'} | Brooklyn |
10 | {'street': '3Rd Ave'} | Manhattan |
c = db.restaurants.find(
{"borough": "Queens", "grades.score": { "$gte": 50}},
{"_id": 0, "name": 1, "grades.score": 1, "address.street": 1},
limit = 5
)
pandas.DataFrame(c)
address | grades | name | |
---|---|---|---|
0 | {'street': 'Horace Harding Boulevard'} | [{'score': 12}, {'score': 4}, {'score': 11}, {... | Richer'S Bakery |
1 | {'street': 'Bell Boulevard'} | [{'score': 52}, {'score': 12}, {'score': 22}, ... | Tequilla Sunrise |
2 | {'street': 'Rockaway Beach Boulevard'} | [{'score': 10}, {'score': 2}, {'score': 10}, {... | Rockaway Beach Inn |
3 | {'street': 'Broadway'} | [{'score': 13}, {'score': 13}, {'score': 13}, ... | Alfonso'S Bar |
4 | {'street': 'Woodhaven Boulevard'} | [{'score': 2}, {'score': 64}, {'score': 9}, {'... | Pio Pio |
c = db.restaurants.find(
{"name": "Shake Shack", "borough": {"$in": ["Queens", "Brooklyn"]}},
{"_id": 0, "address.street": 1, "borough": 1}
)
pandas.DataFrame(c)
address | borough | |
---|---|---|
0 | {'street': 'Fulton Street'} | Brooklyn |
1 | {'street': 'Jfk International Airport'} | Queens |
2 | {'street': 'Jfk International Airport'} | Queens |
3 | {'street': 'Old Fulton Street'} | Brooklyn |
4 | {'street': 'Flatbush Avenue'} | Brooklyn |
c = db.restaurants.find(
{"borough": "Queens", "grades.score": { "$gt": 50}},
{"_id": 0, "name": 1, "address.street": 1},
sort = (("address.street", -1), ("name", 1))
)
pandas.DataFrame(c)
address | name | |
---|---|---|
0 | {'street': 'Woodward Avenue'} | Sabores Restaurant & Bar |
1 | {'street': 'Woodside Avenue'} | Salza Pizza |
2 | {'street': 'Woodside Avenue'} | Spicy Shallot |
3 | {'street': 'Woodhaven Boulevard'} | Fresh To You |
4 | {'street': 'Woodhaven Boulevard'} | Pio Pio |
... | ... | ... |
73 | {'street': '30 Avenue'} | Queens Comfort Restaurant |
74 | {'street': '20 Avenue'} | Cafeteria (Usps Bldng) |
75 | {'street': '153 Avenue'} | Tuscany Deli |
76 | {'street': '131 Street'} | Spa Castle/Juice Farm |
77 | {'street': '102 Street'} | Tacos Mexico |
78 rows × 2 columns
Cette fonction va prendre en paramètre un pipeline
: tableau composé d'une suite d'opérations
Fonction | Opération |
---|---|
$limit |
restriction à un petit nombre de documents (très utiles pour tester son calcul) |
$sort |
tri sur les documents |
$match |
restriction sur les documents à utiliser |
$unwind |
séparation d'un document en plusieurs sur la base d'un tableau |
$addFields |
ajout d'un champs dans les documents |
$project |
redéfinition des documents |
$group |
regroupements et calculs d'aggégrats |
$sortByCount |
regroupement, calcul de dénombrement et tri déccroissant en une opération |
$lookup |
jointure avec une autre collection |
... |
pipeline
¶Les opérations se font dans l'ordre d'écriture, et le même opérateur peut donc apparaître plusieurs fois
$limit
: un entier$sort
: identique à celle du paramètre sort
de la fonction find()
$match
: identique à celle du paramètre query
des autres fonctions$unwind
: nom du tableau servant de base pour le découpage (précédé d'un $
)$sortByCount
: nom du champs sur lequel on veut le dénombrement et le tri décroissant selon le résultatpipeline
¶$project
: redéfinition des documents
{ "champs" : 1 }
: conservation du champs (0 si suppression - idem que dans fields
, pas de mélange sauf pour _id
){ "champs": { "$opérateur" : expression }}
: permet de définir un nouveau champs{ "nouveau_champs": "$ancien_champs" }
: renommage d'un champsQuelques opérateurs utiles pour la projection (plus d'info ici)
$arrayElemAt
: élément d'un tableau$first
et $last
: premier ou dernier élément du tableau$size
: taille d'un tableau$substr
: sous-chaîne de caractères$cond
: permet de faire une condition (genre de if then else)pipeline
¶$group
: calcul d'agrégats
_id
: déclaration du critère de regroupement$champs
: regroupement selon ce champs{ "a1": "$champs1", ... }
: regroupement multiple (avec modification des valeurs possible)$sum
: somme (soit de valeur fixe - 1 pour faire un décompte donc, soit d'un champs spécifique)$avg, $min, $max
$addToSet
: regroupement des valeurs distinctes d'un champs dans un tableau $push
: aggrégation de champs dans un tableauc = db.restaurants.aggregate(
[
{"$limit": 10 }
]
)
pandas.DataFrame(c)
_id | address | borough | cuisine | grades | name | restaurant_id | |
---|---|---|---|---|---|---|---|
0 | 60006d6aa7aafd5a6d45ca9a | {'building': '1007', 'coord': [-73.856077, 40.... | Bronx | Bakery | [{'date': 2014-03-03 00:00:00, 'grade': 'A', '... | Morris Park Bake Shop | 30075445 |
1 | 60006d6aa7aafd5a6d45ca9b | {'building': '469', 'coord': [-73.961704, 40.6... | Brooklyn | Hamburgers | [{'date': 2014-12-30 00:00:00, 'grade': 'A', '... | Wendy'S | 30112340 |
2 | 60006d6aa7aafd5a6d45ca9c | {'building': '351', 'coord': [-73.985135599999... | Manhattan | Irish | [{'date': 2014-09-06 00:00:00, 'grade': 'A', '... | Dj Reynolds Pub And Restaurant | 30191841 |
3 | 60006d6aa7aafd5a6d45ca9d | {'building': '2780', 'coord': [-73.98241999999... | Brooklyn | American | [{'date': 2014-06-10 00:00:00, 'grade': 'A', '... | Riviera Caterer | 40356018 |
4 | 60006d6aa7aafd5a6d45ca9e | {'building': '97-22', 'coord': [-73.8601152, 4... | Queens | Jewish/Kosher | [{'date': 2014-11-24 00:00:00, 'grade': 'Z', '... | Tov Kosher Kitchen | 40356068 |
5 | 60006d6aa7aafd5a6d45ca9f | {'building': '8825', 'coord': [-73.8803827, 40... | Queens | American | [{'date': 2014-11-15 00:00:00, 'grade': 'Z', '... | Brunos On The Boulevard | 40356151 |
6 | 60006d6aa7aafd5a6d45caa0 | {'building': '2206', 'coord': [-74.1377286, 40... | Staten Island | Jewish/Kosher | [{'date': 2014-10-06 00:00:00, 'grade': 'A', '... | Kosher Island | 40356442 |
7 | 60006d6aa7aafd5a6d45caa1 | {'building': '7114', 'coord': [-73.9068506, 40... | Brooklyn | Delicatessen | [{'date': 2014-05-29 00:00:00, 'grade': 'A', '... | Wilken'S Fine Food | 40356483 |
8 | 60006d6aa7aafd5a6d45caa2 | {'building': '6409', 'coord': [-74.00528899999... | Brooklyn | American | [{'date': 2014-07-18 00:00:00, 'grade': 'A', '... | Regina Caterers | 40356649 |
9 | 60006d6aa7aafd5a6d45caa3 | {'building': '1839', 'coord': [-73.9482609, 40... | Brooklyn | Ice Cream, Gelato, Yogurt, Ices | [{'date': 2014-07-14 00:00:00, 'grade': 'A', '... | Taste The Tropics Ice Cream | 40356731 |
c = db.restaurants.aggregate(
[
{ "$limit": 10 },
{ "$sort": { "name": 1 }}
]
)
pandas.DataFrame(c)
_id | address | borough | cuisine | grades | name | restaurant_id | |
---|---|---|---|---|---|---|---|
0 | 60006d6aa7aafd5a6d45ca9f | {'building': '8825', 'coord': [-73.8803827, 40... | Queens | American | [{'date': 2014-11-15 00:00:00, 'grade': 'Z', '... | Brunos On The Boulevard | 40356151 |
1 | 60006d6aa7aafd5a6d45ca9c | {'building': '351', 'coord': [-73.985135599999... | Manhattan | Irish | [{'date': 2014-09-06 00:00:00, 'grade': 'A', '... | Dj Reynolds Pub And Restaurant | 30191841 |
2 | 60006d6aa7aafd5a6d45caa0 | {'building': '2206', 'coord': [-74.1377286, 40... | Staten Island | Jewish/Kosher | [{'date': 2014-10-06 00:00:00, 'grade': 'A', '... | Kosher Island | 40356442 |
3 | 60006d6aa7aafd5a6d45ca9a | {'building': '1007', 'coord': [-73.856077, 40.... | Bronx | Bakery | [{'date': 2014-03-03 00:00:00, 'grade': 'A', '... | Morris Park Bake Shop | 30075445 |
4 | 60006d6aa7aafd5a6d45caa2 | {'building': '6409', 'coord': [-74.00528899999... | Brooklyn | American | [{'date': 2014-07-18 00:00:00, 'grade': 'A', '... | Regina Caterers | 40356649 |
5 | 60006d6aa7aafd5a6d45ca9d | {'building': '2780', 'coord': [-73.98241999999... | Brooklyn | American | [{'date': 2014-06-10 00:00:00, 'grade': 'A', '... | Riviera Caterer | 40356018 |
6 | 60006d6aa7aafd5a6d45caa3 | {'building': '1839', 'coord': [-73.9482609, 40... | Brooklyn | Ice Cream, Gelato, Yogurt, Ices | [{'date': 2014-07-14 00:00:00, 'grade': 'A', '... | Taste The Tropics Ice Cream | 40356731 |
7 | 60006d6aa7aafd5a6d45ca9e | {'building': '97-22', 'coord': [-73.8601152, 4... | Queens | Jewish/Kosher | [{'date': 2014-11-24 00:00:00, 'grade': 'Z', '... | Tov Kosher Kitchen | 40356068 |
8 | 60006d6aa7aafd5a6d45ca9b | {'building': '469', 'coord': [-73.961704, 40.6... | Brooklyn | Hamburgers | [{'date': 2014-12-30 00:00:00, 'grade': 'A', '... | Wendy'S | 30112340 |
9 | 60006d6aa7aafd5a6d45caa1 | {'building': '7114', 'coord': [-73.9068506, 40... | Brooklyn | Delicatessen | [{'date': 2014-05-29 00:00:00, 'grade': 'A', '... | Wilken'S Fine Food | 40356483 |
c = db.restaurants.aggregate(
[
{ "$limit": 10 },
{ "$sort": { "name": 1 }},
{ "$match": { "borough": "Brooklyn" }}
]
)
pandas.DataFrame(c)
_id | address | borough | cuisine | grades | name | restaurant_id | |
---|---|---|---|---|---|---|---|
0 | 60006d6aa7aafd5a6d45caa2 | {'building': '6409', 'coord': [-74.00528899999... | Brooklyn | American | [{'date': 2014-07-18 00:00:00, 'grade': 'A', '... | Regina Caterers | 40356649 |
1 | 60006d6aa7aafd5a6d45ca9d | {'building': '2780', 'coord': [-73.98241999999... | Brooklyn | American | [{'date': 2014-06-10 00:00:00, 'grade': 'A', '... | Riviera Caterer | 40356018 |
2 | 60006d6aa7aafd5a6d45caa3 | {'building': '1839', 'coord': [-73.9482609, 40... | Brooklyn | Ice Cream, Gelato, Yogurt, Ices | [{'date': 2014-07-14 00:00:00, 'grade': 'A', '... | Taste The Tropics Ice Cream | 40356731 |
3 | 60006d6aa7aafd5a6d45ca9b | {'building': '469', 'coord': [-73.961704, 40.6... | Brooklyn | Hamburgers | [{'date': 2014-12-30 00:00:00, 'grade': 'A', '... | Wendy'S | 30112340 |
4 | 60006d6aa7aafd5a6d45caa1 | {'building': '7114', 'coord': [-73.9068506, 40... | Brooklyn | Delicatessen | [{'date': 2014-05-29 00:00:00, 'grade': 'A', '... | Wilken'S Fine Food | 40356483 |
c = db.restaurants.aggregate(
[
{ "$match": { "borough": "Brooklyn" }},
{ "$limit": 10 },
{ "$sort": { "name": 1 }}
]
)
pandas.DataFrame(c)
_id | address | borough | cuisine | grades | name | restaurant_id | |
---|---|---|---|---|---|---|---|
0 | 60006d6aa7aafd5a6d45caa5 | {'building': '7715', 'coord': [-73.9973325, 40... | Brooklyn | American | [{'date': 2014-04-16 00:00:00, 'grade': 'A', '... | C & C Catering Service | 40357437 |
1 | 60006d6aa7aafd5a6d45caa9 | {'building': '203', 'coord': [-73.978220400000... | Brooklyn | Ice Cream, Gelato, Yogurt, Ices | [{'date': 2014-02-10 00:00:00, 'grade': 'A', '... | Carvel Ice Cream | 40360076 |
2 | 60006d6aa7aafd5a6d45caa6 | {'building': '1269', 'coord': [-73.871194, 40.... | Brooklyn | Chinese | [{'date': 2014-09-16 00:00:00, 'grade': 'B', '... | May May Kitchen | 40358429 |
3 | 60006d6aa7aafd5a6d45caab | {'building': '6909', 'coord': [-74.0259567, 40... | Brooklyn | Delicatessen | [{'date': 2014-08-21 00:00:00, 'grade': 'A', '... | Nordic Delicacies | 40361390 |
4 | 60006d6aa7aafd5a6d45caa2 | {'building': '6409', 'coord': [-74.00528899999... | Brooklyn | American | [{'date': 2014-07-18 00:00:00, 'grade': 'A', '... | Regina Caterers | 40356649 |
5 | 60006d6aa7aafd5a6d45ca9d | {'building': '2780', 'coord': [-73.98241999999... | Brooklyn | American | [{'date': 2014-06-10 00:00:00, 'grade': 'A', '... | Riviera Caterer | 40356018 |
6 | 60006d6aa7aafd5a6d45caa8 | {'building': '705', 'coord': [-73.9653967, 40.... | Brooklyn | Jewish/Kosher | [{'date': 2014-11-10 00:00:00, 'grade': 'A', '... | Seuda Foods | 40360045 |
7 | 60006d6aa7aafd5a6d45caa3 | {'building': '1839', 'coord': [-73.9482609, 40... | Brooklyn | Ice Cream, Gelato, Yogurt, Ices | [{'date': 2014-07-14 00:00:00, 'grade': 'A', '... | Taste The Tropics Ice Cream | 40356731 |
8 | 60006d6aa7aafd5a6d45ca9b | {'building': '469', 'coord': [-73.961704, 40.6... | Brooklyn | Hamburgers | [{'date': 2014-12-30 00:00:00, 'grade': 'A', '... | Wendy'S | 30112340 |
9 | 60006d6aa7aafd5a6d45caa1 | {'building': '7114', 'coord': [-73.9068506, 40... | Brooklyn | Delicatessen | [{'date': 2014-05-29 00:00:00, 'grade': 'A', '... | Wilken'S Fine Food | 40356483 |
grades
)c = db.restaurants.aggregate(
[
{ "$limit": 5 },
{ "$unwind": "$grades" }
]
)
pandas.DataFrame(c)
_id | address | borough | cuisine | grades | name | restaurant_id | |
---|---|---|---|---|---|---|---|
0 | 60006d6aa7aafd5a6d45ca9a | {'building': '1007', 'coord': [-73.856077, 40.... | Bronx | Bakery | {'date': 2014-03-03 00:00:00, 'grade': 'A', 's... | Morris Park Bake Shop | 30075445 |
1 | 60006d6aa7aafd5a6d45ca9a | {'building': '1007', 'coord': [-73.856077, 40.... | Bronx | Bakery | {'date': 2013-09-11 00:00:00, 'grade': 'A', 's... | Morris Park Bake Shop | 30075445 |
2 | 60006d6aa7aafd5a6d45ca9a | {'building': '1007', 'coord': [-73.856077, 40.... | Bronx | Bakery | {'date': 2013-01-24 00:00:00, 'grade': 'A', 's... | Morris Park Bake Shop | 30075445 |
3 | 60006d6aa7aafd5a6d45ca9a | {'building': '1007', 'coord': [-73.856077, 40.... | Bronx | Bakery | {'date': 2011-11-23 00:00:00, 'grade': 'A', 's... | Morris Park Bake Shop | 30075445 |
4 | 60006d6aa7aafd5a6d45ca9a | {'building': '1007', 'coord': [-73.856077, 40.... | Bronx | Bakery | {'date': 2011-03-10 00:00:00, 'grade': 'B', 's... | Morris Park Bake Shop | 30075445 |
5 | 60006d6aa7aafd5a6d45ca9b | {'building': '469', 'coord': [-73.961704, 40.6... | Brooklyn | Hamburgers | {'date': 2014-12-30 00:00:00, 'grade': 'A', 's... | Wendy'S | 30112340 |
6 | 60006d6aa7aafd5a6d45ca9b | {'building': '469', 'coord': [-73.961704, 40.6... | Brooklyn | Hamburgers | {'date': 2014-07-01 00:00:00, 'grade': 'B', 's... | Wendy'S | 30112340 |
7 | 60006d6aa7aafd5a6d45ca9b | {'building': '469', 'coord': [-73.961704, 40.6... | Brooklyn | Hamburgers | {'date': 2013-04-30 00:00:00, 'grade': 'A', 's... | Wendy'S | 30112340 |
8 | 60006d6aa7aafd5a6d45ca9b | {'building': '469', 'coord': [-73.961704, 40.6... | Brooklyn | Hamburgers | {'date': 2012-05-08 00:00:00, 'grade': 'A', 's... | Wendy'S | 30112340 |
9 | 60006d6aa7aafd5a6d45ca9c | {'building': '351', 'coord': [-73.985135599999... | Manhattan | Irish | {'date': 2014-09-06 00:00:00, 'grade': 'A', 's... | Dj Reynolds Pub And Restaurant | 30191841 |
10 | 60006d6aa7aafd5a6d45ca9c | {'building': '351', 'coord': [-73.985135599999... | Manhattan | Irish | {'date': 2013-07-22 00:00:00, 'grade': 'A', 's... | Dj Reynolds Pub And Restaurant | 30191841 |
11 | 60006d6aa7aafd5a6d45ca9c | {'building': '351', 'coord': [-73.985135599999... | Manhattan | Irish | {'date': 2012-07-31 00:00:00, 'grade': 'A', 's... | Dj Reynolds Pub And Restaurant | 30191841 |
12 | 60006d6aa7aafd5a6d45ca9c | {'building': '351', 'coord': [-73.985135599999... | Manhattan | Irish | {'date': 2011-12-29 00:00:00, 'grade': 'A', 's... | Dj Reynolds Pub And Restaurant | 30191841 |
13 | 60006d6aa7aafd5a6d45ca9d | {'building': '2780', 'coord': [-73.98241999999... | Brooklyn | American | {'date': 2014-06-10 00:00:00, 'grade': 'A', 's... | Riviera Caterer | 40356018 |
14 | 60006d6aa7aafd5a6d45ca9d | {'building': '2780', 'coord': [-73.98241999999... | Brooklyn | American | {'date': 2013-06-05 00:00:00, 'grade': 'A', 's... | Riviera Caterer | 40356018 |
15 | 60006d6aa7aafd5a6d45ca9d | {'building': '2780', 'coord': [-73.98241999999... | Brooklyn | American | {'date': 2012-04-13 00:00:00, 'grade': 'A', 's... | Riviera Caterer | 40356018 |
16 | 60006d6aa7aafd5a6d45ca9d | {'building': '2780', 'coord': [-73.98241999999... | Brooklyn | American | {'date': 2011-10-12 00:00:00, 'grade': 'A', 's... | Riviera Caterer | 40356018 |
17 | 60006d6aa7aafd5a6d45ca9e | {'building': '97-22', 'coord': [-73.8601152, 4... | Queens | Jewish/Kosher | {'date': 2014-11-24 00:00:00, 'grade': 'Z', 's... | Tov Kosher Kitchen | 40356068 |
18 | 60006d6aa7aafd5a6d45ca9e | {'building': '97-22', 'coord': [-73.8601152, 4... | Queens | Jewish/Kosher | {'date': 2013-01-17 00:00:00, 'grade': 'A', 's... | Tov Kosher Kitchen | 40356068 |
19 | 60006d6aa7aafd5a6d45ca9e | {'building': '97-22', 'coord': [-73.8601152, 4... | Queens | Jewish/Kosher | {'date': 2012-08-02 00:00:00, 'grade': 'A', 's... | Tov Kosher Kitchen | 40356068 |
20 | 60006d6aa7aafd5a6d45ca9e | {'building': '97-22', 'coord': [-73.8601152, 4... | Queens | Jewish/Kosher | {'date': 2011-12-15 00:00:00, 'grade': 'B', 's... | Tov Kosher Kitchen | 40356068 |
c = db.restaurants.aggregate(
[
{ "$limit": 10 },
{ "$unwind": "$grades" },
{ "$match": { "grades.grade": "B" }}
]
)
pandas.DataFrame(c)
_id | address | borough | cuisine | grades | name | restaurant_id | |
---|---|---|---|---|---|---|---|
0 | 60006d6aa7aafd5a6d45ca9a | {'building': '1007', 'coord': [-73.856077, 40.... | Bronx | Bakery | {'date': 2011-03-10 00:00:00, 'grade': 'B', 's... | Morris Park Bake Shop | 30075445 |
1 | 60006d6aa7aafd5a6d45ca9b | {'building': '469', 'coord': [-73.961704, 40.6... | Brooklyn | Hamburgers | {'date': 2014-07-01 00:00:00, 'grade': 'B', 's... | Wendy'S | 30112340 |
2 | 60006d6aa7aafd5a6d45ca9e | {'building': '97-22', 'coord': [-73.8601152, 4... | Queens | Jewish/Kosher | {'date': 2011-12-15 00:00:00, 'grade': 'B', 's... | Tov Kosher Kitchen | 40356068 |
$unwind
et $match
, le résultat est clairement différentc = db.restaurants.aggregate(
[
{ "$limit": 10 },
{ "$match": { "grades.grade": "B" }},
{ "$unwind": "$grades" }
]
)
pandas.DataFrame(c)
_id | address | borough | cuisine | grades | name | restaurant_id | |
---|---|---|---|---|---|---|---|
0 | 60006d6aa7aafd5a6d45ca9a | {'building': '1007', 'coord': [-73.856077, 40.... | Bronx | Bakery | {'date': 2014-03-03 00:00:00, 'grade': 'A', 's... | Morris Park Bake Shop | 30075445 |
1 | 60006d6aa7aafd5a6d45ca9a | {'building': '1007', 'coord': [-73.856077, 40.... | Bronx | Bakery | {'date': 2013-09-11 00:00:00, 'grade': 'A', 's... | Morris Park Bake Shop | 30075445 |
2 | 60006d6aa7aafd5a6d45ca9a | {'building': '1007', 'coord': [-73.856077, 40.... | Bronx | Bakery | {'date': 2013-01-24 00:00:00, 'grade': 'A', 's... | Morris Park Bake Shop | 30075445 |
3 | 60006d6aa7aafd5a6d45ca9a | {'building': '1007', 'coord': [-73.856077, 40.... | Bronx | Bakery | {'date': 2011-11-23 00:00:00, 'grade': 'A', 's... | Morris Park Bake Shop | 30075445 |
4 | 60006d6aa7aafd5a6d45ca9a | {'building': '1007', 'coord': [-73.856077, 40.... | Bronx | Bakery | {'date': 2011-03-10 00:00:00, 'grade': 'B', 's... | Morris Park Bake Shop | 30075445 |
5 | 60006d6aa7aafd5a6d45ca9b | {'building': '469', 'coord': [-73.961704, 40.6... | Brooklyn | Hamburgers | {'date': 2014-12-30 00:00:00, 'grade': 'A', 's... | Wendy'S | 30112340 |
6 | 60006d6aa7aafd5a6d45ca9b | {'building': '469', 'coord': [-73.961704, 40.6... | Brooklyn | Hamburgers | {'date': 2014-07-01 00:00:00, 'grade': 'B', 's... | Wendy'S | 30112340 |
7 | 60006d6aa7aafd5a6d45ca9b | {'building': '469', 'coord': [-73.961704, 40.6... | Brooklyn | Hamburgers | {'date': 2013-04-30 00:00:00, 'grade': 'A', 's... | Wendy'S | 30112340 |
8 | 60006d6aa7aafd5a6d45ca9b | {'building': '469', 'coord': [-73.961704, 40.6... | Brooklyn | Hamburgers | {'date': 2012-05-08 00:00:00, 'grade': 'A', 's... | Wendy'S | 30112340 |
9 | 60006d6aa7aafd5a6d45ca9e | {'building': '97-22', 'coord': [-73.8601152, 4... | Queens | Jewish/Kosher | {'date': 2014-11-24 00:00:00, 'grade': 'Z', 's... | Tov Kosher Kitchen | 40356068 |
10 | 60006d6aa7aafd5a6d45ca9e | {'building': '97-22', 'coord': [-73.8601152, 4... | Queens | Jewish/Kosher | {'date': 2013-01-17 00:00:00, 'grade': 'A', 's... | Tov Kosher Kitchen | 40356068 |
11 | 60006d6aa7aafd5a6d45ca9e | {'building': '97-22', 'coord': [-73.8601152, 4... | Queens | Jewish/Kosher | {'date': 2012-08-02 00:00:00, 'grade': 'A', 's... | Tov Kosher Kitchen | 40356068 |
12 | 60006d6aa7aafd5a6d45ca9e | {'building': '97-22', 'coord': [-73.8601152, 4... | Queens | Jewish/Kosher | {'date': 2011-12-15 00:00:00, 'grade': 'B', 's... | Tov Kosher Kitchen | 40356068 |
c = db.restaurants.aggregate(
[
{ "$limit": 10 },
{ "$project": { "name": 1, "borough": 1 } }
]
)
pandas.DataFrame(c)
_id | borough | name | |
---|---|---|---|
0 | 60006d6aa7aafd5a6d45ca9a | Bronx | Morris Park Bake Shop |
1 | 60006d6aa7aafd5a6d45ca9b | Brooklyn | Wendy'S |
2 | 60006d6aa7aafd5a6d45ca9c | Manhattan | Dj Reynolds Pub And Restaurant |
3 | 60006d6aa7aafd5a6d45ca9d | Brooklyn | Riviera Caterer |
4 | 60006d6aa7aafd5a6d45ca9e | Queens | Tov Kosher Kitchen |
5 | 60006d6aa7aafd5a6d45ca9f | Queens | Brunos On The Boulevard |
6 | 60006d6aa7aafd5a6d45caa0 | Staten Island | Kosher Island |
7 | 60006d6aa7aafd5a6d45caa1 | Brooklyn | Wilken'S Fine Food |
8 | 60006d6aa7aafd5a6d45caa2 | Brooklyn | Regina Caterers |
9 | 60006d6aa7aafd5a6d45caa3 | Brooklyn | Taste The Tropics Ice Cream |
c = db.restaurants.aggregate(
[
{ "$limit": 10 },
{ "$project": { "address": 0, "grades": 0 } }
]
)
pandas.DataFrame(c)
_id | borough | cuisine | name | restaurant_id | |
---|---|---|---|---|---|
0 | 60006d6aa7aafd5a6d45ca9a | Bronx | Bakery | Morris Park Bake Shop | 30075445 |
1 | 60006d6aa7aafd5a6d45ca9b | Brooklyn | Hamburgers | Wendy'S | 30112340 |
2 | 60006d6aa7aafd5a6d45ca9c | Manhattan | Irish | Dj Reynolds Pub And Restaurant | 30191841 |
3 | 60006d6aa7aafd5a6d45ca9d | Brooklyn | American | Riviera Caterer | 40356018 |
4 | 60006d6aa7aafd5a6d45ca9e | Queens | Jewish/Kosher | Tov Kosher Kitchen | 40356068 |
5 | 60006d6aa7aafd5a6d45ca9f | Queens | American | Brunos On The Boulevard | 40356151 |
6 | 60006d6aa7aafd5a6d45caa0 | Staten Island | Jewish/Kosher | Kosher Island | 40356442 |
7 | 60006d6aa7aafd5a6d45caa1 | Brooklyn | Delicatessen | Wilken'S Fine Food | 40356483 |
8 | 60006d6aa7aafd5a6d45caa2 | Brooklyn | American | Regina Caterers | 40356649 |
9 | 60006d6aa7aafd5a6d45caa3 | Brooklyn | Ice Cream, Gelato, Yogurt, Ices | Taste The Tropics Ice Cream | 40356731 |
c = db.restaurants.aggregate(
[
{ "$limit": 10 },
{ "$project": { "name": 1, "borough": 1 , "street": "$address.street"} }
]
)
pandas.DataFrame(c)
_id | borough | name | street | |
---|---|---|---|---|
0 | 60006d6aa7aafd5a6d45ca9a | Bronx | Morris Park Bake Shop | Morris Park Ave |
1 | 60006d6aa7aafd5a6d45ca9b | Brooklyn | Wendy'S | Flatbush Avenue |
2 | 60006d6aa7aafd5a6d45ca9c | Manhattan | Dj Reynolds Pub And Restaurant | West 57 Street |
3 | 60006d6aa7aafd5a6d45ca9d | Brooklyn | Riviera Caterer | Stillwell Avenue |
4 | 60006d6aa7aafd5a6d45ca9e | Queens | Tov Kosher Kitchen | 63 Road |
5 | 60006d6aa7aafd5a6d45ca9f | Queens | Brunos On The Boulevard | Astoria Boulevard |
6 | 60006d6aa7aafd5a6d45caa0 | Staten Island | Kosher Island | Victory Boulevard |
7 | 60006d6aa7aafd5a6d45caa1 | Brooklyn | Wilken'S Fine Food | Avenue U |
8 | 60006d6aa7aafd5a6d45caa2 | Brooklyn | Regina Caterers | 11 Avenue |
9 | 60006d6aa7aafd5a6d45caa3 | Brooklyn | Taste The Tropics Ice Cream | Nostrand Avenue |
grades
)c = db.restaurants.aggregate(
[
{ "$limit": 10 },
{ "$project": { "name": 1, "borough": 1, "nb_grades": { "$size": "$grades" } } }
]
)
pandas.DataFrame(c)
_id | borough | name | nb_grades | |
---|---|---|---|---|
0 | 60006d6aa7aafd5a6d45ca9a | Bronx | Morris Park Bake Shop | 5 |
1 | 60006d6aa7aafd5a6d45ca9b | Brooklyn | Wendy'S | 4 |
2 | 60006d6aa7aafd5a6d45ca9c | Manhattan | Dj Reynolds Pub And Restaurant | 4 |
3 | 60006d6aa7aafd5a6d45ca9d | Brooklyn | Riviera Caterer | 4 |
4 | 60006d6aa7aafd5a6d45ca9e | Queens | Tov Kosher Kitchen | 4 |
5 | 60006d6aa7aafd5a6d45ca9f | Queens | Brunos On The Boulevard | 4 |
6 | 60006d6aa7aafd5a6d45caa0 | Staten Island | Kosher Island | 4 |
7 | 60006d6aa7aafd5a6d45caa1 | Brooklyn | Wilken'S Fine Food | 6 |
8 | 60006d6aa7aafd5a6d45caa2 | Brooklyn | Regina Caterers | 5 |
9 | 60006d6aa7aafd5a6d45caa3 | Brooklyn | Taste The Tropics Ice Cream | 4 |
c = db.restaurants.aggregate(
[
{ "$project": { "name": 1, "borough": 1, "nb_grades": { "$size": "$grades" } } },
{ "$sort": { "nb_grades": -1 }},
{ "$limit": 10 }
]
)
pandas.DataFrame(c)
_id | borough | name | nb_grades | |
---|---|---|---|---|
0 | 60006d6ca7aafd5a6d45f30a | Brooklyn | Silver Krust West Indian Restaurant | 9 |
1 | 60006d6ba7aafd5a6d45e7c6 | Brooklyn | Lai Lai Gourmet | 9 |
2 | 60006d6da7aafd5a6d46011f | Manhattan | Pure Food | 9 |
3 | 60006d6ca7aafd5a6d45f9cf | Manhattan | Breeze Thai-French Kitchen | 9 |
4 | 60006d6ba7aafd5a6d45e35d | Manhattan | Benton | 9 |
5 | 60006d6ca7aafd5a6d45e9fd | Manhattan | Nomado 33 | 9 |
6 | 60006d6ba7aafd5a6d45e4ce | Brooklyn | Noodle Station | 9 |
7 | 60006d6ba7aafd5a6d45e332 | Manhattan | S'Mac | 9 |
8 | 60006d6aa7aafd5a6d45ceeb | Manhattan | World Cup Cafe | 8 |
9 | 60006d6aa7aafd5a6d45cf32 | Brooklyn | Fifth Ave Cafe /Diner | 8 |
grades
(indicé 0)c = db.restaurants.aggregate(
[
{ "$limit": 10 },
{ "$project": { "name": 1, "borough": 1, "grade": { "$arrayElemAt": [ "$grades", 0 ]} } }
]
)
pandas.DataFrame(c)
_id | borough | name | grade | |
---|---|---|---|---|
0 | 60006d6aa7aafd5a6d45ca9a | Bronx | Morris Park Bake Shop | {'date': 2014-03-03 00:00:00, 'grade': 'A', 's... |
1 | 60006d6aa7aafd5a6d45ca9b | Brooklyn | Wendy'S | {'date': 2014-12-30 00:00:00, 'grade': 'A', 's... |
2 | 60006d6aa7aafd5a6d45ca9c | Manhattan | Dj Reynolds Pub And Restaurant | {'date': 2014-09-06 00:00:00, 'grade': 'A', 's... |
3 | 60006d6aa7aafd5a6d45ca9d | Brooklyn | Riviera Caterer | {'date': 2014-06-10 00:00:00, 'grade': 'A', 's... |
4 | 60006d6aa7aafd5a6d45ca9e | Queens | Tov Kosher Kitchen | {'date': 2014-11-24 00:00:00, 'grade': 'Z', 's... |
5 | 60006d6aa7aafd5a6d45ca9f | Queens | Brunos On The Boulevard | {'date': 2014-11-15 00:00:00, 'grade': 'Z', 's... |
6 | 60006d6aa7aafd5a6d45caa0 | Staten Island | Kosher Island | {'date': 2014-10-06 00:00:00, 'grade': 'A', 's... |
7 | 60006d6aa7aafd5a6d45caa1 | Brooklyn | Wilken'S Fine Food | {'date': 2014-05-29 00:00:00, 'grade': 'A', 's... |
8 | 60006d6aa7aafd5a6d45caa2 | Brooklyn | Regina Caterers | {'date': 2014-07-18 00:00:00, 'grade': 'A', 's... |
9 | 60006d6aa7aafd5a6d45caa3 | Brooklyn | Taste The Tropics Ice Cream | {'date': 2014-07-14 00:00:00, 'grade': 'A', 's... |
$first
permet aussi de garder uniquement le premier élément du tableau grades
de façon explicite ($last
pour le dernier)c = db.restaurants.aggregate(
[
{ "$limit": 10 },
{ "$project": { "name": 1, "borough": 1, "grade": { "$first": "$grades" } } }
]
)
pandas.DataFrame(c)
_id | borough | name | grade | |
---|---|---|---|---|
0 | 60006d6aa7aafd5a6d45ca9a | Bronx | Morris Park Bake Shop | {'date': 2014-03-03 00:00:00, 'grade': 'A', 's... |
1 | 60006d6aa7aafd5a6d45ca9b | Brooklyn | Wendy'S | {'date': 2014-12-30 00:00:00, 'grade': 'A', 's... |
2 | 60006d6aa7aafd5a6d45ca9c | Manhattan | Dj Reynolds Pub And Restaurant | {'date': 2014-09-06 00:00:00, 'grade': 'A', 's... |
3 | 60006d6aa7aafd5a6d45ca9d | Brooklyn | Riviera Caterer | {'date': 2014-06-10 00:00:00, 'grade': 'A', 's... |
4 | 60006d6aa7aafd5a6d45ca9e | Queens | Tov Kosher Kitchen | {'date': 2014-11-24 00:00:00, 'grade': 'Z', 's... |
5 | 60006d6aa7aafd5a6d45ca9f | Queens | Brunos On The Boulevard | {'date': 2014-11-15 00:00:00, 'grade': 'Z', 's... |
6 | 60006d6aa7aafd5a6d45caa0 | Staten Island | Kosher Island | {'date': 2014-10-06 00:00:00, 'grade': 'A', 's... |
7 | 60006d6aa7aafd5a6d45caa1 | Brooklyn | Wilken'S Fine Food | {'date': 2014-05-29 00:00:00, 'grade': 'A', 's... |
8 | 60006d6aa7aafd5a6d45caa2 | Brooklyn | Regina Caterers | {'date': 2014-07-18 00:00:00, 'grade': 'A', 's... |
9 | 60006d6aa7aafd5a6d45caa3 | Brooklyn | Taste The Tropics Ice Cream | {'date': 2014-07-14 00:00:00, 'grade': 'A', 's... |
c = db.restaurants.aggregate(
[
{ "$limit": 10 },
{ "$project": { "nom": { "$toUpper": "$name" }, "borough": 1 } }
]
)
pandas.DataFrame(c)
_id | borough | nom | |
---|---|---|---|
0 | 60006d6aa7aafd5a6d45ca9a | Bronx | MORRIS PARK BAKE SHOP |
1 | 60006d6aa7aafd5a6d45ca9b | Brooklyn | WENDY'S |
2 | 60006d6aa7aafd5a6d45ca9c | Manhattan | DJ REYNOLDS PUB AND RESTAURANT |
3 | 60006d6aa7aafd5a6d45ca9d | Brooklyn | RIVIERA CATERER |
4 | 60006d6aa7aafd5a6d45ca9e | Queens | TOV KOSHER KITCHEN |
5 | 60006d6aa7aafd5a6d45ca9f | Queens | BRUNOS ON THE BOULEVARD |
6 | 60006d6aa7aafd5a6d45caa0 | Staten Island | KOSHER ISLAND |
7 | 60006d6aa7aafd5a6d45caa1 | Brooklyn | WILKEN'S FINE FOOD |
8 | 60006d6aa7aafd5a6d45caa2 | Brooklyn | REGINA CATERERS |
9 | 60006d6aa7aafd5a6d45caa3 | Brooklyn | TASTE THE TROPICS ICE CREAM |
c = db.restaurants.aggregate(
[
{ "$limit": 10 },
{ "$addFields": { "nb_grades": { "$size": "$grades" } } }
]
)
pandas.DataFrame(c)
_id | address | borough | cuisine | grades | name | restaurant_id | nb_grades | |
---|---|---|---|---|---|---|---|---|
0 | 60006d6aa7aafd5a6d45ca9a | {'building': '1007', 'coord': [-73.856077, 40.... | Bronx | Bakery | [{'date': 2014-03-03 00:00:00, 'grade': 'A', '... | Morris Park Bake Shop | 30075445 | 5 |
1 | 60006d6aa7aafd5a6d45ca9b | {'building': '469', 'coord': [-73.961704, 40.6... | Brooklyn | Hamburgers | [{'date': 2014-12-30 00:00:00, 'grade': 'A', '... | Wendy'S | 30112340 | 4 |
2 | 60006d6aa7aafd5a6d45ca9c | {'building': '351', 'coord': [-73.985135599999... | Manhattan | Irish | [{'date': 2014-09-06 00:00:00, 'grade': 'A', '... | Dj Reynolds Pub And Restaurant | 30191841 | 4 |
3 | 60006d6aa7aafd5a6d45ca9d | {'building': '2780', 'coord': [-73.98241999999... | Brooklyn | American | [{'date': 2014-06-10 00:00:00, 'grade': 'A', '... | Riviera Caterer | 40356018 | 4 |
4 | 60006d6aa7aafd5a6d45ca9e | {'building': '97-22', 'coord': [-73.8601152, 4... | Queens | Jewish/Kosher | [{'date': 2014-11-24 00:00:00, 'grade': 'Z', '... | Tov Kosher Kitchen | 40356068 | 4 |
5 | 60006d6aa7aafd5a6d45ca9f | {'building': '8825', 'coord': [-73.8803827, 40... | Queens | American | [{'date': 2014-11-15 00:00:00, 'grade': 'Z', '... | Brunos On The Boulevard | 40356151 | 4 |
6 | 60006d6aa7aafd5a6d45caa0 | {'building': '2206', 'coord': [-74.1377286, 40... | Staten Island | Jewish/Kosher | [{'date': 2014-10-06 00:00:00, 'grade': 'A', '... | Kosher Island | 40356442 | 4 |
7 | 60006d6aa7aafd5a6d45caa1 | {'building': '7114', 'coord': [-73.9068506, 40... | Brooklyn | Delicatessen | [{'date': 2014-05-29 00:00:00, 'grade': 'A', '... | Wilken'S Fine Food | 40356483 | 6 |
8 | 60006d6aa7aafd5a6d45caa2 | {'building': '6409', 'coord': [-74.00528899999... | Brooklyn | American | [{'date': 2014-07-18 00:00:00, 'grade': 'A', '... | Regina Caterers | 40356649 | 5 |
9 | 60006d6aa7aafd5a6d45caa3 | {'building': '1839', 'coord': [-73.9482609, 40... | Brooklyn | Ice Cream, Gelato, Yogurt, Ices | [{'date': 2014-07-14 00:00:00, 'grade': 'A', '... | Taste The Tropics Ice Cream | 40356731 | 4 |
c = db.restaurants.aggregate(
[
{ "$limit": 10 },
{ "$project": {
"nom": { "$toUpper": "$name" },
"quartier": { "$substr": [ "$borough", 0, 3 ] }
} }
]
)
pandas.DataFrame(c)
_id | nom | quartier | |
---|---|---|---|
0 | 60006d6aa7aafd5a6d45ca9a | MORRIS PARK BAKE SHOP | Bro |
1 | 60006d6aa7aafd5a6d45ca9b | WENDY'S | Bro |
2 | 60006d6aa7aafd5a6d45ca9c | DJ REYNOLDS PUB AND RESTAURANT | Man |
3 | 60006d6aa7aafd5a6d45ca9d | RIVIERA CATERER | Bro |
4 | 60006d6aa7aafd5a6d45ca9e | TOV KOSHER KITCHEN | Que |
5 | 60006d6aa7aafd5a6d45ca9f | BRUNOS ON THE BOULEVARD | Que |
6 | 60006d6aa7aafd5a6d45caa0 | KOSHER ISLAND | Sta |
7 | 60006d6aa7aafd5a6d45caa1 | WILKEN'S FINE FOOD | Bro |
8 | 60006d6aa7aafd5a6d45caa2 | REGINA CATERERS | Bro |
9 | 60006d6aa7aafd5a6d45caa3 | TASTE THE TROPICS ICE CREAM | Bro |
c = db.restaurants.aggregate(
[
{ "$limit": 10 },
{ "$addFields": { "quartier": { "$toUpper": { "$substr": [ "$borough", 0, 3 ] } } }},
{ "$project": {
"nom": { "$toUpper": "$name" },
"quartier": { "$cond": {
"if": { "$eq": ["$borough", "Bronx"] },
"then": "BRX",
"else": "$quartier"
} },
"borough": 1
} }
]
)
pandas.DataFrame(c)
_id | borough | nom | quartier | |
---|---|---|---|---|
0 | 60006d6aa7aafd5a6d45ca9a | Bronx | MORRIS PARK BAKE SHOP | BRX |
1 | 60006d6aa7aafd5a6d45ca9b | Brooklyn | WENDY'S | BRO |
2 | 60006d6aa7aafd5a6d45ca9c | Manhattan | DJ REYNOLDS PUB AND RESTAURANT | MAN |
3 | 60006d6aa7aafd5a6d45ca9d | Brooklyn | RIVIERA CATERER | BRO |
4 | 60006d6aa7aafd5a6d45ca9e | Queens | TOV KOSHER KITCHEN | QUE |
5 | 60006d6aa7aafd5a6d45ca9f | Queens | BRUNOS ON THE BOULEVARD | QUE |
6 | 60006d6aa7aafd5a6d45caa0 | Staten Island | KOSHER ISLAND | STA |
7 | 60006d6aa7aafd5a6d45caa1 | Brooklyn | WILKEN'S FINE FOOD | BRO |
8 | 60006d6aa7aafd5a6d45caa2 | Brooklyn | REGINA CATERERS | BRO |
9 | 60006d6aa7aafd5a6d45caa3 | Brooklyn | TASTE THE TROPICS ICE CREAM | BRO |
c = db.restaurants.aggregate(
[
{"$group": {"_id": "Total", "NbRestos": {"$sum": 1}}}
]
)
pandas.DataFrame(c)
_id | NbRestos | |
---|---|---|
0 | Total | 25359 |
c = db.restaurants.aggregate(
[
{"$group": {"_id": "$borough", "NbRestos": {"$sum": 1}}}
]
)
pandas.DataFrame(c)
_id | NbRestos | |
---|---|---|
0 | Manhattan | 10259 |
1 | Queens | 5656 |
2 | Staten Island | 969 |
3 | Bronx | 2338 |
4 | Missing | 51 |
5 | Brooklyn | 6086 |
c = db.restaurants.aggregate(
[
{"$group": {"_id": "$borough", "NbRestos": {"$sum": 1}}},
{"$sort": { "NbRestos": -1}}
]
)
pandas.DataFrame(c)
_id | NbRestos | |
---|---|---|
0 | Manhattan | 10259 |
1 | Brooklyn | 6086 |
2 | Queens | 5656 |
3 | Bronx | 2338 |
4 | Staten Island | 969 |
5 | Missing | 51 |
$sortByCount
c = db.restaurants.aggregate(
[
{"$sortByCount": "$borough"}
]
)
pandas.DataFrame(c)
_id | count | |
---|---|---|
0 | Manhattan | 10259 |
1 | Brooklyn | 6086 |
2 | Queens | 5656 |
3 | Bronx | 2338 |
4 | Staten Island | 969 |
5 | Missing | 51 |
c = db.restaurants.aggregate(
[
{ "$match": { "borough": "Queens" }},
{ "$unwind": "$grades" },
{ "$group": { "_id": "null", "score": { "$avg": "$grades.score" }}}
]
)
pandas.DataFrame(c)
_id | score | |
---|---|---|
0 | null | 11.634865 |
c = db.restaurants.aggregate(
[
{ "$unwind": "$grades" },
{ "$group": { "_id": "$borough", "score": { "$avg": "$grades.score" }}},
{ "$sort": { "score": -1 }}
]
)
pandas.DataFrame(c)
_id | score | |
---|---|---|
0 | Queens | 11.634865 |
1 | Brooklyn | 11.447976 |
2 | Manhattan | 11.418151 |
3 | Staten Island | 11.370958 |
4 | Bronx | 11.036186 |
5 | Missing | 9.632911 |
$match
permet de supprimer les restaurants sans évaluations (ce qui engendrerait des moyennes = None
)c = db.restaurants.aggregate(
[
{ "$project": {
"borough": 1, "street": "$address.street",
"eval": { "$arrayElemAt": [ "$grades", 0 ]}
} },
{ "$match": { "eval": { "$exists": True } } },
{ "$group": {
"_id": { "quartier": "$borough", "rue": "$street" },
"score": { "$avg": "$eval.score" }
}},
{ "$sort": { "score": 1 }},
{ "$limit": 10 }
]
)
pandas.DataFrame(c)
_id | score | |
---|---|---|
0 | {'quartier': 'Manhattan', 'rue': '106 Street &... | -1.0 |
1 | {'quartier': 'Brooklyn', 'rue': 'Shore Pkwy So... | 0.0 |
2 | {'quartier': 'Manhattan', 'rue': 'Oliver St'} | 0.0 |
3 | {'quartier': 'Brooklyn', 'rue': '78Th St'} | 0.0 |
4 | {'quartier': 'Brooklyn', 'rue': 'Stockholm St'} | 0.0 |
5 | {'quartier': 'Manhattan', 'rue': 'West 123 St... | 0.0 |
6 | {'quartier': 'Queens', 'rue': '100Th St'} | 0.0 |
7 | {'quartier': 'Manhattan', 'rue': 'River Terrace'} | 0.0 |
8 | {'quartier': 'Queens', 'rue': '95Th St'} | 0.0 |
9 | {'quartier': 'Manhattan', 'rue': 'Pleasant Ave... | 0.0 |
$addToSet
et $push
, on les applique sur les grades obtenus pour les 10 premiers restaurants$addToSet
: valeurs distinctes$push
: toutes les valeurs présentesc = db.restaurants.aggregate(
[
{ "$limit": 10 },
{ "$unwind": "$grades" },
{ "$group": {
"_id": "$name",
"avec_addToSet": { "$addToSet": "$grades.grade" },
"avec_push": { "$push": "$grades.grade" }
}}
]
)
pandas.DataFrame(c)
_id | avec_addToSet | avec_push | |
---|---|---|---|
0 | Tov Kosher Kitchen | [B, Z, A] | [Z, A, A, B] |
1 | Riviera Caterer | [A] | [A, A, A, A] |
2 | Kosher Island | [A] | [A, A, A, A] |
3 | Wendy'S | [B, A] | [A, B, A, A] |
4 | Morris Park Bake Shop | [B, A] | [A, A, A, A, B] |
5 | Wilken'S Fine Food | [A] | [A, A, A, A, A, A] |
6 | Regina Caterers | [A] | [A, A, A, A, A] |
7 | Dj Reynolds Pub And Restaurant | [A] | [A, A, A, A] |
8 | Brunos On The Boulevard | [Z, A] | [Z, A, A, A] |
9 | Taste The Tropics Ice Cream | [A] | [A, A, A, A] |
Il est possible de définir un curseur qui va itérer sur la liste de résultats (celle-ci sera stocké sur le serveur). Cela permet de récupérer les documents par paquets, ce qui est judicieux en cas de gros volume (pour éviter de congestionner un réseau par exemple).
cursor = db.restaurants.find(
{"borough": "Queens", "grades.score": { "$gte": 50}},
{"_id": 0, "name": 1, "address.street": 1},
batch_size = 10)
Mais l'opération est totalement transparente dans python, puisque lorsque nous appelons le curseur, nous récupérons tous les documents.
pandas.DataFrame(cursor)
address | name | |
---|---|---|
0 | {'street': 'Horace Harding Boulevard'} | Richer'S Bakery |
1 | {'street': 'Bell Boulevard'} | Tequilla Sunrise |
2 | {'street': 'Rockaway Beach Boulevard'} | Rockaway Beach Inn |
3 | {'street': 'Broadway'} | Alfonso'S Bar |
4 | {'street': 'Woodhaven Boulevard'} | Pio Pio |
... | ... | ... |
78 | {'street': '30 Avenue'} | Queens Comfort Restaurant |
79 | {'street': 'Union Turnpike'} | Koyla |
80 | {'street': '37 Road'} | Jackson Heights Food Court |
81 | {'street': 'Union Street'} | K & D Internet Inc |
82 | {'street': 'Roosevelt Ave'} | Tacos Al Suadero |
83 rows × 2 columns
Une fois importées dans un DataFrame
, les champs complexes (comme address
et grades
) sont des variables d'un type un peu particulier.
df = pandas.DataFrame(db.restaurants.find(limit = 10))
df
_id | address | borough | cuisine | grades | name | restaurant_id | |
---|---|---|---|---|---|---|---|
0 | 60006d6aa7aafd5a6d45ca9a | {'building': '1007', 'coord': [-73.856077, 40.... | Bronx | Bakery | [{'date': 2014-03-03 00:00:00, 'grade': 'A', '... | Morris Park Bake Shop | 30075445 |
1 | 60006d6aa7aafd5a6d45ca9b | {'building': '469', 'coord': [-73.961704, 40.6... | Brooklyn | Hamburgers | [{'date': 2014-12-30 00:00:00, 'grade': 'A', '... | Wendy'S | 30112340 |
2 | 60006d6aa7aafd5a6d45ca9c | {'building': '351', 'coord': [-73.985135599999... | Manhattan | Irish | [{'date': 2014-09-06 00:00:00, 'grade': 'A', '... | Dj Reynolds Pub And Restaurant | 30191841 |
3 | 60006d6aa7aafd5a6d45ca9d | {'building': '2780', 'coord': [-73.98241999999... | Brooklyn | American | [{'date': 2014-06-10 00:00:00, 'grade': 'A', '... | Riviera Caterer | 40356018 |
4 | 60006d6aa7aafd5a6d45ca9e | {'building': '97-22', 'coord': [-73.8601152, 4... | Queens | Jewish/Kosher | [{'date': 2014-11-24 00:00:00, 'grade': 'Z', '... | Tov Kosher Kitchen | 40356068 |
5 | 60006d6aa7aafd5a6d45ca9f | {'building': '8825', 'coord': [-73.8803827, 40... | Queens | American | [{'date': 2014-11-15 00:00:00, 'grade': 'Z', '... | Brunos On The Boulevard | 40356151 |
6 | 60006d6aa7aafd5a6d45caa0 | {'building': '2206', 'coord': [-74.1377286, 40... | Staten Island | Jewish/Kosher | [{'date': 2014-10-06 00:00:00, 'grade': 'A', '... | Kosher Island | 40356442 |
7 | 60006d6aa7aafd5a6d45caa1 | {'building': '7114', 'coord': [-73.9068506, 40... | Brooklyn | Delicatessen | [{'date': 2014-05-29 00:00:00, 'grade': 'A', '... | Wilken'S Fine Food | 40356483 |
8 | 60006d6aa7aafd5a6d45caa2 | {'building': '6409', 'coord': [-74.00528899999... | Brooklyn | American | [{'date': 2014-07-18 00:00:00, 'grade': 'A', '... | Regina Caterers | 40356649 |
9 | 60006d6aa7aafd5a6d45caa3 | {'building': '1839', 'coord': [-73.9482609, 40... | Brooklyn | Ice Cream, Gelato, Yogurt, Ices | [{'date': 2014-07-14 00:00:00, 'grade': 'A', '... | Taste The Tropics Ice Cream | 40356731 |
Le champs address
est une liste de dictionnaires, ayant chacun plusieurs champs (ici tous les mêmes).
df.address
0 {'building': '1007', 'coord': [-73.856077, 40.... 1 {'building': '469', 'coord': [-73.961704, 40.6... 2 {'building': '351', 'coord': [-73.985135599999... 3 {'building': '2780', 'coord': [-73.98241999999... 4 {'building': '97-22', 'coord': [-73.8601152, 4... 5 {'building': '8825', 'coord': [-73.8803827, 40... 6 {'building': '2206', 'coord': [-74.1377286, 40... 7 {'building': '7114', 'coord': [-73.9068506, 40... 8 {'building': '6409', 'coord': [-74.00528899999... 9 {'building': '1839', 'coord': [-73.9482609, 40... Name: address, dtype: object
df
df.assign(info = [e["building"] + ", " + e["street"] for e in df.address])
_id | address | borough | cuisine | grades | name | restaurant_id | info | |
---|---|---|---|---|---|---|---|---|
0 | 60006d6aa7aafd5a6d45ca9a | {'building': '1007', 'coord': [-73.856077, 40.... | Bronx | Bakery | [{'date': 2014-03-03 00:00:00, 'grade': 'A', '... | Morris Park Bake Shop | 30075445 | 1007, Morris Park Ave |
1 | 60006d6aa7aafd5a6d45ca9b | {'building': '469', 'coord': [-73.961704, 40.6... | Brooklyn | Hamburgers | [{'date': 2014-12-30 00:00:00, 'grade': 'A', '... | Wendy'S | 30112340 | 469, Flatbush Avenue |
2 | 60006d6aa7aafd5a6d45ca9c | {'building': '351', 'coord': [-73.985135599999... | Manhattan | Irish | [{'date': 2014-09-06 00:00:00, 'grade': 'A', '... | Dj Reynolds Pub And Restaurant | 30191841 | 351, West 57 Street |
3 | 60006d6aa7aafd5a6d45ca9d | {'building': '2780', 'coord': [-73.98241999999... | Brooklyn | American | [{'date': 2014-06-10 00:00:00, 'grade': 'A', '... | Riviera Caterer | 40356018 | 2780, Stillwell Avenue |
4 | 60006d6aa7aafd5a6d45ca9e | {'building': '97-22', 'coord': [-73.8601152, 4... | Queens | Jewish/Kosher | [{'date': 2014-11-24 00:00:00, 'grade': 'Z', '... | Tov Kosher Kitchen | 40356068 | 97-22, 63 Road |
5 | 60006d6aa7aafd5a6d45ca9f | {'building': '8825', 'coord': [-73.8803827, 40... | Queens | American | [{'date': 2014-11-15 00:00:00, 'grade': 'Z', '... | Brunos On The Boulevard | 40356151 | 8825, Astoria Boulevard |
6 | 60006d6aa7aafd5a6d45caa0 | {'building': '2206', 'coord': [-74.1377286, 40... | Staten Island | Jewish/Kosher | [{'date': 2014-10-06 00:00:00, 'grade': 'A', '... | Kosher Island | 40356442 | 2206, Victory Boulevard |
7 | 60006d6aa7aafd5a6d45caa1 | {'building': '7114', 'coord': [-73.9068506, 40... | Brooklyn | Delicatessen | [{'date': 2014-05-29 00:00:00, 'grade': 'A', '... | Wilken'S Fine Food | 40356483 | 7114, Avenue U |
8 | 60006d6aa7aafd5a6d45caa2 | {'building': '6409', 'coord': [-74.00528899999... | Brooklyn | American | [{'date': 2014-07-18 00:00:00, 'grade': 'A', '... | Regina Caterers | 40356649 | 6409, 11 Avenue |
9 | 60006d6aa7aafd5a6d45caa3 | {'building': '1839', 'coord': [-73.9482609, 40... | Brooklyn | Ice Cream, Gelato, Yogurt, Ices | [{'date': 2014-07-14 00:00:00, 'grade': 'A', '... | Taste The Tropics Ice Cream | 40356731 | 1839, Nostrand Avenue |
DataFrame
pandas.DataFrame([e for e in df.address])
building | coord | street | zipcode | |
---|---|---|---|---|
0 | 1007 | [-73.856077, 40.848447] | Morris Park Ave | 10462 |
1 | 469 | [-73.961704, 40.662942] | Flatbush Avenue | 11225 |
2 | 351 | [-73.98513559999999, 40.7676919] | West 57 Street | 10019 |
3 | 2780 | [-73.98241999999999, 40.579505] | Stillwell Avenue | 11224 |
4 | 97-22 | [-73.8601152, 40.7311739] | 63 Road | 11374 |
5 | 8825 | [-73.8803827, 40.7643124] | Astoria Boulevard | 11369 |
6 | 2206 | [-74.1377286, 40.6119572] | Victory Boulevard | 10314 |
7 | 7114 | [-73.9068506, 40.6199034] | Avenue U | 11234 |
8 | 6409 | [-74.00528899999999, 40.628886] | 11 Avenue | 11219 |
9 | 1839 | [-73.9482609, 40.6408271] | Nostrand Avenue | 11226 |
DataFrame
original¶pandas.concat([df.drop("address", axis = 1), pandas.DataFrame([e for e in df.address])], axis = 1)
_id | borough | cuisine | grades | name | restaurant_id | building | coord | street | zipcode | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 60006d6aa7aafd5a6d45ca9a | Bronx | Bakery | [{'date': 2014-03-03 00:00:00, 'grade': 'A', '... | Morris Park Bake Shop | 30075445 | 1007 | [-73.856077, 40.848447] | Morris Park Ave | 10462 |
1 | 60006d6aa7aafd5a6d45ca9b | Brooklyn | Hamburgers | [{'date': 2014-12-30 00:00:00, 'grade': 'A', '... | Wendy'S | 30112340 | 469 | [-73.961704, 40.662942] | Flatbush Avenue | 11225 |
2 | 60006d6aa7aafd5a6d45ca9c | Manhattan | Irish | [{'date': 2014-09-06 00:00:00, 'grade': 'A', '... | Dj Reynolds Pub And Restaurant | 30191841 | 351 | [-73.98513559999999, 40.7676919] | West 57 Street | 10019 |
3 | 60006d6aa7aafd5a6d45ca9d | Brooklyn | American | [{'date': 2014-06-10 00:00:00, 'grade': 'A', '... | Riviera Caterer | 40356018 | 2780 | [-73.98241999999999, 40.579505] | Stillwell Avenue | 11224 |
4 | 60006d6aa7aafd5a6d45ca9e | Queens | Jewish/Kosher | [{'date': 2014-11-24 00:00:00, 'grade': 'Z', '... | Tov Kosher Kitchen | 40356068 | 97-22 | [-73.8601152, 40.7311739] | 63 Road | 11374 |
5 | 60006d6aa7aafd5a6d45ca9f | Queens | American | [{'date': 2014-11-15 00:00:00, 'grade': 'Z', '... | Brunos On The Boulevard | 40356151 | 8825 | [-73.8803827, 40.7643124] | Astoria Boulevard | 11369 |
6 | 60006d6aa7aafd5a6d45caa0 | Staten Island | Jewish/Kosher | [{'date': 2014-10-06 00:00:00, 'grade': 'A', '... | Kosher Island | 40356442 | 2206 | [-74.1377286, 40.6119572] | Victory Boulevard | 10314 |
7 | 60006d6aa7aafd5a6d45caa1 | Brooklyn | Delicatessen | [{'date': 2014-05-29 00:00:00, 'grade': 'A', '... | Wilken'S Fine Food | 40356483 | 7114 | [-73.9068506, 40.6199034] | Avenue U | 11234 |
8 | 60006d6aa7aafd5a6d45caa2 | Brooklyn | American | [{'date': 2014-07-18 00:00:00, 'grade': 'A', '... | Regina Caterers | 40356649 | 6409 | [-74.00528899999999, 40.628886] | 11 Avenue | 11219 |
9 | 60006d6aa7aafd5a6d45caa3 | Brooklyn | Ice Cream, Gelato, Yogurt, Ices | [{'date': 2014-07-14 00:00:00, 'grade': 'A', '... | Taste The Tropics Ice Cream | 40356731 | 1839 | [-73.9482609, 40.6408271] | Nostrand Avenue | 11226 |
Le champs grades
est une liste de tableaux, ayant chacun potentiellement plusieurs valeurs (des dictionnaires de plus)
df.grades
0 [{'date': 2014-03-03 00:00:00, 'grade': 'A', '... 1 [{'date': 2014-12-30 00:00:00, 'grade': 'A', '... 2 [{'date': 2014-09-06 00:00:00, 'grade': 'A', '... 3 [{'date': 2014-06-10 00:00:00, 'grade': 'A', '... 4 [{'date': 2014-11-24 00:00:00, 'grade': 'Z', '... 5 [{'date': 2014-11-15 00:00:00, 'grade': 'Z', '... 6 [{'date': 2014-10-06 00:00:00, 'grade': 'A', '... 7 [{'date': 2014-05-29 00:00:00, 'grade': 'A', '... 8 [{'date': 2014-07-18 00:00:00, 'grade': 'A', '... 9 [{'date': 2014-07-14 00:00:00, 'grade': 'A', '... Name: grades, dtype: object
df.assign(derniere = [e[0] for e in df.grades], premiere = [e[-1] for e in df.grades]).drop("grades", axis = 1)
_id | address | borough | cuisine | name | restaurant_id | derniere | premiere | |
---|---|---|---|---|---|---|---|---|
0 | 60006d6aa7aafd5a6d45ca9a | {'building': '1007', 'coord': [-73.856077, 40.... | Bronx | Bakery | Morris Park Bake Shop | 30075445 | {'date': 2014-03-03 00:00:00, 'grade': 'A', 's... | {'date': 2011-03-10 00:00:00, 'grade': 'B', 's... |
1 | 60006d6aa7aafd5a6d45ca9b | {'building': '469', 'coord': [-73.961704, 40.6... | Brooklyn | Hamburgers | Wendy'S | 30112340 | {'date': 2014-12-30 00:00:00, 'grade': 'A', 's... | {'date': 2012-05-08 00:00:00, 'grade': 'A', 's... |
2 | 60006d6aa7aafd5a6d45ca9c | {'building': '351', 'coord': [-73.985135599999... | Manhattan | Irish | Dj Reynolds Pub And Restaurant | 30191841 | {'date': 2014-09-06 00:00:00, 'grade': 'A', 's... | {'date': 2011-12-29 00:00:00, 'grade': 'A', 's... |
3 | 60006d6aa7aafd5a6d45ca9d | {'building': '2780', 'coord': [-73.98241999999... | Brooklyn | American | Riviera Caterer | 40356018 | {'date': 2014-06-10 00:00:00, 'grade': 'A', 's... | {'date': 2011-10-12 00:00:00, 'grade': 'A', 's... |
4 | 60006d6aa7aafd5a6d45ca9e | {'building': '97-22', 'coord': [-73.8601152, 4... | Queens | Jewish/Kosher | Tov Kosher Kitchen | 40356068 | {'date': 2014-11-24 00:00:00, 'grade': 'Z', 's... | {'date': 2011-12-15 00:00:00, 'grade': 'B', 's... |
5 | 60006d6aa7aafd5a6d45ca9f | {'building': '8825', 'coord': [-73.8803827, 40... | Queens | American | Brunos On The Boulevard | 40356151 | {'date': 2014-11-15 00:00:00, 'grade': 'Z', 's... | {'date': 2012-02-10 00:00:00, 'grade': 'A', 's... |
6 | 60006d6aa7aafd5a6d45caa0 | {'building': '2206', 'coord': [-74.1377286, 40... | Staten Island | Jewish/Kosher | Kosher Island | 40356442 | {'date': 2014-10-06 00:00:00, 'grade': 'A', 's... | {'date': 2012-01-24 00:00:00, 'grade': 'A', 's... |
7 | 60006d6aa7aafd5a6d45caa1 | {'building': '7114', 'coord': [-73.9068506, 40... | Brooklyn | Delicatessen | Wilken'S Fine Food | 40356483 | {'date': 2014-05-29 00:00:00, 'grade': 'A', 's... | {'date': 2011-10-14 00:00:00, 'grade': 'A', 's... |
8 | 60006d6aa7aafd5a6d45caa2 | {'building': '6409', 'coord': [-74.00528899999... | Brooklyn | American | Regina Caterers | 40356649 | {'date': 2014-07-18 00:00:00, 'grade': 'A', 's... | {'date': 2011-08-17 00:00:00, 'grade': 'A', 's... |
9 | 60006d6aa7aafd5a6d45caa3 | {'building': '1839', 'coord': [-73.9482609, 40... | Brooklyn | Ice Cream, Gelato, Yogurt, Ices | Taste The Tropics Ice Cream | 40356731 | {'date': 2014-07-14 00:00:00, 'grade': 'A', 's... | {'date': 2012-02-23 00:00:00, 'grade': 'A', 's... |
DataFrame
zip()
permet d'itérer sur plusieurs tableaux en même tempsconcat()
permet de concaténer les tableaux entre euxdfgrades = pandas.concat([pandas.DataFrame(g).assign(_id = i) for (i, g) in zip(df._id, df.grades)])
dfgrades
date | grade | score | _id | |
---|---|---|---|---|
0 | 2014-03-03 | A | 2 | 60006d6aa7aafd5a6d45ca9a |
1 | 2013-09-11 | A | 6 | 60006d6aa7aafd5a6d45ca9a |
2 | 2013-01-24 | A | 10 | 60006d6aa7aafd5a6d45ca9a |
3 | 2011-11-23 | A | 9 | 60006d6aa7aafd5a6d45ca9a |
4 | 2011-03-10 | B | 14 | 60006d6aa7aafd5a6d45ca9a |
0 | 2014-12-30 | A | 8 | 60006d6aa7aafd5a6d45ca9b |
1 | 2014-07-01 | B | 23 | 60006d6aa7aafd5a6d45ca9b |
2 | 2013-04-30 | A | 12 | 60006d6aa7aafd5a6d45ca9b |
3 | 2012-05-08 | A | 12 | 60006d6aa7aafd5a6d45ca9b |
0 | 2014-09-06 | A | 2 | 60006d6aa7aafd5a6d45ca9c |
1 | 2013-07-22 | A | 11 | 60006d6aa7aafd5a6d45ca9c |
2 | 2012-07-31 | A | 12 | 60006d6aa7aafd5a6d45ca9c |
3 | 2011-12-29 | A | 12 | 60006d6aa7aafd5a6d45ca9c |
0 | 2014-06-10 | A | 5 | 60006d6aa7aafd5a6d45ca9d |
1 | 2013-06-05 | A | 7 | 60006d6aa7aafd5a6d45ca9d |
2 | 2012-04-13 | A | 12 | 60006d6aa7aafd5a6d45ca9d |
3 | 2011-10-12 | A | 12 | 60006d6aa7aafd5a6d45ca9d |
0 | 2014-11-24 | Z | 20 | 60006d6aa7aafd5a6d45ca9e |
1 | 2013-01-17 | A | 13 | 60006d6aa7aafd5a6d45ca9e |
2 | 2012-08-02 | A | 13 | 60006d6aa7aafd5a6d45ca9e |
3 | 2011-12-15 | B | 25 | 60006d6aa7aafd5a6d45ca9e |
0 | 2014-11-15 | Z | 38 | 60006d6aa7aafd5a6d45ca9f |
1 | 2014-05-02 | A | 10 | 60006d6aa7aafd5a6d45ca9f |
2 | 2013-03-02 | A | 7 | 60006d6aa7aafd5a6d45ca9f |
3 | 2012-02-10 | A | 13 | 60006d6aa7aafd5a6d45ca9f |
0 | 2014-10-06 | A | 9 | 60006d6aa7aafd5a6d45caa0 |
1 | 2014-05-20 | A | 12 | 60006d6aa7aafd5a6d45caa0 |
2 | 2013-04-04 | A | 12 | 60006d6aa7aafd5a6d45caa0 |
3 | 2012-01-24 | A | 9 | 60006d6aa7aafd5a6d45caa0 |
0 | 2014-05-29 | A | 10 | 60006d6aa7aafd5a6d45caa1 |
1 | 2014-01-14 | A | 10 | 60006d6aa7aafd5a6d45caa1 |
2 | 2013-08-03 | A | 8 | 60006d6aa7aafd5a6d45caa1 |
3 | 2012-07-18 | A | 10 | 60006d6aa7aafd5a6d45caa1 |
4 | 2012-03-09 | A | 13 | 60006d6aa7aafd5a6d45caa1 |
5 | 2011-10-14 | A | 9 | 60006d6aa7aafd5a6d45caa1 |
0 | 2014-07-18 | A | 12 | 60006d6aa7aafd5a6d45caa2 |
1 | 2013-07-30 | A | 12 | 60006d6aa7aafd5a6d45caa2 |
2 | 2013-02-13 | A | 11 | 60006d6aa7aafd5a6d45caa2 |
3 | 2012-08-16 | A | 2 | 60006d6aa7aafd5a6d45caa2 |
4 | 2011-08-17 | A | 11 | 60006d6aa7aafd5a6d45caa2 |
0 | 2014-07-14 | A | 12 | 60006d6aa7aafd5a6d45caa3 |
1 | 2013-07-10 | A | 8 | 60006d6aa7aafd5a6d45caa3 |
2 | 2012-07-11 | A | 5 | 60006d6aa7aafd5a6d45caa3 |
3 | 2012-02-23 | A | 8 | 60006d6aa7aafd5a6d45caa3 |
DataFrames
avec merge()
pandas.merge(df.drop("grades", axis = 1), dfgrades.reset_index())
_id | address | borough | cuisine | name | restaurant_id | index | date | grade | score | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 60006d6aa7aafd5a6d45ca9a | {'building': '1007', 'coord': [-73.856077, 40.... | Bronx | Bakery | Morris Park Bake Shop | 30075445 | 0 | 2014-03-03 | A | 2 |
1 | 60006d6aa7aafd5a6d45ca9a | {'building': '1007', 'coord': [-73.856077, 40.... | Bronx | Bakery | Morris Park Bake Shop | 30075445 | 1 | 2013-09-11 | A | 6 |
2 | 60006d6aa7aafd5a6d45ca9a | {'building': '1007', 'coord': [-73.856077, 40.... | Bronx | Bakery | Morris Park Bake Shop | 30075445 | 2 | 2013-01-24 | A | 10 |
3 | 60006d6aa7aafd5a6d45ca9a | {'building': '1007', 'coord': [-73.856077, 40.... | Bronx | Bakery | Morris Park Bake Shop | 30075445 | 3 | 2011-11-23 | A | 9 |
4 | 60006d6aa7aafd5a6d45ca9a | {'building': '1007', 'coord': [-73.856077, 40.... | Bronx | Bakery | Morris Park Bake Shop | 30075445 | 4 | 2011-03-10 | B | 14 |
5 | 60006d6aa7aafd5a6d45ca9b | {'building': '469', 'coord': [-73.961704, 40.6... | Brooklyn | Hamburgers | Wendy'S | 30112340 | 0 | 2014-12-30 | A | 8 |
6 | 60006d6aa7aafd5a6d45ca9b | {'building': '469', 'coord': [-73.961704, 40.6... | Brooklyn | Hamburgers | Wendy'S | 30112340 | 1 | 2014-07-01 | B | 23 |
7 | 60006d6aa7aafd5a6d45ca9b | {'building': '469', 'coord': [-73.961704, 40.6... | Brooklyn | Hamburgers | Wendy'S | 30112340 | 2 | 2013-04-30 | A | 12 |
8 | 60006d6aa7aafd5a6d45ca9b | {'building': '469', 'coord': [-73.961704, 40.6... | Brooklyn | Hamburgers | Wendy'S | 30112340 | 3 | 2012-05-08 | A | 12 |
9 | 60006d6aa7aafd5a6d45ca9c | {'building': '351', 'coord': [-73.985135599999... | Manhattan | Irish | Dj Reynolds Pub And Restaurant | 30191841 | 0 | 2014-09-06 | A | 2 |
10 | 60006d6aa7aafd5a6d45ca9c | {'building': '351', 'coord': [-73.985135599999... | Manhattan | Irish | Dj Reynolds Pub And Restaurant | 30191841 | 1 | 2013-07-22 | A | 11 |
11 | 60006d6aa7aafd5a6d45ca9c | {'building': '351', 'coord': [-73.985135599999... | Manhattan | Irish | Dj Reynolds Pub And Restaurant | 30191841 | 2 | 2012-07-31 | A | 12 |
12 | 60006d6aa7aafd5a6d45ca9c | {'building': '351', 'coord': [-73.985135599999... | Manhattan | Irish | Dj Reynolds Pub And Restaurant | 30191841 | 3 | 2011-12-29 | A | 12 |
13 | 60006d6aa7aafd5a6d45ca9d | {'building': '2780', 'coord': [-73.98241999999... | Brooklyn | American | Riviera Caterer | 40356018 | 0 | 2014-06-10 | A | 5 |
14 | 60006d6aa7aafd5a6d45ca9d | {'building': '2780', 'coord': [-73.98241999999... | Brooklyn | American | Riviera Caterer | 40356018 | 1 | 2013-06-05 | A | 7 |
15 | 60006d6aa7aafd5a6d45ca9d | {'building': '2780', 'coord': [-73.98241999999... | Brooklyn | American | Riviera Caterer | 40356018 | 2 | 2012-04-13 | A | 12 |
16 | 60006d6aa7aafd5a6d45ca9d | {'building': '2780', 'coord': [-73.98241999999... | Brooklyn | American | Riviera Caterer | 40356018 | 3 | 2011-10-12 | A | 12 |
17 | 60006d6aa7aafd5a6d45ca9e | {'building': '97-22', 'coord': [-73.8601152, 4... | Queens | Jewish/Kosher | Tov Kosher Kitchen | 40356068 | 0 | 2014-11-24 | Z | 20 |
18 | 60006d6aa7aafd5a6d45ca9e | {'building': '97-22', 'coord': [-73.8601152, 4... | Queens | Jewish/Kosher | Tov Kosher Kitchen | 40356068 | 1 | 2013-01-17 | A | 13 |
19 | 60006d6aa7aafd5a6d45ca9e | {'building': '97-22', 'coord': [-73.8601152, 4... | Queens | Jewish/Kosher | Tov Kosher Kitchen | 40356068 | 2 | 2012-08-02 | A | 13 |
20 | 60006d6aa7aafd5a6d45ca9e | {'building': '97-22', 'coord': [-73.8601152, 4... | Queens | Jewish/Kosher | Tov Kosher Kitchen | 40356068 | 3 | 2011-12-15 | B | 25 |
21 | 60006d6aa7aafd5a6d45ca9f | {'building': '8825', 'coord': [-73.8803827, 40... | Queens | American | Brunos On The Boulevard | 40356151 | 0 | 2014-11-15 | Z | 38 |
22 | 60006d6aa7aafd5a6d45ca9f | {'building': '8825', 'coord': [-73.8803827, 40... | Queens | American | Brunos On The Boulevard | 40356151 | 1 | 2014-05-02 | A | 10 |
23 | 60006d6aa7aafd5a6d45ca9f | {'building': '8825', 'coord': [-73.8803827, 40... | Queens | American | Brunos On The Boulevard | 40356151 | 2 | 2013-03-02 | A | 7 |
24 | 60006d6aa7aafd5a6d45ca9f | {'building': '8825', 'coord': [-73.8803827, 40... | Queens | American | Brunos On The Boulevard | 40356151 | 3 | 2012-02-10 | A | 13 |
25 | 60006d6aa7aafd5a6d45caa0 | {'building': '2206', 'coord': [-74.1377286, 40... | Staten Island | Jewish/Kosher | Kosher Island | 40356442 | 0 | 2014-10-06 | A | 9 |
26 | 60006d6aa7aafd5a6d45caa0 | {'building': '2206', 'coord': [-74.1377286, 40... | Staten Island | Jewish/Kosher | Kosher Island | 40356442 | 1 | 2014-05-20 | A | 12 |
27 | 60006d6aa7aafd5a6d45caa0 | {'building': '2206', 'coord': [-74.1377286, 40... | Staten Island | Jewish/Kosher | Kosher Island | 40356442 | 2 | 2013-04-04 | A | 12 |
28 | 60006d6aa7aafd5a6d45caa0 | {'building': '2206', 'coord': [-74.1377286, 40... | Staten Island | Jewish/Kosher | Kosher Island | 40356442 | 3 | 2012-01-24 | A | 9 |
29 | 60006d6aa7aafd5a6d45caa1 | {'building': '7114', 'coord': [-73.9068506, 40... | Brooklyn | Delicatessen | Wilken'S Fine Food | 40356483 | 0 | 2014-05-29 | A | 10 |
30 | 60006d6aa7aafd5a6d45caa1 | {'building': '7114', 'coord': [-73.9068506, 40... | Brooklyn | Delicatessen | Wilken'S Fine Food | 40356483 | 1 | 2014-01-14 | A | 10 |
31 | 60006d6aa7aafd5a6d45caa1 | {'building': '7114', 'coord': [-73.9068506, 40... | Brooklyn | Delicatessen | Wilken'S Fine Food | 40356483 | 2 | 2013-08-03 | A | 8 |
32 | 60006d6aa7aafd5a6d45caa1 | {'building': '7114', 'coord': [-73.9068506, 40... | Brooklyn | Delicatessen | Wilken'S Fine Food | 40356483 | 3 | 2012-07-18 | A | 10 |
33 | 60006d6aa7aafd5a6d45caa1 | {'building': '7114', 'coord': [-73.9068506, 40... | Brooklyn | Delicatessen | Wilken'S Fine Food | 40356483 | 4 | 2012-03-09 | A | 13 |
34 | 60006d6aa7aafd5a6d45caa1 | {'building': '7114', 'coord': [-73.9068506, 40... | Brooklyn | Delicatessen | Wilken'S Fine Food | 40356483 | 5 | 2011-10-14 | A | 9 |
35 | 60006d6aa7aafd5a6d45caa2 | {'building': '6409', 'coord': [-74.00528899999... | Brooklyn | American | Regina Caterers | 40356649 | 0 | 2014-07-18 | A | 12 |
36 | 60006d6aa7aafd5a6d45caa2 | {'building': '6409', 'coord': [-74.00528899999... | Brooklyn | American | Regina Caterers | 40356649 | 1 | 2013-07-30 | A | 12 |
37 | 60006d6aa7aafd5a6d45caa2 | {'building': '6409', 'coord': [-74.00528899999... | Brooklyn | American | Regina Caterers | 40356649 | 2 | 2013-02-13 | A | 11 |
38 | 60006d6aa7aafd5a6d45caa2 | {'building': '6409', 'coord': [-74.00528899999... | Brooklyn | American | Regina Caterers | 40356649 | 3 | 2012-08-16 | A | 2 |
39 | 60006d6aa7aafd5a6d45caa2 | {'building': '6409', 'coord': [-74.00528899999... | Brooklyn | American | Regina Caterers | 40356649 | 4 | 2011-08-17 | A | 11 |
40 | 60006d6aa7aafd5a6d45caa3 | {'building': '1839', 'coord': [-73.9482609, 40... | Brooklyn | Ice Cream, Gelato, Yogurt, Ices | Taste The Tropics Ice Cream | 40356731 | 0 | 2014-07-14 | A | 12 |
41 | 60006d6aa7aafd5a6d45caa3 | {'building': '1839', 'coord': [-73.9482609, 40... | Brooklyn | Ice Cream, Gelato, Yogurt, Ices | Taste The Tropics Ice Cream | 40356731 | 1 | 2013-07-10 | A | 8 |
42 | 60006d6aa7aafd5a6d45caa3 | {'building': '1839', 'coord': [-73.9482609, 40... | Brooklyn | Ice Cream, Gelato, Yogurt, Ices | Taste The Tropics Ice Cream | 40356731 | 2 | 2012-07-11 | A | 5 |
43 | 60006d6aa7aafd5a6d45caa3 | {'building': '1839', 'coord': [-73.9482609, 40... | Brooklyn | Ice Cream, Gelato, Yogurt, Ices | Taste The Tropics Ice Cream | 40356731 | 3 | 2012-02-23 | A | 8 |