
Line Chart Visualization
提取结构化数据并进行特征清洗与聚类分析,生成包含趋势对比、分布特征与参数敏感性的多维度综合可视化图表,适用于各类趋势预测与多维对比场景。
Install
npx skills add OpenSenseNova/SenseNova-Skills --skill line-chart-visualization -g -a claude-code -y- Repository
- OpenSenseNova/SenseNova-Skills6k
- Category
- Engineering
- Updated
- 6d ago
- License
- MIT
- Context cost
- Lightabout 1,465 tokens
- Runs scripts
- No, instructions only
What it does
提取结构化数据并进行特征清洗与聚类分析,生成包含趋势对比、分布特征与参数敏感性的多维度综合可视化图表,适用于各类趋势预测与多维对比场景。
Step1 数据加载与预处理(支持大文件Parquet转换与动态表头识别)。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
import os
import re
# 设置中英文字体与图表美化
plt.rcParams['font.sans-serif'] = ['SimHei', 'WenQuanYi Zen Hei', 'DejaVu Sans']
plt.rcParams['axes.unicode_minus'] = False
file_path = 'input_data.xlsx'
# 处理大型Excel文件:统计总行数,若≥1万则转换为Parquet格式提升效率
xls = pd.ExcelFile(file_path)
total_rows = sum(pd.read_excel(xls, sheet_name=s, header=None).shape[0] for s in xls.sheet_names)
if total_rows >= 10000:
parquet_path = "temp_converted_file.parquet"
with pd.ExcelWriter(parquet_path, engine='pyarrow') as writer:
for sheet in xls.sheet_names:
df_sheet = pd.read_excel(xls, sheet_name=sheet, header=None)
df_sheet.to_excel(writer, sheet_name=sheet, index=False, header=False)
df = pd.read_excel(parquet_path, sheet_name='Sheet1', header=None)
else:
df = pd.read_excel(file_path, sheet_name='Sheet1', header=None)
# 动态识别表头并提取数据
header_row_idx = None
target_cols = ['group_col', 'value_col1', 'value_col2'] # 占位示例列名
for idx, row in df.iterrows():
row_vals = row.astype(str).tolist()
if all(col in row_vals for col in target_cols):
header_row_idx = idx
break
if header_row_idx is not None:
df.columns = df.iloc[header_row_idx].tolist()
df_clean = df.iloc[header_row_idx + 1:].reset_index(drop=True)
else:
df_clean = df.copy()
Step2 数据清洗与特征工程(包含正则提取、缺失值处理与合并单元格还原)。
# 合并单元格处理 (ffill + 遍历还原)
if 'group_col' in df_clean.columns:
df_clean['group_col'] = df_clean['group_col'].ffill()
# 数据清洗正则表达式:提取数值
if 'value_col1' in df_clean.columns:
df_clean['value_col1'] = df_clean['value_col1'].astype(str).str.replace(r'[^\d.]', '', regex=True)
df_clean['value_col1'] = pd.to_numeric(df_clean['value_col1'], errors='coerce')
