Kaggle 房价预测竞赛优胜方案:用 Python 进行全面数据探索

[导读]Kaggle 的房价预测竞赛从 2016 年 8 月开始,到 2017 年 2 月结束。这段时间内,超过 2000 多人参与比赛,选手采用高级回归技术,基于我们给出的 79 个特征,对房屋的售价进行了准确的预测。今天我们介绍的是目前得票数最高的优胜方案:《用 Python 进行全面数据探索》,该方案在数据探索,特征工程上都有十分出色的表现。

作者 Pedro Marcelino 在竞赛中使用的主要方法是关注数据科学处理方法,以及寻找能够指导工作的有力文献资料。作者主要参考《多元数据分析》(Multivariate Data Analysis, Hair et al., 2014)中的第三章 “检查你的数据”。作者将自己研究的方法归为以下三步:

  1. 定义要解决的问题;

  2. 查阅相关文献;

  3. 对他们进行修改以适合自己的要求。

“不过是站在巨人的肩膀上。”—— Pedro Marcelino 

 

下面我们就一起来看看作者是如何对数据进行分析的。

了解你的数据

方法框架:

  • 理解问题:查看每个变量并且根据他们的意义和对问题的重要性进行哲学分析。

  • 单因素研究:只关注因变量( SalePrice),并且进行更深入的了解。

  • 多因素研究:分析因变量和自变量之间的关系。

  • 基础清洗:清洗数据集并且对缺失数据,异常值和分类数据进行一些处理。

  • 检验假设:检查数据是否和多元分析方法的假设达到一致。

 

开始之前:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as npfrom scipy.stats
import normfrom sklearn.preprocessing
import StandardScalerfrom scipy
import stats
import warnings
warnings.filterwarnings('ignore')
%matplotlib inline

#bring in the six packs
df_train = pd.read_csv('../input/train.csv')
#check the decoration
df_train.columns

Index(['Id', 'MSSubClass', 'MSZoning','LotFrontage', 'LotArea', 'Street',
       'Alley', 'LotShape', 'LandContour', 'Utilities','LotConfig',
       'LandSlope', 'Neighborhood', 'Condition1','Condition2', 'BldgType',
       'HouseStyle', 'OverallQual', 'OverallCond','YearBuilt', 'YearRemodAdd',
       'RoofStyle', 'RoofMatl', 'Exterior1st','Exterior2nd', 'MasVnrType',
       'MasVnrArea', 'ExterQual', 'ExterCond','Foundation', 'BsmtQual',
       'BsmtCond', 'BsmtExposure', 'BsmtFinType1','BsmtFinSF1',
       'BsmtFinType2', 'BsmtFinSF2', 'BsmtUnfSF','TotalBsmtSF', 'Heating',
       'HeatingQC', 'CentralAir', 'Electrical', '1stFlrSF','2ndFlrSF',
       'LowQualFinSF', 'GrLivArea', 'BsmtFullBath','BsmtHalfBath', 'FullBath',
       'HalfBath', 'BedroomAbvGr', 'KitchenAbvGr','KitchenQual',
       'TotRmsAbvGrd', 'Functional', 'Fireplaces','FireplaceQu', 'GarageType',
       'GarageYrBlt', 'GarageFinish', 'GarageCars','GarageArea', 'GarageQual',
       'GarageCond', 'PavedDrive', 'WoodDeckSF','OpenPorchSF',
       'EnclosedPorch', '3SsnPorch', 'ScreenPorch','PoolArea', 'PoolQC',
       'Fence', 'MiscFeature', 'MiscVal', 'MoSold','YrSold', 'SaleType',
       'SaleCondition', 'SalePrice'],
      dtype='object')

准备工作——我们可以期望什么?

为了了解我们的数据,我们可以分析每个变量并且尝试理解他们的意义和与该问题的相关程度。

