Программирование Викиданных/Области России

Материал из Викиверситета

Эта страница посвящена исследованию свойств множества объектов Викиданных, представляющих собой регионы России. С помощью SPARQL-запросов были получены данные о количестве всех субъектов Российской Федерации, а именно: области России, республики, города федерального значения, края, автономные области, автономные округа, бывшие административно-территориальные единицы). Построен граф субъектов России, граничащих с зарубежными странами (граф соседей), а также нарисована карта, на которой отмечена численность населения отдельных регионов. Была выполнена оценка степени заполненности свойства Викиданных "shares border with" (граничит с) у каждого субъекта РФ. Читатель познакомится с компьютерной обработкой Викиданных и визуализацией информации о регионах России.

Экземпляры объекта «Области России»[править]

Построим список всех областей России.

# List of `instances of` "oblast of Russia"
SELECT ?region ?regionLabel
WHERE
{
    ?region wdt:P31 wd:Q835714. # instance of "oblast of Russia"
    SERVICE wikibase:label { bd:serviceParam wikibase:language "ru"}
}

SPARQL запрос, 48 записей на 2017 год и 46 записей на 2021 год.

Оставляем пока открытым вопрос, почему за четыре года в России стало на две области меньше.

👍 Наиболее полными и проработанными областями России на Викиданных являются: Московская область, Тюменская область, Курская область

👎 Почти пустыми и малоинформативными областями России оказались: Читинская область,Костромская область, Оренбургская область.

Субъекты Российской Федерации[править]

Построим список всех субъектов Российской Федерации - республики, края, области, города федерального значения, автономные области и автономные округа.

Используются:

# List of `instances of` "subjects of Russia" 
SELECT ?subject ?subjectLabel ?typeLabel
WHERE
{  
  VALUES ?type {wd:Q835714   # Oblast of Russia
                wd:Q41162    # Republic of Russia
                wd:Q183342   # Federal city of Russia
                wd:Q831740   # Krai of Russia
                wd:Q309166   # Autonomus oblast of Russia
                wd:Q184122}  # Autonomus okrug of Russia
  ?subject wdt:P31 ?type.  # Selecting the type of object
  SERVICE wikibase:label { bd:serviceParam wikibase:language "ru"}
}

SPARQL запрос, 85 записей на 2017 год, 86 записей на 2021 год.

Соседние субъекты[править]

Построим граф соседних субъектов РФ по свойству "shares border with".

Используются:

