УПРАЖНЕНИЯ
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:
в данном случае это список. В точке создается цикл, перебирающий все элементы
350 Глава 16 • Загрузка данных
pop_data
. Каждый элемент представляет собой словарь с четырьмя парами «ключ—
значение», который сохраняется в переменной
pop_dict
.
В точке ключ
'Year'
каждого словаря проверяется на значение 2010. (Так как все
значения
population_data .json
заключены в кавычки, выполняется сравнение строк.)
Если словарь относится к 2010 году, то значение, связанное с ключом
'Country
Name'
, сохраняется в переменной
country_name
, а значение, связанное с ключом
'Value'
, сохраняется в переменной
population
. Затем программа выводит на-
звание каждой страны и ее население.
Программа выводит последовательность названий стран и численности их на-
селения:
Arab World: 357868000
Caribbean small states: 6880000
East Asia & Pacific (all income levels): 2201536674
...
Zimbabwe: 12571000
Не все данные включают точные названия стран, но это неплохое начало для даль-
нейшей работы. Теперь данные необходимо преобразовать в формат, с которым
может работать Pygal.
Преобразование строк в числовые значения
Все ключи и значения в
population_data .json
хранятся в строковом формате. Чтобы
работать с данными численности населения, необходимо преобразовать строковые
значения в числа. Для этого в программе используется функция
int()
:
Достарыңызбен бөлісу: |