目录
- 第 21 天 - 类和对象
- 第 22 天 - 网页抓取
- 第 23 天 - 虚拟环境
- 第 24 天 - 统计
-
- 24.1统计数据
- 24.2什么是数据?
- 24.3统计模块
- 24.4NumPy
- 24.5导入 NumPy
- 24.6使用创建 numpy 数组
- 24.7创建 float numpy 数组
- 24.8创建布尔 numpy 数组
- 24.9使用numpy创建多维数组
- 24.10将 numpy 数组转换为列表
- 24.11从元组创建numpy数组
- 24.12numpy 数组的形状
- 24.13numpy数组的数据类型
- 24.14numpy 数组的大小
- 24.15使用numpy进行数学运算
- 24.16添加
- 24.17减法
- 24.18乘法
- 24.19分配
- 24.20模数;找到余数
- 24.21楼层划分
- 24.22指数
- 24.23检查数据类型
- 24.24转换类型
- 24.25多维数组
- 24.26从 numpy 数组中获取项目
- 24.27切片 Numpy 数组
- 24.28如何反转行和整个数组?
- 24.29反转行列位置
- 24.30如何表示缺失值?
- 24.31生成随机数
- 24.32生成随机数
- 24.33Numpy 和统计
- 24.34numpy中的矩阵
- 24.35numpy numpy.arange()
- 24.36使用 linspace 创建数字序列
- 24.37NumPy 统计函数与示例
- 24.38如何创建重复序列?
- 24.39如何生成随机数?
- 24.40线性代数
- 24.41NumPy 矩阵乘法与 np.matmul()
- 第 25 天 - Pandas
-
- 25.1安装pandas
- 导入pandas
- 25.2使用默认索引创建 Pandas 系列
- 25.3使用自定义索引创建 Pandas 系列
- 25.4从字典创建 Pandas 系列
- 25.5创建一个常量 Pandas 系列
- 25.6使用 Linspace 创建 Pandas 系列
- 25.7数据帧
- 25.8使用字典创建 DataFrame
- 25.9从字典列表创建数据帧
- 25.10使用 Pandas 读取 CSV 文件
- 25.11数据探索
- 25.12修改数据帧
- 25.13创建数据帧
- 25.14添加新列
- 25.15修改列值
- 25.16格式化 DataFrame 列
- 25.17检查列值的数据类型
- 25.18布尔索引
领取🎁 Q群号: 943192807(纯技术交流和资源共享)以自助拿走。
①行业咨询、专业解答
②Python开发环境安装教程
③400集自学视频
④软件开发常用词汇
⑤最新学习路线图
⑥3000多本Python电子书
第 21 天 - 类和对象
Python 是一种面向对象的编程语言。Python 中的一切都是一个对象,有它的属性和方法。程序中使用的数字、字符串、列表、字典、元组、集合等是相应内置类的对象。我们创建类来创建一个对象。一个类就像一个对象构造函数,或者是创建对象的“蓝图”。我们实例化一个类来创建一个对象。类定义了对象的属性和行为,而另一方面,对象代表了类。
从这个挑战一开始,我们就在不知不觉中处理类和对象。Python 程序中的每个元素都是一个类的对象。让我们检查一下python中的所有东西是否都是一个类:
asabeneh@Asabeneh:~$ python
Python 3.9.6 (default, Jun 28 2021, 15:26:21)
[Clang 11.0.0 (clang-1100.0.33.8)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> num = 10
>>> type(num)
<class 'int'>
>>> string = 'string'
>>> type(string)
<class 'str'>
>>> boolean = True
>>> type(boolean)
<class 'bool'>
>>> lst = []
>>> type(lst)
<class 'list'>
>>> tpl = ()
>>> type(tpl)
<class 'tuple'>
>>> set1 = set()
>>> type(set1)
<class 'set'>
>>> dct = {
}
>>> type(dct)
<class 'dict'>
21.1创建一个类
要创建一个类,我们需要关键字类,后跟名称和冒号。类名应该是CamelCase。
#语法
class ClassName:
code goes here
例子:
class Person:
pass
print(Person)
<__main__.Person object at 0x10804e510>
21.2创建对象
我们可以通过调用类来创建一个对象。
p = Person()
print(p)
21.3类构造函数
在上面的例子中,我们从 Person 类创建了一个对象。然而,没有构造函数的类在实际应用中并没有真正的用处。让我们使用构造函数使我们的类更有用。与Java或JavaScript中的构造函数一样,Python也有内置的init ()构造函数。的初始化构造函数有自参数这对类的当前实例的引用
实施例:
class Person:
def __init__ (self, name):
# self 允许将参数附加到类
self.name =name
p = Person('Asabeneh')
print(p.name)
print(p)
#输出
Asabeneh
<__main__.Person object at 0x2abf46907e80>
让我们向构造函数添加更多参数。
class Person:
def __init__(self, firstname, lastname, age, country, city):
self.firstname = firstname
self.lastname = lastname
self.age = age
self.country = country
self.city = city
p = Person('Asabeneh', 'Yetayeh', 250, 'Finland', 'Helsinki')
print(p.firstname)
print(p.lastname)
print(p.age)
print(p.country)
print(p.city)
p = Person ( 'Asabeneh' , 'Yetayeh' , 250 , 'Finland' , 'Helsinki' )
print ( p . firstname )
print ( p . lastname )
print ( p . age )
print ( p . country )
print ( p .city)
#输出
Asabeneh
Yetayeh
250
Finland
Helsinki
21.4对象方法
对象可以有方法。方法是属于对象的函数。
例子:
class Person:
def __init__(self, firstname, lastname, age, country, city):
self.firstname = firstname
self.lastname = lastname
self.age = age
self.country = country
self.city = city
def person_info(self):
return f'{
self.firstname} {
self.lastname} is {
self.age} years old. He lives in {
self.city}, {
self.country}'
p = Person('Asabeneh', 'Yetayeh', 250, 'Finland', 'Helsinki')
print(p.person_info())
#输出
Asabeneh Yetayeh is 250 years old. He lives in Helsinki, Finland
21.5对象默认方法
有时,您可能希望为对象方法设置默认值。如果我们在构造函数中给参数赋予默认值,就可以避免在不带参数的情况下调用或实例化我们的类时出错。让我们看看它的外观:
例子:
class Person:
def __init__(self, firstname='Asabeneh', lastname='Yetayeh', age=250, country='Finland', city='Helsinki'):
self.firstname = firstname
self.lastname = lastname
self.age = age
self.country = country
self.city = city
def person_info(self):
return f'{
self.firstname} {
self.lastname} is {
self.age} years old. He lives in {
self.city}, {
self.country}.'
p1 = Person()
print(p1.person_info())
p2 = Person('John', 'Doe', 30, 'Nomanland', 'Noman city')
print(p2.person_info())
#输出
Asabeneh Yetayeh is 250 years old. He lives in Helsinki, Finland.
John Doe is 30 years old. He lives in Noman city, Nomanland.
21.6修改类默认值的方法
在下面的例子中,person 类,所有的构造函数参数都有默认值。除此之外,我们还有技能参数,我们可以使用方法访问它。让我们创建 add_skill 方法来将技能添加到技能列表中。
class Person:
def __init__(self, firstname='Asabeneh', lastname='Yetayeh', age=250, country='Finland', city='Helsinki'):
self.firstname = firstname
self.lastname = lastname
self.age = age
self.country = country
self.city = city
self.skills = []
def person_info(self):
return f'{
self.firstname} {
self.lastname} is {
self.age} years old. He lives in {
self.city}, {
self.country}.'
def add_skill(self, skill):
self.skills.append(skill)
p1 = Person()
print(p1.person_info())
p1.add_skill('HTML')
p1.add_skill('CSS')
p1.add_skill('JavaScript')
p2 = Person('John', 'Doe', 30, 'Nomanland', 'Noman city')
print(p2.person_info())
print(p1.skills)
print(p2.skills)
#输出
Asabeneh Yetayeh is 250 years old. He lives in Helsinki, Finland.
John Doe is 30 years old. He lives in Noman city, Nomanland.
['HTML', 'CSS', 'JavaScript']
[]
21.7继承
使用继承,我们可以重用父类代码。继承允许我们定义一个继承父类的所有方法和属性的类。父类或超类或基类是提供所有方法和属性的类。子类是从另一个类或父类继承的类。让我们通过继承person类来创建一个student类。
班级 学生(人):
通过
class Student(Person):
pass
s1 = Student('Eyob', 'Yetayeh', 30, 'Finland', 'Helsinki')
s2 = Student('Lidiya', 'Teklemariam', 28, 'Finland', 'Espoo')
print(s1.person_info())
s1.add_skill('JavaScript')
s1.add_skill('React')
s1.add_skill('Python')
print(s1.skills)
print(s2.person_info())
s2.add_skill('Organizing')
s2.add_skill('Marketing')
s2.add_skill('Digital Marketing')
print(s2.skills)
输出
Eyob Yetayeh is 30 years old. He lives in Helsinki, Finland.
['JavaScript', 'React', 'Python']
Lidiya Teklemariam is 28 years old. He lives in Espoo, Finland.
['Organizing', 'Marketing', 'Digital Marketing']
我们没有在子类中调用init ()构造函数。如果我们没有调用它,那么我们仍然可以从父级访问所有属性。但是如果我们确实调用了构造函数,我们就可以通过调用super来访问父属性。
我们可以向子类添加新方法,也可以通过在子类中创建相同的方法名称来覆盖父类方法。当我们添加init ()函数时,子类将不再继承父类的init ()函数。
21.8Overriding parent method
class Student(Person):
def __init__ (self, firstname='Asabeneh', lastname='Yetayeh',age=250, country='Finland', city='Helsinki', gender='male'):
self.gender = gender
super().__init__(firstname, lastname,age, country, city)
def person_info(self):
gender = 'He' if self.gender =='male' else 'She'
return f'{
self.firstname} {
self.lastname} is {
self.age} years old. {
gender} lives in {
self.city}, {
self.country}.'
s1 = Student('Eyob', 'Yetayeh', 30, 'Finland', 'Helsinki','male')
s2 = Student('Lidiya', 'Teklemariam', 28, 'Finland', 'Espoo', 'female')
print(s1.person_info())
s1.add_skill('JavaScript')
s1.add_skill('React')
s1.add_skill('Python')
print(s1.skills)
print(s2.person_info())
s2.add_skill('Organizing')
s2.add_skill('Marketing')
s2.add_skill('Digital Marketing')
print(s2.skills)
Eyob Yetayeh is 30 years old. He lives in Helsinki, Finland.
['JavaScript', 'React', 'Python']
Lidiya Teklemariam is 28 years old. She lives in Espoo, Finland.
['Organizing', 'Marketing', 'Digital Marketing']
我们可以使用 super() 内置函数或父名 Person 来自动继承其父级的方法和属性。在上面的例子中,我们Overriding parent method的方法。child 方法有一个不同的特点,它可以识别性别是男性还是女性并指定适当的代词(他/她)
第 22 天 - 网页抓取
22.1什么是网页抓取
互联网充满了可用于不同目的的大量数据。为了收集这些数据,我们需要知道如何从网站上抓取数据。
网页抓取是从网站中提取和收集数据并将其存储在本地机器或数据库中的过程。
在本节中,我们将使用 beautifulsoup 和 requests 包来抓取数据。我们使用的包版本是beautifulsoup 4。
要开始抓取网站,您需要请求、beautifoulSoup4和网站。
pip install requests
pip install beautifulsoup4
要从网站抓取数据,需要对 HTML 标签和 CSS 选择器有基本的了解。我们使用 HTML 标签、类或/和 ID 定位来自网站的内容。让我们导入 requests 和 BeautifulSoup 模块
import requests
from bs4 import BeautifulSoup
让我们为要抓取的网站声明 url 变量。
import requests
from bs4 import BeautifulSoup
url = 'https://archive.ics.uci.edu/ml/datasets.php'
# 让我们使用 requests 的 get 方法从 url 中获取数据
response = requests.get(url)
# 让我们检查状态
status = response.status_code
print(status) # 200 means the fetching was successful
200
使用beautifulSoup解析页面内容
import requests
from bs4 import BeautifulSoup
url = 'https://archive.ics.uci.edu/ml/datasets.php'
response = requests.get(url)
content = response.content # 我们从网站上获取所有内容
soup = BeautifulSoup(content, 'html.parser') # beautiful soup will give a chance to parse
print(soup.title) # <title>UCI Machine Learning Repository: Data Sets</title>
print(soup.title.get_text()) #UCI机器学习库:数据集
print(soup.body) # 给网站上的整个页面
print(response.status_code)
tables = soup.find_all('table', {
'cellpadding':'3'})
# 我们的目标是 cellpadding 属性值为 3 的表格
# 我们可以选择使用 id、class 或 HTML 标签,更多信息请查看beautifulsoup doc beautifulsoup doc
table = tables[0] # the result is a list, we are taking out data from it
for td in table.find('tr').find_all('td'):
print(td.text)
如果你运行这段代码,你可以看到提取已经完成了一半。
🌕你很特别,每天都在进步。您距离通往伟大的道路只剩下八天了。
🎉 恭喜! 🎉
第 23 天 - 虚拟环境
23.1设置虚拟环境
从项目开始,最好有一个虚拟环境。虚拟环境可以帮助我们创建一个孤立或分离的环境。这将帮助我们避免跨项目的依赖冲突。如果您在终端上编写 pip freeze ,您将在计算机上看到所有已安装的软件包。如果我们使用 virtualenv,我们将只访问特定于该项目的包。打开终端并安装 virtualenv
asabeneh@Asabeneh: ~ $ pip install virtualenv
在 30DaysOfPython 文件夹中创建一个 flask_project 文件夹。
安装 virtualenv 包后,转到您的项目文件夹并通过编写以下内容创建一个虚拟环境:
对于 Mac/Linux:
asabeneh@Asabeneh: ~ /Desktop/30DaysOfPython/flask_project \$ virtualenv venv
对于 Windows:
C:\Ú SERS \Ú SER \ d ocuments \ 3 0DaysOfPython \˚F lask_project >python-m VENV VENV
我更喜欢将新项目称为 venv,但可以随意使用不同的名称。让我们检查 venv 是否是通过使用 ls(或 dir 用于 Windows 命令提示符)命令创建的。
asabeneh@Asabeneh:~ /Desktop/30DaysOfPython/flask_project$ ls
venv/
让我们通过在我们的项目文件夹中编写以下命令来激活虚拟环境。
对于 Mac/Linux:
asabeneh@Asabeneh: ~ /Desktop/30DaysOfPython/flask_project$ source venv/bin/activate
在 Windows 中激活虚拟环境可能非常依赖于 Windows Power shell 和 git bash。
对于 Windows 电源外壳:
C:\Ú SERS \Ú SER \ d ocuments \ 3 0DaysOfPython \˚F lask_project > VENV \ S cripts \一个ctivate
对于 Windows Git bash:
C:\Ú SERS \Ú SER \ d ocuments \ 3 0DaysOfPython \˚F lask_project > VENV \ S cripts \。启用
编写激活命令后,您的项目目录将以 venv 开头。请参阅下面的示例。
(venv) asabeneh@Asabeneh: ~ /Desktop/30DaysOfPython/flask_project$
现在,让我们通过编写 pip freeze 来检查这个项目中的可用包。您将看不到任何包。
我们将要做一个Flask小项目,所以让我们将Flask包安装到这个项目中。
(venv) asabeneh@Asabeneh: ~ /Desktop/30DaysOfPython/flask_project$ pip install Flask
现在,让我们编写 pip freeze 来查看项目中已安装包的列表:
(venv) asabeneh@Asabeneh:~/Desktop/30DaysOfPython/flask_project$ pip freeze
Click==