第三周:Python能力复盘

前言:之前在读研究生的时候系统学习了Python全栈的内容,沉淀了专栏【Python全栈】,如今看文章阅读量都达到了将近10万,还是小有震撼,打算一周的时间,精细的回顾基础和粗略的回顾应用,基础还是在的,只不过时间久了手生了!虽然自己之前有写过100多篇文章(有的可能是直接看完了粘过来的),anyway还是找了一些简明扼要的资料快速唤醒!毕竟之前雪Python全栈那是小白硬啃,其他的没记住,就记住当时很痛苦的坚持下来了。
在这里插入图片描述

附上资料

  1. Python基础:学习资料
  2. 通信和爬虫:学习链接
  3. 《numpy与pandas基础》:学习链接
  4. 《matplotlib绘图可视化知识点整理》http://t.cn/RqDxDo8
  5. 工具anaconda:http://t.cn/RW92Dcn

基础功能

  • 数据类型和变量:整数、浮点数、字符串、转义字符(\、\n、\t…)、布尔值(and、or、not…)、空值(NULL)、变量、常量;
  • 字符串和编码:字符串(ASCII、Unicode、UTF-8…)、格式化(%d、%f、%s、%x…)、format(‘Hello, {0}, 成绩提升了 {1:.1f}%’.format(‘小明’, 17.125))、f-string(f“my number is{num:.2f}”)
  • 列表lists:c1 = [‘Michael’, 1, A],值c1[2],追加append(“be”),insert(1,B),删除pop(3),修改c1[2] = 23,多维c2 = [‘s1’,1,D,[2,“like”]]
  • 元组tuple:定义后不可改变,即不可增加、插入、修改,tuples = (1,2,3,[“he”,4])
    ,tuples[3][1] 输出4
  • 条件判断:if … elif … else …,注意点①冒号;②从上往下判断,满足即跳出;
height = 1.75
weight = 80.5
BMI = weight/height*height
print(BMI)
if BMI<18.5:
    print("too light")
elif 18.5< BMI <20:
    print("正常")
else:
    print("OK")
  • 模式匹配:
score = 'B'
match score:
    case 'A':
        print('score is A.')
    case 'B':
        print('score is B.')
    case 'C':
        print('score is C.')
    case _: # _表示匹配到其他任何情况,类似于 C 和 Java 中的default:
        print('score is 其他.')
  • 循环:for x in… 、while循环、break跳出循环、while跳出当前循环
	name = ["zxx","djw","zy"]
    for x in name:
        print(x)
        if x=="djw":
            break #跳出循环

    number = 10
    while number<100:
        print("too small")
        number = number+1
        if number%2==0:
            continue #跳出当前循环
        print(number)
  • dict和set: dict字典(key:value):x in…查看字典中是否存在x、pop删除; set集合(key):add(key)、remove(key),无序无重复元素;
    在这里插入图片描述

进阶功能

  • 函数:https://docs.python.org/3/library/functions.html
  • 定义函数:def 函数名(参数):函数体,函数值用return 返回
  • 函数参数:在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
# a,b是必选参数,c是默认参数
# *args是可变参数,args接收的是一个tuple;
# **kw是关键字参数,kw接收的是一个dict。
# 命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数。
def f1(a, b, c=0, *args, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)

>>> f1(1, 2)
a = 1 b = 2 c = 0 args = () kw = {}
>>> f1(1, 2, c=3)
a = 1 b = 2 c = 3 args = () kw = {}
>>> f1(1, 2, 3, 'a', 'b')
a = 1 b = 2 c = 3 args = ('a', 'b') kw = {}
>>> f1(1, 2, 3, 'a', 'b', x=99)
a = 1 b = 2 c = 3 args = ('a', 'b') kw = {'x': 99}

def f2(a, b, c=0, *, d, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)

