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

文末有福利领取哦~

👉一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。img

👉二、Python必备开发工具

img
👉三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
img

👉 四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。(文末领读者福利)
img

👉五、Python练习题

检查学习结果。
img

👉六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
img

img

👉因篇幅有限,仅展示部分资料,这份完整版的Python全套学习资料已经上传

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

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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

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:
        uploaded_file = ng.file_upload()
        if uploaded_file:
            analyzer.import_data(uploaded_file)
            ng.text('数据导入成功!')
    
    if ng.button('展示数据').clicked:
        analyzer.show_data()
    
    if ng.button('导出为Excel').clicked:
        analyzer.export_excel()
    
    if ng.button('导出为CSV').clicked:
        analyzer.export_csv()
    
    ng.section('数据过滤')
    filter_value = ng.input('输入过滤条件(成绩大于等于多少):', type=float)
    analyzer.filter_data(filter_value)
    
    ng.section('数据比较')
    compare_option = ng.select('选择比较对象', ['班级', '学科'])
    if compare_option == '班级':
        class_options = list(set(analyzer.classes))
        selected_class = ng.select('选择班级', class_options)
        analyzer.compare_data(compare_option, selected_class)
    elif compare_option == '学科':
        analyzer.compare_data(compare_option, None)
    
    ng.section('数据可视化')
    if ng.button('显示成绩分布图').clicked:
        analyzer.visualize_data()

在优化后的示例代码中,我们将学生成绩分析功能封装到了一个名为StudentGradeAnalyzer的类中,通过面向对象编程的方式实现了界面优化。通过创建一个学生成绩分析器实例,并调用其方法来处理数据导入、展示、导出、过滤、比较和可视化等功能,使界面更加漂亮美观现代时尚。

十三、归纳总结

在这里插入图片描述
在这里插入图片描述在这个面向对象编程的示例代码中,我们可以总结出以下知识点:

  1. 面向对象编程(OOP):使用类和对象来组织代码,将数据和操作封装在一起,实现代码的模块化和重用。
  2. 类和对象:通过定义类StudentGradeAnalyzer来创建学生成绩分析器实例analyzer,实现数据处理和操作。
  3. 实例方法:在类中定义的方法(函数),用于操作实例的数据和状态。
  4. 数据处理:导入数据、展示数据、导出数据、过滤数据、比较数据和可视化数据等功能。
  5. 界面优化:使用nicegui库创建美观的图形化界面,包括按钮、文本框、下拉框、文件上传、文件下载等交互元素。

最后

🍅 硬核资料:关注即可领取PPT模板、简历模板、行业经典书籍PDF。
🍅 技术互助:技术群大佬指点迷津,你的问题可能不是问题,求资源在群里喊一声。
🍅 面试题库:由技术群里的小伙伴们共同投稿,热乎的大厂面试真题,持续更新中。
🍅 知识体系:含编程语言、算法、大数据生态圈组件(Mysql、Hive、Spark、Flink)、数据仓库、Python、前端等等。

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

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值