首先建立一个 Excel 电子表格,有如下目录:

  • 变量 – 变量名。

  • 类型 – 该变量的类型。这一栏只有两个可能值,“数据” 或 “类别”。 “数据” 是指该变量的值是数字,“类别” 指该变量的值是类别标签。

  • 划分 – 指示变量划分. 我们定义了三种划分:建筑,空间,位置。

  • 期望 – 我们希望该变量对房价的影响程度。我们使用类别标签 “高”,“中” 和 “低” 作为可能值。

  • 结论 – 我们得出的该变量的重要性的结论。在大概浏览数据之后,我们认为这一栏和 “期望” 的值基本一致。

  • 评论 – 我们看到的所有一般性评论。

我们首先阅读了每一个变量的描述文件,同时思考这三个问题:

  • 我们买房子的时候会考虑这个因素吗?

  • 如果考虑的话,这个因素的重要程度如何?

  • 这个因素带来的信息在其他因素中出现过吗?

我们根据以上内容填好了电子表格,并且仔细观察了 “高期望” 的变量。然后绘制了这些变量和房价之间的散点图,填在了 “结论” 那一栏,也正巧就是对我们的期望值的校正。

我们总结出了四个对该问题起到至关重要的作用的变量:

  • OverallQual

  • YearBuilt.

  • TotalBsmtSF.

  • GrLivArea.

最重要的事情——分析 “房价”

描述性数据总结:

df_train['SalePrice'].describe()

count      1460.000000
mean     180921.195890
std       79442.502883
min       34900.000000
25%      129975.000000
50%      163000.000000
75%      214000.000000
max      755000.000000
Name: SalePrice, dtype: float64

绘制直方图

详解 Kaggle 房价预测竞赛优胜方案:用 Python 进行全面数据探索

sns.distplot(df_train['SalePrice']);

从直方图中可以看出:

  • 偏离正态分布

  • 数据正偏

  • 有峰值

数据偏度和峰度度量:

print("Skewness: %f" % df_train['SalePrice'].skew())
print("Kurtosis: %f" % df_train['SalePrice'].kurt())

Skewness: 1.882876

Kurtosis: 6.536282

“房价” 的相关变量分析

与数字型变量的关系:

1. Grlivarea 与 SalePrice 散点图

var = 'GrLivArea'
data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)
data.plot.scatter(x=var, y='SalePrice', ylim=(0,800000));

详解 Kaggle 房价预测竞赛优胜方案:用 Python 进行全面数据探索

可以看出 SalePrice 和 GrLivArea 关系很密切,并且基本呈线性关系。

2. TotalBsmtSF 与 SalePrice 散点图

var = 'TotalBsmtSF'
data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)
data.plot.scatter(x=var, y='SalePrice', ylim=(0,800000));

详解 Kaggle 房价预测竞赛优胜方案:用 Python 进行全面数据探索

TotalBsmtSF  和 SalePrice 关系也很密切,从图中可以看出基本呈指数分布,但从最左侧的点可以看出特定情况下 TotalBsmtSF 对 SalePrice 没有产生影响。

与类别型变量的关系

1.‘OverallQual’与‘SalePrice’箱型图

var = 'OverallQual'
data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)
f, ax = plt.subplots(figsize=(8, 6))
fig = sns.boxplot(x=var, y="SalePrice", data=data)
fig.axis(ymin=0, ymax=800000);

详解 Kaggle 房价预测竞赛优胜方案:用 Python 进行全面数据探索

可以看出 SalePrice 与 OverallQual 分布趋势相同。

2. YearBuilt 与 SalePrice 箱型图

var = 'YearBuilt'
data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)
f, ax = plt.subplots(figsize=(16, 8))
fig = sns.boxplot(x=var, y="SalePrice", data=data)
fig.axis(ymin=0, ymax=800000);plt.xticks(rotation=90);

详解 Kaggle 房价预测竞赛优胜方案:用 Python 进行全面数据探索

两个变量之间的关系没有很强的趋势性,但是可以看出建筑时间较短的房屋价格更高。

总结:

  • GrLivArea 和 TotalBsmtSF 与 SalePrice 似乎线性相关,并且都是正相关。 对于 TotalBsmtSF 线性关系的斜率十分的高。

  • OverallQual 和 YearBuilt 与 SalePrice 也有关系。OverallQual 的相关性更强, 箱型图显示了随着整体质量的增长,房价的增长趋势。

