Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Перевод СlojurePy_1nav.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
774.32 Кб
Скачать

Сопоставительная визуализация электоральных данных

Теперь рассмотрим набор данных других всеобщих выборов, на этот раз Российских, проходивших в 2011 г. Россия — гораздо более крупная страна, и поэтому данные о проголосовавших на выборах там гораздо объемнее. Для этого мы загрузим в оперативную память один большой TSV-файл с разделением полей данных символом табуляции.

def load_ru():

'''Загрузить данные по России'''

return pd.read_csv('data/ch01/Russia2011.tsv', '\t')

Посмотрим, какие имена столбцов имеются в российских данных:

def ex_1_29():

'''Показать список полей электоральных

данных по России'''

return load_ru().columns

Будет выведен следующий список столбцов:

Index(['Код ОИК', 'ОИК №', 'Имя участка',

'Число избирателей, внесенных в список избирателей',

...

'Политическая партия СПРАВЕДЛИВАЯ РОССИЯ',

'Политическая партия ЛДПР - Либерально-демократическая партия России',

'Политическая партия "ПАТРИОТЫ РОССИИ"',

'Политическая партия КОММУНИСТИЧЕСКАЯ ПАРТИЯ КОММУНИСТЫ РОССИИ',

'Политическая партия "Российская объединенная демократическая партия "ЯБЛОКО"',

'Политическая партия "ЕДИНАЯ РОССИЯ"',

'Всероссийская политическая партия "ПАРТИЯ РОСТА"'],

dtype='object')

Имена столбцов в российском наборе данных очень описательны, но, пожалуй, длиннее, чем нужно. Также, было бы удобно, если столбцы, представляющие те же самые атрибуты, которые мы уже видели в данных по выборам в Великобритании (к примеру, доля победителя и явка на выборы) были промаркированы одинаковым образом в обоих наборах данных. Переименуем их надлежащим образом.

Наряду с набором данных функция библиотеки Pandas rename ожидает словарь, в котором ключам с текущими именами столбцов поставлены в соответствие значения с новыми именами. Если объединить ее с данными i/add-derived-column, которые мы уже рассматривали, то мы получим следующее:

def load_ru_victors():

'''Загрузить данные по России,

выбрать, переименовать и вычислить поля'''

new_cols_dict = {

'Число избирателей, внесенных в список избирателей':'Электорат',

'Число действительных избирательных бюллетеней':

'Действительные бюллетени',

'Политическая партия "ЕДИНАЯ РОССИЯ"':'Победитель'

}

newcols = list(new_cols_dict.values())

df = load_ru().rename( columns=new_cols_dict )[newcols]

df['Доля победителя'] = df['Победитель'] / df['Действительные бюллетени']

df['Явка'] = df['Действительные бюллетени'] / df['Электорат']

return df

Библиотека Pandas располагает функцией безопасного деления divide, которая идентична операции /, но защищает от деления на ноль. Она вместо пропущенного значения (nan) в одном из полей подставляет значение, передаваемое в именованном аргументе fill_value. Если же оба значения поля равны nan, то результат будет отсуствовать. Поэтому операцию деления можно было бы переписать следующим образом:

df[ 'Доля победителя' ] = \

df[ 'Победитель' ].divide( df[ 'Действительные бюллетени' ], \

fill_value=1 )