文章目录

  • 1.Sklearn数据集API
  • 2.Bunch对象的信息获取
  • 3.对数据集进行划分
  • 4.特征提取(字典、文本)
  • 5.数据归一化
  • 6.数据标准化
  • 7.特征降维
  • 8.模型预测效果的评价
  • 9.K近邻算法(KNN)
  • 10.通过网格搜索调参并使用交差验证检验
  • 11.朴素贝叶斯分类器
  • 12.决策树
  • 13.随机森林
  • 14.正规方程优化线性回归
  • 15.梯度下降优化线性回归
  • 16.逻辑回归
  • 17.混淆矩阵和分类评估报告
  • 18.ROC曲线和AUC指标
  • 19.K均值聚类算法
  • 20.轮廓系数
  • 21.模型的保存和加载

1.Sklearn数据集API

Sklearn中的自带数据集都在datasets子命名空间中

# 1.使用load_*函数加载Sklearn自带的小规模数据集(其中的*表示数据集名字)
# 语法:sklearn.datasets.load_*()
B1=sklearn.datasets.load_iris()   # 鸢尾花数据集
B2=sklearn.datasets.load_boston() # 波士顿房价数据集# 2.使用fetch_*函数加载Sklearn自带的大规模数据集(其中的*表示数据集名字)
# 语法:sklearn.datasets.fetch_*(data_home=数据集路径)# 注意事项:无论是使用load还是fetch,都返回一个继承自字典类型的Bunch类型对象
# 注意事项:大规模数据集没有存放在标准包中,需要单独从网上下载,data_home参数可以省略,表示数据集在Sklearn默认目录中。

2.Bunch对象的信息获取

可以通过Bunch对象中一些键来获取对应的信息。

import sklearn
iris=sklearn.datasets.load_iris() # 此处以鸢尾花数据集为例# 1.使用 data 键获取特征数据数组
print(iris['data'])
# 2.使用 target 键获取标签数据数组
print(iris['target'])
# 3.使用 DESCR 键获取数据描述
print(iris['DESCR'])
# 4.使用 feature_names 键获取特征名
print(iris['feature_names'])
# 5.使用 target_names 键获取标签名
print(iris['target_names'])

3.对数据集进行划分

对数据集进行划分的函数在model_selection子命名空间中。

'''
# 使用train_test_split函数对数据集进行训练集与测试集划分
# 语法:sklearn.model_selection.train_test_split(数据集中的特征数据,数据集中的标签数据)
# 可选参数:test_size表示测试集占数据集的比例(默认为0.25),random_state表示进行划分的随机数种子(用于获取相同的划分结果)
# 返回值:返回一个元组(训练集数据,测试集数据,训练集标签,测试集标签)
'''
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
iris=load_iris()
x_train,x_test,y_train,y_test=train_test_split(iris.data,iris.target,test_size=0.2,random_state=1)

4.特征提取(字典、文本)

特征提取是指将任意数据转化为可以用于机器学习的数字特征的方法。