>>> f2(1, 2, d=99, ext=None)
a = 1 b = 2 c = 0 d = 99 kw = {'ext': None}
  • 递归函数:在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
  • 切片:name[start : stop: step],支持字符串、tuple和list,取值方式,eg:a[:3]、b[1:5]、c[-2:]
    迭代:for…in…,可以遍历任何可迭代序列的项目,如列表、字符串、字典、字符串等
  • 列表生成式:[表达式 for 变量 in 列表 if 条件],eg:偶数的平方[x **2 for x in range(1, 11) if x % 2 == 0]
  • [x]生成器:使用了yield函数,一边循环一边计算,保存的是算法,一般采用for循环读取,不用next(),eg:(x **2 for x in range(1, 11) if x % 2 == 0)

generator函数和普通函数的执行流程不一样。普通函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。

generator保存的是算法,每次调用next(),就计算出下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。

  • 迭代器:

小结:可以直接作用于for循环的数据类型有以下几种:一类是集合数据类型,如list、tuple、dict、set、str等;一类是generator,包括生成器和带yield的generator
function。这些可以直接作用于for循环的对象统称为可迭代对象:Iterable。可以使用isinstance()判断一个对象是否是Iterable对象:凡是可作用于for循环的对象都是Iterable类型;凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。

面向对象编程

  • 类和实例(对象):对象名 = 类名(参数列表)
  • 访问限制
  • 实例属性和类属性:实例属性(对象所有,互不干扰);类属性(类所有,所有对象共享)
class Student(object): #类:创建实例的模板
    def __init__(self, name, score,gender): #①构造方法:初始化对象;②封装
        self.name = name #公有属性
        self.score = score
        self._gender = gender # 私有属性:双下划线,访问限制
    
    height = 100
    def get_gender(self):
        return self.__gender
     
    def set_gender(self, gender):
        self.__gender = gender

    def get_grade(self): #函数
        if self.score >= 90:
            return 'A'
        elif self.score >= 60:
            return 'B'
        else:
            return 'C'
stu1 = Student("zhuxiaoxia",100,"nv")
stu1.set_gender("nan")
print(stu1.name) #公有属性访问
print(stu1.get_grade())
print(stu1.get_gender())#私有属性访问
  • 继承、多继承:通过继承的机制,可使得子类轻松的拥有父类中的属性和方法。继承也是一种代码复用的方式,继承的类叫做子类或派生类,被继承的类叫做父类或基类。
  • 方法覆盖&方法重载:当方法名与参数列表都一样时会发生方法覆盖;当方法名一样,参数列表不一样时,会发生方法重载。
  • 多态:多态从字面上理解就是一个事物可以呈现多种状态。继承是多态的基础。见案例:https://zhuanlan.zhihu.com/p/156737414
  • 其他:装饰器等

通信与爬虫

策略:以之前学习的【Python全栈】为主,增加1-2个实操案例

在这里插入图片描述

  • 爬虫基础:
    • 使用Python的HTTP库(如Requests)发送HTTP请求。
    • 解析HTML内容,通常使用HTML解析库(如Beautiful Soup)。
    • 使用正则表达式来处理和提取文本数据。
  • 数据存储:
    • 学习如何将爬取的数据保存到不同类型的数据存储中,如文本文件、CSV、Excel、数据库等。
  • 数据清洗和处理:
    • 数据爬取后可能需要进行清洗和处理,以确保数据质量和一致性。
  • 反爬虫技术:
    • 了解常见的反爬虫机制,如IP封锁、User-Agent检测、验证码等,并学会如何规避这些机制。
  • 框架和库:
    • 探索使用Web爬虫框架(如Scrapy)和其他Python库来加速开发和提高效率。
  • 案例 1:爬取HTML保存或图片下载
#/usr/bin/env.python
import requests  #发请求
import os   
from bs4 import BeautifulSoup #解析数据:beautifulsoup是一个解析器,可以特定的解析出内容,省去了我们编写正则表达式的麻烦
import csv #保存数据

