[转]机器学习之第一天

2023-05-16

 

一、机器学习简介

(一)简单介绍
1、“人工智能之父”——图灵
图灵测试(1950)
2、马文·李·闵斯基:把人工智能推向了全世界;
3、人工智能(1950—)------》机器学习(80年代)------》深度学习(2010年以后)
深度学习:图像识别、自然语言处理(可以用程序写一篇报导)、预测(如信贷需求预测、店铺销量预测)、传统预测
影响人工智能的两个因素:①硬件;②数据;③算法(☆)
(二)机器学习用到的库和框架
scikitlearn、TensorFlow、caffe2、chainer
1、机器学习用到的库的发布方即支持语言

框架机构支持语言
TensorFlowGooglePython/C++/Go
CaffeBVLCPython/C++
Kerasfcholletpython
CNTKMicrosoftC++
MXNetDMLCpython/C++/R
Torch7FcaebookLua
TheanoU.Montrealpython
DeeplearningDeeplearning4JJava/Scala
LeafAutumnAIRust
LasagneLasagnepython
NeonNervanaSystemspython

(三)机器学习书和推荐:
python数据分析与数据挖掘、机器学习系统设计、机器学习、面向机器智能TensorFlow实践、TensorFlow
(四)课程概要:
七大块:①特征工程;②模型、策略、优化;③分类、回归和聚类;④TensorFlow;⑤神经网络;⑥图像识别;⑦自然语言处理

二、机器学习概述

(机器学习概述、数据集的结构、数据的特征工程、(数据降维)、数据的类型、机器学习算法基础)
(一)机器学习概述
1、什么是机器学习
机器学习是从数据中自动获取规律(模型),并利用规律对未知数据进行预测
例如:AlphaGo、广告搜索
2、为什么需要机器学习
①解放生产力:智能客服等;
②解决专业问题:辅助医生看病等;
③提供社会便利:杭州的城市大脑等;
目的:
在各个领域内带来价值,用自动代替手动,减少企业的成本也提高企业的效率。
领域:医疗、航空、教育、物流、电商...
(二)数据集的构成
一般存在文件csv
不用MySQL(缺点):性能瓶颈、读取速度;格式不太符合机器学习要求数据的格式;
pandas:读取工具
numpy:GIL(真正的多线程,释放了GIL线程锁)
1、可用数据集:
(1)kaggle
网址:https://www.kaggle.com/datasets;
特点: ①大数据竞赛平台; ②80万科学家; ③真实数据; ④数据量大;
(2)UCI
网址:https://archive.ics.uci.edu/ml/
特点:①收录了360个数据集;②覆盖科学、经济、生活等领域;③数据量几十万
(3)scikit-learn
网址:https://scikitlearn.org/stable/datasets/index.html#datasets
特点:①数据量较小;②方便学习
2、数据集的组成:
结构:特征值+目标值
如:

样本房子面积房子位置房子楼层房子朝向目标值
数据18093080
数据2100951120
数据3801030100

注:有些数据可以没有目标值
3、数据集中对特征值的处理:
pandas:dataframe格式的;缺失值、数据转换等;
scikitlearn:对特征进行处理;
(三)数据的特征工程
1、特征工程是什么
特征工程是将原始数据转换为更好地代表预测模型的潜在问题的特征的过程,从而提高了对未知数据的预测准确性
实质就是提高预测效果
2、特征工程的意义:直接影响预测结果
3、scikitlearn工具介绍:
安装命令:pip install Scikit-learn
(检查是否安装成功:import sklearn)
注:安装scikit-learn需要安装pandas、numpy等库。
sklearn包含的算法有:Classification(分类)、Regression(回归)、Clustering(聚类)、Dimensionality redution(降维)、Model selection(模型选择) 、Preprocessing(特征工程)
4、数据的特征抽取
特征抽取就是对文本等数据(有字典、文本)进行特征值化(转换为数字值);
(1)字典特征抽取
1> 作用:对字典数据进行特征值化
2> 类:sklearn.feature_extraction.DictVectorizer
3> 语法:


   
  1.  
    DictVectorizer(sparse=True,...)
  2.  
    # DictVectorizer.fit_transform(X), 其中X为字典或包含字典的迭代器;返回值:返回spare矩阵
  3.  
    # DictVectorizer.inverse_transform(X), 其中X为array数组或sparse矩阵;返回值:转换之前数据格式
  4.  
    # DictVectorizer.get_feature_names(), 返回类别名称
  5.  
    # DictVectorizer.transform(X), 按照原先的标准转换
 

