Исследовательский анализ данных наборов данных Kaggle.

Вступление:

Исследовательский анализ данных или EDA относится к процессу получения дополнительных сведений о данных и подготовки их к моделированию. Откровенно говоря, EDA и разработка функций - это искусство, в котором вы можете поиграть с данными и попытаться извлечь из них понимание, прежде чем приступить к процессу прогнозирования. Большинство людей понимают, что машинное обучение - это только модели и алгоритмы. Но для того, чтобы эти модели работали хорошо и с высокой точностью, необходим EDA. EDA предоставляет много важной информации, которую очень легко пропустить, информации, которая помогает в долгосрочном анализе.

Контекст:

Нет жестких правил выполнения EDA. Каждый, кто имеет дело с данными, должен найти свой собственный способ выполнения EDA и соответственно понимать данные. В этой статье я объясню свой пошаговый подход к выполнению EDA для набора данных Home price от Kaggle. Основные необходимые шаги:

  1. Импорт набора данных.
  2. Получение базовой информации.
  3. Анализируя различные характеристики и разделяя их на числовые и категориальные.
  4. Работа с недостающими значениями.
  5. Работа с коррелированными функциями.

В конце концов, я буду внедрять современный подход к EDA, используя библиотеку Sweetviz, которая, как мне кажется, может помочь нам сэкономить много времени и усилий.

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

Загрузка набора данных:

Как упоминалось выше, я буду использовать набор данных о ценах на жилье от Kaggle, ссылка на который дана здесь.

Мы будем загружать поезд и тестовый набор данных в фреймворк Pandas отдельно.

Предварительный анализ:

Фрейм данных, содержащий данные поезда и тестирования, хотел бы. Мы постараемся получить базовое представление обо всех данных.

Подробное описание функций дается вместе с набором данных. Краткая информация получена.

<class 'pandas.core.frame.DataFrame'>
Int64Index: 1460 entries, 1 to 1460
Data columns (total 80 columns):
 #   Column         Non-Null Count  Dtype  
