Поиск по сайту:

Раскрытие невидимого: визуализация недостающих ценностей в жилищном строительстве Эймса


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

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

Давайте начнем.

Обзор

Этот пост разделен на три части; они есть:

  • Набор данных свойств Эймса
  • Загрузка и определение размера набора данных
  • Обнаружение и визуализация недостающих значений

Набор данных свойств Эймса

У каждого набора данных есть своя история, и понимание его истории может дать бесценный контекст. Хотя набор данных о жилье Эймса широко известен в академических кругах, набор данных, который мы анализируем сегодня, Ames.csv, представляет собой более полную коллекцию сведений о недвижимости от Эймса.

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

Набор жилищных данных Эймса был задуман как современная альтернатива старому набору жилищных данных Бостона. Охватывая продажи жилья в Эймсе, штат Айова, в период с 2006 по 2010 год, он представляет разнообразный набор переменных, создавая основу для передовых методов регрессии.

Этот временной интервал особенно важен в истории США. В период, предшествовавший 2007-2008 годам, наблюдался резкий рост цен на жилье, вызванный спекулятивным безумием и субстандартной ипотекой. Кульминацией этого стал разрушительный крах пузыря на рынке недвижимости в конце 2007 года, событие, ярко запечатленное в таких повествованиях, как «Большая игра на понижение». Последствия этого коллапса прокатились по всей стране, приведя к Великой рецессии. Цены на жилье резко упали, количество случаев потери права выкупа резко возросло, и многие американцы оказались в затруднительном положении по своим ипотечным кредитам. Набор данных Эймса дает представление об этом неспокойном периоде, фиксируя продажи недвижимости в разгар национальных экономических потрясений.
Начните свой проект с моей книги «Руководство для начинающих по науке о данных». Он предоставляет учебники для самообучения с рабочим кодом.

Загрузка и определение размера набора данных

Для тех, кто решается заняться наукой о данных, наличие в арсенале правильных инструментов имеет первостепенное значение. Если вам нужна помощь в настройке среды Python, это подробное руководство станет отличным ресурсом.

Размеры набора данных. Прежде чем углубляться в сложный анализ, важно ознакомиться с базовой структурой набора данных и типами данных. Этот шаг обеспечивает план для последующего исследования и гарантирует, что вы адаптируете свой анализ в зависимости от характера данных. Имея готовую среду, давайте загрузим и оценим размер набора данных с точки зрения строк (представляющих отдельные свойства) и столбцов (представляющих атрибуты этих свойств).

# Load the Ames dataset
import pandas as pd
Ames = pd.read_csv('Ames.csv')

# Dataset shape
print(Ames.shape)

rows, columns = Ames.shape
print(f"The dataset comprises {rows} properties described across {columns} attributes.")
(2579, 85)
The dataset comprises 2579 properties described across 85 attributes.

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

# Determine the data type for each feature
data_types = Ames.dtypes

# Tally the total by data type
type_counts = data_types.value_counts()

print(type_counts)
object     44
int64      27
float64    14
dtype: int64

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

# Determine the data type for each feature
data_types = Ames.dtypes

# View a few datatypes from the dataset (first and last 5 features)
print(data_types)
PID                int64
GrLivArea          int64
SalePrice          int64
MSSubClass         int64
MSZoning          object
                  ...   
SaleCondition     object
GeoRefNo         float64
Prop_Addr         object
Latitude         float64
Longitude        float64
Length: 85, dtype: object

Площадь жилой площади и Цена продажи — это числовые типы данных (int64), а Условие продажи (объект, который в этом примере имеет строковый тип) — категориальный тип данных.

Обнаружение и визуализация пропущенных значений

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

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

NaN или None?: В pandas функция isnull() используется для обнаружения пропущенных значений в DataFrame или Series. В частности, он идентифицирует следующие типы или недостающие данные:

  • np.nan (не число), часто используется для обозначения отсутствующих числовых данных.
  • None — встроенный объект Python, обозначающий отсутствие значения или нулевое значение.

И nan, и NaN — это просто разные способы ссылки на np.nan NumPy, а isnull() будет идентифицировать их как недостающие значения. Вот краткий пример.

# Import NumPy
import numpy as np

# Create a DataFrame with various types of missing values
df = pd.DataFrame({
    'A': [1, 2, np.nan, 4, 5],
    'B': ['a', 'b', None, 'd', 'e'],
    'C': [np.nan, np.nan, np.nan, np.nan, np.nan],
    'D': [1, 2, 3, 4, 5]
})

# Use isnull() to identify missing values
missing_data = df.isnull().sum()

print(df)
print()
print(missing_data)
     A     B   C  D
0  1.0     a NaN  1
1  2.0     b NaN  2
2  NaN  None NaN  3
3  4.0     d NaN  4
4  5.0     e NaN  5
A    1
B    1
C    5
D    0
dtype: int64

Визуализация отсутствующих значений. Для визуализации отсутствующих данных используются такие инструменты, как DataFrames, missingno, matplotlib и < b>морерожденный пригодится. Сортируя объекты по проценту пропущенных значений и помещая их в DataFrame, вы можете легко ранжировать объекты, на которые больше всего влияют отсутствующие данные.   