4> 流程:
①实例化DictVectorizer;
②调用fit_transform方法输入数据并转换
例:


   
  1.  
    # 1、字典类型数据的特征抽取
  2.  
    from sklearn.feature_extraction import DictVectorizer
  3.  
    def dictvec():
  4.  
    # 字典数据抽取
  5.  
    # 实例化
  6.  
    dict = DictVectorizer(sparse=False)
  7.  
    # 调用fit_transform方法输入数据并转换
  8.  
    data = dict.fit_transform([{'city': '北京', 'temperature': 100},
  9.  
    {'city': '上海', 'temperature': 60},
  10.  
    {'city': '深圳', 'temperature': 30}])
  11.  
    print(dict.get_feature_names())
  12.  
    # ['city=上海', 'city=北京', 'city=深圳', 'temperature']
  13.  
    print(data)
  14.  
    dictvec()
  15.  
    # sparse=True时结果为: (结果为sparse矩阵)
  16.  
    # (0, 1) 1.0
  17.  
    # (0, 3) 100.0
  18.  
    # (1, 0) 1.0
  19.  
    # (1, 3) 60.0
  20.  
    # (2, 2) 1.0
  21.  
    # (2, 3) 30.0
  22.  
    # sparse=False时结果为: (结果为数组类型)
  23.  
    # [[ 0. 1. 0. 100.] one-hot编码
  24.  
    # [ 1. 0. 0. 60.]
  25.  
    # [ 0. 0. 1. 30.]]
 

字典数据抽取:把字典中一些类别数据分别转换成特征,数字不进行转换,“上海”“北京”等转换成0、1;
注:数组形式,有类别的这些特征先要转换为字典数据
(2)文本特征提取
1> 作用:对文本数据进行特征化
2> 类:sklearn.feature_extraction.text.CountVectorizer
3> 语法:


   
  1.  
    CountVectorizer(), 返回词频矩阵
  2.  
    # CountVectorizer.fit_transfrom(X) # 其中X为文本或包含文本字符串的可迭代对象;返回值为sparse矩阵
  3.  
    # CountVectorizer.inverse_transform(X) # X为array数组或sparse矩阵;返回值转换之前数据格式
  4.  
    # CountVectorizer.get_feature_names() # 返回值为单词列表
 

4> 对英文进行特征化的流程:
(中文需要先分词,详见5>)
①实例化类:CountVectorizer
②调用fit_transform方法输入数据并转换
(注:返回格式利用toarray()进行sparse矩阵转换为array数组)


   
  1.  
    from sklearn.feature_extraction.text import CountVectorizer
  2.  
    def countvec():
  3.  
    cv = CountVectorizer()
  4.  
    data = cv.fit_transform(['life is short,i like python', 'life is too long,i dislike python'])
  5.  
    data = cv.fit_transform(['life is short,i like python', 'life is too long,i dislike python'])
  6.  
    print(data) # 在每篇文章中统计词的出现次数☆【单个字母不统计,因为一个字母不能代表什么所以不统计】
  7.  
    print(cv.get_feature_names()) # 统计文章中出现一次及一次以上的词
  8.  
    print(data.toarray()) # 把sparse矩阵转换成数组形式
  9.  
    countvec()
  10.  
    结果:
  11.  
    # (0, 5) 1
  12.  
    # (0, 3) 1
  13.  
    # (0, 6) 1
  14.  
    # (0, 1) 1
  15.  
    # (0, 2) 1
  16.  
    # (1, 0) 1
  17.  
    # (1, 4) 1
  18.  
    # (1, 7) 1
  19.  
    # (1, 5) 1
  20.  
    # (1, 1) 1
  21.  
    # (1, 2) 1
  22.  
    #['dislike', 'is', 'life', 'like', 'long', 'python', 'short', 'too']
  23.  
    #[[0 1 1 1 0 1 1 0]
  24.  
    # [1 1 1 0 1 1 0 1]]
 

