Ejemplo n.º 1
0
def select_feature():  #选取用于拟合的特征
    p = Paint()
    p.GetDataFromExcel('Washed Data.xls')
    p14 = p.heat()
    plt.savefig('图6:诸特征之间相关系数热力图')

    p15 = p.joint('size', 'unit_price')
    plt.savefig('图7:房屋单价及面积关系图')
    p16 = p.joint('age', 'unit_price')
    plt.savefig('图8:房屋单价及房龄关系图')
    p17 = p.box('decorate', 'unit_price')
    plt.savefig('图9:房屋单价及装修情况箱型图')
    p18 = p.joint('distance', 'unit_price')
    plt.savefig('图10:房屋单价及距市中心距离关系图')

    sf = FeatureSelect()  #最终选定房屋单价、房龄、距离、装修状况和卧室与卫生间数量的比值作为最终拟合的特征值
    sf.GetDataFromDataframe('Washed Data.xls')
    sf.SelectAge()
    sf.SelectDistance()
    sf.SelectDecorate()
    sf.SelectBedroom_Lavatory()
    data = sf.NewData()
    p.GetDataFromExcel('FinalData.xls')
    p19 = p.box('b_l', 'unit_price')
    plt.savefig('图11:房屋单价及卧室卫生间比率箱型图')
    p20 = sf.HeatPlot(data)
    plt.savefig('图12:最终选取特征值之间相关系数热力图')
    print('数据特征选取部分已完成')
Ejemplo n.º 2
0
def predict():
    pr = Predict()
    x = [
        'ridge', 'ridge', 'lasso', 'lasso', 'linear', 'linear', 'SVM', 'SVM',
        'random', 'random'
    ]
    y = []
    y += pr.ridge()  # 分别比较各种回归算法(岭回归、套索回归、线性回归、支持向量机)和纯随机数之间的准确率
    y += pr.lasso()
    y += pr.linear()
    y += pr.SVM()
    y += pr.random()
    hue = ['train_accuracy', 'test_accuracy'] * 5
    data = pd.DataFrame({'algorithm': x, 'accuracy': y, 'kind': hue})
    p = Paint()
    p.GetDataFromDataframe(data)
    plt.figure(figsize=(8, 8))
    p21 = p.bar('algorithm', 'accuracy', 'kind')
    plt.savefig('图13:各种回归算法及随机数预测准确率柱状图')
Ejemplo n.º 3
0
def wash():  #对得到的数据进行初步处理
    w = Wash()  # 下10行对各特征值进行数据类型转换和过滤极端异常值
    w.GetDataFromDatabase('data.db')
    w.UnitPriceWash()
    w.StructureWash()
    w.StoreyWash()
    w.SizeWash()
    w.AgeWash()
    w.DecorateWash()
    w.XYWash()
    raw_df = w.df
    raw_df.drop_duplicates(['unit_price', 'structure', 'storey', 'size'],
                           inplace=True)  # 去重

    p = Paint()  #绘制价格和地段示意图,用于分析找到城市中心位置
    p.GetDataFromDataframe(raw_df)
    plt.figure(figsize=(8, 8))
    pc1 = p.xyplot()
    plt.savefig('图1:上海二手房价格与地段示意图')
    w.GetDistance(2)  #通过Kmeans聚类找到房价的两个质心位置,并计算各房屋距离两个质心的平均距离
    w.Select()
    df = w.df
    df.to_excel('RawData.xls')  # 将初步清洗的数据存储于excel中
Ejemplo n.º 4
0
def norm():  #对初步清洗的数据进行归一化
    w = Wash()
    w.GetDataFromExcel('RawData.xls')
    for i in ['unit_price', 'size', 'age', 'distance']:  # 对数据进行不同方式的归一化并比较其效果
        w.MaxMinNorm(i)
        w.LogNorm(i)
        w.ZscoreNorm(i)
    df = w.df
    p = Paint()
    p.GetDataFromDataframe(df)
    plt.figure(figsize=(8, 8))  #对未归一化的效果进行可视化,并计算其偏度和峰度
    plt.subplot(221)
    pc2 = p.histo('unit_price', bins=30, x=75000, y=0.00002)
    plt.subplot(222)
    pc3 = p.histo('size', bins=30, x=120, y=0.012)
    plt.subplot(223)
    pc4 = p.histo('age', bins=30, x=25, y=0.06)
    plt.subplot(224)
    pc5 = p.histo('distance', bins=30, x=55, y=0.08)
    plt.suptitle('Histogram of Raw Data')
    plt.savefig('图2:未归一化的数据直方图')

    plt.figure(figsize=(8, 8))  #对max-min归一化的效果进行可视化,并计算其偏度和峰度
    plt.subplot(221)
    pc6 = p.histo('MaxMinNormunit_price', bins=30, x=0.6, y=2.5)
    plt.subplot(222)
    pc7 = p.histo('MaxMinNormsize', bins=30, x=0.6, y=2.5)
    plt.subplot(223)
    pc8 = p.histo('MaxMinNormage', bins=30, x=0.6, y=2.5)
    plt.subplot(224)
    pc9 = p.histo('MaxMinNormdistance', bins=30, x=0.6, y=8)
    plt.suptitle('Histogram of Max-Min Normalization')
    plt.savefig('图3:max-min归一化的直方图')

    plt.figure(figsize=(8, 8))  #对对数归一化的效果进行可视化,并计算其偏度和峰度
    plt.subplot(221)
    pc6 = p.histo('LogNormunit_price', bins=30, x=0.65, y=2)
    plt.subplot(222)
    pc7 = p.histo('LogNormsize', bins=30, x=0.65, y=2)
    plt.subplot(223)
    pc8 = p.histo('LogNormage', bins=30, x=0.65, y=4)
    plt.subplot(224)
    pc9 = p.histo('LogNormdistance', bins=30, x=0.65, y=4)
    plt.suptitle('Histogram of Log Normalization')
    plt.savefig('图4:Log归一化的直方图')

    plt.figure(figsize=(8, 8))  #对Zscore归一化的效果进行可视化,并计算其偏度和峰度
    plt.subplot(221)
    pc10 = p.histo('ZscoreNormunit_price', bins=30, x=0.65, y=2)
    plt.subplot(222)
    pc11 = p.histo('ZscoreNormsize', bins=30, x=0.65, y=2)
    plt.subplot(223)
    pc12 = p.histo('ZscoreNormage', bins=30, x=0.65, y=2)
    plt.subplot(224)
    pc13 = p.histo('ZscoreNormdistance', bins=30, x=0.65, y=6)
    plt.suptitle('Histogram of Zscore Normalization')
    plt.savefig('图5:ZscoreNorm归一化的直方图')

    df['unit_price'] = df['LogNormunit_price']  #对比后最终选用对数归一化方法
    df['size'] = df['LogNormsize']
    df['age'] = df['LogNormage']
    df['distance'] = df['LogNormdistance']
    df.drop([
        'MaxMinNormunit_price', 'LogNormunit_price', 'ZscoreNormunit_price',
        'MaxMinNormsize', 'LogNormsize', 'ZscoreNormsize', 'MaxMinNormage',
        'LogNormage', 'ZscoreNormage', 'MaxMinNormdistance', 'LogNormdistance',
        'ZscoreNormdistance'
    ],
            axis=1,
            inplace=True)
    df.to_excel('Washed Data.xls')  # 将归一化的数据存储于excel中
    print('数据归一化部分已完成')