---  ------         --------------  -----  
 0   MSSubClass     1460 non-null   int64  
 1   MSZoning       1460 non-null   object 
 2   LotFrontage    1201 non-null   float64
 3   LotArea        1460 non-null   int64  
 4   Street         1460 non-null   object 
 5   Alley          91 non-null     object 
 6   LotShape       1460 non-null   object 
 7   LandContour    1460 non-null   object 
 8   Utilities      1460 non-null   object 
 9   LotConfig      1460 non-null   object 
 10  LandSlope      1460 non-null   object 
 11  Neighborhood   1460 non-null   object 
 12  Condition1     1460 non-null   object 
 13  Condition2     1460 non-null   object 
 14  BldgType       1460 non-null   object 
 15  HouseStyle     1460 non-null   object 
 16  OverallQual    1460 non-null   int64  
 17  OverallCond    1460 non-null   int64  
 18  YearBuilt      1460 non-null   int64  
 19  YearRemodAdd   1460 non-null   int64  
 20  RoofStyle      1460 non-null   object 
 21  RoofMatl       1460 non-null   object 
 22  Exterior1st    1460 non-null   object 
 23  Exterior2nd    1460 non-null   object 
 24  MasVnrType     1452 non-null   object 
 25  MasVnrArea     1452 non-null   float64
 26  ExterQual      1460 non-null   object 
 27  ExterCond      1460 non-null   object 
 28  Foundation     1460 non-null   object 
 29  BsmtQual       1423 non-null   object 
 30  BsmtCond       1423 non-null   object 
 31  BsmtExposure   1422 non-null   object 
 32  BsmtFinType1   1423 non-null   object 
 33  BsmtFinSF1     1460 non-null   int64  
 34  BsmtFinType2   1422 non-null   object 
 35  BsmtFinSF2     1460 non-null   int64  
 36  BsmtUnfSF      1460 non-null   int64  
 37  TotalBsmtSF    1460 non-null   int64  
 38  Heating        1460 non-null   object 
 39  HeatingQC      1460 non-null   object 
 40  CentralAir     1460 non-null   object 
 41  Electrical     1459 non-null   object 
 42  1stFlrSF       1460 non-null   int64  
 43  2ndFlrSF       1460 non-null   int64  
 44  LowQualFinSF   1460 non-null   int64  
 45  GrLivArea      1460 non-null   int64  
 46  BsmtFullBath   1460 non-null   int64  
 47  BsmtHalfBath   1460 non-null   int64  
 48  FullBath       1460 non-null   int64  
 49  HalfBath       1460 non-null   int64  
 50  BedroomAbvGr   1460 non-null   int64  
 51  KitchenAbvGr   1460 non-null   int64  
 52  KitchenQual    1460 non-null   object 
 53  TotRmsAbvGrd   1460 non-null   int64  
 54  Functional     1460 non-null   object 
 55  Fireplaces     1460 non-null   int64  
 56  FireplaceQu    770 non-null    object 
 57  GarageType     1379 non-null   object 
 58  GarageYrBlt    1379 non-null   float64
 59  GarageFinish   1379 non-null   object 
 60  GarageCars     1460 non-null   int64  
 61  GarageArea     1460 non-null   int64  
 62  GarageQual     1379 non-null   object 
 63  GarageCond     1379 non-null   object 
 64  PavedDrive     1460 non-null   object 
 65  WoodDeckSF     1460 non-null   int64  
 66  OpenPorchSF    1460 non-null   int64  
 67  EnclosedPorch  1460 non-null   int64  
 68  3SsnPorch      1460 non-null   int64  
 69  ScreenPorch    1460 non-null   int64  
 70  PoolArea       1460 non-null   int64  
 71  PoolQC         7 non-null      object 
 72  Fence          281 non-null    object 
 73  MiscFeature    54 non-null     object 
 74  MiscVal        1460 non-null   int64  
 75  MoSold         1460 non-null   int64  
 76  YrSold         1460 non-null   int64  
 77  SaleType       1460 non-null   object 
 78  SaleCondition  1460 non-null   object 
 79  SalePrice      1460 non-null   int64  
dtypes: float64(3), int64(34), object(43)
memory usage: 923.9+ KB
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1459 entries, 1461 to 2919
Data columns (total 79 columns):
 #   Column         Non-Null Count  Dtype  