5> 对中文进行特征化的流程:
①对准备好的句子利用结巴进行分词;
②实例化CountVectorizer;
③将分词结果变成字符串当做fit_transform的输入值;
例:


   
  1.  
    # 分词函数
  2.  
    def cutword():
  3.  
    import jieba
  4.  
    # 分词后的结果是一个迭代器,所以需要将分词后的结果转换成一个列表
  5.  
    con1 = jieba.cut('今天很残酷,明天更残酷,后天很美好,但绝大部分是死在明天晚上,所以每个人不要放弃今天。')
  6.  
    con2 = jieba.cut('我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。')
  7.  
    con3 = jieba.cut('如果只用一种事物了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。')
  8.  
    # 转换成列表
  9.  
    content1 = list(con1)
  10.  
    content2 = list(con2)
  11.  
    content3 = list(con3)
  12.  
    # 把列表转换成字符串
  13.  
    c1 = ' '.join(content1)
  14.  
    c2 = ' '.join(content2)
  15.  
    c3 = ' '.join(content3)
  16.  
    return c1, c2, c3
  17.  
    def hanzivec():
  18.  
    # 中文特征值化
  19.  
    c1, c2, c3 = cutword()
  20.  
    print(c1,c2,c3)
  21.  
    cv = CountVectorizer()
  22.  
    data = cv.fit_transform([c1,c2,c3])
  23.  
    # print(data) # 在每篇文章中统计词的出现次数【单个字母不统计】
  24.  
    print(cv.get_feature_names()) # 统计文章中出现一次及一次以上的词
  25.  
    print(data.toarray())
  26.  
    hanzivec()
 

6> 用途
count:文本分类、情感分析
补:☆ TF-IDF ☆
文本分类的另一种方式:tf idf(tf:term frequency; idf: 逆文档频率inverse document frequency log(总文档数量/该词出现的文档数量))
tf * idf为这个词在文章中的重要程度
主要思想:如果一个词或短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或短语具有很好的类别区分能力,适合用来分类。
作用:用于评估一个字词对于一个文件或一个语料库中的其中一份文件的重要程度
类:sklearn.feature_extraction.text.TfidVectorizer
例:


   
  1.  
    def hanzivec():
  2.  
    from sklearn.feature_extraction.text import TfidfVectorizer
  3.  
    # 中文特征值化
  4.  
    c1, c2, c3 = cutword()
  5.  
    print(c1,c2,c3)
  6.  
    tf = TfidfVectorizer()
  7.  
    data = tf.fit_transform([c1,c2,c3])
  8.  
    # print(data) # 在每篇文章中统计词的出现次数【单个字母不统计】
  9.  
    print(tf.get_feature_names()) # 统计文章中出现一次及一次以上的词
  10.  
    print(data.toarray())
  11.  
    hanzivec()
  12.  
    # 在结果中取较大的一两个值拼起来就是文章的关键词或区分词
 