我们只分析了四个变量,但是还有许多其他变量我们也应该分析,这里的技巧在于选择正确的特征(特征选择)而不是定义他们之间的复杂关系(特征工程)。

客观分析

1. 相关系数矩阵

corrmat = df_train.corr()
f, ax = plt.subplots(figsize=(12, 9))
sns.heatmap(corrmat, vmax=.8, square=True);

详解 Kaggle 房价预测竞赛优胜方案:用 Python 进行全面数据探索

首先两个红色的方块吸引到了我,第一个是 TotalBsmtSF 和 1stFlrSF 变量的相关系数,第二个是 GarageX 变量群。这两个示例都显示了这些变量之间很强的相关性。实际上,相关性的程度达到了一种多重共线性的情况。我们可以总结出这些变量几乎包含相同的信息,所以确实出现了多重共线性。

另一个引起注意的地方是 SalePrice 的相关性。我们可以看到我们之前分析的 GrLivArea,TotalBsmtSF和 OverallQual 的相关性很强,除此之外也有很多其他的变量应该进行考虑,这也是我们下一步的内容。

2. SalePrice 相关系数矩阵

k = 10 #number ofvariables for heatmap
cols = corrmat.nlargest(k, 'SalePrice')['SalePrice'].index
cm = np.corrcoef(df_train[cols].values.T)
sns.set(font_scale=1.25)
hm = sns.heatmap(cm, cbar=True, annot=True, square=True, fmt='.2f', annot_kws={'size': 10}, 
yticklabels=cols.values, xticklabels=cols.values)
plt.show()

详解 Kaggle 房价预测竞赛优胜方案:用 Python 进行全面数据探索

从图中可以看出:

  • OverallQual,GrLivArea 以及 TotalBsmtSF  与 SalePrice 有很强的相关性。

  • GarageCars 和 GarageArea 也是相关性比较强的变量. 车库中存储的车的数量是由车库的面积决定的,它们就像双胞胎,所以不需要专门区分 GarageCars 和 GarageAre,所以我们只需要其中的一个变量。这里我们选择了 GarageCars,因为它与 SalePrice 的相关性更高一些。

  • TotalBsmtSF  和 1stFloor 与上述情况相同,我们选择 TotalBsmtS 。

  • FullBath 几乎不需要考虑。

  • TotRmsAbvGrd 和 GrLivArea 也是变量中的双胞胎。

  • YearBuilt 和 SalePrice 相关性似乎不强。

3. SalePrice 和相关变量之间的散点图

sns.set()
cols = ['SalePrice', 'OverallQual', 'GrLivArea','GarageCars', 'TotalBsmtSF', 'FullBath', 'YearBuilt']
sns.pairplot(df_train[cols], size = 2.5)
plt.show();

详解 Kaggle 房价预测竞赛优胜方案:用 Python 进行全面数据探索

尽管我们已经知道了一些主要特征,这一丰富的散点图给了我们一个关于变量关系的合理想法。
其中,TotalBsmtSF 和 GrLiveArea 之间的散点图是很有意思的。我们可以看出这幅图中,一些点组成了线,就像边界一样。大部分点都分布在那条线下面,这也是可以解释的。地下室面积和地上居住面积可以相等,但是一般情况下不会希望有一个比地上居住面积还大的地下室。

SalePrice 和 YearBuilt 之间的散点图也值得我们思考。在 “点云” 的底部,我们可以观察到一个几乎呈指数函数的分布。我们也可以看到 “点云” 的上端也基本呈同样的分布趋势。并且可以注意到,近几年的点有超过这个上端的趋势。

缺失数据

关于缺失数据需要思考的重要问题:

  • 这一缺失数据的普遍性如何?

  • 缺失数据是随机的还是有律可循?

这些问题的答案是很重要的,因为缺失数据意味着样本大小的缩减,这会阻止我们的分析进程。除此之外,以实质性的角度来说,我们需要保证对缺失数据的处理不会出现偏离或隐藏任何难以忽视的真相。

