До рождения моей дочери я думал, что нам с женой придется отправить ее в лицензированный центр по уходу за детьми где-то в Торонто. Снова и снова я слышал, как долго я должен ожидать в очереди, и поэтому нам лучше зарегистрировать ее красиво и рано! Что ж, получается, что мы нашли отличный нелицензированный домашний дневной уход, в котором она уже два года. Поэтому, когда я недавно зашел на веб-сайт Toronto Open Data и нашел набор данных лицензированных центров по уходу за детьми по всему Торонто , я подумал, что могу весело провести время, анализируя тему, с которой мне, к счастью, не приходилось иметь дело до сих пор!
Если вы посмотрите в наборе данных (или в документации к набору данных), вы увидите, что он содержит имена, адреса, телефонную информацию, тип здания, количество мест в дневном уходе (с разбивкой по возрастным категориям, а затем суммируется) и непроецированные координаты широты / долготы. Этот набор данных буквально умолял меня отобразить его, но он также умолял меня использовать одну из нескольких переменных пространства на карте!
Процесс, который я использовал для создания карт, очень похож на карты, которые я сделал, когда анализировал форму обратной связи казино Торонто (опрос), за исключением карт, которые я поместил в этом посте, точки могут быть больше или меньше в зависимости от процентили количественной переменной (в этом случае общее количество мест в детских учреждениях определенного типа здания). Вы можете найти код R, который я использовал для генерации этих карт и статистики, внизу этого поста.
Это подразумевается строго как исследовательское упражнение. Чтобы обеспечить дополнительную информативную ясность для этого упражнения, я создал несколько карт, на которых каждая карта показывает расположение центров по уходу за детьми одного типа зданий (например, Религиозные объекты, Государственные начальные школы, Здания высотного здания и т. Д.). Когда я опишу каждую карту, я также буду ссылаться на описательную статистику, которую я рассчитал и отобразил в нижней части этого поста (после всего кода R). Если вы посмотрите на таблицу внизу этого поста, вы заметите, что там было больше типов зданий, чем я здесь отобразил. Это потому, что мне не хотелось отображать все, только некоторые из самых популярных
Государственные начальные школы , безусловно, являются наиболее популярным типом зданий, в которых находятся лицензированные центры по уходу за детьми в этом наборе данных (по данным 279 центров). Глядя на карту ниже, вы можете видеть, что в центре GTA (центр города Торонто и Северный Йорк) находится очень плотная группа государственных центров по уходу за детьми в начальной школе. Когда вы идете на запад в сторону Этобико и Рексдейла, вы определенно видите меньше центров, а затем в Скарборо вы также видите несколько центров, но они кажутся более рассредоточенными и менее сгруппированными, чем в других областях. В этих центрах по уходу за детьми много различий: от 15 до 217, при этом среднее количество мест в государственных центрах по уходу за детьми в начальной школе составляет около 74 мест в каждом центре.
Места поклонения , как вы можете видеть ниже, гораздо менее многочисленны, чем их коллеги из государственных начальных школ, и только 116 из них зарегистрированы в этом наборе данных. Первое, что я заметил на этой карте, — это то, что большинство маленьких точек (таким образом, маленькие центры по уходу за детьми в местах отправления культа), похоже, падают на юге ГТА, а не на севере. Я полагаю, что это имеет смысл для меня по аналогии. На севере GTA (где я живу) многие компании представляют собой крупные сети, которые стремятся обслуживать как можно больше людей, в то время как в центре города находится множество небольших предприятий, которые обслуживают нишу на рынке. Возможно, такая же история с центрами по уходу за детьми и в местах отправления культа.
С другой стороны, подавляющее большинство мест поклонения, упомянутых в этом наборе данных, были христианской или католической конфессий. Возможно, я был удивлен, что не нашел там слишком много синагог, но это может быть просто моим предубеждением!
Центры по уходу за детьми в местах отправления культа варьировались от минимум 8 мест до максимум 167, в среднем около 48 мест на центр.
Как вы можете видеть ниже, центр по уходу за детьми High Rise демонстрирует довольно четкую географическую структуру. Похоже, они находятся либо на востоке Торонто, около шоссе 404 или за ним, либо на западе Торонто, большинство из них за пределами Аллен-роуд / Дафферин-стрит. Интересно, что объясняет, как выглядит эта дыра в середине !? Кроме того, вы заметите, что многие из небольших высотных детских учреждений находятся на востоке Торонто, а не на западе. Высотные центры по уходу за детьми варьируются от минимум 20 мест до максимум 145, в среднем около 69 мест на центр. Вы заметите, что минимальное количество мест выше, чем в других категориях, вероятно, из-за того, что они, вероятно, обслуживают много жителей в своем собственном высотном здании!
Цель Здания , или здания, которые были созданы с учетом центра по уходу за детьми, довольно редки по всему Торонто, и в наборе данных только 58. С точки зрения кластеров здесь, похоже, вы могли бы разграничить 4 группы зданий: север, юг, восток и запад. Целевые здания варьируются от минимум 20 мест до максимум 165 со средним значением около 72 мест на центр (однако медиана равна 60, что говорит о том, что там есть несколько действительно больших по сравнению со всеми остальными). В стороне от них, кажется, что специальные здания похожи на высотные детские сады в том смысле, что они предназначены для более высокой пропускной способности, чем другие центры.
Общественные и развлекательные центры с детьми заботятся о том, чтобы показать, как они расположены вокруг GTA. Очевидные исключения — в Скарборо, где, по-видимому, очень мало общественных и развлекательных центров с уходом за детьми по сравнению с тем, что происходит на западе. Возможно, это отражает явление, которое мы наблюдали в центрах по уходу за детьми в местах отправления религиозных обрядов, на юге расположено множество небольших общинных и развлекательных центров с уходом за детьми, тогда как север — это область более крупных центров. Эти центры варьируются от минимум 13 пробелов до максимум 146, в среднем около 64 пробелов на центр.
Хотя центры по уходу за детьми в домахКажется, что они выглядят очень случайно, я не могу не заметить, что в непосредственной близости от железнодорожных путей Go Train, исходящих от станции Union, есть несколько центров. Возможно, там есть интересная история, или, может быть, я просто вижу шаблоны, которые ничего не значат (в конце концов, в наборе данных зарегистрировано всего 38 таких мест!). Центры по уходу за детьми в домах варьируются от минимум 10 мест до максимум 116, в среднем около 50 мест на центр. Мне действительно интересно, как именно эти дома подходят так многим детям. Видя, как мы живем в мире пост-Google Street View, вы можете просто посмотреть на любой дом, который вы хотите в живом цвете, введя адрес. Вы можете увидеть, насколько большой из этих домов (он имеет 87 мест!) Под следующей картой.
Вау! Это не полная картина, но вы чувствуете, что дом действительно довольно большой!
Ну вот и завершается мой набег в мир лицензированных центров по уходу за детьми. Если у вас есть какие-либо комментарии относительно этих результатов или вы можете показать мне лучший способ их отображения (хотя мне действительно нравится RGoogleMaps), то обязательно оставьте мне комментарий! Код R доступен ниже.
library(ff) library(ffbase) library(RgoogleMaps) library(plyr) addTrans <- function(color,trans) { # This function adds transparancy to a color. # Define transparancy with an integer between 0 and 255 # 0 being fully transparant and 255 being fully visable # Works with either color and trans a vector of equal length, # or one of the two of length 1. if (length(color)!=length(trans)&!any(c(length(color),length(trans))==1)) stop("Vector lengths not correct") if (length(color)==1 & length(trans)>1) color <- rep(color,length(trans)) if (length(trans)==1 & length(color)>1) trans <- rep(trans,length(color)) num2hex <- function(x) { hex <- unlist(strsplit("0123456789ABCDEF",split="")) return(paste(hex[(x-x%%16)/16+1],hex[x%%16+1],sep="")) } rgb <- rbind(col2rgb(color),trans) res <- paste("#",apply(apply(rgb,2,num2hex),2,paste,collapse=""),sep="") return(res) } childcare = read.csv.ffdf(file="child-care.csv", first.rows=500,next.rows=500,colClasses=NA,header=TRUE) pcodes = read.csv.ffdf(file="zipcodeset.txt", first.rows=50000, next.rows=50000, colClasses=NA, header=FALSE) childcare$PCODE_R = as.ff(as.factor(sub(" ","", childcare[,"PCODE"]))) names(pcodes) = c("PCODE","Lat","Long","City","Prov") childcare = merge(childcare, as.ffdf(pcodes[,1:3]), by.x="PCODE_R", by.y="PCODE", all.x=TRUE) childcare.gc = subset(childcare, !is.na(Lat)) childcare.worship = subset(childcare.gc, bldg_type == "Place of Worship") childcare.house = subset(childcare.gc, bldg_type == "House") childcare.community = subset(childcare.gc, bldg_type == "Community/Recreation Centre") childcare.pschool = subset(childcare.gc, bldg_type == "Public Elementary School") childcare.highrise = subset(childcare.gc, bldg_type == "High Rise Apartment") childcare.purpose = subset(childcare.gc, bldg_type == "Purpose Built") Fn = ecdf(childcare.worship[,"TOTSPACE"]) childcare.worship$TOTSPACE.pct = as.ff(Fn(childcare.worship[,"TOTSPACE"])) mymap = MapBackground(lat=childcare.worship[,"Lat"], lon=childcare.worship[,"Long"]) PlotOnStaticMap(mymap, childcare.worship[,"Lat"], childcare.worship[,"Long"], cex=childcare.worship[,"TOTSPACE.pct"]*4, pch=21, bg=addTrans("purple",100)) Fn = ecdf(childcare.house[,"TOTSPACE"]) childcare.house$TOTSPACE.pct = as.ff(Fn(childcare.house[,"TOTSPACE"])) mymap = MapBackground(lat=childcare.house[,"Lat"], lon=childcare.house[,"Long"]) PlotOnStaticMap(mymap, childcare.house[,"Lat"], childcare.house[,"Long"], cex=childcare.house[,"TOTSPACE.pct"]*4, pch=21, bg=addTrans("purple",100)) Fn = ecdf(childcare.community[,"TOTSPACE"]) childcare.community$TOTSPACE.pct = as.ff(Fn(childcare.community[,"TOTSPACE"])) mymap = MapBackground(lat=childcare.community[,"Lat"], lon=childcare.community[,"Long"]) PlotOnStaticMap(mymap, childcare.community[,"Lat"], childcare.community[,"Long"], cex=childcare.community[,"TOTSPACE.pct"]*4, pch=21, bg=addTrans("purple",100)) Fn = ecdf(childcare.pschool[,"TOTSPACE"]) childcare.pschool$TOTSPACE.pct = as.ff(Fn(childcare.pschool[,"TOTSPACE"])) mymap = MapBackground(lat=childcare.pschool[,"Lat"], lon=childcare.pschool[,"Long"]) PlotOnStaticMap(mymap, childcare.pschool[,"Lat"], childcare.pschool[,"Long"], cex=childcare.pschool[,"TOTSPACE.pct"]*4, pch=21, bg=addTrans("purple",100)) Fn = ecdf(childcare.highrise[,"TOTSPACE"]) childcare.highrise$TOTSPACE.pct = as.ff(Fn(childcare.highrise[,"TOTSPACE"])) mymap = MapBackground(lat=childcare.highrise[,"Lat"], lon=childcare.highrise[,"Long"]) PlotOnStaticMap(mymap, childcare.highrise[,"Lat"], childcare.highrise[,"Long"], cex=childcare.highrise[,"TOTSPACE.pct"]*4, pch=21, bg=addTrans("purple",100)) Fn = ecdf(childcare.purpose[,"TOTSPACE"]) childcare.purpose$TOTSPACE.pct = as.ff(Fn(childcare.purpose[,"TOTSPACE"])) mymap = MapBackground(lat=childcare.purpose[,"Lat"], lon=childcare.purpose[,"Long"]) PlotOnStaticMap(mymap, childcare.purpose[,"Lat"], childcare.purpose[,"Long"], cex=childcare.purpose[,"TOTSPACE.pct"]*4, pch=21, bg=addTrans("purple",100)) space.by.bldg_type = ddply(as.data.frame(childcare.gc), .(bldg_type), function (x) c(min.space = min(x[,"TOTSPACE"], na.rm=TRUE), average.space = mean(x[,"TOTSPACE"], na.rm=TRUE), median.space = median(x[,"TOTSPACE"], na.rm=TRUE), max.space = max(x[,"TOTSPACE"], na.rm=TRUE), tot_daycares = sum(!is.na(x[,"TOTSPACE"])))) space.by.bldg_type = space.by.bldg_type[order(-space.by.bldg_type$tot_daycares),] bldg_type min.space average.space median.space max.space tot_daycares 18 Public Elementary School 15 74.19355 69.0 217 279 17 Place of Worship 8 48.46552 44.0 167 116 16 Other 14 51.17647 48.5 160 102 1 Catholic Elementary School 16 51.50000 49.5 112 76 9 High Rise Apartment 20 68.56522 62.0 145 69 22 Purpose Built 20 72.48276 59.5 165 58 8 Community/Recreation Centre 13 63.73333 60.0 146 45 11 House 10 49.84211 44.5 116 38 6 Commercial Building 16 55.95833 51.5 129 24 15 Office Building 20 69.69565 64.0 162 23 20 Public High School 16 42.36842 41.0 60 19 21 Public School (Closed) 22 70.26667 56.0 180 15 4 Church 13 51.90909 46.0 148 11 19 Public Elementary School (French) 36 84.71429 70.0 167 7 23 Synagogue 24 64.00000 61.0 108 7 7 Community College/University 15 55.16667 59.5 78 6 14 Low Rise Apartment 15 56.00000 62.0 92 6 2 Catholic Elementary School(French) 39 81.20000 76.0 130 5 5 City owned Community/Recreation Centre 28 65.80000 62.0 103 5 3 Catholic High School 36 51.50000 54.0 62 4 12 HUMSRV 45 52.00000 52.0 59 2 13 Industrial Building 45 109.00000 109.0 173 2 26 Private Elementary School 20 154.50000 154.5 289 2 10 Hospital/Health Centre 25 25.00000 25.0 25 1 24 109 109.00000 109.0 109 1 25 Coomunity/Recreation Centre 156 156.00000 156.0 156 1 27 Public Middle School 10 10.00000 10.0 10 1