Полное руководство по Python для изучения науки о данных с нуля

Автор: Дмитрий Иванов [Команда P9X]

~8 минут чтения

Введение

Это произошло несколько лет назад. После работы с 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?

  1. Потрясающая поддержка сообщества! Это то, что вам понадобится в первые дни. Python 2 был выпущен в конце 2000 года и используется более 15 лет.
  2. Множество сторонних библиотек! Хотя многие библиотеки предоставили поддержку 3.x, но всё ещё большое количество модулей работает только на версиях 2.x. Если вы планируете использовать Python для конкретных приложений, таких как веб-разработка с высокой зависимостью от внешних модулей, вам лучше использовать 2.7.
  3. Некоторые функции версий 3.x имеют обратную совместимость и могут работать с версией 2.7.

Почему Python 3.4?

  1. Чище и быстрее! Разработчики Python устранили некоторые врождённые сбои и мелкие недостатки, чтобы заложить более прочную основу для будущего. Они могут быть не очень важны изначально, но будут иметь значение со временем.
  2. Это будущее! 2.7 — это последний выпуск для семейства 2.x, и в конечном итоге всем придётся перейти на версии 3.x. Python 3 выпускал стабильные версии в течение последних 5 лет и продолжит это делать.

Нет явного победителя, но я полагаю, что суть в том, что вы должны сосредоточиться на изучении Python как языка. Переход между версиями должен быть просто вопросом времени. Следите за специальной статьёй о Python 2.x vs 3.x в ближайшем будущем!

Вы новичок и ищете место, где начать свой путь в науке о данных и машинном обучении? Представляем вам комплексный курс, полный знаний и обучения науке о данных, созданный специально для вас! Программа Certified AI & ML Blackbelt+.

Как установить Python?

Есть два подхода к установке Python:

  1. Скачать Python

Вы можете скачать Python напрямую с сайта проекта и установить отдельные компоненты и библиотеки, которые хотите.

  1. Установить пакет

Альтернативно вы можете скачать и установить пакет, который поставляется с предварительно установленными библиотеками. Я бы порекомендовал скачать 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

Для тех, кто следил за мной, вот ваши незаменимые кроссовки, чтобы начать бег.

Обработка данных — необходимость

Пока мы исследовали данные, мы обнаружили несколько проблем в наборе данных, которые необходимо решить, прежде чем данные будут готовы для хорошей модели. Это упражнение обычно называют «обработкой данных». Вот проблемы, о которых мы уже знаем:

  1. В некоторых переменных есть пропущенные значения. Мы должны оценить эти значения мудро, в зависимости от количества пропущенных значений и ожидаемой важности переменных.
  2. При просмотре распределений мы обнаружили, что ApplicantIncome и LoanAmount, по-видимому, содержат экстремальные значения на обоих концах. Хотя они могут иметь интуитивный смысл, но должны быть обработаны соответствующим образом.

В дополнение к этим проблемам с числовыми полями мы должны также изучить нечисловые поля, такие как Gender, Property_Area, Married, Education и Dependents, чтобы увидеть, содержат ли они полезную информацию.

Если вы новичок в Pandas, я бы порекомендовал прочитать эту статью, прежде чем двигаться дальше. В ней подробно описаны некоторые полезные методы манипулирования данными.

Проверка пропущенных значений в наборе данных

Давайте посмотрим на пропущенные значения во всех переменных, потому что большинство моделей не работают с пропущенными данными, а даже если и работают, то их заполнение помогает чаще, чем нет. Итак, давайте проверим количество нулей / NaNs в наборе данных

df.apply(lambda x: sum