def getHtml(url):
    try:
        ua = {'user-agent':'Mozilla/5.0'} #来源审查
        r = requests.get(url,headers = ua,timeout=30)     # r = requests.get(url,params=None,**kwargs)
        print(r.request.headers)
        r.raise_for_status                   #如果不是200,产生异常request.HTTPError
        r.encoding =r.apparent_encoding      #从内容分析出的响应内容编码方式(备选编码方式)
        return r.text[:100]
    except:
        return "wrong"
    
def getPhotos(root,url):
    #1 创建保存的位置
    path = root + url.split('/')[-1]
    try:
        if not os.path.exists(root):
            os.mkdir(root)
        if not os.path.exists(path):
    #2 获取图片
            r =requests.get(url)
    #3.保存图片
            with open(path,'wb') as f:
                f.write(r.content)
                f.close
                print('saved')
        else:
            print('not saved')
    except:
        print('wrong!')
    
    
print(__name__)  #会输出__main__
    
if __name__ == "__main__":   #“__name__”是Python的内置变量,用于指代当前模块,仅模块为当前模块执行,解释:https://zhuanlan.zhihu.com/p/340997807
    url1 ="http://www.baidu.com"
    print(getHtml(url1))

    root = 'D://'
    url2 = "https://b-ssl.duitang.com/uploads/item/201501/01/20150101084426_sVcze.thumb.700_0.jpeg"
    print(getPhotos(root,url2))

    soup = BeautifulSoup(getHtml(url1),"html.parser")  #soup=beautifulsoup(解析内容,解析器);常用解析器:html.parser,lxml,xml,html5lib
    print(soup.prettify("gbk")) #打印整个 html 文件的 dom 树

  • 案例 2:爬取高校排名
# /usr/bin/env.python
# -*- coding:utf-8 -*-

import requests
from bs4 import BeautifulSoup
import bs4
import sys

