Основы программирования в Python

Алла Тамбовцева, НИУ ВШЭ

Домашнее задание 7

Файл с решениями нужно загрузить на Dropbox по ссылке.

Часть 1

  1. Загрузите csv-файл с таблицей по ссылке. Описание базы см. здесь.
  2. Выведите описательные статистики для всех количественных (integer, float) переменных в базе.
  3. Выберите из таблицы только строки, которые соответствуют респондентам, которые выбрали рыбалку на берегу (beach).
  4. Выберите из таблицы строки, которые соответствуют респондентам, которые предпочитают рыбачить на лодке (boat) с доходом (income) ниже 3500. Сохраните результат в переменную d.
  5. Переименуйте столбец catch в c_rate.
  6. Добавьте в таблицу столбец log_income, содержащий натуральный логарифм доходов респондентов.
  7. Сгруппируйте наблюдения в таблице по признаку тип рыбалки (mode) и выведите для каждого типа среднюю цену (price), которую респонденты готовы заплатить за рыбалку.
  8. Постройте гистограмму для показателя pboat, поменяйте ее цвет и добавьте название графика.
  9. Выведите на экран первые 8 строк таблицы. А теперь последние 8.
  10. Сохраните датафрейм в csv-файл.

Часть 2

Файл для работы:

polit.xlsx (ссылка на файл)

Описание файла:

сокращенная версия файла PetersMcGuireData.xlsx, взятого отсюда (страница James W.McGuire, Data used in “Authoritarianism in the Middle East”).

Переменные:

  • ctry – country
  • fh09 – Freedom House index (ranging from 1 (most) to 7 (fewest) political rights and civil liberties), 2009
  • polity09 – Polity2 score (ranging from -10 to +10, latter most democratic), 2009
  • gini – Gini index of income inequality, 2000-2010
  • fparl08 – female share of seats in parliament (%), 2008
  • mena – Middle East and North Africa (1 - yes, 0 - no)
  • lati – Latin America (1 - yes, 0 - no)
  • cari – Caribbean, former British, French, Dutch colony
  • east – East Asia
  • sovi – Former Soviet Bloc
  • afri – Africa
  • corr0509 – Control of Corruption, average 2005-2009 (expert rating).
  1. Загрузите таблицу из файла polit.xlsx и сохраните ее в переменную df. Используйте функцию read_excel().
  2. Выведите общую информацию по таблице: число строк и столбцов, типы данных в таблице. Есть ли в таблице пропущенные значения?
  3. Если в таблице есть строки с пропущенными значениями, удалите их. Сохраните изменения в df.
  4. Выведите на экран описательные статистики по всем количественным переменным в таблице. Выберите какой-нибудь интересующий вас столбец и проинтерпретируйте описательные статистики по нему (т.е. опишите «обычными» словами, что значат значения типа min, std, 50% и так далее).
  5. Выберите в таблице строки, которые соответствуют странам со значениями Freedom House (fh09) выше 5. Сохраните их в переменную not_free.
  6. Выберите в таблице строки, которые соответствуют странам Африки (afri) с процентом женщин в парламенте выше 30%.
  7. Выберите в таблице строки, которые соответствуют странам Африки или Латинской Америки (afri и lati) со значением polity09 больше или равным 8.
  8. Отсортируйте строки в таблице в соответствии со значениями столбца со средними значениями индекса Control of Corruption (corr0509) по убыванию и выведите: первые 10 строк; последние 10 строк. Используйте метод .sort_values().

    Пример:

     df.sort_values('column_name', ascending = False) # ascend - возрастать
  9. Добавьте в df столбец corr_round, в котором будут храниться округленные до 2 знака после запятой значения индекса Control of Corruption (corr0509).

  10. Добавьте в df столбец fh_status, в котором будут храниться типы стран в зависимости от значения индекса Freedom House (значения free, partly free, not free). Соответствие значений fh09 с типами стран см. здесь (в конце, Table 3).
  11. Сгруппируйте строки в таблице в соответствии со значениями столбца fh_status, полученного в предыдущей части и выведите минимальное, среднее и максимальное значение показателя gini (индекс Джини) по каждой группе.
  12. Сгруппируйте строки в таблице в соответствии со значениями столбца fh_status и запишите строки, относящиеся к разным группам, в отдельные csv-файлы.

    Подсказка: используйте цикл for и перебирайте в нем пары название группы-датафрейм. Попробуйте прогнать следующий код и посмотреть, что получится:

    for name, table in df.groupby('fh_status'):
        print(name, table.head(2))
  13. Сочетая функционал pandas и matplotlib, постройте диаграмму рассеяния (scatterplot, функция scatter()) для пары показателей fh09 и corr0509. Поменяйте тип точек (маркер) и цвет точек. Добавьте заголовок к графику.