为什么需要TfidVectorizer?
它是分类及其学习算法的重要依据;在情感分析中也非常重要
5、特征的预处理:对数据进行处理
(特征处理的方法、sklearn特征处理API)
1> 什么是特征处理
通过特定的统计方法(数学方法)数据转换成算法要求的数据
对于数值型数据:标准缩放:①归一化;②标准化;③缺失值
对于类别型数据:one-hot编码
对于时间类型数据:时间的切分
2> sklearn特征预处理API:sklearn.preprocessing
①归一化
i、特点:通过对原始数据进行变换把数据映射到(默认为[0,1])之间
ii、公式:x'=(x-min)/(max-min), x''=x'*(mx-mi)+mi
(注:作用于每一列,max为一列的最大值,min为一列的最小值,x''为最终结果,mx, mi分别为指定区间值默认mx为1,mi为0)
iii、sklearn归一化API:sklearn.preprocessing.MinMaxScaler
iv、MinMaxScaler语法:


   
  1.  
    MinMaxScaler(feature_range=(0,1)...)
  2.  
    # 每个特征值缩放到给定范围(默认为[0,1])
  3.  
    # MinMaxScaler.fit_transform(x),其中x为numpy array格式的数据[n_samples,n_features]; 返回值为转换后的形状相同的array
 

v、归一化步骤及实例
步骤:实例化MinMaxScaler----->通过fit_transform转换
例:


   
  1.  
    from sklearn.preprocessing import MinMaxScaler
  2.  
    def mm():
  3.  
    mm = MinMaxScaler(feature_range=(2,5))
  4.  
    data = mm.fit_transform([[90,2,10,40],[60,4,15,45],[75,3,13,46]])
  5.  
    print(data)
  6.  
    mm()
  7.  
    # 结果为:
  8.  
    # [[5. 2. 2. 2. ]
  9.  
    # [2. 5. 5. 4.5]
  10.  
    # [3.5 3.5 3.8 5. ]]
 

vi、为什么进行归一化处理
消除量纲,把所有数据转换到同一标准下,使得一个特征对最终结果不会造成更大影响。如:(72993-35948)^2+(10.14-6.8)^2+(1.0-1.21)^2中由于第一项值太大,后两项结果可以忽略不计,所以需要进行归一化处理。


问题:如果数据中异常点较多,会有什么影响?
答:会影响最大值最小值,从而进一步影响归一化的处理。


vii、归一化总结
(归一化的缺点是受异常值的影响)所以只适用于传统精确小数据场景
②标准化
i、特点:通过对原始数据进行变换把数据变换到均值为9,方差为1范围内
ii、公式:x'=(x-mean)/sigama
iii、sklearn标准化API:sklearn.preprocessing.StandardScaler
iv、StandardScaler语法:


   
  1.  
    StandardScaler()
  2.  
    # 处理之后的每列数据都集中在均值为0,方差为1的周围
  3.  
    StandardScaler.fit_transfrom(x) # 其中x为numpy array格式的数据[n_samples,n_features],返回值:转换后的形状相同的array
  4.  
    StandardScaler.mean_ # 原始数据中每列特征的均值
  5.  
    StandardScaler.var_ # 原始数据每列特征的方差
 

v、标准化流程和实例
流程: ①实例化StandScaler
②通过fit_transfrom转换
例:


   
  1.  
    from sklearn.preprocessing import StandardScaler
  2.  
    def stand():
  3.  
    # 标准化缩放
  4.  
    std = StandardScaler()
  5.  
    data = std.fit_transform([[1,-1,3],[2,4,2],[4,6,-1]])
  6.  
    print(data)
  7.  
    print(std.var_)
  8.  
    stand()
  9.  
    # 结果为:
  10.  
    # [[-1.06904497 -1.35873244 0.98058068]
  11.  
    # [-0.26726124 0.33968311 0.39223227]
  12.  
    # [ 1.33630621 1.01904933 -1.37281295]]
  13.  
    # [1.55555556 8.66666667 2.88888889]
 

vi、标准化总结
在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。
③缺失值
如何处理数据中的缺失值?
答:常用的方法有:i、删除;ii、插补:按每行或每列的均值或中位数填补。
i、sklearn缺失值API:Imputer
ii、Imputer语法


   
  1.  
    Imputer(missing_values='NaN',strategy='mean',axis=0) # 0为按列进行填补,1为按行进行填补
  2.  
    # 完成缺失值插补
  3.  
    Imputer.fit_transfrom(x)
  4.  
    # x:numpy array格式数据[n_samples,n_features]
  5.  
    # 返回值:转换后的形状相同的array
 

