Ammonite/Статистика відвідувань вікісторінок: відмінності між версіями

Вилучено вміст Додано вміст
Ilya (обговорення | внесок)
Ilya (обговорення | внесок)
Рядок 212:
Винесемо код одержання статистики за місяць у окрему функцію
<source lang="scala">
defcase getMonthlyViewsclass PageViews(projectval name: String, year:val Int, monthviews: Int): List[(String, Int)] = {
 
def getMonthlyViews(project: String, year: Int, month: Int): List[PageViews] = {
def url: String = {
val monthStr = (if (month < 10) "0" else "") + month
Рядок 221 ⟶ 223:
val articles = root.items.each.articles.each.article.string.getAll(doc)
val views = root.items.each.articles.each.views.int.getAll(doc)
articles.zip(views).map{ case (name, views) => new PageViews(name, views) }
}
</source>
Рядок 260 ⟶ 262:
Згрупуємо за назвою статті, та просумуємо за місяцями:
<source lang="scala">
val groupedByArticle = yearlySeq.groupBy{case (article, views) => article_.page}
val articleToViews = groupedByArticle.mapValues{seq => seq(_.map{case (article, _.views) => views}.sum}
</source>
 
І відсортуємо за кількістю переглядів:
<source lang="scala">
val ordered = articleToViews.toSeq.sortBy{ case (article,- _.views) => -views}
ordered: Seq[(String, Int)PageViews] = Vector(
PageViews("Спеціальна:Вхід", 54454),
PageViews("Головна_сторінка", 32206),
PageViews("Спрощення_у_групах_приголосних", 19109),
PageViews("Освоюємо_Java", 13888),
PageViews("Закінчення_іменників_другої_відміни_чоловічого_роду_в_родовому_відмінку_однини", 10701),
PageViews("Освоюємо_Java/Основи", 10266),
</source>
 
=== Згрупована за підручником ===
<source lang="scala">
val yearlyByBookSeq = ordered.map{case (article, views)pv => (articlepv.splitcopy("/")name = pv.head, viewsname)) }
</source>
 
<source lang="scala">
val groupedByBook = yearlyByBookSeq.groupBy{ case (book, views_.name) => article }
val bookToViews = groupedByBook.mapValues{seq => seq(_.map{case (book, _.views) => views}.sum})
val orderedBookViews = bookToViews.toSeq.sortBy{ case (book, -_.views) => -views}
</source>
 
Вивід (очевидно треба було ще відфільтрувати за простором назв статей):
<source lang="scala">
orderedBookViews: Seq[(String, Int)PageViews] = Vector(
PageViews("Освоюємо_Java", 79686),
PageViews("Спеціальна:Вхід", 54521),
PageViews("Pascal", 35106),
PageViews("Головна_сторінка", 32206),
PageViews("Мова_людства", 23700),
PageViews("Спрощення_у_групах_приголосних", 19109),
PageViews("Пориньте_у_Python_3", 16847),
PageViews("Спеціальна:Посилання_сюди", 15723),
PageViews("Закінчення_іменників_другої_відміни_чоловічого_роду_в_родовому_відмінку_однини", 10701),
PageViews("Основні_виробничі_засоби", 10059),
PageViews("C++", 10038),
...
("Як_вчитись_краще?", 9929),
("Спеціальна:Книга", 9722),
("Фінанси", 9027),
("Підручник_мови_Python", 8806),
("HTML", 8502),
("Методологія_медіа-досліджень", 7869),
("Основи_інформатики", 7343),
("Активні_дієприкметники_і_віддієслівні_прикметники", 7300),
("Спеціальна:Створити_обліковий_запис", 7112),
("SQL", 5716),
("Порфирій_Іванов", 5400),
("Вікіпідручник:Портал_спільноти", 4952),
("Цільові_програми_та_механізми_по_забезпеченню_прозорості_у_процесі_їх_реалізації", 4839),
("Розв'язник_вправ_по_дискретній_математиці", 4743),
("Реєстрація_мопеда", 4298),
("Алгебраїчні_рівняння", 4214),
("Спеціальна:Пошук", 4021),
("Спеціальна:Цитата", 3750),
("C_Sharp", 3633),
</source>