数据挖掘入门项目二手交易车价格预测之特征工程
文章目录
- 目标
- 常见的特征工程
- 具体步骤
- 1. 导入数据
- 2. 删除异常值
- 3. 特征构造
- 3.1 为树模型构造特征
- 3.2 为LR NN 之类的模型构造特征
- 4. 特征筛选
- 过滤式
- 包裹式
- 嵌入式
- 5. 总结
本文数据集来自阿里天池:https://tianchi.aliyun.com/competition/entrance/231784/information
主要参考了Datawhale的整个操作流程:https://tianchi.aliyun.com/notebook/95501
小编也是第一次接触数据挖掘,所以先跟着Datawhale写的教程操作了一遍,不懂的地方加了一点点自己的理解,感谢Datawhale!
目标
- 将数据转换为能更好地表示潜在问题的特征,从而提高机器学习的性能
常见的特征工程
- 异常处理:
- 通过箱线图(或 3-Sigma)分析删除异常值
①比如在使用箱线图分析删除异常值时,我们可以将大于或小于1/4分位数的值都删掉;
②3-Sigma分析假设数据服从正态分布,根据3-Sigma法则,异常值通常被定义为距离均值超过3个标准差的数据点。因此,可以计算上下阈值,即均值加减3倍标准差 - BOX-COX 转换(处理有偏分布)
Box-Cox转换是一种统计方法,用于使数据集更接近于正态分布。它通过对数据进行幂变换来实现这一目的,可以处理偏态分布或方差不稳定的数据 - 长尾截断
- 特征归一化/标准化:
- 标准化(转换为标准正态分布)
- 归一化(抓换到 [0,1] 区间)
- 针对幂律分布,可以采用公式
- 数据分桶:
- 等频分桶
等频分桶的基本思想是根据数据的频率分布将数据均匀地划分为指定数量的桶。每个桶中包含的数据数量大致相等,因此每个桶中的数据密度相对均匀。这有助于减少数据的离散性,使得数据分析更加稳定和可靠 - 等距分桶
等距分桶的基本思想是将数据范围划分成相等宽度的区间,每个区间称为一个桶 - Best-KS 分桶(类似利用基尼指数进行二分类)
KS统计量(Kolmogorov-Smirnov statistic)通常用于评估两个概率分布的差异性。Best-KS分桶的目标是在保持数据分布的情况下,将连续型数据分成若干个桶(bin),使得每个桶内的数据尽可能服从同一种分布,并且不同桶之间的分布差异尽可能大 - 卡方分桶
用于对连续型特征进行分桶(binning)或分箱(binning)。它通过最大化特征与目标变量之间的卡方统计量来确定最优的分桶方案。
- 缺失值处理:
- 不处理(针对类似 XGBoost 等树模型);
- 删除(缺失数据太多);
- 插值补全,包括均值/中位数/众数/建模预测/多重插补/压缩感知补全/矩阵补全等;
- 分箱,缺失值一个箱;
- 特征构造:
- 构造统计量特征,报告计数、求和、比例、标准差等;
- 时间特征,包括相对时间和绝对时间,节假日,双休日等;
- 地理信息,包括分箱,分布编码等方法;
- 非线性变换,包括 log/ 平方/ 根号等;
- 特征组合,特征交叉;
- 仁者见仁,智者见智。
- 特征筛选
- 过滤式(filter):先对数据进行特征选择,然后在训练学习器,常见的方法有 Relief/方差选择发/相关系数法/卡方检验法/互信息法;
- 包裹式(wrapper):直接把最终将要使用的学习器的性能作为特征子集的评价准则,常见方法有 LVM(Las Vegas Wrapper) ;
- 嵌入式(embedding):结合过滤式和包裹式,学习器训练过程中自动进行了特征选择,常见的有 lasso 回归;
- 降维
- PCA/ LDA/ ICA;
- 特征选择也是一种降维。
具体步骤
1. 导入数据
# 导入数据
train_data=pd.read_csv(train_path,sep=' ')
test_data=pd.read_csv(test_path,sep=' ')
# 查看数据
train_data.head()
# 查看数据形状
train_data.shape
# 查看数据的列
train_data.columns
2. 删除异常值
# 这里包装了一个异常值处理的代码,可以随便调用。
def outliers_proc(data, col_name, scale=3):"""用于清洗异常值,默认用 box_plot(scale=3)进行清洗:param data: 接收 pandas 数据格式:param col_name: pandas 列名:param scale: 尺度:return:"""def box_plot_outliers(data_ser, box_scale):"""利用箱线图去除异常值:param data_ser: 接收 pandas.Series 数据格式:param box_scale: 箱线图尺度,:return:"""# 计算四分位距,并通过box_scale进行缩放iqr = box_scale * (data_ser.quantile(0.75) - data_ser.quantile(0.25))# 计算下边缘值,即下四分位数减去四分位距val_low = data_ser.quantile(0.25) - iqr# 计算上边缘值,即上四分位数加上四分位距val_up = data_ser.quantile(0.75) + iqr# 创建一个布尔序列,指示哪些数据点低于下边缘值rule_low = (data_ser < val_low)# 创建一个布尔序列,指示哪些数据点高于上边缘值rule_up = (data_ser > val_up)return (rule_low, rule_up), (val_low, val_up)data_n = data.copy()data_series = data_n[col_name]rule, value = box_plot_outliers(data_series, box_scale=scale)# 使用布尔数组来选择索引,返回满足条件的索引值数组,即找到异常值所在对的索引位置index = np.arange(data_series.shape[0])[rule[0] | rule[1]]print("Delete number is: {}".format(len(index)))data_n = data_n.drop(index)# reset_index重新设置 DataFrame 的索引# 参数 drop=True 表示重置索引后丢弃原来的索引列# inplace 参数用于指定是否在原始 DataFrame 上进行修改data_n.reset_index(drop=True, inplace=True)print("Now column number is: {}".format(data_n.shape[0]))# 查看低于下界的数据index_low = np.arange(data_series.shape[0])[rule[0]]outliers = data_series.iloc[index_low]print("Description of data less than the lower bound is:")print(pd.Series(outliers).describe())# 查看高于上界的数据index_up = np.arange(data_series.shape[0])[rule[1]]outliers = data_series.iloc[index_up]print("Description of data larger than the upper bound is:")print(pd.Series(outliers).describe())# 创建一个包含两个子图的画布。参数 1, 2 表示创建一个1行2列的子图网格,figsize=(10, 7) 表示画布的大小为宽10英寸,高7英寸# fig 是整个画布对象,ax 是一个包含两个子图对象的数组fig, ax = plt.subplots(1, 2, figsize=(10, 7))# 画出去除异常值前后的子图sns.boxplot(y=data[col_name], data=data, palette="Set1", ax=ax[0])sns.boxplot(y=data_n[col_name], data=data_n, palette="Set1", ax=ax[1])return data_n
结果展示:
3. 特征构造
3.1 为树模型构造特征
- 训练集和测试集放在一起,方便构造特征
train_data['train']=1
test_data['train']=0
data = pd.concat([train_data, test_data], ignore_index=True)
- 加入使用时间:data[‘creatDate’] - data[‘regDate’],反应汽车使用时间,一般来说价格与使用时间成反比
# 注意,数据里有时间出错的格式,所以我们需要 errors='coerce',表示如果出现无法转换的情况,将会将其转换为 NaT(Not a Time)值,而不是抛出错误
data['used_time'] = (pd.to_datetime(data['creatDate'], format='%Y%m%d', errors='coerce') - pd.to_datetime(data['regDate'], format='%Y%m%d', errors='coerce')).dt.days
- 查看空数据
# 看一下空数据,发现有 15k 个样本的时间是有问题的,可以选择删除,也可以选择放着。
# 但是这里不建议删除,因为删除缺失数据占总样本量过大,7.5%
# 如果使用 XGBoost 之类的决策树,其本身就能处理缺失值,所以可以不用管;
data['used_time'].isnull().sum()
- 加入从邮编中提取城市信息,相当于加入了先验知识
data['city'] = data['regionCode'].apply(lambda x : str(x)[:-3])
data = data
- 加入某品牌的销售统计量
# 对数据按brand分组,结果是每个分组结果组成的结果
train_gb = train_data.groupby("brand")
all_info = {}
# 对分组进行循环
for kind, kind_data in train_gb:info = {}kind_data = kind_data[kind_data['price'] > 0]# 计算每个品牌汽车的数量、最高价、中位数、最低价、价格总和、价格方差、价格平均值info['brand_amount'] = len(kind_data)info['brand_price_max'] = kind_data.price.max()info['brand_price_median'] = kind_data.price.median()info['brand_price_min'] = kind_data.price.min()info['brand_price_sum'] = kind_data.price.sum()info['brand_price_std'] = kind_data.price.std()info['brand_price_average'] = round(kind_data.price.sum() / (len(kind_data) + 1), 2)all_info[kind] = info
# 因为字典的键对应的是dataframe的列,所以我们要进行转置
brand_fe = pd.DataFrame(all_info).T.reset_index().rename(columns={"index": "brand"})
# 将结果合并到我们的原数据中,这里采用的是左连接,连接条件是brand
# 左连接就是说,data表显示所有,brand_fe表只显示brand值相匹配的行
data = data.merge(brand_fe, how='left', on='brand')
同理,我们还可以加入不同车型、不同燃油类型、不同变速箱、不同地区的销售统计量,这里不再一一列举
- 对power数据进行分桶
为什么要做数据分桶呢?
- 离散后稀疏向量内积乘法运算速度更快,计算结果也方便存储,容易扩展;
- 离散后的特征对异常值更具鲁棒性,如 age>30 为 1 否则为 0,对于年龄为 200 的也不会对模型造成很大的干扰;
- LR 属于广义线性模型,表达能力有限,经过离散化后,每个变量有单独的权重,这相当于引入了非线性,能够提升模型的表达能力,加大拟合;
- 离散后特征可以进行特征交叉,提升表达能力,由 M+N 个变量编程 M*N 个变量,进一步引入非线形,提升了表达能力;
- 特征离散后模型更稳定,如用户年龄区间,不会因为用户年龄长了一岁就变化
- 当然还有很多原因,LightGBM 在改进 XGBoost 时就增加了数据分桶,增强了模型的泛化性
# 创建了一个包含31个元素的列表,每个元素是按照10的倍数递增的数字。这个列表将用作分桶的边界
bin = [i*10 for i in range(31)]
# 第一个参数是要分箱的数据,
# 第二个参数是分箱的边界,
# 第三个参数labels=False表示我们希望返回的结果是分箱后每个样本所在的箱的索引而不是标签。
# 这一行代码的结果将是一个新的Series,其中每个元素表示对应样本所在的箱的索引。
data['power_bin'] = pd.cut(data['power'], bin, labels=False)
- 导出数据
# 删除不需要的数据
data = data.drop(['creatDate', 'regDate', 'regionCode'], axis=1)
# 目前的数据已经可以给树模型使用了,所以先导出一下
data.to_csv('data_for_tree.csv', index=0)
3.2 为LR NN 之类的模型构造特征
注:不同模型对数据集的要求不同所以分开构造
- 对数值特征做归一化
这里先以power列为例
查看power的分布:
data['power'].plot.hist()
可以发现,直方图只有0-2500这一列,且该列的值很大,猜测数据可能分布不均匀,这里我们可以先log(数据平滑处理)一下再归一化:
data['power'] = np.log(data['power'] + 1)
data['power'] = ((data['power'] - np.min(data['power'])) / (np.max(data['power']) - np.min(data['power'])))
data['power'].plot.hist()
其他列这里不再一一列举
这里可以定义一个归一化函数,将其他列传入即可
def max_min(x):return (x - np.min(x)) / (np.max(x) - np.min(x))
- 对类别特征进行 OneEncoder
# get_dummies是pandas库中用于进行独热编码(One-Hot Encoding)的函数
data = pd.get_dummies(data, columns=['model', 'brand', 'bodyType', 'fuelType','gearbox', 'notRepairedDamage', 'power_bin'])
# 参数
# data: 这是一个DataFrame或者类似于DataFrame的数据结构,包含需要进行独热编码的数据。
# columns: 这是一个列表,包含需要进行独热编码的列名。函数将对这些列进行独热编码处理
查看一下形状,发现多了很多列,这里需要理解一下get_dummies是怎么进行one-hot编码的,比如brand有A,B两个类型,那么data里面就会把brand转化为A,B两个列,该行数据属于A类型,那么A类型这一列就为1否则为0
print(data.shape)
print(data.columns)
- 保存特征
data.to_csv('data_for_lr.csv', index=0)
# index=0表示不在文件中写入行索引
4. 特征筛选
过滤式
- 可单独计算某列特征和标签之间的相关性
# 相关性分析
print(data['power'].corr(data['price'], method='spearman'))
print(data['kilometer'].corr(data['price'], method='spearman'))
print(data['brand_amount'].corr(data['price'], method='spearman'))
print(data['brand_price_average'].corr(data['price'], method='spearman'))
print(data['brand_price_max'].corr(data['price'], method='spearman'))
print(data['brand_price_median'].corr(data['price'], method='spearman'))
- 也可以通过画相关性热力图来看各个特征之间的相关性
data_numeric = data[['power', 'kilometer', 'brand_amount', 'brand_price_average', 'brand_price_max', 'brand_price_median']]
# corr() 方法会计算特征之间的皮尔逊相关系数,生成一个相关性矩阵
correlation = data_numeric.corr()f , ax = plt.subplots(figsize = (7, 7))
# 这行代码给图形添加了标题,标题内容为 'Correlation of Numeric Features with Price',
# y=1 参数将标题的位# 置设置在图形顶部,size=16 参数指定了标题的字体大小为16号
plt.title('Correlation of Numeric Features with Price',y=1,size=16)
#使用Seaborn库中的 heatmap 函数绘制了热力图。热力图展示了相关性矩阵 correlation 中各特征之间的相关性。
# square=True 参数确保热力图是正方形的,vmax=0.8 参数设置了颜色映射的最大值,这有助于突出显示高相关性
sns.heatmap(correlation,square = True, vmax=0.8)
可以看出上述对角线颜色是最浅的,因为对角线是特征自己跟自己的相关性,power跟brand_price_average, brand_price_max, brand_price_median之间的相关性比跟kilometer, brand_amount之间的相关性更强
包裹式
小编这里这一部分没有跑通,暂时没有排查出是哪里出问题了???
from mlxtend.feature_selection import SequentialFeatureSelector as SFS
from sklearn.linear_model import LinearRegression
sfs = SFS(LinearRegression(),k_features=10,forward=True,floating=False,scoring = 'r2',cv = 0)
x = data.drop(['price'], axis=1)
x = x.fillna(0)
y = data['price']
sfs.fit(x, y)
sfs.k_feature_names_
# 画出来,可以看到边际效益
from mlxtend.plotting import plot_sequential_feature_selection as plot_sfs
import matplotlib.pyplot as plt
fig1 = plot_sfs(sfs.get_metric_dict(), kind='std_dev')
plt.grid()
plt.show()
嵌入式
待补充——
5. 总结
- 特征工程的主要目的还是在于将数据转换为能更好地表示潜在问题的特征,从而提高机器学习的性能。比如,异常值处理是为了去除噪声,填补缺失值可以加入先验知识等
- 特征构造也属于特征工程的一部分,其目的是为了增强数据的表达
- 有些比赛的特征是匿名特征,这导致我们并不清楚特征相互直接的关联性,这时我们就只有单纯基于特征进行处理,比如装箱,groupby,agg 等这样一些操作进行一些特征统计,此外还可以对特征进行进一步的 log,exp 等变换,或者对多个特征进行四则运算(如上面我们算出的使用时长),多项式组合等然后进行筛选。
- 对于知道特征含义(非匿名)的特征工程,特别是在工业类型比赛中,会基于信号处理,频域提取,丰度,偏度等构建更为有实际意义的特征,这就是结合背景的特征构建,在推荐系统中也是这样的,各种类型点击率统计,各时段统计,加用户属性的统计等等,这样一种特征构建往往要深入分析背后的业务逻辑或者说物理原理,从而才能更好的找到 magic。
相关文章:
数据挖掘入门项目二手交易车价格预测之特征工程
文章目录 目标常见的特征工程具体步骤1. 导入数据2. 删除异常值3. 特征构造3.1 为树模型构造特征3.2 为LR NN 之类的模型构造特征 4. 特征筛选过滤式包裹式嵌入式 5. 总结 本文数据集来自阿里天池:https://tianchi.aliyun.com/competition/entrance/231784/informat…...
MFC通用静态库制作与使用
开发环境VS2013 1、新建工程,选择Win32 Project,命名,选择路径等 2、选择Static library ,勾选MFC 3、点击完成。在工程中添加相应的头文件、源文件等通用功能函数或者类。 4、在其他工程引入使用。在使用的工程项目设置中Linker…...
点亮创意:ChatGPT如何搭桥DALL-E图像编辑新纪元
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
《QT实用小工具·十二》邮件批量发送工具
1、概述 源码放在文章末尾 该项目实现了邮件的批量发送,如下图所示: 项目部分代码如下所示: #ifndef SMTPCLIENT_H #define SMTPCLIENT_H#include <QtGui> #include <QtNetwork> #if (QT_VERSION > QT_VERSION_CHECK(5,0,…...
4.2总结
了解了部分Api的使用并学习了接口的API API API包含了较多种类(System,Runtime等) System其实就是一个工具类,提供了一些与系统相关的方法 下面有一些常间的System方法 方法名说明public static void exit (int status)终止当前运行的ja…...
ArcGIS 10.8中文版详细安装教程(附安装包)
ArcGIS 10.8中文版详细安装教程(附安装包) 关键词:ArcGIS 10.8中文版安装 1.概述 ArcGIS Desktop 10.8中文版是由ESRI公司开发的一款专业的地理信息系统,一套完整的桌面GIS软件套件,它包含ArcMap、ArcCatalog、ArcG…...
什么是EL表达式?怎么使用?
文章目录 一、什么是EL表达式1、命令格式:${作用域对象别名.共享数据} 二、EL表达式与作用域对象别名1、JSP文件可以使用的作用域对象2、EL表达式提供作用域对象别名3、EL表达式将引用对象属性写入到响应体4、EL表达式简化版 三、EL表达式与运算表达式四、EL表达式提…...
基于php医院预约挂号系统
摘 要 随着信息时代的来临,过去的管理方式缺点逐渐暴露,对过去的医院预约挂号管理方式的缺点进行分析,采取计算机方式构建医院预约挂号系统。本文通过阅读相关文献,研究国内外相关技术,开发并设计一款医院预约挂号系统…...
Java NIO详解
一、概念 NIO, 即new io,也叫非阻塞io 二、NIO三个核心组件: Buffer数据缓冲区Channel通道Selector选择器 1、Buffer缓冲区 缓冲区本质上是一个可以存放数据的内存块(类似数组),可以在这里进行数据写入和读取。此…...
InstantID作者的风格保持新项目InstantStyle发布,一个强化版的IPapadter来了!
之前已经和大家介绍过InstantID相关相关的文章,感兴趣的小伙伴可以点击下面链接进行阅读~ 无缝衔接Stable Diffusion,一张照片几秒钟就能生成个性化图片-InstantID_instant-id 模型-CSDN博客 今天向大家介绍Ins…...
【Java程序员面试专栏 综合面试指南】5年资深程序员面试指南
基础知识对于5年内工作经验的同学考察相对比较多。包括编程语言、计算机网络、操作系统、设计模式、分布式知识、MySQL、Redis这种。其中随着年限的增长,基础知识考察的会越来越少,例如操作系统基本上只在学生阶段考察,计算机网络对于5年经验来说也考察的相对较少。5年以上对…...
echart 仪表盘实现指针的渐变色及添加图片
需求: 在仪表盘中设置指针为渐变色,并在仪表盘中间添加图片。 实现重点: 1、仪表盘指针渐变色的实现 渐变色通过设置pointer的itemStyle属性内的color实现,重点是echart版本,这个原本使用4.8.0的版本不起作用ÿ…...
C#面试题目含参考答案(一)
前言 面试是应聘一个工作岗位的环节,来考察一个人的工作能力与综合素质。在应聘C#程序员或与C#相关岗位时,我们都会被问到一些与.NET、C#、数据库、业务知识或编程思想等问题。本文列举一些问题及提供参考答案,题目(一)。 题目 1、什么是面向对象的三大特性 参考答案:…...
【Canvas技法】图解绘制圆弧的重要函数 arc(x,y,r,startAngle,endAngle,clockWise)
【一图释疑】 【绘制上图用代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>Html5/Canvas中绘制圆弧的重要函数 arc(x,y,r,startA…...
vulhub中Apache Solr 远程命令执行漏洞复现(CVE-2019-0193)
Apache Solr 是一个开源的搜索服务器。Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现。此次漏洞出现在Apache Solr的DataImportHandler,该模块是一个可选但常用的模块,用于从数据库和其他源中提取数据。它具有一个功能&#…...
水泥5G智能制造工厂数字孪生可视化平台,推进水泥行业数字化转型
水泥5G智能制造工厂数字孪生可视化平台,推进水泥行业数字化转型。水泥5G智能制造工厂数字孪生可视化平台,是水泥行业数字化转型的关键推手。数字孪生平台运用先进的信息技术和数字化手段,实现水泥生产过程的数字化模拟、可视化监控和智能化管…...
vue 一个简单实例化Vue.js 是一个流行的前端框架,如何创建一个基本的计数器应用
当然可以!Vue.js 是一个流行的前端框架,用于构建用户界面。下面是一个简单的 Vue.js 例子,演示了如何创建一个基本的计数器应用。 首先,确保你已经在项目中引入了 Vue.js。你可以通过 CDN 引入 Vue.js,或者在项目中安…...
1.k8s架构
k8s集群架构 一个Kubernetes集群至少包含一个控制平面(control plane),以及一个或多个工作节点(worker node)。控制平面(Control Plane) : 控制平面负责管理工作节点和维护集群状态。所有任务分配都来自于控制平面。工作节点(Worker Node) : 工作节点负责执行由控制…...
【Linux】详解动态库链接和加载对可执行程序底层的理解
一、动静态库链接的几种情况 如果我们同时提供动态库和静态库,gcc默认使用的是动态库。如果我们非要使用静态库,要加-static选项。如果我们只提供静态库,那可执行程序没办法,只能对该库进行静态链接,但程序不一定整体…...
中文Mistral模型介绍(Chinese-Mistral)——中文大语言模型
中文Mistral简介 Chinese-Mistral由清华大学地学系地球空间信息科学实验室开发。 该模型基于Mistral发布的Mistral-7B-v0.1训练得到。首先进行中文词表扩充,然后采用实验室提出的PREPARED训练框架(under review)在中英双语语料上进行增量预训…...
yolo v5 中 letterbox对不规则矩形框的输入调整
在对数据或特征的处理中,为了避免输入图像或特征,经过resize等等操作,改变了目标特征的尺度信息,一般会引入一些操作,比如: 在特征维度,加入SPP(空间金字塔池化)&#x…...
STL是什么?如何理解STL?
文章目录 1. 什么是STL2. STL的版本3. STL的六大组件4. 如何学习STL5.STL的缺陷 1. 什么是STL STL(standard template libaray-标准模板库):是C标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。 2. …...
【Spring篇】Spring IoC DI
个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【Spring系列】 本专栏旨在分享学习Spring MVC的一点学习心得,欢迎大家在评论区交流讨论💌 目录 前言一、IoC二、…...
Python语言例题集(010)
#!/usr/bin/python3 #在链表的末端插入新的节点。 class Node(): def init(self,dataNone): self.datadata self.nextNone class LinkedList(): def init(self): self.headNone def printList(self):ptrself.headwhile ptr:print(ptr.data)ptrptr.nextdef ending(self,newd…...
redis---主从复制
主从复制是指将一台redis服务器的数据复制到其他redis服务器,也叫主节点和从节点。 一个主节点可以有多个从节点。而每个从节点只能有一个主节点。数据的复制是单向的,只能由主节点到从节点。一般来说,主节点负责写操作,从节点负…...
搜索引擎-03-搜索引擎原理
拓展阅读 搜索引擎-01-概览 搜索引擎-02-分词与全文索引 搜索引擎-03-搜索引擎原理 Crawl htmlunit 模拟浏览器动态 js 爬虫入门使用简介 Crawl jsoup 爬虫使用 jsoup 无法抓取动态 js 生成的内容 Crawl WebMagic 爬虫入门使用简介 webmagic 全网搜索引擎架构与流程如何…...
mysql语句学习
SQL Select语句完整的执行顺序: 1、from子句组装来自不同数据源的数据; (先join在on) 2、where子句基于指定的条件对记录行进行筛选; 3、group by子句将数据划分为多个分组; 4、使用聚集函数进行计算&a…...
【Apache Doris】周FAQ集锦:第 1 期
【Apache Doris】周FAQ集锦:第 1 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目! 在这个栏目中,每周将筛选社区反馈的热门问题和话题,重点回答并进行深入探讨。旨在为广大用户和…...
Windows创建远程线程学习
CreateRemoteThread是一个Windows API函数,它能够创建一个在其它进程地址空间中运行的线程; 下面来简单做一下,配合procexp工具; VC代码如下,我是写到一个菜单单击处理函数中, void CCrrmthView::OnMenuitem32771() {// TODO: Add your command handler code hereHAN…...
使用c语言libexpat开源库解析XML数据
1 libexpat简介 Expat 是一个用 C 语言编写的开源 XML 解析库,以其高性能和小巧的体积著称。Expat 兼容多种操作系统平台,包括但不限于 Windows、Linux、macOS 等。由于其跨平台特性和简单易用的API,Expat 成为了许多C/C程序员解析XML文档的…...
官网+wordpress/如何注册百度账号
0 环境系统:win10编辑器: vscode1 相关安装vscode下载MinGW下载若想要MinGW最新版本,往下拉,找到最新版的 "x86_64-posix-seh",点击下载就行,不需要的话,直接下载我上面提供的即可vscode c插件下…...
铜川做网站的公司电话/最新的销售平台
本文主要介绍了毕业设计选题系统的研究背景和意义,同时分析了该系统的可行性问题。另外还有相关技术介绍,以及系统的结构与功能模块、数据库的设计、界面设计等。随着网络技术和办公自动化的高速发展,信息技术已经深入到了社会的每一个角落&a…...
移动版wordpress主题/怎么在百度上发表文章
当手机中的应用越来越多、绑定的服务也越来越多时,谁会想到一条短信引发的连锁反应,能让一个人在一夜间倾家荡产?近日,北京许先生的遭遇《中国移动,请你告诉我,为什么一条短信就能骗走我所有的财产…...
vps设置网站访问用户权限/网络广告投放网站
为什么80%的码农都做不了架构师?>>> 首先登录oracle,进入jdk8下载页面: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 找到需要下载得版本,并获取下载链接地址:…...
建网站公司是如何赚钱/设计个人网站
针对这个问题我们可以转化一下思路:一个JVM进程,在什么情况下会正常退出? 大部分人应该都知道使用System.exit()或Runtime.exit()可以直接导致当前JVM进程退出,但是仔细想想这个好像跟SpringBoot没啥关系哈 另外一个可能会导致进…...
如何提高网站用户体验/手机百度网页版登录入口
Java SE、Java EE、Java ME三者的区别现在一个个来分析1. Java SE(Java Platform,Standard Edition)。Java SE 以前称为 J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。Java SE 包含了支持 Java Web 服务开发的类,…...