CoolFace
Datasetpublic

Mikimi/ru-wikipedia-100k-full-text-daily-stats-10-years

📚 Russian Wikipedia Top 100K: Full Text with Daily Pageviews **Крупнейший открытый датасет русскоязычной Википедии с полными текстами статей и ежедневной статистикой просмотров за 10 лет. МГУ, ОТиПЛ, 2025** 📖 Описание Этот датасет содержит 99,348 самых популярных статей русскоязычной Википедии, отобранных по совокупному количеству просмотров за последние 10 лет. Для каждой статьи собраны полный текст с сохранением структуры, метаданные и детальная… See the full description on the dataset page: https://huggingface.co/datasets/Mikimi/ru-wikipedia-100k-full-text-daily-stats-10-years.

sourceHugging Faceupdated 9mo agoView on Hugging Face
1likes28downloads
Dataset Card

📚 Russian Wikipedia Top 100K: Full Text with Daily Pageviews

<div align="center"> Крупнейший открытый датасет русскоязычной Википедии с полными текстами статей и ежедневной статистикой просмотров за 10 лет. МГУ, ОТиПЛ, 2025 </div>


📖 Описание

Этот датасет содержит 99,348 самых популярных статей русскоязычной Википедии, отобранных по совокупному количеству просмотров за последние 10 лет. Для каждой статьи собраны полный текст с сохранением структуры, метаданные и детальная ежедневная статистика просмотров.

Датасет уникален тем, что объединяет три ключевых компонента:

  1. 1.Полный текст — не только краткое содержание, но и весь текст статьи со структурой секций
  2. 2.Временны́е ряды просмотров — ежедневная статистика за ~10 лет (3,585 дней с июля 2015 года по 28 декабря 2025)
  3. 3.Классификация по тематике — автоматическая маркировка статей, связанных с Россией

📊 Статистика датасета

МетрикаЗначение
Всего статей99,348
Общее количество слов133,451,443
Среднее слов на статью1,343
Общее количество просмотров13,086,684,252
Период сбора статистики~10 лет (3,585 дней)
Статей, связанных с Россией21,031 (21.2%)
Статей с инфобоксом20,781 (20.9%)
Среднее секций на статью6.5
Статей с ежедневной статистикой100%

🏆 Топ-5 статей по просмотрам

РангСтатьяПросмотрыСреднее в день
1Яндекс155,776,18643,452
2YouTube~150M+~42,000
3Россия~140M+~39,000
4Путин, Владимир Владимирович~130M+~36,000
5Вторая мировая война~120M+~33,000
............

🗂️ Структура данных

Датасет содержит 21 поле, разделённых на логические группы.

Основные поля идентификации

ПолеТипОписание
titlestringЗаголовок статьи в оригинальном виде
page_idint64Уникальный идентификатор страницы в Wikipedia
urlstringПолный URL статьи

Контент статьи

ПолеТипОписание
leadlarge_stringВводный абзац (краткое содержание до первой секции)
full_textlarge_stringПолный текст статьи, очищенный от wiki-разметки
sectionslist[dict]Структурированный список секций (см. детали ниже)
categorieslist[string]Список категорий Wikipedia (до 50)
infoboxlarge_stringДанные инфобокса (карточки) в формате JSON-строки

Структура секции (`sections`):

python
{
    "level": 2,           # Уровень заголовка (2 = ==, 3 = ===, и т.д.)
    "title": "История",   # Заголовок секции
    "text": "Текст..."    # Содержимое секции
}

Статистика просмотров (агрегированная)

ПолеТипОписание
total_viewsint64Суммарное количество просмотров за весь период
pageview_rankint32Ранг по популярности (1 = самая популярная)
avg_daily_viewsfloat32Среднее количество просмотров в день
max_daily_viewsint32Максимальное количество просмотров за один день
min_daily_viewsint32Минимальное количество просмотров за один день
days_trackedint32Количество дней, за которые есть статистика

Ежедневная статистика просмотров

ПолеТипОписание
daily_viewslarge_stringJSON-строка с ежедневными просмотрами

Формат daily_views:

json
{
    "2015-07-01": 1234,
    "2015-07-02": 5678,
    "2015-07-03": 9012,
    ...
    "2025-05-15": 4567
}

Классификация связи с Россией

ПолеТипОписание
is_russia_relatedboolФлаг: статья связана с Россией
russia_confidencefloat32Степень уверенности классификатора (0.0–1.0)

Как работает классификатор:

Классификатор использует многофакторный подход с морфологическим анализом (pymorphy3):

  1. 1.Анализ заголовка (вес 3.0) — поиск ключевых слов: «Россия», «Москва», «СССР», названия городов и т.д.
  2. 2.Анализ категорий (вес 2.0) — поиск паттернов в категориях Wikipedia
  3. 3.Анализ текста (вес 0.5 за совпадение) — поиск ключевых слов во вводном абзаце

