Bazy NoSQL WB@NOSQL

Laboratorium

[Tao]

After three days without programming, life becomes meaningless.

The Tao of Programming 2.1

Narzędzia przydatne w trakcie EDA:

GitHub:

Learn X in Y minutes:

Różne rzeczy:

[John Tukey]

Exploratory Data Analysis (EDA) is an attitude, a state of flexibility, a willingness to look for those things that we believe are not there, as well as those we believe to be there.

John Tukey

Co powinny zawierać pliki z rozwiązaniami:

W repozytorium należy umieścić też skrypty wykorzystane w obliczeniach.

Zadanie GEO

Wyszukać w sieci dane zawierające obiekty GeoJSON. Następnie zapisać je w bazach Elasticsearch, MongoDB i PostgreSQL. Dla zapisanych danych napisać kilka geospatial queries, dla MongoDB, Elasticsearch i PostgreSQL, dla różnych obiektów Geo, np. Point, LineString i Polygon itd.

Przykład pokazujący o co chodzi w tym zadaniu (MongoDB, Point).

Poniższe obiekty Point zapisujemy w pliku places.json:

places.json
{"_id": "oakland",  loc: {"type": "Point", "coordinates": [-122.270833,37.804444]}}
{"_id": "augsburg", loc: {"type": "Point", "coordinates": [10.898333,48.371667]}}
{"_id": "namibia",  loc: {"type": "Point", "coordinates": [17.15,-22.566667]}}
{"_id": "australia",loc: {"type": "Point", "coordinates": [135,-25]}}}
{"_id": "brasilia", loc: {"type": "Point", "coordinates": [-52.95,-10.65]}}

Importujemy je do kolekcji places w bazie test:

mongoimport -c places < places.json

Logujemy się do bazy za pomocą mongo. Po zalogowaniu dodajemy geo-indeks do kolekcji places:

db.places.ensureIndex({"loc" : "2dsphere"})

Przykładowe zapytanie z $near:

var origin = {type: "Point", coordinates: [0,0]}
db.places.find({ loc: {$near: {$geometry: origin}} })

Wyniki zapytania zapisać w pliku i przekształcić za pomocą programu Jq )lub jakiegoś innego) na obiekty GeoJSON. Wynik zapisać do pliku z rozszerzeniem .geojson.

Github po kliknięciu w plik z rozszerzeniem .geojson wyświetla mapkę zamiast jego zawartości, zob. Mapping geoJSON files on GitHub. Oto przykład, places.geojson.

Mapki umieścić na dowolnej stronie html, np. na GitHub Pages; zob. też Publishing with GitHub Pages, now as easy as 1, 2, 3 i link do mapek wpisać w pliku README.md.

Zadanie 1

Wszystko opisać w repozytorium w pliku README.md w formacie Markdown + GitHub Markdown.

Zadanie 2

[Why Manage Your Data]

You’ll know when you’ve gotten past the data management stage: your code starts to become shorter, dealing more with mathematical transforms and less with handling exceptions in the data. It’s nice to come to this stage. It’s a bit like those fights in Lord of the Rings, where you spend a lot of time crossing the murky swamp full of nasty creatures, which isn’t that much of a challenge, but you could die if you don’t pay attention. Then you get out of the swamp and into the evil lair and that’s when things get interesting, short and quick.

Data Management

Przeczytać artykuł Exploratory Data Analysis (EDA)?

[Data Cleaning]

Zadanie 2a. Zaimportować do bazy danych MongoDB jeden ze zbiorów danych wymienionych poniżej lub użyć danych z Stack Overflow.

Duże i niezbyt duże zbiory danych:

Zadanie 2b. Zliczyć liczbę zaimportowanych rekordów.

Zadanie 2c. Policzyć kilka prostych agregacji na zaimportowanych danych. Wyniki przedstawić graficznie lub w postaci tabelki.

Przykładowo można zliczyć wszystkie tagi i wszystkie różne tagi, policzyć 100 najczęściej i 100 najrzadziej występujących tagów.

W tym zadaniu należy napisać dwa proste skrypty, po jednym dla MongoDB i PostgreSQL, który to policzą.

W przypadku MongoDB należy użyć jednego ze sterowników ze strony MongoDB Ecosystem. W przypadku PostgreSQL – należy to zrobić w jakikolwiek sposób.

[Ernest Hemingway and marlins]

Wszystko, co musisz zrobić, to napisać jedno prawdziwe zdanie. Napisz najprawdziwsze zdanie, jakie znasz.

— Ernest Hemingway

Zadanie 3

1. Wyszukać w sieci interesujące dane zawierające co najmniej 1_000_000 rekordów/jsonów.

2. Dane zapisać w bazie MongoDB.

3. Przygotować w JavaScript co najmniej cztery agregacje korzystające z Aggregation Pipeline.

4. Zaprogramować i wykonać wszystkie agregacje z pkt. 3 w_innym niż JavaScript języku programowania. Skorzystać z jednego z driverów wymienionych na stronie MongoDB Drivers.

Zadanie 4

Napisać trzy lub cztery pary funkcji map-reduce dla dowolnego dużego, czyli zawierającego co najmniej 1_000_000 rekordów/jsonów, zbioru danych.

Na przykład napisać parę funkcji map-reduce, które wyszukają najczęściej występujące słowa w pliku Wikipedia data PL (aktualny plik z artykułami, ok. 1.3 GB).