قیمت خانه با 81 فیچر- قسمت اول

مقدمات:

ابتدا کتابخانه های مورد نیاز را فراخوانی میکنیم:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
## Display all the columns of the dataframe

pd.pandas.set_option('display.max_columns',None)

خواندن دیتا:

dataset=pd.read_csv('house_advance_train.csv')
print(dataset.shape)

ارزیابی تاثیرmissing values

ابتدا لیستی از فیچرهایی که مقدارmissing دارند تهیه میکنیم:

features_with_na=[features for features in dataset.columns if dataset[features].isnull().sum()>1]

پرینت نام و درصد فیچرهای miss شده:

for feature in features_with_na:
    print(feature,'---->', np.round(dataset[feature].isnull().mean(), 4),  ' % missing values')

پیدا کردن رابطه بین مقادیر miss شده و قیمت خانه.

for feature in features_with_na:
    data = dataset.copy()
    
    # let's make a variable that indicates 1 if the observation was missing or zero otherwise
    data[feature] = np.where(data[feature].isnull(), 1, 0)
   
    # let's calculate the mean SalePrice where the information is missing or present
    data.groupby(feature)['SalePrice'].median().plot.bar()
    plt.title(feature)
    plt.show()

در نتیجه کد بالا مشاهده میشود که مقادیرmiss شده در مقدار خروجی موثر هستند بنابراین باید آنها را با مقدا مناسب جایگذاری نمود.

Numerical Variables

با کد زیر مقادیر عددی را جدا میکنیم:

# list of numerical variables
numerical_features = [feature for feature in dataset.columns if dataset[feature].dtypes != 'O']

print('Number of numerical variables: ', len(numerical_features))

# visualise the numerical variables
dataset[numerical_features].head()

متغیرهای مربوط به سال (year)

با کد زیر متغیر های مربوط به سال را جدا میکنیم

# list of variables that contain year information
year_feature = [feature for feature in numerical_features if 'Yr' in feature or 'Year' in feature]

year_feature

که در نتیجه این کد 4 مورد به ما نمایش داده میشود. با کد زیر رابطه ای چهار مورد را با قیمت خانه بدست می آوریم. و میبینیم که همه سعودی هستند و تنها سال فروش از نوع نزولی است. در صورتی که انتطار داریم برای مثال قیمت خانه به مرور زمان افزایش یابد.!!!

figure, axis = plt.subplots(2, 2)

axis[0, 0].plot(dataset.groupby('YrSold')['SalePrice'].median())
axis[0, 0].set_title("YrSold")

axis[0, 1].plot(dataset.groupby('YearBuilt')['SalePrice'].median())
axis[0, 1].set_title("YearBuilt")

axis[1, 0].plot(dataset.groupby('YearRemodAdd')['SalePrice'].median())
axis[1, 0].set_title("YearRemodAdd")

axis[1, 1].plot(dataset.groupby('GarageYrBlt')['SalePrice'].median())
axis[1, 1].set_title("GarageYrBlt")



plt.show()

همچنین با کد زیر میتوان دید که رابطه بین متغیرهای مربوط به سال با قیمت فروش خانه در چه وضعیتی است:

for feature in year_feature:
    if feature!='YrSold':
        data=dataset.copy()
        ## We will capture the difference between year variable and year the house was sold for
        data[feature]=data['YrSold']-data[feature]

        plt.scatter(data[feature],data['SalePrice'])
        plt.xlabel(feature)
        plt.ylabel('SalePrice')
        plt.show()

متغیرهای گسسته:

بنابریک قاعده تجربی اگر تعدادunique ها در ستونهای عددی کمتر از 25 مورد باشد، آن متغیر را در دستهdiscrete feature قرار میدهیم.

## Numerical variables are usually of 2 type
## 1. Continous variable and Discrete Variables

discrete_feature=[feature for feature in numerical_features if \
                  len(dataset[feature].unique())<25 and \
                  feature not in year_feature+['Id']]

print("Discrete Variables Count: {}".format(len(discrete_feature)))

رابطه بین متغیر گسسته و قیمت

با کد زیر با استفاده از groupBy میزان تاثیر متغیرهای گسسته در خروجی را مشاهده میکنیم:

## Lets Find the realtionship between them and Sale PRice

for feature in discrete_feature:
    data=dataset.copy()
    data.groupby(feature)['SalePrice'].median().plot.bar()
    plt.xlabel(feature)
    plt.ylabel('SalePrice')
    plt.title(feature)
    plt.show()

متغیر پیوسته:

متغیرهایی که در دسته گسسته نباشند را در دسته پیوسته قرار میدهیم:

continuous_feature=[feature for feature in numerical_features if feature not in discrete_feature+year_feature+['Id']]
print("Continuous feature Count {}".format(len(continuous_feature)))

بررسی توزیع متغیر پیوسته:

با دستور زیر میخواهیم نحوه توزیع متغیرهای پیوسته را مشاهده کنیم:

## Lets analyse the continuous values by creating histograms to understand the distribution

for feature in continuous_feature:
    data=dataset.copy()
    data[feature].hist(bins=25)
    plt.xlabel(feature)
    plt.ylabel("Count")
    plt.title(feature)
    plt.show()

در نتیجه کد بالا مشاهده میشود که برخی از متغیرها باید نرمال سازی شوند.

ادامه در قسمت دوم

منابع:

1- ویدئو اول –لینک

2- گیتهاب خودم

3- آدرس داده ها در گیتهاب

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.