- dane do pobrania z Wikipedii: http://en.wikipedia.org/w/index.php?title=Apollo_program&action=edit§ion=28
- narzędzie Google Refine: https://code.google.com/p/google-refine/
- import danych do programu (Line-based text files)
- usunięcie niepotrzebnych wierszy (Text Filter)
- oczyszczenie z wierszy z niepotrzebnych danych tak, żeby każda kolumna oddzielona była znkaiem | (Transform)
- mając kolejne kolumny oddzielone znakiem | możemy teraz dodawać kolumny (Add column based on this column) korzystając ze split i wybierać dane
- usuwamy początkową kolumnę
- eksportujemy
{
"Designation" : "Apollo 7",
"Date" : "Oct. 11-22, 1968",
"Description" : "Earth orbital demonstration of Block II CSM, launched on Saturn IB.
First live television publicly broadcast from a manned mission",
"Crew" : "Wally Schirra, Walt Cunningham, Donn Eisele"
}
Cały plik: datarefine.json
#Agregacje
- pobranie danych
wget https://raw.github.com/nosql/data-refine/master/data/csv/imieniny.csv
- import do mongo
mongoimport --drop --headerline --type csv --collection imieniny < imieniny.csv
- zmiana formatu danych w rubym
require 'mongo'
include Mongo
db = MongoClient.new("localhost", 27017, w: 1, wtimeout: 200, j: true).db("test")
coll = db.collection("imieniny")
coll.find({}, {snapshot: true}).each do |doc|
doc["names"] = doc["names"].split(" ")
doc["date"] = "%02d/%02d" % [doc["day"], doc["month"]]
doc.delete("day") ; doc.delete("month")
coll.save(doc)
end
- ile osób musi świętować jednocześnie sylwester i swoje imieniny?
db.imieniny.aggregate(
{ $project: { names: 1, date : 2} },
{ $unwind: "$names" },
{ $group: { _id : "$date", count: {$sum : 1}} },
{ $match: {_id: "31/12"} }
)
Wynik: aggr1.json
- 10 osób z największą liczbą imienin
db.imieniny.aggregate(
{ $project: { _id : 0, names: 1, date : 1} },
{ $unwind: "$names" },
{ $group: { _id : "$names", count: {$sum : 1}} },
{ $sort: {count: -1} },
{ $limit : 10 }
)
Wynik: aggr1.json
-
przygotowujemy na localu dane zgodnie z osm.md.
-
w konsoli mongo wpisujemy:
db.poland.ensureIndex({ 'location.coordinates' : '2d'})
- 5 restauracji niedaleko UG (db.poland)
db.poland.aggregate(
{ "$geoNear" : { near: [18.573622,54.395732] , distanceField: 'distance', limit: 5,
query : { 'tags.amenity' : "restaurant" } }},
{ "$project" : {_id: 0, location: '$location.coordinates', tags: '$tags', distance: '$distance'}}
)
Wynik: aggr4.json
Skrypt Ruby: jmartin.rb
- łączymy się z bazą
mongo --username student --password sesja2013 153.19.1.202/test
- porównanie ilości wierzących pięciu największych religii w Wielkiej Brytani (db.census1881)
db.census1881.aggregate(
{ $project: { _id : 0, religion: 1} },
{ $group: { _id : "$religion", count: {$sum : 1}} },
{ $sort: {count: -1} },
{ $limit : 5 }
)
Wynik: aggr3.json