# 1.使用DicVectorizer对象的fit_transform方法对字典进行特征提取
# 语法:首先以无参数方式创建一个DicVectorizer对象,然后调用该对象的fit_transform方法即可(以需要进行特征提取的字典对象作为参数)
# 注意事项:如果在创建DicVectorizer对象时将sparse属性设置为True,则返回的结果是一个稀疏矩阵;如果设置为False,则是一个常规矩阵。
# 稀疏矩阵的表示:稀疏矩阵就是把矩阵中的非零元素的位置用元组表示出来。使用稀疏矩阵可以提高矩阵的加载效率。
from sklearn.feature_extraction import DictVectorizer
data=[{"city:北京","temperature:100"},{"city:上海","temperature:100"},{"city:深圳","temperature:30"}
transfer=DictVectorizer()
transfer_result=transfer.fit_transform(data)
# 之后可以使用DictVector对象的get_feature_names方法获取特征的名称
names=transfer.get_feature_names()# 2.使用CountVectorizer对象的fit_transform方法对文本进行特征提取
# 语法:首先创建一个CountVectorizer对象,然后以需要进行特征提取的文本字符串为参数调用该对象的fit_transform方法即可,同样返回一个稀疏矩阵,表示每一个单词出现的次数
# 结果分析:以字符串中所包含的每一个单词作为一个特征
# 注意事项:该方法只能得到稀疏矩阵,而不能得到常规矩阵;但是可以使用结果变量的toarray()方法获得常规矩阵
# 得到的结果也可以通过get_feature_names方法获取特征名字
# 该方式只能对英文这种单词之间用逗号隔开的语言使用,中文不能使用。如果需要对中文进行分词则需要借用jieba等类似的中文分词模块
# 另外,可以设置停用词,也就是指定不作为特征的词语
from sklearn.feature_extraction.text import CountVectorizer
data=["life is short,i like python","life is long,i dislike python"]
transfer=CountVectorizer()
data_new=transfer.fit_transform(data)# 3.使用TfidfVectorizer对象的fit_transform方法对文本进行特征提取
# 原理:如果某些词语在一篇文章中出现概率高,而在另一些文章中出现概率低,则认为这些词语具有很好的区分能力,适合作为分类标准。因此推荐使用这种方法而不是CountVectorizer
# 语法:和CountVectorizer的语法类似,只需修改一下转换器即可
from sklearn.feature_extraction.text import TfidfVectorizer
data=["life is short,i like python","life is long,i dislike python"]
transfer=TfidfVectorizer()
data_new=transfer.fit_transform(data)

5.数据归一化

# 使用MinMaxScaler对象的fit_transfrom方法对原始数据进行归一化
# 语法:首先创建一个MinMaxScaler对象,然后调用该对象的MinMaxScaler方法即可
# 可以在方法参数中加上feature_range参数,该参数是一个表示归一化后的上下限范围的元组
# 该方法返回一个二维的ndarray数组,其中每行表示一个样本,每列表示一个特征
# 方法的输入参数data应该是一个numpy数组:每行表示一个样本,每一列表示一个属性
from sklearn.preprocessing import MinMaxScaler
transfer=MinMaxScaler()
data_new=transfer.fit_transform(data)

6.数据标准化

# 使用StandardScaler对象的fit_transform方法对原始数据进行标准化
# 语法:首先创建一个Standard对象,然后调用该对象的fit_transform方法即可
# 方法的输入参数data应该是一个numpy数组:每行表示一个样本,每一列表示一个属性
# 与归一化的比较:归一化容易受到异常点的影响,标准化不容易受到影响
from sklearn.preprocessing import StandardScaler
transfer=StandardScaler()
data_new=transfer.StandardScaler.fit_transform(data)

7.特征降维

# 1.使用VarianceThreshold对象的fit_transform方法进行特征的低方差过滤
# 语法:首先创建一个VarianceThreshold对象,然后调用该对象的fit_transform方法即可。
# 注意事项:创建对象时可以使用threshold作为参数,该参数表示方差的阈值,默认为0
from sklearn.feature_selection import VarianceThreshold
transfer=VarianceThreshold()
data_new=VarianceThreshold.fit_transform(data)# 2.使用pearsonr函数计算指标之间的相关系数
# 语法:pearsons(数据列1,数据列2)
from scipy.stats import pearsonr
r=pearsonr(row1,row2)# 3.使用PCA对象的fit_transform方法进行主成分分析
# 构造PCA对象时可以指定n_components参数,传递一个整数或一个小数。如果参数为小数则表示保留的数据特征比例;参数是整数表示需要保留的特征个数
# 语法:构造一个PCA对象后,以需要进行主成分分析的数据作为参数,调用PCA对象的fit_transform方法即可
# 函数的返回值是经过降维后的二维数组
from sklearn.decomposition import PCA
transfer=PCA()
data_new=transfer.fit_transform(data)

8.模型预测效果的评价

# 具体步骤:
# 1.使用模型转换器的fit方法生成训练好的模型
# 2.使用模型估计器的score方法计算预测准确率
estimator.fit(x_train,y_train)
rate=estimator.score(x_test,y_test)

9.K近邻算法(KNN)

'''
# 使用KNeighborsClassfier分类器运行K近邻算法
# 构造参数1:n_neighbors表示每个点的邻居数(可选参数)
# 构造参数2:algorithm表示计算当前点最近邻居的算法(默认为auto)
# algorithm可选参数:ball_tree(球树)、kd_tree(KD树)、brute(蛮力搜索)
# 构造参数3:n_jobs表示并行计算的进程数量,越大运算速度越快,赋值为-1表示用CPU所有内核进行计算。
# 构造参数4:p表示闵可夫斯基聚类的维数。p=1表示曼哈顿距离,p=2表示欧氏距离,以此类推。
# 构造参数5:weights表示投票权重确定方法。可选的方法有uniform(等权重投票)、distance(距离反比权重投票)
# 备注:K值过小容易受到异常点的影响,过大容易受到样本不均衡的影响。
# KNN算法在使用之前最好对数据进行标准化处理。
'''
from sklearn.neighbors import KNeighborsClassfier
estimator=KNeighborsClassfier(n_neighbors=3,n_jobs=-1,p=2)
estimator.fit(x_train,y_train)
score=estimator.score(x_test,y_test)
print(score)

10.通过网格搜索调参并使用交差验证检验

# 使用GridSearchCV对象进行网格搜索调参并进行交叉验证
# 参数介绍:
# estimator:估计器对象
# param_grid:估计器参数。以字典的形式进行表示(暴力逐一尝试)
# cv:指定交叉验证的折数
# 后续的使用方法和一般的估计器相似:使用fit方法训练数据得到模型,使用score方法求预测准确率
# 常用属性介绍:best_params_表示最佳参数结果,best_score_表示最佳成功率
# best_estimator_表示最佳估计器,cv_results_表示交叉验证结果
from sklearn.model_selection import GridSearchCV
estimator=NeighborsClassfier()
param_dict={"n_neighbors":[1,3,5,7,9]}
estimator=GridSearchCV(estimator,param_grid=param_dict,cv=10)
estimator.fit(x_train,y_train)
print(estimator.best_params,estimator.best_score,estimator.best_estimator,estimator.cv_results)

11.朴素贝叶斯分类器

# 使用MultinomialNB分类器进行多项式朴素贝叶斯分类
# 构造参数:alpha表示拉普拉斯平滑系数,默认为1.0,一般不修改
from sklearn.naive_bayes import MultinomialNB
estimator=MultinomialNB(alpha=1.0)
MultinomialNB.fit(x_train,y_train)
# 另外,还有另外两种朴素贝叶斯分类器,分别是GaussianNB和BernoulliNB,使用方法与MultinomialNB类似

12.决策树

# 1.使用DecisionTreeClaaifier分类器即可进行决策树分类
# API所在命名空间:sklearn.tree
# 构造时的参数random_state用于指定初始随机数种子,max_depty用于指定最大深度
# 可以增加特征选择标准参数criterion:"gini"表示基尼指数(默认),"entropy"表示信息熵
# 参数max_features用于指定最大特征数,可选的值有:auto(自动)、sqrt(平方根)、log2(2对数)和None(所有特征都用)
# 参数splitter表示特征点的划分标准,可选的值有:best(最佳划分)、random(随机划分)
# random_state用于指定随机数种子
from sklearn.tree import DecisionTreeClassifier
dstree_estimator=DecisionTreeClassfier(random_state=1,criterion="entropy")
dstree_estimator.fit(x_train,y_train)
print(dstree_estimator.score(x_test,y_test))# 2.使用export_graphviz方法保存决策树结果
# 语法:export_graphviz(决策树估计器,out_files=导出文件路径名)
# 注意事项:文件名的后缀要用dot
# 导出的文件内容可以到下面的网站进行决策树可视化:webgraphviz.com
expot_graphviz(detree_estimator,out_files="决策树.dot")# 3.使用plot_tree方法对决策树结果可视化
# 语法:plot_tree(决策树估计器,feature_names=特征名列表)
plot_tree(dstree_estimator)

13.随机森林

集成学习方法:通过建立若干个模型的组合来解决单一预测问题。其工作原理是生成多个模型,各自独立地学习并作出预测,这些预测结果最后结合成组合预测结果,因此优于任何一个单分类所作出的预测。

随机森林概述:包含多个决策树的分类器。组合预测结果的大小是多个决策树预测结果的大多数。

随机森林的随机性:分为特征随机和训练集随机。这是为了生成不同的决策树。

随机生成训练集:对原始训练集使用BootStrap方法(随机有放回抽样)。

随机生成特征:从所有特征中随机抽取指定个特征。

随机森林的优缺点:一般情况下的准确率较高,比较适用于高维的大数据集,能够评估每个分类特征在当前分类问题上的重要性。随机森林的缺点在于计算复杂度比较高。

'''
使用RandomForestClassifier分类器进行随机森林分类
命名空间:sklearn.ensemble
构造参数:
1.n_estimators:表示森林中树的个数。
2.criterion:表示特征选择的标准,默认为"gini“(基尼指数),也可选"entropy"(信息熵)。
3.max_depth:表示森林中每棵树的最大深度。
4.max_features:每个决策树的最大特征数量,非必选参数。可选的值有:”sqrt“(总特征数的平方根)、"log2”(总特征数的2对数)、None(总特征数)。
5.bootstrap:表示是否采用随机有放回抽样方法。默认为True。
6.random_state:表示初始随机数种子。
7.min_samples_split:表示节点划分的最小样本数。
8.min_samples_leaf:表示叶子节点的最小样本数。
使用例子:
'''
from sklearn.ensemble import RandomForestClassifier
rf_estimator=RandomForestClassifier(n_estimators=5,random_state=1,criterion="entropy")
rf_estimator.fit(x_train,y_train)
print(rf_estimator.score(x_test,y_test))

14.正规方程优化线性回归

# 使用LinearRegression对象进行正规方程优化的线性回归
# LinearRegression对象的常用属性:coef_(权重系数) intercept_(偏置系数)
from sklearn.linear_model import LinearRegression
linear_estimator=LinearRegression()
LinearRegression.fit(x_train,y_train)
print("权重系数为:",LinearRegression.coef_)
print("偏置为:",LinearRegression.intercept_)

15.梯度下降优化线性回归

# 使用SGDRegressor对象进行梯度下降优化的线性回归,使用方法和LinearRegression对象类似
from sklearn.linear_model import SGDRegressor
linear_estimator=SGDRegressor()
LinearRegression.fit(x_train,y_train)
print("权重系数为:",LinearRegression.coef_)
print("偏置为:",LinearRegression.intercept_)
# 对于回归器,可以通过square_error方法输出其均方误差和
print("均方误差为:",LinearRegression.square_error(x_test,y_test))

16.逻辑回归

逻辑回归看上去是一个回归模型,但是实际上是一个分类模型。逻辑回归尤其适用于二分类问题。

# 使用LogisticRegression分类器进行逻辑回归
# 所在命名空间:sklearn.linear_model
# 参数solver:用于优化求解的算法,可选的有liblinear(适用于小数据集)、sag、saga、newton-cg、lbfgs
# 参数penalty:正则化的种类。可选l1或l2。
# 正则化强度C:一个正的浮点数,越小正则化力度越强。
from sklearn.linear_model import LogisticRegression
logit_estimator=LogisticRegression()
logit_estimator.fit(x_train,x_test)
print(logit_estimator.score(x_test,y_test))

17.混淆矩阵和分类评估报告

  • 混淆矩阵:混淆矩阵是用于直观评价分类结果好坏的一个矩阵。其每一行表示一种真实结果,每一列表示一种预测结果;矩阵中的元素表示在真实结果和预测结果分别为某一种情况的样本个数。一个二维的混淆矩阵如下图所示(当分类结果不只有两种时会产生更高维度的混淆矩阵):

    另外,混淆矩阵也是另外三种评价指标:精确率、召回率和F1分数的基础。
    Sklearn中混淆矩阵的API如下所示:
'''
# API所在命名空间:sklearn.metrics
# 使用语法:confusion_matrix(y_true,y_predict,labels=分类标签列表)
# 参数解释:y_true和y_predict分别是表示样本真实分类结果和样本预测分类结果的列表或ndarray数组;labels表示混淆矩阵的行标签(和列标签是一样的)
# 返回值:返回一个用ndarray数组表示的混淆矩阵
# 测试用例:
'''
from sklearn.metrics import confusion_matrix
y_true=[0,0,0,1,1,1]
y_predict=[0,0,1,1,1,1]
test_matrix=confusion_matrix(y_true,y_predict,labels=[0,1])
print(test_matrix)

测试用例输出结果

  • 精确率:真实情况和预测情况都为正例的样本个数/预测情况为正例的样本个数;在混淆矩阵中体现在对角线上的某个元素与其所在列的元素之和的商。
  • 召回率:真实情况和预测情况都为正例的样本个数/真实情况为正例的样本个数;在混淆矩阵中体现在对角线上的某个元素与其所在行的元素之和的商。
  • F1分数:精确率和召回率的调和平均值,综合了精确率和召回率两种因素。

适用情况:上述三种评价指标都适用于样本集本身较为均衡的情况,也就是各种类型的占比接近,但是对于样本集本身不均衡的情况,上述三种评价指标就不那么适用了。

Sklearn中求解精确率、召回率和F1分数的API如下所示:

'''
# API所在命名空间:sklearn.metrics
# 使用语法:classification_report(y_true,y_predict,labels=分类标签列表)
# 构造参数:y_true和y_predict分别是表示样本真实分类结果和样本预测分类结果的列表或ndarray数组;labels表示混淆矩阵的行标签(和列标签是一样的)
# 返回值:一个分类报告,报告中包含精确率、召回率和F1分数
# 测试用例
'''
from sklearn.metrics import classification_report
y_true=[0,0,0,1,1,1]
y_predict=[0,0,1,1,1,1]
test_report=classification_report(y_true,y_predict,labels=[0,1])
print(test_report)

测试用例输出结果

18.ROC曲线和AUC指标

ROC曲线:ROC曲线即横坐标为FPR,纵坐标是TRP的曲线。具体曲线如下图所示:

  • FPR:所有真实类别为0的样本中,预测为1的样本比例;
  • TPR:所有真实类别为1的样本中,预测为1的样本比例;

上图中红色虚线的FPR始终和TPR相等,也就是说无论样本情况如何都预测为1,相当于随机猜测。
Sklearn中绘制ROC曲线的API如下所示:

'''
API所在命名空间:sklearn.metrics
使用语法:roc_curve(y_true,y_score,pos_label=正样本分类标签)
参数解释:y_score表示模型预测的正类概率值(也可以是分类结果)
返回值:FPR数组,TPR数组,thresholds(选择的不同阈值按照降序排序,一般没用)
绘图方法:用得到的FPR数组和TPR数组进行ROC曲线绘制即可
测试用例(由于数字是随便给的,分类器效果不好就不展示结果了):
'''
from sklearn.metrics import roc_curve
import matplotlib.pyplot as plt
y_true=[0,0,0,1,1,1]
y_predict=[0.3,0.5,1.0,0.8,0.9,0.7]
fpr,tpr,thresholds=roc_curve(y_true,y_predict,pos_label=0)
plt.plot(fpr,tpr)
plt.show()

AUC:AUC即ROC曲线与两个坐标轴围成的面积。在随机猜测的情况下,AUC的值为0.5。分类器对应的AUC的值越接近于1则分类器的性能越好,一般情况下AUC的值为1的分类器不存在。

Sklearn中在获取FPR和TPR数组后,可以用如下的函数方便地计算AUC指标:

'''
所在命名空间:sklearn.metrics
使用语法:AUC值=auc(fpr,tpr)
'''

AUC只能用于二分类问题,特别适用于在样本不均衡条件下评价分类模型的好坏。

19.K均值聚类算法

# 使用KMeans对象对数据进行K均值聚类
# 构造参数:
# 1.n_clusters:指定的聚类个数
# 2.init:初始化方法,默认的方法为"K-means++”,也就是K均值++算法
# 3.max_iter:最大迭代次数
# 所在的库:sklearn.cluster
# 使用语法:
# 1.首先导入函数库
from sklearn.cluster import KMeans
# 2.构造一个KMeans对象并对其进行初始化
Kmeans_estimator=KMeans(n_clusters=3,init="k-means++",max_iter=300)
# 3.使用数据训练模型
Kmeans_estimator.fit(data)
# 4.获取模型的预测结果
Predict_result=Kmeans_estimator.predict(data)

20.轮廓系数

# 使用silhouette_score函数求聚类结果的轮廓系数
# 所在的库:sklearn.metrics
# 使用语法:silhouette(data,cluster_result)
# 参数解释:data即进行聚类的数据,cluster_result即通过聚类算法得到的聚类结果
from sklearn.metrics import silhouette_score
judge_result=silhouette_score(data,predict)

21.模型的保存和加载

每次训练好的模型可以保存到本地,下次使用时直接导入,这样就可以节约大量的训练时间。
模型保存和导入的API如下所示:

'''
所在命名空间:joblib
保存模型语法:joblib.dump(经过训练后的分类器变量,保存的文件名)
模型加载语法:joblib.load(模型文件名)
'''

Python机器学习:Sklearn快速入门(稍微懂一些机器学习内容即可)相关推荐

  1. sklearn快速入门教程:(三)机器学习的通用模式及实现方法

    一.从线性回归总结机器学习的通用模式 从上篇博客我们详细讲述了线性回归的实现方式.线性回归的调用方式实际上是sklearn的典型方式,在掌握这个方法之后我们继续进一步深入,探索其它的模型的使用. 回顾 ...

  2. sklearn快速入门教程:(四)模型自动调参

    上个教程中我们已经看到在sklearn中调用机器学习模型其实非常简单.但要获得较好的预测效果则需要选取合适的超参数.在实际的项目中其实也有不少参数是由工程师借助其经验手动调整的,但在许多场景下这种方式 ...

  3. sklearn快速入门教程:(二)线性回归

    文章目录 一.从本文起学会快速阅读和学习 二.线性回归的原理回顾及官方文档 三.官方文档的分析 四.举一反三 五.小结 一.从本文起学会快速阅读和学习 本来是想把关于快速阅读的说明写在前一节,但最后还 ...

  4. sklearn快速入门教程:(一)准备工作

    sklearn快速入门教程 – 准备工作 1. 前言 sklearn全称 scikit-learn,它是一个集成了目前市面上最常用的机器学习模型的库,使用起来非常轻松简单,因此获得了广泛的应用. 从官 ...

  5. 【Python零基础快速入门系列 | 03】AI数据容器底层核心之Python列表

    • 这是机器未来的第7篇文章 原文首发地址:https://blog.csdn.net/RobotFutures/article/details/124957520 <Python零基础快速入门 ...

  6. 【Python零基础快速入门系列 | 07】浪漫的数据容器:成双成对之字典

    这是机器未来的第11篇文章 原文首发链接:https://blog.csdn.net/RobotFutures/article/details/125038890 <Python零基础快速入门系 ...

  7. python新手教程 从零开始-Python零基础从零开始学习Python十分钟快速入门

    原标题:Python零基础从零开始学习Python十分钟快速入门 学习Python的,都知道Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言.Python是一种动态解释型的 ...

  8. sklearn快速入门教程:(五)集成学习

    sklearn快速入门教程–(五)集成学习 一.集成学习简述 集成学习是目前各类竞赛和工程中应用最广泛的模型提升方法.比如在kaggle中就有关于集成学习的介绍(Kaggle模型融合原文).这里所谓的 ...

  9. 【Python数据科学快速入门系列 | 04】Numpy四则运算、矩阵运算和广播机制的爱恨情仇

    这是机器未来的第43篇文章 原文首发地址:https://blog.csdn.net/RobotFutures/article/details/126493989 文章目录 1. 概述 2. 四则运算 ...

  10. sklearn快速入门教程:补充内容 -- sklearn模型评价指标汇总(聚类、分类、回归)

    sklearn集成了大多数模型评价指标,这可以很大程度上方便我们的使用,尤其在对进行进行自动调参时可以方便我们进行选择. 做下这个笔记主要是为了补充之前的内容:sklearn快速入门教程:(四)模型自 ...

最新文章

  1. FFMpeg中apiexample.c例子分析——解码分析
  2. matlab2012生成dll,64位win7下vc2010如何调用matlab2012a中生成的dll文件
  3. 关闭uboot MMU 会导致android2.3 S5pv210 系统不稳定?!why
  4. AJAX Control Toolkit——DropShadow(阴影和圆角框)
  5. wzplayer for android V1.0
  6. Python json模块 - Python零基础入门教程
  7. jQuery导航菜单防刷新
  8. android canvas_Android 自定义View篇(七)实现环形进度条效果
  9. 速读-高级技能二:并行输入训练
  10. 从jvm层面来看多线程问题
  11. linux怎么增加用户账号,linux怎么添加用户
  12. BinaryBomb实验
  13. Zigbee入网流程
  14. Java中的数据类型转换
  15. Swift 使用NSRange 查找字符多次出现的位置处理
  16. MTKCam3流程学习 - openCamera
  17. 微信API接口、微信二次开发API调用
  18. CURL -命令行下载工具
  19. 医疗器械网络安全定义
  20. 虚拟机VMware Workstation与主机间共享文件的七种方法

热门文章

  1. 测试基础-2-接口测试之SoapUI
  2. Android秀翻天的操作——使用协程进行网络请求
  3. 环信 php后台集成,集成环信IM功能
  4. 单端冲泡机的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  5. Hive之配置和使用LZO压缩
  6. 网络类型—p2p、MA(BMA广播型多路访问、NBMA非广播型多路访问)
  7. RWLinno的退役贴
  8. .Net C# 如何读取Excel数据内容写入数据库并通过DataGridView控件动态刷新显示
  9. 常用操作系统扫描工具介绍(转)
  10. java毕业设计企业门户网站源码+lw文档+mybatis+系统+mysql数据库+调试