本次讲课的内容主要针对一些字符串的处理方法以及numpy库的基本操作进行简单说明
    如果遇到感兴趣的部分,可以在本群中讨论~!
    答疑结束后需要大家自己上网搜索、查阅书籍、动手敲代码!

    分享的初衷就是希望能让大家有兴趣自己多了解~学习能力才是最关键的哦

    以下内容希望在电脑前的同学可以跟着蓬蓬一起操作一下,印象可以更深刻
    字符串排版
    在学习爬虫之后,我们常常为爬取下来的文字信息的格式感到烦恼,所以今天咱们第一部分,就来看看一些字符串的基本操作
    打开vscode,任意输入一个字符串变量
    然后在这个变量后加上一个小黑点
    爬虫拓展 - 图1
    我们可以看到出现了很多选择项,这些,都是针对字符串可以用的方法,下面还有很多,大家可以用滚轮或者上下键查看~
    今天咱们主要介绍一下常用的14个方法~
    1、capitalize()
    只有句首字母大写
    lines= ‘hello world’
    print(lines.capitalize())
    输出为Hello world
    2、title()
    首字母大写(每个单词都是)
    lines= ‘hello world’
    print(lines.title())
    输出为 Hello World
    3、upper()
    全部字母大写
    lines= ‘hello world’
    print(lines.upper())
    输出为 HELLO WORLD
    4、lower()
    全部字母小写
    lines= ‘hEllo woRld’
    print(lines.lower())
    输出为hello world
    5、center()
    居中函数
    lines=‘abcd’
    lines.center(20)
    输出为’ abcd ’,即默认空格占位,共20个字符,而字符串居中
    lines.center(20,’#’)
    输出为’########abcd########’,即可将默认的空格占位变成特定符号,如#
    6、count()
    计数函数,返回一个数值,即字符串中有多少该字符
    lines=’hello world ha ha ha haa’
    print(lines.count(‘ha’))
    输出结果为 4
    也就是说,python本身不能判断你是怎么样去编写一个单词,从字符串中去找,遇到h就判断下一个是不是a,如果是,计数加一,最后一个haa并不是ha这个词,但也会因此被计成有一个ha字符
    7、find()
    返回第一个该字符出现时的下标,注意!下标从0开始,且空格也计为一个字符。
    lines=’hello world ha ha ha haa’
    print(lines.find(‘ha’))
    输出值为12,‘ha’这个字符的出现从下标为12的地方开始。
    print(lines.find(‘haa’))
    输出值为21,‘haa’这个字符的首字母h下标为21。

    8、istitle()
    无参数,判断改字符串是不是一个标题,返回True和False,只有全部单词都首字母大写才会被判断为标题
    lines=’Hello world ha ha ha haa’
    print(lines.istitle())
    输出为 False
    9、isupper()和islower()
    无参数,判断是否全部大写/小写,使用同istitle()
    10、endswith()
    判断是否以括号中的内容结束,返回值为True和False
    注意!python区分大小写!
    lines=’hello world ha ha ha haa’
    print(line.endswith(‘Haa’))
    输出为 False
    lines=’hello world ha ha ha haa’
    print(lines.endswith(‘haa’))
    输出为True
    11、startswith()
    判断是否以括号中的内容开头,返回值为True和False ,使用方法与endswith()相同
    12、strip()
    很实用的一个函数,用于切除字符前后的转义字符、空格等,返回有效内容,在爬虫经常用到,例如:
    lines= ‘ afk \n\t’
    print(lines.strip())
    输出为afk
    但如果是字符串内部有空格或者转义字符,是无法切除的
    lines=’ af\nk \n\t’
    print(lines.strip())
    输出为
    af
    k

    13、rstrip()
    只去除字符串右边(末尾)的转义字符和空格
    14、lstrip()
    只去除字符串左边(开头)的转义字符和空格

    这14个函数是比较常用的字符串排版函数,但大家可以看到还有很多其他的函数,具体使用的时候可以自己看看文档~

    numpy库
    首先说明一下python中序列的问题,列表是序列,range()函数也可以生成一个整数序列,而数组是另一种,它与列表不同,只能存储一种类型的数据,没有列表的包容性强。
    本部分内容适用于动手能力较强的学员同步进行学习,部分操作仅做说明,需要大家自己去尝试和操作,否则不要继续往下看了哦~
    ———————————预警————————————
    数组一般都封装在numpy中使用。
    以下代码均在import numpy as np的基础上进行
    (敲黑板划重点!!!)
    一、生成数组
    1、将列表转换为数组的方法
    a_list=list(range(10))
    b=np.array(a_list)
    print(type(b))
    希望大家还能记得生成列表的方法和type()函数的用法,这里不多提,忘了的同学之后自行百度或者回头复习。
    上述代码的输出是numpy.ndarray,说明我们生成了一个数组,大家也可以直接打印b看看这个数组是什么样。
    爬虫拓展 - 图2
    2、直接生成数组
    (1)生成一维数组(如果不知道维度的概念也推荐自己百度搜索)
    np.zeros(10)
    这样可以得到一个数组,显示为
    爬虫拓展 - 图3

    有10个带小数点的0组成,这是因为函数默认的数据类型是float,若想得到整数,则写成
    np.zeros(10,dtype=int)
    这里由于是np.zeros所以生成的数都是零,如果是np.ones也就会对应生成全都是1,以此类推,大家可以自己尝试。

    (2)生成多维数组
    a=np.zeros((4,4),dtype=int)
    这样可以生成一个怎样的数组呢?大家可以自己在本地编辑器中操作一下,记得要先import numpy as np。
    爬虫拓展 - 图4

    可以看到,一个中括号里,还有四个小的中括号,每个小的中括号代表一行,每个小中括号里有四个元素,即四列
    同样的a=np.ones((4,4),dtype=int)也可以~
    这就生成了一个4X4的数组,有学过线性代数的同学可能会感到一丝熟悉的恐惧(先肯定一下你此时闪过的怀疑)

    而此时应该有人说了,总不能我要生成一个小数,还要找这个小数用英文怎么说吧?
    想要指定一个数怎么办呢?
    可以使用
    c=np.full((3,3),3.14)
    得到一个3X3的二维数组啦~
    爬虫拓展 - 图5
    二、数组的计算
    数组理所当然的可以进行计算,并且和行列式的计算十分相近,之前我们接触的加减乘除取余取整等等等,数组都可以做到~
    1、比较
    首先我们还是创建一个数组a
    然后把数组中的数据进行比较
    import numpy as np
    a=np.array(range(10))
    print(a>3)
    如果a是一个整数,那么print(a>3)
    会返回一个布尔值
    但是这里,一个数组,和一个整数进行比较
    结果会如何呢
    此时的输出结果仍然是布尔值组成的,也就是数组a中的数据会依次和3进行比较,比3大的数据,会返回一个True,比3小就返回一个False
    爬虫拓展 - 图6
    而我想知道这些数据中,大于3的数有哪些,而不是满屏True和False
    再做一次比较即可
    而这一次的比较,是数组和数组之间的比较了
    也就是a这个数组,和a>3这个数组之间
    a[a>3]
    用中括号把其中一个数组括起来
    也就是根据a>3,对于a的一个运算
    [0 1 2 3 4 5 6 7 8 9]
    [False False False False True True True True True True]
    print(a[a>3])
    0,1,2,3的对应位置都是False,所以不会显示,最终结果只显示True位置上的数据
    也就是输出[4,5,6,7,8,9]

    2、数组的加减法
    先生成一个数组
    a=np.array(list(range(10)))
    爬虫拓展 - 图7
    1)加法
    print(a+10)
    也相当于print(np.add(a,10))
    结果显示爬虫拓展 - 图8
    也就是数组中的每个数据都会加上10后输出,数组a本身是不会变化的~
    对于二维数组也是如此
    b=np.full((3,3),1.0,dtype=float)
    则b应该是爬虫拓展 - 图9
    print(b+10)
    输出爬虫拓展 - 图10
    2)其他运算
    对于其他的运算,与加法同理,会对元组中的每个元素都进行操作

    加法 a+10 相当于np.add(a,10)
    减法 a-10 相当于np.subtract(a,10)
    倒数 -a 相当于np.negative(a)
    乘法 a*10 相当于np.multiply(a,10)
    除法 a/10 相当于np.divide(a,10)
    取整 a//10 相当于np.floor_divide(a,10)
    a**10 相当于np.power(a,10)
    取余(取模) a%10 相当于np.mod(a,10)

    3、三角函数
    三角函数sin、cos、tan、cot和反三角函数arcsin、arccos、arctan、arccot都是可以用numpy库计算的~
    (不清楚三角函数问题的自行百度哦~中学数学啦~
    例如
    a=np.array(list(range(10)))
    c=np.sin(a)
    print(c)
    输出为
    爬虫拓展 - 图11
    其实这是一行数据哦~因为太长了所以折成两行显示啦,多维数组也同理
    b=np.full((3,3),1.0,dtype=float)
    d=np.sin(b)
    print(d)
    运行结果为
    爬虫拓展 - 图12

    4、统计类型计算
    求和——sum()

    一维数组求和
    a=np.full(10,2.3)
    print(a)
    print(sum(a))
    爬虫拓展 - 图13
    这里的第一行是我们生成的数组,10和2.3,第二行是加和的结果
    但很奇怪,怎么这么多个0之后还有个4??
    这里要注意,浮点数的计算会存在一定的精确度问题,所以这是正常的~关于浮点数的问题,大家可以自行查阅哦

    多维数组求和
    a=np.full((3,3),2.3)
    print(a)
    得到结果
    爬虫拓展 - 图14
    print(sum(a))
    得到结果
    爬虫拓展 - 图15
    也就是说,sum对多维数组的求和,是将每一列进行加和

    这里要注意,上面的sum是自带的函数sum()
    而np中的sum函数不太一样,要写成np.sum()
    维度的问题需要大家自己查阅相关书籍,这里不再赘述,仅做了解

    5、求最大值
    a=np.array([[1,2],[3,4]])
    爬虫拓展 - 图16
    print(np.max(a,axis=0))
    比较每一列的最大值,所以输出为
    爬虫拓展 - 图17
    print(np.max(a,axis=1))
    比较每一行的最大值,所以输出为
    爬虫拓展 - 图18
    print(np.max(a))
    比较全员最大值,输出为
    爬虫拓展 - 图19

    三、数组拼接
    a=np.array([1,2,3])
    b=np.array([[0,2,4],[1,3,5]])
    a长这样,拼接之后
    print(np.concatenate([a,a,a]))
    爬虫拓展 - 图20
    变成了一整行
    b长这样
    爬虫拓展 - 图21
    print(np.concatenate([b,b]))
    爬虫拓展 - 图22
    此时默认axis=0,是按列拼接,原来有几列就几列,行数增加
    print(np.concatenate([b,b],axis=1))
    爬虫拓展 - 图23
    axis=1时,按行拼接,原来有几行就几行,列数增加

    今天的分享就到这里啦~对数据分析感兴趣的同学可以看看numpy相关书籍哦~