【免费】Python数据分析与脚本编写课程|Python的基础介绍
大家好,小亚老师上线了。上一节我们已经做好了软件的安装准备以及如何启动 Jupyter Notebook,现在我们开始设置我们的 Jupyter Notebooks。
大家可以看到,Jupyter Notebooks 被分为单元格。在使用 Notebook 执行 Python 代码的时候,我们每一次运行,会执行一个单元格的代码。要执行一个单元格,点击单元格内部并按 shift+enter。
就像每个文件都有个名字一样,我们先给代码起个名字。
在左上角,点击"Untitled"(未命名)的位置并将名称更改为"ApexBioWorkshop" 或者自己起一个喜欢的名字。现在我们就已经更改了Jupyter Notebook 的名称。

Jupyter Notebooks 允许我们在某些单元格中使用一种称为 Markdown 的东西。我们可以使用 Markdown 来编写关于我们笔记本的描述,供他人阅读。
一个好的做法是让您的第一个单元格为 Markdown 以解释笔记本的目的。让我们在第一个单元格中这样做。点击第一个单元格内部,然后在屏幕顶部选择 单元格(Cell)->单元格类型(Cell Type)->Markdown(如下所示)。
苹果版:

Windows版:

现在我们点击单元格,然后复制以下的文字,然后按 shift+enter,看看会发生什么?
Tip
Markdown 是一种轻量级的标记语言,设计用于以纯文本格式编写文档,但同时能够转换为结构化的 HTML。它通过使用简单的符号(如 #、* 和 [] 等)来定义不同的文本格式,如标题、列表、链接等。这使得它非常适合编写需要转换为 HTML 的文档,如 README 文件、博客文章、技术文档等。在 Markdown 中,我们刚使用一个 # 号创建标题。使用两个 ## 创建副标题。
当我们看到下面这张图的时候,我们的 Jupyter Notebooks 就已经设置好了,我们准备开始学习一些 Python 了!

分配变量和数据类型
任何 Python 解释器(Interpreter)都可以像计算器一样工作。虽然这并不是我们主要使用的方法,但我们可以先进行一些简单的尝试。在你的 Jupyter 笔记本的下一个单元格中输入一些计算式,例如:55+7 (或 3*94 等),然后执行这一行(还记得怎么执行的对吧,按 shift+enter)。

在这里,Python 为我们进行了计算。为了保存这个值或其他值,我们将它们分配给一个变量以供后续使用。分配变量的语法如下:
variable_name = variable_value
Tip:供了解
变量名(variable_name):
• 变量名是你为存储数据而创建的一个标识符。它可以是任意你选择的名称,但必须遵循一定的规则,例如不能以数字开头、不能包含空格等。
• 变量名应该具有描述性,以便你和其他人能够理解它的用途。例如,如果你存储一个人的年龄,你可以使用变量名 age。
等号(=):
• 等号在这里是赋值运算符,用于将等号右侧的值赋给等号左侧的变量。
• 注意,这与数学中的等号不同,数学中的等号表示等式两边相等,而在编程中,等号表示赋值操作。
变量值(variable_value):
• 变量值是你希望存储在变量中的数据。它可以是各种类型的数据,例如数字、字符串、列表等。
例如,你可以将数字 25 赋值给变量 age,即 age = 25。
让我们通过一个计算来看一下这在实际中的应用。在你的 Jupyter 笔记本的下一个单元格中输入以下内容:
# 使用 Michaelis-Menten 方程进行计算
Km = 15.0 # Km = 15 微摩尔
Vmax = 100.0 # Vmax = 100.0 纳摩尔/秒
substrate_concentration = 8.0 # 底物浓度为 8.0 微摩尔
velocity = Vmax * substrate_concentration/(Km + substrate_concentration)
# Michaelis-Menten 方程
输入可以得到下图

大家可以看到在这段代码中有#号,我们一般使用 # 来在代码中添加注释,无论是在行首还是在行中(注释符号后的整行内容都是注释)。计算机不会对这些注释做任何处理。这里使用注释是为了提醒用户每个值使用的单位。注释通常也用于解释代码的作用或为未来使用代码的人留下信息(或者是一种神秘力量的保护如下图)。

言归正传,养成一个好习惯很重要。当我们选择变量名时,应选择有意义的名称,以便阅读代码的人能够理解它们代表的内容。命名一个变量为 temp或 temperature比命名为 t 更具信息性。
当我们分配变量之后,现在可以在其他单元格中访问这些变量。
让我们打印出(Print)我们计算的值。我们经常使用 print 函数只是为了确保我们的代码正常工作,在之后的学习中大家可以体会到。
在下一个单元格中输入(大家一定要注意代码中括号等字符的使用,一定是英文的括号!):print(velocity)
然后执行这行代码,我们就可以获得 velocity 的结果。

各位请注意,如果你没有为变量指定一个新的名称,那么它的值不会自动改变;这种特性被称为不可变性(immutable)。
例如下面我们即使输入了 velocity*1000,但是没有指定一个新的名称,velocity 的数值没有发生变化。如果我们想要改变velocity的值,我们必须使用相同的变量名重新保存该变量,比如我们输入 velocity = velocity * 60 之后,等于覆盖现有的值,这样 velocity 的数值发生了改变。通常,更好的做法是给变量一个新名称,并保持现有变量不变。
我们可以一次赋值多个变量
Python 可以进行所谓的多重赋值,即在一行代码中为多个变量赋值。
# 我可以一次性为所有这些变量赋值
Km, vmax, substrate_concentration = 15.0, 100.0, 8.0
velocity=vmax*substrate_concentration/(Km + substrate_concentration)
print(velocity)

以上就是分配变量的部分,接下来我们介绍数据类型
每个变量都是某种特定类型的数据。最常见的数据类型是字符串 (str)、整数 (int) 和浮点数 (float)。
可以使用函数 type(variable_name) 来识别任何变量的数据类型。
现在请各位小伙伴尝试输入
type(velocity)
大家可以看到我们 velocity 的数据类型是浮点数 (float)。
当然,我们也可以更改变量的数据类型。这被称为类型转换(casting)。
velocity_string = str(velocity)type(velocity_string)
现在我们可以看到 velocity_string 的类型就变为了字符串 (str)。

Tip:
不同类型的数据在内存中的存储方式不同。整数、浮点数和字符串的存储占用的字节数不同。通过为不同的数据选择适当的类型,可以更有效地利用内存。不同的数据类型支持不同的操作。字符串可以进行拼接、切片等操作,而整数和浮点数可以进行算术运算。通过区分数据类型,可以更直观地表示数据的用途和预期操作。
截止到目前,我们可以通过学习的内容进行很多重要功能的实现,建议大家手动输入以下的代码进行尝试,多多练习。
计算酶的活性单位
# 已知酶的反应速率和酶的浓度
reaction_rate = 50.0 # 纳摩尔/分钟
enzyme_concentration = 0.1 # 毫克/毫升
# 计算酶的活性单位(U/mg)
enzyme_activity = reaction_rate / enzyme_concentration
print(f"酶的活性单位为: {enzyme_activity} 纳摩尔/分钟/毫克")
Tip:注意代码中的括号的变化(大家可以通过搜索“f字符串”或“f-strings”进行学习哦)。
计算稀释倍数
# 已知原液浓度和目标浓度
original_concentration = 100.0 # 毫克/毫升
target_concentration = 10.0 # 毫克/毫升
# 计算稀释倍数
dilution_factor = original_concentration / target_concentration
print(f"稀释倍数为: {dilution_factor}")
计算DNA扩增循环数
# 已知初始DNA拷贝数和扩增后的DNA拷贝数
initial_copies = 2
final_copies = 1e6
# 计算所需的扩增循环数
import math
cycles = math.log2(final_copies / initial_copies)
print(f"所需的扩增循环数为: {cycles}")
Tip:这里的 import 是 Python 语言中的一个关键字,用于引入模块。模块是包含一组功能的文件,模块可以被其他程序引用来使用其功能。Python 标准库中包含许多模块,可以在需要时导入(在后期的课程中我们会展开介绍)。在这个例子中,import math 是将 Python 的数学模块 math 导入到当前的脚本中,以便使用该模块提供的数学函数。
计算基因组大小
# 已知基因组中的碱基对数
base_pairs = 3.2e9 # 人类基因组大约有 3.2 亿碱基对
# 计算基因组大小(以兆碱基对为单位)
genome_size = base_pairs / 1e6
print(f"基因组大小为: {genome_size} 兆碱基对 (Mb)")
计算细胞分裂时间
# 已知细胞分裂的初始时间和末时间
initial_time = 0 # 小时
final_time = 24 # 小时
# 已知细胞分裂的代数(倍数增加次数)
generations = 8
# 计算细胞分裂时间(每一代所需的时间)
division_time = (final_time - initial_time) / generations
print(f"每一代细胞分裂所需的时间为: {division_time} 小时")
各位小伙伴一定要坚持哦,万事开头难。好的,本周的课程先为大家介绍到这里,下周小亚老师将为大家介绍列表与切片的内容。





沪公网安备 31011002003500