Программирование Викиданных/География математиков

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

Постановка цели[править]

Составить рейтинг учёных-математиков по данным Википедии. На основе этого рейтинга пронаблюдать ряд особенностей.

Задачи:

  1. В соответствии с рейтингом найти географически-эффективные научно-образовательные центры.
  2. Составить карту миграции учёных по стране учитывая место их учёбы и работы.
  3. Составить рейтинг вузов в соответствии со значимостью учёных.

Технические задачи:

  1. Разобраться в языке SPARQL/ Написать несколько скриптов в соответствии с поставленными задачами.
  2. Продемонстрировать в качестве изображения полученные результаты.
  3. Работа с Викиданными. Найти информацию для всех российских учёных о их месте учёбы.
  4. Написать программу по составлению карты (желательно с анимацией) для демонстрации миграции.

Задачи[править]

Географический поиск успешных вузов[править]

  • Дано: математик и свойство Викиданных ("обучался в", "educated at").
  • Найти университет(ы), где математик проходил обучение. Извлечь: (1) название вуза, (2) даты начала и окончания учёбы, либо дату сдачи экзаменов экстерном.

Пример 1:

#added 2016-10
#Get 'educated at` of some person
SELECT ?alma ?almaLabel
WHERE
{
    wd:Q929950 wdt:P69 ?alma.
    SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}

SPARQL query 2 Results:


Пример 2:

Задача: Отобразить на карте расположение вузов в которых обучался Veniamin Kagan (Q929950). Поиск координат двух вухов, найденных в первом примере.

#Get coordinations of institutions where some person 'educated at`
#defaultView:Map
SELECT ?alma ?almaLabel ?almaLocation ?headquartersLocation
WHERE
{
    wd:Q929950 wdt:P69 ?alma.
    OPTIONAL{ ?alma  wdt:P625 ?almaLocation.}
    OPTIONAL{ ?alma  wdt:P159/wdt:P625 ?headquartersLocation.} # 'coordinate location' is subproperty of 'headquarters location'
    
    SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}

SPARQLSPARQL

В результате получаем вот такую карту:













Найти годы обучения студента в вузе (подсвойства 'start time', 'end time' и 'point of time')

Теперь ищем подсвойства 'start time', 'end time' и 'point of time':

Пример 3:

Задача найти годы обучения студента в вузе.

#added 2016-10
#Get dates 'educated at` some person 

SELECT ?person ?personLabel ?almaLabel ?starttime ?endtime ?pointoftime
WHERE
{

  ?person schema:description "Russian mathematician"@en.  
   ?person  wdt:P69 ?alma.
   ?person  wdt:P106 wd:Q170790 .
     OPTIONAL{ ?alma  wdt:P69/wdt:P580 ?starttime.}
     OPTIONAL{ ?alma  wdt:P69/wdt:P582 ?endtime.}
     OPTIONAL{ ?alma  wdt:P69/wdt:P585 ?pointoftime.}
       OPTIONAL{ ?alma  wdt:P580 ?starttime.}
       OPTIONAL{ ?alma  wdt:P582 ?endtime.}
       OPTIONAL{ ?alma  wdt:P585 ?pointoftime.}
   
   
  
    SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
   ?person rdfs:label ?persoLabel.
      FILTER(LANG(?persoLabel) = "en")
  }
}

[1]

Пример 4:

Выводим вузы в которых учились учёные-математики со всего мира.

#added 2016-10
#Get 'educated at` of some person
SELECT ?person ?personLabel ?alma ?almaLabel
WHERE
{
    ?person wdt:P106 wd:Q170790 .
    ?person wdt:P69 ?alma .
    SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}

[2]

todo описание и SPARQL-запрос


  1. Для примера 1 вывести не только название вуза, но и координаты (coordinate location).
  2. Для того же примера 1 вывести карту с этой одной точкой.
  3. Список всех вузов России, СССР, Российской империи (смотрим "Возраст"), нас интересует число выведенных записей = А.
  4. Написать новый скрипт выводит все вузы с их координатами = B, нарисовать на карте.
  5. Надо обойти вузы = A - B, далее повторить 4-й пункт.
  6. Делаем выводы из полученных результатов.


Пример 5:

Задача вывести всех учёных-математиков из России с указанием университета.

SELECT ?person ?persoLabel  ?alma ?almaLabel
WHERE
{
    ?person schema:description "Russian mathematician"@en.  
    ?person rdfs:label ?persoLabel.
    ?person wdt:P69 ?alma.
       SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
        ?person rdfs:label ?persoLabel.
      FILTER(LANG(?persoLabel) = "ru")
}

SPARQL query 831 Results

//https://www.wikidata.org/wiki/Q2074389 - что с Адян, Андронов,Барбашин ?

Пример 5.1.

Добавляем указание города в котором находится университет (к тому, что уже имеем в Примере 5) и группируем по городу. Т.е. находим города и указываем какое количество учёных училось там.

SELECT  ?cityLabel ?townLabel (COUNT(*) AS ?count)
WHERE
{
    ?person schema:description "Russian mathematician"@en.  
    ?person rdfs:label ?persoLabel.
    ?person wdt:P69 ?alma.
   OPTIONAL{ ?alma wdt:P159 ?city.}
   OPTIONAL { ?alma wdt:P131 ?town. }            
           
       SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
        ?person rdfs:label ?persoLabel.
      FILTER(LANG(?persoLabel) = "ru")
}

GROUP BY ?cityLabel ?townLabel

sprql

Пример 6:

Задача такая же, что и в Примере 5, но с указанием расположения тех университетов, в которых обучался учёный.

#Get coordinations of institutions where russian mathematician 'educated at`
#defaultView:Map