---  ------         --------------  -----  
 0   MSSubClass     1459 non-null   int64  
 1   MSZoning       1455 non-null   object 
 2   LotFrontage    1232 non-null   float64
 3   LotArea        1459 non-null   int64  
 4   Street         1459 non-null   object 
 5   Alley          107 non-null    object 
 6   LotShape       1459 non-null   object 
 7   LandContour    1459 non-null   object 
 8   Utilities      1457 non-null   object 
 9   LotConfig      1459 non-null   object 
 10  LandSlope      1459 non-null   object 
 11  Neighborhood   1459 non-null   object 
 12  Condition1     1459 non-null   object 
 13  Condition2     1459 non-null   object 
 14  BldgType       1459 non-null   object 
 15  HouseStyle     1459 non-null   object 
 16  OverallQual    1459 non-null   int64  
 17  OverallCond    1459 non-null   int64  
 18  YearBuilt      1459 non-null   int64  
 19  YearRemodAdd   1459 non-null   int64  
 20  RoofStyle      1459 non-null   object 
 21  RoofMatl       1459 non-null   object 
 22  Exterior1st    1458 non-null   object 
 23  Exterior2nd    1458 non-null   object 
 24  MasVnrType     1443 non-null   object 
 25  MasVnrArea     1444 non-null   float64
 26  ExterQual      1459 non-null   object 
 27  ExterCond      1459 non-null   object 
 28  Foundation     1459 non-null   object 
 29  BsmtQual       1415 non-null   object 
 30  BsmtCond       1414 non-null   object 
 31  BsmtExposure   1415 non-null   object 
 32  BsmtFinType1   1417 non-null   object 
 33  BsmtFinSF1     1458 non-null   float64
 34  BsmtFinType2   1417 non-null   object 
 35  BsmtFinSF2     1458 non-null   float64
 36  BsmtUnfSF      1458 non-null   float64
 37  TotalBsmtSF    1458 non-null   float64
 38  Heating        1459 non-null   object 
 39  HeatingQC      1459 non-null   object 
 40  CentralAir     1459 non-null   object 
 41  Electrical     1459 non-null   object 
 42  1stFlrSF       1459 non-null   int64  
 43  2ndFlrSF       1459 non-null   int64  
 44  LowQualFinSF   1459 non-null   int64  
 45  GrLivArea      1459 non-null   int64  
 46  BsmtFullBath   1457 non-null   float64
 47  BsmtHalfBath   1457 non-null   float64
 48  FullBath       1459 non-null   int64  
 49  HalfBath       1459 non-null   int64  
 50  BedroomAbvGr   1459 non-null   int64  
 51  KitchenAbvGr   1459 non-null   int64  
 52  KitchenQual    1458 non-null   object 
 53  TotRmsAbvGrd   1459 non-null   int64  
 54  Functional     1457 non-null   object 
 55  Fireplaces     1459 non-null   int64  
 56  FireplaceQu    729 non-null    object 
 57  GarageType     1383 non-null   object 
 58  GarageYrBlt    1381 non-null   float64
 59  GarageFinish   1381 non-null   object 
 60  GarageCars     1458 non-null   float64
 61  GarageArea     1458 non-null   float64
 62  GarageQual     1381 non-null   object 
 63  GarageCond     1381 non-null   object 
 64  PavedDrive     1459 non-null   object 
 65  WoodDeckSF     1459 non-null   int64  
 66  OpenPorchSF    1459 non-null   int64  
 67  EnclosedPorch  1459 non-null   int64  
 68  3SsnPorch      1459 non-null   int64  
 69  ScreenPorch    1459 non-null   int64  
 70  PoolArea       1459 non-null   int64  
 71  PoolQC         3 non-null      object 
 72  Fence          290 non-null    object 
 73  MiscFeature    51 non-null     object 
 74  MiscVal        1459 non-null   int64  
 75  MoSold         1459 non-null   int64  
 76  YrSold         1459 non-null   int64  
 77  SaleType       1458 non-null   object 
 78  SaleCondition  1459 non-null   object 
dtypes: float64(11), int64(25), object(43)
memory usage: 911.9+ KB
(1460, 80)
(1459, 79)

Мы видим, что набор данных поезда состоит всего из 80 функций, включая целевую переменную SalePrice и 1460 обучающих примеров. Набор данных теста или прогноза состоит из 79 функций (SalePrice должен быть спрогнозирован) и 1459 точек данных.

Проверка отсутствующих значений:

Любой набор данных будет содержать определенные пропущенные значения в своих характеристиках, будь то числовые характеристики или категориальные характеристики. Это происходит из-за многих причин, таких как недоступность данных, неправильный ввод данных и т. Д. Нам необходимо проверить отсутствующие значения в нашем наборе данных поезда. Следующая визуализация может помочь нам в этом.

Мы видим, что для функций PoolQC и некоторых других отсутствует около 90% данных. Мы разберемся с ними позже.

Визуализация данных:

Типы функций:

В основном есть два типа столбцов: числовые и категориальные. Давайте разделим наши функции в train_df на каждую из них.

Числовые особенности:

Index(['MSSubClass', 'LotFrontage', 'LotArea', 'OverallQual', 'OverallCond',
       'YearBuilt', 'YearRemodAdd', 'MasVnrArea', 'BsmtFinSF1', 'BsmtFinSF2',
       'BsmtUnfSF', 'TotalBsmtSF', '1stFlrSF', '2ndFlrSF', 'LowQualFinSF',
       'GrLivArea', 'BsmtFullBath', 'BsmtHalfBath', 'FullBath', 'HalfBath',
       'BedroomAbvGr', 'KitchenAbvGr', 'TotRmsAbvGrd', 'Fireplaces',
       'GarageYrBlt', 'GarageCars', 'GarageArea', 'WoodDeckSF', 'OpenPorchSF',
       'EnclosedPorch', '3SsnPorch', 'ScreenPorch', 'PoolArea', 'MiscVal',
       'MoSold', 'YrSold'],
      dtype='object')

