Size: a a a

R (язык программирования)

2021 June 13

ГД

Григорий Демин... in R (язык программирования)
да, пожалуйста
источник

IS

Ilya Shutov in R (язык программирования)
Если честно, то это все странные конструкции, зачем неявно все преобразовывать в CSV и гнать текстом на сторону БД? Есть ощущение, что наличествует непонимание о принципах работы КХ.
А еще уж такие штуки можно делать просто через локальный КХ клиент, который подключается к удаленной БД. Грузить файлы из командной строки.

1. Использовать нативный протокол КХ -- быстрее и без потери точности.
2. КХ позволяет только писать данные, если что-то надо удалять -- тут надо дропать партиции, а значит надо думать про схему БД.
3. Перед каждой операцией можно отрывать коннект, а потом его закрывать. В сценарии загрузки основные затраты -- на передачу по сети. Можно использовать пакет pool при однопоточном режиме.
4. При записи в КХ критично полное совпадение в типах, порядке и названии колонок между таблицей и `data.frame`. Если что-то не так, то он просто тихо не пишет данные.

Вот пример цепочки, работает все как часы:

conn <- db_connect %$%
 DBI::dbConnect(RClickhouse::clickhouse(), host = host, db = db, user = user, password = password)
dbGetQuery(conn, "DROP TABLE IF EXISTS DB.NAME")
dbDisconnect(conn)

conn <- db_connect %$%
     DBI::dbConnect(RClickhouse::clickhouse(), host = host, db = db, user = user, password = password)

   df %>%
     # модификация полей для записи под портирование      
    select(timestamp, level, message) %>%
     # база к которой идет подключение должна быть определена в самом коннекте
     DBI::dbWriteTable(conn, db_connect$table, ., append = TRUE)
   DBI::dbDisconnect(conn)
источник

E

Eкатерина in R (язык программирования)
Здравствуйте.
1) Подскажите, пожалуйста, можно ли посчитать betweenness, density, indegree для каждого кластера отдельно в social network analysis?
Если да, то с помощью какой функции это делается? (картинка из интернета).
2) Как сделать графики для каждого кластера отдельно, чтобы посмотреть связи именно внутри кластера, исключив связи с другими кластерами.
И я была бы рада, если бы вы написали мне комментарий по поводу того, имеют ли вообще такие действия смысл. Провожу social network analysis в первый раз. Просмотрела много сайтов с таким видом анализа, но именно такие действия, как я описала выше авторы не делали.
источник

fj

fedor jilkin in R (язык программирования)
https://www.litres.ru/duglas-luk/analiz-setey-grafov-v-srede-r-43643075/

Это то,с чего начинают анализ сетей.
Почитайте,там есть ответы на все ваши вопросы и даже более того.
источник

E

Eкатерина in R (язык программирования)
Спасибо!
источник

М

Марк in R (язык программирования)
А мне в своё время не зашла эта книга. Помогли доки по igraph, гуглежка и этот чат, конечно же)
источник

R

Rus in R (язык программирования)
В csv  я перебросил для экспериментов.
Понятно , что когда все будет работать ничего в csv перебрасываться не будет, а будет отправляться напрямую из датафрейма R в КХ.

....

В общем, проблема оказалась в следующем.

Когда грузим в КХ таблицу в 6 млн строк чанками по 100тыс строк (или меньше), то Сервак (где стоит ограничение в 1 Гиг оперативы) плюет ошибку memory exceeded на 17м чанке...
 Причем ,эта ошибка плюется при любом методе загрузки, хоть так
chunksize = 100000
GAaud_h[, chunk := .I %/% chunksize][, dbWriteTable(con, "GAaud_hist", .SD, append=TRUE , row.names = TRUE), by="chunk"]

хоть через цикл  (огромное спасибо @Gregory_Demin за код , который помог понять проблему) :
chunk_ind = seq_len(nrow(GAaud_h)) %/% chunksize
for(each_chunk in unique(chunk_ind)){
   cat(as.character(Sys.time()),": chunk:", each_chunk, each_chunk*chunksize, "\n")
   chunk = GAaud_h[chunk_ind == each_chunk, ]
   dbWriteTable(con, "GAaud_hist", chunk, append = TRUE)
   Sys.sleep(2)
}


А
если увеличить размер чанка
chunksize до 1
млн строк , то есть разбить датасет не на 60 чанков, а всего на 6 чанков, то загрузка проходит без ошибок по превышению памяти в 100% случаев любым способом из двух указанных выше:))
источник

h

helby in R (язык программирования)
То есть всё вышло в итоге?)
источник

R

Rus in R (язык программирования)
да. В итоге все грузится большими чанками... Хотя в Питоне и маленькими тоже грузится:)  Но это мелочи.
источник

h

helby in R (язык программирования)
Я правильно понимаю, что это по сути дата инженерская задача?
источник

R

Rus in R (язык программирования)
не знаю.. задачу мне поставили, хотя я просто разработчик BI отчетности в MS Power BI :)))
источник

h

helby in R (язык программирования)
Просто, есть типа вакансий куча, называются , data engineering , там по моему как раз занимаются именно тем что собирают данные из разных источников в один, аггрегируют, приводят в нужный вид, для последующей работы аналитиков и дата сатанистов с ними
источник

h

helby in R (язык программирования)
Показалась ваша задача похожей
источник

ДВ

Дмитрий Володин... in R (язык программирования)
При отсутсвии бюджетов поневоле можно стать дата инженером)
источник

h

helby in R (язык программирования)
Да, куча знакомых аналитиков, которых взяли как аналитиков, а они парсингом и базами данных занимаются)

Но, думаю это даже плюс, для человека который это делает

Развитие, и всё такое)
источник

R

Rus in R (язык программирования)
ну да, парсингом сайтов (через питон) тоже приходится заниматься, и тоже устраивался на должность аналитика :))
источник

ДВ

Дмитрий Володин... in R (язык программирования)
Без computer science там тяжко разобраться. Так как "ближе к железу".
источник

h

helby in R (язык программирования)
А почему не через Р?
источник

R

Rus in R (язык программирования)
R я очень плохо знаю.  В питоне мне проще
источник

ДВ

Дмитрий Володин... in R (язык программирования)
Пробуйте. Как по мне, Р проще в понимании именно для работы с данными. То есть есть ощущение, что ты именно работаешь с данными, а не пишешь какой-то софт/микросервис или ещё что.
источник