# Calculating the percentage of missing values for each column
missing_data = Ames.isnull().sum()
missing_percentage = (missing_data / len(Ames)) * 100

# Combining the counts and percentages into a DataFrame for better visualization
missing_info = pd.DataFrame({'Missing Values': missing_data, 'Percentage': missing_percentage})

# Sorting the DataFrame by the percentage of missing values in descending order
missing_info = missing_info.sort_values(by='Percentage', ascending=False)

# Display columns with missing values
print(missing_info[missing_info['Missing Values'] > 0])
              Missing Values  Percentage
PoolQC                  2570   99.651028
MiscFeature             2482   96.238852
Alley                   2411   93.485847
Fence                   2054   79.643273
FireplaceQu             1241   48.119426
LotFrontage              462   17.913920
GarageCond               129    5.001939
GarageQual               129    5.001939
GarageFinish             129    5.001939
GarageYrBlt              129    5.001939
GarageType               127    4.924389
Longitude                 97    3.761148
Latitude                  97    3.761148
BsmtExposure              71    2.753005
BsmtFinType2              70    2.714230
BsmtFinType1              69    2.675456
BsmtQual                  69    2.675456
BsmtCond                  69    2.675456
GeoRefNo                  20    0.775494
Prop_Addr                 20    0.775494
MasVnrArea                14    0.542846
MasVnrType                14    0.542846
BsmtFullBath               2    0.077549
BsmtHalfBath               2    0.077549
GarageArea                 1    0.038775
BsmtFinSF1                 1    0.038775
Electrical                 1    0.038775
TotalBsmtSF                1    0.038775
BsmtUnfSF                  1    0.038775
BsmtFinSF2                 1    0.038775
GarageCars                 1    0.038775

Пакет missingno обеспечивает быстрое графическое представление недостающих данных. Белые линии или пробелы на визуализации обозначают пропущенные значения. Однако он будет вмещать только до 50 помеченных переменных. За пределами этого диапазона метки начинают перекрываться или становятся нечитаемыми, и по умолчанию на больших дисплеях они не отображаются.

import missingno as msno
import matplotlib.pyplot as plt
msno.matrix(Ames, sparkline=False, fontsize=20)
plt.show()

Использование визуального элемента msno.bar() после извлечения 15 основных функций с наибольшим количеством пропущенных значений позволяет получить четкую иллюстрацию по столбцам.   

# Calculating the percentage of missing values for each column
missing_data = Ames.isnull().sum()
missing_percentage = (missing_data / len(Ames)) * 100

# Combining the counts and percentages into a DataFrame for better visualization
missing_info = pd.DataFrame({'Missing Values': missing_data, 'Percentage': missing_percentage})

# Sort the DataFrame columns by the percentage of missing values
sorted_df = Ames[missing_info.sort_values(by='Percentage', ascending=False).index]

# Select the top 15 columns with the most missing values
top_15_missing = sorted_df.iloc[:, :15]

#Visual with missingno
msno.bar(top_15_missing)
plt.show()

На рисунке выше показано, что качество пула, разные функции и тип проходного доступа к объекту — это три функции с наибольшим количеством пропущенных значений.

import seaborn as sns
import matplotlib.pyplot as plt

# Filter to show only the top 15 columns with the most missing values
top_15_missing_info = missing_info.nlargest(15, 'Percentage')

# Create the horizontal bar plot using seaborn
plt.figure(figsize=(12, 8))
sns.barplot(x='Percentage', y=top_15_missing_info.index, data=top_15_missing_info, orient='h')
plt.title('Top 15 Features with Missing Percentages', fontsize=20)
plt.xlabel('Percentage of Missing Values', fontsize=16)
plt.ylabel('Features', fontsize=16)
plt.yticks(fontsize=11)
plt.show()

Горизонтальная гистограмма с использованием seaborn позволяет вам перечислять объекты с наибольшими пропущенными значениями в вертикальном формате, что повышает читаемость и эстетическую ценность.

Обработка пропущенных значений — это больше, чем просто техническое требование; это важный шаг, который может повлиять на качество ваших моделей машинного обучения. Понимание и визуализация этих недостающих ценностей — первые шаги в этом сложном танце.

Дополнительная литература

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

Учебники

  • Руководство по настройке Анаконды

Документы

  • 1. Эймс, Айова: Альтернатива жилищным данным Бостона как проект регрессии на конец семестра, доктор Дин Де Кок.

Ресурсы

  • Набор данных о жилье Эймса
  • Словарь данных Эймса

Сводка

В этом руководстве вы приступили к исследованию набора данных Ames Properties — комплексной коллекции данных о жилье, адаптированной для приложений в области анализа данных.

В частности, вы узнали:

  • О контексте набора данных Эймса, включая пионеров и академическое значение, стоящее за ним.
  • Как извлечь измерения набора данных, типы данных и пропущенные значения.
  • Как использовать такие пакеты, как missingno, Matplotlib и Seaborn, чтобы быстро визуализировать недостающие данные.

У вас есть вопросы? Пожалуйста, задавайте свои вопросы в комментариях ниже, и я постараюсь ответить.