К категориальным признакам относятся:

Index(['MSZoning', 'Street', 'Alley', 'LotShape', 'LandContour', 'Utilities',
       'LotConfig', 'LandSlope', 'Neighborhood', 'Condition1', 'Condition2',
       'BldgType', 'HouseStyle', 'RoofStyle', 'RoofMatl', 'Exterior1st',
       'Exterior2nd', 'MasVnrType', 'ExterQual', 'ExterCond', 'Foundation',
       'BsmtQual', 'BsmtCond', 'BsmtExposure', 'BsmtFinType1', 'BsmtFinType2',
       'Heating', 'HeatingQC', 'CentralAir', 'Electrical', 'KitchenQual',
       'Functional', 'FireplaceQu', 'GarageType', 'GarageFinish', 'GarageQual',
       'GarageCond', 'PavedDrive', 'PoolQC', 'Fence', 'MiscFeature',
       'SaleType', 'SaleCondition'],
      dtype='object')

Распространение функций:

Давайте посмотрим, как распределяются данные в числовых функциях. График распределения дает нам график одномерного распределения каждой переменной, как показано ниже. Эти графики также помогают нам узнать об асимметрии характеристик и выбросов в них, если таковые имеются.

Одномерный анализ:

Мы не можем определить выбросы только на графиках распределения. Коробчатые диаграммы помогают нам больше узнать об отклонениях в функциях. Точки за пределами синего поля обозначают точки данных, которые представляют собой выбросы.

Двумерный анализ:

Мы также можем нанести на график функции вместе с целевой переменной для проведения двумерного анализа. Диаграмма рассеяния поможет.

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

Обработка данных:

Удаление выбросов:

Внимательно наблюдая за приведенными выше графиками, можно сделать вывод, что следующие особенности имеют выбросы:

  1. LotFrontage
  2. LotArea
  3. MasVnrArea
  4. BsmtFinSF1
  5. BsmtFinSF2
  6. TotalBsmtSF
  7. 1stFlrSF
  8. LowQualFinSF
  9. GrLivArea
  10. WoodDeckSF
  11. Закрытый
  12. 3СснПорч
  13. ScreenPorch
  14. PoolArea
  15. Miscval

Давайте подробнее рассмотрим эти особенности, построив графики их регрессии.

Теперь мы можем подтвердить, что у функций есть выбросы. Следующим шагом будет их удаление. Мы можем получить ограничения, чтобы удалить их (из соответствующих функций) из коробчатых диаграмм и графиков регрессии.

Удаление не участвующих функций:

В наборе данных могут быть функции, которые не будут сильно влиять на целевую переменную. Нам нужно удалить их, чтобы повысить точность. Несколько функций, имеющих высокую корреляцию друг с другом, могут вызвать чрезмерную подгонку. Давайте выясним сильно коррелированные признаки (корреляция ›0,8). Это можно сделать с помощью тепловой карты, содержащей значения корреляции функций.

Из графика мы видим, что следующие особенности сильно коррелируют друг с другом:

  1. 1stFlrSF и TotalBsmtSF
  2. TotRmsAbvGrd и GrdLivArea
  3. GarageYrBlt и год постройки
  4. ГаражПлощадь и ГаражАвтомобили

Достаточно удалить любую функцию в каждом из этих четырех наборов. Мы можем решить, какой из них удалить, изучив его вклад в целевую переменную SalePrice. Это можно сделать, проверив его корреляцию с SalePrice.