total= df_train.isnull().sum().sort_values(ascending=False)
percent = (df_train.isnull().sum()/df_train.isnull().count()).sort_values(ascending=False)
missing_data = pd.concat([total, percent], axis=1, keys=['Total','Percent'])
missing_data.head(20)

详解 Kaggle 房价预测竞赛优胜方案:用 Python 进行全面数据探索

当超过 15% 的数据都缺失的时候,我们应该删掉相关变量且假设该变量并不存在。

根据这一条,一系列变量都应该删掉,例如 PoolQC,MiscFeature,Alley 等等,这些变量都不是很重要,因为他们基本都不是我们买房子时会考虑的因素。

GarageX 变量群的缺失数据量都相同,由于关于车库的最重要的信息都可以由 GarageCars 表达,并且这些数据只占缺失数据的 5%,我们也会删除上述的 GarageX 变量群。同样的逻辑也适用于 BsmtX 变量群。

对于 MasVnrArea 和 MasVnrType,我们可以认为这些因素并不重要。除此之外,他们和 YearBuilt 以及 OverallQual 都有很强的关联性,而这两个变量我们已经考虑过了。所以删除 MasVnrArea 和 MasVnrType 并不会丢失信息。

最后,由于 Electrical 中只有一个损失的观察值,所以我们删除这个观察值,但是保留这一变量。

df_train= df_train.drop((missing_data[missing_data['Total'] > 1]).index,1)
df_train= df_train.drop(df_train.loc[df_train['Electrical'].isnull()].index)
df_train.isnull().sum().max() #justchecking that there's no missing data missing...

异常值

单因素分析

这里的关键在于如何建立阈值,定义一个观察值为异常值。我们对数据进行正态化,意味着把数据值转换成均值为 0,方差为 1 的数据。

saleprice_scaled= StandardScaler().fit_transform(df_train['SalePrice'][:,np.newaxis]);
low_range = saleprice_scaled[saleprice_scaled[:,0].argsort()][:10]
high_range= saleprice_scaled[saleprice_scaled[:,0].argsort()][-10:]
print('outer range (low) of the distribution:')
print(low_range)
print('\nouter range (high) of thedistribution:')
print(high_range)

详解 Kaggle 房价预测竞赛优胜方案:用 Python 进行全面数据探索

进行正态化后,可以看出:

  • 低范围的值都比较相似并且在 0 附近分布。

  • 高范围的值离 0 很远,并且七点几的值远在正常范围之外。

双变量分析

1.  GrLivArea 和 SalePrice 双变量分析

var = 'GrLivArea'
data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)
data.plot.scatter(x=var, y='SalePrice', ylim=(0,800000));

详解 Kaggle 房价预测竞赛优胜方案:用 Python 进行全面数据探索

从图中可以看出:

  • 有两个离群的 GrLivArea 值很高的数据,我们可以推测出现这种情况的原因。或许他们代表了农业地区,也就解释了低价。 这两个点很明显不能代表典型样例,所以我们将它们定义为异常值并删除。

  • 图中顶部的两个点是七点几的观测值,他们虽然看起来像特殊情况,但是他们依然符合整体趋势,所以我们将其保留下来。

删除点

df_train.sort_values(by = 'GrLivArea',ascending = False)[:2]
df_train = df_train.drop(df_train[df_train['Id'] == 1299].index)
df_train = df_train.drop(df_train[df_train['Id'] == 524].index)

2.  TotalBsmtSF 和 SalePrice 双变量分析

var = 'TotalBsmtSF'
data = pd.concat([df_train['SalePrice'],df_train[var]], axis=1)
data.plot.scatter(x=var, y='SalePrice',ylim=(0,800000));

详解 Kaggle 房价预测竞赛优胜方案:用 Python 进行全面数据探索

核心部分

“房价” 到底是谁?

这个问题的答案,需要我们验证根据数据基础进行多元分析的假设。