SELECT ?person ?persoLabel  ?alma ?almaLabel ?almaLocation ?headquartersLocation
WHERE
{
    ?person schema:description "Russian mathematician"@en.  
    ?person rdfs:label ?persoLabel.
    ?person wdt:P69 ?alma.
    OPTIONAL{ ?alma  wdt:P625 ?almaLocation.}
    OPTIONAL{ ?alma  wdt:P159/wdt:P625 ?headquartersLocation.} 
       SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
        ?person rdfs:label ?persoLabel.
      FILTER(LANG(?persoLabel) = "ru")
}











[3]

835 Results

Пример 7.

Я решила посмотреть какое количество учёных обучались в столице нашей Родины.

#Get coordinations of institutions where russian mathematician 'educated at` in Moscow
#defaultView:Map

SELECT ?person ?personLabel ?alma ?almaLabel ?almaLocation ?headquartersLocation
WHERE
{
     ?person schema:description "Russian mathematician"@en.  
    ?person rdfs:label ?persoLabel.
    ?person wdt:P69 ?alma.
    ?alma wdt:P159 wd:Q649.
    OPTIONAL{ ?alma  wdt:P625 ?almaLocation.}
    OPTIONAL{ ?alma  wdt:P159/wdt:P625 ?headquartersLocation.} 
  
  SERVICE wikibase:label { bd:serviceParam wikibase:language "ru" }
   ?person rdfs:label ?persoLabel.
      FILTER(LANG(?persoLabel) = "ru")
}

[4]

357 Results (from 835).

Ключевые вузы Москвы представлены на карте:














Пример 8.

Аналогия с Москвой. Рассматриваем город Петрозаводск.

#Get coordinations of institutions where russian mathematician 'educated at` in Petrozavodsk
#defaultView:Map

SELECT ?person ?personLabel ?alma ?almaLabel ?almaLocation ?headquartersLocation
WHERE
{
     ?person schema:description "Russian mathematician"@en.  
    ?person rdfs:label ?persoLabel.
    ?person wdt:P69 ?alma.
    ?alma wdt:P159 wd:Q1895.
    OPTIONAL{ ?alma  wdt:P625 ?almaLocation.}
    OPTIONAL{ ?alma  wdt:P159/wdt:P625 ?headquartersLocation.} 
  
  SERVICE wikibase:label { bd:serviceParam wikibase:language "ru" }
   ?person rdfs:label ?persoLabel.
      FILTER(LANG(?persoLabel) = "ru")
}

[5]

0 Results

Города-кладовые[править]

Пример 9.

В этом примере рассмотрим список вузов, нас интересует в каких из них училось наибольшее количество математиков.

SPARQLSPARQL

Пример 10.

Рассматриваем список учёных, которые родились и учились в одном и том же городе.

#Get scientists who studied and were born in the same city
SELECT ?person ?personLabel ?loc ?almaLabel ?cityLabel
WHERE
{
  
     ?person schema:description "Russian mathematician"@en.  
    ?person wdt:P69 ?alma.
    ?person wdt:P19 ?city.
 	?alma wdt:P159 ?loc
  
  SERVICE wikibase:label { bd:serviceParam wikibase:language "ru" }
   FILTER (?city = ?loc) .
  
   FILTER(LANG(?persoLabel) = "ru")
   ?person rdfs:label ?persoLabel.
}

Results 204 scientists

SPARQL

Пример 11.

Смотрим диаграмму по городам из предыдущего Примера 10. В каких городах наибольшее количество учёных родилось и училось.

#Get scientists who studied and were born in the same city
# defaultView:BubbleChart
SELECT  ?cityLabel (COUNT(*) AS ?count)
WHERE
{
  
     ?person schema:description "Russian mathematician"@en.  
    ?person wdt:P69 ?alma.
    ?person wdt:P19 ?city.
 	?alma wdt:P159 ?loc
  
  SERVICE wikibase:label { bd:serviceParam wikibase:language "ru" }
   FILTER (?city = ?loc) .
  
   FILTER(LANG(?persoLabel) = "ru")
   ?person rdfs:label ?persoLabel.
}
GROUP BY  ?city ?cityLabel
Города где учёные родились и учились одновременно.

Получился довольно предсказуемый результат

Четвёрка лидеров:

1.Москва

2.Санкт-Петербург

3. Казань

4.Киев



BubbleChart

Работа не волк[править]

Пример 12.

Рассмотрим тех, кто оставался работать там же где и учились.

SELECT ?person ?personLabel ?almaLabel ?workLabel
WHERE
{
  
     ?person schema:description "Russian mathematician"@en.  
    ?person wdt:P69 ?alma.
    ?person wdt:P108 ?work.
  
  SERVICE wikibase:label { bd:serviceParam wikibase:language "ru" }
   FILTER (?alma = ?work) .
  
   FILTER(LANG(?persoLabel) = "ru")
   ?person rdfs:label ?persoLabel.
}

SPARQL 147 REsults

Пример.12.1.

Группируем результаты по названию вуза и используем BubbleChart для наглядности.

#defaultView:BubbleChart
#Get scientists who studied and were born in the same city
SELECT ?almaLabel ?workLabel (COUNT(*) AS ?count)
WHERE
{
  
     ?person schema:description "Russian mathematician"@en.  
    ?person wdt:P69 ?alma.
    ?person wdt:P108 ?work.
  
  SERVICE wikibase:label { bd:serviceParam wikibase:language "ru" }
   FILTER (?alma = ?work) .
  
   FILTER(LANG(?persoLabel) = "ru")
   ?person rdfs:label ?persoLabel.
}
GROUP BY  ?almaLabel ?workLabel

Bubble

Сначала обучились, далее работаем.










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