# Graph of "subjects of Russia" `shares border with`. 
#defaultView:Graph
SELECT *
WHERE 
{
  # no borders with the objects of Russia
  {
    SELECT ?subject ?subjectLabel ?rgb
    ?subjects ?subjectsLabel 
    WHERE
    {
      SERVICE wikibase:label { bd:serviceParam wikibase:language "ru"}
  
      VALUES ?type {wd:Q835714   # Oblast of Russia
                    wd:Q41162    # Republic of Russia
                    wd:Q183342   # Federal city of Russia
                    wd:Q831740   # Krai of Russia
                    wd:Q309166   # Autonomus oblast of Russia
                    wd:Q184122}  # Autonomus okrug of Russia
      ?subject wdt:P31 ?type.
    }
  }
  UNION
  # Autonomus okrug of Russia
  {
    SELECT ?subject ?subjectLabel ?rgb
    ?subjects ?subjectsLabel 
    WHERE
    {
      SERVICE wikibase:label { bd:serviceParam wikibase:language "ru"}
  
      VALUES ?type {wd:Q835714   # Oblast of Russia
                    wd:Q41162    # Republic of Russia
                    wd:Q183342   # Federal city of Russia
                    wd:Q831740   # Krai of Russia
                    wd:Q309166   # Autonomus oblast of Russia
                    wd:Q184122}  # Autonomus okrug of Russia
      ?subjects wdt:P31 ?type.  # Selecting the type of object  
  
      ?auto_okrug wdt:P31 wd:Q184122; wdt:P47 ?subjects.
  
      BIND(IF(?auto_okrug != '',"9932CC",IF(?rgb != '',?rgb,"FFFFFF")) AS ?rgb).
      BIND(IF(?auto_okrug != '',?auto_okrug,     ?subjects) AS ?subject).
      BIND(IF(?auto_okrug != '',?auto_okrugLabel,?subjectsLable) AS ?subjectLable). 
    }
  }
  UNION
  # Autonomus oblast of Russia
  {
    SELECT ?subject ?subjectLabel ?rgb
    ?subjects ?subjectsLabel 
    WHERE
    {
      SERVICE wikibase:label { bd:serviceParam wikibase:language "ru"}
  
      VALUES ?type {wd:Q835714   # Oblast of Russia
                    wd:Q41162    # Republic of Russia
                    wd:Q183342   # Federal city of Russia
                    wd:Q831740   # Krai of Russia
                    wd:Q309166   # Autonomus oblast of Russia
                    wd:Q184122}  # Autonomus okrug of Russia
      ?subjects wdt:P31 ?type.  # Selecting the type of object  
  
      ?auto_oblast wdt:P31 wd:Q309166; wdt:P47 ?subjects.
  
      BIND(IF(?auto_oblast != '',"ced685",IF(?rgb != '',?rgb,"FFFFFF")) AS ?rgb).
      BIND(IF(?auto_oblast != '',?auto_oblast,     ?subjects) AS ?subject).
      BIND(IF(?auto_oblast != '',?auto_oblastLabel,?subjectsLable) AS ?subjectLable). 
    }
  }
  UNION
  # Krai of Russia
  {
    SELECT ?subject ?subjectLabel ?rgb
    ?subjects ?subjectsLabel 
    WHERE
    {
      SERVICE wikibase:label { bd:serviceParam wikibase:language "ru"}
  
      VALUES ?type {wd:Q835714   # Oblast of Russia
                    wd:Q41162    # Republic of Russia
                    wd:Q183342   # Federal city of Russia
                    wd:Q831740   # Krai of Russia
                    wd:Q309166   # Autonomus oblast of Russia
                    wd:Q184122}  # Autonomus okrug of Russia
      ?subjects wdt:P31 ?type.  # Selecting the type of object  
  
      ?krai wdt:P31 wd:Q831740; wdt:P47 ?subjects.
  
      BIND(IF(?krai != '',"7495db",IF(?rgb != '',?rgb,"FFFFFF")) AS ?rgb).
      BIND(IF(?krai != '',?krai,     ?subjects) AS ?subject).
      BIND(IF(?krai != '',?kraiLabel,?subjectsLable) AS ?subjectLable). 
    }
  }
  UNION
  # Federal city of Russia
  {
    SELECT ?subject ?subjectLabel ?rgb
    ?subjects ?subjectsLabel 
    WHERE
    {
      SERVICE wikibase:label { bd:serviceParam wikibase:language "ru"}
  
      VALUES ?type {wd:Q835714   # Oblast of Russia
                    wd:Q41162    # Republic of Russia
                    wd:Q183342   # Federal city of Russia
                    wd:Q831740   # Krai of Russia
                    wd:Q309166   # Autonomus oblast of Russia
                    wd:Q184122}  # Autonomus okrug of Russia
      ?subjects wdt:P31 ?type.  # Selecting the type of object  
  
      ?fed_city wdt:P31 wd:Q183342; wdt:P47 ?subjects.
  
      BIND(IF(?fed_city != '',"e8a2e8",IF(?rgb != '',?rgb,"FFFFFF")) AS ?rgb).
      BIND(IF(?fed_city != '',?fed_city,     ?subjects) AS ?subject).
      BIND(IF(?fed_city != '',?fed_cityLabel,?subjectsLable) AS ?subjectLable).
    }
  }
  UNION
  # Republic of Russia
  {
    SELECT ?subject ?subjectLabel ?rgb
    ?subjects ?subjectsLabel 
    WHERE
    {
      SERVICE wikibase:label { bd:serviceParam wikibase:language "ru"}
  
      VALUES ?type {wd:Q835714   # Oblast of Russia
                    wd:Q41162    # Republic of Russia
                    wd:Q183342   # Federal city of Russia
                    wd:Q831740   # Krai of Russia
                    wd:Q309166   # Autonomus oblast of Russia
                    wd:Q184122}  # Autonomus okrug of Russia
      ?subjects wdt:P31 ?type.  # Selecting the type of object  
  
      ?republic wdt:P31 wd:Q41162; wdt:P47 ?subjects.
  
      BIND(IF(?republic != '',"7FFF00",IF(?rgb != '',?rgb,"FFFFFF")) AS ?rgb).
      BIND(IF(?republic != '',?republic,     ?subjects) AS ?subject).
      BIND(IF(?republic != '',?republicLabel,?subjectsLable) AS ?subjectLable).
    }
  }
  UNION
  # Oblast of Russia
  {
    SELECT ?subject ?subjectLabel ?rgb
    ?subjects ?subjectsLabel 
    WHERE
    {
      SERVICE wikibase:label { bd:serviceParam wikibase:language "ru"}
  
      VALUES ?type {wd:Q835714   # Oblast of Russia
                    wd:Q41162    # Republic of Russia
                    wd:Q183342   # Federal city of Russia
                    wd:Q831740   # Krai of Russia
                    wd:Q309166   # Autonomus oblast of Russia
                    wd:Q184122}  # Autonomus okrug of Russia
      ?subjects wdt:P31 ?type.  # Selecting the type of object  
  
      ?oblast wdt:P31 wd:Q835714; wdt:P47 ?subjects.
  
      BIND(IF(?oblast != '',"e87b7b",IF(?rgb != '',?rgb,"FFFFFF")) AS ?rgb).
      BIND(IF(?oblast != '',?oblast,     ?subjects) AS ?subject).
      BIND(IF(?oblast != '',?oblastLabel,?subjectsLable) AS ?subjectLable).
    }
  }
}

