房租预测–EDA
主要包括缺失值分析、特征值分析、是否有单调特征列、特征 nunique 分布、统计特征值出现频次大于 100 的特征、Label 分布以及不同特征值的样本的 label 分布
读取数据
先导入所需要的包,然后读取文件
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# 读取文件
filepath_train="E:\\untitled\\data\\train_data.csv"
filepath_test="E:\\untitled\\data\\test_a.csv"
train=pd.read_csv(filepath_train)
test=pd.read_csv(filepath_test)
data = pd.concat((train,test))
缺失值分析
train.isnull().sum().sort_values(ascending=False)
print(list(data['rentType']).count("未知方式"))
print(list(data['houseToward']).count("暂无数据"))
print(list(data['houseDecoration']).count("其他"))
print(list(data['buildYear']).count("暂无信息"))
结果是
32944
2136
31021
2936
特征值分析
特征值分析,分析的不是很好,借鉴的网上大佬的,
pd.set_option('max_colwidth',200)
pd.set_option('display.width',200)
pd.set_option('display.max_columns',500)
pd.set_option('display.max_row',1000)
train.corr()
单调特征列
def increasing(val):
cnt = 0
len_ = len(val)
for i in range(len_ - 1):
if val[i + 1] > val[i]:
cnt += 1
return cnt
fea_cols = [col for col in train.columns]
for col in fea_cols:
cnt = increasing(train[col].values)
if cnt / train.shape[0] > 0.55:
print('单调特征', col)
print('单调特征个数',cnt)
print('单调特征比例',cnt / train.shape[0])
单调特征 tradeTime
单调特征个数 24085
单调特征比例 0.5812017374517374
特征 nunique 分布
categorical_feas = [cols for cols in train.columns]
for feature in categorical_feas:
print(feature+"的特征分布如下:")
print(train[feature].value_counts())
if feature != 'communityName':
plt.hist(data[feature],bins=3)
plt.show()
rentType的特征分布如下:
未知方式 30759
整租 5472
合租 5204
-- 5
这个有一点问题,但是还是可以分析出来的,水平有限,正在努力。
统计特征值出现频次大于 100 的特征
# 训练集
for cols in train.columns:
if train[cols].unique().shape[0] > 100:
print(cols)
'''
ID
area
houseType
communityName
totalTradeMoney
totalTradeArea
tradeMeanPrice
tradeSecNum
totalNewTradeMoney
totalNewTradeArea
tradeNewMeanPrice
tradeNewNum
remainNewNum
supplyNewNum
newWorkers
pv
uv
tradeTime
tradeMoney
'''
# 测试集
for cols2 in test.columns:
if test[cols2].unique().shape[0] > 100:
print(cols2)
'''
ID
area
communityName
totalTradeMoney
totalTradeArea
tradeMeanPrice
tradeSecNum
totalNewTradeMoney
totalNewTradeArea
tradeNewMeanPrice
tradeNewNum
remainNewNum
newWorkers
pv
uv
tradeTime
'''
Label 分布以及不同特征值的样本的 label 分布
train.hist(figsize=(50,15), bins=100,grid=False)
plt.show()
sns.regplot(x=train['area'], y=train['tradeMoney'])
plt.show()