编程不难
本站点所用开发环境:
- Python 3.13.5
- conda 25.5.1
在 Windows 上安装 Miniconda
在 Windows 系统上,从网站下载 Python 最新版本(目前是 3.9)的 Miniconda 安装包。建议按照 conda 网站上的 Windows 安装指导进行安装。大多数人需要安装 64 位版本,但如果你的 Windows 计算机不支持 64 位,可以安装 32 位的安装包。
当系统提示只为用户自己安装还是为所有用户安装时,请选择最适合的选项。只为自己安装的话,对本书来说就足够了。安装过程中还会询问用户是否将 Miniconda 添加到系统的 PATH 环境变量中。如果勾选了此项(我通常是勾选此项的),Miniconda 的安装就会覆盖之前已经安装过的其余 Python 版本。如果不勾选此项,则用户可以从开始菜单找到 Miniconda 的快捷打开方式。开始菜单中快捷方式的名字可能是“Anaconda 3(64- bit)”。
这里假设用户没有将 Miniconda 添加到系统的 PATH 环境变量中。为了确认配置是否正确,首先单击开始菜单中“Anaconda 3(64-bit)”下的“Anaconda Prompt(Miniconda 3)”。然后输入命令 python,启动 Python 解释器。可以看到如下信息:
(base)C:\Users\admin>python
Python 3.9 [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
要退出 Python 命令行,输入命令 exit() 后按下回车键即可。
GNU/Linux
Linux 下的安装细节取决于你所用的 Linux 版本,这里给出 Debian、Ubuntu、CentOS 和 Fedora 的安装方法。设置方法与 macOS 大致相同,只是 Miniconda 的安装方法除外。大多数读者需要下载默认的 64 位安装文件,它适用于 x 86 架构(但将来更多的用户也可能是用基于 aarch 64 的 Linux)。安装包是一个脚本文件,必须在终端中执行。下载完成后,你会得到一个文件,名字类似于 Miniconda 3- latest- Linux- x 86_64. sh。用 bash 进行安装:
$ bash Miniconda3-latest-Linux-x86_64.sh
某些 Linux 发行版在包管理器中有满足需求的 Python 包(但版本可能是过时的),只需用类似 apt 的工具安装就行。这里用 Miniconda 安装,适用于不同的 Linux 发行版,也很容易将包升级到最新版本。
之后,系统会询问用户在哪里放置 Miniconda 的文件。推荐将文件安装到默认的主路径,例如 /home/$USER/miniconda($USER 是用户名)。
Miniconda 安装包会询问你是否愿意修改命令行脚本,以自动激活 Miniconda。为了方便以后使用,推荐用户这么做(选择“yes”)。
完成这些安装步骤后,打开一个新的终端窗口,输入 python 命令,确认安装的是最新的 Miniconda:
(base)$python
Python 3.9 | (main) [GCC 10.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
要退出 Python 命令行,输入 exit() 后按下回车键,或按组合键 Ctrl+D。
在 macOS 上安装 Miniconda
下载 macOS 的 Miniconda 安装包。对于 2020 年后出厂的基于苹果芯片的 macOS 计算机,安装包的名字类似于 Miniconda 3-latest-MacOSX-arm 64. sh。对于 2020 年之前的基于因特尔芯片的 Mac 计算机,安装包的名字可能是 Miniconda 3-latest-MacOSX-x 86_64. sh。打开 macOS 的终端,使用 bash 命令执行安装包(可能位于 Downloads 文件夹):
$ bash $HOME/Downloads/Miniconda3-latest-MacOSX-arm64.sh
安装包在运行时,会在默认命令行配置文件中自动将 Miniconda 配置为命令行环境。配置文件的位置可能是 /Users/$USER/.zshrc。推荐遵循安装包的配置,如果不希望安装包修改默认的命令行环境,可以查阅 Miniconda 文档。
要确认安装是否正确,在系统命令行窗口(打开终端的命令提示符)输入 python 命令,启动 Python:
$ python
Python 3.9 (main) [Clang 12.0.1 ] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
要退出命令行,按组合键 Ctrl+D,或输入 exit() 后按下回车键。
安装必要的包
现在我们已经在系统上安装好了 Miniconda,接下来就可以安装本书中要用到的包了。第一步是在命令行中运行如下命令将 conda-forge 配置为默认的包安装方式:
(base) $ conda config --add channels conda-forge
(base) $ conda config --set channel_priority strict
现在,我们用 conda create 命令创建新的 conda“环境”,其中 Python 的版本是 3.10:
(base)$ conda create -y -n pydata-book python=3.10
安装完毕后,使用 conda activate 激活环境:
(base)$ conda activate pydata-book
(pydata-book) $
每次打开新终端,都必须用 conda activate 命令激活环境。在任何时候,都可以用命令 conda info 查看活跃的 conda 环境信息。
接下来,我们用 conda install 来安装本书中要用到的包(以及这些包的依赖):
(pydata-book) $ conda install -y pandas jupyter matplotlib
我们还会用到其他包,后面用到时再安装就行了。有两种安装包的方式:conda install 和 pip install。当使用 Miniconda 时需要优先使用 conda install,但有些包通过 conda 安装不上,如果 conda install $package_name 安装失败,可以尝试 pip install $package_name。
如果你想安装本书中用到的所有其他包,可以运行如下命令:
conda install lxml beautifulsoup4 html5lib openpyxl \
requests sqlalchemy seaborn scipy statsmodels \
patsy scikit-learn pyarrow pytables numba
在 Windows 上,用上尖括号(^)替换 Linux 和 macOS 中的反斜杠(\)。
可以使用 conda update 命令升级包:conda update package_name
使用 --upgrade 标志,pip 也可以升级包:pip install -- upgrade package_name
本书中,你会多次使用以上命令。
虽然使用 conda 和 pip 都可以安装包,但对于原本用 conda 安装的包,要避免使用 pip 对其升级,反之亦然。如果这么做的话,会导致环境异常。建议读者首选使用 conda 做包管理,如果碰到无法用 conda install 安装的包,再使用 pip。
集成开发环境和文本编辑器
当被问及标准开发环境时,我几乎总是回答”IPython 加文本编辑器”。我在编程时,通常反复在 IPython 或 Jupyter notebook 中测试和调试每行代码。这种方式也可以交互式操作数据,并可视化验证数据操作中某一特定的集合是否正确。经过精心设计,pandas 和 NumPy 在命令行中可以做到事半功倍。
但是,当开发软件时,一些用户可能更想使用功能更为丰富的集成开发环境(IDE),而不是功能相对简单的文本编辑器,比如 Emacs 或 Vim。下面介绍一些可供尝试的 IDE: - PyDev(免费),基于 Eclipse 平台的 IDE。 - JetBrains 的 PyCharm(商业用户需要订阅,对开源开发者免费)。 - Python Tools for Visual Studio(适合 Windows 用户)。 - Spyder(免费),Anaconda 附带的 IDE。 - KomodoIDE(商业软件)
Python 十分流行,大多数文本编辑器,比如 VS Code 和 Sublime Text 2,对 Python 的支持也非常好。
2.1 集成开发环境
简单来说,IDE(集成开发环境)就是我们写代码、跑代码的地方。
Python 有很多常用的 IDE,比如。
JupyterLab:基于 Web 的交互式开发环境,支持多种编程语言,包括 Python,可以快速编写、测试和共享代码,非常适合数据科学和机器学习领域。JupyterLab 和 JupyterNotebook 非常适合大家做探究式学习。后文将详细介绍如何使用 JupyterLab。
Spyder:基于 Qt 开发的 PythonIDE,提供了一个集成的开发环境,包括编辑器、调试器和控制台,非常适合科学计算和数据分析。对于 MATLAB 转 Python 的读者来说,Spyder 可能是最容易上手的 IDE。在所有的 PythonIDE 中,Spyder 最像 MATLAB。
PyCharm:JetBrains 公司开发的跨平台 PythonIDE,提供了许多功能,包括代码智能提示、代码自动完成、调试和单元测试等。建议有 Python 开发经验的读者使用 PyCharm 运行本书代码。
什么是集成开发环境?
集成开发环境(Integrated Development Environment,简称 IDE)是一种用于软件开发的工具。它通常包括一个代码编辑器、一个调试器和一个构建工具,以及其他功能,例如自动补全、语法高亮、代码重构等。IDE 的目的是提供一个集成的工作环境,使开发人员能够更高效地编写、调试和测试代码。使用 IDE 可以极大地提高开发效率。例如,它可以帮助开发人员在编写代码时自动补全函数名称、参数等,减少打错代码的风险;它可以提供一些调试工具来检测和修复代码中的错误,使得开发人员更容易发现问题;它可以通过自动构建工具来编译和构建代码,减少手动操作的繁琐过程。总之,IDE 是一种开发人员必备的工具,可以让开发人员更加专注于编写高质量的代码。
表 1.比较三个常用的 IDE
| 维度 | JupyterLab | Spyder | PyCharm |
|---|---|---|---|
| 适用场景 | 数据科学、机器学习、交互式 | 科学计算、数据分析 | 通用编程、开发 |
| 编辑器 | 基于 Web 的文本编辑器 | Qt 构建的文本编辑器 | IntelliJ IDEA 编辑器 |
| 调试器 | 内置的交互式调试器 | 内置的调试器 | 内置的调试器 |
| 插件支持 | 丰富的插件生态系统 | 插件支持较少 | 丰富的插件生态系统 |
| 社区支持 | 由 Jupyter 项目支持 | 由 Spyder 社区支持 | 由 JetBrains 公司支持 |
| 扩展性 | 支持自定义和扩展 | 可以自定义外观和行为 | 支持自定义和扩展 |
| 学习曲线 | 平缓 | 友好 | 稍微陡峭 |
| 收费与否 | 免费 | 免费 | 有免费和付费版本 |
| 平台支持 | 支持 Windows、Mac 和 Linux | 支持 Windows、Mac 和 Linux | 支持 Windows、Mac 和 Linux |
Anaconda 可谓“科学计算全家桶”,包含科学计算领域可能用到的大部分 Python 工具,包括 Python 解释器、常用的第三方库、包管理器、IDE 等。
前文提到的 JupyterLab、Spyder、PyCharm 这三个 IDE 都在 Anaconda 中。
什么是 Anaconda?
Anaconda 是一个流行的 Python 发行版,由 Anaconda,Inc. 开发和维护,旨在为数据科学、机器学习和科学计算提供一个全面的工具包。Anaconda 集成了许多常用的 Python 库和工具,如 NumPy、SciPy、Pandas、Matplotlib、Scikit-learn、Jupyter Notebook 等。它还包括一个名为 conda 的软件包管理器,可以帮助用户安装、更新和管理 Python 库和依赖项。Anaconda 还提供了一个名为 Anaconda Navigator 的图形用户界面,用户可以通过这个界面轻松地管理他们的 Python 环境、安装和卸载库、启动 Jupyter Notebook 等操作。除了 Python 环境和库之外,Anaconda 还包括许多其他工具和应用程序,如 Spyder、PyCharm、VS Code、R 语言环境等等,使得它成为数据科学家和研究人员的首选工具之一。Anaconda 可以安装在多个平台上,包括 Windows、Linux 和 Mac OS X。
2.2 如何安装 Anaconda?
下文手把手教大家如何在 Windows 上安装、测试 Anaconda,有经验的读者可以跳过。
对于 Mac 用户,大家可以参考如下链接安装 Anaconda:
https://docs.anaconda.com/anaconda/install/mac-os/
要是想特别安装某个版本的 Python,请参考:
https://pythonhowto.readthedocs.io/zh_CN/latest/install.html
注意,Anaconda 安装后大概占用 5 G 空间。有 Python 开发经验的读者,可以根据需求自行分别安装 JupyterLab、Spyder、PyCharm。
在 Windows 上安装 Anaconda 可以按照以下步骤进行。
a)下载。在 Anaconda 官网下载适合大家操作系统的 Anaconda 版本,选择对应的 Python 版本(一般建议选择最新版 Python 3. x),并下载对应的安装程序。
注意,Anaconda 不断推出新版本,大家下载的版本号肯定和下图的版本号不同。建议大家从官网下载最新版本安装程序。
b)运行安装程序:下载完毕后,双击下载文件运行安装程序。在安装程序打开后,点击“Next”进入下一步。
图 2. 运行安装程序
c)阅读协议:阅读协议并同意“I Agree”,然后点击“Next”。
图 3. 阅读协议
d)安装类型:推荐默认 Just Me;对于多用户 PC,可以选择“All Users”;然后点击“Next”。
图 4. 安装类型
e)安装路径:可以指定 Anaconda 的安装路径(建议零基础读者选择默认路径),然后点击“Next”。
图 5. 安装路径
f)配置环境变量:选择是否将 Anaconda 添加到系统环境变量中,建议勾选该选项,这样就可以在命令行中使用 Anaconda 的工具了。然后点击”Install”进行安装。
图 6. 安装选择
g)等待安装完成:安装过程可能持续 10 分钟左右。等待安装完成后,会弹出”Installation Complete”对话框,点击”Next”。如果这步持续时间过长(超过一小时),建议强制停止安装,删除安装包。关机再开机,重新下载安装包从头开始再尝试安装。
图 7. 等待安装完成
图 8. 安装完成
图9. 广告时间,点 Next
h)完成安装:点击“Finish”完成 Anaconda 的安装。之后会跳出两个网页,不需要理会,关闭即可。
图 10. 确认完成
安装完成后,可以在“开始菜单”中找到 Anaconda 的安装目录,并启动“Anaconda Navigator”来使用 Anaconda 的工具和功能。同时,也可以在命令行中使用 Anaconda 的工具和命令,例如使用“conda”命令来管理 Python 的虚拟环境和安装依赖包等。
2.3 测试 JupyterLab
要打开并测试 JupyterLab,可以按照以下步骤进行。
a)找到并打开 Anaconda Navigator(计算机慢的话,至少需要 1 分钟左右才能打开,稍安勿躁),点击 JupyterLab 对应的 Launch。马上一个网页将会跳出来,建议大家默认使用 Chrome 浏览器(兼容性更好),Firefox 或 Edge 也都可以。
图 11. Anaconda Navigator 界面
b)进入 JupyterLab 界面,点击 Notebook(Python 3),创建 Jupyter Notebook。
图 12. JupyterLab 界面
图 13. 创建 Jupyter Notebook
c)在下面窗口中输入,1 + 2,然后点击“Ctrl + Enter”快捷键,运行并得到 3 这个结果。大家也可以尝试“Shift + Enter”快捷键,运行代码同时生成新区块,大家自己可以先玩一会。下一章将专门讲解如何使用 JupyterLab。
图 14. 运算
2.4 查看 Python 第三方库版本号
在安装 Anaconda 时,各种常用的 Python 工具已经顺道安装完成。有些时候,我们需要查看 Python 各种库的版本号,下面介绍几种方法。
大家可以进入 Anaconda Navigator,点击 Environments,如果有不同环境的话,选择特定的环境,在右侧可以看到已经安装库的版本号。
图 15. 在 Anaconda Navigator 查看 Python 库版本号
在电脑中搜索 Anaconda Prompt,然后键入 conda list,也可以调取所有安装 Python 库的版本号。
图 16. 在 Anaconda Prompt 查看 Python 库版本号
此外,在图 15 中左键点击绿色三角(播放图标),左键单击 Open Terminal 也可以打开 Anaconda Prompt。
在 Anaconda Prompt,我们可以用 pip show 库名,比如 pip show numpy,来调取某个特定 Python 库信息。
图 17. 在 Anaconda Prompt 查看某个特定 Python 库版本号
在 JupyterLab 中,我们也可以用 !pip list 查看已经安装的所有 Python 库版本号。在 JupyterLab 中,感叹号(exclamation mark)! 用于执行操作系统命令或外部程序。比如,! dir 可以调取当前文件的目录。!pip install 包名,还可以用 pip 安装特定 Python 库。
图 18. 在 JupyterLab 中查看 Python 库版本号
此外,对于特定 Python 包,我们还可以用如下语句查看其版本号。
图 19. 在 JupyterLab 中查看某个特定 Python 库版本号
对于编程零基础读者,特别推荐大家逐行注释。
本书第 4 章专门介绍如何注释代码。
下面,我们就聊聊代码 1。
这句话就是注释。简单来说,代码中的注释是给人看的,机器对其视而不见。在 Python 中, #符号用于创建单行注释 。注释是用于解释代码的文本,它不会被 Python 解释器执行,因此不会影响程序的运行。
即便如此,编程时注释并不是可有可无的部分。我们可以使用注释来解释代码的目的、功能或特殊注意事项。毫不夸张地说,自己写完的代码,过不了一个月可能就会忘了某些具体语句或逻辑,而代码注释就完美解决这一问题。代码注释当然对于其他开发人员阅读和理解代码非常有帮助。
在调试或测试代码时,我们也可以使用临时注释来暂时禁用或跳过某些代码行。
此外,在自定义函数时,我们也可以添加多行注释,来生成代码文档。本书第 8 章会专门介绍自定义函数。
导入 SciPy 库。SciPy 是一个用于科学计算和数据分析的开源 Python 库,它包含了许多用于数学、科学和工程计算的功能和工具。
本书第 26 章专门介绍 SciPy 库。
在 Python 中,import 是一个关键字,用于导入其他 Python 库/包/模块。
本书第 4 章将专门介绍如何使用 import。
在 JupyterLab 中,只有成功导入某个库或模块后,才能调用其中函数。
注意,SciPy(S 和 P 大写)是这个 Python 库的名字,而在 JupyterLab 中,导入这个库时,scipy 为全小写无空格。
中,print () 是 Python 的内置函数,用来打印,p 小写。
scipy: %s 是一个包含占位符的字符串,其中%s 是一个占位符,表示后面将被替换成一个字符串的值。在 Python 中,字符串(string)是一种数据类型,用于表示纯文本数据。
本书第 5 章将专门介绍包括字符串在内的常用数据类型。
scipy.__version__ 是 SciPy 库的一个属性,它包含了当前导入的 SciPy 版本的字符串。通过 scipy.__version__,我们可以获取计算机中当前 SciPy 库的版本信息。
在 Python 中用于导入 NumPy 库的语句。NumPy 是 Python 中用于科学计算和数值操作的一个强大的开源库。它提供了多维数组(NumPy array)和一系列用于操作这些数组的函数。NumPy 广泛用于数据分析、科学计算、机器学习等领域。
本书第 \(13 \sim 18\) 章介绍 NumPy 库常用工具。
导入 Matplotlib 库的语句。Matplotlib 是一个用于创建各种类型的图形和可视化的 Python 库。
本书第 \(10 \sim 12\) 章专门介绍常用可视化工具。
导入 Pandas 库。Pandas 是 Python 中用于数据分析和数据操作的高性能库。Pandas 提供了两种主要数据结构:Series 和 DataFrame,用于处理和操作各种类型的数据,包括表格数据、时间序列数据等等。
本书第 \(19 \sim 24\) 章介绍 Pandas 库常用工具。
导入 Statsmodels 库。Statsmodels 是一个 Python 库,用于执行统计分析和建立统计模型,包括线性回归、时间序列分析、假设检验和许多其他统计方法。
本书第 27 章专门介绍 Statsmodels 库。
导入 Scikit-learn 库。Scikit-learn,也称 sklearn,是一个强大的开源机器学习库,提供了用于各种机器学习任务的工具和算法。它包括分类、回归、聚类、降维、模型选择、模型评估等各种机器学习任务的实现。Scikit-learn 还包括用于数据预处理和特征工程的功能。
本书第 \(28 \sim 33\) 章介绍 Scikit-learn 库常用工具。

