Программирование Викиданных/География математиков
Постановка цели
правитьСоставить рейтинг учёных-математиков по данным Википедии. На основе этого рейтинга пронаблюдать ряд особенностей.
Задачи:
- В соответствии с рейтингом найти географически-эффективные научно-образовательные центры.
- Составить карту миграции учёных по стране учитывая место их учёбы и работы.
- Составить рейтинг вузов в соответствии со значимостью учёных.
Технические задачи:
- Разобраться в языке SPARQL/ Написать несколько скриптов в соответствии с поставленными задачами.
- Продемонстрировать в качестве изображения полученные результаты.
- Работа с Викиданными. Найти информацию для всех российских учёных о их месте учёбы.
- Написать программу по составлению карты (желательно с анимацией) для демонстрации миграции.
Задачи
правитьГеографический поиск успешных вузов
править- Дано: математик и свойство Викиданных ("обучался в", "educated at").
- Найти университет(ы), где математик проходил обучение. Извлечь: (1) название вуза, (2) даты начала и окончания учёбы, либо дату сдачи экзаменов экстерном.
Пример 1:
- Объект: Veniamin Kagan (Q929950)
- Свойство: educated at (P69)
#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). Поиск координат двух вухов, найденных в первом примере.
- Объекты: Veniamin Kagan (Q929950)
- Свойства: educated at (P69),coordinate location (P625), headquarters location (P159)
#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" }
}
В результате получаем вот такую карту:
- Найти годы обучения студента в вузе (подсвойства 'start time', 'end time' и 'point of time')
Теперь ищем подсвойства 'start time', 'end time' и 'point of time':
Пример 3:
Задача найти годы обучения студента в вузе.
- Объект: Veniamin Kagan (Q929950)
- Свойства: educated at (P69),start time (P580),end time (P582),point of time (P585).
#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")
}
}
Пример 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" }
}
todo описание и SPARQL-запрос
- Для примера 1 вывести не только название вуза, но и координаты (coordinate location).
- Для того же примера 1 вывести карту с этой одной точкой.
- Список всех вузов России, СССР, Российской империи (смотрим "Возраст"), нас интересует число выведенных записей = А.
- Написать новый скрипт выводит все вузы с их координатами = B, нарисовать на карте.
- Надо обойти вузы = A - B, далее повторить 4-й пункт.
- Делаем выводы из полученных результатов.
Пример 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
Пример 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")
}
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")
}
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")
}
0 Results
Города-кладовые
правитьПример 9.
В этом примере рассмотрим список вузов, нас интересует в каких из них училось наибольшее количество математиков.
Пример 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
Пример 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.Киев
Работа не волк
правитьПример 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
Ссылки
править- A Wikidata/DBpedia Geography of Violence // 18th Feb 2016
- Members of the US House of Representatives - Wikidata (перемещение 11 тыс. человек Конгресса с 1721 по 2015 год, от места рождения -> к месту обучения -> к возможному месту смерти)