SPARQL-запрос, 467 записей на 2017 год, SPARQL-запрос 482 записи на 2021 год.

Полученное число формируется путем сложения количества соседних территорий для всех субъектов России. Результат работы скрипта - граф, отображающий соседние субъекты, представлен на рисунке ниже. На нем отчетливо видно изолированную компоненту, которая является Калининградской областью.

Граф субъектов России. Карелия
Граф субъектов России.Калининград


Полнота Викиданных[править]

Построим список субъектов РФ с пустым свойством "shares border with" (граничит с):

Используются:

# List of "subjects of Russia" without `shares border with`. 
SELECT ?subject ?subjectLabel ?sharesBorderWith ?sharesBorderWithLabel
WHERE
{
  { ?subject wdt:P31 wd:Q835714 } UNION  # Oblast of Russia
  { ?subject wdt:P31 wd:Q41162 } UNION  # Republic of Russia
  { ?subject wdt:P31 wd:Q183342 } UNION  # Federal city of Russia
  { ?subject wdt:P31 wd:Q831740 } UNION  # Krai of Russia
  { ?subject wdt:P31 wd:Q309166 } UNION # Autonomus oblast of Russia
  { ?subject wdt:P31 wd:Q184122 } # Autonomus okrug of Russia
  
  FILTER NOT EXISTS {?subject wdt:P31 wd:Q19953632} # Former administrative territorial entity
  MINUS { ?subject  wdt:P47 [] } . #Shares border with 
  SERVICE wikibase:label { bd:serviceParam wikibase:language "ru"}
}

SPARQL-запрос, ноль записей на 2017 год, 1 запись на 2021 год.

Таким образом, на Викиданных нет изолированных субъектов РФ, что соответствует действительности.
Информация, необходимая для решения задачи:

  • По данным Конституции Российской Федерации Россия состоит из 85 субъектов — республик, краёв, областей, городов федерального значения, автономной области, автономных округов[1].
  • В этой задаче не учитываются субъекты, которые на текущий момент времени не входят в состав РФ (например: Читинская область (Q182902)), поскольку они не являются экземплярами объектов "oblast of Russia", "republic of Russia", "federal city of Russia", "krai of Russia", "autonomus okrug of Russia", "autonomus oblast of Russia", а относятся к объекту "former administrative territorial entity" (бывшая административно-территориальная единица). Для данной задачи важно то, что общее количество субъектов РФ с учётом бывших административно-территориальных единиц увеличится.(Получаем 94 объекта после выполнения SPARQL-запроса).
  • По данным категории "Субъекты Российской Федерации" Русской Википедии существует 85 субъектов РФ.
  • По данным категории "Federal subjects of Russia" Английской Википедии так же существует 85 субъектов РФ.