(四)数据降维(减少特征的数量)
常用的方法有两种:特征选择、主成分分析
1、特征选择
特征选择的原因:
冗余:部分特征的相关度高,容易消耗计算性能
噪声:部分特征对预测结果有影响
1> 特征选择是什么
特征选择就是单纯的从提取到的所有特征中选择部分特征作为训练集特征,特征在选择前和选择后可以改变值或不改变值,但是选择后的特征维数肯定比选择前小,毕竟我们只选择了其中的一部分特征。
主要方法(三大武器):
Filter(过滤式):Variance Threshold
Embedded(嵌入式):正则化、决策树
Wrapper(包裹式)
2> sklearn特征选择API:sklearn.feature_selection.VarianceThreshold
VarianceThreshold语法:


   
  1.  
    VarianceThreshold(threshold=0.0) # 删除所有低方差特征
  2.  
    Variance.fit_transfrom(x)
  3.  
    # 其中x为numpy array格式的数据[n_samples,n_features]; 返回值为训练集差异低于threshold的特征将被删除;默认值是保留所有非零方差特征,即剔除所有样本中具有相同的特征
 

VarianceThreshold流程:
①初始化VarianceThreshold,指定阈值方差
②调用fit_transfrom
例:


   
  1.  
    from sklearn.feature_selection import VarianceThreshold
  2.  
    # 特征选择,删除低方差的特征
  3.  
    x = [[0,2,0,3],[0,1,4,3],[0,1,1,3]]
  4.  
    selector = VarianceThreshold(threshold=0)
  5.  
    data = selector.fit_transfrom(x)
  6.  
    print(data)
  7.  
    # 结果为:
  8.  
    # array([[2, 0],
  9.  
    [1, 4],
  10.  
    [1, 1]]) # 删除了第一列和第四列
 

3> 其他特征选择方法: 神经网络
2、主成分分析(PCA)
1> API:sklearn.decomposition
2> 目的:尽可能损失少量数据信息的情况下,降低数据维度
3> 什么时候用主成分分析法
特征数量达到上百的时候,就要考虑数据的简化问题,数据也会去改变
4> 作用:削减聚类分析或回归分析中特征的数量
5> 语法


   
  1.  
    PCA(n_components=None) # n_components为小数时表示要保留多少的原信息,取值在0-1之间
  2.  
    PCA.fit_transfrom(x)
  3.  
    # 其中x为numpy array格式数据;返回值为转换后指定维数的array
 

例:


   
  1.  
    from sklearn.decomposition import PCA
  2.  
    def pca():
  3.  
    # 主成分分析进行降维
  4.  
    pca = PCA(n_components=0.9)
  5.  
    data = pca.fit_transform([[2,8,4,5],[6,3,0,8],[5,4,9,1]])
  6.  
    print(data)
  7.  
    pca()
  8.  
    # 结果为:
  9.  
    # [[ 1.28620952e-15 3.82970843e+00]
  10.  
    [ 5.74456265e+00 -1.91485422e+00]
  11.  
    [-5.74456265e+00 -1.91485422e+00]]
 