我们已经进行了数据清洗,并且发现了 SalePrice 的很多信息,现在我们要更进一步理解 SalePrice 如何遵循统计假设,可以让我们应用多元技术。

应该测量 4 个假设量:

  • 正态性

  • 同方差性

  • 线性

  • 相关错误缺失

正态性:

应主要关注以下两点:

  • 直方图 – 峰度和偏度。

  • 正态概率图 – 数据分布应紧密跟随代表正态分布的对角线。

1.  SalePrice

绘制直方图和正态概率图:

sns.distplot(df_train['SalePrice'], fit=norm);
fig = plt.figure()
res = stats.probplot(df_train['SalePrice'], plot=plt)

详解 Kaggle 房价预测竞赛优胜方案:用 Python 进行全面数据探索详解 Kaggle 房价预测竞赛优胜方案:用 Python 进行全面数据探索

可以看出,房价分布不是正态的,显示了峰值,正偏度,但是并不跟随对角线。

可以用对数变换来解决这个问题

进行对数变换:

df_train['SalePrice']= np.log(df_train['SalePrice'])

绘制变换后的直方图和正态概率图:

sns.distplot(df_train['SalePrice'], fit=norm);
fig = plt.figure()
res = stats.probplot(df_train['SalePrice'], plot=plt)

2. GrLivArea
绘制直方图和正态概率曲线图:

sns.distplot(df_train['GrLivArea'], fit=norm);
fig = plt.figure()
res = stats.probplot(df_train['GrLivArea'], plot=plt)

详解 Kaggle 房价预测竞赛优胜方案:用 Python 进行全面数据探索

进行对数变换:

df_train['GrLivArea']= np.log(df_train['GrLivArea'])

绘制变换后的直方图和正态概率图:

sns.distplot(df_train['GrLivArea'], fit=norm);
fig = plt.figure()
res = stats.probplot(df_train['GrLivArea'], plot=plt)

详解 Kaggle 房价预测竞赛优胜方案:用 Python 进行全面数据探索

3.  TotalBsmtSF
绘制直方图和正态概率曲线图:

sns.distplot(df_train['TotalBsmtSF'],fit=norm);
fig = plt.figure()
res = stats.probplot(df_train['TotalBsmtSF'],plot=plt)

详解 Kaggle 房价预测竞赛优胜方案:用 Python 进行全面数据探索

从图中可以看出:

  • 显示出了偏度

  • 大量为 0 的观察值(没有地下室的房屋)

  • 含 0 的数据无法进行对数变换

我们建立了一个变量,可以得到有没有地下室的影响值(二值变量),我们选择忽略零值,只对非零值进行对数变换。这样我们既可以变换数据,也不会损失有没有地下室的影响。

df_train['HasBsmt']= pd.Series(len(df_train['TotalBsmtSF']), index=df_train.index)
df_train['HasBsmt'] = 0 
df_train.loc[df_train['TotalBsmtSF']>0,'HasBsmt'] = 1

进行对数变换:

df_train['TotalBsmtSF']= np.log(df_train['TotalBsmtSF'])

绘制变换后的直方图和正态概率图:

sns.distplot(df_train['TotalBsmtSF'], fit=norm);
fig = plt.figure()
res = stats.probplot(df_train['TotalBsmtSF'], plot=plt)

详解 Kaggle 房价预测竞赛优胜方案:用 Python 进行全面数据探索

同方差性:

最好的测量两个变量的同方差性的方法就是图像。
1.  SalePrice 和 GrLivArea 同方差性
绘制散点图:

plt.scatter(df_train['GrLivArea'],df_train['SalePrice']);

详解 Kaggle 房价预测竞赛优胜方案:用 Python 进行全面数据探索

2. SalePrice with TotalBsmtSF 同方差性

绘制散点图:

plt.scatter(df_train[df_train['TotalBsmtSF']>0]['TotalBsmtSF'], df_train[df_train['TotalBsmtSF']>0]['SalePrice']);

详解 Kaggle 房价预测竞赛优胜方案:用 Python 进行全面数据探索

