用pythonds和streamlit-pandas-profiling打造数据可视化与算法学习的完美结合

雅竹代码课堂 2025-04-20 13:46:51

在当今的数据时代,掌握数据可视化和算法基本技能显得尤为重要。本文将介绍两个强大的 Python 库:pythonds 和 streamlit-pandas-profiling。pythonds 专注于数据结构和算法的学习,适合深入理解计算机科学的基本概念。而 streamlit-pandas-profiling 则为数据分析提供了直观的可视化工具,可以快速生成数据报告。结合这两个库,让我们实现更高效的数据处理与算法学习。

pythonds 提供了实现常用数据结构和算法的课程,适合学习数据结构如栈、队列、图、树等,以及算法的基本概念。而 streamlit-pandas-profiling 允许用户创建交互式 Web 应用,方便地进行数据探索和报告生成。两个库组合后,可以实现以下功能:

第一个组合功能是使用 pythonds 中的排序算法来处理数据并用 streamlit-pandas-profiling 展示排序前后的对比。下面是一个简单的例子,展示如何使用 pythonds 中的冒泡排序算法,以及如何使用 streamlit-pandas-profiling 进行数据可视化:

# 引入所需库from pythonds.basic import Stackimport pandas as pdimport streamlit as stfrom pandas_profiling import ProfileReport# 冒泡排序函数def bubble_sort(data):    n = len(data)    for i in range(n):        for j in range(0, n-i-1):            if data[j] > data[j+1]:                data[j], data[j+1] = data[j+1], data[j]    return data# 生成测试数据data = [64, 34, 25, 12, 22, 11, 90]# 排序前可视化st.write("排序前数据:", data)st.bar_chart(data)# 排序数据sorted_data = bubble_sort(data)# 排序后可视化st.write("排序后数据:", sorted_data)st.bar_chart(sorted_data)# 使用 pandas-profiling 生成数据报告df = pd.DataFrame(sorted_data, columns=['Sorted Data'])profile = ProfileReport(df, title="Sorted Data Report", explorative=True)st_profile = st.write(profile)

运行以上代码,可以看到排序前后的数据可视化效果。用户可以很直观地对比排序前后的变化,这不仅帮助学习排序算法,也让数据变得生动有趣。

第二个组合功能是使用 pythonds 处理图结构数据,然后结合 streamlit-pandas-profiling 生成图的性质与可视化。例如,以下代码展示如何使用 pythonds 中的图结构来表示社交网络,并用 streamlit 展示关系图:

# 引入库from pythonds.graphs import Graphimport streamlit as stimport networkx as nximport matplotlib.pyplot as plt# 创建图G = Graph()G.addEdge("A", "B")G.addEdge("A", "C")G.addEdge("B", "D")G.addEdge("C", "D")G.addEdge("D", "E")# 可视化G_nx = nx.Graph()for vertex in G.getVertices():    G_nx.add_node(vertex)for edge in G.getEdges():    G_nx.add_edge(edge.getStart(), edge.getEnd())plt.figure(figsize=(8, 6))nx.draw(G_nx, with_labels=True, node_color='lightblue', node_size=2000, font_size=15, font_color='darkblue')plt.title("社交网络图")st.pyplot(plt)# 使用 pandas-profiling 生成数据报告report_data = {vertex: G.getEdges(vertex) for vertex in G.getVertices()}df = pd.DataFrame(dict([(k, pd.Series(v)) for k, v in report_data.items()]))profile = ProfileReport(df, title="Graph Data Report", explorative=True)st_profile = st.write(profile)

以上代码展示了如何将使用 pythonds 构建的图结构转化为网络并进行可视化,同时生成报告。这个过程让我们对图的性质有了更深入的理解。

最后一个组合功能是将 pythonds 用于实现构建和操作树,而用 streamlit-pandas-profiling 分析树结构的性质并进行可视化。例如,下面演示如何使用二叉树进行数据存储:

# 引入库from pythonds.trees import BinaryTreeimport streamlit as stimport pandas as pdfrom pandas_profiling import ProfileReport# 创建二叉树def create_tree():    tree = BinaryTree('A')    tree.insertLeft('B')    tree.insertRight('C')    tree.LeftChild.insertLeft('D')    tree.LeftChild.insertRight('E')    return tree# 可视化树def display_tree(tree):    data = {        'Node': [],        'Left Child': [],        'Right Child': []    }    def traverse(node):        if node:            data['Node'].append(node.getRootVal())            left = node.getLeftChild()            right = node.getRightChild()            data['Left Child'].append(left.getRootVal() if left else None)            data['Right Child'].append(right.getRootVal() if right else None)            traverse(left)            traverse(right)    traverse(tree)    df = pd.DataFrame(data)    return df# 创建树并展示binary_tree = create_tree()df = display_tree(binary_tree)st.write(df)# 使用 pandas-profiling 生成数据报告profile = ProfileReport(df, title="Binary Tree Data Report", explorative=True)st_profile = st.write(profile)

这里,我们创建了一棵简单的二叉树,并将树结构通过数据表的形式展示出来,同时生成了可交互的数据报告。通过这些实例,用户能够更好地理解数据结构的应用场景。

在应用这两个库进行组合时,可能会遇到一些问题。比如,数据格式不一致时,使用 streamlit 时需要确保数据的预处理。此外,较大的数据集在生成报告时可能会消耗较多内存资源,确保系统配置适合处理的负载是很重要的。针对这些问题,可以尝试主动进行数据清洗,分批加载数据,或对数据量进行合理控制,以便保证应用顺畅。

如果你在学习或实践中遇到难题,欢迎随时留言与你分享。我希望通过这些实际例子和对代码的逐步讲解,能够帮助你更好地理解 pythonds 与 streamlit-pandas-profiling 的应用,激发大家对数据科学和算法的兴趣。深入理解数据与算法,将会为我们的职业生涯铺就广阔的道路。期待你的反馈和问题!

0 阅读:0