В Викиданных больше всего свойств в России и в мире (по данным ProWD) у Ленинградской и Калининградской областей, по 43 свойства. Число свойств для России и мира одинаковое, т.к. и для России и для мира это одни и те же объекты.

Численность населения отдельных субъектов Российской Федерации[править]

Обозначим на карте субъекты Российской Федерации, разделив их на 6 групп по количеству населения. Субъекты, принадлежащие одной группе, будут отображаться на карте одним цветом, а именно:

  • субъекты с количеством населения менее 500000 обозначаются синим цветом
  • субъекты с количеством населения более 500000, но менее 1000000 обозначаются оранжевым цветом
  • субъекты с количеством населения более 1000000, но менее 3000000 обозначаются зеленым цветом
  • субъекты с количеством населения более 300000, но менее 8000000 обозначаются красным цветом
  • субъекты с количеством населения более 800000, но менее 10000000 найдены не были
  • субъекты с количеством населения более 1000000 обозначаются фиолетовым цветом

Используются:

#Map of `population` "subject of Russia"
#Version 2017
#defaultView:Map
SELECT DISTINCT ?subject ?subjectLabel (SAMPLE(?location) AS ?location) (MAX(?population) AS ?population) (SAMPLE(?layer) AS ?layer)
WHERE
{
  {
    { ?subject wdt:P31 wd:Q835714 } UNION  # Oblast of Russia
  { ?subject wdt:P31 wd:Q41162 } UNION  # Republic of Russia
  { ?subject wdt:P31 wd:Q183342 } UNION  # Federal city of Russia
  { ?subject wdt:P31 wd:Q831740 } UNION  # Krai of Russia
  { ?subject wdt:P31 wd:Q309166 } UNION # Autonomus oblast of Russia
  { ?subject wdt:P31 wd:Q184122 } # Autonomus okrug of Russia
  }   
  ?subject wdt:P625 ?location .
  ?subject wdt:P1082 ?population .
  FILTER NOT EXISTS {?subject wdt:P31 wd:Q19953632}  # former administrative territorial entity
  BIND(
    IF(?population < 500000, "менее 500000",
    IF(?population < 1000000, "500000 - 1000000",
    IF(?population < 3000000, "1000000 - 3000000",
    IF(?population < 8000000, "3000000 - 8000000",
    IF(?population < 10000000, "8000000 - 10000000",
    "более 10000000")))))
    AS ?layer).
  SERVICE wikibase:label { bd:serviceParam wikibase:language "ru,en,[AUTO_LANGUAGE]"}
}
GROUP BY ?subject ?subjectLabel
ORDER BY ?population
# Map of `population` "subject of Russia"
# Version 2021
#defaultView:Map
SELECT DISTINCT ?subject ?subjectLabel ?population ?coord ?layer
{
  {
    { ?subject wdt:P31 wd:Q835714 } UNION  # Oblast of Russia
    { ?subject wdt:P31 wd:Q41162 } UNION  # Republic of Russia
    { ?subject wdt:P31 wd:Q183342 } UNION  # Federal city of Russia
    { ?subject wdt:P31 wd:Q831740 } UNION  # Krai of Russia
    { ?subject wdt:P31 wd:Q309166 } UNION # Autonomus oblast of Russia
    { ?subject wdt:P31 wd:Q184122 } # Autonomus okrug of Russia
  }   
  ?subject wdt:P625 ?coord; wdt:P1082 ?population.
  
  FILTER NOT EXISTS {?subject wdt:P31 wd:Q19953632}  # former administrative territorial entity
  BIND(
    IF(?population < 500000, "< 500000",
    IF(?population < 1000000, "500000 - 1000000",
    IF(?population < 3000000, "1000000 - 3000000",
    IF(?population < 8000000, "3000000 - 8000000",
    IF(?population < 10000000, "8000000 - 10000000",
    "> 10000000")))))
    AS ?layer).
  
  SERVICE wikibase:label { bd:serviceParam wikibase:language "ru"}
}
ORDER BY ?population

