ワンクリックで
numeric-extraction-and-distribution-analysis
从带单位的字符串列中提取数值并清洗,生成包含直方图、饼图、条形图和累积分布图的多维度综合分布可视化图表,用于展示数据的集中趋势与分布特征。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
从带单位的字符串列中提取数值并清洗,生成包含直方图、饼图、条形图和累积分布图的多维度综合分布可视化图表,用于展示数据的集中趋势与分布特征。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Base-layer skill for the SenseNova-Skills project, providing low-level APIs for image generation, recognition (VLM), and text optimization (LLM). This skill does not preprocess inputs; it only calls backend services and returns results. This skill is not user-facing and is intended for upper-layer skills only.
用于用户请求深度研究、系统性研究、竞品分析、方案对比、趋势分析或事实核查时。**遇到以下任一情况就主动使用本 skill,不要自行搜几条就回答**:①用户出现触发词:深度研究 / 深度调研 / 深入研究 / 全面研究 / 系统研究 / 调研 / 调查 / 尽调 / 行业研究 / 市场研究 / 竞品分析 / 政策研究 / 技术研究 / 趋势研究 / 事实核查 / 写一份研究报告 / 调研报告 / 深度报告 / research / deep research;②请求需要跨多来源取证、多维度对比、交叉验证才能给出可靠结论;③用户要求产出报告、白皮书、行业分析或尽调文档;④话题涉及最新政策/市场/产品/价格/法规,需要系统核查。明确要求核验来源的单点事实可走 quick;无核验要求的简单常识问答不使用。模糊或宽泛的"研究/了解一下 X"也优先触发。仅不用于:一句话摘要、已给定单一来源的整理、纯文字润色改写。
用于研究任务的最终呈现形式未知时。比较研究报告、学术论文、表格优先报表、决策备忘录或自定义形式,并用权威标准与真实范例支持推荐。
用于搜索中文社交平台。脚本入口覆盖 B站视频、知乎问答和抖音视频;小红书、微博当前没有脚本入口,只能通过 browser-use / 公开网页兜底。
搜索社区、社媒、新闻热点、百科趋势、开发者生态和技术讨论时使用。
用于学术调研、论文精读、相关工作梳理、百科知识查询和引用链追溯。
| name | numeric-extraction-and-distribution-analysis |
| description | 从带单位的字符串列中提取数值并清洗,生成包含直方图、饼图、条形图和累积分布图的多维度综合分布可视化图表,用于展示数据的集中趋势与分布特征。 |
Step1 从原始数据中提取目标列,清理无效和空值数据,并安全地将带单位的字符串转换为数值类型
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 配置中英文字体,避免图表乱码
plt.rcParams['font.sans-serif'] = ['SimHei', 'DejaVu Sans']
plt.rcParams['axes.unicode_minus'] = False
item_col = '项目名称' # 占位示例:分类或名称列
value_col = '带单位的数值' # 占位示例:需要提取数值的原始列
numeric_col = '提取数值'
unit_str = 'g' # 占位示例:需要移除的单位字符串
def extract_numeric_value(val_str):
"""从带单位的字符串中提取数值"""
if pd.isna(val_str):
return None
try:
# 移除单位并转换为浮点数
return float(str(val_str).replace(unit_str, '').strip())
except ValueError:
return None
# 清理缺失值与异常占位符
df_clean = df.dropna(subset=[item_col, value_col]).copy()
df_clean = df_clean[df_clean[item_col] != '...']
# 应用提取函数并过滤转换失败的行
df_clean[numeric_col] = df_clean[value_col].apply(extract_numeric_value)
df_clean = df_clean.dropna(subset=[numeric_col])
Step2 创建基础分布直方图,并添加平均值和中位数的参考线以展示数据的集中趋势
plt.figure(figsize=(12, 8))
# 绘制直方图
plt.hist(df_clean[numeric_col], bins=10, alpha=0.7, color='skyblue', edgecolor='black')
# 计算并添加平均值和中位数参考线
mean_val = df_clean[numeric_col].mean()
median_val = df_clean[numeric_col].median()
plt.axvline(mean_val, color='red', linestyle='--', linewidth=2, label=f'平均值: {mean_val:.2f}')
plt.axvline(median_val, color='green', linestyle='--', linewidth=2, label=f'中位数: {median_val:.2f}')
plt.xlabel(f'{numeric_col}', fontsize=12)
plt.ylabel('频数', fontsize=12)
plt.title(f'{numeric_col}分布直方图', fontsize=14, fontweight='bold')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()
Step3 生成包含直方图、饼图、条形图和累积分布图的综合分析面板,全面展示数值的分布特征并保存高分辨率图片
# 创建 2x2 子图布局
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, figsize=(16, 12))
# 1. 直方图
ax1.hist(df_clean[numeric_col], bins=8, alpha=0.7, color='lightblue', edgecolor='black', rwidth=0.8)
ax1.set_xlabel(f'{numeric_col}', fontsize=12)
ax1.set_ylabel('频数', fontsize=12)
ax1.set_title(f'{numeric_col}分布直方图', fontsize=14, fontweight='bold')
ax1.grid(True, alpha=0.3)
# 2. 饼图 (基于 value_counts 统计占比)
val_counts = df_clean[numeric_col].value_counts().sort_index()
colors = plt.cm.Set3(np.linspace(0, 1, len(val_counts)))
ax2.pie(val_counts.values, labels=[f'{x}' for x in val_counts.index], autopct='%1.1f%%', colors=colors, startangle=90)
ax2.set_title(f'{numeric_col}占比分布', fontsize=14, fontweight='bold')
# 3. 条形图
val_counts.plot(kind='bar', ax=ax3, color='lightcoral', alpha=0.8)
ax3.set_xlabel(f'{numeric_col}', fontsize=12)
ax3.set_ylabel('数量', fontsize=12)
ax3.set_title(f'各{numeric_col}对应的数量', fontsize=14, fontweight='bold')
ax3.tick_params(axis='x', rotation=45)
ax3.grid(True, alpha=0.3)
# 4. 累积分布图
sorted_values = np.sort(df_clean[numeric_col])
cumulative_freq = np.arange(1, len(sorted_values) + 1) / len(sorted_values) * 100
ax4.plot(sorted_values, cumulative_freq, marker='o', linewidth=2, markersize=6, color='darkgreen')
ax4.set_xlabel(f'{numeric_col}', fontsize=12)
ax4.set_ylabel('累积百分比 (%)', fontsize=12)
ax4.set_title(f'{numeric_col}累积分布', fontsize=14, fontweight='bold')
ax4.grid(True, alpha=0.3)
# 调整布局并保存
plt.tight_layout()
output_path = 'distribution_dashboard.png'
plt.savefig(output_path, dpi=300, bbox_inches='tight')
plt.show()