创建 Python 调查:Python Shiny 入门指南
您好,Python 爱好者们!今天,我们将为您带来一个非常激动人心的话题。如果你和我一样,可能会想:"我想知道我是否能创建自己的调查问卷?"在今天的文章中,我们将实现这个梦想!
我们将使用一个名为 "Shiny for Python "的强大工具,学习如何使用它来创建我们自己的超棒调查应用程序。 如果你是初学者,别担心,这篇文章就是为你准备的!
那么,让我们一起踏上 Python 的神奇之旅吧。让我们从创建一个 Python 调查开始,让你的创造力尽情驰骋!
1. Python 的 Shiny:调查的新视野
用于 Python 的 Shiny为什么?因为它可以让您创建交互式网络应用程序,而无需复杂的网络技术。
尤其是在构建调查应用程序时,Shiny for Python 是一步完成从数据收集到分析的绝佳方法。
用于 Python 的 Shiny
Shiny for Python 是一个允许您用 Python 开发响应式网络应用程序的框架。它将广受欢迎的 Shiny 软件包从 R 语言引入 Python 环境,使数据科学家无需复杂的网络开发知识就能创建交互式数据可视化应用程序。
Shiny for Python 由用户界面和服务器部分组成,可以根据用户输入动态计算和显示结果。 它还提供了通过 Shinylive 直接在浏览器中运行应用程序的功能,而无需服务器。
2.开始前:需要携带的物品清单
在开始构建 Python 调查应用程序之前,您需要一些东西。让我们一起来看看。
- Python 3.8 或更高版本。 点击此处)
- 您最喜欢的代码编辑器(如 VS Code、PyCharm)
- 终端使用的基本知识
- 激情和好奇心(最重要!)。
好了,现在你们都准备好了,让我们兴奋起来吧!
3. 为 Python 安装 Shiny
首先,你需要安装 Shiny for Python。打开终端,键入以下命令
pip install shiny运行上述命令就能安装 Shiny for Python,这是创建 Python 调查的第一步。很酷吧(下图中,我运行的是已经安装好的重装系统,所以你可以看到我已经很满意了)。

4. 创建你的第一个 Shiny 应用程序
现在,让我们开始创建一个 Python 调查表。首先,让我们从最基本的 Shiny 应用程序开始。 虚拟环境运行下面的代码。
#survey_app
from shiny import App, ui
定义 # 用户界面
app_ui = ui.page_fluid(
ui.h1("My First Shiny App")、
ui.p("Welcome to the world of Shiny for Python!")
)
# 空服务器函数(可稍后添加逻辑)
def server(input, output, session):
传递
# 创建 Shiny 应用程序对象
app = App(app_ui, server)代码评注
- (我将上述代码保存在 survey_app 名称下)。
from shiny import App, ui从 Shiny 库中导入必要的类和模块。app_ui = ui.page_fluid(...)定义应用程序的用户界面(UI)。ui.h1(...):为页面添加一个大标题(H1 标签)。ui.p(...)添加一个 : 段落(p 标记),以显示欢迎信息。
def server(input, output, session):定义一个服务器函数。目前这是个空函数,但将来可以在此添加应用程序的逻辑1.应用程序 = 应用程序(app_ui,服务器)结合用户界面和服务器功能,创建 Shiny 应用程序对象。
shiny run survey_app.py如果在终端中输入上述命令并按 Enter 键,就会得到如下响应:127.0.0.1:8000,按住 Ctrl 键的同时点击它,就会生成一个非常简单的网页。很有趣吧?