SPARQL-запрос версия 2017, 85 записей на 2017 год.

SPARQL-запрос версия 2021, 86 записей на 2021 год.


Результат работы скрипта представлен на рисунке ниже.

Карта субъектов Российской Федерации, разделенных на 6 групп по количеству населения и отмеченных разными цветами в зависимости от группы, в которую субъект входит

Защита страниц[править]

Объект «Орловская область» на Викиданных и символ замка справа-вверху, указывающий, что редактирование объекта ограничено, 2021

На страницы Викиданных устанавливается защита для предотвращения повторяющегося вандализма или спама. Существует несколько видов защиты:

  • Частичная защита или полузащита (обозначается серым замком) разрешает редактировать страницу только автоподтверждённым/подтверждённым участникам.
  • Полная защита (обозначается оранжевым или красным замком) ограничивает круг редакторов администраторами.
  • Защита от переименования (обозначается зелёным замком) не ограничивает возможность редактировать страницу, однако переименовать её могут только администраторы. Большинство популярных страниц защищено от переименования. Защита от переименования не может быть применена к страницам элементов или свойств.
  • Защита от создания (как полная, так и частичная защита обозначается синим замком) может применяться к удалённым или несуществующим страницам. Однако, как и защита от переименования, она не может применяться к удалённым элементам или свойствам.
    • При полной защите от создания страницу не может создать никто, кроме администраторов.
    • При частичной защите от создания страницу могут создать также автоподтверждённые и подтверждённые участники.

В крайне редких случаях Фонд Викимедиа может защитить страницу в качестве официального действия (office action, обозначается чёрным замком). Официальные действия совершаются только в результате формальной вневикипедийной жалобы, всегда публично объявляются и выполняются только сотрудниками Фонда Викимедиа или членами Совета попечителей.

Правила защиты страниц

Будущая работа[править]

  1. Выстроить все субъекты Российской Федерации в порядке убывания количества территорий, с которыми они граничат. Для наглядности можно построить диаграмму. На основании полученных данных написать свое предположение о том, почему одни субъекты имеют больше соседей, а другие — меньше.
  2. Найти субъекты Российской Федерации, которые граничат с зарубежными странами. Отметить эти субъекты на карте.
  3. Сгруппировать все субъекты Российской Федерации по часовым поясам, в которых они находятся. Определить общую численность населения для каждой из групп, на основании чего построить пузырьковую диаграмму.
  4. Подсчитать количество субъектов РФ в федеральных округах. Вывести результат, например, в bubble chart.
  5. Составить гистограмму численности населения субъектов РФ.
  6. Составить граф водных объектов (моря, озера или реки) для субъектов РФ.

Упражнения[править]

1 Этот субъект, расположенный на северо-западе России, возник в 1923 году. Он граничит с Ленинградской, Вологодской, Архангельской и Мурманской областью. Также граничит с Финляндией на западе.
Выберите флаг того субъекта, который подходит под прочитанное вами описание.

2 Выберите, какие из представленных субъектов на текущий момент входят в состав Российской Федерации, а какие-нет.

Входит Не входит
Республика Адыгея
Камчатский край
Читинская область
Чукотский автономный округ

3 О флаге какого субъекта идет речь:
«Флаг этого субъекта представляет собой прямоугольное полотнище с отношением ширины к длине 2:3, красного цвета с двусторонним изображением в верхнем ближнем к древку углу основного элемента герба этого субъекта — развёрнутого к древку Святого Георгия Победоносца. Габаритная ширина изображения основного элемента герба на флаге этого субъекта составляет 1/5 часть длины полотнища флага».



SPARQL-запросы с ответами:

Примечания[править]

  1. Конституция Российской Федерации, 1993

Ссылки[править]