SalePrice        1.000000
OverallQual      0.801493
GrLivArea        0.718996
GarageCars       0.647613
TotalBsmtSF      0.644541
GarageArea       0.634446
1stFlrSF         0.622300
FullBath         0.562614
YearBuilt        0.552223
YearRemodAdd     0.528484
TotRmsAbvGrd     0.524650
GarageYrBlt      0.508125
MasVnrArea       0.493222
Fireplaces       0.464076
BsmtFinSF1       0.392553
LotFrontage      0.360988
LotArea          0.332449
WoodDeckSF       0.329587
OpenPorchSF      0.322831
2ndFlrSF         0.296424
HalfBath         0.289755
BsmtUnfSF        0.230026
BsmtFullBath     0.220147
BedroomAbvGr     0.161515
ScreenPorch      0.069728
MoSold           0.051067
3SsnPorch        0.038210
BsmtHalfBath    -0.014339
YrSold          -0.023857
BsmtFinSF2      -0.038292
MiscVal         -0.048533
LowQualFinSF    -0.064357
OverallCond     -0.081193
MSSubClass      -0.085814
EnclosedPorch   -0.134095
KitchenAbvGr    -0.139927
PoolArea              NaN
Name: SalePrice, dtype: float64

Мы будем отбрасывать функции (среди пар, показанных выше), имеющие меньшую корреляцию с целевой переменной.

Мы проверили уже визуализированное количество пропущенных значений в функциях ранее. Нам нужно удалить функции, у которых отсутствующие значения превышают 90%.

PoolQC         1.000000
MiscFeature    0.966387
Alley          0.936975
Fence          0.809524
FireplaceQu    0.479692
dtype: float64

Как мы видим, функции PoolQC, MiscFeature, Alley имеют более 90% пропущенных значений. Поэтому мы должны отказаться от этих функций.

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

Как мы видим, функция PoolArea в значительной степени не важна, поскольку она сообщает о площади пула для всех обучающих примеров как об нуле, поэтому мы также можем отказаться от нее.

Заполнение числовых пропущенных значений:

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

LotFrontage    0.175070
MasVnrArea     0.005602
SalePrice      0.000000
YrSold         0.000000
LotArea        0.000000
dtype: float64

Мы видим, что у функций LotFrontage и MasVnrArea отсутствуют функции. Мы можем заменить их на их среднее значение, используя встроенные функции репутации из sklearn.

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

SalePrice        0.0
YrSold           0.0
LotFrontage      0.0
LotArea          0.0
OverallQual      0.0
OverallCond      0.0
YearBuilt        0.0
YearRemodAdd     0.0
MasVnrArea       0.0
BsmtFinSF1       0.0
BsmtFinSF2       0.0
BsmtUnfSF        0.0
TotalBsmtSF      0.0
2ndFlrSF         0.0
LowQualFinSF     0.0
GrLivArea        0.0
BsmtFullBath     0.0
BsmtHalfBath     0.0
FullBath         0.0
HalfBath         0.0
BedroomAbvGr     0.0
KitchenAbvGr     0.0
Fireplaces       0.0
GarageCars       0.0
WoodDeckSF       0.0
OpenPorchSF      0.0
EnclosedPorch    0.0
3SsnPorch        0.0
ScreenPorch      0.0
MiscVal          0.0
MoSold           0.0
MSSubClass       0.0
dtype: float64

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

LotFrontage      0.155586
MasVnrArea       0.010281
BsmtFullBath     0.001371
BsmtHalfBath     0.001371
GarageCars       0.000685
BsmtFinSF1       0.000685
BsmtFinSF2       0.000685
BsmtUnfSF        0.000685
TotalBsmtSF      0.000685
LowQualFinSF     0.000000
LotArea          0.000000
OverallQual      0.000000
OverallCond      0.000000
YearBuilt        0.000000
YearRemodAdd     0.000000
2ndFlrSF         0.000000
YrSold           0.000000
GrLivArea        0.000000
MoSold           0.000000
FullBath         0.000000
HalfBath         0.000000
BedroomAbvGr     0.000000
KitchenAbvGr     0.000000
Fireplaces       0.000000
WoodDeckSF       0.000000
OpenPorchSF      0.000000
EnclosedPorch    0.000000
3SsnPorch        0.000000
ScreenPorch      0.000000
MiscVal          0.000000
MSSubClass       0.000000
dtype: float64

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