可以看出 SalePrice 在整个 TotalBsmtSF 变量范围内显示出了同等级别的变化。

虚拟变量

将类别变量转换为虚拟变量:

df_train = pd.get_dummies(df_train)

结论

整个方案中,我们使用了很多《多元数据分析》中提出的方法。我们对变量进行了哲学分析,不仅对 SalePrice 进行了单独分析,还结合了相关程度最高的变量进行分析。我们处理了缺失数据和异常值,我们验证了一些基础统计假设,并且将类别变量转换为虚拟变量。
但问题还没有结束,我们还需要预测房价的变化趋势,房价预测是否适合线性回归正则化的方法?是否适合组合方法?或者一些其他的方法?

希望你可以进行自己的探索发现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473399.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用GRU单元的RNN模型生成唐诗

文章目录1. 读取数据2. 字符索引3. 创建文本序列4. 创建文本编码序列5. 使用GRU单元建立RNN模型6. 文本生成参考 基于深度学习的自然语言处理 本文使用 GRU 单元建立 RNN 网络,使用唐诗三百首进行训练,使用模型生成唐诗。 GRU RNN 网络能够克服简单RNN…

Python数据结构常见的八大排序算法(详细整理)

前言 八大排序,三大查找是《数据结构》当中非常基础的知识点,在这里为了复习顺带总结了一下常见的八种排序算法。 常见的八大排序算法,他们之间关系如下: 排序算法.png 他们的性能比较: 下面,利用Python分别…

牛客 牛牛选物(01背包)

文章目录1. 题目2. 解题1. 题目 链接:https://ac.nowcoder.com/acm/contest/9887/A 来源:牛客网 牛牛有现在有n个物品,每个物品有一个体积v[i]和重量g[i],他想选择其中总体积恰好为V的若干个物品,想使这若干个物品的总重量最大&…

微信小程序最常用的布局——Flex布局

