☑ Подготовка данных

☑ Подготовка данных

Для выполнения тестовых заданий необходимо освоить приемы:

  • Импорт набора данных из файла.

  • Отбор наблюдений по разным параметрам.

  • Экстраполяция отсутствующих значений на основании соседних со сходными параметрами.

Подготовка блокнота

Начать работу следует с создания нового блокнота, в котором задайте структуру из заголовков. Назвать блокнот можете «Самостоятельная работа по подготовке данных», «Черепашки», «Анализ таблицы 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().

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