第七篇【传奇开心果系列】Python微项目技术点案例示例:数据可视化界面图形化经典案例

import nicegui as ng
import pandas as pd

# 初始化学生姓名和成绩数据
students = []
grades = []

# 创建界面
with ng.box():
    ng.text('学生成绩数据导入导出')
    
    # 添加按钮,用于导入数据
    if ng.button('导入数据').clicked:
        uploaded_file = ng.file_upload()
        if uploaded_file:
            if uploaded_file.name.endswith('.csv'):
                df = pd.read_csv(uploaded_file)
            elif uploaded_file.name.endswith('.xlsx'):
                df = pd.read_excel(uploaded_file)
            students = df['Student'].tolist()
            grades = df['Grade'].tolist()
            ng.text('数据导入成功!')
    
    # 添加按钮,用于展示数据
    if ng.button('展示数据').clicked:
        ng.text('学生成绩数据:')
        for student, grade in zip(students, grades):
            ng.text(f'{student}: {grade}')
    
    # 添加按钮,用于导出数据为Excel文件
    if ng.button('导出为Excel').clicked:
        df = pd.DataFrame({'Student': students, 'Grade': grades})
        ng.file_download(df.to_excel(), filename='grades.xlsx', label='导出为Excel')
    
    # 添加按钮,用于导出数据为CSV文件
    if ng.button('导出为CSV').clicked:
        df = pd.DataFrame({'Student': students, 'Grade': grades})
        ng.file_download(df.to_csv(), filename='grades.csv', label='导出为CSV')

在这个示例中,我们根据用户上传的文件类型(CSV或Excel)选择相应的读取方法。用户可以上传Excel或CSV格式的文件,并选择导出为Excel或CSV格式的文件。这样用户可以根据需要灵活处理数据。您可以根据具体需求对代码进行修改和扩展。

八、主题定制示例代码

在这里插入图片描述以下是更新后的示例代码,添加了四种主题选项:

import nicegui as ng
import pandas as pd

# 初始化学生姓名和成绩数据
students = []
grades = []

# 创建界面
with ng.box():
    ng.text('学生成绩数据导入导出')
    
    # 添加主题定制功能
    theme_options = ['Light', 'Dark', 'Blue', 'Green']
    theme = ng.radio('选择主题风格', theme_options, default='Light')
    
    if theme == 'Dark':
        ng.set_theme('dark')
    elif theme == 'Blue':
        ng.set_theme('blue')
    elif theme == 'Green':
        ng.set_theme('green')
    else:
        ng.set_theme('light')
    
    # 添加按钮,用于导入数据
    if ng.button('导入数据').clicked:
        uploaded_file = ng.file_upload()
        if uploaded_file:
            if uploaded_file.name.endswith('.csv'):
                df = pd.read_csv(uploaded_file)
            elif uploaded_file.name.endswith('.xlsx'):
                df = pd.read_excel(uploaded_file)
            students = df['Student'].tolist()
            grades = df['Grade'].tolist()
            ng.text('数据导入成功!')
    
    # 添加按钮,用于展示数据
    if ng.button('展示数据').clicked:
        ng.text('学生成绩数据:')
        for student, grade in zip(students, grades):
            ng.text(f'{student}: {grade}')
    
    # 添加按钮,用于导出数据为Excel文件
    if ng.button('导出为Excel').clicked:
        df = pd.DataFrame({'Student': students, 'Grade': grades})
        ng.file_download(df.to_excel(), filename='grades.xlsx', label='导出为Excel')
    
    # 添加按钮,用于导出数据为CSV文件
    if ng.button('导出为CSV').clicked:
        df = pd.DataFrame({'Student': students, 'Grade': grades})
        ng.file_download(df.to_csv(), filename='grades.csv', label='导出为CSV')

