You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于标准化数据集的输入数据标准化及Pandas代码咨询

Guidance on Standardizing Pandas DataFrames for Your Dataset

Hi there! Let’s break down your standardization code, fill in the gaps, and cover best practices to make your workflow more reliable and aligned with common data science practices.

First: Complete Your Scaling Pipeline

Your code cuts off at df_scale...—here’s how to finish converting the scaled numpy array back into a Pandas DataFrame (keeping your original column names, which is critical for readability later):

import numpy as np
import pandas as pd
from sklearn.metrics.pairwise import cosine_similarity
from sklearn import preprocessing

# Load your dataset
df = pd.read_csv('DS/RS_DS/final_dataset.csv')

# Drop non-feature columns you don't need for scaling
rec_df = df.drop(['person_id','encounter_id','birthdate','CN','HN','DN','DIAG_DM','DIAG_NONDM','TPN'], axis=1)

# Normalize values to the 0-1 range
df_val = rec_df.values
min_max_scaler = preprocessing.MinMaxScaler()
df_val_scaled = min_max_scaler.fit_transform(df_val)

# Convert scaled array back to a DataFrame with original column names
df_scaled = pd.DataFrame(df_val_scaled, columns=rec_df.columns)

Critical Best Practices to Implement

1. Handle Missing Values First

MinMaxScaler (and most sklearn scalers) will throw errors if your data has NaN values. Always check and clean missing data before scaling:

# Check for missing values per column
print(rec_df.isnull().sum())

# Option 1: Drop rows with missing values (use if missing data is minimal)
rec_df_clean = rec_df.dropna()

# Option 2: Impute missing values (better for larger datasets)
from sklearn.impute import SimpleImputer
# Use median for skewed data, mean for normally distributed data
imputer = SimpleImputer(strategy='median')
rec_df_imputed = pd.DataFrame(imputer.fit_transform(rec_df), columns=rec_df.columns)

2. Avoid Data Leakage When Modeling

If you plan to use this scaled data for machine learning, never fit the scaler on your entire dataset—only fit it on the training set, then transform both training and test sets. This prevents leaking test data information into your scaling process:

from sklearn.model_selection import train_test_split

# Split clean data into train/test sets
X_train, X_test = train_test_split(rec_df_clean, test_size=0.2, random_state=42)

# Fit scaler ONLY on training data
min_max_scaler = preprocessing.MinMaxScaler()
X_train_scaled = min_max_scaler.fit_transform(X_train)
X_test_scaled = min_max_scaler.transform(X_test)

# Convert back to DataFrames for easier manipulation
X_train_scaled_df = pd.DataFrame(X_train_scaled, columns=X_train.columns)
X_test_scaled_df = pd.DataFrame(X_test_scaled, columns=X_test.columns)

3. Choose the Right Scaler for Your Data

MinMaxScaler is great for 0-1 normalization, but it’s sensitive to outliers. Depending on your data’s distribution, consider alternatives:

  • StandardScaler: Use if your features are normally distributed (scales to mean=0, variance=1):
    std_scaler = preprocessing.StandardScaler()
    df_val_scaled_std = std_scaler.fit_transform(rec_df_clean)
    
  • RobustScaler: Use if you have extreme outliers (scales based on median and interquartile range, ignoring outliers):
    robust_scaler = preprocessing.RobustScaler()
    df_val_scaled_robust = robust_scaler.fit_transform(rec_df_clean)
    

Integrating with Cosine Similarity

Since you imported cosine_similarity, here’s how to use your scaled data to compute meaningful similarity scores (e.g., between individuals in your dataset):

# Compute cosine similarity matrix using scaled features
cos_sim_matrix = cosine_similarity(df_scaled)

# Convert to a readable DataFrame using person_id as labels
cos_sim_df = pd.DataFrame(cos_sim_matrix, index=df['person_id'], columns=df['person_id'])

# Example: Get top 5 most similar individuals to person_id 123
top_similar = cos_sim_df[123].sort_values(ascending=False).head(6)  # Includes the person themselves
print(top_similar)

Final Notes

  • Always save your fitted scaler if you need to apply the same scaling to future data (e.g., new patient records):
    import joblib
    joblib.dump(min_max_scaler, 'min_max_scaler.pkl')
    # Load later: scaler = joblib.load('min_max_scaler.pkl')
    
  • Double-check that you’re only scaling numerical features—your dropped columns look like non-numerical IDs/categories, which is correct.

内容的提问来源于stack exchange,提问作者Reub

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:06:53