#!/usr/bin/env python # coding: utf-8 # # Основы программирования в Python # # *Алла Тамбовцева, НИУ ВШЭ* # # ### Домашнее задание 7 # # Файл с решениями нужно загрузить на Dropbox по [ссылке](https://www.dropbox.com/request/KcKFkKeDqoJZEcimik59). # ### Часть 1 # # 1. Загрузите csv-файл с таблицей по [ссылке](http://math-info.hse.ru/f/2017-18/py-prog/Fishing.csv). Описание базы см. [здесь](https://vincentarelbundock.github.io/Rdatasets/doc/Ecdat/Fishing.html). # 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` ([ссылка](http://math-info.hse.ru/f/2018-19/comm-math/polit.xlsx) на файл) # # **Описание файла:** # # сокращенная версия файла `PetersMcGuireData.xlsx`, взятого [отсюда](http://jmcguire.faculty.wesleyan.edu/welcome/data/#20LActries) (страница 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 # * `sov`i – 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` с типами стран см. [здесь](https://freedomhouse.org/report/freedom-world-2016/methodology) (в конце, 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`. Поменяйте тип точек (маркер) и цвет точек. Добавьте заголовок к графику.