5. 创建调查表
现在,让我们开始创建一个调查表。我们将创建一个简单的表单,询问您的姓名、年龄和最喜欢的编程语言。
from shiny import App, ui, reactive
定义 # 用户界面
app_ui = ui.page_fluid(
ui.h1("Python 程序员调查"),# 标题(h1 标记)
ui.input_text("name", "Enter your name"), # 文本输入框(姓名)
ui.input_numeric("年龄", "输入您的年龄", value=20), # 数字输入框(默认值 20)
ui.input_select(
"您最喜欢的编程语言是什么?
"您最喜欢的编程语言是什么?", # 选择输入框
choices=["Python", "JavaScript", "Java", "C++", "Other"]), ui.input_select(
),
ui.input_action_button("submit", "Submit"), # 按钮(提交)
ui.output_text_verbatim("result") # 输出字段(结果)
)
定义 # 服务器逻辑
def server(input, output, session):
@reactive.Effect
@reactive.event(input.submit) # 在点击按钮时执行
def submit_survey():
# 将输入数据合并为字符串并输出
result = f "姓名:{input.name()},年龄:{input.age()},最喜欢的语言:{input.fav_lang()}"。
output.result.set(result) # 在用户界面中显示结果
运行 # Shiny 应用程序
app = App(app_ui, server)代码评注
- 用户界面配置 (
app_ui)ui.h1(...)显示调查的标题。ui.input_text(...)姓名:提供一个文本字段,供用户输入姓名。ui.input_numeric(...)提供一个数字字段供您输入您的年龄。默认值为 20。ui.input_select(...)创建一个下拉菜单,以便用户选择自己喜欢的编程语言。ui.input_action_button(...)添加提交调查按钮。ui.output_text_verbatim(...)创建一个空间,将用户输入的结果输出为文本。
- 服务器逻辑 (
服务器功能)@reactive.Effect指定为响应函数。@reactive.event(input.submit)点击 : 按钮 (顺从) 仅在事件发生时执行。result = f "姓名:{input.name()},年龄:{input.age()},最喜欢的语言:{input.fav_lang()}"
→ 提取用户输入的数据并生成字符串。output.result.set(result)
→ 在用户界面中显示结果。output_text_verbatim("result")在该区域显示。
- 运行 Shiny 应用程序 (
应用程序 = 应用程序(app_ui,服务器))应用程序(app_ui,服务器)将用户界面连接到服务器。app.run()将在网络浏览器中打开应用程序。
这样就会生成类似下面这样的基本 Python 调查表。很酷吧?

6.保存数据
收集和存储数据是调查的关键,因此让我们添加以 CSV 文件存储调查受访者数据的功能。
from shiny import App, ui, reactive
import pandas as pd # 如有需要,使用 pip install pandas 安装这些软件包
from pathlib import Path
定义 # 用户界面
app_ui = ui.page_fluid(
ui.h1("Python 程序员调查"),# 标题(h1 标记)
ui.input_text("name", "Enter your name"), # 文本输入框(姓名)
ui.input_numeric("年龄", "输入您的年龄", value=20), # 数字输入框(默认值 20)
ui.input_select(
"您最喜欢的编程语言是什么?
"您最喜欢的编程语言是什么?", # 选择输入框
choices=["Python", "JavaScript", "Java", "C++", "Other"]), ui.input_select(
),
ui.input_action_button("submit", "Submit"), # 按钮(提交)
ui.output_text_verbatim("result") # 输出字段(结果)
)
定义 # 服务器逻辑
def server(input, output, session):
@reactive.Effect
@reactive.event(input.submit) # 在点击按钮时执行
def submit_survey():
# 将用户输入的数据存储为字典
data = {
"name":[input.name()]、
年龄[input.age()]、
"favourite_language":[input.fav_lang()]。
}
将 # 数据转换为 Pandas DataFrame
df = pd.DataFrame(data)
检查 # CSV 文件是否存在并保存
file_path = "survey_results.csv" 文件
if not Path(file_path).exists():
df.to_csv(file_path, index=False) # 第一次保存时包含标题
否则
df.to_csv(file_path, mode="a", header=False, index=False) # 进一步保存到现有文件中
# 向用户界面输出结果信息
output.result.set("Your response has been recorded. Thank you!")
# 运行 Shiny 应用程序
app = App(app_ui, server)代码评注
1. 将数据保存到 CSV 文件
- 用户的输入数据存储在字典 (
口述) 格式。 pandas.DataFrame将其转换为数据帧。- 将响应数据保存到
"调查_结果.csv"保存到文件。- 如果不存在,请创建一个新文件,然后单击 "带页眉保存"。
- 如果文件已经存在,则以 "附加 "模式保存新的响应数据(不包括标题)。
2. 响应式事件处理
@reactive.event(input.submit)使用提交设置为仅在按下按钮时运行。
3. 显示结果信息
- 保存数据后
"您的回复已被记录。谢谢!"向用户界面输出信息。
在 Python 调查表中,我们输入了 Trump、20 岁和 Python。 我们按下了提交按钮,调查回复现在保存在 CSV 文件(survey_result)中。如果您点击该文件,就会看到您输入的数据,如下所示!