#1.获取网页信息
def getHtmlText(url):
    try:
        r = requests.get(url,timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return ""
    
#2 提取信息到数据结构
def fillUnivList(ulist,html):
    soup = BeautifulSoup(html,"html.parser")
    for tr in soup.find('tbody').children:
        if isinstance(tr,bs4.element.Tag):
            tds = tr('td')
            ulist.append([tds[0],tds[1],tds[2]])
    return ulist

#利用数据结构展示并输出结果
def printList(ulist,num):
    print("{:^10}\t{:^10}\t{:^10}\t".format("排名","学校","总分"))
    for i in range(num):
        u = ulist[i]
        print("{:^10}\t{:^10}\t{:^10}\t".format(u[0].text,u[1].text,u[2].text)) #u[x]是个Tag对象,需要通过.text来获取文本内容
if __name__ == "__main__":
    url = "https://www.shanghairanking.cn/rankings/bcur/2023"
    txt = getHtmlText(url)
    #print(txt)
    lists = []
    fillUnivList(lists,txt)
    #print(lists)
    printList(lists,5)

Python数据分析 :Numpy和Pandas

几个总结性的资料:

  1. https://zhuanlan.zhihu.com/p/639733816
  2. https://blog.csdn.net/wuyoudeyuer/article/details/131532383
  3. https://zhuanlan.zhihu.com/p/30132591
  4. https://blog.csdn.net/weixin_41168304/article/details/123384713

概念说明

  • 相同点
  • Numpy和Pandas都是Python的第三方库,用于数据处理和分析。
  • 都提供了高效的数据结构和函数,可以处理大规模数据。
  • 都支持向量化操作,可以对整个数组或数据框进行快速计算。
  • 都具有广泛的功能和方法,可以进行数据的读取、转换、筛选、聚合等操作。
  • 差异点
  1. 应用不同
  • Numpy主要用于数值计算和科学计算,提供了多维数组对象(ndarray)和相关的数学函数;
  • Pandas更适用于数据处理和分析,提供了数据框(DataFrame)和序列(Series)等数据结构;
  1. 操作不同
    Numpy的操作更底层,更适合进行数值计算和数组操作;
    而Pandas提供了更高级的数据操作和分析功能,例如数据的合并、重塑、分组、透视等;

  2. 性能不同
    Numpy的性能更高,适用于处理大规模的数值计算;
    而Pandas的性能相对较低,但更适合处理结构化的数据和进行数据分析。

细节对比

1. 相同点:

通用函数(ufunc): 一种对ndarray中的数据执行元素级运算的函数。对pandas中的Series和DataFrame也适用。

一元ufunc: abs, sqrt, square, exp, log, sign, isnan, ceil, floor, rint, modf, isfinit, isinf, cos, cosh, sin, sinh, tan, tanh,…
用法:np.abs(arr)

二元ufunc:add, substract, multiply, divide, floor_divide, power, maximum, minimum, mod, copysign, greater, greater_equal, less, less_equal, equal, not_equal, logical_and, logical_or
用法:np.add(arr1, arr2)

2. 不同点
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

应用场景

1. Numpy应用场景

  • 数值计算:numpy 提供了高效的数组运算方法,可以处理包含大量数字的数据集,比如矩阵运算、向量运算、数组加减乘除等等。

  • 科学计算:numpy 提供了大量的方法和函数,用于处理科学计算相关的数据,比如数据可视化、积分、微分、信号处理等等。

  • 机器学习:numpy 提供了大量的方法和函数,用于处理机器学习相关的数据,比如神经网络模型训练、自编码器、条件随机场等等。

  • 图像处理:numpy 提供了大量的方法和函数,用于处理图像相关的数据,比如图像滤波、图像变换、图像分割等等。

  • 科学数据分析:numpy 提供了大量的方法和函数,用于处理科学数据相关的数据,比如天文学、物理学、地球科学等等。

2. Pandas 应用场景

  • 数据分析:pandas 提供了大量的方法和函数,用于处理数据的不同方面,比如数据读取、数据过滤、数据分组、数据排序、数据汇总、数据分析等等。

  • 金融分析:pandas 提供了大量的方法和函数,用于处理金融数据相关的数据,比如股票数据分析、债券数据分析、期货数据分析等等。

  • 商业智能:pandas 提供了大量的方法和函数,用于处理商业数据相关的数据,比如销售数据分析、客户数据分析、市场数据分析等等。

  • 数据可视化:pandas 提供了大量的方法和函数,用于处理数据可视化相关的数据,比如图表绘制、数据地图生成等等。

  • 人工智能:pandas 提供了大量的方法和函数,用于处理人工智能相关的数据,比如自然语言处理、图像识别、语音识别等等

  • 数据结构不同:Numpy的数据结构是多维数组,适用于处理数值型数据;而Pandas的数据结构更灵活,可以处理不同类型的数据,包括数值型、字符串型、时间序列等;

Python可视化 :Matplotlib

Matplotlib 通常与 NumPy 和 SciPy(Scientific Python)一起使用, 这种组合广泛用于替代 MatLab,是一个强大的科学计算环境,有助于我们通过 Python 学习数据科学或者机器学习。SciPy 是一个开源的 Python 算法库和数学工具包。SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。

这里回顾一下matplotlib的结构,有助于理解这个工具的使用:
在这里插入图片描述

  1. 容器层:
  • Canvas(画板)
  • Figure(画板)
  • Axes(绘图区);
  1. 辅助显示层:Axes内除了数据绘制图像外的内容;
    在这里插入图片描述
  2. 图像层:Axes内根据数据绘制出的图像
    在这里插入图片描述

该部分的内容我大概画了几个基础的图,可以观察Excel的图标都包含哪些元素,结合我们Excel作图的步骤,程序化代码即可。
在这里插入图片描述

此外:有个工具网站可以快速查阅用法:https://www.runoob.com/matplotlib/matplotlib-zh.html
在这里插入图片描述

关注市场动态

  • 16
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

女王の专属领地

您的鼓励是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值