在这个示例中,我们添加了一个主题选择器,让用户可以选择界面风格(Light或Dark)。根据用户的选择,我们调用ng.set_theme()函数来设置界面的主题风格。用户可以根据喜好选择合适的主题风格,以增强用户体验。我们又扩展示例添加了两种额外的主题选项(Blue和Green),并相应地设置界面的主题风格。用户现在可以选择四种不同的主题风格来定制界面。您可以根据需要进一步扩展和定制主题功能。希望这个示例对您有所帮助!如果您有任何问题,请随时告诉我。

九、数据过滤示例代码

在这里插入图片描述以下是示例代码,添加了数据过滤功能,让用户可以根据特定条件筛选数据进行分析:

import nicegui as ng
import pandas as pd

# 初始化学生姓名和成绩数据
students = []
grades = []

# 创建界面
with ng.box():
    ng.text('学生成绩数据导入导出和过滤')
    
    # 添加主题定制功能
    theme_options = ['Light', 'Dark', 'Blue', 'Green']
    theme = ng.radio('选择主题风格', theme_options, default='Light')
    
    if theme == 'Dark':
        ng.set_theme('dark')
    elif theme == 'Blue':
        ng.set_theme('blue')
    elif theme == 'Green':
        ng.set_theme('green')
    else:
        ng.set_theme('light')
    
    # 添加按钮,用于导入数据
    if ng.button('导入数据').clicked:
        uploaded_file = ng.file_upload()
        if uploaded_file:
            if uploaded_file.name.endswith('.csv'):
                df = pd.read_csv(uploaded_file)
            elif uploaded_file.name.endswith('.xlsx'):
                df = pd.read_excel(uploaded_file)
            students = df['Student'].tolist()
            grades = df['Grade'].tolist()
            ng.text('数据导入成功!')
    
    # 添加按钮,用于展示数据
    if ng.button('展示数据').clicked:
        ng.text('学生成绩数据:')
        for student, grade in zip(students, grades):
            ng.text(f'{student}: {grade}')
    
    # 添加按钮,用于导出数据为Excel文件
    if ng.button('导出为Excel').clicked:
        df = pd.DataFrame({'Student': students, 'Grade': grades})
        ng.file_download(df.to_excel(), filename='grades.xlsx', label='导出为Excel')
    
    # 添加按钮,用于导出数据为CSV文件
    if ng.button('导出为CSV').clicked:
        df = pd.DataFrame({'Student': students, 'Grade': grades})
        ng.file_download(df.to_csv(), filename='grades.csv', label='导出为CSV')
    
    # 添加数据过滤功能
    ng.text('数据过滤:')
    filter_value = ng.input('输入过滤条件(成绩大于等于多少):', type=float)
    filtered_students = [student for student, grade in zip(students, grades) if grade >= filter_value]
    ng.text('过滤后的学生成绩数据:')
    for student in filtered_students:
        ng.text(student)

在这个示例中,我们添加了一个数据过滤功能,让用户可以根据特定条件(成绩大于等于用户输入的值)筛选数据进行分析。用户可以输入过滤条件,并展示符合条件的学生姓名数据。您可以根据需要进一步扩展和定制数据过滤功能。

十、数据比较示例代码

在这里插入图片描述以下是示例代码,添加了数据比较功能,允许用户选择不同班级或学科的数据进行比较分析:

import nicegui as ng
import pandas as pd

# 初始化学生姓名、成绩和班级数据
students = []
grades = []
classes = []