例1:instacart-market-basket-analysis-kaggle
探究:用户对物品类别的喜好细分降维
数据:products.csv(商品信息)、order_products_prior.csv(订单与商品信息)、orders.csv(用户的订单信息)、asile.csv(商品所属具体物品分类)
分析:
①先把有用的特征从各个表中提取出来并放在一张表内[pd.merge()];
prior:product_id, order_id
products:product_idaisle_id
orders: order_iduser_id
aisles: aisle_id, aisle


   
  1.  
    import pandas as pd
  2.  
    from sklearn.decomposition import PCA
  3.  
    # 读取四张表的数据
  4.  
    prior = pd.read_csv('E:/python/传智播客黑马18年人工智能课程/数据文档/instacart-market-basket-analysis-kaggle/order_products__prior.csv')
  5.  
    products = pd.read_csv('E:/python/传智播客黑马18年人工智能课程/数据文档/instacart-market-basket-analysis-kaggle/products.csv')
  6.  
    orders = pd.read_csv('E:/python/传智播客黑马18年人工智能课程/数据文档/instacart-market-basket-analysis-kaggle/orders.csv')
  7.  
    aisle = pd.read_csv('E:/python/传智播客黑马18年人工智能课程/数据文档/instacart-market-basket-analysis-kaggle/aisles.csv')
  8.  
    # 合并四张表到一张表内 用户-物品类别
  9.  
    _mg = pd.merge(prior,products,on=['product_id','product_id']) # 输入要合并的表和表间联系的键
  10.  
    _mg = pd.merge(_mg,orders,on=['order_id','order_id'])
  11.  
    mt = pd.read_csv(_mg,aisle,on=['aisle_id','aisle_id'])
  12.  
    mt.head(10)
 

②建立一个类似行、列数据——交叉表(特殊的分组表)


   
  1.  
    _mg = pd.merge(prior, products, on=['product_id', 'product_id']) # 输入要合并的表和表间联系的键
  2.  
    _mg = pd.merge(_mg, orders, on=['order_id', 'order_id'])
  3.  
    mt = pd.read_csv(_mg, aisle, on=['aisle_id', 'aisle_id'])
  4.  
    print(mt.head(10))
  5.  
    # 交叉表(特殊的分组工具)
  6.  
    cross = pd.crosstab(mt['user_id'],mt['aisle'])
  7.  
    print(cross.head(10))
  8.  
    # 进行主成分分析
  9.  
    pca = PCA(n_components=0.9)
  10.  
    data = pca.fit_transfrom(cross)
  11.  
    print(data)
  12.  
    print(data.shape)
 

注:本文非原创,摘录于传智机器学习视频,仅供个人学习使用,如有侵权,请及时联系删帖。 


---------------------
作者:xiaotian127
来源:CSDN
原文:https://blog.csdn.net/xiaotian127/article/details/86756402#comments
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[转]机器学习之第一天 的相关文章