Повторная проверка на отсутствие недостающих значений после замены:

YrSold           0.0
GrLivArea        0.0
LotFrontage      0.0
LotArea          0.0
OverallQual      0.0
OverallCond      0.0
YearBuilt        0.0
YearRemodAdd     0.0
MasVnrArea       0.0
BsmtFinSF1       0.0
BsmtFinSF2       0.0
BsmtUnfSF        0.0
TotalBsmtSF      0.0
2ndFlrSF         0.0
LowQualFinSF     0.0
BsmtFullBath     0.0
MoSold           0.0
BsmtHalfBath     0.0
FullBath         0.0
HalfBath         0.0
BedroomAbvGr     0.0
KitchenAbvGr     0.0
Fireplaces       0.0
GarageCars       0.0
WoodDeckSF       0.0
OpenPorchSF      0.0
EnclosedPorch    0.0
3SsnPorch        0.0
ScreenPorch      0.0
MiscVal          0.0
MSSubClass       0.0
dtype: float64

Итак, мы закончили работу со всеми недостающими значениями числовых функций как в обучающем, так и в тестовом наборе данных.

Заполнение категориальных пропущенных значений:

Давайте теперь посмотрим на распределение категориальных признаков.

Мы видим, что некоторые функции полностью искажены. Мы можем проверить это, проверив частоту появления верхней категории функций.

Utilities        1427
Street           1423
Condition2       1415
RoofMatl         1407
Heating          1397
LandSlope        1356
CentralAir       1333
Functional       1329
PavedDrive       1309
Electrical       1302
GarageCond       1295
LandContour      1289
GarageQual       1282
BsmtCond         1279
ExterCond        1256
SaleType         1240
Condition1       1238
BsmtFinType2     1233
BldgType         1190
SaleCondition    1174
RoofStyle        1126
MSZoning         1121
LotConfig        1035
BsmtExposure      940
LotShape          916
ExterQual         893
MasVnrType        849
GarageType        846
KitchenQual       726
HeatingQC         721
HouseStyle        713
BsmtQual          638
Foundation        634
GarageFinish      599
Exterior1st       508
Exterior2nd       497
BsmtFinType1      426
FireplaceQu       366
Neighborhood      221
Fence             153
Name: freq, dtype: object

Как показано выше, функции «Utilities», «Street», «Condition2», «RoofMatl», «Heating» сильно искажены (поскольку они имеют одну запись примерно 1400 раз из 1428 примеров). Лучше убрать эти функции.

Теперь мы собираемся заполнить недостающие значения в категориальных переменных. Мы будем заполнять новую категорию «Нет» для отсутствующих значений в категориальных характеристиках.

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

SaleCondition    0.0
SaleType         0.0
Foundation       0.0
ExterCond        0.0
ExterQual        0.0
MasVnrType       0.0
Exterior2nd      0.0
Exterior1st      0.0
RoofStyle        0.0
HouseStyle       0.0
BldgType         0.0
Condition1       0.0
Neighborhood     0.0
LandSlope        0.0
LotConfig        0.0
LandContour      0.0
LotShape         0.0
BsmtQual         0.0
BsmtCond         0.0
BsmtExposure     0.0
FireplaceQu      0.0
Fence            0.0
PavedDrive       0.0
GarageCond       0.0
GarageQual       0.0
GarageFinish     0.0
GarageType       0.0
Functional       0.0
BsmtFinType1     0.0
KitchenQual      0.0
Electrical       0.0
CentralAir       0.0
HeatingQC        0.0
Heating          0.0
BsmtFinType2     0.0
MSZoning         0.0
dtype: float64

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