最近在学习微信小程序,在设计首页布局的时候,新认识了一种布局方式display:flex 1 .container { 2 display: flex; 3 flex-direction: column; 4 align-items: center; 5 background-color: #b3d4db; 6 } 编译之后的效果很明显,界面…

LeetCode 649. Dota2 参议院(循环队列)

文章目录1. 题目2. 解题1. 题目 Dota2 的世界里有两个阵营:Radiant(天辉)和 Dire(夜魇) Dota2 参议院由来自两派的参议员组成。现在参议院希望对一个 Dota2 游戏里的改变作出决定。他们以一个基于轮为过程的投票进行。在每一轮中,每一位参议员都可以行…

'[linux下tomcat 配置

tomcat目录结构bin ——Tomcat执行脚本目录 conf ——Tomcat配置文件 lib ——Tomcat运行需要的库文件(JARS) logs ——Tomcat执行时的LOG文件 temp ——Tomcat临时文件存放目录 webapps ——Tomcat的主要Web发布目录(存放我们自己的JSP,SER…

微信小程序基础(一)

一.注册小程序账号,下载IDE 1.官网注册https://mp.weixin.qq.com/,并下载IDE。 2.官方文档一向都是最好的学习资料。 注意: (1)注册账号之后会有一个appid,新建项目的时候需要填上,不然很多…

[Kaggle] Spam/Ham Email Classification 垃圾邮件分类(RNN/GRU/LSTM)

文章目录1. 读入数据2. 文本处理3. 建模4. 训练5. 测试练习地址:https://www.kaggle.com/c/ds100fa19 相关博文 [Kaggle] Spam/Ham Email Classification 垃圾邮件分类(spacy) [Kaggle] Spam/Ham Email Classification 垃圾邮件分类&#xff…

微信小程序中实现瀑布流布局和无限加载

瀑布流布局是一种比较流行的页面布局方式,最典型的就是Pinterest.com,每个卡片的高度不都一样,形成一种参差不齐的美感。 在HTML5中,我们可以找到很多基于jQuery之类实现的瀑布流布局插件,轻松做出这样的布局形式。在…

LeetCode 1684. 统计一致字符串的数目(哈希)

文章目录1. 题目2. 解题1. 题目 给你一个由不同字符组成的字符串 allowed 和一个字符串数组 words 。 如果一个字符串的每一个字符都在 allowed 中,就称这个字符串是 一致 字符串。 请你返回 words 数组中 一致 字符串的数目。 示例 1: 输入&#xff…

微信小程序:页面跳转时传递数据到另一个页面

一、功能描述 页面跳转时,同时把当前页面的数据传递给跳转的目标页面,并在跳转后的目标页面进行展示 二、功能实现 1. 代码实现 test1页面 // pages/test1/test1.js Page({/*** 页面的初始数据*/data: {name:Tom,age:12},buttonListener:function(){…

LeetCode 1685. 有序数组中差绝对值之和(前缀和)

文章目录1. 题目2. 解题1. 题目 给你一个 非递减 有序整数数组 nums 。 请你建立并返回一个整数数组 result,它跟 nums 长度相同,且result[i] 等于 nums[i] 与数组中所有其他元素差的绝对值之和。 换句话说, result[i] 等于 sum(|nums[i]-…

对一个 复杂的json结果进行取值的例子

1 JSON结果集 1 [2 {3 "J_LP_OPERATE_MAIN": {4 "ID": "1900036295",5 "FILL_MAN": "周兴福",6 "FILL_DEPT": "运维一班",7 "STATE…

微信小程序正则判断姓名和手机号

一、页面效果 二、json文件 //获取应用实例 const app getApp() Page({/*** 页面的初始数据*/data: {array: [速美, 现代, 淮安],mode: scaleToFill,src: ../../images/1.png,userInfo: {},hasUserInfo: false,canIUse: wx.canIUse(button.open-type.getUserInfo),userName: …

LeetCode 1686. 石子游戏 VI(贪心)

文章目录1. 题目2. 解题283 / 1660,前17%681 / 6572,前10.4%1. 题目 Alice 和 Bob 轮流玩一个游戏,Alice 先手。 一堆石子里总共有 n 个石子,轮到某个玩家时,他可以 移出 一个石子并得到这个石子的价值。 Alice 和 B…

T4生成实体和简单的CRUD操作

主要跟大家交流下T4,我这里针对的是mysql,我本人比较喜欢用mysql,所以语法针对mysql,所以你要准备mysql的DLL了,同理sqlserver差不多,有兴趣可以自己写写,首先网上找了一个T4的帮助类,得到一些数据库属性,命名为 DbHelper.ttinclude <# template debug"false" hos…

LeetCode 1688. 比赛中的配对次数(模拟)

文章目录1. 题目2. 解题1. 题目 给你一个整数 n &#xff0c;表示比赛中的队伍数。比赛遵循一种独特的赛制&#xff1a; 如果当前队伍数是 偶数 &#xff0c;那么每支队伍都会与另一支队伍配对。总共进行 n / 2 场比赛&#xff0c;且产生 n / 2 支队伍进入下一轮。如果当前队…

微信小程序使用函数的方法

一、使用来自不同页面的函数 函数写在util.js页面 function formatTime(date) {var year date.getFullYear()var month date.getMonth() 1var day date.getDate()var hour date.getHours()var minute date.getMinutes()var second date.getSeconds()return [year, mon…

LeetCode 1689. 十-二进制数的最少数目(脑筋急转弯)

文章目录1. 题目2. 解题1. 题目 如果一个十进制数字不含任何前导零&#xff0c;且每一位上的数字不是 0 就是 1 &#xff0c;那么该数字就是一个 十-二进制数 。 例如&#xff0c;101 和 1100 都是 十-二进制数&#xff0c;而 112 和 3001 不是。 给你一个表示十进制整数的字…

WeUI for 小程序使用教程文档总结

WeUI 是一套同微信原生视觉体验一致的基础样式库&#xff0c;由微信官方设计团队为微信 Web 开发量身设计&#xff0c;可以令用户的使用感知更加统一。包含按钮button、组件cell、弹框dialog、 进度条progress、 提示toast、文章article、弹出菜单actionsheet、图标icon等各式元…