恭喜您,您出色地创建了 Python 调查表,迈出了数据分析的第一步。
7 将调查结果可视化
现在我们已经收集了数据,让我们将结果可视化吧。让我们使用 Shiny for Python 和 matplotlib 创建一个简单的图表。
from shiny import App, ui, reactive, render
import pandas as pd
import matplotlib.pyplot as plt
from pathlib import Path
定义 # 用户界面
app_ui = ui.page_fluid(
ui.h1("Python 程序员调查"),# title
ui.input_text("name", "Enter your name"),#姓名输入框
ui.input_numeric("年龄", "输入您的年龄", value=20), # 年龄输入框
ui.input_select(
"您最喜欢的编程语言是什么?
"您最喜欢的编程语言是什么?", # 选择您最喜欢的编程语言
choices=["Python", "JavaScript", "Java", "C++", "Other"]).
),
ui.input_action_button("submit", "提交"), # 提交按钮
ui.output_text_verbatim("result"), # 结果输出
ui.output_plot("age_histogram") # 年龄分布直方图输出
)
定义 # 服务器逻辑
def server(input, output, session):
@reactive.Effect
@reactive.event(input.submit) # 在点击按钮时执行
def submit_survey():
# 将用户输入数据保存为字典
data = {
"name":[input.name()]、
年龄[input.age()]、
"favourite_language":[input.fav_lang()]。
}
将 # 数据转换为数据帧
df = pd.DataFrame(data)
设置 # 文件路径
file_path = "survey_results.csv" 文件路径
如果 # CSV 文件不存在,则创建该文件(包括标题);如果存在,则添加该文件 (Append)
if not Path(file_path).exists():
df.to_csv(file_path, index=False)
否则
df.to_csv(file_path, mode="a", header=False, index=False)
输出 # 保存完成信息
output.result.set("Your response has been recorded. Thank you!")
@output
@render.plot
def age_histogram():
加载 # 调查数据
file_path = "survey_results.csv
if not Path(file_path).exists():
return # 如果不存在数据,则不绘制图表
df = pd.read_csv(file_path)
创建 # 年龄分布直方图
fig, ax = plt.subplots(figsize=(10, 6)) # 创建新图
ax.hist(df['age'], bins=10, edgecolour='black', alpha=0.7) # 直方图
ax.set_title('Age Distribution')
ax.set_xlabel('Age')
ax.set_ylabel('Response Count')
return fig # 返回 "fig "而不是 "plt.gcf()"。
# 运行 Shiny 应用程序
app = 应用程序(app_ui,服务器)代码评注
1. 年龄分布柱状图 (年龄历史图 Add)
ui.output_plot("age_histogram")以便为用户界面中的图形腾出空间。@output @render.plot使用装饰器创建一个年龄历史图( )定义一个函数。调查结果.csv从matplotlib生成直方图。- 年龄 (
年龄)字段,以直观显示基于该字段的回复数量。
2. 处理无数据时的异常情况
if not Path(file_path).exists(): return添加一个条件,以便在没有调查数据时抑制图表。
3. 用户界面更新
ui.output_plot("age_histogram")以实时直观地显示受访者的年龄分布。
这将创建一个直方图,一目了然地显示受访者的年龄分布。数据看起来是不是很生动? 现在,我只随机输入了四个案例,所以没有得到很好的直方图)。

8. 总结:Shiny for Python 的无限可能
到目前为止,我们已经使用 Shiny for Python 创建了一个简单的 Python 调查应用程序,而这仅仅是个开始!使用 Shiny for Python,你可以创建更复杂的交互式应用程序,比如下面这个。
- 实时更新仪表板
- 使用机器学习模型的预测应用程序
- 大规模数据可视化工具
你的想象力就是极限!
你喜欢创建 Python 调查问卷吗?当你开始使用 Shiny for Python 时,你是不是很喜欢从收集数据到分析和可视化数据一气呵成的过程? 现在,你已经掌握了创建自己的调查应用程序的基础知识。
如果你想深入了解 用于 Python 的 Shiny而最好的学习方法就是创建自己的应用程序。创建自己独特的调查应用程序!
现在轮到你了。你想用 Python 和 Shiny for Python 构建哪些很酷的应用程序?请在评论中分享您的想法。让我们一起快乐成长!







