数据分析之Python篇

一、Python基础知识

(一)语句与注释

  1. 语句:程序进行编写,执行的每一行代码,叫做语句
  2. 注释:对代码进行解释和说明,可以提高代码的可读性
    1)注释分为单行注释和多行注释
    2)单行注释是以#开始
    3)多行注释,可以使用三对双引号""" “”" 或者三对单引号’’’ ‘’’

(二)变量与赋值

  1. 变量的定义
    1)变量:通俗理解就是存储程序数据的容器
    2)变量定义的格式:
    变量名 = 数据(变量名尽量有含义,方便理解)

    # 定义变量
    name = "马超"
    skill = 450
    money = 1.98
    is_ok = True
    

    可以通过type()函数查看变量的类型
    常用的数据类型:int,str,float,bool

  2. 变量的命名规则
    1)变量名:是由字母、数字、下划线组成,注意是只有这三种,但是不能以数字开头

    # 错误举例
    3name = "太乙真人"
    print(3name)
    name!age = 108 
    

    2)变量命名方式:驼峰命名法和下划线命名法
    A. 驼峰命名法:小驼峰和大驼峰
    a. 小驼峰:第一个单词首字母要小写,其他单词首字母都大写
    b. 大驼峰:每个单词首字母都大写
    B. 下划线命名法:单词小写,单词之间使用下划线进行分割

    # 命名规则 
    hero_name = '鲁班'  # 下划线命名法 -> 推荐使用
    heroName = '刘备'  # 小驼峰命名法
    HeroName = '元芳'  # 大驼峰命名法
    

    3)关键字
    关键字:在Python里面具有特殊功能的标识符(理解成变量名、函数名),关键字不能作为变量名使用
    eg:True,False,and,as,if,continue,break…

    4)数据类型转换

    函数函数说明
    int(x[,base])将x转换为一个整数
    float(x)将x转换为一个浮点数
    str(x)将对象x转换为字符串
    complex(real[,imag])创建一个复数,real为实部,imag为虚部
    repr(x)将对象x转换为表达式字符串
    eval(str)计算在字符串中有效Python表达式,并返回一个对象
    tuple(s)将序列s转换为一个元组

(三)输入与输出

  1. Python中的输入
    input:用来获取用户输入的数据

    # 接收用户输入的数据 
    name = input("请输入你的名字")
    # 输出用户输入的名字
    print(name)
    

    注:当你运行完毕 name = input(“请输入你的名字”)代码并将鼠标光标移动到控制台,Python交互式命令就等待输入,可以输入任意字符,然后按回车完成输入。

  2. Python中的输出
    print:用来输出程序计算后的数据

    # 接收字符串数据
    print("Hello World")
    # 输出计算结果
    print(100 + 100)
    
  3. Python中的格式化输出

    符号格式化说明
    %s输出字符串
    %d输出int类型数字
    %f输出浮点数
    %x输出16进制数据
    PI = 3.1415926
    print("π的值是%.2f" %PI)
    job = "程序猿"
    money = 25000
    print("%s的薪资是:%d" %(job,money))
    

(四)运算符

  1. 算术运算符
    Python支持以下几种算术运算符:x=10,y=20,z=25

    运算符描述实例
    +两个数字相加x + y输出结果30
    -一个数减去另一个数x - y输出结果-10
    *两个数相乘x * y输出结果200
    /y / x输出结果2
    //取整除商的整数部分9 // 2输出4,9.0 // 2.0输出4.0
    %取余返回除法的余数z % x输出结果5
    **指数x**y为10的20次方

    注意:混合运算时,优先级顺序为:*高于、/、%、//高于+、-,为了避免歧义,建议使用()来处理运算符优先级。并且,不同类型的数字在进行混合运算时,整数将会转换成浮点数进行运算。

  2. 赋值运算符

    运算符描述实例
    =赋值运算符把 = 右边的结果“赋给”左边的变量,如num = 1 + 2 * 3,结果num的值为7
    # 单个变量赋值
    num = 1000
    
    # 多个变量赋值
    # 赋值符号左右两边的变量名与值的个数要一致
    num1,f1,str1,b1 = 100,3.14,"hello",True
    
  3. 复合赋值运算符

    运算符描述实例
    +=加法赋值运算符z += x 等效于 z = z + x
    -=减法赋值运算符z -= x 等效于 z = z - x
    *=乘法赋值运算符z *= x 等效于 z = z * x
    /=除法赋值运算符z /= x 等效于 z = z / x
    %=取模赋值运算符z %= x 等效于 z = z % x
    **=幂赋值运算符z **= x 等效于 z = z ** x
    //=取整除赋值运算符z //= x 等效于 z = z // x
  4. 比较运算符
    Python语言支持比较运算符,以下假设变量x为10,y为20

    运算符描述实例
    ==等于-比较两个对象是否相等(x == y) 返回 False
    !=不等于-比较两个对象是否不相等(x != y) 返回 True
    >大于-返回x是否大于y(x > y) 返回 False
    <小于-返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。(x < y) 返回 True
    >=大于等于-返回x是否大于等于y(x >= y) 返回 False
    <=小于等于-返回x是否小于等于y(x <= y) 返回 True
  5. 逻辑运算符
    Python语言支持逻辑运算符,以下假设变量x为True,y为False

    运算符描述实例
    and布尔“与”x and y 返回 False
    or布尔“或”x or y 返回 True
    not布尔“非”not x 返回 False

(五)分支语句

  1. 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断。
    比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,使用分支语句if实现

    age = 20
    if age >= 18:
    	print("your age is",age)
    	print("adult")
    

    根据Python的缩进规则,如果if语句判断是True,就把缩进的两行print语句执行了,否则,什么也不做。
    也可以给if添加一个else语句,意思是,如果if判断是False,不要执行if的内容,去把else执行了。

    age = 6
    if age >= 18:
    	print("你的年龄",age)
    	print("成年")
     else:
     	print("你的年龄",age)
     	print("未成年")
    

    当然上面的判断是很粗略的,完全可以用elif做更细致的判断:

    age = 6
    if age >= 18:
    	print("成年")
    elif age >= 7:
    	print("青少年")
    else:
    	print("儿童")
    

    elif是else if的缩写,完全可以有多个elif。
    if语句执行有个特点,它是从上往下判断,如果在某个判断上是True,把该判断对应的语句执行后,就忽略掉剩下的elif和else。
    举例:请判断下面的程序打印的结果是什么?

    age = 20
    if age >= 7:
    	print("青少年")
    elif age >= 18:
    	print("成年")
    else:
    	print("儿童")
    

(六)循环

  1. while循环
    while循环语句语法

    """
    while 条件:
    	条件满足时,做的事情1
    	条件满足时,做的事情2
    	条件满足时,做的事情3
    	...(省略)...
    """
    

    例如:输出100条hello Python

    i = 1
    while i <= 100:
    	print("hello Python")
    	i = i + 1
    
  2. for循环
    1)for循环和while循环一样同样可以进行循环,并且是运用最多的循环方式,而且它有一项非常厉害的功能——遍历

    names = ['Mike', 'Huahua', 'Jay']
    for name in names:
    	print(name)
    

    执行这段代码,会依次打印names每一个元素:

    # 遍历
    Mike
    Huahua
    Jay
    

    2)for x in…循环就是把每个元素代入变量x,然后执行缩进块的语句
    Python还提供了一个range()函数,可以配合我们的for循环使用
    例如:

    for i in range(10):
    	print(i)
    # 效果等同于 while 循环的
    
  3. break语句
    在循环中,break语句可以提前退出循环

    m = 1
    while m <= 50:
    	if m > 10:
    		# 当 m = 11时,条件满足,执行break语句
    		break
    		# break语句会结束当前循环 
    	print(m)
    	m = m + 1
    print("END")
    # 打印出1~10后,紧接着打印END,程序结束
    

    可见break的作用是提前结束循环

  4. continue语句
    在循环过程中,也可以通过continue语句,跳过当前的这次循环,直接开始下一次循环

    n = 0
    while n < 10:
    	n = n + 1
    	if n % 2 == 0:
    		# 如果n是偶数,执行continue语句
    		continue
    		# continue语句会直接继续下一轮循环
    		# 后续的print()语句不会执行
    	print(n)
    # 打印的不再是1~10,而是1,3,5,7,9
    

二、Python数据容器

(一)字符串(str)

  1. 定义
    字符串:单引号,双引号,三引号包围的字符组
    例如:

    str = 'hello' # 定义字符串变量
    str = "world" # 定义字符串变量
    str = """hello
          Python""" # 定义多行字符串变量
    
  2. 下标和切片
    下标索引:即编号,我们可以根据下标找到对应元素
    切片:对操作的对象截取其中一部分的操作
    切片语法:[起始:结束:步长] 支持负数

    name = 'abcdef'
    print(name[0:3]) # 取下标0~2的字符
    abc
    print(name[1:-1]) # 取下标为1开始到最后第2个之间的字符
    bcde
    
  3. 字符串的常见操作
    1)查

    方法方法说明
    find(str)检测str是否被包含,若是返回索引值,否则返回-1
    index(str)与find()方法一样,若str不在会报异常
    count(str)str出现的次数
    startswith(str)是否以str开头,返回 True or False
    endswith(str)是否以str结束,返回 True or False
    rfind(str)类似于find(),从右边开始查找
    rindex(str)类似于index(),从右边开始查找

    2)增

    方法方法说明
    join(mystr)mystr中每个元素后面插入str

    3)删

    方法方法说明
    lstrip删除左边的空白字符
    rstrip删除末尾的空白字符
    strip删除两端的空白字符

    4)改

    方法方法说明
    replace(str1,str2)将str1替换成str2
    split(str,x)以str为分隔符切片,仅分隔x个子字符串
    capitalize()把字符串的第一个字符大写
    title()每一个字符串首字母大写
    lower()所有大写字符为小写
    upper()所有小写字符为大写
    ljust(x)原字符串左对齐,用空格填充至长度为x
    rjust(x)原字符串右对齐,用空格填充至长度为x
    center(x)原字符串居中,用空格填充至长度为x
    partition(str)把字符串分为str前,str和str后三部分
    rpartition(str)类似于partition(),从右边开始
    splitlines()按照行分隔,返回一个包含各行作为元素的列表

(二)列表(list)

  1. 简介
    列表:Python内置的一种数据类型,是一种有序的集合
    列表的格式:写在方括号之间,用逗号隔开

    list1 = ['Mike', '张三', 25000, 99.99, True]
    

    注意:列表中的元素可以是不同类型的

  2. 常见操作

    操作函数
    列表长度len(list)
    列表访问list[索引]
    列表切片list[start:stop:step]
    列表添加元素append/extend/insert
    列表修改元素list[索引]=新元素
    列表查找元素in/not in/index/count
    列表删除元素del/pop/remove
    列表排序sort/reverse
  3. 遍历
    遍历:为了更有效率的输出列表的每个数据,可以使用循环来完成
    for 循环:

    nameslist = ['Zhangsan', 'Lisi', 'Wangwu', 'Zhaoliu']
    for name in nameslist:
    	print(name)
    

    while循环:

    nameslist = ['Zhangsan', 'Lisi', 'Wangwu', 'Zhaoliu']
    length = len(nameslist)
    i = 0
    while i < length:
    	print(nameslist[i])
    	i += 1
    

(三)元组(tuple)

  1. 简介
    元组:Python另一种有序列表,元组不能修改
    元组的格式:写在圆括号之间,用逗号分隔开
    classmates = ('Michael', 'Bob', 'Tracy')
    
    注意:tuple不可变,没有append()、insert()方法。其他获取元素的方法和list是一样的

(四)字典(dict)

  1. 简介
    字典:可变容器模型,且可存储任意类型对象
    字典的格式:每个键值对用冒号分割,每个对之间用逗号分割,整个字典包括在花括号{ }中

    d = {'Michael':95, 'Bob':75, 'Tracy': 85}
    

    注意:一个key只能对应一个value

  2. 常见操作

    操作函数
    字典修改元素dict[ ‘key’ ] = 新value
    字典添加元素dict[ ‘新key’ ] = value
    字典删除元素del()/clear()
    键值对个数len()
    查看字典的键keys()
    查看字典的值values()
    所有(键,值)元组的列表items()

(五)集合(set)

  1. 简介
    集合:一个无序的不重复元素序列
    集合的创建:使用大括号{ }或者set()函数创建集合
    my_set = {1, 4, 'abc', 'hello'}
    my_set = set([1, 1, 3, 5, 3]) # 把列表转成集合,会去重
    
    注意:1)集合不支持下标赋值和取值;2)定义空的集合的时候不能直接使用{ },因为{ }表示的是空字典,若要创建空的集合,可以使用set()函数

三、函数

(一)函数的简介

  1. 函数:程序中,将需要多次使用的代码块组织为一个小模块,叫做函数
    函数的作用:可以提高编写的效率以及代码的重用
    1)Python内置函数,例如:input(),type()
    2)用户自定义函数

(二)函数的定义和调用

  1. 定义函数
    函数必须先定义,后调用
    定义函数的格式:

    def 函数名():
    	代码(代码前有缩进,tab)
    	
    # 定义函数,完成打印信息的功能
    def printInfo():
    	print("hello")
    	print("Python")
    
  2. 调用函数
    定义函数后,函数是不能够自动执行的,需要调用函数
    调用函数的格式:函数名()

    def printInfo():
    		print("hello")
    		print("Python")
    
    printInfo() # 调用函数
    

    1)调用函数时,函数从头执行,代码执行完毕,调用结束
    2)若函数中有return语句,执行到return语句时,调用结束

  3. 函数的文档说明
    1)help(函数名)能够看到函数的相关说明

    help(printInfo)
    

    2)函数名.__ doc __ 直接查看文档说明

    print(printInfo.__doc__)
    

(三)函数的参数

  1. 位置参数
    位置参数:也叫做必选参数
    例如:在power(x,n)函数中x和n都是位置参数

    def power(x, n):
    	s = 1
    	while n > 0:
    		n = n - 1
    		s = s * x
    	return s
    power(5, 2)
    

    调用时,传入的两个值依次赋给参数x和n

  2. 默认参数
    默认参数:将某个未知参数值设定,降低函数调用的难度
    例如:调用power(5)时,相当于调用power(5, 2)

    def power(x, n=2):
    		s = 1
    		while n > 0:
    			n = n - 1
    			s = s * x
    		return s
    	power(5)
    

    1)必选参数在前,默认参数在后,否则会报错
    2)当有多个参数时,变化小的参数放后面作为默认参数

    默认参数中需要注意的坑:

    # 默认参数一定是不可变的对象
    def add_end(L = None):
    	if L is None:
    		l = []
    	L.append("END")
    	return L
    add_end([1, 2, 3])
    add_end()
    
  3. 可变参数
    可变参数:即传入的参数个数是可变的
    可变参数格式:在参数前面加一个*号
    例如:

    def calc(*numbers):
    	sum = 0
    	for n in numbers:
    		sum = sum + n * n
    	return sum
    calc(1, 2)
    
  4. 关键字参数

    # 以字典形式接收
    def person(name, age, **kw):
    	print(kw)
    	print(type(kw))
    	print(kw.keys())
    	print(kw.values())
    	if 'city' in kw:
    		print("in")
    	print("name:", name, "age:", age)
    
    person('Jack', 6)
    person('Jack', 6, city='beijing', addr='chaoyang', zipcode=123456)
    
  5. 参数组合
    参数组合:必选参数、默认参数、可变参数3种参数可以组合使用
    参数组合顺序:必选参数、默认参数、可变参数
    例如:

    def f1(a, b, c=0, *args):
    	print('a = ', a, 'b = ', b, 'c = ', c, 'args = ', args)
    
    f1(1, 2)
    f1(1, 2, c=3)
    f1(1, 2, 3, 'a', 'b')
    

(四)函数返回值

  1. 带有返回值的函数
    返回值:即程序中函数完成一件事情后,最后给调用者的结果
    带有返回值的函数:若要将函数结果返回,需要使用return
    例如:
    def cal(a, b):
    	c = a + b
    	return c
    
  2. 保存函数的返回值
    例如:
    python
    	# 定义函数
    	def cal(a, b):
    		return a + b
    	
    	# 调用函数,顺便定义一个变量保存函数的返回值
    	result = cal(100, 98)
    	
    	# result已经保存了cal的返回值,所以接下来就可以使用了
    	print(result)
    	
    	结果:
    	198
    
  3. 多个返回值
    函数中如果有多个return语句,只要有一个被执行到,函数就会结束
    def cal_nums():
    	print("---1---")
    	return 1
    	# 下面的代码不会执行,因为return有结束函数的功能
    	print("---2---")
    	return 2
    	print("---3---")
    	return 3
    
    return后面可跟元组,列表,字典等,一次性返回多个数据

(五)递归函数

  1. 递归函数:即函数在内部调用自己本身
    优点:定义简单,逻辑清晰
    缺点:过深的调用会导致栈溢出
    例如:
    def fact(n):
    	if n == 1:
    		return 1
    	return n * fact(n-1)
    
  2. 注意:
    1)可通过尾递归防止栈溢出。尾递归事实上和循环是等价的,没有循环语句的编程语言只能通过尾递归实现循环
    2)Python标准的解释器没有针对尾递归做优化,任何递归函数都存在栈溢出的问题

(六)局部变量与全局变量

  1. 全局变量
    全局变量:在函数外边定义的变量
    作用范围:能够在所有的函数中进行访问
    例如:
    # 定义全局变量
    money = 1200
    def test1():
    	print(money)
    # 虽然没有定义变量money但是可以使用全局变量money
    
    test1()
    
  2. 局部变量
    局部变量:在函数内定义的变量
    作用范围:只能在当前定义的函数中使用
    例如:
    def test2():
    	sales = 200 # 定义局部变量
    	print(sales)
    test2()
    print(sales)
    # 函数内部定义的局部变量,函数外面不能使用
    
  3. 注意:
    1)函数外面与函数里面,都能够使用全局变量,局部变量只能在函数内使用
    2)当全局变量与局部变量冲突时,函数内部听从局部变量
    3)函数内部修改全局变量,必须加global关键字,修饰全局变量

(七)捕获异常

  1. 捕获异常语句:try…except…finally
    例如:
    try:
    	print("try...")
    	r = 10 / 0
    	print("result:", r)
    except ZeroDivisionError as e:
    	print("except:", e)
    finally:
    	print("finally...")
    print("END")
    

四、Python面向对象

(一)面向对象编程

  1. 面向对象编程:简称OOP,把对象作为程序的基本单元
    面向过程的程序:计算机程序视为一系列命令集合
    面向对象的程序:计算机程序视为一组对象的集合
    1)Python中所有的数据类型都可视为对象
    2)面向对象是抽象出Class,根据Class创建Instance

(二)类和对象

  1. 对象:某一个具体事务的存在,可以直接使用
    类:将具有共同特征和行为的一组对象抽象定义为类
    对象和类的关系:
    1)类就是创建对象的模板
    2)一个类可以找到多个对象

  2. 定义类

    class Hero(object):
    # 类定义形式
    	def info(self):
    		print("hero")
    

    定义类:class 类名():
    1)object是Python里所有类的最顶级父类
    2)类名的命名规则按照“大驼峰命名法”
    3)info是实例方法,第一个参数一般是self,表示实例对象
    4)可以根据已经定义的类去创建出一个或多个对象

  3. 创建对象

    class Hero(object): # 类定义形式
    	def info(self):
    		print(self)
    		print("self各不同,对象是出处")
    
    # Hero这个类实例化了一个对象
    hero = Hero()
    # 对象调用实例方法info(),执行info()里的代码
    # . 表示选择属性或者方法
    hero.info()
    print(hero) # 打印对象
    

(三)对象的属性和方法

  1. 添加和获取对象的属性
    1)添加和获取对象的属性
    a. 类外部添加对象属性:对象名.属性名 = 值
    b. 类外部获取对象属性:对象名.属性名
    2)通过self获取对象属性
    a. 类内部添加对象属性:self.属性名 = 值
    b. 类内部获取对象属性:self.属性名

  2. init魔法方法
    1)__ init __ ()方法,创建对象时默认被调用,不需要手动调用
    2)__ init __(self)中的self参数,不需要开发者传递,Python解释器会自动把当前对象引用传递过去

    class Hero(object):
    	def __init__(self):
    		self.name = "hero" # 姓名
    		self.hp = 2600 # 生命值
    	def move(self):
    		print("正在前往事发地点...")
    # 实例化一个英雄对象,并自动调用__init__()方法
    hero = Hero() 
    

    3)一个类可以创建多个对象
    4)__ init __(self)中,默认1个参数名字self,若创建对象时传递了2个实参,除了self作为第一个形参外还需要2个形参
    5)若类中有多个对象,每个对象的属性是各自保存的,但实例方法是共享的,只占用一份内存空间
    6)类会通过self来判断是哪个对象调用了实例方法

(四)继承

  1. 简介
    继承:描述多个类之间的所属关系
    若类A里的属性和方法可以复用,可以通过继承的方式传递到类B里
    类A就是基类,也叫父类;类B是派生类,也叫子类

    class A(object): # 父类
    	def __init__(self):
    		self.num = 10
    	def print_num(self):
    		print(self.num + 10)
    class B(A): # 子类
    	pass
    
  2. 单继承
    单继承:子类只继承一个父类
    子类在继承的时候,在定义类时,小括号()中为父类的名字
    1)父类的属性、方法,会被继承给子类
    2)子类对象可以直接使用父类的属性和方法

  3. 多继承
    多继承:子类继承多个父类
    1)多继承可以继承多个父类,也继承了所有父类的属性和方法
    2)多个父类中,不重名的属性和方法,不会有任何影响

(五)多态

  1. 多态:不同的子类对象调用相同的父类方法,产生不同的执行结果
    优点:可以增加代码的外部调用灵活度
    1)多态以继承重写父类方法为前提
    2)多态是调用方法的技巧,不会影响到类的内部设计

(六)模块

  1. 简介
    模块:一个.py文件就是一个模块,模块是管理功能代码的
    自定义模块:根据业务需要,自行创建
    内置模块:Python内部自带的不需要下载的模块,例如:os模块、random模块、math模块、time模块

  2. math模块
    math模块作用:提供了许多对浮点数的数学运算函数
    查看math模块中的内容:
    1)import math
    2)dir(math)

  3. math模块常见属性及方法

    属性简述
    pi数学常数π
    e数学常数e
    tua数学常数2π
    inf正无穷大
    nan浮点数的NaN
    舍入运算简述
    ceil(x)返回x的向上舍入值
    floor(x)返回x的向下舍入值
    trunc(x)将x截为最接近于零的整数
    一般数学计算简述
    fabs(x)返回x的绝对值
    fsum(s)返回可迭代序列s中的和
    fmod(x, y)返回x % y,浮点数
    pow(x, y)乘方运算,返回x**y
    sqrt(x)返回x的平方根
    hypot(x, y)返回坐标点(x,y)到原点的几何距离
    factorial(x)返回x的阶乘
    三角函数简述
    sin(x)正弦函数
    cos(x)余弦函数
    tan(x)正切函数
    asin(x)反正弦函数
    acos(x)反余弦函数
    atan(x)反正切函数
    其他简述
    modf(x)返回元组形式的x的小数和整数部分
    frexp(x)返回元组形式的x的正浮点尾数和浮点指数
    remainder(x, y)返回x类似浮点数结构的尾数
    isinf(x)如果x是正无穷大,则返回True
    isfinite(x)如果x不是无穷大的数,则返回True
    isnan(x)如果x是浮点数的NaN,则返回True
    isclose(a, b)如果a和b足够接近,则返回True
  4. time模块
    作用:处理日期和时间
    1)time.time() 返回当前时间的时间戳
    2)time.sleep(secs) 推迟调用线程的运行,secs指秒数
    特别语法:延时运行

    import time
    print("hello")
    time.sleep(5)
    print("world")
    

五、Python爬虫基础

(一)爬虫基本认知

  1. 爬虫:请求网站并提取数据的自动化程序
  2. 爬虫的基本流程:
    1)发起请求:发送一个Request
    2)获取响应内容:得到一个Response,即要获取的页面内容
    3)解析内容:用正则表达式、网页解析库进行解析
    4)保存数据:可以存为文本,存至数据库,或者特定格式文件

(二)网页基本认知

  1. Request
    浏览器工作原理:浏览器发送消息给该网址所在的服务器,这个过程叫做 HTTP Request
    Request:是请求,在浏览器输入地址,按下回车键,就是一个请求
    1)请求方式:主要有get、post两种类型
    2)请求的URL:全称统一资源定位符(网址
    3)请求头:包含请求时的头部信息
    4)请求体:请求时额外携带的数据如表单提交时的表单数据

  2. Response
    Response:是响应,服务器根据请求,返回数据到浏览器显示,就是一个响应
    1)响应状态:有多种响应状态,如200代表成功、301跳转等
    2)响应头:如内容类型、服务器信息、设置Cookie等
    3)响应体:最主要的部分,包含了请求资源的内容

  3. 网页数据类型
    1)网页文本:如HTML文档、JSON格式的文本等
    2)图片:获取到的是二进制文件,保存为图片格式
    3)视频:获取到的是二进制文件,保存为视频格式

  4. 网页的解析方式
    1)直接处理
    2)JSON解析
    3)正则表达式
    4)BeautifulSoup
    5)PyQuery
    6)XPath

(三)网页构成

  1. 根元素

    标记符说明
    < doctype >定义文档类型
    < html >定义 HTML 文档
  2. 元数据元素

    标记符说明
    < head >定义关于文档的信息
    < meta >定义关于 HTML 文档的元数据
    < link >定义文档与外部资源之间的关系
    < base >定义页面上所有链接的默认地址或默认目标
    < title >定义文档标题
    < style >定义文档的样式信息
  3. 脚本元素

    标记符说明
    < script >定义客户端脚本
    < noscript >定义当浏览器不支持脚本的时候所显示的内容
  4. 块元素

    标记符说明
    < body >定义文档的主题
    < h1 >、< h2 >…< h6 >定义文档标题
    < p >定义文档段落
    < blockquote >定义块引用
    < ul >、< ol >、< dl >定义列表
    table定义表格
  5. 列表元素

    标记符说明
    < ul >定义无序的列表
    < li >定义列表项
    < ol >定义有序的列表
    < dl >定义定义列表
    < dt >定义定义术语
    < dd >定义定义描述
  6. CSS
    CSS:定义样式结构如字体、颜色、位置等的语言,用于描述网页上的信息格式化和显示的方式,可以直接存储于HTML网页或者单独的样式单文件
    1)内联方式:样式定义在单个的HTML元素中
    2)内部样式表:样式定义在HTML页的头元素中
    3)外部样式表:
    a. 将样式定义在一个外部的CSS文件中
    b. 由HTML页面引用样式表文件

  7. JS
    JS:是一种脚本语言,被广泛用于Web应用开发,常用来为网页添加动态功能,为用户提供更流畅美观的浏览效果
    1)JS代码能直接嵌入网页的任何地方
    2)可以把代码单独放在一个.js文件中,多个页面可以引用同一份.js文件
    3)浏览器会按照顺序执行这些JS代码
    4)JS语句以 ; 结尾,每个语句块以 {…},注释用//或/**/
    5)所有类型都是定义变量都是用var

(四)XPath的基本使用

  1. 简介
    XPath:是一门在XML文档中查找信息的语言。使用路径表达式来选取XML文档中的节点或节点集
    注意:XPath速度比较快,是爬虫在网页定位中较优选择,但是很多网页前端代码混乱,难以定位
    安装:pip install lxml

  2. 语法
    1)表达式

    表达式描述
    nodename选取此节点的所有子节点
    /从根节点选取路径的连接符
    //从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
    .选取当前节点
    选取当前节点的父节点
    @选取属性

    2)通配符

    通配符描述
    *匹配任何元素节点
    @*匹配任何属性节点
    node()匹配任何类型的节点

六、Python爬虫常用库

(一)BeautifulSoup库的基本使用

  1. BeautifulSoup:一个灵活又方便的网页解析库,处理高效,支持多种解析器
    安装:pip install bs4

(二)文件基础操作

  1. 文件读取
    文件读取:open()函数,传入文件名和标识符
    注意:
    1)如果文件不存在,open()函数就会抛出一个IOError的错误
    2)如果文件打开成功,调用read()方法一次性读取文件的全部内容
    3)最后调用close()方法关闭文件

  2. 文件的打开方式

    模式描述
    r以只读方式打开文件
    rb以二进制格式打开一个文件用于只读
    w打开一个文件只用于写入
    wb以二进制格式打开一个文件只用于写入
    a打开一个文件用于追加
    ab以二进制格式打开一个文件用于追加
  3. 字符编码
    要读取非UTF-8编码的文本文件,需要给open()函数传入encoding参数
    例如:

    f = open('/Users/gbk.txt', 'r', encoding='gbk')
    f.read()
    
  4. 写文件
    写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符 w 或者 wb 表示写文本文件或写二进制文件
    例如:

    f = open('/Users/text.txt', 'w')
    f.write("Hello, world!")
    f.close()
    

注意:以 w 模式写入文件时,如果文件已存在,会直接覆盖,可以传入 a 以追加模式写入到文件末尾

(三)JSON

  1. JSON:一种轻量级的数据交换格式,便于阅读和编写
    语法规则:
    1)数据在名称/值对中
    2)数据由逗号分隔
    3)花括号保存字典对象
    4)方括号保存数组

  2. JSON值
    JSON值可以是:
    1)数字(整数或浮点数)
    2)字符串(在双引号中)
    3)逻辑值(true或false)
    4)数组(在方括号中)
    5)对象(在花括号中)
    6)null(空)

  3. JSON模块
    通过Python的JSON模块,可以将字符串形式的json数据转化为字典,也可以将Python中的字典数据转化为字符串形式的json数据
    1)dumps 将 obj 数据类型转换为JSON格式的字符串
    2)loads 将包含str类型的JSON文档反序列化为一个Python对象

七、可视化Matplotlib

(一)认知Matplotlib

  1. 什么是Matplotlib
    Matplotlib是一个Python 2D绘图库,几行代码即可生成绘图,如直方图、条形图、散点图等

  2. 为什么要学习Matplotlib
    可视化是整个数据分析的关键辅助工具,可以清晰的理解数据,从而调整我们的分析方法
    1)能将数据进行可视化,更直观的呈现
    2)使数据更加客观、更具说服力

(二)常见图形种类及意义

  1. 折线图
    折线图:以折线的上升或下降来表示统计数量的增减变化的统计图
    特点:能够显示数据的变化趋势,反映事务的变化情况(变化)

  2. 散点图
    散点图:判断两变量之间是否存在某种关联或总结坐标点的分布模式
    特点:判断变量之间是否存在数量关联趋势,展示离群点(分布规律)

  3. 柱状图
    柱状图:排列在工作表的列或行中的数据可以绘制到柱状图中
    特点:绘制离散的数据,比较数据之间的差别(统计/对比)

  4. 直方图
    直方图:由一系列高度不等的纵向条纹或线段表示数据的分布情况
    特点:绘制连续性的数据展示一组或者多组数据的分布情况(统计)

  5. 饼图
    饼图:用于表示不同分类的占比情况,通过弧度大小来对比各种分类
    特点:分类数据的占比情况(占比)

(三)Matplotlib画图简单实现

  1. Matplotlib画图简单实现
    # 1. 导入Matplotlib模块
    import matplotlib.pyplot as plt
    # 2. 显示图形
    %matplotlib inline
    # 3. 绘制
    plt.plot([1,0,9], [4,5,6]) #(x, y)多个x,y坐标值通过列表的形式进行存储
    # 4. 显示
    plt.show()
    
    在这里插入图片描述

(四)折线图(plot)

  1. 折线图绘制及修饰
    1)折线图的绘制

    # 简单折线图
    from matplotlib import pyplot as plt
    %matplotlib inline
    # x坐标
    x = range(1,8)
    # y坐标
    y = [17,17,18,15,11,11,13]
    # plot
    plt.plot(x, y)
    

    在这里插入图片描述
    2)折线的颜色和形状设置

    # 修饰折线
    # color 颜色单词/十六进制色值
    # alpha 0-1 0:透明 1:不透明
    # linestyle=”--“   --虚线  -实线  -.  :
    # linewidth 宽度
    plt.plot(x, y, color="red", alpha=0.5, linestyle="--", linewidth=3)
    

    在这里插入图片描述
    3)折点样式

    # marker 折点
    # markersize 折点大小
    # markerfacecolor 折点中心颜色
    # markeredgecolor 折点边缘颜色
    # markeredgewidth 折点边缘宽度
    plt.plot(x, y, marker="o", markersize=10, markerfacecolor="red", markeredgecolor='orange', markeredgewidth=5)
    

    在这里插入图片描述
    4)设置图片的大小和保存

    # 图片保存
    import random
    x = range(2, 26, 2)
    y = [random.randint(10, 16) for i in x]
    # 设置图片的大小
    plt.figure(figsize=(20,8),dpi=80)
    plt.plot(x,y)
    plt.savefig("./t1.png")
    # show方法必须写在savefig方法后面
    plt.show()
    

    在这里插入图片描述
    5)绘制x轴和y轴的刻度

    # 设置x轴、y轴
    # 图片保存
    import random
    x = range(2, 26, 2)
    y = [random.randint(10, 16) for i in x]
    # 设置图片的大小
    plt.figure(figsize=(20,8),dpi=80)
    plt.plot(x,y)
    # x轴
    x_ticks_label = ["{}:00".format(i) for i in x]
    plt.xticks(x, x_ticks_label, rotation=45)
    # y轴
    y_ticks_label = ["{}℃".format(i) for i in range(min(y), max(y)+1)]
    plt.yticks(range(min(y), max(y)+1), y_ticks_label)
    plt.savefig("./t1.png")
    

    在这里插入图片描述

    6)设置显示中文
    7)一图多线

    import numpy as np 
    import matplotlib.pyplot as plt  
    from matplotlib import font_manager
    y1 = [1,0,1,1,0,1,0,1,0,2,0,3,4,3,2,2,1,2,3,4]
    y2 = [1,0,3,4,2,1,0,2,0,1,4,2,1,6,3,2,1,0,0,1]
    x = range(11,31)
    
    # ***设置字体格式*** MAC系统下设置
    plt.rcParams["font.family"] = ["Arial Unicode MS"] 
    
    # 控制字符可以正常显示
    plt.rcParams["axes.unicode_minus"] = False
    my_font = font_manager.FontProperties(fname="/System/Library/Fonts/Supplemental/Arial Unicode.ttf", size=10)
    plt.figure(figsize=(20,8),dpi=80)
    plt.plot(x, y1, label='你',color='red',zorder=20)
    plt.plot(x, y2,label='同事',color='green',zorder=2)
    plt.legend(prop=my_font,loc='upper right')
    plt.grid(alpha=0.4)
    xticks_label = ['{}岁'.format(i) for i in x]
    plt.xticks(x,xticks_label,fontproperties=my_font)
    plt.show()
    

    在这里插入图片描述

  2. 拓展
    1)一图绘制多个坐标系子图

    # 多个坐标系子图
    import numpy as np
    x =np.arange(1,100)
    
    fig = plt.figure(figsize=(20,8),dpi=80)
    # (2,2,1)先将x轴2等分,再将y轴2等分,按照顺序绘制多个子图
    ax1 = fig.add_subplot(2,2,1)
    ax1.plot(x,x)
    ax2 = fig.add_subplot(2,2,2)
    ax2.plot(x,x)
    ax3 = fig.add_subplot(2,2,3)
    ax3.plot(x,x)
    
    plt.show()
    

    在这里插入图片描述

    2)设置坐标轴范围

    # 坐标轴
    y = np.arange(-10,11,1)
    z = y**2
    plt.plot(y,z)
    # plt.xlim([-5,5])
    # plt.ylim([0,80])
    plt.xlim(xmin=-4)
    plt.show()
    

    在这里插入图片描述
    3)改变坐标轴的默认显示方式

    # 坐标轴显示方式
    x = [-3,-2,-1,0,1,2,3]
    y = range(0,14,2)
    
    ax = plt.gca()
    ax.spines['right'].set_color('none')
    ax.spines['top'].set_color('none')
    ax.spines['bottom'].set_color('red')
    ax.spines['left'].set_color('green')
    
    # 坐标轴相交于原点
    ax.spines['bottom'].set_position(('data',0))
    ax.spines['left'].set_position(('data',0))
    plt.plot(x,y)
    plt.show()
    

    在这里插入图片描述

(五)散点图(scatter)

  1. 绘制散点图
    """
    3月份每天最高气温
    a = [11,17,16,11,12,11,12,6,6,7,8,9,12,15,14,17,18,21,16,17,20,14,15,15,15,19,21,22,22,22,23]
    """
    plt.figure(figsize=(20,8),dpi=80)
    x = range(1,32)
    y = [11,17,16,11,12,11,12,6,6,7,8,9,12,15,14,17,18,21,16,17,20,14,15,15,15,19,21,22,22,22,23]
    _xticks_label = ["3月{}日".format(i) for i in x]
    plt.xticks(x[::3], _xticks_label[::3], fontproperties=my_font)
    plt.scatter(x,y)
    plt.show()
    
    在这里插入图片描述

(六)条形图(bar)

  1. 纵向条形图

    # 纵向条形图
    """
    http://58921.com/alltime
    假设你获取到了2019年内地电影票房前20的电影(列表a)和电影票房数据(列表b),请展示该数据
    a = ['流浪地球','疯狂的外星人','飞驰人生','大黄蜂','熊出没·原始时代','新喜剧之王']
    b = ['38.13','19.85','14.89','11.36','6.47','5.93']
    """
    a = ['流浪地球','疯狂的外星人','飞驰人生','大黄蜂','熊出没·原始时代','新喜剧之王']
    b = ['38.13','19.85','14.89','11.36','6.47','5.93']
    plt.figure(figsize=(20,8),dpi=80)
    # x轴位置
    # y轴数据大小
    # 宽度
    # 颜色
    reacts = plt.bar(range(len(a)), [float(i) for i in b], width=0.3, color=['r','g','b'])
    plt.xticks(range(len(a)), a, fontproperties=my_font)
    plt.yticks(range(0,41,10),range(0,41,10))
    # 显示数据标签
    for react in reacts:
        height = react.get_height()
        plt.text(react.get_x()+react.get_width()/2, height+0.5, str(height), ha='center')
    plt.show()
    

    在这里插入图片描述

  2. 横向条形图

    # 横向条形图
    """
    http://58921.com/alltime
    假设你获取到了2019年内地电影票房前20的电影(列表a)和电影票房数据(列表b),请展示该数据
    a = ['流浪地球','疯狂的外星人','飞驰人生','大黄蜂','熊出没·原始时代','新喜剧之王']
    b = ['38.13','19.85','14.89','11.36','6.47','5.93']
    """
    a = ['流浪地球','疯狂的外星人','飞驰人生','大黄蜂','熊出没·原始时代','新喜剧之王']
    b = ['38.13','19.85','14.89','11.36','6.47','5.93']
    plt.figure(figsize=(20,8),dpi=80)
    # x轴位置
    # y轴数据大小
    # 宽度
    # 颜色
    reacts = plt.barh(range(len(a)), [float(i) for i in b], height=0.3, color=['r','g','b'])
    plt.yticks(range(len(a)), a, fontproperties=my_font)
    plt.xticks(range(0,41,10),range(0,41,10))
    # 显示数据标签
    for react in reacts:
        width = react.get_width()
        plt.text(width+0.5, react.get_y()+0.15, str(width), va='center')
    plt.show()
    

    在这里插入图片描述

  3. 并列条形图

    # 并列条形图
    index = np.arange(4)
    BJ = [50,55,53,60]
    SH = [44,65,55,41]
    plt.bar(index,BJ,width=0.3)
    plt.bar(index+0.3,SH,width=0.3)
    plt.xticks(index+0.3/2, index)
    plt.show()
    

    在这里插入图片描述

  4. 罗列条形图(堆积条形图)

    #罗列条形图(堆积条形图)
    index = np.arange(4)
    BJ = [50,55,53,60]
    SH = [44,65,55,41]
    plt.bar(index,BJ,width=0.3)
    plt.bar(index,SH,bottom=BJ,width=0.3)
    plt.show()
    

    在这里插入图片描述

(七)直方图(hist)

  1. 绘制直方图
    '''
    现有250部电影的时长,希望统计出这些电影时长的分布状态(比如时长为100分钟到120分钟电影的数量,出现的频率)等信息,你应该如何呈现这些数据?
    '''
    # 1)准备数据
    time = [131,  98, 125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 107, 114,
            119, 128, 121, 142, 127, 130, 124, 101, 110, 116, 117, 110, 128, 128, 115,  99, 
            136, 126, 134,  95, 138, 117, 111,78, 132, 124, 113, 150, 110, 117,  86,  95, 144, 
            105, 126, 130,126, 130, 126, 116, 123, 106, 112, 138, 123,  86, 101,  99, 136,123,
            117, 119, 105, 137, 123, 128, 125, 104, 109, 134, 125, 127,105, 120, 107, 129, 
            116, 108, 132, 103, 136, 118, 102, 120, 114,105, 115, 132, 145, 119, 121, 112,
            139, 125, 138, 109, 132, 134,156, 106, 117, 127, 144, 139, 139, 119, 140,  83,
            110, 102,123, 107, 143, 115, 136, 118, 139, 123, 112, 118, 125, 109, 119, 133,112,
            114, 122, 109,  106, 123, 116, 131, 127, 115, 118, 112, 135,115, 146, 137, 116,
            103, 144,  83, 123, 111, 110, 111, 100, 154,136, 100, 118, 119, 133, 134, 106,
            129, 126, 110, 111, 109, 141,120, 117, 106, 149, 122, 122, 110, 118, 127, 121,
            114, 125, 126,114, 140, 103, 130, 141, 117, 106, 114, 121, 114, 133, 137,  92,121, 
            112, 146,  97, 137, 105,  98, 117, 112,  81,  97, 139, 113,134, 106, 144, 110,
            137, 137, 111, 104, 117, 100, 111, 101, 110,105, 129, 137, 112, 120, 113, 133,
            112,  83,  94, 146, 133, 101,131, 116, 111,  84, 137, 115, 122, 106, 144, 109,
            123, 116, 111,111, 133, 150] 
    # 2)画布
    plt.figure(figsize=(20,8),dpi=80)
    
    # 3)绘图
    # 组距
    distance = 2
    # 组数
    group_num = int((max(time)-min(time))/distance)
    # time 数据
    # bins 分组
    plt.hist(time,bins=group_num)
    plt.xticks(range(min(time),max(time))[::2])
    plt.grid(linestyle='--',alpha=0.5)
    plt.show()
    
    在这里插入图片描述

(八)饼图(pie)

  1. 绘制饼图
    # 标签
    label_list = ['第1部分','第2部分','第3部分']
    # 数据
    size = [55,35,10]
    # 颜色
    color = ['red','green','blue']
    # 突出显示
    explode = [0,0.05,0]
    
    # size 大小
    # explode 是否突出显示
    # colors 颜色
    # labels 标签
    # labeldistance 标签距离圆心位置
    # autopct="%1.1f%%" 数据显示形式
    # shadow 阴影
    
    # pathes 扇形列表
    # l_text 标签列表
    # p_text 扇形百分比列表
    plt.figure(figsize=(20,8),dpi=80)
    pathes, l_text, p_text = plt.pie(size,explode=explode,colors=color,labels=label_list,labeldistance=1.1,autopct="%1.1f%%",shadow=True)
    for i in l_text:
        i.set_fontproperties(my_font)
    for j in p_text:
        i.set_size(18)
    # 颜色这里可以无需再次设置
    # for j in pathes:
    #     j.set_color('pink')
    #     break
    plt.show()
    
    在这里插入图片描述

八、NumPy数据处理

(一)NumPy认知

  1. NumPy优点:快速、方便,科学计算的基础库
  2. NumPy优势:
    1)计算数值时,NumPy比直接编写Python代码便捷得多
    2)NumPy比纯Python代码高效得多

(二)NumPy的Ndarray对象

  1. N维数组对象:是一系列同类型数据的集合,以0下标为开始进行集合中元素的索引
  2. Ndarray对象:用于存放同类型元素的多维数组
  3. 知识点
    1)创建一维数组
    2)创建二维数组
    3)将数组转成list
    4)常用属性
    5)调整数组的形状
    6)NumPy的数据类型
    7)数组的索引和切片
    8)数组中的数值修改

(三)数组中的轴

  1. 轴:在NumPy中可以理解为方向

  2. 学习轴的优点:便于计算

(四)数组的计算

  1. 数组和数的计算
    运算规则:array * 2

  2. 数组与数组之间的计算
    1)行形状相同
    运算规则:array1 - array2
    2)列形状相同
    运算规则:array1 - array2

  3. NumPy的计算方法

    函数函数说明
    numpy.max()最大值
    numpy.min()最小值
    numpy.mean()平均值
    numpy.argmin()最小值索引
    numpy.var()方差
    numpy.std()标准差
    numpy.ptp()极差
    numpy.cov()相关性矩阵
    numpy.corrcoef()协方差矩阵
    numpy.sqrt()平方根

(五)数组操作

  1. 数组添加、删除和去重
    1)数组的添加
    a. numpy.append 函数在数组的末尾添加值
    b. numpy.insert 在给定索引之前插入值
    2)数组的删除
    numpy.delete 返回删除指定子数组的新数组
    3)数组去重
    numpy.unique 去除数组中的重复元素

  2. 数组的拼接
    1)轴连接:numpy.concatenate()
    a. 纵向连接,列数相同即可
    b. 横向连接,行数相同即可
    2)堆叠:numpy.stack()
    a. 矩阵垂直拼接 numpy.vstack()
    b. 矩阵水平拼接 numpy.hstack()

  3. 数组的分割
    numpy.split(arr,n):将一个数组分割为n个子数组
    1)沿着水平轴分割 numpy.hsplit()
    2)沿着垂直轴分割 numpy.vsplit()

(六)数组中的nan和inf

  1. 数组中的nan和inf
    1)nan:缺失数据
    2)inf:无穷大

    # 创建一个nan和inf
    a = np.nan
    b = np.inf
    print(a, type(a))
    print(b, type(b))
    
  2. 当数据量较大时,若有空值,可以直接删除;当数据量较小时,可以将nan以0或者平均值替换

  3. 数组中任意一个nan值都是不相等的(可根据这一点判断数组中是否存在空值)

(七)二维数组的转置

  1. 对换数组的维度
    np.transpose(a)
  2. 转置
    a.T
  3. 调用swapaxes函数用于交换数组的两个轴
    a.swapaxes(1,0)

九、Pandas数据处理

(一)Pandas简介

  1. Pandas:基于NumPy的一种工具,纳入了大量库和一些标准的数据模型,提供了高效的操作大型数据集所需的工具

(二)Series对象

  1. Series的创建
    Series:一维数组
    Series能为数据自定义标签,即索引
    创建Series对象:
    se1 = Series(data = [1,2,3,4], index = list('abcd'))
    print(sel)
    
  2. Series对象常用操作
    1)Series对象同时支持位置和标签两种方式获取数据
    se1 = Series(data = [1,2,3,4], index = list('abcd'))
    print('标签下标', sel[['a', 'c']])
    print('位置下标', sel[[1, 3]])
    
    2)Series对象可以使用切片获取数据
    3)重新指定索引
    4)Drop()丢弃指定轴上的项
    5)算数运算
    6)NumPy数组运算方法

(三)DataFrame对象

  1. DataFrame的创建
    DataFrame:2维数据结构,数据以表格的形式存储
    三个参数:data(数据) index(行索引)columns(列索引)
    创建DataFrame:
    1)使用二维数组
    2)使用字典创建
    3)使用from_dict

  2. DataFrame对象常用属性及方法

    属性说明
    df.shape获取行数和列数
    df.index.tolist()获取行索引
    df.columns.tolist()获取列索引
    df.dtypes获取数据的类型
    df.ndim获取数据的维度
    df.info()展示df的概览
    df.head()显示头几行,默认显示5行
    df.tail()显示后几行,默认显示5行
  3. DataFrame修改index、columns
    1)DataFrame.index = [newName]
    2)DataFrame.columns = [newName]
    3)DataFrame.rename()

  4. DataFrame数组操作
    1)插入数据:df.insert(iloc,column,value)
    a. iloc:要插入的位置
    b. column:列名
    c. value:值
    2)删除数据:df.drop(lables,axis=0/1,inplace=True/False)
    a. lables:要删除数据的标签
    b. axis:0表示删除行,1表示删除列,默认0
    c. inplace:是否在当前df中执行此操作

(四)数据处理

  1. 数据清洗
    1)过滤缺失值:dropna()
    2)填充缺失值:fillna()
    3)判断重复值:duplicated()
    4)移除重复值:drop_duplicates()

(五)数据合并

  1. 数据合并
    数据合并:join、merge和concat三种方法
    连接:左连接、右连接、内连接、外连接

    方法方法说明
    joindf1.join(df2,how=‘left’)
    mergepd.merge(df1,df2)
    concatpd.concat([df1,df2])

(六)多层索引

  1. 创建多层索引
    1)Series创建多层索引
    2)DataFrame创建多层索引

  2. 多层索引对象的获取
    1)loc()
    2)iloc()

(七)时间序列

  1. 时间序列
    生成一段时间范围:必须指定start、end、periods中两个参数

    date = pd.date_range(start='20190501',end='20190530')
    date = pd.date_range(start='20190501',periods=10)
    print(date)
    

    1)Freq:日期偏移量
    2)Periods:固定时期
    3)closed=None,left含开始不含结束,right与之相反
    过滤指定日期之前或之后的值:truncate函数

    时间序列频率说明
    D日历日的每天
    B工作日的每天
    H每小时
    T/min每分钟
    S每秒
    L/ms每毫秒
    U每微秒
  2. 时间序列在DataFrame中的操作
    1)根据年份/年月获取数据
    2)使用切片
    3)移位日期
    4)转化时间戳
    5)处理中文

(八)分组聚合

  1. 分组:groupby()

  2. 聚合

    聚合函数函数说明
    mean分组平均值
    count分组中非NaN值的数量
    sum非NaN值的和
    median非NaN值的算术中位数
    std标准差
    var方差
    min非NaN值的最小值
    max非NaN值的最大值
    prod非NaN值的积
    first第一个非NaN值
    last最后一个非NaN值
    mad平均绝对偏差
    mode
    abs绝对值
    sem平均值的标准误差
    quantile样本分位数(百分位上的值)
    cumsum累积总和
    cumprod累积乘积
    cummax累积最大值
    cummin累积最小值
  • 4
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值