Итоговая уверенность нормализуется в диапазон [0, 1]. Статья считается связанной с Россией при confidence ≥ 0.3.

Статистика контента

ПолеТипОписание
word_countint32Количество слов в полном тексте
section_countint32Количество секций в статье
category_countint32Количество категорий

Метаданные

ПолеТипОписание
fetch_timestampstringДата и время загрузки статьи (ISO 8601)

🚀 Быстрый старт

Загрузка датасета

python
from datasets import load_dataset

# Загрузка полного датасета
dataset = load_dataset("Mikimi/ru-wikipedia-daily-pageviews-full-text")

# Просмотр структуры
print(dataset)
print(f"Количество статей: {len(dataset['train']):,}")

Базовые примеры

python
# Доступ к первой статье
article = dataset['train'][0]
print(f"Заголовок: {article['title']}")
print(f"Просмотров: {article['total_views']:,}")
print(f"Слов: {article['word_count']:,}")

# Краткое содержание
print(f"\nВводный абзац:\n{article['lead'][:500]}...")

# Полный текст
print(f"\nПолный текст (первые 1000 символов):\n{article['full_text'][:1000]}...")

Работа с ежедневной статистикой

python
import json
import matplotlib.pyplot as plt

# Парсинг ежедневных просмотров
daily = json.loads(article['daily_views'])

# Построение графика
dates = sorted(daily.keys())
views = [daily[d] for d in dates]

plt.figure(figsize=(14, 5))
plt.plot(range(len(dates)), views, linewidth=0.5)
plt.fill_between(range(len(dates)), views, alpha=0.3)
plt.title(f"Просмотры: {article['title']}")
plt.xlabel("Дни")
plt.ylabel("Просмотры")
plt.show()

Фильтрация статей

python
# Только статьи о России
russia_dataset = dataset['train'].filter(lambda x: x['is_russia_related'])
print(f"Статей о России: {len(russia_dataset):,}")

# Топ-10000 самых популярных
top_10k = dataset['train'].filter(lambda x: x['pageview_rank'] <= 10000)

# Статьи с большим количеством текста
long_articles = dataset['train'].filter(lambda x: x['word_count'] > 5000)
print(f"Статей > 5000 слов: {len(long_articles):,}")

Работа со структурой статьи

python
# Доступ к секциям
for section in article['sections'][:5]:
    print(f"{'  ' * (section['level'] - 2)}[{section['level']}] {section['title']}")

# Парсинг инфобокса
if article['infobox']:
    infobox = json.loads(article['infobox'])
    for key, value in list(infobox.items())[:5]:
        print(f"  {key}: {value[:50]}...")

💡 Примеры использования

1. Анализ трендов популярности

python
import json
import pandas as pd

def get_yearly_views(article):
    """Агрегирует просмотры по годам."""
    daily = json.loads(article['daily_views'])
    yearly = {}
    for date, views in daily.items():
        year = date[:4]
        yearly[year] = yearly.get(year, 0) + views
    return yearly

# Анализ динамики для топ-10 статей
for i in range(10):
    article = dataset['train'][i]
    yearly = get_yearly_views(article)
    print(f"\n{article['title']}:")
    for year in sorted(yearly.keys())[-5:]:
        print(f"  {year}: {yearly[year]:,}")

2. Поиск статей по ключевым словам

python
def search_articles(dataset, keywords, field='lead', limit=10):
    """Поиск статей по ключевым словам."""
    keywords_lower = [k.lower() for k in keywords]
    results = []
    
    for article in dataset:
        text = article[field].lower()
        if all(kw in text for kw in keywords_lower):
            results.append({
                'title': article['title'],
                'rank': article['pageview_rank'],
                'views': article['total_views']
            })
            if len(results) >= limit:
                break
    
    return results

# Поиск статей о космосе
space_articles = search_articles(dataset['train'], ['космос', 'ракета'])
for a in space_articles:
    print(f"{a['title']}: {a['views']:,} просмотров")

3. Создание корпуса для NLP

python
from datasets import Dataset

# Создание упрощённого корпуса для обучения
def create_nlp_corpus(dataset, max_samples=50000):
    corpus = []
    for article in dataset:
        corpus.append({
            'text': article['full_text'],
            'title': article['title'],
            'category': 'russia' if article['is_russia_related'] else 'other'
        })
        if len(corpus) >= max_samples:
            break
    return Dataset.from_list(corpus)

nlp_corpus = create_nlp_corpus(dataset['train'])
print(f"Корпус создан: {len(nlp_corpus):,} документов")

4. Анализ сезонности просмотров

python
import json
from collections import defaultdict

