☑ Подготовка данных
Содержание
☑ Подготовка данных¶
Для выполнения тестовых заданий необходимо освоить приемы:
Импорт набора данных из файла.
Отбор наблюдений по разным параметрам.
Экстраполяция отсутствующих значений на основании соседних со сходными параметрами.
Подготовка блокнота¶
Начать работу следует с создания нового блокнота, в котором задайте структуру из заголовков. Назвать блокнот можете «Самостоятельная работа по подготовке данных», «Черепашки», «Анализ таблицы pandas» или как Вам будет понятней, если позже захотите вернуться к этим задачам.
В качестве источников решений для конкретных задач откройте во вкладках блокноты Task_dataset_turtle.ipynb, Task_pre_turtle.ipynb и Task_modeline_turtle.ipynb и освежите в памяти, что в каком из них описывается.
Совет
Чтобы открыть ссылку в новой кладке, можно кликнуть, удерживая клавишу Ctrl.
Из предыдущего анализа набора данных про черепах ясно, что часть колонок не потребуются, поэтому сразу после загрузки можно убрать неиспользуемые колонки. В систематических наименованиях сразу же следует почистить пробелы по краям.
D = pd.read_excel(r'd/Data_S1_Complete_Dataset.xlsx', skiprows=5)
D=D.iloc[:,6:-5]
D.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 692 entries, 0 to 691
Data columns (total 16 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Genus 692 non-null object
1 Species 692 non-null object
2 Common Name 306 non-null object
3 Family 692 non-null object
4 M Mass (g) 297 non-null float64
5 F Mass (g) 297 non-null float64
6 N 446 non-null object
7 Locality 289 non-null object
8 M SCL (mm) 534 non-null float64
9 F SCL (mm) 537 non-null float64
10 M Max Mass (g) 126 non-null float64
11 F Max Mass (g) 127 non-null float64
12 Pop Max Mass (g) 113 non-null float64
13 M Max SCL (mm) 271 non-null float64
14 F Max SCL (mm) 272 non-null float64
15 Pop Max SCL (mm) 125 non-null float64
dtypes: float64(10), object(6)
memory usage: 86.6+ KB
D.Genus = D.Genus.str.strip()
D.Species = D.Species.str.strip()
D.Family = D.Family.str.strip()
# бинарная классификация
D['vid'] = D.Genus + ' ' + D.Species
Поле „vid“ удобно для отбора записей по виду. Например, в задаче спрашивается про средиземноморских черепах (Testudo graeca). Без сделанных преобразований код для отбора мог бы быть таким:
X = D[(D.Species.str.strip()=='graeca')]
То есть чистку поля Species выполняем прямо в условии отбора. Использование только видового названия в данном случае рискованно. Вдруг есть виды в других родах, также названные «греческими»?
После сделанных чисток названий рода и вида запрос с точным отбором записей по одному виду может быть таким:
X = D[(D.vid=='Testudo graeca')]
Сделайте заголовки второго уровня для решения отдельных заданий. Это удобно, чтобы не запутаться в однотипных заданиях.
Совет
Чтобы хорошо было видно код, удерживая Ctrl
, покрутите колёсико мыши до достижения удобной читаемости букв.
Принцип работы - наращиваем содержание за счет новых ячеек, в которых размещаем комментарии или код. Быстро получаем результат.
Скопируйте текст задачи, чтобы он был перед глазами во время решения, и не приходилось переключаться между окнами.
Задача 1.¶
Для представителей какого семейства больше всего записей, в которых указан максимальный размер самок, но не указан самцов?
Определитесь, о каких колонках данных идет речь?
Если просто размер самок, то это „F SCL (mm)“, а если максимальный, то в названии добавляется префикс «Max»: „F Max SCL (mm)“.
Найдите пример кода в блокноте, где делается проверка, сколько записей размеров мужских без женских.
Вносим изменения в код - указываем нужные нам колонки данных.
Метод проверяющий отсутствие -
.isnull()
или.isna()
.Метод проверяющий присутствие -
.notnull()
или.notna()
.
Совет
Ссылку на колонку указываем в квадратных скобках и кавычках.
Чтобы учесть два условия, соедините их знаком амперсенд &
.
X = D[ D['F Max SCL (mm)'].notnull() & D['M Max SCL (mm)'].isnull()]
X.shape
(8, 16)
Записей, удовлетворяющих заданному условию, нашлось 8 шт. Выборку этих записей мы присвоили переменной X
.
Посчитаем теперь значения семейств из этой выборки.
X['Family'].value_counts()
Chelidae 3
Dermochelyidae 1
Cheloniidae 1
Pelomedusidae 1
Trionychidae 1
Geoemydidae 1
Name: Family, dtype: int64
Ответ - это метка первого максимального значения: Chelidae.
Чтобы получить чистый ответ - сохраним подсчеты в переменной, у которой найдем индекс максимума.
N = X['Family'].value_counts()
N.idxmax()
'Chelidae'
Теперь нужно перейти в образовательный портал и выбрать правильный вариант ответа на вопрос.
Следующий шаг - скопировать текст следующей задачи и перенести ее в подготовленный раздел.
Задача 2¶
К какому виду относится самая крупная по размеру особь черепахи из Индонезии (Indonesia) согласно набору данных для исследования полового диморфизма черепах?
Отберем записи по предложенной локализации - в скобках указана подстрока для поиска.
В наборе данных пять показателей размера. Найдем максимальное значение среди них.
X = D[D.Locality.str.contains('Indonesia')==True]
kkl=['M SCL (mm)','F SCL (mm)','M Max SCL (mm)','F Max SCL (mm)','Pop Max SCL (mm)']
X[kkl].max()
M SCL (mm) 281.0
F SCL (mm) 228.0
M Max SCL (mm) 282.0
F Max SCL (mm) 287.0
Pop Max SCL (mm) 287.0
dtype: float64
Среди индонезийских черепах самая большая самка с карапаксом 287 см. Она же указана и самой большой в популяции.
Найдем индекс этой записи и получим по индексу всю необходимую информацию.
X['Pop Max SCL (mm)'].idxmax()
57
D.loc[57, 'vid']
'Chelodina oblonga'
Другие задачи решаются аналогично в 2-4 действия.
Первым действием как правило идет отбор выборки по какому-то условию или очистка строк, «загрязнённых» лишними пробелами.
Задачи на подсчёт уникальных семейств и видов после произведенных чисток названий родов и видов и создания вспомогательных колонок решаются в одно действие с помощью методов .nunique()
или .value_counts()
.
После адаптации подходящих фрагментов кода к своей задаче, обязательно проверьте - все ли названия полей и строки поиска исправлены в соответствии с условиями.