随机推荐

  • SpringCloud常见问题 -- 启动多个服务

  • Spring框架 -- 项目启动及配置(一)

    Spring 容器启动大致流程 Spring 基础 IDEA项目Maven搭建结构 idea src src main java 自建 src main resource 自建 src main resource dev 自建 src ma
  • 【ZYNQ】裸机 PS + PL 双网口实现之 lwip 库文件修改

    因项目需要 xff0c 为实现 Zynq 裸机双网口通信功能 xff0c 其中 ENET0 连接 PS 端网口 xff0c ENET1 通过 EMIO 扩展连接 PL 端网口 xff0c 原 Lwip 库无板载 PHY 芯片支持及 EMIO
  • openstack删除nova service-list中的computer服务列表流程

    文章目录 说明 删除流程 nova服务查看 修改主机名 关闭准备删除的nova服务 删除nova服务 删除agent服务 创建虚拟机测试 说明 如下图 同一个计算节点主机名有2个 造成这种原因就是单纯的改主机名了 因为正常来说计算节点nov
  • spring— Bean标签scope配置和生命周期配置

    scope配置 singleton 默认值 xff0c 单例的prototype 多例的request WEB 项目中 xff0c Spring 创建一个 Bean的对象 xff0c 将对象存入到 request 域中session WEB
  • 对项目的梳理、流程和总结

    过程 我在制作 中国汽车技术研究中心 的一个演讲PPT前 xff0c 也已经有第一版的基础了 xff0c 不过 xff0c 第一版的PPT客户并不满意 xff0c 因为这个风格不是客户想要的 xff0c 所以客户对第一版的PPT并不是很满意
  • Linux中添加用户设置权限并实现远程登录

    1 username 为你自己命名的用户名 useradd username 2 设置密码 passwd username 3 用户文件夹在 home 下 4 查看更改登录管理账号 sudo vi etc ssh sshd config 5
  • rosdep init报错解决方法

    rosdep init报错解决方法 很多小伙伴在安装ROS的过程中都不可避免的要执行rosdep init和rosdep update这两行命令行 xff0c 这也是在安装ROS的过程中最让人头疼的两步 xff0c 一般都没法一次成功 xf
  • win10登录出现“其他用户”,一分钟后自动重启的解决方案和原因分析

    今天公司的同事的电脑莫名其妙重启开机后 xff0c 就一直是其他用户 身为技术部的人 xff0c 程序员就该修电脑是常识 xff08 大雾 xff09 百度各种解决方案的汇总 输入你的微软账号用户名 xff08 邮箱 xff09 和微软账号
  • Nginx启动失败control process exited, code=exited status=1

    出现现象 nginx启动失败 xff0c 估计是端口被某个进程占用了 通过lsof i 80 查看 xff0c 发现被httpd服务占用 可以通过杀掉进程或者更改nginx 端口解决 xff0c 通cat etc nginx nginx c
  • Python爬虫入门实例一之淘宝商品页面的爬取

    文章目录 1 爬取原界面2 代码解析3 完整代码引用源自 1 爬取原界面 今天给大家介绍第一个爬虫小例子 xff0c 使用requests库爬取淘宝商品信息 xff0c 首先想要爬取的内容如下图 2 代码解析 使用交互环境给大家带来代码解析
  • Linux(Ubuntu)入门——1.Ubuntu虚拟机安装

    inux Ubuntu 入门 1 Ubuntu虚拟机安装 目录 Ubuntu虚拟机安装 Ubuntu虚拟机安装 1 在VMware界面选择创建新的虚拟机 2 选择自定义 xff08 高级 xff09 xff0c 然后点击下一步 3 硬件兼容
  • Linux(Ubuntu)入门——4.VMwaretools安装(解决虚拟机窗口过小)

    Linux Ubuntu 入门 4 VMwaretools安装 xff08 解决虚拟机窗口过小 xff09 1 虚拟机选项卡里选择安装VMwareTools 2 桌面会看到VMware Tools的图标 xff0c 双击打开 3 将以 ta
  • Java0608-node

    Java0608 node 目录 Java0608 node1 数组1 1概念1 2 数组的使用1 3使用场景1 4应用 2 二维数组2 1二维数组的创建 1 数组 1 1概念 数组是指内存中一块连续的空间 xff0c 数量固定且存储类型相
  • Linux修改密码报错Authentication token manipulation error的终极解决方法

    文章目录 报错说明解决思路流程排查特殊权限有没有上锁查看根目录和关闭selinux etc pam d passwd文件 etc pam d system auth文件终极办法 xff0c 手动定义密码passwd Have exhaust
  • java0614-homework

    java0614 homework 目录 java0614 homework1 定义狗类2 求矩形面积3 实现级联菜单4 模拟计算器5 用户登录 1 定义狗类 题目 定义狗类 属性 xff1a 昵称 xff0c 品种 xff0c 健康值 x
  • Java0621-node

    Java0621 node 目录 1 JDK常用的类1 1 学习标准1 2 学习方法1 3 String1 3 1 定义1 3 2 构造方法1 3 3 方法1 3 3 1 字符串属性相关1 3 3 2 字符串比较1 3 3 3 索引1 3
  • 关于我使用的安卓View Binding方式

    方案有 xff1a ButterKnife findViewById View Binding 下面看下View Binding在下面的场景怎么使用 Activities Fragments Inflate Bind RecyclerVie
  • SpringBoot

    resources application properties xff1a Spring Boot应用的配置文件 xff1b 可以修改一些默认设置 xff1b server port 61 8081 改变默认端口号 使用SpringMVC
  • [转]机器学习之第一天

    一 机器学习简介 xff08 一 xff09 简单介绍 1 人工智能之父 图灵 图灵测试 xff08 1950 xff09 2 马文 李 闵斯基 xff1a 把人工智能推向了全世界 xff1b 3 人工智能 xff08 1950 xff09