def analyze_seasonality(article):
    """Анализирует сезонность просмотров по месяцам."""
    daily = json.loads(article['daily_views'])
    monthly = defaultdict(list)
    
    for date, views in daily.items():
        month = int(date[5:7])
        monthly[month].append(views)
    
    return {m: sum(v) / len(v) for m, v in monthly.items()}

# Анализ сезонности для статьи "Новый год"
new_year = dataset['train'].filter(lambda x: x['title'] == 'Новый год')
if len(new_year) > 0:
    seasonality = analyze_seasonality(new_year[0])
    for month in sorted(seasonality.keys()):
        bar = '█' * int(seasonality[month] / max(seasonality.values()) * 30)
        print(f"{month:2d}: {bar} {seasonality[month]:,.0f}")

🔧 Методология сбора данных

Источники данных

  1. 1.MediaWiki API (https://ru.wikipedia.org/w/api.php) — для получения полного wikitext статей, категорий и метаданных
  2. 2.Wikimedia Pageviews API (https://wikimedia.org/api/rest_v1/metrics/pageviews) — для статистики просмотров

Процесс сбора

  1. 1.Сбор статистики просмотров (~3,834 дня):
  2. 2.Ежедневный запрос топ-1000 статей через Pageviews API
  3. 3.Агрегация просмотров для определения топ-100K за весь период
  4. 4.Сохранение ежедневных данных для каждой статьи
  1. 1.Загрузка контента статей:
  2. 2.Запрос wikitext через MediaWiki API
  3. 3.Парсинг структуры с помощью библиотеки mwparserfromhell
  4. 4.Извлечение: lead, секции, категории, инфобокс
  5. 5.Очистка от wiki-разметки
  1. 1.Классификация:
  2. 2.Морфологический анализ с pymorphy3
  3. 3.Мультифакторная оценка связи с Россией
  4. 4.Вычисление уровня уверенности
  1. 1.Валидация и загрузка:
  2. 2.Проверка целостности данных
  3. 3.Сохранение в формате Parquet
  4. 4.Загрузка на HuggingFace Hub

Фильтрация

Из датасета исключены:

  • —Служебные страницы (Special:, Служебная:, Википедия:, и т.д.)
  • —Страницы файлов и категорий
  • —Шаблоны и модули
  • —Страницы обсуждений
  • —Главная страница

📋 Возможные применения

Исследования и аналитика

  • —Анализ трендов — изучение динамики интереса к темам во времени
  • —Событийная аналитика — корреляция просмотров с реальными событиями
  • —Сезонность — выявление паттернов популярности тем

Natural Language Processing

  • —Языковое моделирование — обучение моделей на русскоязычном контенте
  • —Суммаризация текста — пары lead/full_text для обучения
  • —Классификация текста — метки isrussiarelated для бенчмарков
  • —Question Answering — создание QA-датасетов на основе структурированного контента
  • —Named Entity Recognition — богатый размеченный контент

Системы извлечения информации

  • —Knowledge Base — структурированные данные из инфобоксов
  • —RAG-системы — база знаний для Retrieval-Augmented Generation
  • —Поисковые системы — индексация и ранжирование

Образование и визуализация

  • —Интерактивные дашборды — визуализация популярности тем
  • —Образовательные проекты — изучение русскоязычного контента
  • —Исторический анализ — изменение интересов общества во времени

⚠️ Ограничения

  1. 1.Актуальность контента: Тексты статей загружены на определённую дату (см. fetch_timestamp). Содержимое Википедии постоянно обновляется.
  1. 1.Статистика просмотров: Данные начинаются с июля 2015 года — момента запуска Pageviews API. Более ранняя статистика недоступна.
  1. 1.Классификация "связи с Россией": Автоматический классификатор имеет неточности. Рекомендуется ручная проверка для критичных применений.
  1. 1.Очистка текста: При удалении wiki-разметки возможна потеря некоторого форматирования (таблицы, формулы).
  1. 1.Выборка: Датасет содержит только топ-100K статей по просмотрам на основании дневных топов статей, что не представляет всю Википедию.

📜 Лицензия и цитирование

Лицензия

Датасет распространяется под лицензией CC BY-SA 4.0 (Creative Commons Attribution-ShareAlike 4.0), соответствующей лицензии контента Wikipedia.

Цитирование

bibtex
@dataset{ru_wikipedia_daily_pageviews_2025,
  author       = {Miki - OTIPL},
  title        = {Russian Wikipedia Top 100K: Full Text with Daily Pageviews},
  year         = {2025},
  publisher    = {Hugging Face},
  url          = {https://huggingface.co/datasets/Mikimi/ru-wikipedia-daily-pageviews-full-text},
  note         = {99,348 most popular Russian Wikipedia articles with full text and 10 years of daily pageview statistics}
}

📞 Обратная связь

Если вы обнаружили ошибки или у вас есть предложения по улучшению датасета, пожалуйста, создайте Issue в репозитории или свяжитесь через Discussions.