2.5 安装、更新、卸载 Python 第三方库
即便安装 Anaconda 时,各种常用 Python 库已经安装好;但是,在使用时,我们经常会安装其他库,亦或是更新已经安装的库。
以 streamlit 为例,本书后续会利用 pandas- datareader 下载金融数据。在安装 Anaconda 时,这个库没有被安装,需要我们自行安装。
使用 pip 安装。pip 是 Python 的包管理器,它是最常用的安装库的方法。打开 Anaconda Prompt,然后运行 pip install pandas- datareader 命令来安装库。
图 20. 安装 pandas-datareader
如果使用的是 Anaconda Python 环境,有时也可以使用 conda 包管理器来安装库,比如 conda install library_name。具体采用 pip 还是 conda,建议大家在安装任何第三方库之前,首先查看这个库的技术文档,了解库的版本、更新情况、使用说明、常见案例。比如,pandas- datareader 的技术文档:
https://pandas-datareader.readthedocs.io/en/latest/
在这个网页首页,我们看到推荐 pip install pandas- datareader 安装 pandas- datareader。
如果大家有多个 Anaconda 环境,安装特定库时需要选择特定环境。如图 21 所示,当前 Anaconda 有两个环境,如果我们想在 demo 环境安装 Streamlit 的话,左键点击其绿色三角,在菜单中左键点击 Open Terminal,然后调出对应环境的 Anaconda Prompt。然后利用 pip install streamlit 安装 Streamlit。
图 21. 在特定 Anaconda 环境安装 Python 库
C:. exe - pip install streamlit
(demo) C:>pip install streamlit
顺便提一嘴,在 Anaconda Navigator 中可以很轻松创建全新 Python 环境。如图 23 所示,大家只需要点击左下角加号 Create,在弹出的对话框中输入环境名称,大家还可以选择不同 Python 版本号。如果大家使用 R 语言的话,还可以创建 R 语言环境。
图 22. 安装 Streamlit 图 23. 在 Anaconda Navigator 中创建新环境
Streamlit 是一个用于创建 Web 应用程序的 Python 库,它可以让数据科学家、工程师和分析师轻松地将数据应用程序转化为交互式 Web 应用程序,无需深入的前端开发经验。我们将在本书最后两章利用 streamlit 搭建数学动画、数据分析、机器学习 App。请大家在安装 Streamlit 前,查看其技术文档:
https://docs.streamlit.io/library/get-started/installation
有时,我们也可以从库的源代码安装库,下载或克隆压缩文件,利用类似 python setup. pyinstall 命令安装。这种方法不推荐初学者使用。
此外,我们也可以在 JupyterLab 中,用!pipinstalllibrary_name 方法安装特定库。这种方法也不推荐初学者使用。注意,惊叹号!为半角。
想要卸载特定 Python 库也很容易,大家在 AnacondaPrompt 中键入 pipuninstalllibrary_name。
想要更新某个 Python 库,可以使用 pip install library_name - - upgrade。如图 24 所示,大家也可以在 Anaconda Navigator 查看某个 Python 库是否有更新。如果出现蓝色箭头,这说明该库有新版本。
注意,由于 Python 库由不同第三方开发者开发、维护,更新库时要小心兼容性问题。这就是为什么我们有时需要不同 Anaconda 环境,以便控制不同库的版本。
图 24. 在 Anaconda Navigator 中查看 Python 库是否有更新
库的健康情况
Python 第三方库都是由社区开发者开发、维护,在使用一些生僻的 Python 库之前,建议大家了解一下这个库的健康情况。
大家可以查看库在 GitHub 或其他代码托管平台上的维护更新情况,比如提最近提交日期、版本历史、日志更新,以及提交频率等信息。此外,大家也可以看看 GitHub 上库的安装使用、标星(star)、问题(issue)等是否活跃。某个 Python 库的技术文档质量、更新情况也可以作为衡量其健康程度的指标。
此外,最简单的办法就是通过 SynkAdvisor 打分来评估 Python 库的健康情况:
一般来说,评分在 85 分左右的 Python 库可以一试。评分如果在 95 分上下,说明 Python 库的健康程度很好。
吐槽一下,pandas-datareader 这个 Python 库的维护就很差,2023 年 9 月份这个库在 SnykAdvisor 评分仅为 62 分,刚及格。也就是说这个库凑合能用,但是出现 bug 后果自负。
在撰写本书时,作者还能用 pandas-datareader 从 FRED(Federal Reserve Economic Data)下载金融数据。为了避免 pandas-datareader 失效,作者对本书中用到的金融数据都做了备份,大家可以在本书配套代码中找到。
万一下载失败,可以用 pandas. read_csv () 函数导入 CSV 数据。很期待开发者能尽快更新库,并解决 Yahoo 金融数据下载问题。
请大家完成以下题目。
Q 1. 安装 Anaconda。
Q 2. 从 Anaconda Navigator 进入 JupyterLab 并完成测试。编写并执行代码 1。再次提醒,快捷键组合点击“Ctrl + Enter”完成当前代码块运算。
Q 3:打开 Anaconda Navigator,查看已安装 Python 库的版本。
Q 4:从 Anaconda Navigator 进入 Anaconda Prompt,然后安装 pandas-datareader 和 Streamlit。