Python入门学习(二)
一、Python基础知识
1.函数
(1)介绍函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
(2)规则函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
函数内容以冒号 : 起始,并且缩进。
return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None。
(3)语法Python 定义函数使用 def 关键字,一般格式如下:
def <函数名>(<参数(0个或多个)>): <函数体> return <返回值>(4)案例
【微实例】自定义函数并打印Hello World!
def hello() : print("Hello World!")hello()运行结果:
【微练习】通过定义函数的方式比较两个数,并返回较大的数。
2.面向对象
(1)什么是面向对象面向对象是一种编程范式,它将程序中的数据和操作封装在一个对象中,从而使得程序更加模块化、可重用和易于维护。在面向对象编程中,对象是类的实例化,类是一种抽象的数据类型,它定义了一组属性和方法。
面向对象编程的核心思想是封装、继承和多态。
①封装是将数据和操作封装在一个对象中,隐藏对象的内部实现细节,只暴露必要的接口给外部访问。
②继承是通过继承父类的属性和方法,来创建一个新的子类,子类可以重写父类的属性和方法,从而实现更加灵活的功能。
③多态是指同一个方法可以根据不同对象的实现方式,实现不同的行为。
(2)面向对象中的类在Python中,类是面向对象编程的核心概念之一。通过类,我们可以创建对象,定义对象的属性和方法,并对对象进行操作和交互。类的定义通过关键字class进行,具体语法如下:
class ClassName: # 类的属性和方法定义 pass在类的定义中,可以包含类的属性和方法。属性是类的数据成员,用于存储对象的状态信息;方法是类的函数成员,用于定义对象的行为和操作。
下面是一个示例,展示了一个简单的Person类的定义:
class Person: def __init__(self, name, age): self.name = name self.age = age def greet(self): print(f"你好, 我的名字叫{self.name}。我今年{self.age}岁了!!!")在上面的示例中,Person类有两个属性:name和age,并且有一个greet方法用于打招呼。_ init _方法是一个特殊的方法,用于在创建对象时进行初始化操作。
通过类,我们可以创建对象并访问对象的属性和调用方法:
person = Person("张三", 25)print(person.name) # 输出:张三print(person.age) # 输出:25person.greet() # 输出:你好, 我的名字叫张三。我今年25岁了!!!运行结果:
除了定义属性和方法,类还可以进行继承,通过继承可以创建子类,子类可以继承父类的属性和方法,并且可以添加自己的属性和方法。继承可以实现代码的重用和扩展。
总结:类是面向对象编程的基本构建块,通过定义类,我们可以创建对象并对其进行操作。类可以包含属性和方法,通过继承可以实现代码的重用和扩展。
(3)面向对象中的对象在Python面向对象编程中,对象的创建包括以下几个步骤:
定义类:首先需要定义一个类,类是对象的模板,用于描述对象的属性和方法。
实例化对象:通过类来创建对象的过程称为实例化。在实例化时,会调用类的构造方法(_ init _方法)来进行对象的初始化。
分配内存空间:在实例化时,系统会自动为对象分配内存空间。
初始化属性:通过构造方法,在对象中初始化属性的值。可以在构造方法中接收参数,并将其赋值给对象的属性。
返回对象引用:对象创建完成后,会返回对象的引用,可以将其保存在变量中,以便后续使用。
下面是一个简单的示例,展示了对象的创建过程:
class Person: def __init__(self, name, age): self.name = name self.age = ageperson = Person("张三", 25)在上面的示例中,通过Person类创建了一个名为person的对象。在实例化时,会自动调用Person类的构造方法_ init _,并传入参数"张三"和25。构造方法将这些参数赋值给对象的属性name和age。
通过对象引用person,我们可以访问和操作对象的属性:
print(person.name) # 输出:张三print(person.age) # 输出:25我们可以创建多个对象,每个对象都拥有自己的属性和方法。对象的创建过程允许我们根据类的定义来构造具体的实例,并在实例化时进行个性化的初始化操作。
(4)属性和方法在Python的面向对象编程中,类可以定义属性和方法,用于描述对象的特征和行为。
①属性
属性是类中定义的变量,用于存储对象的状态或特征。在类的内部,可以通过self关键字来引用对象的属性。在类的外部,可以通过对象来访问属性。
类的属性可以分为两种类型:实例属性和类属性。
实例属性:实例属性属于特定对象的属性,每个对象都有自己的实例属性副本。它们在类的实例化过程中被初始化,并通过 self 参数来访问和操作。实例属性通常在类的构造方法(_ init _)中定义。
类属性:类属性属于整个类的属性,所有类的实例共享相同的类属性。它们在类的定义中直接声明,并通过类名或实例访问。
下面是一个示例,演示了类中属性的使用:
class Car: wheels = 4 # 类属性 def __init__(self, make, model): self.make = make # 实例属性 self.model = model def start_engine(self): print("The engine is started.")# 创建 Car 类的实例car1 = Car("Toyota", "Camry")car2 = Car("Honda", "Accord")# 访问实例属性print(car1.make) # 输出: Toyotaprint(car2.model) # 输出: Accord# 访问类属性print(Car.wheels) # 输出: 4运行结果:
②方法
方法是类中定义的函数,用于描述对象的行为和操作。在类中定义的方法可以访问对象的属性,并可以通过self关键字引用当前对象。类的方法是定义在类中的函数,用于执行特定的操作。类的方法可以分为以下几种类型:
实例方法:实例方法与特定对象相关联,可以访问和操作对象的实例属性。实例方法的第一个参数通常是 self,表示当前对象实例。
静态方法:静态方法与类相关联,不与特定对象绑定。它们在类的定义中使用 @staticmethod 装饰器来声明,并可以通过类名或实例访问。静态方法不能访问实例属性,通常用于执行与类相关的操作。
类方法:类方法与类相关联,可以访问和操作类属性。它们在类的定义中使用 @classmethod 装饰器来声明,并以类作为第一个参数,通常命名为 cls。
下面是一个示例,演示了类中属性和方法的使用:
# 定义一个名为Student的类class Student: # 初始化方法,创建对象时自动调用 def __init__(self, name, age): self.name = name # 实例属性 self.age = age # 实例属性 # 实例方法 def study(self, subject): print(f"{self.name} is studying {subject}.") # 类方法 @classmethod def get_student_info(cls): return "This is a student class." # 静态方法 @staticmethod def add(x, y): return x + y# 创建Student类的实例student1 = Student("张三", 25)student2 = Student("李四", 27)# 调用实例方法student1.study("Math")# 调用类方法和静态方法print(Student.get_student_info())print(Student.add(5, 10))运行结果:
在这个例子中,Student 类有两个实例属性 name 和 age,一个实例方法 study,一个类方法 get_student_info,以及一个静态方法 add。
总结:属性用于存储对象的状态,而方法用于定义对象的行为和操作。通过定义属性和方法,我们可以将相关的数据和逻辑封装到类中,实现面向对象编程的思想。
3.文件处理方法
(1)文件的打开关闭Python通过解释器内置的open()函数打开一个文件,并实现该文件与一个程序变量的关联,open()函数格式如下:
<变量名> = open(<文件名>,<打开模式>)open()函数提供7种基本的打开模式,如下表所示:
文件的打开模式含义r只读模式,如果文件不存在,返回异常FileNotFoundErrorw覆盖写模式,文件不存在则创建,存在则完全覆盖x创建写模式,文件不存在则创建,存在则返回异常FileExistsErrora追加写模式,文件不存在则创建,存在则在文件最后追加内容b二进制文件模式t文本文件模式+与r/w/x/a一同使用,在原功能基础上增加同时读写功能文件使用结束用close()方法关闭,释放文件的使用授权,使用方法如下:
<变量名>.close()(2)文件的读取Python提供4种常用的文件内容读取方法,如下表所示:
操作方法含义<file>.readall()读入整个文件内容,返回一个字符串或字节流。<file>.read(size= -1)从文件中读入整个文件内容,如果给出参数,读入前size长度的字符串或字节流。<file>.readline(size= -1)从文件中读入一行内容,如果给出参数,读入该行前size长度的字符串或字节流。<file>.readlines(hint= -1)从文件中读入所有行,以每行为元素形成一个列表,如果给出参数,读入hint行。【微实例】文本文件逐行打印
fname = input("请输入要打开的文件:")fo = open(fname, "r", encoding="utf-8")for line in fo.readlines(): print(line)fo.close()运行结果:
(3)文件的写入Python提供3个与文件内容写入有关的方法,如下表所示:
方法含义<file>.write(s)向文件写入一个字符串或字节流<file>.writelines(s)将一个元素全为字符串的列表写入文件<file>.seek(offset)改变当前文件操作指针的位置,offset的值:0-文件开头;1-当前位置;2-文件结尾【微实例】向文件写一个列表
fname = input("请输入要写入的文件:")fo = open(fname, "w+", encoding="utf-8")list = ["唐诗", "宋词", "元曲"]fo.writelines(list)for line in fo: print(line)fo.close()运行结果:
【思考题】:列表list内容写入文件,但为何没有将内容打印出来呢?
二、有趣的库
1.socket(获取本机ip地址)
使用socket,先获取电脑的主机名后,再获取本机的IP地址。
其中socket是Python内置标准库,无需安装。
import socket as fhostn = f.gethostname()Laptop = f.gethostbyname(hostn)print("你的电脑本地IP地址是:" + Laptop)得到结果如下,此IP为局域网内IP。
2.pymysql库
pymysql是Python中流行的MySQL数据库驱动程序,它提供了便捷的方法来连接、查询和更新MySQL数据库。本次我们学习pymysql访问MySQL数据库的详细指南,包括安装pymysql、连接数据库、执行查询和更新操作等。
(1)环境准备在开始之前,您需要确保已经安装了pymysql库。可以使用pip命令进行安装:
pip install pymysql(2)连接到数据库首先需要建立与MySQL数据库的连接。使用pymysql库的示例代码如下:
pymysql.connect( host = localhost, port = 3306, user = ******, password = ******, db =******, charset = utf8)调用connect 方法生成一个 connect 对象, 通过这个对象来访问数据库。connect 方法的主要参数如下:
user,访问数据库的用户
password,访问数据库的密码
host,Mysql 数据库服务所在的主机
port,Mysql 数据库服务的端口号,默认值为 3306
db,数据库名
charset,字符编码
(3)示例代码:import pymysql# 创建连接对象conn = pymysql.connect( host = localhost, port = 3306, user = root, password = root, db =ceshi, charset = utf8)# 创建游标对象cursor = conn.cursor()# 编写SQL语句sql = "SELECT * FROM dwxx"# 执行SQL语句cursor.execute(sql)# 获取查询结果result = cursor.fetchall()# 打印查询结果for row in result: print(row)# 关闭游标和连接cursor.close()conn.close()运行结果:
除此之外,与数据库进行交互还有SQLAlchemy,支持多种数据库后端,可以通过 ORM(对象关系映射)的方式操作数据库。
3.pandas库
Pandas 库是机器学习四个基础库之一, 它有着强大的数据分析能力和处理工具。它支持数据增、删、改、查;支持时间序列分析功能;支持灵活处理缺失数据;具有丰富的数据处理函数;具有快速、灵活、富有表现力的数据结构:DataFrame 数据框和 Series 系列。
(1)环境安装pip install pandas(2)读写 Excel 文件Pandas 提供了 read_excel 函数来读取 xls、xlsx 两种 Excel 文件。
①读取Excel 文件pandas.read_excel(io, sheet_name=Sheet1)参数名称说明io代表文件路径。sheet_name代表 excel 表内数据的分表位置。【微实例】读取并打印表格数据
import pandas as pd# 读取Excel文件df = pd.read_excel(example.xlsx)# 打印print(df)【微实例】读取3个分表的内容、根据行数和列名查询具体的数值、读取excel中最大行数和最大列数。
import pandas as pd# 1.读取第一个分表sheet1 = pd.read_excel(example.xlsx, sheet_name=Sheet1)# 打印结果print("---1、Sheet1数据---------------------")print(sheet1.head())# 2.读取第二个分表sheet2 = pd.read_excel(example.xlsx, sheet_name=Sheet2)# 打印结果print("---2、Sheet2数据---------------------")print(sheet2)# 3.读取第三个分表sheet3 = pd.read_excel(example.xlsx, sheet_name=Sheet3)# 打印结果print("---3、Sheet3数据---------------------")print(sheet3)# 4.根据行数和列名查询具体的数据# 行索引row_index = 3# 列名column_name = 企业名称# 通过loc属性来获取指定行和列的数据。cell_data = sheet1.loc[row_index-1, column_name]# 打印结果print("---4、根据行数和列名查询具体的数据--------")print("查询结果为:{}".format(cell_data))# 5.读取excel中最大行数和最大列数df = pd.read_excel(example.xlsx)# 获取最大行和最大列max_row = df.shape[0]max_column = df.shape[1]# 打印结果print("---5、打印最大行数和最大列数-------------")print("最大行数:", max_row)print("最大列数:", max_column)②写入Excel 文件pandas通过to_excel()方法将数据写入Excel文件。除此之外openpyxl库也可以实现,具体见下面微实例。
【微案例】使用pandas进行Excel文件写入操作。
import pandas as pd# 创建一个DataFramedata = {Name: [Tom, Jerry], Age: [20, 21]}df = pd.DataFrame(data)# 将DataFrame写入Excel文件df.to_excel(output.xlsx, index=False)运行结果:
【微案例】创建2个分表并指定行和列写入内容(使用openpyxl)。
import openpyxl# 创建一个新的Excel工作簿workbook = openpyxl.Workbook()# 创建第一个分表sheet1 = workbook.activesheet1.title = "Sheet1"# 写入内容到指定行和列,例如第2行第3列row = 2column = 3value = Hello, World!sheet1.cell(row=row, column=column).value = value# .cell:访问单元格;# .value:获取或设置单元格的值;# 创建第二个分表sheet2 = workbook.create_sheet("Sheet2")# 写入内容到指定行和列,例如第4行第5列row = 4column = 5value = 你好,世界!sheet2.cell(row=row, column=column).value = value# .cell:访问单元格;# .value:获取或设置单元格的值;# 保存修改后的Excel文件workbook.save(创建分表分别写入数据.xlsx)运行成功之后,打开文件查看结果如下:
Python处理Excel的库还有:
xlrd:一个用于读取Excel文件的库,支持多种格式的文件,如.xls、.xlsx等。
xlwt:一个用于写入Excel文件的库,支持.xls格式的文件。
4.python-docx库
Python-docx是一个用于创建、修改和提取Microsoft Word .docx文件的Python库。以下是一些基本操作:
(1)安装python-docx库pip install python-docx(2)基础操作1.创建一个Word文档:
from docx import Documentdoc = Document()doc.save(example.docx)2.添加段落:
from docx import Documentdoc = Document()doc.add_paragraph(这是一个段落)doc.save(example.docx)运行结果:
3.添加标题:
from docx import Documentfrom docx.enum.text import WD_PARAGRAPH_ALIGNMENTdoc = Document()doc.add_heading(这是一个标题, level=1)doc.save(example.docx)4.添加表格:
from docx import Documentdoc = Document()list1 = [["姓名","性别","家庭地址"],["唐僧","男","湖北省"],["孙悟空","男","北京市"],["猪八戒","男","广东省"],["沙和尚","男","湖南省"]]list2 = [["姓名","性别","家庭地址"],["貂蝉","女","河北省"],["杨贵妃","女","贵州省"],["西施","女","山东省"]]table1 = doc.add_table(rows=5,cols=3)for row in range(5): cells = table1.rows[row].cells for col in range(3): cells[col].text = str(list1[row][col])doc.add_paragraph("-----------------------------------------------------------")table2 = doc.add_table(rows=4,cols=3)for row in range(4): cells = table2.rows[row].cells for col in range(3): cells[col].text = str(list2[row][col])doc.save(r"test.docx")运行结果:
5.读取Word文档:
from docx import Documentdoc = Document(readword.docx)for paragraph in doc.paragraphs: print(paragraph.text)运行结果:
5.python-pptx库
要使用Python操作PPT,可以使用python-pptx库。首先需要安装这个库,可以使用以下命令进行安装:
pip install python-pptx以下是一个简单的示例,展示如何使用python-pptx库创建一个包含标题和文本框的PPT:
from pptx import Presentationfrom pptx.util import Inches# 创建一个PPT对象ppt = Presentation()# 添加一个幻灯片slide = ppt.slides.add_slide(ppt.slide_layouts[0])# 添加标题title = slide.shapes.titletitle.text = "这是一个标题"# 添加文本框left = Inches(1)top = Inches(2)width = Inches(4)height = Inches(1)text_box = slide.shapes.add_textbox(left, top, width, height)text_frame = text_box.text_frametext_frame.text = "这是一个文本框"# 保存PPTppt.save("example.pptx")运行结果:
6.Pyecharts库
(1)概述Pyecharts 是一个 Python 可视化库,用于创建交互式和美观的图表。它基于著名的 JavaScript 可视化库 Echarts,通过在 Python 中调用 Echarts 的功能,使用户能够在 Python 环境中轻松地绘制各种类型的图表,包括折线图、柱状图、饼图、散点图等。
Pyecharts 提供了一个简单而直观的 API 接口,使得使用者无需了解复杂的 JavaScript 语法,即可通过 Python 代码实现高度定制化的图表设计。
(2)安装或者使用安装 Pyecharts:使用 pip 包管理工具,在命令行中运行以下命令进行安装
pip install pyecharts导入 Pyecharts:在 Python 代码中导入所需的 Pyecharts 模块。
import pyechartsfrom pyecharts import charts创建图表对象
# 创建折线图对象line_chart = charts.Line()设置图表数据和属性
add:方法用于添加散点图的数据系列# 设置图表标题和数据line_chart.set_global_opts(title_opts=pyecharts.options.TitleOpts(title="折线图示例"))line_chart.add_xaxis(["A", "B", "C", "D", "E"])line_chart.add_yaxis("Series 1", [1, 3, 2, 5, 4])渲染图表:使用渲染方法将图表渲染为 HTML 文件显示。
# 渲染图表为 HTML 文件,保存在在本文件夹下line_chart.render("line_chart.html")# 直接渲染显示图表line_chart.render_notebook()上述操作运行之后结果如下:
四、Python应用案例
1.网络爬虫
案例1:爬取微信读书飙升榜数据import requestsfrom bs4 import BeautifulSoupurl = "https://weread.qq.com/web/category/rising" # 微信读书飙升榜链接headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"}response = requests.get(url, headers=headers)soup = BeautifulSoup(response.text, "html.parser")# print(soup)books = soup.find_all("div", class_="wr_bookList_item_info")# print(books)for book in books: # 使用BeautifulSoup库中的find方法获取文本内容。 # text属性用于获取标签内的文本内容 # strip()方法用于去除字符串两端的空格和换行符。 title = book.find("p", class_="wr_bookList_item_title").text.strip() author = book.find("p", class_="wr_bookList_item_author").text.strip() print(f"书名:{title},作者:{author}")运行结果打印:
【微思考】爬取数据时为什么要使用headers,headers如何获取呢?
案例2:爬取大学排名数据import requestsfrom bs4 import BeautifulSoupimport pandas as pdulist = []# 爬取的网站的URLurl = "http://www.gaosan.com/gaokao/241219.html"response = requests.get(url)# 编码格式response.encoding = utf-8# 编译数据soup = BeautifulSoup(response.text, html.parser)# 将数据存入定义好的ulistfor tr in soup.find(tbody).children: tds = tr(td) ulist.append([tds[0].string, tds[1].string, tds[2].string, tds[3].string, tds[4].string, tds[5].string])# 获取指定数量的大学并打印: # {:^10}表示将元素居中对齐,宽度为10个字符。 # \t表示制表符,用于分隔不同的列。 # chr(12288)通常用于中文文本的排版,以保持整齐的对齐。for i in range(21): u = ulist[i] print("{:^10}\t{:^20}\t{:^10}\t{:^10}\t{:^10}\t{:^10}".format(u[0], u[1], u[2], u[3], u[4], u[5], chr(12288)))# 创建一个pandas DataFrame对象df = pd.DataFrame(ulist[1:21], columns=ulist[0])# 将数据保存到Excel文件中df.to_excel(学校排名.xlsx, index=False)运行成功后打开文件:
2.自动化办公
案例3:将爬取的大学排名数据进行分析(以matplotlib库为主)。import matplotlib.pyplot as pltimport pandas as pd# 读取Excel文件df = pd.read_excel(学校排名.xlsx)# 解决坐标轴刻度负号乱码plt.rcParams[axes.unicode_minus] = False# 解决中文乱码问题plt.rcParams[font.sans-serif] = [Simhei]# 1.绘制柱状图,展示不同省份的大学数量# 从df中提取出"所在地区"列的数据,存储在变量provinces中。provinces = df[所在地区]# 使用value_counts()函数统计每个省份出现的次数,并将结果存储在变量counts中。counts = provinces.value_counts()# 使用plt.bar()函数绘制柱状图,横坐标为省份名称,纵坐标为大学数量。plt.bar(counts.index, counts.values)# 使用plt.xlabel()、plt.ylabel()和plt.title()函数设置图表的横轴标签、纵轴标签和标题。plt.xlabel(所在地区)plt.ylabel(大学数量)plt.title(不同省份的大学数量)# 使用plt.show()函数显示图表。plt.show()# 2.绘制饼图,展示办学层次的大学占比# 从df中提取出"办学层次"列的数据,存储在变量batches中。batches = df[办学层次]# 使用value_counts()函数统计每个办学层次出现的次数,并将结果存储在变量counts中。counts = batches.value_counts()# 使用plt.pie()函数绘制饼图,参数labels指定标签,参数autopct指定百分比格式。plt.pie(counts.values, labels=counts.index, autopct=%1.1f%%)# 使用plt.axis(equal)函数设置饼图为正圆形。plt.axis(equal)# 使用plt.title()函数设置图表的标题。plt.title(办学层次大学占比)# 使用plt.show()函数显示图表。plt.show()# 3.绘制散点图,展示分数线与排名之间的关系# 从df中提取出"综合得分"和"星级排名"两列的数据,分别存储在变量scores和ranks中。scores = df[综合得分]ranks = df[星级排名]# 使用plt.scatter()函数绘制散点图,横坐标为星级排名,纵坐标为综合得分。plt.scatter(ranks, scores)# 使用plt.xlabel()、plt.ylabel()和plt.title()函数设置图表的横轴标签、纵轴标签和标题。plt.xlabel(星级排名)plt.ylabel(综合得分)plt.title(综合得分与星级排名的关系)# 使用plt.show()函数显示图表。plt.show()运行结果:
案例4:将爬取的大学排名数据进行分析(以Pyecharts库为主)。(1)绘制柱状图,展示不同省份的大学数量
import pandas as pdfrom pyecharts.charts import Barfrom pyecharts import options as opts# 读取Excel文件file_path = 学校排名.xlsxdf = pd.read_excel(file_path)# 统计所在地区列中各个地区的出现次数。department_count = df[所在地区].value_counts()# 绘制柱状图bar = ( Bar() # 将所在地区列中各个地区的名称添加到图表的X轴上。 .add_xaxis(department_count.index.tolist()) # 将所在地区列中各个地区的出现次数添加到图表的Y轴上,并将这个数据系列命名为"数量"。 .add_yaxis("数量", department_count.values.tolist()) # 设置图表的全局选项。这里将图表的标题设置为"不同省份的大学数量"。 .set_global_opts(title_opts=opts.TitleOpts(title="不同省份的大学数量统计")))# 生成HTML文件bar.render(A-不同省份的大学数量.html)运行之后生成html文件,打开html文件,结果如下:
(2)绘制饼图,展示办学层次的大学占比
import pandas as pdfrom pyecharts.charts import Piefrom pyecharts import options as optsfile_path = 学校排名.xlsxdf = pd.read_excel(file_path)# 统计各学历人数education_count = df[办学层次].value_counts()# 绘制饼图pie = ( Pie() # 将办学层次和对应的数量作为数据添加到饼图中。 # 其中,education_count是一个包含办学层次和对应数量的Series对象 # 通过zip函数将两个列表合并成一个元组列表,再使用list函数将其转换为列表形式。 # 最后,使用add方法将数据添加到饼图中,并设置系列名称为"数量"。 .add("数量", [list(z) for z in zip(education_count.index.tolist(), education_count.values.tolist())]) # 设置饼图的全局配置项。这里设置标题为"办学层次大学占比统计"。 .set_global_opts(title_opts=opts.TitleOpts(title="办学层次大学占比统计")) # 设置饼图的标签格式。label_opts参数用于设置标签选项,opts.LabelOpts方法用于创建一个标签选项对象,并设置标签格式为"{b}: {c}"。 # 其中{b}表示办学层次,{c}表示数量。这样设置后,饼图中每个扇区的标签将显示为"教育层次:数量"的形式。 # formatter作用: 格式化标签的参数。{b}、{c}代表占位符。 .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")))# 生成HTML文件pie.render(A-办学层次大学占比统计.html)运行之后生成html文件,打开html文件,结果如下:
(3)绘制散点图,展示分数线与排名之间的关系
import pandas as pdfrom pyecharts.charts import Scatterfrom pyecharts import options as opts# 读取Excel表格数据file_path = 学校排名.xlsxdf = pd.read_excel(file_path)# 提取’星级排名‘和’综合分数‘数据rank = df["星级排名"].tolist()score = df["综合得分"].tolist()# 创建散点图对象scatter = Scatter()# 添加X轴数据scatter.add_xaxis(rank)# 添加Y轴数据scatter.add_yaxis("综合得分", score)# 设置全局选项scatter.set_global_opts( # 设置标题名称 title_opts=opts.TitleOpts(title="综合得分与星级排名关系散点图"), # 设置X轴名称 xaxis_opts=opts.AxisOpts(name="星级排名"), # 设置Y轴名称以及纵坐标的大小 yaxis_opts=opts.AxisOpts(name="综合得分",min_=70, max_=100),)# 渲染图表scatter.render("A-综合得分与星级排名关系散点图.html")运行之后生成html文件,打开html文件,结果如下:
案例5:PDF转Wordfrom pdf2docx import Convertercv = Converter("Python培训文件.pdf")cv.convert("Python培训文件.docx", start=0, end=None)cv.close()运行结果:
五、习题答案
【微练习】通过定义函数的方式比较两个数,并返回较大的数。
def max(a, b): if a > b: return a else: return ba = 4b = 5print(max(a, b))运行结果:
【微思考】:列表list内容写入文件,但为何没有将内容打印出来呢?
这是因为文件写入内容后,当前文件操作指针在写入内容的后面。在写入文件后增加一条代码fo.seek(0)将文件操作指针返回到文件开始处,即可显示写入的内容。
fname = input("请输入要写入的文件:")fo = open(fname, "w+", encoding="utf-8")list = ["唐诗", "宋词", "元曲"]fo.writelines(list)fo.seek(0)for line in fo: print(line)fo.close()运行结果:
【微思考】爬取数据时为什么要使用headers,headers如何获取呢?
答:(1)使用headers是为了模拟浏览器行为以绕过网站的反爬机制。
(2)获取headers的方法是通过浏览器的开发者工具进行捕获。
首先打开目标网页,然后按下F12键打开开发者工具,切换到“Network”标签页。随后刷新页面,找到对应的网络请求,点击查看详细信息,在请求的headers中就可以找到我们需要的信息。一般情况下,至少需要添加User-Agent这一信息,这可以让服务器认为我们的请求来自于一个合法的浏览器而非爬虫程序。