Skip to content

Pythonun/new_code

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 

Repository files navigation

交互式数据分析工具

简介

本应用是一个基于Streamlit构建的交互式数据分析工具,它为用户提供了一个便捷的数据分析仪表板。用户既可以上传CSV文件,也能使用内置的示例数据开展分析。该工具支持数据筛选、采样、相关性分析、分布分析和分组分析等多项功能,并且所有参数和数据状态都通过Streamlit的session_state进行管理,从而确保了交互体验和数据的一致性。

主要特性

  1. 数据加载:支持上传CSV文件,同时提供一键加载内置示例数据的功能。
  2. 字段识别:自动识别数值型和分类型字段,支持多条件筛选。
  3. 相关性分析:可自定义相关性热力图的阈值、显示风格和颜色主题,还能可视化相关系数矩阵和热力图,并支持阈值过滤与系数显示。
  4. 数据采样:支持数据采样,方便对大数据集进行快速分析。
  5. 数据展示:提供数据概览、基本信息、统计摘要等数据展示功能。
  6. 分布分析:支持直方图、箱线图、密度图等多种分布可视化方式。
  7. 分组分析:支持按分类字段分组,对数值字段进行多种聚合(均值、总和、最大、最小、计数),并可自定义显示前N组。

主要依赖

  • streamlit
  • pandas
  • numpy
  • matplotlib
  • seaborn

适用场景

  • 快速数据探索与可视化分析
  • 非技术用户的交互式数据分析
  • 数据科学教学与演示

使用方法

启动应用

运行以下命令启动Streamlit应用:

streamlit run app.py

加载数据

在侧边栏中,你可以选择上传CSV文件,或者点击“使用内置示例数据”按钮加载示例数据。同时,还提供了示例CSV文件的下载链接。

设置参数

根据需要,在侧边栏设置分析参数、筛选条件和采样比例:

  • 相关性分析参数:设置相关性热力图的显示阈值和是否显示相关系数值。
  • 可视化参数:选择图表风格和图标颜色主题。
  • 数据采样参数:设置数据采样比例,并点击“确认采样”按钮进行采样。
  • 分组分析参数:设置仅显示前N个组。

查看结果

在主界面查看数据概览、相关性分析、分布分析和分组分析的结果。

注意事项

  • 采样和筛选操作会影响后续分析结果。
  • 支持中文字段和数据,已设置中文字体兼容。
  • 若上传文件编码异常,系统会自动尝试不同编码读取。

代码结构

  • app.py:主应用文件,包含了Streamlit应用的所有代码。

示例代码片段

以下是部分关键代码片段,展示了如何加载示例数据和进行数据采样:

# 使用示例数据按钮(通过session_state保存状态)
if st.button("使用内置示例数据"):
    sample_data = """产品名称,类别,地区,销售额,销售量,利润率,日期
智能手机,电子产品,华东,89200,120,0.18,2025-01-01
笔记本电脑,电子产品,华北,125400,75,0.22,2025-01-01
平板电脑,电子产品,华南,45800,90,0.15,2025-01-01
蓝牙耳机,电子产品,华东,32500,250,0.25,2025-01-01
智能手表,电子产品,华北,56300,130,0.21,2025-01-01
咖啡,食品饮料,华东,18700,320,0.32,2025-01-01
茶叶,食品饮料,华南,24500,180,0.28,2025-01-01
巧克力,食品饮料,华北,15600,240,0.35,2025-01-01
饼干,食品饮料,华东,12400,160,0.26,2025-01-01
矿泉水,食品饮料,华南,9800,450,0.18,2025-01-01
运动鞋,服装鞋帽,华北,65400,120,0.22,2025-01-02
运动服,服装鞋帽,华东,78900,95,0.25,2025-01-02
牛仔裤,服装鞋帽,华南,45600,160,0.23,2025-01-02
T恤,服装鞋帽,华北,32100,280,0.19,2025-01-02
连衣裙,服装鞋帽,华东,56700,110,0.28,2025-01-02
冰箱,家电,华南,125400,40,0.25,2025-01-02
洗衣机,家电,华北,98700,55,0.23,2025-01-02
电视,家电,华东,156800,35,0.27,2025-01-02
空调,家电,华南,189500,42,0.31,2025-01-02
电饭煲,家电,华北,32500,120,0.20,2025-01-02"""
    st.session_state.df = pd.read_csv(io.StringIO(sample_data))
    st.session_state.use_sample = True  # 标记使用示例数据
    st.session_state.uploaded = False  # 重置上传状态
    st.session_state.original_df = st.session_state.df.copy()  # 保存原始数据

# 数据采样参数
if st.session_state.df is not None and not st.session_state.df.empty:
    total_rows = len(st.session_state.original_df) # 使用原始数据的行数
    sample_ratio = st.slider(
        f"数据采样比例(共{total_rows}行)",
        min_value=0.1, max_value=1.0, value=1.0, step=0.1
    )
    if sample_ratio <= 1.0:
        if st.button("确认采样"):
            if total_rows > 0:
                st.session_state.df = st.session_state.original_df.sample(frac=sample_ratio, random_state=42)
                st.success(f"已采样 {sample_ratio*100}% 的数据({len(st.session_state.df)}行)")
            else:
                st.error("数据集为空,无法进行采样")
    else:
        st.session_state.df = st.session_state.original_df.copy()  # 当比例为1.0时,恢复原始数据

贡献

如果你有任何改进建议或发现了问题,请随时提交issue或pull request。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages