Анализ данных Чикагского марафона 2015 г.
Чикагский марафон 2015 г. состоялся 11 октября 2015 г. и привлек 45000 бегунов в Чикаго. Более 37000 участников завершили марафон, и результаты каждого участника были тщательно записаны. Исследуем и визуализируем характеристики бегунов и их участия с использованием информационного объекта entity store, содержащего эти данные.
Загрузим информационный объект entety store из ресурса ResourceObject.
![Click for copyable input](assets.ru/running-the-numbers-on-the-2015-chicago-marathon/In_180.png)
marathonEntityStore = ResourceData[
ResourceObject[
Association[
"Name" -> "2015 Chicago Marathon Data",
"UUID" -> "7dc77972-cfc3-48dc-8d08-0292c6d2a929",
"ResourceType" -> "DataResource", "Version" -> "1.0.0",
"Description" -> "2015 Chicago Marathon participant data",
"ContentSize" -> Quantity[1990.2215919999999`, "Megabytes"],
"ContentElements" -> {"Content"}]]]
![](assets.ru/running-the-numbers-on-the-2015-chicago-marathon/O_129.png)
Зарегестрируем entity store для использования в данной сессии.
![Click for copyable input](assets.ru/running-the-numbers-on-the-2015-chicago-marathon/In_181.png)
PrependTo[$EntityStores, marathonEntityStore];
Извлечем общее число бегунов и, используя неявно определенный класс сущностей, посчитаем участников мужского и женского пола.
![Click for copyable input](assets.ru/running-the-numbers-on-the-2015-chicago-marathon/In_182.png)
EntityValue["ChicagoMarathon2015", "EntityCount"]
![](assets.ru/running-the-numbers-on-the-2015-chicago-marathon/O_130.png)
![Click for copyable input](assets.ru/running-the-numbers-on-the-2015-chicago-marathon/In_183.png)
Table[EntityValue[
EntityClass["ChicagoMarathon2015", "Gender" -> gender],
"EntityCount"], {gender, {Entity["Gender", "Male"],
Entity["Gender", "Female"]}}]
![](assets.ru/running-the-numbers-on-the-2015-chicago-marathon/O_131.png)
Выберем пять случайных участников.
![Click for copyable input](assets.ru/running-the-numbers-on-the-2015-chicago-marathon/In_184.png)
RandomEntity["ChicagoMarathon2015", 5]
![](assets.ru/running-the-numbers-on-the-2015-chicago-marathon/O_132.png)
Просмотрим данные для конкретного участника.
![Click for copyable input](assets.ru/running-the-numbers-on-the-2015-chicago-marathon/In_185.png)
Entity["ChicagoMarathon2015", "Runner145"]["PropertyAssociation"]
Соберем статистику о национальностях участников и представим в виде таблицы.
![Click for copyable input](assets.ru/running-the-numbers-on-the-2015-chicago-marathon/In_186.png)
nationalityTallies =
Reverse[SortBy[
Tally[EntityValue["ChicagoMarathon2015",
EntityProperty["ChicagoMarathon2015", "Country"]]], Last]];
![](assets.ru/running-the-numbers-on-the-2015-chicago-marathon/O_134.png)
Визуализируем геодезические маршруты из всех стран происхождения участников до Чикаго.
![Click for copyable input](assets.ru/running-the-numbers-on-the-2015-chicago-marathon/In_188.png)
With[{chicago =
Entity["City", {"Chicago", "Illinois", "UnitedStates"}]},
GeoGraphics[{Darker[Green],
GeoPath[{chicago, #} & /@ nationalityTallies[[All, 1]],
"Geodesic"]},
GeoRange -> "World",
GeoProjection -> "Robinson",
GeoCenter -> chicago]]
![](assets.ru/running-the-numbers-on-the-2015-chicago-marathon/O_135.png)
Построим тепловую карту США, и укажем места, откуда прибыли американские участники.
![](assets.ru/running-the-numbers-on-the-2015-chicago-marathon/O_136.png)
Определим количество бегунов для каждого сегмента графика (см. выше).
![Click for copyable input](assets.ru/running-the-numbers-on-the-2015-chicago-marathon/In_193.png)
allkm = Table[
Normal[allTimeSplits[[i]][2 ;;, "Time"]], {i,
Length[allTimeSplits]}];
![Click for copyable input](assets.ru/running-the-numbers-on-the-2015-chicago-marathon/In_194.png)
allsplitbins = DeleteMissing[Transpose[allkm], 2];
![Click for copyable input](assets.ru/running-the-numbers-on-the-2015-chicago-marathon/In_195.png)
meanall = Table[N[Mean[allsplitbins[[i]]]], {i, Length[allsplitbins]}]
![](assets.ru/running-the-numbers-on-the-2015-chicago-marathon/O_137.png)
![Click for copyable input](assets.ru/running-the-numbers-on-the-2015-chicago-marathon/In_196.png)
marathondistances = (allTimeSplits[[1]])[All, "Split"] // Normal
![](assets.ru/running-the-numbers-on-the-2015-chicago-marathon/O_138.png)
![Click for copyable input](assets.ru/running-the-numbers-on-the-2015-chicago-marathon/In_197.png)
differencesall = Table[{marathondistances[[i + 1]],
allsplitbins[[i]] - meanall[[i]]},
{i, Length[allsplitbins]}];
![Click for copyable input](assets.ru/running-the-numbers-on-the-2015-chicago-marathon/In_198.png)
allHistograms =
Histogram[#2, {60}, PlotLabel -> NumberForm[#1, {3, 1}]] & @@@
differencesall;
Построим гистограмму для каждого сегмента.
![Click for copyable input](assets.ru/running-the-numbers-on-the-2015-chicago-marathon/In_199.png)
Grid[Partition[allHistograms, UpTo[3]]]
![](assets.ru/running-the-numbers-on-the-2015-chicago-marathon/O_139.png)
Построим плавное ядерное распределение различий между средними величинами времени, затраченном на пробег марафона.
![](assets.ru/running-the-numbers-on-the-2015-chicago-marathon/O_140.png)