Fence            0.801234
FireplaceQu      0.500343
GarageCond       0.053461
GarageQual       0.053461
GarageFinish     0.053461
GarageType       0.052090
BsmtCond         0.030843
BsmtQual         0.030158
BsmtExposure     0.030158
BsmtFinType2     0.028787
BsmtFinType1     0.028787
MasVnrType       0.010966
MSZoning         0.002742
Functional       0.001371
Exterior2nd      0.000685
KitchenQual      0.000685
SaleType         0.000685
Exterior1st      0.000685
HouseStyle       0.000000
LotShape         0.000000
LandContour      0.000000
LotConfig        0.000000
LandSlope        0.000000
Neighborhood     0.000000
Condition1       0.000000
BldgType         0.000000
HeatingQC        0.000000
RoofStyle        0.000000
Heating          0.000000
PavedDrive       0.000000
ExterQual        0.000000
ExterCond        0.000000
Foundation       0.000000
Electrical       0.000000
CentralAir       0.000000
SaleCondition    0.000000
dtype: float64

Мы снова заменим все отсутствующие значения новой категорией «Нет», как это сделано в наборе обучающих данных.

Теперь снова проверяем отсутствующие значения в test_df после замены.

SaleCondition    0.0
SaleType         0.0
Foundation       0.0
ExterCond        0.0
ExterQual        0.0
MasVnrType       0.0
Exterior2nd      0.0
Exterior1st      0.0
RoofStyle        0.0
HouseStyle       0.0
BldgType         0.0
Condition1       0.0
Neighborhood     0.0
LandSlope        0.0
LotConfig        0.0
LandContour      0.0
LotShape         0.0
BsmtQual         0.0
BsmtCond         0.0
BsmtExposure     0.0
FireplaceQu      0.0
Fence            0.0
PavedDrive       0.0
GarageCond       0.0
GarageQual       0.0
GarageFinish     0.0
GarageType       0.0
Functional       0.0
BsmtFinType1     0.0
KitchenQual      0.0
Electrical       0.0
CentralAir       0.0
HeatingQC        0.0
Heating          0.0
BsmtFinType2     0.0
MSZoning         0.0
dtype: float64

Мы заменили все отсутствующие значения во всех функциях в наборе данных для поезда и тестирования. На этом наш EDA и очистка данных завершены.

Использование библиотеки Sweetviz для EDA:

Как мы видели в приведенных выше разделах, выполнение EDA - утомительная задача, так как требуется много времени и усилий для визуализации данных, выполнения различных типов анализа и заключения о данных. Всю эту работу можно упростить, используя новую чрезвычайно полезную библиотеку под названием Sweetviz. Он берет фрейм данных Pandas и создает автономный отчет HTML. И все это можно сделать всего в 2 строчки кода!

Вот ссылка на HTML-файл, содержащий отчет как по поезду, так и по набору тестовых данных. Мы можем получить все типы визуализаций, такие как графики распределения и графики корреляции. Нам также предоставляются числовые данные, такие как количество пропущенных значений, часто встречающиеся записи, перекос, эксцесс и т. Д. Эта библиотека является лучшей версией профилирования Pandas и гораздо более крутой визуализацией.

Заключение:

В этой статье мы увидели различные этапы процесса EDA. Мы увидели, как визуализировать данные на различных графиках для выполнения различных типов анализа. Мы узнали, как обнаруживать выбросы с помощью этих графиков и как их удалять. Мы справились с отсутствующими значениями, используя методы, подходящие для данного типа объекта. Затем мы увидели, как всю часть анализа можно выполнить в несколько строк кода с помощью Sweetviz.

Выводы:



Общедоступные блокноты, представленные создателями на соревнованиях Kaggle, содержат много информации о решении различных типов проблем, возникающих во время EDA. Если у вас есть время, я бы порекомендовал просмотреть несколько блокнотов и разложить методы, чтобы реализовать их в вашем собственном блокноте. Я много узнал об EDA и моделировании набора данных о ценах на жилье из общедоступных блокнотов в Kaggle.



Эта статья в TDS направила меня на использование Sweetviz для EDA. Слава Франсуа Бертрану и другим участникам! Несмотря на то, что визуализации и выводы говорят сами за себя, подробности см. В статье.