# 创建界面
with ng.box():
    ng.text('学生成绩数据导入导出、过滤和比较')
    
    # 添加主题定制功能
    theme_options = ['Light', 'Dark', 'Blue', 'Green']
    theme = ng.radio('选择主题风格', theme_options, default='Light')
    
    if theme == 'Dark':
        ng.set_theme('dark')
    elif theme == 'Blue':
        ng.set_theme('blue')
    elif theme == 'Green':
        ng.set_theme('green')
    else:
        ng.set_theme('light')
    
    # 添加按钮,用于导入数据
    if ng.button('导入数据').clicked:
        uploaded_file = ng.file_upload()
        if uploaded_file:
            if uploaded_file.name.endswith('.csv'):
                df = pd.read_csv(uploaded_file)
            elif uploaded_file.name.endswith('.xlsx'):
                df = pd.read_excel(uploaded_file)
            students = df['Student'].tolist()
            grades = df['Grade'].tolist()
            classes = df['Class'].tolist()
            ng.text('数据导入成功!')
    
    # 添加按钮,用于展示数据
    if ng.button('展示数据').clicked:
        ng.text('学生成绩数据:')
        for student, grade, class_ in zip(students, grades, classes):
            ng.text(f'{student}: {grade} - {class\_}')
    
    # 添加按钮,用于导出数据为Excel文件
    if ng.button('导出为Excel').clicked:
        df = pd.DataFrame({'Student': students, 'Grade': grades, 'Class': classes})
        ng.file_download(df.to_excel(), filename='grades.xlsx', label='导出为Excel')
    
    # 添加按钮,用于导出数据为CSV文件
    if ng.button('导出为CSV').clicked:
        df = pd.DataFrame({'Student': students, 'Grade': grades, 'Class': classes})
        ng.file_download(df.to_csv(), filename='grades.csv', label='导出为CSV')
    
    # 添加数据过滤功能
    ng.text('数据过滤:')
    filter_value = ng.input('输入过滤条件(成绩大于等于多少):', type=float)
    filtered_students = [student for student, grade in zip(students, grades) if grade >= filter_value]
    ng.text('过滤后的学生成绩数据:')
    for student in filtered_students:
        ng.text(student)
    
    # 添加数据比较功能
    ng.text('数据比较:')
    compare_option = ng.select('选择比较对象', ['班级', '学科'])
    if compare_option == '班级':
        class_options = list(set(classes))
        selected_class = ng.select('选择班级', class_options)
        class_students = [student for student, class_ in zip(students, classes) if class_ == selected_class]
        ng.text(f'班级为{selected\_class}的学生成绩数据:')
        for student in class_students:
            ng.text(student)
    elif compare_option == '学科':
        # 在这里添加学科比较逻辑
        ng.text('学科比较功能暂未实现')

在这个示例中,我们添加了一个数据比较功能,允许用户选择不同班级或学科的数据进行比较分析。用户可以选择比较对象(班级或学科),然后选择具体的班级或学科进行比较。您可以根据需要进一步扩展和完善学科比较功能。

十一、界面优化示例代码

在这里插入图片描述
在这里插入图片描述以下是优化后的示例代码,让图形化界面更加漂亮美观现代时尚:

import nicegui as ng
import pandas as pd
import plotly.express as px

# 初始化学生姓名、成绩和班级数据
students = []
grades = []
classes = []

# 创建界面
with ng.box():
    ng.title('学生成绩分析')
    
    # 添加按钮,用于导入数据
    if ng.button('导入数据').clicked:
        uploaded_file = ng.file_upload()
        if uploaded_file:
            if uploaded_file.name.endswith('.csv'):
                df = pd.read_csv(uploaded_file)
            elif uploaded_file.name.endswith('.xlsx'):
                df = pd.read_excel(uploaded_file)
            students = df['Student'].tolist()
            grades = df['Grade'].tolist()
            classes = df['Class'].tolist()
            ng.text('数据导入成功!')
    
    # 添加按钮,用于展示数据
    if ng.button('展示数据').clicked:
        ng.text('学生成绩数据:')
        for student, grade, class_ in zip(students, grades, classes):
            ng.text(f'{student}: {grade} - {class\_}')
    
    # 添加按钮,用于导出数据为Excel文件
    if ng.button('导出为Excel').clicked:
        df = pd.DataFrame({'Student': students, 'Grade': grades, 'Class': classes})
        ng.file_download(df.to_excel(), filename='grades.xlsx', label='导出为Excel')
    
    # 添加按钮,用于导出数据为CSV文件
    if ng.button('导出为CSV').clicked:
        df = pd.DataFrame({'Student': students, 'Grade': grades, 'Class': classes})
        ng.file_download(df.to_csv(), filename='grades.csv', label='导出为CSV')
    
    # 添加数据过滤功能
    ng.section('数据过滤')
    filter_value = ng.input('输入过滤条件(成绩大于等于多少):', type=float)
    filtered_students = [student for student, grade in zip(students, grades) if grade >= filter_value]
    ng.text('过滤后的学生成绩数据:')
    for student in filtered_students:
        ng.text(student)
    
    # 添加数据比较功能
    ng.section('数据比较')
    compare_option = ng.select('选择比较对象', ['班级', '学科'])
    if compare_option == '班级':
        class_options = list(set(classes))
        selected_class = ng.select('选择班级', class_options)
        class_students = [student for student, class_ in zip(students, classes) if class_ == selected_class]
        ng.text(f'班级为{selected\_class}的学生成绩数据:')
        for student in class_students:
            ng.text(student)
    elif compare_option == '学科':
        # 在这里添加学科比较逻辑
        ng.text('学科比较功能暂未实现')
    
    # 添加数据可视化图表
    ng.section('数据可视化')
    if ng.button('显示成绩分布图').clicked:
        df = pd.DataFrame({'Student': students, 'Grade': grades, 'Class': classes})
        fig = px.histogram(df, x='Grade', color='Class', title='成绩分布图')
        ng.plotly(fig)

