348
Глава 16 •
Загрузка данных
При выполнении
highs_lows .py
мы видим, что данные отсутствуют только для одной
даты:
2014-02-16
missing data
Полученная диаграмма изображена на рис. 16.6.
Сравнивая эту диаграмму с диаграммой для Ситки, мы видим, что в Долине Смер-
ти теплей, чем на юго-востоке Аляски (как и следовало ожидать), но при этом
температурный диапазон в пустыне более широкий. Высота закрашенной области
наглядно демонстрирует этот факт.
Во многих наборах данных, с которыми вы будете работать, будут встречаться от-
сутствующие, неправильно отформатированные или некорректные данные. В таких
ситуациях воспользуйтесь теми инструментами, которые вы освоили в первой
половине книги. В данном примере для обработки отсутствующих данных исполь-
зовался блок
try
-
except
-
else
. Иногда команда
continue
используется для пропуска
части данных, или же данные удаляются после извлечения вызовом
remove()
или
del
. Используйте любое работающее решение — лишь бы в результате у вас полу-
чилась осмысленная, точная визуализация.
УПРАЖНЕНИЯ
16-1 . Сан-Франциско: к какому месту ближе температура в Сан-Франциско: к
Ситке или
Долине Смерти? Постройте температурную диаграмму для Сан-Франциско и сравните .
(Погодные данные практически для любого места можно загрузить по адресу http://www .
wunderground .com/history/ . Введите название места и диапазон дат, прокрутите страницу
и найдите ссылку Comma-Delimited File . Щелкните правой кнопкой мыши на ссылке и со-
храните данные в файле CSV .)
16-2 . Сравнение Ситки с Долиной Смерти: разные масштабы температур отражают разные
диапазоны данных . Чтобы точно сравнить температурный диапазон в Ситке с температурным
диапазоном Долины Смерти, необходимо установить одинаковый масштаб по оси
y . Изме-
ните параметры оси
y для одной или обеих диаграмм на рис . 16 .5 и 16 .6 и проведите пря-
мое сравнение температурных диапазонов в этих двух местах (или любых других, которые
вас интересуют) . Также можно попробовать нанести два набора данных на одну диаграмму .
16-3 . Осадки: выберите любое место и постройте диаграмму с уровнем осадков . Для начала
ограничьтесь данными за один месяц, а когда ваш код заработает, выполните программу
для данных за полный год .
16-4 . Исследования: постройте еще несколько визуализаций, отражающих любые другие
аспекты погоды для интересующих вас мест .
Формат JSON
В этом разделе мы загрузим данные о странах в формате JSON и будем работать
с ними при помощи модуля
json
. Используя удобные средства Pygal для работы
с географическими данными, мы построим визуализации, отражающие распреде-
ление населения по странам.
Загрузка
демографических данных
Скопируйте файл
population_data .json
, содержащий данные о численности населения
большинства стран мира с 1960 по 2010 год, в каталог с программами этой главы.
Формат JSON
349
Информация взята из многочисленных наборов данных, бесплатно публикуемых
фондом Open Knowledge Foundation (
http://data.okfn.org/
).
Извлечение
необходимых данных
Взглянем на файл
population_data .json
и попробуем понять, как взяться за обработку
данных файла:
population_data.json
[
{
"Country Name": "Arab World",
"Country Code": "ARB",
"Year": "1960",
"Value": "96388069"
},
{
"Country Name": "Arab World",
"Country Code": "ARB",
"Year": "1961",
"Value": "98882541.4"
},
...
]
Фактически перед нами один длинный список Python. Каждый элемент списка
представляет собой словарь с четырьмя ключами: название страны (
Country
Name
),
код страны (
Country
Code
), год (
Year
) и значение (
Value
), представляющее числен-
ность населения. В нашей программе будут использоваться названия стран и чис-
ленность населения только за 2010 год, поэтому для начала напишем программу,
которая выводит только эту информацию:
world_population.py
import json
# Список заполняется данными.
filename = 'population_data.json'
with open(filename) as f:
pop_data = json.load(f)
# Вывод населения каждой страны за 2010 год.
for pop_dict in pop_data:
if pop_dict['Year'] == '2010':
country_name = pop_dict['Country Name']
population = pop_dict['Value']
print(country_name + ": " + population)
Сначала программа импортирует модуль
json
, чтобы иметь возможность загружать
данные из файла. Загруженные данные сохраняются в списке
pop_data
. Функ-
ция
json.load()
преобразует данные в формат, с которым может работать Python:
в данном случае это список. В точке
создается цикл, перебирающий все элементы