Введение
Это произошло несколько лет назад. После работы с SAS более 5 лет я решил выйти из зоны комфорта. Будучи специалистом по данным, я начал искать другие полезные инструменты. К счастью, мне не потребовалось много времени, чтобы принять решение — Python стал моей закуской.
У меня всегда было влечение к программированию. Пришло время заняться тем, что я действительно любил — кодированием. Оказалось, что программировать довольно просто!
Я изучил основы Python за неделю. С тех пор я не только изучил этот язык досконально, но и помог многим другим освоить его. Python изначально был языком общего назначения. Но с годами, благодаря поддержке сообщества, для этого языка были разработаны специализированные библиотеки для анализа данных и прогнозного моделирования.
Из-за нехватки ресурсов по Python для науки о данных я решил создать этот учебник, чтобы помочь многим другим быстрее освоить Python. В этом учебнике мы будем изучать небольшими порциями информацию о том, как использовать Python для анализа данных, разжёвывать её до тех пор, пока нам не станет комфортно, и практиковаться самостоятельно. Полный учебник по Python с нуля в области науки о данных.
Цели обучения
- Этот материал представляет собой полный учебник по изучению науки о данных с помощью Python с нуля.
- Он также поможет вам изучить основные методы анализа данных с помощью Python.
- Вы также сможете расширить свои знания об алгоритмах машинного обучения.
Вы также можете ознакомиться с курсом «Введение в науку о данных» — всеобъемлющее введение в мир науки о данных. Он включает модули по Python, статистике и прогнозному моделированию наряду с множеством практических проектов, чтобы вы могли «запачкать руки».
Основы Python для анализа данных
Зачем изучать Python для анализа данных?
Python в последнее время вызывает большой интерес как язык программирования для анализа данных. У меня были базовые знания Python некоторое время назад. Вот несколько причин, которые говорят в пользу изучения Python:
- Открытый исходный код — бесплатная установка.
- Потрясающее онлайн-сообщество.
- Очень легко учиться.
- Может стать общим языком для науки о данных и производства веб-продуктов для аналитики.
Конечно, у него есть и недостатки:
- Это интерпретируемый язык, а не компилируемый — следовательно, может занимать больше процессорного времени. Однако, учитывая экономию времени программиста (из-за простоты изучения), это всё равно может быть хорошим выбором.
Python 2.7 против 3.4
Это одна из самых обсуждаемых тем в Python. Вы неизбежно столкнётесь с ней, особенно если вы новичок. Здесь нет правильного или неправильного выбора. Всё зависит от ситуации и ваших потребностей. Я постараюсь дать вам несколько советов, которые помогут вам сделать осознанный выбор.
Почему Python 2.7?
- Потрясающая поддержка сообщества! Это то, что вам понадобится в первые дни. Python 2 был выпущен в конце 2000 года и используется более 15 лет.
- Множество сторонних библиотек! Хотя многие библиотеки предоставили поддержку 3.x, но всё ещё большое количество модулей работает только на версиях 2.x. Если вы планируете использовать Python для конкретных приложений, таких как веб-разработка с высокой зависимостью от внешних модулей, вам лучше использовать 2.7.
- Некоторые функции версий 3.x имеют обратную совместимость и могут работать с версией 2.7.
Почему Python 3.4?
- Чище и быстрее! Разработчики Python устранили некоторые врождённые сбои и мелкие недостатки, чтобы заложить более прочную основу для будущего. Они могут быть не очень важны изначально, но будут иметь значение со временем.
- Это будущее! 2.7 — это последний выпуск для семейства 2.x, и в конечном итоге всем придётся перейти на версии 3.x. Python 3 выпускал стабильные версии в течение последних 5 лет и продолжит это делать.
Нет явного победителя, но я полагаю, что суть в том, что вы должны сосредоточиться на изучении Python как языка. Переход между версиями должен быть просто вопросом времени. Следите за специальной статьёй о Python 2.x vs 3.x в ближайшем будущем!
Вы новичок и ищете место, где начать свой путь в науке о данных и машинном обучении? Представляем вам комплексный курс, полный знаний и обучения науке о данных, созданный специально для вас! Программа Certified AI & ML Blackbelt+.
Как установить Python?
Есть два подхода к установке Python:
- Скачать Python
Вы можете скачать Python напрямую с сайта проекта и установить отдельные компоненты и библиотеки, которые хотите.
- Установить пакет
Альтернативно вы можете скачать и установить пакет, который поставляется с предварительно установленными библиотеками. Я бы порекомендовал скачать Anaconda. Другой вариант — Enthought Canopy Express.
Второй метод обеспечивает беспроблемную установку, поэтому я рекомендую его новичкам.
Недостатком этого подхода является то, что вам придётся ждать обновления всего пакета, даже если вас интересует последняя версия одной библиотеки. Это не должно иметь значения, пока вы не занимаетесь передовыми статистическими исследованиями.
Выбор среды разработки
После установки Python у вас есть различные варианты выбора среды. Вот три наиболее распространённых варианта:
- Terminal / Shell based
- IDLE (среда по умолчанию)
- iPython notebook — аналогично markdown в R
Я лично предпочитаю iPython Notebooks. Он предоставляет множество хороших функций для документирования при написании самого кода, и вы можете выбрать выполнение кода блоками (а не построчно).
Мы будем использовать среду iPython для этого полного учебника.
Разминка: запуск вашей первой программы на Python
Вы можете использовать Python как простой калькулятор для начала:
Несколько вещей, на которые следует обратить внимание
- Вы можете запустить iPython notebook, написав «ipython notebook» в вашем терминале / cmd, в зависимости от ОС, с которой вы работаете.
- Вы можете назвать iPython notebook, просто нажав на имя — UntitledO на скриншоте выше.
- Интерфейс показывает In [] для входных данных и Out[] для выходных.
- Вы можете выполнить код, нажав «Shift + Enter» или «ALT + Enter», если хотите вставить дополнительную строку после.
Прежде чем мы углубимся в решение задач, давайте сделаем шаг назад и разберёмся в основах Python. Как мы знаем, структуры данных, итерация и условные конструкции составляют суть любого языка. В Python они включают списки, строки, кортежи, словари, for-loop, while-loop, if-else и т. д. Давайте рассмотрим некоторые из них.
Библиотеки Python и структуры данных
Структуры данных Python
Ниже приведены некоторые структуры данных, которые используются в Python. Вы должны быть знакомы с ними, чтобы использовать их соответствующим образом.
- Списки — списки являются одной из самых универсальных структур данных в Python. Список можно просто определить, написав список значений, разделённых запятыми, в квадратных скобках. Списки могут содержать элементы разных типов, но обычно все элементы имеют один и тот же тип. Списки Python изменчивы, и отдельные элементы списка можно изменить.
Вот быстрый пример определения списка и доступа к нему:
'''
PYTHON FOR DATA SCIENCE - LISTS
'''
square_list = [0, 1, 4, 9, 16, 25]
print('\n\nList = ',square_list)
'''Individual items can be accessed by index'''
#Indexing returns the items
print('\n\nItem at Index 0 = ',square_list[0])
'''slicing of list'''
# a range of items can be accessed by providing the first and last index
print('\n\n Items from index 2 to 4 = ', square_list[2:4])
'''Access elements from end with negative index'''
print('\n\nThe second last element of the list is :', square_list[-2])
Строки — строки можно просто определить с помощью одинарных (‘), двойных (“) или тройных (”’) кавычек. Строки, заключённые в тройные кавычки (”’), могут занимать несколько строк и часто используются в docstrings (способ документирования функций в Python). \ используется как escape-символ. Обратите внимание, что строки Python неизменяемы, поэтому вы не можете изменить часть строк.
’’' PYTHON FOR DATA SCIENCE - STRINGS ’''
define a string Value
my_string = ‘Hello’
character at index 1
print(‘Character at index 1 = ‘, my_string[1])
length of the string
print(’\n\nLength of the string = ‘, len(my_string))
string concatenation
new_string = my_string+’ World’ print(’\n\nnew String is = ‘,new_string)
Кортежи — кортеж представлен числом значений, разделённых запятыми. Кортежи неизменяемы, и вывод окружён круглыми скобками, чтобы вложенные кортежи обрабатывались правильно. Кроме того, хотя кортежи неизменяемы, они могут содержать изменяемые данные, если это необходимо.
Поскольку кортежи неизменяемы и не могут изменяться, они быстрее в обработке по сравнению со списками. Следовательно, если ваш список вряд ли изменится, вы должны использовать кортежи вместо списков.
Словарь — словарь — это неупорядоченный набор пар key: value, причём ключи должны быть уникальными (в пределах одного словаря). Пара фигурных скобок создаёт пустой словарь:
{}.’’’ PYTHON FOR DATA SCIENCE - TUPLES AND DICTIONARY ’’’
define a tuple
my_tuple = (1, 2, 3, 4, 5)
access single element using index
print(‘TUPLE = ‘,my_tuple)
print(’\n\nelement at index 1 = ‘,my_tuple[1])
uncomment the below code and you see the error as the tuples are immutable
#my_tuple[2] = 4
define a dictionary
my_dict = { ‘key_1’ : 4, ‘key_2’ : 5, ‘key_3’ : 6, ‘key_4’ : 7 }
access value of any key
print(’\n\nThe value of key_1 in the dictionary is ‘,my_dict[‘key_1’])
dictionaries are mutable
my_dict[‘key_1’] = 1000
print(’\n\nThe value of key_1 after update in the dictionary is ‘,my_dict[‘key_1’])
#keys of dictionary print(’\n\nkeys = ‘,my_dict.keys())
Итерация и условные конструкции в Python
Как и в большинстве языков, в Python также есть цикл for, который является наиболее широко используемым методом для итерации. У него простой синтаксис:
for i in [Python Iterable]:
expression(i)
Здесь «Python Iterable» может быть списком, кортежем или другими продвинутыми структурами данных, которые мы рассмотрим в следующих разделах. Давайте посмотрим на простой пример определения факториала числа.
fact=1
for i in range(1,N+1):
fact *= i
Что касается условных операторов, они используются для выполнения фрагментов кода на основе условия. Наиболее часто используемая конструкция — if-else со следующим синтаксисом:
if [condition]:
__execution if true__
else:
__execution if false__
Например, если мы хотим вывести, является ли число N чётным или нечётным:
if N%2 == 0:
print ('Even')
else:
print ('Odd')
Теперь, когда вы знакомы с основами Python, давайте сделаем шаг дальше. Что, если вам нужно выполнить следующие задачи:
- Умножить 2 матрицы
- Найти корень квадратного уравнения
- Построить гистограммы и столбчатые диаграммы
- Создать статистические модели
- Получить доступ к веб-страницам
Если вы попытаетесь написать код с нуля, это будет кошмаром, и вы не останетесь на Python больше чем на 2 дня! Но давайте не будем об этом беспокоиться. К счастью, есть много библиотек с предопределёнными функциями, которые мы можем напрямую импортировать в наш код и облегчить себе жизнь.
Например, рассмотрим пример с факториалом, который мы только что видели. Мы можем сделать это за один шаг:
math.factorial(N)
Конечно, нам нужно импортировать математическую библиотеку для этого. Давайте познакомимся с некоторыми полезными библиотеками. Первый шаг — научиться импортировать их в нашу среду. В Python есть несколько способов сделать это:
**import** math **as** m
**from** math **import** *
В первом способе мы определили псевдоним m для библиотеки math. Мы можем использовать различные функции из математической библиотеки (например, factorial), ссылаясь на них с помощью псевдонима m.factorial().
Во втором способе вы импортировали всё пространство имён в math, то есть вы можете напрямую использовать factorial() без ссылки на math.
Совет: Google рекомендует использовать первый стиль импорта библиотек, поскольку вы будете знать, откуда взялись функции.
Список основных библиотек Python для науки о данных
Ниже приведён список библиотек, которые вам понадобятся для любых научных вычислений и анализа данных:
| Библиотека | Описание |
|---|---|
| NumPy | Мощный инструмент для n-мерных массивов, линейной алгебры, преобразования Фурье и интеграции с другими языками. |
| SciPy | Построен на NumPy, идеально подходит для научных и инженерных задач, таких как преобразование Фурье, линейная алгебра и оптимизация. |
| Matplotlib | Универсальное построение графиков, от гистограмм до тепловых карт. Предлагает встроенное построение графиков и поддерживает команды LaTeX для математики. |
| Pandas | Необходим для структурированных операций с данными, широко используется для обработки и подготовки данных для науки о данных. |
| Scikit Learn | Эффективные инструменты для машинного обучения и статистического моделирования, включая классификацию, регрессию и кластеризацию. |
| Statsmodels | Для статистического моделирования, предоставляет описательную статистику, тесты и функции построения графиков для различных типов данных. |
| Seaborn | Нацелен на привлекательную визуализацию статистических данных, построен на Matplotlib, облегчая исследование и понимание данных. |
| Bokeh | Создаёт интерактивные графики, панели управления и приложения для обработки данных для современных веб-браузеров с высокой производительностью взаимодействия. |
| Blaze | Расширяет возможности NumPy и Pandas для распределённых и потоковых наборов данных, обеспечивая доступ к данным из различных источников. |
| Scrapy | Веб-фреймворк для извлечения определённых шаблонов данных путём перехода по веб-страницам в рамках веб-сайта. |
| SymPy | Для символьных вычислений, охватывает арифметику до квантовой физики, с возможностью форматирования результатов в виде кода LaTeX. |
| Requests | Упрощает доступ к сети по сравнению с urllib2, удобен для начинающих с небольшими отличиями. |
Дополнительные библиотеки
- os для операций с операционной системой и файлами
- networkx и igraph для манипуляций с графовыми данными
- регулярные выражения для поиска шаблонов в текстовых данных
- BeautifulSoup для сбора данных из интернета. Он уступает Scrapy, поскольку извлекает информацию только с одной веб-страницы за один запуск.
Теперь, когда мы знакомы с основами Python и дополнительными библиотеками, давайте углубимся в решение задач с помощью Python. Да, я имею в виду создание прогнозной модели! В процессе мы будем использовать некоторые мощные библиотеки и познакомимся со следующим уровнем структур данных. Мы проведём вас через три ключевых этапа:
- Исследование данных — узнать больше о данных, которые у нас есть
- Обработка данных — очистка данных и работа с ними, чтобы они лучше подходили для статистического моделирования
- Прогнозное моделирование — запуск реальных алгоритмов и получение удовольствия 🙂
Эксплораторный анализ в Python с помощью Pandas
Чтобы изучить наши данные глубже, позвольте мне познакомить вас с ещё одним животным (как будто Python было недостаточно!) — Pandas
Введение в Series и DataFrames
Series можно понимать как одномерный индексированный массив с метками. Вы можете получить доступ к отдельным элементам этого ряда с помощью этих меток.
DataFrame похож на таблицу Excel — у вас есть имена столбцов, которые относятся к столбцам, и у вас есть строки, которые можно получить с помощью номеров строк. Существенное различие заключается в том, что имена столбцов и номера строк известны как индекс столбца и индекс строки в случае dataframes.
Series и dataframes составляют основную модель данных для Pandas в Python. Наборы данных сначала считываются в эти dataframes, а затем к их столбцам можно применять различные операции (например, группировка, агрегирование и т. д.) очень легко.
Подробнее:10 минут с Pandas
Практический набор данных — проблема прогнозирования займов
Вы можете скачать набор данных здесь. Вот описание переменных:
VARIABLE DESCRIPTIONS:
Variable Description
Loan_ID Unique Loan ID
Gender Male/ Female
Married Applicant married (Y/N)
Dependents Number of dependents
Education Applicant Education (Graduate/ Under Graduate)
Self_Employed Self employed (Y/N)
ApplicantIncome Applicant income
CoapplicantIncome Coapplicant income
LoanAmount Loan amount in thousands
Loan_Amount_Term Term of loan in months
Credit_History credit history meets guidelines
Property_Area Urban/ Semi Urban/ Rural
Loan_Status Loan approved (Y/N)
Давайте начнём с исследования
Чтобы начать, запустите интерфейс iPython в режиме Inline Pylab, набрав следующее в вашем терминале/командной строке Windows:
ipython notebook --pylab=inline
Это открывает iPython notebook в среде pylab, в которой уже импортировано несколько полезных библиотек. Также вы сможете строить графики ваших данных встроенно, что делает эту среду действительно хорошей для интерактивного анализа данных. Вы можете проверить, правильно ли загрузилась среда, набрав следующую команду (и получив вывод, как показано на рисунке ниже):
plot(arange(5))
Я сейчас работаю в Linux и сохранил набор данных в следующем месте:
/home/kunal/Downloads/Loan_Prediction/train.csv
Импортирование библиотек и набора данных:
Ниже перечислены библиотеки, которые мы будем использовать во время этого урока:
Обратите внимание, что вам не нужно импортировать matplotlib и numpy из-за среды pylab. Я всё равно оставил их в коде, на случай, если вы будете использовать код в другой среде.
После импорта библиотеки вы читаете набор данных с помощью функции read_csv(). Вот как выглядит код до этого этапа:
import pandas as pd
import numpy as np
import matplotlib as plt
%matplotlib inline
df = pd.read_csv("/home/kunal/Downloads/Loan_Prediction/train.csv") #Reading the dataset in a dataframe using Pandas
Быстрый анализ данных
Как только вы прочитали набор данных, вы можете просмотреть несколько верхних строк, используя функцию head()
df.head(10)
Это должно вывести 10 строк. Альтернативно вы можете просмотреть больше строк, распечатав набор данных.
Далее вы можете посмотреть сводку числовых полей с помощью функции describe()
df.describe()
Функция describe() предоставит количество, среднее значение, стандартное отклонение (std), минимум, квартили и максимум в своём выводе (прочитайте эту статью, чтобы освежить базовые знания по статистике, чтобы понять распределение населения).
Здесь несколько выводов, которые вы можете сделать, просмотрев вывод функции describe():
- LoanAmount имеет (614 – 592) 22 пропущенных значения.
- Loan_Amount_Term имеет (614 – 600) 14 пропущенных значений.
- Credit_History имеет (614 – 564) 50 пропущенных значений.
- Мы также можем увидеть, что около 84% заявителей имеют кредитную историю. Как? Среднее значение поля Credit_History равно 0,84 (помните, что у Credit_History значение 1 для тех, у кого есть кредитная история, и 0 в противном случае).
- Распределение ApplicantIncome соответствует ожиданиям. То же самое с CoapplicantIncome
Пожалуйста, обратите внимание, что мы можем получить представление о возможном перекосе в данных, сравнив среднее значение с медианой, то есть 50% фигурой.
Для нечисловых значений (например, Property_Area, Credit_History и т. д.) мы можем посмотреть частотное распределение, чтобы понять, имеют ли они смысл. Частотная таблица может быть распечатана с помощью следующей команды:
df['Property_Area'].value_counts()
Аналогично мы можем посмотреть уникальные значения кредитной истории. Обратите внимание, что dfname[‘column_name’] — это базовая техника индексирования для доступа к определённому столбцу dataframes. Это может быть список столбцов. Для получения дополнительной информации обратитесь к ресурсу «10 минут с Pandas», которым я поделился выше.
Анализ распределения
Теперь, когда мы ознакомились с основными характеристиками данных, давайте изучим распределение различных переменных. Начнём с числовых переменных — а именно ApplicantIncome и LoanAmount
Давайте начнём с построения гистограммы ApplicantIncome с помощью следующих команд:
df['ApplicantIncome'].hist(bins=50)
Здесь мы наблюдаем, что есть несколько экстремальных значений. Это также причина, по которой требуется 50 ячеек для чёткого отображения распределения.
Далее мы посмотрим на ящичковые диаграммы, чтобы понять распределения. Ящичковую диаграмму для тарифа можно построить с помощью:
df.boxplot(column='ApplicantIncome')
Это подтверждает наличие большого количества выбросов/экстремальных значений. Это может быть связано с неравенством доходов в обществе. Частично это может быть связано с тем, что мы смотрим на людей с разным уровнем образования. Давайте разделим их по образованию:
df.boxplot(column='ApplicantIncome', by = 'Education')
Мы видим, что между средним доходом выпускников и не выпускников нет существенной разницы. Но есть более высокий процент выпускников с очень высокими доходами, которые кажутся выбросами.
Теперь давайте посмотрим на гистограмму и ящичковую диаграмму LoanAmount с помощью следующей команды:
df['LoanAmount'].hist(bins=50)
df.boxplot(column='LoanAmount')
Опять же, есть некоторые экстремальные значения. Ясно, что как ApplicantIncome, так и LoanAmount требуют некоторой обработки данных. LoanAmount имеет пропущенные и экстремальные значения, в то время как ApplicantIncome имеет несколько экстремальных значений, которые требуют более глубокого понимания. Мы рассмотрим это в следующих разделах.
Анализ категориальных переменных
Теперь, когда мы понимаем распределения для ApplicantIncome и LoanIncome, давайте разберёмся в категориальных переменных более подробно. Мы будем использовать Excel-стиль сводной таблицы и перекрёстной табуляции. Например, давайте посмотрим на шансы получения займа на основе кредитной истории. Это можно сделать в MS Excel с помощью сводной таблицы следующим образом:
Примечание: здесь статус займа был закодирован как 1 для «Да» и 0 для «Нет». Таким образом, среднее значение представляет вероятность получения займа.
Теперь мы рассмотрим шаги, необходимые для получения аналогичного понимания с помощью Python. Пожалуйста, обратитесь к этой статье, чтобы освоить различные методы манипулирования данными в Pandas.
temp1 = df['Credit_History'].value_counts(ascending=True)
temp2 = df.pivot_table(values='Loan_Status',index=['Credit_History'],aggfunc=lambda x: x.map({'Y':1,'N':0}).mean())
print ('Frequency Table for Credit History:')
print (temp1)
print ('\nProbility of getting loan for each Credit History class:')
print (temp2)
Теперь мы можем наблюдать, что мы получаем аналогичную сводную таблицу, как в MS Excel. Это можно построить в виде гистограммы с помощью библиотеки «matplotlib» со следующим кодом:
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(8,4))
ax1 = fig.add_subplot(121)
ax1.set_xlabel('Credit_History')
ax1.set_ylabel('Count of Applicants')
ax1.set_title("Applicants by Credit_History")
temp1.plot(kind='bar')
ax2 = fig.add_subplot(122)
temp2.plot(kind = 'bar')
ax2.set_xlabel('Credit_History')
ax2.set_ylabel('Probability of getting loan')
ax2.set_title("Probability of getting loan by credit history")
Это показывает, что шансы на получение займа увеличиваются в восемь раз, если у заявителя есть действующая кредитная история. Вы можете построить аналогичные графики по Married, Self-Employed, Property_Area и т. д.
Альтернативно эти два графика можно визуализировать, объединив их в виде столбчатой диаграммы:
temp3 = pd.crosstab(df['Credit_History'], df['Loan_Status'])
temp3.plot(kind='bar', stacked=True, color=['red','blue'], grid=False)
Вы также можете добавить пол (аналогично сводной таблице в Excel):
Если вы ещё не поняли, мы только что создали два базовых алгоритма классификации, один на основе кредитной истории, а другой — на основе двух категориальных переменных (включая пол). Вы можете быстро закодировать это, чтобы создать свой первый Submission на AV Datahacks.
Мы только что увидели, как мы можем провести эксплораторный анализ в Python с помощью Pandas. Я надеюсь, что ваша любовь к пандам (животным) увеличилась к этому моменту — учитывая объём помощи, которую библиотека может вам оказать при анализе наборов данных.
Далее давайте рассмотрим переменные ApplicantIncome и LoanStatus более подробно, выполним обработку данных и создадим набор данных для применения различных методов моделирования. Я настоятельно рекомендую вам взять другой набор данных и задачу и пройти независимый пример, прежде чем читать дальше.
Обработка данных в Python: использование Pandas
Для тех, кто следил за мной, вот ваши незаменимые кроссовки, чтобы начать бег.
Обработка данных — необходимость
Пока мы исследовали данные, мы обнаружили несколько проблем в наборе данных, которые необходимо решить, прежде чем данные будут готовы для хорошей модели. Это упражнение обычно называют «обработкой данных». Вот проблемы, о которых мы уже знаем:
- В некоторых переменных есть пропущенные значения. Мы должны оценить эти значения мудро, в зависимости от количества пропущенных значений и ожидаемой важности переменных.
- При просмотре распределений мы обнаружили, что ApplicantIncome и LoanAmount, по-видимому, содержат экстремальные значения на обоих концах. Хотя они могут иметь интуитивный смысл, но должны быть обработаны соответствующим образом.
В дополнение к этим проблемам с числовыми полями мы должны также изучить нечисловые поля, такие как Gender, Property_Area, Married, Education и Dependents, чтобы увидеть, содержат ли они полезную информацию.
Если вы новичок в Pandas, я бы порекомендовал прочитать эту статью, прежде чем двигаться дальше. В ней подробно описаны некоторые полезные методы манипулирования данными.
Проверка пропущенных значений в наборе данных
Давайте посмотрим на пропущенные значения во всех переменных, потому что большинство моделей не работают с пропущенными данными, а даже если и работают, то их заполнение помогает чаще, чем нет. Итак, давайте проверим количество нулей / NaNs в наборе данных
df.apply(lambda x: sum