在优化后的示例代码中,我们通过使用NiceGUI的标题、部分标题和按钮样式,以及Plotly库创建的交互式图表,使图形化界面更加漂亮美观现代时尚。用户可以通过按钮点击显示成绩分布图,以便更直观地了解学生成绩情况。

十二、面向对象更新优化程序示例代码

在这里插入图片描述
在这里插入图片描述以下是面向对象编程的示例代码,优化了图形化界面,使其更加漂亮美观现代时尚:

import nicegui as ng
import pandas as pd
import plotly.express as px

class StudentGradeAnalyzer:
    def \_\_init\_\_(self):
        self.students = []
        self.grades = []
        self.classes = []
    
    def import\_data(self, file):
        if file.name.endswith('.csv'):
            df = pd.read_csv(file)
        elif file.name.endswith('.xlsx'):
            df = pd.read_excel(file)
        self.students = df['Student'].tolist()
        self.grades = df['Grade'].tolist()
        self.classes = df['Class'].tolist()
    
    def show\_data(self):
        ng.text('学生成绩数据:')
        for student, grade, class_ in zip(self.students, self.grades, self.classes):
            ng.text(f'{student}: {grade} - {class\_}')
    
    def export\_excel(self):
        df = pd.DataFrame({'Student': self.students, 'Grade': self.grades, 'Class': self.classes})
        ng.file_download(df.to_excel(), filename='grades.xlsx', label='导出为Excel')
    
    def export\_csv(self):
        df = pd.DataFrame({'Student': self.students, 'Grade': self.grades, 'Class': self.classes})
        ng.file_download(df.to_csv(), filename='grades.csv', label='导出为CSV')
    
    def filter\_data(self, filter_value):
        filtered_students = [student for student, grade in zip(self.students, self.grades) if grade >= filter_value]
        ng.text('过滤后的学生成绩数据:')
        for student in filtered_students:
            ng.text(student)
    
    def compare\_data(self, compare_option, selected_option):
        if compare_option == '班级':
            class_students = [student for student, class_ in zip(self.students, self.classes) if class_ == selected_option]
            ng.text(f'班级为{selected\_option}的学生成绩数据:')
            for student in class_students:
                ng.text(student)
        elif compare_option == '学科':
            ng.text('学科比较功能暂未实现')
    
    def visualize\_data(self):
        df = pd.DataFrame({'Student': self.students, 'Grade': self.grades, 'Class': self.classes})
        fig = px.histogram(df, x='Grade', color='Class', title='成绩分布图')
        ng.plotly(fig)

# 创建学生成绩分析器实例
analyzer = StudentGradeAnalyzer()

# 创建界面
with ng.box():
    ng.title('学生成绩分析')
    
    if ng.button('导入数据').clicked:


**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里无偿获取](https://bbs.csdn.net/topics/618317507)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值