Працювати з MongoDB використовуючи R можна викостовуючи пакети RMongo та rmongodb.
RMongo - клієнт для MongoDB.
Використовує mongo-java-driver.
Використовує mongo-java-driver.
Вимоги: R (>= 2.11.0), Java (>= 1.6), MongoDB (>= 1.6).
Залежить від пакету rJava.
Після оновлення RStudio до найновішої версії виникла наступна проблема з встановленням rJava:
Error : .onLoad failed in loadNamespace() for 'rJava', details:
call: dyn.load(file, DLLpath = DLLpath, ...) error: unable to load shared object '/home/nastya/R/library/rJava/libs/rJava.so': libjvm.so: cannot open shared object file: No such file or directory Failed with error: 'package 'rJava' could not be loaded'
Була вирішена виконанням:
sudo apt-get install r-cran-rjava
sudo R CMD javareconf
Далі працюємо в RStudio. Встановлюємо пакет та підключаємо його:
install.packages("RMongo")
library("RMongo")
З'єднуємося з базою crunch, яка розміщена на локальній машині, порт по замовчуванню. Ця база містить дані з cruncbase (каталог технологічних компаній):
mongo <- mongoDbConnect("crunch")
Отримуємо перелік колекцій (таблиць у реляційних СКБД):
> collections <- dbShowCollections(mongo)
> collections
[1] "system.indexes" "company"
Отримати всі дані про 10 компаній, які були засновані у період 2000 -2011 можна скориставшись командою:
opened <- dbGetQuery(mongo, "company", "{'founded_year': {'$gte':2000, '$lt':2012}}",0,10)
Аргументи команди:
- об'єкт mongo, створений при під'єднанні до бази
- назва колекції
- запит
- кількість об'єктів, які треба пропустити перед виконанням (по замовчуванню 0)
- кількість об'єктів, які треба вибрати (по замовчуванню 1000)
Тут стикаємося з проблемою: результат приводиться до датафрейму, а документи (рядки) містять в собі вкладені підструктури (детальніше можна переглянути на прикладі Twitter тут http://api.crunchbase.com/v/1/company/twitter.js). Ці підструктури коректно до датафрейму не приводяться.
Тому слід будувати такі запити, які будуть виводити лише плоскі стркутри. В нашому випадку можна отримати не всю інформацію про компанії, а лише назву та рік заснування:
opened<- dbGetQueryForKeys(mongo, "company", "{'founded_year': {'$gte':2000, '$lt':2012}}", "{'name': 1, 'founded_year':1}", 0, 95000)
Аргументи команди:
- об'єкт mongo, створений при під'єднанні до бази
- назва колекцій
- запит
- ключі - набір полів, які треба вивести (для них вказуємо значення 1 або true)
- кількість об'єктів, які треба пропустити перед виконанням (по замовчуванню 0)
- кількість об'єктів, які треба вибрати (по замовчуванню 1000)
X_id | founded_year | name | |
---|---|---|---|
1 | 4ff202ecd410022b23000000 | 2005 | Wetpaint |
2 | 4ff202edd410022b23000002 | 2005 | Zoho |
3 | 4ff202eed410022b23000003 | 2004 | Digg |
4 | 4ff202efd410022b23000004 | 2004 | |
5 | 4ff202f0d410022b23000005 | 2003 | Photobucket, Inc. |
6 | 4ff202f0d410022b23000006 | 2005 | Omnidrive |
7 | 4ff202f1d410022b23000008 | 2006 | Geni |
8 | 4ff202f5d410022b2300000d | 2003 | Gizmoz |
9 | 4ff202f9d410022b23000013 | 2006 | Wis.dm |
10 | 4ff202f3d410022b2300000b | 2006 | |
11 | 4ff202f4d410022b2300000c | 2002 | StumbleUpon |
12 | 4ff202f6d410022b2300000e | 2007 | Scribd |
barplot(table(opened$founded_year), main = "Засновані компанії", xlab = "Рік", ylab = "Кількість" )
Бачимо, що в 2010 був пік росту. Які саме сфери дали цей ріст? Щоб відповісти на це питання, потрібно вибрати з бази для кожної компанії крім року заснування ще й сферу, у якій працює (чи працювала ця компанія):
fieldssphere <- dbGetQueryForKeys(mongo, "company", "{'founded_year': {'$gte':2000, '$lt':2012}}", "{'name': 1, 'founded_year':1, 'category_code':1}", 0, 95000)
Згрупуємо отримані дані за роком заснування та сферою:
fieldsbyyear <- aggregate(openedsphere, by = list(openedfields$founded_year, openedfields$category_code), FUN = length)
Побудуємо графік для кожної сфери:
library(lattice)
xyplot(fieldsbyyear$X_id ~ fieldsbyyear$Group.1| fieldsbyyear$Group.2,
type = "b",
xlab = "Рік", ylab = "Кількість", main = "Розподіл по галузях")
Бачимо, що найбільший внесок у стрімке зростання технологічний компаній дали такі області як веб, розробка програмного забезпечення, мобільні технології, електронна комерція, відео-ігри та реклама.
Але далеко не всі стартапи є успішними. Хтось отримує фінансування, хтось ні. Деякі стартапи здатні розвинутись у велику технологічну компанію, інші ж швидко продаються. З допомогою пакету RMongo зробити аналіз інвестицій, на жаль, не вдасться, оскільки він не підтримує роботу з документами, які мають складну вкладену підструктуру, яку неможливо коректно привести до датафрейму. Але вихід є: rmongodb. Про роботу з цим пакетом у наступній статті.
Немає коментарів:
Дописати коментар