一、Python 是什么
Python 是一种高级、解释型、面向对象的编程语言,由 Guido van Rossum 在 1989 年末开发,并于 1991 年首次发布。它以简洁、易读的语法以及强大的功能而闻名,被誉为 “优雅、明确、简单” 的编程语言 。Python 具有动态类型系统和自动内存管理功能,这使得开发者在编写代码时无需过多关注底层细节,能够更专注于解决实际问题。其设计哲学强调代码的可读性,使用缩进来表示代码块,而不是像其他一些语言那样使用花括号,这使得 Python 代码看起来更加整洁、清晰,易于理解和维护。
二、Python 的应用领域
Python 凭借其丰富的库和框架,简洁的语法以及强大的功能,在众多领域都有着广泛的应用。
2.1 数据科学与数据分析
在数据科学与数据分析领域,Python 已经成为了首选的编程语言之一 。Numpy 提供了高效的多维数组操作和数学函数,是 Python 进行科学计算的基础库,能够大大提高数据处理的效率。Pandas 则提供了快速、灵活、明确的数据结构,用于数据的读取、清洗、处理和分析,其 DataFrame 和 Series 数据结构使得处理表格型数据变得轻而易举 。Matplotlib 是一个用于绘制各种图表和可视化数据的库,通过它可以将数据以直观的图形方式展示出来,帮助用户更好地理解数据背后的信息。此外,像 Seaborn、Plotly 等可视化库也基于 Matplotlib 进行了更高级的封装,使得生成的图表更加美观和专业 。Python 在数据科学领域的重要性不言而喻,它使得数据科学家和分析师能够快速地处理和分析海量数据,提取有价值的信息,为决策提供支持。例如,在金融领域,分析师可以使用 Python 分析市场数据,预测股票走势;在电商领域,企业可以通过 Python 分析用户行为数据,优化营销策略。
2.2 人工智能与机器学习
在人工智能与机器学习领域,Python 同样占据着核心地位 。TensorFlow 是谷歌开发的深度学习框架,它支持在 CPU、GPU 等多种硬件上运行,具有高度的灵活性和可扩展性,被广泛应用于图像识别、语音识别、自然语言处理等领域 。PyTorch 则以其简洁的设计和动态计算图的特性受到了众多研究人员和开发者的喜爱,它使得模型的调试和开发更加方便快捷,在学术界和工业界都有大量的应用 。此外,还有 Scikit-learn 这样的机器学习库,提供了丰富的机器学习算法和工具,如分类、回归、聚类等算法,以及模型评估、调参等功能,帮助开发者快速构建和训练机器学习模型 。这些框架和库的出现,使得 Python 成为了实现人工智能和机器学习算法的理想语言,大大降低了开发的难度和门槛,推动了人工智能技术的快速发展。例如,在医疗领域,利用 Python 的机器学习算法可以对医学影像进行分析,辅助医生进行疾病诊断;在智能安防领域,通过 Python 的深度学习模型可以实现人脸识别、行为分析等功能。
2.3 Web 开发
Python 在 Web 开发中也有着广泛的应用,Django 和 Flask 是其中最具代表性的两个框架 。Django 是一个功能强大的全栈 Web 框架,它遵循 MVC(模型 - 视图 - 控制器)设计模式,内置了丰富的功能,如数据库管理、用户认证、表单处理、后台管理界面等,能够帮助开发者快速搭建复杂的 Web 应用程序 。Django 的优势在于其强大的功能和完善的生态系统,适合开发大型的企业级 Web 应用,如内容管理系统(CMS)、电子商务平台等 。Flask 则是一个轻量级的 Web 框架,它提供了简单的路由系统和请求处理机制,具有高度的灵活性,开发者可以根据自己的需求选择和集成各种第三方库和工具 。Flask 适合开发小型的 Web 应用、API 服务以及快速迭代的项目,例如个人博客、小型网站的后端接口等 。无论是 Django 还是 Flask,都使得 Python 在 Web 开发领域展现出强大的竞争力,满足了不同规模和需求的 Web 项目的开发需求。
2.4 自动化脚本
Python 在自动化脚本编写方面具有明显的优势 。其简洁的语法和丰富的库使得编写自动化脚本变得轻松高效 。在日常办公自动化中,Python 可以用于处理各种重复性的任务,如批量处理文件、自动发送邮件、生成报表等 。例如,使用 Python 的 Pandas 库可以快速处理 Excel 表格数据,通过 OpenPyXL 库可以对 Excel 文件进行读写和修改操作;利用 smtplib 库可以实现自动化发送邮件的功能,提高工作效率 。在系统管理自动化方面,Python 也发挥着重要作用,系统管理员可以使用 Python 编写脚本进行服务器的监控、配置管理、日志分析等工作 。例如,通过 paramiko 库可以实现远程服务器的连接和命令执行,使用 psutil 库可以获取系统的性能指标和进程信息,方便管理员对系统进行管理和维护 。Python 的自动化脚本能力大大提高了工作效率,减少了人工操作的错误和繁琐性。
三、Python 基础语法入门
3.1 变量与数据类型
在 Python 中,变量是存储数据的容器,不需要显式声明数据类型,Python 会根据赋值自动推断变量的数据类型 。例如:
# 整数类型
age = 20
# 浮点数类型
height = 1.75
# 字符串类型
name = "Alice"
# 布尔类型
is_student = True
Python 中的基本数据类型包括:
- 整数(int):表示整数,如1、-5、0等,可以进行加(+)、减(-)、乘(*)、除(/)、整除(//)、取余(%)、幂运算(**)等操作 。例如:
a = 10
b = 3
print(a + b) # 输出13
print(a - b) # 输出7
print(a * b) # 输出30
print(a / b) # 输出3.3333333333333335
print(a // b) # 输出3
print(a % b) # 输出1
print(a ** b) # 输出1000
- 浮点数(float):带有小数部分的数字,如3.14、-0.5等,同样支持各种数学运算 。需要注意的是,由于计算机内部对浮点数的存储方式,可能会出现一些微小的精度误差 。例如:
x = 0.1
y = 0.2
print(x + y) # 输出0.30000000000000004
- 字符串(str):是由字符组成的序列,可以用单引号(')或双引号(")括起来,如'Hello'、"World"。字符串支持索引、切片、拼接、复制等操作 。例如:
s = "Python"
print(s[0]) # 输出P,索引从0开始
print(s[1:3]) # 输出yt,切片操作,顾头不顾尾
print(s + " is great") # 输出Python is great,字符串拼接
print(s * 2) # 输出PythonPython,字符串复制
- 布尔值(bool):只有True和False两个值,用于逻辑判断,通常在条件语句和循环语句中发挥重要作用 。布尔值可以与逻辑运算符(and、or、not)一起使用 。例如:
a = True
b = False
print(a and b) # 输出False,逻辑与运算
print(a or b) # 输出True,逻辑或运算
print(not a) # 输出False,逻辑非运算
3.2 控制结构
控制结构用于控制程序的执行流程,Python 中主要有条件语句和循环语句 。
- 条件语句(if - else):根据条件的真假来决定执行哪部分代码块 。基本语法如下:
if 条件表达式:
# 条件为真时执行的代码块
pass
elif 条件表达式:
# 第一个条件为假,该条件为真时执行的代码块
pass
else:
# 以上条件都为假时执行的代码块
pass
例如,判断一个人的年龄是否成年:
age = 20
if age >= 18:
print("你已经成年了")
else:
print("你还未成年")
- 循环语句(for、while):
-
- for 循环:用于遍历可迭代对象(如列表、元组、字符串、字典等)中的每个元素 。基本语法如下:
for 变量 in 可迭代对象:
# 对每个元素执行的代码块
pass
例如,遍历一个列表并打印其中的元素:
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
还可以使用range()函数生成一个整数序列,结合for循环进行计数循环 。例如:
for i in range(5): # 生成0到4的整数序列
print(i)
- while 循环:在条件表达式为真时,重复执行代码块 。基本语法如下:
while 条件表达式:
# 条件为真时重复执行的代码块
pass
例如,计算 1 到 10 的累加和:
sum_num = 0
i = 1
while i <= 10:
sum_num += i
i += 1
print(sum_num) # 输出55
在循环中,还可以使用break语句提前终止循环,使用continue语句跳过本次循环的剩余代码,直接进入下一次循环 。例如:
for i in range(10):
if i == 5:
break # 当i等于5时,终止循环
print(i)
for i in range(10):
if i % 2 == 0:
continue # 当i为偶数时,跳过本次循环
print(i)
3.3 函数与模块
- 函数:是一段可重复使用的代码块,用于完成特定的功能 。使用def关键字定义函数,函数可以接受参数并返回值 。基本语法如下:
def 函数名(参数列表):
# 函数体
return 返回值
例如,定义一个计算两个数之和的函数:
def add(a, b):
result = a + b
return result
sum_result = add(3, 5)
print(sum_result) # 输出8
函数的参数可以有多种形式,包括位置参数、默认参数、关键字参数和可变参数 。例如:
# 位置参数
def greet(name):
print(f"Hello, {name}")
greet("Alice") # 输出Hello, Alice
# 默认参数
def greet(name="World"):
print(f"Hello, {name}")
greet() # 输出Hello, World
greet("Bob") # 输出Hello, Bob
# 关键字参数
def greet(first_name, last_name):
print(f"Hello, {first_name} {last_name}")
greet(last_name="Smith", first_name="John") # 输出Hello, John Smith
# 可变参数(*args表示接收任意数量的位置参数,**kwargs表示接收任意数量的关键字参数)
def greet_everyone(*names):
for name in names:
print(f"Hello, {name}")
greet_everyone("Alice", "Bob", "Charlie")
def greet_with_details(**details):
for key, value in details.items():
print(f"{key}: {value}")
greet_with_details(name="David", age=30)
- 模块:是一个包含 Python 定义和语句的文件,用于组织和重用代码 。可以将相关的函数、类等定义在一个模块中,然后在其他程序中导入并使用 。例如,创建一个名为mymodule.py的模块,内容如下:
# mymodule.py
def add(a, b):
return a + b
def subtract(a, b):
return a - b
在另一个 Python 文件中导入并使用该模块:
import mymodule
result1 = mymodule.add(5, 3)
result2 = mymodule.subtract(5, 3)
print(result1) # 输出8
print(result2) # 输出2
也可以使用from...import...语句只导入模块中的特定函数或类 。例如:
from mymodule import add, subtract
result1 = add(5, 3)
result2 = subtract(5, 3)
print(result1) # 输出8
print(result2) # 输出2
还可以使用as关键字给导入的模块或函数起别名 。例如:
import mymodule as mm
result1 = mm.add(5, 3)
print(result1) # 输出8
from mymodule import add as my_add
result2 = my_add(5, 3)
print(result2) # 输出8
通过合理使用函数和模块,可以使代码更加模块化、可维护和可复用,提高开发效率。
四、Python 进阶知识
4.1 面向对象编程
Python 是一门面向对象的编程语言,面向对象编程(OOP)是一种编程范式,它将数据(属性)和操作数据的方法(函数)封装在一个称为类(Class)的单元中 。通过这种方式,可以创建可复用、可维护的代码结构,提高开发效率 。
类的定义:使用class关键字定义类,类名通常采用大写字母开头的驼峰命名法 。在类中,可以定义属性和方法 。属性是类的特征,方法是类的行为 。例如,定义一个简单的Person类:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def introduce(self):
print(f"我叫{self.name},今年{self.age}岁。")
在上述代码中,__init__是一个特殊的方法,称为构造函数,用于初始化对象的属性 。self代表类的实例,通过self可以访问和修改对象的属性 。introduce方法用于打印对象的信息 。
对象的创建:类就像是一个模板,通过类可以创建多个对象 。创建对象的过程也称为实例化 。例如:
person1 = Person("Alice", 25)
person2 = Person("Bob", 30)
person1.introduce() # 输出:我叫Alice,今年25岁。
person2.introduce() # 输出:我叫Bob,今年30岁。
这里创建了两个Person类的对象person1和person2,它们都有自己的属性值,并且可以调用introduce方法 。
继承:继承是面向对象编程的重要特性之一,它允许一个类(子类)继承另一个类(父类)的属性和方法 。通过继承,可以实现代码的复用,减少重复代码的编写 。例如,定义一个Student类,继承自Person类:
class Student(Person):
def __init__(self, name, age, grade):
super().__init__(name, age)
self.grade = grade
def study(self):
print(f"{self.name}正在上{self.grade}年级,努力学习中。")
在上述代码中,Student类继承了Person类的所有属性和方法 。super().__init__(name, age)调用了父类的构造函数,用于初始化从父类继承的属性 。Student类还定义了自己特有的属性grade和方法study 。
多态:多态是指同一个方法在不同的对象上调用时,可以表现出不同的行为 。在 Python 中,多态通过方法重写和继承来实现 。例如,定义一个Animal类和它的两个子类Dog和Cat:
class Animal:
def speak(self):
print("动物发出声音")
class Dog(Animal):
def speak(self):
print("汪汪汪")
class Cat(Animal):
def speak(self):
print("喵喵喵")
def make_sound(animal):
animal.speak()
dog = Dog()
cat = Cat()
make_sound(dog) # 输出:汪汪汪
make_sound(cat) # 输出:喵喵喵
在上述代码中,Dog类和Cat类都重写了父类Animal的speak方法 。make_sound函数接受一个Animal类型的对象作为参数,并调用它的speak方法 。由于传入的对象类型不同,调用的speak方法也不同,从而实现了多态 。
面向对象编程使得代码更加模块化、可维护和可扩展,能够更好地模拟现实世界中的各种事物和关系,是 Python 编程中非常重要的一部分。
4.2 异常处理
在程序运行过程中,可能会出现各种错误和异常情况,如文件不存在、除零错误、类型错误等 。如果不进行处理,这些异常可能会导致程序崩溃,影响用户体验 。Python 提供了强大的异常处理机制,使用try - except语句可以捕获和处理异常,使程序更加健壮和稳定 。
异常处理的基本语法:try块中放置可能会引发异常的代码,except块用于捕获并处理异常 。基本语法如下:
try:
# 可能会引发异常的代码
result = 10 / 0
except ZeroDivisionError as e:
# 捕获除零异常并处理
print(f"出现除零错误: {e}")
在上述代码中,try块中的10 / 0会引发除零异常 。except ZeroDivisionError as e捕获了这个异常,并将异常信息存储在变量e中,然后打印出错误信息 。
捕获多种异常:可以使用多个except块来捕获不同类型的异常 。例如:
try:
num = int("abc")
result = 10 / num
except ValueError as e:
print(f"类型转换错误: {e}")
except ZeroDivisionError as e:
print(f"除零错误: {e}")
在这个例子中,int("abc")会引发ValueError异常,10 / num(当num为 0 时)会引发ZeroDivisionError异常 。通过不同的except块可以分别处理这两种异常 。
捕获所有异常:如果不确定会出现哪种异常,可以使用一个except块捕获所有异常 。但这种方式通常不推荐,因为它会捕获所有类型的异常,包括一些未预料到的系统错误,不利于调试和定位问题 。语法如下:
try:
# 可能会引发异常的代码
pass
except Exception as e:
print(f"出现异常: {e}")
else和finally子句:
- else子句:当try块中没有引发异常时,会执行else子句中的代码 。例如:
try:
num = 5
result = 10 / num
except ZeroDivisionError as e:
print(f"除零错误: {e}")
else:
print(f"计算结果: {result}")
- finally子句:无论try块中是否引发异常,finally子句中的代码都会被执行 。通常用于释放资源,如关闭文件、数据库连接等 。例如:
file = None
try:
file = open("test.txt", "r")
content = file.read()
print(content)
except FileNotFoundError as e:
print(f"文件未找到: {e}")
finally:
if file:
file.close()
使用with语句可以更简洁地处理文件操作,它会自动管理文件的打开和关闭,无需显式调用close方法 。例如:
try:
with open("test.txt", "r") as file:
content = file.read()
print(content)
except FileNotFoundError as e:
print(f"文件未找到: {e}")
通过合理使用异常处理机制,可以提高程序的稳定性和容错性,避免因异常导致程序异常终止 。
4.3 文件操作
在日常编程中,经常需要与文件进行交互,如读取文件内容、写入数据到文件、创建和删除文件等 。Python 提供了丰富的内置函数和模块来进行文件操作,使得文件管理变得简单高效 。
文件的打开与关闭:使用open()函数打开文件,该函数接受文件名和打开模式作为参数 。打开模式有多种,常用的包括:
- 'r':只读模式,默认模式,用于读取文件内容,如果文件不存在会抛出FileNotFoundError异常 。
- 'w':写入模式,用于写入文件内容,如果文件已存在,会清空文件原有内容;如果文件不存在,会创建新文件 。
- 'a':追加模式,用于在文件末尾追加内容,如果文件不存在,会创建新文件 。
- 'b':二进制模式,用于处理二进制文件,如图片、音频、视频等,通常与其他模式结合使用,如'rb'、'wb' 。
- '+':读写模式,可同时进行读取和写入操作,如'r+'、'w+'、'a+' 。
例如,以只读模式打开一个文本文件:
file = open("example.txt", "r")
# 进行文件操作
file.close()
打开文件后,需要及时关闭文件以释放系统资源 。可以使用close()方法关闭文件 。为了确保文件无论是否发生异常都能正确关闭,推荐使用with语句,它会在代码块结束时自动关闭文件 。例如:
with open("example.txt", "r") as file:
# 进行文件操作
pass
文件的读取:打开文件后,可以使用read()、readline()和readlines()方法读取文件内容 。
- read():读取文件的全部内容,并返回一个字符串 。如果指定了参数size,则读取指定字节数的内容 。例如:
with open("example.txt", "r") as file:
content = file.read()
print(content)
- readline():逐行读取文件内容,每次读取一行,返回一个字符串 。常用于处理大文件,避免一次性读取大量数据导致内存占用过高 。例如:
with open("example.txt", "r") as file:
line = file.readline()
while line:
print(line.strip()) # strip()方法用于去除字符串两端的空白字符
line = file.readline()
- readlines():读取文件的所有行,并将每一行作为一个元素存储在列表中返回 。例如:
with open("example.txt", "r") as file:
lines = file.readlines()
for line in lines:
print(line.strip())
文件的写入:使用write()和writelines()方法可以向文件中写入内容 。
- write():将字符串写入文件 。例如:
with open("output.txt", "w") as file:
file.write("Hello, World!\n")
file.write("This is a test.\n")
- writelines():将字符串序列(如列表)写入文件,每个字符串之间不会自动添加换行符,需要自行添加 。例如:
lines = ["Line 1\n", "Line 2\n", "Line 3\n"]
with open("output.txt", "w") as file:
file.writelines(lines)
文件的其他操作:
- 文件指针移动:使用seek()方法可以移动文件指针到指定位置 。seek(offset, whence)方法中,offset表示偏移量,whence表示参考位置,0表示从文件开头开始,1表示从当前位置开始,2表示从文件末尾开始 。例如:
with open("example.txt", "r+") as file:
file.seek(5) # 将文件指针移动到第5个字节处
content = file.read()
print(content)
- 文件的复制、移动、重命名和删除:可以使用shutil模块和os模块来完成这些操作 。
import shutil
import os
# 复制文件
shutil.copyfile("source.txt", "destination.txt")
# 移动文件
shutil.move("source.txt", "new_location/source.txt")
# 重命名文件
os.rename("old_name.txt", "new_name.txt")
# 删除文件
os.remove("file_to_delete.txt")
通过掌握文件操作的相关知识,可以方便地对文件进行各种管理和处理,满足不同的编程需求。
五、Python 项目实战
5.1 数据可视化项目
以鸢尾花数据集为例,该数据集包含 150 个样本,每个样本有 4 个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度),以及对应的鸢尾花品种(Setosa、Versicolor、Virginica)。我们使用 Seaborn 库进行数据可视化,展示不同特征之间的关系以及不同品种鸢尾花的分布情况。
首先,导入必要的库和数据集:
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
# 加载鸢尾花数据集
iris = load_iris()
data = iris.data
target = iris.target
feature_names = iris.feature_names
species = iris.target_names
然后,将数据转换为 DataFrame 格式,方便后续处理:
import pandas as pd
df = pd.DataFrame(data, columns=feature_names)
df['species'] = pd.Series(target).map(lambda x: species[x])
接下来,绘制散点图矩阵,查看不同特征之间的关系:
g = sns.pairplot(df, hue='species', palette='Set1')
plt.show()
上述代码中,pairplot函数用于绘制散点图矩阵,hue='species'表示根据鸢尾花的品种进行颜色区分,palette='Set1'指定了颜色调色板 。运行代码后,会得到一个散点图矩阵,通过该矩阵可以直观地看到不同特征之间的相关性以及不同品种鸢尾花在各个特征维度上的分布情况 。例如,从图中可以明显看出 Setosa 品种的鸢尾花在花瓣长度和宽度上与其他两个品种有较为明显的区别 。
再绘制箱线图,展示每个特征在不同品种鸢尾花中的分布:
plt.figure(figsize=(10, 6))
for i, feature in enumerate(feature_names):
plt.subplot(2, 2, i + 1)
sns.boxplot(x='species', y=feature, data=df)
plt.title(f'{feature} distribution')
plt.tight_layout()
plt.show()
这段代码中,boxplot函数用于绘制箱线图,x='species'表示以品种为 x 轴,y=feature表示以每个特征为 y 轴 。通过循环遍历每个特征,在同一个图形中绘制 4 个箱线图 。箱线图可以展示数据的分布范围、中位数、上下四分位数等信息,有助于我们了解每个特征在不同品种鸢尾花中的分布特征 。例如,通过箱线图可以看出 Versicolor 和 Virginica 品种的花萼长度分布有一定的重叠,但也存在一些差异 。
5.2 简单爬虫项目
编写一个简单的网络爬虫,使用 Python 的 requests 和 BeautifulSoup 库爬取豆瓣电影 Top250 的电影信息,展示如何从网页中提取有用的数据。豆瓣电影 Top250 页面包含了电影的标题、评分、评价人数等信息,我们将这些信息提取出来并保存到 CSV 文件中 。
首先,安装必要的库(如果未安装):
pip install requests beautifulsoup4
然后,编写爬虫代码:
import requests
from bs4 import BeautifulSoup
import csv
# 目标URL
url = 'https://movie.douban.com/top250'
# 发送GET请求
response = requests.get(url)
# 检查请求是否成功
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'html.parser')
movie_list = soup.find_all('div', class_='item')
with open('douban_movies.csv', 'w', newline='', encoding='utf-8') as csvfile:
fieldnames = ['排名', '电影名', '评分', '评价人数', '简介']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for index, movie in enumerate(movie_list, start=1):
rank = index
title = movie.find('span', class_='title').text
rating = movie.find('span', class_='rating_num').text
num_ratings = movie.find('div', class_='star').find_all('span')[-1].text.strip('人评价')
quote = movie.find('span', class_='inq')
quote = quote.text if quote else '无'
writer.writerow({
'排名': rank,
'电影名': title,
'评分': rating,
'评价人数': num_ratings,
'简介': quote
})
else:
print(f'请求失败,状态码:{response.status_code}')
在上述代码中,首先使用requests.get方法发送 HTTP GET 请求到目标 URL 。如果请求成功(状态码为 200),则使用BeautifulSoup解析响应的 HTML 内容 。通过find_all方法找到所有包含电影信息的div标签 。然后,遍历这些标签,提取电影的排名、标题、评分、评价人数和简介等信息 。最后,将提取到的信息写入 CSV 文件中 。运行该代码后,会在当前目录下生成一个名为douban_movies.csv的文件,其中包含了豆瓣电影 Top250 的相关信息 。
5.3 机器学习入门项目
以鸢尾花数据集为例,使用 Scikit - learn 库进行机器学习模型的训练和预测,展示如何使用 Python 进行简单的机器学习任务。鸢尾花数据集是一个经典的多分类数据集,我们将使用 K 近邻(KNeighborsClassifier)算法对鸢尾花的品种进行分类预测 。
首先,导入必要的库和数据集:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target
接着,将数据集划分为训练集和测试集:
# 划分训练集和测试集,测试集占比20%
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
然后,创建 K 近邻分类器并进行训练:
# 创建K近邻分类器,n_neighbors=5表示考虑5个最近邻
knn = KNeighborsClassifier(n_neighbors=5)
# 训练模型
knn.fit(X_train, y_train)
最后,使用训练好的模型进行预测并评估模型性能:
# 进行预测
y_pred = knn.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'模型准确率:{accuracy}')
在上述代码中,首先使用load_iris函数加载鸢尾花数据集 。然后,通过train_test_split函数将数据集按照 80% 训练集和 20% 测试集的比例进行划分 。接着,创建一个 K 近邻分类器,设置n_neighbors=5表示在预测时考虑 5 个最近邻 。使用训练集数据对模型进行训练 。训练完成后,使用测试集数据进行预测,并通过accuracy_score函数计算模型在测试集上的预测准确率 。运行该代码后,会输出模型在测试集上的准确率,通过这个准确率可以评估模型对鸢尾花品种分类的性能表现 。
六、总结与展望
Python 以其简洁易读的语法、丰富强大的库和广泛的应用领域,成为了众多开发者和学习者的首选编程语言 。无论是在数据科学、人工智能、Web 开发还是自动化脚本等领域,Python 都展现出了无可比拟的优势和潜力 。通过本文的介绍,我们了解了 Python 的基本语法,包括变量与数据类型、控制结构、函数与模块等,这些基础知识是进一步深入学习 Python 的基石 。同时,我们还探讨了 Python 的进阶知识,如面向对象编程、异常处理和文件操作,这些内容能够帮助我们编写更加复杂和健壮的程序 。在项目实战部分,我们通过数据可视化、简单爬虫和机器学习入门等项目,亲身体验了 Python 在实际应用中的强大功能和灵活性 。
Python 的学习是一个不断积累和实践的过程。希望读者在掌握了本文所介绍的内容后,能够继续深入学习 Python,不断探索其更多的应用场景和可能性 。可以尝试参与开源项目,与其他开发者交流合作,共同学习和进步;也可以根据自己的兴趣和职业规划,选择一个或多个应用领域进行深入研究和实践 。相信在不断的学习和实践中,你会发现 Python 的魅力所在,并且能够运用它解决各种实际问题,实现自己的编程目标 。