10- 天猫用户复购预测 (机器学习集成算法) (项目十) *
项目难点
- merchant: 商人
- 重命名列名: user_log.rename(columns={'seller_id':'merchant_id'}, inplace=True)
- 数据类型转换: user_log['item_id'] = user_log['item_id'].astype('int32')
- 主要使用方法: xgboost, lightbm
- 竞赛地址: 天猫复购预测之挑战Baseline_学习赛_天池大赛-阿里云天池
- 排名: 448/9361 score: 0.680989
项目简介:
阿里巴巴天池天猫复购预测的机器学习项目, 使用数据分析, 通过机器学习中的线性分类算法, 进行建模, 从而预测消费者行为, 复购情况 .
- 数据分析
- 特征工程
- 算法使用
- 算法集成
1 数据处理
1.1 模型导入
import gc # 垃圾回收
import pandas as pd
import numpy as np
import warnings
warnings.filterwarnings('ignore')# 导入分析库
# 数据拆分
from sklearn.model_selection import train_test_split
# 同分布数据拆分
from sklearn.model_selection import StratifiedGroupKFold
import lightgbm as lgb
import xgboost as xgb
1.2 加载数据
%%time
# 加载数据
# 用户行为日志
user_log = pd.read_csv('./data_format1/user_log_format1.csv', dtype = {'time_stamp':'str'})
# 用户画像
user_info = pd.read_csv('./data_format1/user_info_format1.csv')
# 训练数据和测试数据
train_data = pd.read_csv('./data_format1/train_format1.csv')
test_data = pd.read_csv('./data_format1/test_format1.csv')
1.3 查看数据
print('---data shape---')
for data in [user_log, user_info, train_data, test_data]:print(data.shape)
print('---data info ---')
for data in [user_log, user_info, train_data, test_data]:print(data.info())
display(user_info.head())
display(train_data.head(),test_data.head())
1.4 数据集成
train_data['origin'] = 'train'
test_data['origin'] = 'test'
# 集成
all_data = pd.concat([train_data, test_data], ignore_index=True, sort=False)
# prob测试数据中特有的一列
all_data.drop(['prob'], axis=1, inplace=True) # 删除概率这一列
display(all_data.head(),all_data.shape)
# 连接user_info表,通过user_id关联
all_data = all_data.merge(user_info, on='user_id', how='left')
display(all_data.shape,all_data.head())
# 使用 merchant_id(原列名seller_id)
user_log.rename(columns={'seller_id':'merchant_id'}, inplace=True)
del train_data,test_data,user_info
gc.collect()
1.5 数据类型转换
%%time
display(user_log.info())
%%time
display(user_log.head())
%%time
# 用户行为数据类型转换
user_log['user_id'] = user_log['user_id'].astype('int32')
user_log['merchant_id'] = user_log['merchant_id'].astype('int32')
user_log['item_id'] = user_log['item_id'].astype('int32')
user_log['cat_id'] = user_log['cat_id'].astype('int32')
user_log['brand_id'].fillna(0, inplace=True)
user_log['brand_id'] = user_log['brand_id'].astype('int32')
user_log['time_stamp'] = pd.to_datetime(user_log['time_stamp'], format='%H%M')
user_log['action_type'] = user_log['action_type'].astype('int32')
display(user_log.info(),user_log.head())
display(all_data.isnull().sum())
# 缺失值填充
all_data['age_range'].fillna(0, inplace=True)
all_data['gender'].fillna(2, inplace=True)
all_data.isnull().sum()
all_data.info()
all_data['age_range'] = all_data['age_range'].astype('int8')
all_data['gender'] = all_data['gender'].astype('int8')
all_data['label'] = all_data['label'].astype('str')
all_data['user_id'] = all_data['user_id'].astype('int32')
all_data['merchant_id'] = all_data['merchant_id'].astype('int32')
all_data.info()
1.6 用户特征工程(5min)
%%time
##### 特征处理
##### User特征处理
groups = user_log.groupby(['user_id'])# 用户交互行为数量 u1
temp = groups.size().reset_index().rename(columns={0:'u1'})
all_data = all_data.merge(temp, on='user_id', how='left')# 细分
# 使用 agg 基于列的聚合操作,统计唯一值个数 item_id, cat_id, merchant_id, brand_id
# 用户,交互行为:点了多少商品呢?
temp = groups['item_id'].agg([('u2', 'nunique')]).reset_index()
all_data = all_data.merge(temp, on='user_id', how='left')# 用户,交互行为,具体统计:类目多少
temp = groups['cat_id'].agg([('u3', 'nunique')]).reset_index()
all_data = all_data.merge(temp, on='user_id', how='left')temp = groups['merchant_id'].agg([('u4', 'nunique')]).reset_index()
all_data = all_data.merge(temp, on='user_id', how='left')temp = groups['brand_id'].agg([('u5', 'nunique')]).reset_index()
all_data = all_data.merge(temp, on='user_id', how='left')# 购物时间间隔特征 u6 按照小时
temp = groups['time_stamp'].agg([('F_time', 'min'), ('B_time', 'max')]).reset_index()
temp['u6'] = (temp['B_time'] - temp['F_time']).dt.seconds/3600
all_data = all_data.merge(temp[['user_id', 'u6']], on='user_id', how='left')# 统计操作类型为0,1,2,3的个数
temp = groups['action_type'].value_counts().unstack().reset_index().rename(columns={0:'u7', 1:'u8', 2:'u9', 3:'u10'})
all_data = all_data.merge(temp, on='user_id', how='left')del temp,groups
gc.collect()
all_data.head()
1.7 店铺特征工程(5min)
%%time
##### 商家特征处理
groups = user_log.groupby(['merchant_id'])# 商家被交互行为数量 m1
temp = groups.size().reset_index().rename(columns={0:'m1'})
all_data = all_data.merge(temp, on='merchant_id', how='left')# 统计商家被交互的 user_id, item_id, cat_id, brand_id 唯一值
temp = groups['user_id', 'item_id', 'cat_id', 'brand_id'].nunique().reset_index().rename(columns={'user_id':'m2','item_id':'m3', 'cat_id':'m4', 'brand_id':'m5'})
all_data = all_data.merge(temp, on='merchant_id', how='left')# 统计商家被交互的 action_type 唯一值
temp = groups['action_type'].value_counts().unstack().reset_index().rename( columns={0:'m6', 1:'m7', 2:'m8', 3:'m9'})
all_data = all_data.merge(temp, on='merchant_id', how='left')del temp
gc.collect()
display(all_data.tail())
1.8 用户和店铺联合特征工程(4min)
%%time
##### 用户+商户特征
groups = user_log.groupby(['user_id', 'merchant_id'])# 用户在不同商家交互统计
temp = groups.size().reset_index().rename(columns={0:'um1'})
all_data = all_data.merge(temp, on=['user_id', 'merchant_id'], how='left')# 统计用户在不同商家交互的 item_id, cat_id, brand_id 唯一值
temp = groups['item_id', 'cat_id', 'brand_id'].nunique().reset_index().rename(columns={'item_id':'um2','cat_id':'um3','brand_id':'um4'})
all_data = all_data.merge(temp, on=['user_id', 'merchant_id'], how='left')# 统计用户在不同商家交互的 action_type 唯一值
temp = groups['action_type'].value_counts().unstack().reset_index().rename(columns={0:'um5',1:'um6',2:'um7',3:'um8'})
all_data = all_data.merge(temp, on=['user_id', 'merchant_id'], how='left')# 统计用户在不同商家购物时间间隔特征 um9 按照小时
temp = groups['time_stamp'].agg([('F_time', 'min'), ('B_time', 'max')]).reset_index()
temp['um9'] = (temp['B_time'] - temp['F_time']).dt.seconds/3600
all_data = all_data.merge(temp[['user_id','merchant_id','um9']], on=['user_id', 'merchant_id'], how='left')del temp,groups
gc.collect()
display(all_data.head())
1.9 购买点击比
all_data['r1'] = all_data['u9']/all_data['u7'] # 用户购买点击比
all_data['r2'] = all_data['m8']/all_data['m6'] # 商家购买点击比
all_data['r3'] = all_data['um7']/all_data['um5'] # 不同用户不同商家购买点击比
display(all_data.head())
1.10 空数据填充
display(all_data.isnull().sum())
all_data.fillna(0, inplace=True)
all_data.isnull().sum()
1.11 年龄性别类别型转换
all_data['age_range']
%%time
# 修改age_range字段名称为 age_0, age_1, age_2... age_8
# 独立编码
temp = pd.get_dummies(all_data['age_range'], prefix='age')
display(temp.head(10))
all_data = pd.concat([all_data, temp], axis=1)
# 性别转换
temp = pd.get_dummies(all_data['gender'], prefix='g')
all_data = pd.concat([all_data, temp], axis=1) # 列进行合并# 删除原数据
all_data.drop(['age_range', 'gender'], axis=1, inplace=True)del temp
gc.collect()
all_data.head()
1.12 数据存储
%%time
# train_data、test-data
train_data = all_data[all_data['origin'] == 'train'].drop(['origin'], axis=1)
test_data = all_data[all_data['origin'] == 'test'].drop(['label', 'origin'], axis=1)train_data.to_csv('train_data.csv')
test_data.to_csv('test_data.csv')
2 算法建模预测
# 训练数据和目标值
train_X, train_y = train_data.drop(['label'], axis=1), train_data['label']# 数据拆分保留20%作为测试数据
X_train, X_valid, y_train, y_valid = train_test_split(train_X, train_y, test_size=.2)
2.1 LGB 模型
def lgb_train(X_train, y_train, X_valid, y_valid, verbose=True):model_lgb = lgb.LGBMClassifier(max_depth=10, # 8 # 树最大的深度n_estimators=5000, # 集成算法,树数量min_child_weight=100, colsample_bytree=0.7, # 特征筛选subsample=0.9, # 样本采样比例learning_rate=0.1) # 学习率model_lgb.fit(X_train, y_train,eval_metric='auc',eval_set=[(X_train, y_train), (X_valid, y_valid)],verbose=verbose, # 是否打印输出训练过程early_stopping_rounds=10) # 早停,等10轮决策,评价指标不在变化,停止print(model_lgb.best_score_['valid_1']['auc'])return model_lgb
X_train
model_lgb = lgb_train(X_train.values, y_train, X_valid.values, y_valid, verbose=True)
%%time
prob = model_lgb.predict_proba(test_data.values) # 预测
submission = pd.read_csv('./data_format1/test_format1.csv')# 复购的概率
submission['prob'] = pd.Series(prob[:,1]) # 预测数据赋值给提交数据
display(submission.head())
submission.to_csv('submission_lgb.csv', index=False)del submission
gc.collect()
2.2 XGB 模型
def xgb_train(X_train, y_train, X_valid, y_valid, verbose=True):model_xgb = xgb.XGBClassifier(max_depth=10, # raw8n_estimators=5000,min_child_weight=300, colsample_bytree=0.7, subsample=0.9, learing_rate=0.1)model_xgb.fit(X_train, y_train,eval_metric='auc',eval_set=[(X_train, y_train), (X_valid, y_valid)],verbose=verbose,early_stopping_rounds=10) # 早停法,如果auc在10epoch没有进步就stopprint(model_xgb.best_score)return model_xgb
模型训练
model_xgb = xgb_train(X_train, y_train, X_valid, y_valid, verbose=False)
模型预测
%%time
prob = model_xgb.predict_proba(test_data)
submission = pd.read_csv('./data_format1/test_format1.csv')
submission['prob'] = pd.Series(prob[:,1])
submission.to_csv('submission_xgb.csv', index=False)
display(submission.head())
del submission
gc.collect()
3 交叉验证多轮建模
# 构造训练集和测试集
def get_train_test_datas(train_df,label_df):skv = StratifiedKFold(n_splits=10, shuffle=True)trainX = []trainY = []testX = []testY = []# 索引:训练数据索引train_index,目标值的索引test_indexfor train_index, test_index in skv.split(X=train_df, y=label_df): # 10轮for循环train_x, train_y, test_x, test_y = train_df.iloc[train_index, :], label_df.iloc[train_index], \train_df.iloc[test_index, :], label_df.iloc[test_index]trainX.append(train_x)trainY.append(train_y)testX.append(test_x)testY.append(test_y)return trainX, testX, trainY, testY
3.1 LGB 模型(1min)
%%time
train_X, train_y = train_data.drop(['label'], axis=1), train_data['label']# 拆分为10份训练数据和验证数据
X_train, X_valid, y_train, y_valid = get_train_test_datas(train_X, train_y)print('----训练数据,长度',len(X_train))
print('----验证数据,长度',len(X_valid))pred_lgbms = [] # 列表,接受目标值,10轮,平均值for i in range(10):print('\n=========LGB training use Data {}/10===========\n'.format(i+1))model_lgb = lgb.LGBMClassifier(max_depth=10, # 8n_estimators=1000,min_child_weight=100,colsample_bytree=0.7,subsample=0.9,learning_rate=0.05)model_lgb.fit(X_train[i].values, y_train[i],eval_metric='auc',eval_set=[(X_train[i].values, y_train[i]), (X_valid[i].values, y_valid[i])],verbose=False,early_stopping_rounds=10)print(model_lgb.best_score_['valid_1']['auc'])pred = model_lgb.predict_proba(test_data.values)pred = pd.DataFrame(pred[:,1]) # 将预测概率(复购)去处理,转换成DataFramepred_lgbms.append(pred)# 求10轮平均值生成预测结果,保存
# 每一轮的结果,作为一列,进行了添加
pred_lgbms = pd.concat(pred_lgbms, axis=1) # 级联,列进行级联# 加载提交数据
submission = pd.read_csv('./data_format1/test_format1.csv')
submission['prob'] = pred_lgbms.mean(axis=1) # 10轮训练的平均值
submission.to_csv('submission_KFold_lgb.csv', index=False)
3.2 XGB 模型(4min)
# 构造训练集和测试集
def get_train_test_datas(train_df,label_df):skv = StratifiedKFold(n_splits=20, shuffle=True)trainX = []trainY = []testX = []testY = []# 索引:训练数据索引train_index,目标值的索引test_indexfor train_index, test_index in skv.split(X=train_df, y=label_df):# 10轮for循环train_x, train_y, test_x, test_y = train_df.iloc[train_index, :], label_df.iloc[train_index], \train_df.iloc[test_index, :], label_df.iloc[test_index]trainX.append(train_x)trainY.append(train_y)testX.append(test_x)testY.append(test_y)return trainX, testX, trainY, testY
%%time
train_X, train_y = train_data.drop(['label'], axis=1), train_data['label']# 拆分为20份训练数据和验证数据
X_train, X_valid, y_train, y_valid = get_train_test_datas(train_X, train_y)print('------数据长度',len(X_train),len(y_train))pred_xgbs = []
for i in range(20):print('\n============XGB training use Data {}/20========\n'.format(i+1))model_xgb = xgb.XGBClassifier(max_depth=10, # raw8n_estimators=5000,min_child_weight=200, colsample_bytree=0.7, subsample=0.9,learning_rate = 0.1)model_xgb.fit(X_train[i], y_train[i],eval_metric='auc',eval_set=[(X_train[i], y_train[i]), (X_valid[i], y_valid[i])],verbose=False,early_stopping_rounds=10 # 早停法,如果auc在10epoch没有进步就stop) print(model_xgb.best_score)pred = model_xgb.predict_proba(test_data)pred = pd.DataFrame(pred[:,1])pred_xgbs.append(pred)# 求20轮平均值生成预测结果,保存
pred_xgbs = pd.concat(pred_xgbs, axis=1)
submission = pd.read_csv('./data_format1/test_format1.csv')
submission['prob'] = pred_xgbs.mean(axis=1)
submission.to_csv('submission_KFold_xgb.csv', index=False)
相关文章:
![](https://img-blog.csdnimg.cn/16ee522720d84a2cad2b88e9b6887216.png)
10- 天猫用户复购预测 (机器学习集成算法) (项目十) *
项目难点 merchant: 商人重命名列名: user_log.rename(columns{seller_id:merchant_id}, inplaceTrue)数据类型转换: user_log[item_id] user_log[item_id].astype(int32)主要使用方法: xgboost, lightbm竞赛地址: 天猫复购预测之挑战Baseline_学习赛_天池大赛-阿里云天池…...
![](https://www.ngui.cc/images/no-images.jpg)
对于《MySQL 实战45讲》的理解
一.理论 一条SQL执行过程 连接器分析器优化器执行器 索引 索引的出现其实就是为了提高数据查询的效率,就像书的目录一样 常见索引数据结构(每碰到一个新数据库,我们需要先关注它的数据模型,这样才能从理论上分析出这个数据库的适用场景) 哈希…...
![](https://www.ngui.cc/images/no-images.jpg)
XQuery 函数
XQuery 1.0、XPath 2.0 以及 XSLT 2.0 共享相同的函数库。 XQuery 函数 XQuery 含有超过 100 个内建的函数。这些函数可用于字符串值、数值、日期以及时间比较、节点和 QName 操作、序列操作、逻辑值等等。您也可在 XQuery 中定义自己的函数。 XQuery 内建函数 XQuery 函数命…...
![](https://img-blog.csdnimg.cn/da100ba3f4e94abc94d2f867cb06bb99.png)
Elasticsearch的安装及常用操作
文章目录一、Elasticsearch的介绍1、Elasticsearch索引2、Elasticsearch的介绍二、Elasticsearch的安装1、安装ES服务2、安装kibana3、Docker安装ES4、Docker安装Kibana三、ES的常用操作1、索引操作2、文档操作3、域的属性3.1 index3.2 type3.3 store总结一、Elasticsearch的介…...
![](https://img-blog.csdnimg.cn/img_convert/53112b7895f1742910a1cb3c2643f2e5.png)
网络安全应急响应服务方案怎么写?包含哪些阶段?一文带你了解!
文章目录一、服务范围及流程1.1 服务范围1.2 服务流程及内容二、准备阶段2.1 负责人准备内容2.2 技术人员准备内容(一)服务需求界定(二)主机和网络设备安全初始化快照和备份2.3市场人员准备内容(1)预防和预…...
![](https://www.ngui.cc/images/no-images.jpg)
11、事务原理和实战,MVCC
事务原理和实战 1. 认识事务2. 事务控制语句2.1 开启事务2.2 事务提交2.3 事务回滚3. 事务的实现方式3.1 原子性3.2 一致性3.3 隔离性3.3 持久性4purge thread线程5事务统计QPS与TPS5.1 QPS5.2 TPS6. 事务隔离级别6.1 隔离级别6.2 查看隔离级别6.3 设置隔离级别6.4 不同隔离级别…...
![](https://img-blog.csdnimg.cn/c9eaf86ac34c47a6928d08af5f37c225.png)
Robust Self-Augmentation for Named Entity Recognition with Meta Reweighting
摘要 近年来,自我增强成为在低资源场景下提升命名实体识别性能的研究热点。Token substitution and mixup (token替换和表征混合)是两种有效提升NER性能的自增强方法。明显,自增强方法得到的增强数据可能由潜在的噪声。先前的研究…...
![](https://img-blog.csdnimg.cn/c60b937e11c74f0e97f71518917a4dbc.png)
Java基础-xml
1.xml 1.1概述 万维网联盟(W3C) 万维网联盟(W3C)创建于1994年,又称W3C理事会。1994年10月在麻省理工学院计算机科学实验室成立。 建立者: Tim Berners-Lee (蒂姆伯纳斯李)。 是Web技术领域最具权威和影响力的国际中立性技术标准机构。 到目前为止&#…...
![](https://www.ngui.cc/images/no-images.jpg)
TCP的Nagle算法和delayed ack---延时发送和延时应答与稍带应答选项
本文目录提高TCP的网络利用率的二个思考解决方案:Nagle算法和delayed ack(延时发送和延时应答与稍带应答选项)Nagle算法和delayed ack算法同时启动可能会导致的问题提高TCP的网络利用率的二个思考 我们都知道,TCP是一个基于字节流…...
![](https://img-blog.csdnimg.cn/img_convert/8cd380a24d6a2563596f06a47b20de3f.png)
智能拣配单解决方案
电子货架标签系统(ESLs),是一种放置在货架上、可替代传统纸质价格标签的电子显示装置, 每一个电子货架标签通过有线或者无线网络与商场计算机数据库相连, 并将最新的商品价格通过电子货架标签上的屏显示出来。 电子…...
![](https://www.ngui.cc/images/no-images.jpg)
如何防御入侵服务器
根据中华人民共和国刑法: 第二百八十六条违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行,后果严重的,处五年以下有期徒刑或者拘役;后果特别严重的ÿ…...
![](https://img-blog.csdnimg.cn/37f1c0fcae3c441bba29c077435f1f3c.png)
[软件工程导论(第六版)]第4章 形式化说明技术(课后习题详解)
文章目录1. 举例对比形式化方法和欠形式化方法的优缺点。2. 在什么情况下应该使用形式化说明技术?使用形式化说明技术时应遵守哪些准则?3. 一个浮点二进制数的构成是:一个可选的符号(+或-)&…...
![](https://img-blog.csdnimg.cn/img_convert/379e83ebc3e368fb2022e6e70d11b130.png)
Premiere基础操作
一:设置缓存二:ctrI导入素材三:导入图像序列四:打开吸附。打开吸附后素材会对齐。五:按~键可以全屏窗口。六:向前选择轨道工具。在时间线上点击,向前选中时间线上素材。向后选择轨道工具&#x…...
![](https://img-blog.csdnimg.cn/946bdb3cfae84882b2aaa97deb929012.png)
Prometheus监控案例-tomcat、mysql、redis、haproxy、nginx
监控tomcat tomcat自身并不能提供监控指标数据,需要借助第三方exporter实现:https://github.com/nlighten/tomcat_exporter 构建镜像 基于tomcat官方镜像,重新制作一个镜像,将tomcat-exporter和tomcat整合到一起。Ddockerfile如…...
![](https://img-blog.csdnimg.cn/851ea9485742417b8d469a855d5a784d.png)
如何寻找SAP中的增强
文章目录0 简介1 寻找一代增强2 寻找二代增强2.2 在包里也可以看到2.3 在出口对象里输入包的名字也可以找到2.4 通过以下函数可以发现已有的增强2.5 也可以在cmod里直接找2.6 总结3 寻找第三代增强0 简介 在SAP中,对原代码的修改最不容易的是找增强,以下…...
![](https://www.ngui.cc/images/no-images.jpg)
算法刷题打卡第95天: 最大平均通过率
最大平均通过率 难度:中等 一所学校里有一些班级,每个班级里有一些学生,现在每个班都会进行一场期末考试。给你一个二维数组 classes ,其中 classes[i] [passi, totali] ,表示你提前知道了第 i 个班级总共有 totali…...
![](https://img-blog.csdnimg.cn/img_convert/540e2d5c57d74c989a02f3a0d4dc8a4f.png)
Springboot扩展点系列之终结篇:Bean的生命周期
前言关于Springboot扩展点系列已经输出了13篇文章,分别梳理出了各个扩展点的功能特性、实现方式和工作原理,为什么要花这么多时间来梳理这些内容?根本原因就是这篇文章:Spring bean的生命周期。你了解Spring bean生命周期…...
![](https://img-blog.csdnimg.cn/img_convert/2988e864ba2a4ca8aed5b9e7c8aeed73.jpeg)
OnGUI Color 控件||Unity 3D GUI 简介||OnGUI TextField 控件
Unity 3D Color 控件与 Background Color 控件类似,都是渲染 GUI 颜色的,但是两者不同的是 Color 不但会渲染 GUI 的背景颜色,同时还会影响 GUI.Text 的颜色。具体使用时,要作如下定义:public static var color:Color;…...
![](https://www.ngui.cc/images/no-images.jpg)
【日刻一诗】
日刻一诗 1)LeetCode总结(线性表)_链表类 2)LeetCode总结(线性表)_栈队列类 3)LeetCode总结(线性表)_滑动窗口 4)LeetCode总结(线性表&#x…...
![](https://img-blog.csdnimg.cn/img_convert/15299bab903e76958cd5840af880d6fa.png)
设计模式 状态机
前言 本文梳理状态机概念,在实操中状态机和状态模式类似,只是被封装起来,可以很方便的实现状态初始化和状态转换。 概念 有限状态机(finite-state machine)又称有限状态自动机(英语:finite-s…...
![](https://img-blog.csdnimg.cn/img_convert/8fb1c0f5fe1ca1a0940a56e76d823fca.webp?x-oss-process=image/format,png)
React源码分析(二)渲染机制
准备工作 为了方便讲解,假设我们有下面这样一段代码: function App(){const [count, setCount] useState(0)useEffect(() > {setCount(1)}, [])const handleClick () > setCount(count > count)return (<div>勇敢牛牛, <sp…...
![](https://www.ngui.cc/images/no-images.jpg)
Object.defineProperty 和 Proxy 的区别
区别:Object.defineProperty是一个用来定义对象的属性或者修改对象现有的属性的函数,,而 Proxy 是一个用来包装普通对象的对象的对象。Object.defineProperty是vue2响应式的原理, Proxy 是vue3响应式的原理1)参数不同Object.defineProperty参数obj: 要定…...
![](https://img-blog.csdnimg.cn/383ce4637d5046929a380586a1b561e3.png)
Python基础4——面向对象
目录 1. 认识对象 2. 成员方法 2.1 成员方法的定义语法 3. 构造方法 4. 其他的一些内置方法 4.1 __str__字符串方法 4.2 __lt__小于符号比较方法 4.3 __le__小于等于符号比较方法 4.4 __eq__等号比较方法 5. 封装特性 6. 继承特性 6.1 单继承 6.2 多继承 6.3 pas…...
![](https://www.ngui.cc/images/no-images.jpg)
Hive 核心知识点灵魂 16 问
本文目录 No1. 请谈一下 Hive 的特点No2. Hive 底层与数据库交互原理?No3. Hive 的 HSQL 转换为 MapReduce 的过程?No4. Hive 的两张表关联,使用 MapReduce 怎么实现?No5. 请说明 hive 中 Sort By,Order By࿰…...
![](https://www.ngui.cc/images/no-images.jpg)
聊聊探索式测试与敏捷实践
这是鼎叔的第五十二篇原创文章。行业大牛和刚毕业的小白,都可以进来聊聊。欢迎关注本专栏和微信公众号《敏捷测试转型》,大量原创思考文章陆续推出。探索式测试在敏捷测试象限中处于右上角,即面向业务且评价产品,这篇补充一下探索…...
![](https://img-blog.csdnimg.cn/img_convert/775ddbc23e8c1e532ea78f75fe44a06b.png)
社区宠物诊所管理系统
目录第一章概述 PAGEREF _Toc4474 \h 21.1引言 PAGEREF _Toc29664 \h 31.2开发背景 PAGEREF _Toc3873 \h 3第二章系统总体结构及开发 PAGEREF _Toc19895 \h 32.1系统的总体设计 PAGEREF _Toc6615 \h 32.2开发运行环境 PAGEREF _Toc13054 \h 3第三章数据库设计 PAGEREF _Toc2852…...
![](https://img-blog.csdnimg.cn/490021f352404680a1ffca7984894dcc.png)
Vue项目创建首页发送axios请求
这是个全新的Vue项目,引入了ElementUI 将App.vue里的内容干掉,剩如下 然后下面的三个文件也可以删掉了 在views文件下新建Login.vue组件 到router目录下的index.js 那么现在的流程大概是这样子的 启动 写登陆页面 <template><div><el-form :ref"form"…...
![](https://img-blog.csdnimg.cn/43145ec06b8a47039ee37799718c48c6.png)
Nginx
NginxNginxNginx可以从事的用途Nginx安装Nginx自带常用命令Nginx启动Nginx停止Nginx重启Nginx配置概要第一部分:全局块第二部分:events 块:第三部分:http块:Nginx Nginx是一个高性能的http和反向代理服务器࿰…...
![](https://img-blog.csdnimg.cn/83054d398b6f497ab31c7e732a5b91de.png)
2049. 统计最高分的节点数目
2049. 统计最高分的节点数目题目算法设计:深度优先搜索题目 传送门:https://leetcode.cn/problems/count-nodes-with-the-highest-score/ 算法设计:深度优先搜索 这题的核心是计算分数。 一个节点的分数 左子树节点数 右子树节点数 除自…...
![](https://img-blog.csdnimg.cn/img_convert/308bfcf1a3dafe7752f4669521231e81.png)
Docker 架构简介
Docker 架构 Docker 包括三个基本概念: 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。容器&am…...
![](/images/no-images.jpg)
临淄做网站/精准获客
字典序的第K小数字 给定整数 n 和 k,找到 1 到 n 中字典序第 k 小的数字。 注意:1 ≤ k ≤ n ≤ 109。 示例 : 输入: n: 13 k: 2 输出: 10 解释: 字典序的排列是 [1, 10, 11, 12, 13, 2, 3, 4, 5, 6, 7, 8, 9],所以第二小的数字是 10。 …...
![](http://bbs.cnns.net/p_w_uploads/20070813_5efffebb65fd31879ba28SDRV8yjypJt.jpg)
深圳公司的网站设计/宁波网络推广联系方式
纵观大千网络世界,网站被挂马比比皆是。这正应了那句老话“常在河边走,哪有不湿鞋?”***技术的日益发展,倒是在一定程度上加强了国内的安全性。但是,安全又是相对的。网络的无约束性导致了***技术的泛滥使用。细看一些…...
![](https://images0.cnblogs.com/blog2015/750348/201505/191750080417564.png)
保定小程序开发公司/安全优化大师
这篇文章会解释下不同类型的碎片。理解索引碎片的概念对有效检测和移除碎片非常重要。 什么是碎片 碎片可以定义为:任何情况下,在访问一个表时,造成比适量更多的磁盘IO操作或更长的磁盘IO操作。SELECT查询的最佳操作发生在,表的数…...
![](https://images2015.cnblogs.com/blog/832799/201608/832799-20160828200147699-308006385.png)
厦门做直销网站公司APP/百度网页搜索
EF-CodeFirst-3搞事 本文学习旺杰兄的 CodeFirst 系列教程而写。尽量摆脱之前的影子写出自己的理解 表间关系、级联删除 简单玩法已经走通了,但是我就是想搞点事出来。今天来搞搞表间关系和级联删除 表间关系 毫无疑问在设计表的时候,对于两张有关联的表…...
![](/images/no-images.jpg)
东莞公司企业设计网站建设/免费自己制作网站
JSON规范,不支持注释。之所以不允许加注释,主要是防止:过多的注释,影响了文件本身的数据载体的目的。 有些文件,尤其是配置文件,加入解释说明一些数据项的含义,是有必要的。 1、使用JSON5规范…...
![](/images/no-images.jpg)
外语人才网/自己怎么做关键词优化
1. $#在Linux Shell脚本中,$#用来表示传入的参数数量。例如:shell脚本test0#!/bin/bash# test $#echo "The number of parametes is $#."执行结果$ ./test0The number of parametes is 0.$ ./test0 1 2 3The number of parametes is 3.$ ./tes…...