Картата, която виждате тук, показва за 60 секунди всички българчета родени в чужбина за последните 10 години – 96653 деца в целия свят. Тази карта е най-любимата ми до сега по няколко причини. Първата е, че показва данни, които не може да видим никъде в общественото пространство. Втората е, че реално не е истинска – поне не изцяло. Третата причина е най-важната – как точно я съставих. Не на последно място е и факта, че просто изглежда яко.
Защо я направих?
Преди 3 месеца с помощта на хора от Twitter взех данните за българчетата родени в чужбина. За да сме по-точни, справката показва по години и държави броят на децата родени между 2004 и 2013, на които е изваден български акт за раждане въз основа акт от друга държава. Това не са всички деца на българи зад граница, но за останалите няма как да знаем. Тогава само пуснах данните свободно в мрежата, но не направих карта. Проблемът беше, че държавите в справката на ГРАО бяха записани с нестандарни имена.
Миналия петък седнах и попълних на ръка трибуквените ISO кодове на всички държави. Това ми позволи да направя тази карта, снимка на която виждате горе. Картата е доста обикновенна и показва в различни цветове държавите, където най-много българи са имали деца за тези 10 години. Все пак е интересна, защото дава възможност да се видят точната бройка за всяка страна. Нещо обаче липсва в нея. Макар цялата информация да е пред нас, картата си е чисто статистическа и малко суха.
Затова реших да заема подхода на Twitter. Те правят карти с tweet-ове покрай големи събития. Картите им показват точка всеки път когато някой някъде пише за избори, например. Така в рамките на няколко секунди може да видим как цели държави избухват в коментари по дадена тема. Исках да направя същото за ражданията – да покажа по една такава точка за всяко раждане в чужбина. Проблемът обаче е, че реално нямам точните места и дата на раждане на всяко бебе – само бройката. Тук стигаме до любимата ми част от проекта – как всъщност направих картата.
4 набора от данни в едно
Набор от данни (или dataset) е всяка таблица, справка, географски данни или каквото и да е, което може да участва в анализ. Първият, който използвах, е справката от ГРАО. Имах вече ражданията по години и можех по тях да интерполирам приблизително колко са ражданията във всеки ден от годината. Тук виждате извадката за Испания:
Знам обаче, че жените не раждат равномерно през годината – лятото обикновенно има пик. Вместо да търся статистика за всяка държава поотделно, се обърнах към българския регистър за ражданията. Отворих данните от него преди време и от тях извадих индекс за всеки месец от годината. Това е вторият набор от данни.
Горната графика всъщност не е коректна, защото не взима нула за отправна точка на вертикалната скала. Следващата е правилната и ни показва, че разликите в месеците не са чак толкова големи. За по-голяма точност обаче ги използвах във визуализацията си.
Прилагайки тези индекси, получих долните цифри за Испания по месеци. Можех, разбира се, да умножа по полинома, за да няма скок от декември към януари, а плавен преход, но прецених, че тези стойности са достатъчно добри, а и навярно ще позволят да се забележи рязка промяна в ражданията там, където я има.
След като имах месеците, просто избрах случаен ден за всяко раждане. При 10 години ускорени в 60 секунди точната дата няма значение. Преди малко се сетих, че трябваше да завъртя индексите за южното полукулбо заради обърнатите сезони, но често казано не ми се занимава повече.
Къде са българите по света?
Следващата стъпка беше по-трудна – как да избера коодинатите. Очевидният изход е да се вземат случайни точки на територията на дадена държава. Това е относително лесно: взимам третия ми dataset – границите на държавите в geojson формат, избирам случайна точка между най-североизточната и най-югозападната точка (правоъгълните очертания) и проверявам дали е в реалните граници. Повтарям докато имам достатъчно точки за визуализацията. За целта използвах javascript и този модул заедно с моя имплементация специално за geojson стандарта. Ето как би изглеждал този подход за Испания:
Както сами виждате, точките са пръснати по цялата карта. Доста от тях са далеч от населени места, където би могло да има родени българчета. В някои държави маркерите биха попаднали в пустини и планини. Трябва да изберем точки близо до българските диаспори. За жалост, не знаем къде са те, затова решението би било да се вземе карта на гъстотата на населението и да се работи с тези данни. Тази за Испания изглежда така:
Да се търсят такива за всички държави обаче не е практично, а и не може да се автоматизира извеждането на маркерите. Затова направих нещо друго – взех данните от Glasuvam.org (четвъртият dataset). Това е един мой проект, в който българи в чужбина се абонират за новини около изборите. За целта дават града, в който живеят. Не записвам точните им координати, а случайна точка в града, за да мога после да им кажа коя е най-близката до тях секция. В събота пуснах карта показваща регистрациите в сайта през годините, на която се вижда как те се увеличават месец преди всеки вот. Взех тези данни като отправни точки. Ето тези в Испания:
Новият алгоритъм избираше случайна точка на максимално 15 км. от регистрация в сайта за изборите. Отново проверявах дали са в границите, за да не се окаже някоя в морето. Така избрах колкото точки са ми нужни и получих много по-реалистично разпределение на ражданията.
Това е дори по-добър подход от този с гъстотата на населението, защото отчита къде реално има българи. За държавите, в които няма абонирали се, използвах предходния алгоритъм. Това не е проблем, тъй като почти всички останали са малки по размер и брой раждания. Ето резултата за Испания:
Написах три скрипта, които прилагат тези алгоритми, пуснах ги за всички държави и получих списък с дати и координати. Вкарах списъка в CartoDB и след няколко настройки получих новата карта на българчетата родени в чужбина.
Измислена, но не съвсем
Казват, че изкуството създава лъжа, за да покаже истината. Тази карта далеч не е изкуство, но аз я намирам за красива. Не ви лъжа като казвам, че това е карта на ражданията, защото най-малкото бройката е истинска. Датите и координатите са доста добро приближение. Дори да имахме истинските, надали можеше да ги публикуваме по този начин. Поне не с точните координати. В този смисъл, закръгляне на истинските координати и дати с цел опазване на анонимността на семействата би дало резултат, който е много близък до моята картата. В същото време, използването им по този начин не би добавило голяма стойност към визуализацията.
Харесвам тази карта, защото за разлика от цветната, с която започнах, тя привлича повече вниманието към конкретни събития – като едно раждане в централна Африка или остров насред океана. В другата те са просто сурови цифри, които избледняват пред мащатите на други държави.
Любима ми е най-вече, защото в изготвянето ѝ ми се наложи да реша реален проблем като използвам няколко привидно несвързани източника на данни. Най-често, когато искаме да покажем ползата от отворените данни смесвайки различни източници (т.н. mashup), се получава малко насила. Не осъзнаваме колко достъпните източници на информация ни помагат в ежедневието – app-ове, карти, справки. Затова не разпознаваме тези примери като успешни mashup-и. Налага се да се илюстрира нещо нарочно с етикет opendata, за да има онзи „аха“ момент. Тук свързването се получи естествено и мисля, че резултатът е добър.
Може да разгледате картата на цяла страница в CartoDb.
В Github ще намерите кода и входните данни, с които я изготвих.
*Тази статия е първоначално публикувана на http://yurukov.net/blog/