活动介绍

print(corr_values.sort_values(ascending=False))

时间: 2024-06-04 09:08:38 浏览: 62
这行代码是用来对一个 pandas DataFrame 或 Series 中的数值进行降序排列的。具体来说,它会返回一个新的 pandas Series,其中每个值表示原始 Series 中的对应值在降序排列后所在的位置(从 0 开始)。参数 ascending=False 表示按数值从大到小进行排列。
相关问题

plt.boxplot(x=train_data.values,labels=train_data.columns) 3 plt.hlines([-7.5, 7.5], 0, 40, colors='r') 4 plt.show() 5 6 train_data = train_data[train_data['V9']>-7.5] 7 train_data.describe() 8 9 from sklearn import preprocessing 10 11 features_columns = [col for col in train_data.columns if col not in ['target']] 12 13 min_max_scaler = preprocessing.MinMaxScaler() 14 15 min_max_scaler = min_max_scaler.fit(train_data[features_columns]) 16 17 train_data_scaler = min_max_scaler.transform(train_data[features_columns]) 18 test_data_scaler = min_max_scaler.transform(test_data[features_columns]) 19 20 train_data_scaler = pd.DataFrame(train_data_scaler) 21 train_data_scaler.columns = features_columns 22 23 test_data_scaler = pd.DataFrame(test_data_scaler) 24 test_data_scaler.columns = features_columns 25 26 train_data_scaler['target'] = train_data['target'] 27 28 train_data 29 30 mcorr=mcorr.abs() 31 numerical_corr=mcorr[mcorr['target']>0.1]['target'] 32 print(numerical_corr.sort_values(ascending=False))解释每一行代码的意思

好的,我来解释每一行代码的意思: 1. `plt.boxplot(x=train_data.values,labels=train_data.columns)`: 绘制箱线图,用于检测是否存在异常值; 2. `plt.hlines([-7.5, 7.5], 0, 40, colors='r')`: 在箱线图上绘制两条水平线,用于标记异常值的阈值; 3. `train_data = train_data[train_data['V9']>-7.5]`: 去除训练数据中V9列中小于-7.5的异常值; 4. `train_data.describe()`: 输出训练数据的统计信息,包括均值、标准差、最小值、最大值等; 5. `from sklearn import preprocessing`: 导入preprocessing模块,用于数据预处理; 6. `features_columns = [col for col in train_data.columns if col not in ['target']]`: 提取除了目标变量之外的特征列,存储在features_columns变量中; 7. `min_max_scaler = preprocessing.MinMaxScaler()`: 创建MinMaxScaler对象,用于对特征数据进行归一化处理; 8. `min_max_scaler = min_max_scaler.fit(train_data[features_columns])`: 对MinMaxScaler对象进行拟合,计算出归一化所需的最大值和最小值; 9. `train_data_scaler = min_max_scaler.transform(train_data[features_columns])`: 对训练数据的特征列进行归一化处理; 10. `test_data_scaler = min_max_scaler.transform(test_data[features_columns])`: 对测试数据的特征列进行归一化处理; 11. `train_data_scaler = pd.DataFrame(train_data_scaler)`: 将归一化后的训练数据特征列转换成DataFrame格式; 12. `train_data_scaler.columns = features_columns`: 给训练数据的特征列添加列名; 13. `test_data_scaler = pd.DataFrame(test_data_scaler)`: 将归一化后的测试数据特征列转换成DataFrame格式; 14. `test_data_scaler.columns = features_columns`: 给测试数据的特征列添加列名; 15. `train_data_scaler['target'] = train_data['target']`: 将训练数据的目标变量添加到归一化后的训练数据中; 16. `train_data`: 输出训练数据的内容; 17. `mcorr=mcorr.abs()`: 计算特征之间的相关性矩阵,并对矩阵中的元素取绝对值; 18. `numerical_corr=mcorr[mcorr['target']>0.1]['target']`: 筛选出与目标变量相关性大于0.1的特征; 19. `print(numerical_corr.sort_values(ascending=False))`: 输出筛选后的特征相关性,按照相关性大小降序排列; 20. `index0 = numerical_corr.sort_values(ascending=False).index`: 获取筛选后的特征名字,并存储在index0变量中; 21. `print(train_data_scaler[index0].corr('spearman'))`: 计算筛选后的特征之间的Spearman相关系数; 22. `new_numerical=['V0', 'V2', 'V3', 'V4', 'V5', 'V6', 'V10','V11', 'V13', 'V15', 'V16', 'V18', 'V19', 'V20', 'V22','V24','V30', 'V31', 'V37']`: 将相关性较高的特征名字存储在new_numerical变量中; 23. `X=np.matrix(train_data_scaler[new_numerical])`: 将训练数据中的new_numerical列转换为矩阵格式,存储在X变量中; 24. `VIF_list=[variance_inflation_factor(X, i) for i in range(X.shape[1])]`: 计算new_numerical列之间的VIF值,存储在VIF_list变量中; 25. `VIF_list`: 输出VIF_list变量的值; 26. `pca = PCA(n_components=0.9)`: 创建PCA对象,并设置保留90%的方差; 27. `new_train_pca_90 = pca.fit_transform(train_data_scaler.iloc[:,0:-1])`: 对训练数据进行PCA降维,并保留90%的方差; 28. `new_test_pca_90 = pca.transform(test_data_scaler)`: 对测试数据进行PCA降维,并保留90%的方差; 29. `new_train_pca_90 = pd.DataFrame(new_train_pca_90)`: 将降维后的训练数据转换为DataFrame格式; 30. `new_test_pca_90 = pd.DataFrame(new_test_pca_90)`: 将降维后的测试数据转换为DataFrame格式; 31. `new_train_pca_90['target'] = train_data_scaler['target']`: 将训练数据的目标变量添加到降维后的训练数据中; 32. `new_train_pca_90.describe()`: 输出降维后的训练数据的统计信息,包括均值、标准差、最小值、最大值等。

plt.boxplot(x=train_data.values,labels=train_data.columns) 3 plt.hlines([-7.5, 7.5], 0, 40, colors='r') 4 plt.show() 5 6 train_data = train_data[train_data['V9']>-7.5] 7 train_data.describe() 8 9 from sklearn import preprocessing 10 11 features_columns = [col for col in train_data.columns if col not in ['target']] 12 13 min_max_scaler = preprocessing.MinMaxScaler() 14 15 min_max_scaler = min_max_scaler.fit(train_data[features_columns]) 16 17 train_data_scaler = min_max_scaler.transform(train_data[features_columns]) 18 test_data_scaler = min_max_scaler.transform(test_data[features_columns]) 19 20 train_data_scaler = pd.DataFrame(train_data_scaler) 21 train_data_scaler.columns = features_columns 22 23 test_data_scaler = pd.DataFrame(test_data_scaler) 24 test_data_scaler.columns = features_columns 25 26 train_data_scaler['target'] = train_data['target'] 27 28 train_data 29 30 mcorr=mcorr.abs() 31 numerical_corr=mcorr[mcorr['target']>0.1]['target'] 32 print(numerical_corr.sort_values(ascending=False)) 33 34 index0 = numerical_corr.sort_values(ascending=False).index 35 print(train_data_scaler[index0].corr('spearman')) 36 37 new_numerical=['V0', 'V2', 'V3', 'V4', 'V5', 'V6', 'V10','V11', 38 'V13', 'V15', 'V16', 'V18', 'V19', 'V20', 'V22','V24','V30', 'V31', 'V37'] 39 X=np.matrix(train_data_scaler[new_numerical]) 40 VIF_list=[variance_inflation_factor(X, i) for i in range(X.shape[1])] 41 VIF_list 42 43 44 pca = PCA(n_components=0.9) 45 new_train_pca_90 = pca.fit_transform(train_data_scaler.iloc[:,0:-1]) 46 new_test_pca_90 = pca.transform(test_data_scaler) 47 new_train_pca_90 = pd.DataFrame(new_train_pca_90) 48 new_test_pca_90 = pd.DataFrame(new_test_pca_90) 49 new_train_pca_90['target'] = train_data_scaler['target'] 50 new_train_pca_90.describe()

这段代码涉及到数据预处理和特征工程的内容。具体来说,它做了以下几件事情: 1. 使用箱线图和阈值来去除异常值; 2. 对特征进行归一化处理; 3. 计算特征之间的相关性,并筛选出与目标变量相关性大于0.1的特征; 4. 使用方差膨胀因子(VIF)来检查特征之间的多重共线性; 5. 使用主成分分析(PCA)来降维,使得保留90%的方差。
阅读全文

相关推荐

index0 = numerical_corr.sort_values(ascending=False).index 36 print(train_data_scaler[index0].corr('spearman')) 37 38 new_numerical=['V0', 'V2', 'V3', 'V4', 'V5', 'V6', 'V10','V11', 39 'V13', 'V15', 'V16', 'V18', 'V19', 'V20', 'V22','V24','V30', 'V31', 'V37'] 40 X=np.matrix(train_data_scaler[new_numerical]) 41 VIF_list=[variance_inflation_factor(X, i) for i in range(X.shape[1])] 42 VIF_list 43 44 45 pca = PCA(n_components=0.9) 46 new_train_pca_90 = pca.fit_transform(train_data_scaler.iloc[:,0:-1]) 47 new_test_pca_90 = pca.transform(test_data_scaler) 48 new_train_pca_90 = pd.DataFrame(new_train_pca_90) 49 new_test_pca_90 = pd.DataFrame(new_test_pca_90) 50 new_train_pca_90['target'] = train_data_scaler['target'] 51 new_train_pca_90.describe() 52 53 pca = PCA(n_components=0.95) 54 new_train_pca_16 = pca.fit_transform(train_data_scaler.iloc[:,0:-1]) 55 new_test_pca_16 = pca.transform(test_data_scaler) 56 new_train_pca_16 = pd.DataFrame(new_train_pca_16) 57 new_test_pca_16 = pd.DataFrame(new_test_pca_16) 58 new_train_pca_16['target'] = train_data_scaler['target'] 59 new_train_pca_16.describe() 60 61 from sklearn.ensemble import GradientBoostingRegressor 62 63 from sklearn.model_selection import learning_curve 64 from sklearn.model_selection import ShuffleSplit 65 66 new_train_pca_16 = new_train_pca_16.fillna(0) 67 train = new_train_pca_16[new_test_pca_16.columns] 68 target = new_train_pca_16['target'] 69 70 train_data,test_data,train_target,test_target=train_test_split(train,target,test_size=0.2,random_state=0) 71 72 clf = LinearRegression() 73 clf.fit(train_data, train_target) 74 score = mean_squared_error(test_target, clf.predict(test_data)) 75 print("LinearRegression: ", score) 76 77 train_score = [] 78 test_score = []解释每一句代码的意思

KeyError Traceback (most recent call last) File D:\anacondaxiaz\Lib\site-packages\pandas\core\indexes\base.py:3805, in Index.get_loc(self, key) 3804 try: -> 3805 return self._engine.get_loc(casted_key) 3806 except KeyError as err: File index.pyx:167, in pandas._libs.index.IndexEngine.get_loc() File index.pyx:196, in pandas._libs.index.IndexEngine.get_loc() File pandas\\_libs\\hashtable_class_helper.pxi:7081, in pandas._libs.hashtable.PyObjectHashTable.get_item() File pandas\\_libs\\hashtable_class_helper.pxi:7089, in pandas._libs.hashtable.PyObjectHashTable.get_item() KeyError: '每股经营活动现金流量净额_元_股__NCFfropePS' The above exception was the direct cause of the following exception: KeyError Traceback (most recent call last) Cell In[11], line 43 40 df = df.drop(columns=low_variance[low_variance].index) 42 #计算相关性矩阵 ---> 43 corr_matrix = df_numeric.corr()[target].abs().sort_values(ascending=False) 44 selected_features = corr_matrix[corr_matrix > 0.3].index.tolist() 46 # 合并目标变量(强制保留) File D:\anacondaxiaz\Lib\site-packages\pandas\core\frame.py:4102, in DataFrame.__getitem__(self, key) 4100 if self.columns.nlevels > 1: 4101 return self._getitem_multilevel(key) -> 4102 indexer = self.columns.get_loc(key) 4103 if is_integer(indexer): 4104 indexer = [indexer] File D:\anacondaxiaz\Lib\site-packages\pandas\core\indexes\base.py:3812, in Index.get_loc(self, key) 3807 if isinstance(casted_key, slice) or ( 3808 isinstance(casted_key, abc.Iterable) 3809 and any(isinstance(x, slice) for x in casted_key) 3810 ): 3811 raise InvalidIndexError(key) -> 3812 raise KeyError(key) from err 3813 except TypeError: 3814 # If we have a listlike key, _check_indexing_error will raise 3815 # InvalidIndexError. Otherwise we fall through and re-raise 3816 # the TypeError. 3817 self._check_indexing_error(key) KeyError: '每股经营活动现金流量净额_元_股__NCFfropePS'

出现 “KeyError Traceback (most recent call last) File D:\anacondaxiaz\Lib\site-packages\pandas\core\indexes\base.py:3805, in Index.get_loc(self, key) 3804 try: -> 3805 return self._engine.get_loc(casted_key) 3806 except KeyError as err: File index.pyx:167, in pandas._libs.index.IndexEngine.get_loc() File index.pyx:196, in pandas._libs.index.IndexEngine.get_loc() File pandas\\_libs\\hashtable_class_helper.pxi:7081, in pandas._libs.hashtable.PyObjectHashTable.get_item() File pandas\\_libs\\hashtable_class_helper.pxi:7089, in pandas._libs.hashtable.PyObjectHashTable.get_item() KeyError: '每股经营活动现金流量净额_元_股__NCFfropePS' The above exception was the direct cause of the following exception: KeyError Traceback (most recent call last) Cell In[15], line 90 87 df = df.drop(columns=low_variance[low_variance].index) 89 #计算相关性矩阵 ---> 90 corr_matrix = df_numeric.corr()[target].abs().sort_values(ascending=False) 91 selected_features = corr_matrix[corr_matrix > 0.3].index.tolist() 93 # 合并目标变量(强制保留) File D:\anacondaxiaz\Lib\site-packages\pandas\core\frame.py:4102, in DataFrame.__getitem__(self, key) 4100 if self.columns.nlevels > 1: 4101 return self._getitem_multilevel(key) -> 4102 indexer = self.columns.get_loc(key) 4103 if is_integer(indexer): 4104 indexer = [indexer] File D:\anacondaxiaz\Lib\site-packages\pandas\core\indexes\base.py:3812, in Index.get_loc(self, key) 3807 if isinstance(casted_key, slice) or ( 3808 isinstance(casted_key, abc.Iterable) 3809 and any(isinstance(x, slice) for x in casted_key) 3810 ): 3811 raise InvalidIndexError(key) -> 3812 raise KeyError(key) from err 3813 except TypeError: 3814 # If we have a listlike key, _check_indexing_error will raise 3815 # InvalidIndexError. Otherwise we fall through and re-raise 3816 # the TypeError. 3817 self._check_indexing_error(key) KeyError: '每股经营活动现金流量净额_元_股__NCFfropePS'”

import numpy as np import pandas as pd import seaborn as sns import matplotlib.pyplot as plt from sklearn.linear_model import LogisticRegression from sklearn.feature_selection import f_classif from statsmodels.stats.outliers_influence import variance_inflation_factor # 1. 计算特征相关性矩阵 corr_matrix = X.corr() plt.figure(figsize=(15, 12)) sns.heatmap(corr_matrix, annot=True, fmt=".2f", cmap="coolwarm", annot_kws={"size": 8}, cbar_kws={"shrink": 0.8}) plt.title("特征相关性热力图") plt.show() # 2. 计算VIF(方差膨胀因子)检测多重共线性 vif_data = pd.DataFrame() vif_data["Feature"] = feature_columns vif_data["VIF"] = [variance_inflation_factor(X.values, i) for i in range(len(feature_columns))] print("多重共线性诊断 (VIF > 5 表示高共线性):") print(vif_data.sort_values("VIF", ascending=False)) # 3. 创建统一的重要性对比表 # 计算F检验重要性(单变量) f_scores, _ = f_classif(X, y) f_importance = f_scores / f_scores.max() # 标准化 # 计算模型系数重要性(多变量) coef_importance = np.abs(model.coef_[0]) coef_importance = coef_importance / coef_importance.max() # 标准化 # 创建对比DataFrame importance_df = pd.DataFrame({ "Feature": feature_columns, "F_Importance": f_importance, "Coef_Importance": np.nan # 初始化为NaN }) # 仅填充被选择的特征 selected_indices = selector.get_support(indices=True) for idx in selected_indices: importance_df.at[idx, "Coef_Importance"] = coef_importance[list(selected_indices).index(idx)] # 添加差异指标 importance_df["Importance_Diff"] = np.abs( importance_df["F_Importance"] - importance_df["Coef_Importance"] ) print("\n统一特征重要性对比:") print(importance_df.sort_values("Importance_Diff", ascending=False)) # 4. 可视化对比 plt.figure(figsize=(14, 8)) plt.scatter(importance_df["F_Importance"], importance_df["Coef_Importance"], s=100) # 添加标签和参考线 for i, row in importance_df.iterrows(): if not np.isnan(row["Coef_Importance"]): plt.text(row["F_Importance"] + 0.02, row["Coef_Importance"] + 0.02, row["Feature"], fontsize=9) else: plt.text(row["F_Importance"] + 0.02, 0.02, f"{row['Feature']} (未选择)", fontsize=9, color="red") plt.axline((0, 0), slope=1, color="red", linestyle="--", alpha=0.5) plt.xlabel("单变量重要性 (F检验)") plt.ylabel("多变量重要性 (模型系数绝对值)") plt.title("单变量与多变量特征重要性对比") plt.grid(True, alpha=0.3) plt.show() # 5. 基于领域知识调整模型 # 示例:强制包含临床重要特征 clinical_features = ["年龄", "GCS", "意识情况"] # 临床重要特征 # 创建新的特征选择器 from sklearn.base import BaseEstimator, TransformerMixin class ClinicalFeatureSelector(BaseEstimator, TransformerMixin): def __init__(self, clinical_features, k=10): self.clinical_features = clinical_features self.k = k self.selector = None def fit(self, X, y=None): # 首先确保包含临床重要特征 clinical_indices = [list(X.columns).index(f) for f in self.clinical_features if f in X.columns] # 使用SelectKBest选择其他特征 self.selector = SelectKBest(f_classif, k=self.k - len(clinical_indices)) other_features = [f for f in X.columns if f not in self.clinical_features] self.selector.fit(X[other_features], y) return self def transform(self, X): clinical_data = X[self.clinical_features].values other_data = self.selector.transform(X[[f for f in X.columns if f not in self.clinical_features]]) return np.hstack([clinical_data, other_data]) def get_support(self): clinical_mask = [True if f in self.clinical_features else False for f in feature_columns] other_mask = self.selector.get_support() return np.array(clinical_mask + list(other_mask)) # 使用新的特征选择器 clinical_selector = ClinicalFeatureSelector(clinical_features=clinical_features, k=10) X_clinical = clinical_selector.fit_transform(X, y) # 重新训练模型 model_clinical = LogisticRegression(max_iter=1000, random_state=42) model_clinical.fit(X_clinical, y_res) # 比较特征选择结果 print("\n原始特征选择 vs 临床调整特征选择:") print("原始选择:", [feature_columns[i] for i in selector.get_support(indices=True)]) print("临床调整:", [feature_columns[i] for i in clinical_selector.get_support(indices=True)]) 显示好多未引用,改

# 1. 环境准备 import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import classification_report, confusion_matrix, accuracy_score import matplotlib.pyplot as plt import seaborn as sns # 2. 数据加载与预处理 data_path = r'C:\Users\29930\Desktop\手动筛选原始数据.csv' # 假设数据为CSV格式 df = pd.read_csv(data_path) # 检查数据 print(f"数据维度: {df.shape}") print("前5行数据:") print(df.head()) # 分割特征和标签 X = df.drop('COPD', axis=1) # 假设标签列为'label' y = df['COPD'] # 划分训练测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 3. 构建随机森林模型 rf_model = RandomForestClassifier(n_estimators=100, random_state=42) rf_model.fit(X_train, y_train) # 4. 模型评估 y_pred = rf_model.predict(X_test) print(f"\n准确率: {accuracy_score(y_test, y_pred):.2f}") print("\n分类报告:") print(classification_report(y_test, y_pred)) # 5. 特征重要性提取 feature_importance = rf_model.feature_importances_ features = X.columns importance_df = pd.DataFrame({'特征': features, '重要性': feature_importance}) importance_df = importance_df.sort_values('重要性', ascending=False) print("\n特征重要性排序:") print(importance_df) # 新增代码 ============================================== # 6. 筛选前10重要特征并创建新数据集 top10_features = importance_df.head(10)['特征'].tolist() X_top10 = X[top10_features] # 创建仅包含前10特征的新数据集 # 7. 构建评分系统 # 7.1 特征归一化处理(消除量纲影响) from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() X_top10_scaled = scaler.fit_transform(X_top10) print(inX_top10) # 7.2 计算特征权重(将重要性转换为百分比) top10_weights = importance_df.head(10)['重要性'].values total_importance = top10_weights.sum() normalized_weights = (top10_weights / total_importance) * 100 # 权重总和归一化为100 # 7.3 创建评分系统函数 def calculate_score(row): """计算每个样本的COPD风险评分""" weighted_sum = 0 for i, feature in enumerate(top10_features): # 每个特征值乘以其归一化后的权重 weighted_sum += row[feature] * normalized_weights[i] return weighted_sum # 7.4 应用评分系统 score_df = pd.DataFrame(X_top10_scaled, columns=top10_features) score_df['COPD_Score'] = score_df.apply(calculate_score, axis=1) # 7.5 将评分映射到0-100范围 final_scaler = MinMaxScaler(feature_range=(0, 100)) score_df['COPD_Score'] = final_scaler.fit_transform(score_df[['COPD_Score']]) # 8. 保存新数据集和评分结果 score_df.to_csv(r'C:\Users\29930\Desktop\COPD_风险评分数据集.csv', index=False) # 9. 验证评分系统效果 # 合并原始标签用于验证 validation_df = pd.concat([score_df, y.reset_index(drop=True)], axis=1) # 计算评分与COPD的相关性 correlation = validation_df['COPD_Score'].corr(validation_df['COPD']) print(f"\n评分与COPD的皮尔逊相关系数: {correlation:.3f}") # 可视化验证 plt.figure(figsize=(10, 6)) sns.boxplot(x='COPD', y='COPD_Score', data=validation_df) plt.title('COPD评分分布验证') plt.xlabel('是否患病') plt.ylabel('风险评分') plt.savefig(r'C:\Users\29930\Desktop\评分验证图.png', dpi=300, bbox_inches='tight') plt.show()输出评分系统

#!/usr/bin/env python # coding: utf-8 import pandas as pd import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt import seaborn as sns # 导入seaborn库 from sklearn.preprocessing import MinMaxScaler, OneHotEncoder from sklearn.metrics import silhouette_score # 导入轮廓系数指标 from sklearn.cluster import KMeans # KMeans模块 ## 设置属性防止中文乱码 mpl.rcParams['font.sans-serif'] = [u'SimHei'] mpl.rcParams['axes.unicode_minus'] = False # 加载数据 raw_data = pd.read_csv(r'./ad_performance.csv') # 数据审查 print("数据框的前几行:") print(raw_data.head(2)) print("\n数据类型分布:") print(raw_data.info()) print("\n原始数据基本描述性信息:") print(raw_data.describe().round(2).T) # 查看缺失值情况 na_cols = raw_data.isnull().any(axis=0) print("\n每一列是否具有缺失值:") print(na_cols) print("\n具有缺失值的行总记录数:") print(raw_data.isnull().sum().sort_values(ascending=False)) # 变量之间的相关性分析 print("\n原始数据相关性信息:") corr = raw_data.corr(numeric_only=True).round(2) print(corr.T) # 热力图 plt.figure(figsize=(10, 8)) sns.heatmap(corr, cmap='coolwarm', annot=True, fmt=".2f") plt.title('变量相关性热力图') plt.show() # 删除平均停留时间列 raw_data2 = raw_data.drop(['平均停留时间'], axis=1) # 类别变量取值 cols = ["素材类型", "广告类型", "合作方式", "广告尺寸", "广告卖点"] for x in cols: data = raw_data2[x].unique() print(f"\n变量【{x}】的取值有:\n{data}") # 字符串分类独热编码处理 ohe_matrix1 = pd.get_dummies(raw_data2[cols]) print("\n独热编码后的矩阵头5行:") print(ohe_matrix1.head(5)) # 数据标准化 sacle_matrix = raw_data2.iloc[:, 1:7] # 获得要转换的矩阵 model_scaler = MinMaxScaler() # 建立MinMaxScaler模型对象 data_scaled = model_scaler.fit_transform(sacle_matrix) # MinMaxScaler标准化处理 print("\n标准化后的数据样本(前5行):") print(pd.DataFrame(data_scaled.round(2), columns=sacle_matrix.columns).head(5)) # 合并所有维度 X = np.hstack((data_scaled, ohe_matrix1.values)) # 建立模型 score_list = list() # 用来存储每个K下模型的平局轮廓系数 silhouette_int = -1 # 初始化的平均轮廓系数阀值 best_kmeans = None cluster_labels_k = None for n_clusters in range(2, 8): # 遍历从2到7几个有限组 model_kmeans = KMeans(n_clusters=n_clusters, random_state=42) # 建立聚类模型对象 labels_tmp = model_kmeans.fit_predict(X) # 训练聚类模型 silhouette_tmp = silhouette_score(X, labels_tmp) # 得到每个K下的平均轮廓系数 if silhouette_tmp > silhouette_int: # 如果平均轮廓系数更高 best_k = n_clusters # 保存最好的K silhouette_int = silhouette_tmp # 保存平均轮廓得分 best_kmeans = model_kmeans # 保存模型实例对象 cluster_labels_k = labels_tmp # 保存聚类标签 score_list.append([n_clusters, silhouette_tmp]) # 将每次K及其得分追加到列表 print('\n{:*^60}'.format('K值对应的轮廓系数:')) print(np.array(score_list)) # 打印输出所有K下的详细得分 print(f'\n最优的K值是:{best_k} \n对应的轮廓系数是:{silhouette_int}') # 将原始数据与聚类标签整合 cluster_labels = pd.DataFrame(cluster_labels_k, columns=['clusters']) # 获得训练集下的标签信息 merge_data = pd.concat((raw_data2, cluster_labels), axis=1) # 将原始处理过的数据跟聚类标签整合 print("\n合并后的数据框前几行:") print(merge_data.head()) # 计算每个聚类类别下的样本量和样本占比 clustering_count = merge_data.groupby('clusters').size().reset_index(name='counts') # 计算每个聚类类别的样本量 clustering_ratio = clustering_count.copy() clustering_ratio['percentage'] = (clustering_ratio['counts'] / len(merge_data)).round(2) # 计算每个聚类类别的样本量占比 print("\n每个聚类类别的样本量:") print(clustering_count) print("\n#" * 30) print("\n每个聚类类别的样本量占比:") print(clustering_ratio) # 计算各个聚类类别内部最显著特征值 cluster_features = [] # 空列表,用于存储最终合并后的所有特征信息 for line in range(best_k): # 读取每个类索引 label_data = merge_data[merge_data['clusters'] == line] # 获得特定类的数据 part1_data = label_data.iloc[:, 1:7] # 获得数值型数据特征 part1_desc = part1_data.describe().round(3) # 得到数值型特征的描述性统计信息 merge_data1 = part1_desc.iloc[2, :] # 得到数值型特征的均值 part2_data = label_data.iloc[:, 7:-1] # 获得字符串型数据特征 part2_desc = part2_data.describe(include='all') # 获得字符串型数据特征的描述性统计信息 merge_data2 = part2_desc.iloc[2, :] # 获得字符串型数据特征的最频繁值 merge_line = pd.concat((merge_data1, merge_data2), axis=0) # 将数值型和字符串型典型特征沿行合并 cluster_features.append(merge_line) # 将每个类别下的数据特征追加到列表 # 输出完整的类别特征信息 cluster_pd = pd.DataFrame(cluster_features).T # 将列表转化为矩阵 print('\n{:*^60}'.format('每个类别主要的特征:')) all_cluster_set = pd.concat((clustering_count, clustering_ratio[['percentage']], cluster_pd), axis=1) # 将每个聚类类别的所有信息合并 print(all_cluster_set) # 曲线图 - 每个集群的日均UV变化趋势 plt.figure(figsize=(12, 6)) for i in range(best_k): cluster_data = merge_data[merge_data['clusters'] == i] plt.plot(cluster_data.index, cluster_data['日均UV'], label=f'Cluster {i+1}') plt.xlabel('Index') plt.ylabel('日均UV') plt.title('各聚类类别日均UV变化趋势') plt.legend() plt.grid(True) plt.show() # 直方图 - 各集群的订单转化率分布 plt.figure(figsize=(12, 6)) for i in range(best_k): cluster_data = merge_data[merge_data['clusters'] == i] plt.hist(cluster_data['订单转化率'], bins=10, alpha=0.5, label=f'Cluster {i+1}') plt.xlabel('订单转化率') plt.ylabel('Frequency') plt.title('各聚类类别订单转化率分布') plt.legend() plt.grid(True) plt.show() # 扇形图 - 各集群的样本占比 plt.figure(figsize=(8, 8)) plt.pie(clustering_ratio['percentage'], labels=[f'Cluster {i+1}' for i in range(best_k)], autopct='%1.1f%%', startangle=140) plt.title('各聚类类别样本占比') plt.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle. plt.show() # 雷达图 - 各集群的主要特征对比 num_sets = cluster_pd.iloc[:best_k, :].astype(np.float64) # 获取要展示的数据 labels = num_sets.index # 设置要展示的数据标签 colors = ['#FF9999','#66B3FF','#99FF99','#FFCC99', '#CCCCFF', '#FF99CC'] # 定义不同类别的颜色 angles = np.linspace(0, 2 * np.pi, len(labels), endpoint=False) # 计算各个区间的角度 angles = np.concatenate((angles, [angles[0]])) # 建立相同首尾字段以便于闭合 # 标准化数据 scaler = MinMaxScaler() num_sets_max_min = scaler.fit_transform(num_sets.T).T # 转置后标准化再转置回来 print("\n每个类别主要的数值特征(标准化后):") print(num_sets_max_min) # 画图 fig = plt.figure(figsize=(10, 10)) # 建立画布 ax = fig.add_subplot(111, polar=True) # 增加子网格,注意polar参数 # 画雷达图 for i in range(len(num_sets_max_min)): # 循环每个类别 data_tmp = num_sets_max_min[i, :] # 获得对应类数据 data = np.concatenate((data_tmp, [data_tmp[0]])) # 建立相同首尾字段以便于闭合 ax.plot(angles, data, 'o-', c=colors[i], label=f"第{i+1}类渠道") # 画线 ax.fill(angles, data, alpha=0.25, color=colors[i]) # 设置图像显示格式 ax.set_thetagrids(angles[:-1] * 180 / np.pi, labels, fontproperties="SimHei") # 设置极坐标轴 ax.set_title("各聚类类别显著特征对比", pad=20, fontproperties="SimHei") # 设置标题放置 ax.set_rlim(0, 1.2) # 设置坐标轴尺度范围 ax.grid(True) plt.legend(loc="upper right", bbox_to_anchor=(1.2, 1.0), prop={'family': 'SimHei'}) plt.tight_layout(rect=[0, 0, 0.8, 1]) plt.show() # 数据结论 print("\n数据结论:") print("所有的渠道被分为{}各类别,每个类别的样本量分别为:{}\n对应占比分别为:{}".format( best_k, clustering_count['counts'].values.tolist(), clustering_ratio['percentage'].values.tolist()))

# 1️⃣ 【数据加载与清洗】 # 导入所需库 import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns from sklearn.ensemble import RandomForestRegressor from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error, r2_score # 加载原始数据 wujing = pd.read_excel('朝阳医院2018年销售数据.xlsx') # 将购药时间转换为时间类型 wujing['购药时间'] = pd.to_datetime(wujing['购药时间']) # 设置时间索引并排序 wujing.set_index('购药时间', inplace=True) wujing.sort_index(inplace=True) # 删除缺失值 wujing.dropna(inplace=True) # 特征工程 wujing['月份'] = wujing.index.month wujing['星期几'] = wujing.index.dayofweek wujing['商品名称编码'] = pd.factorize(wujing['商品名称'])[0] # 2️⃣ 【数据探索分析 EDA】 # 🔹 销售金额时间趋势分析(按天聚合) wujing_daily_sales = wujing.resample('D')['应收金额'].sum() wujing_daily_sales.plot(figsize=(12, 6), title='每日销售金额趋势', xlabel='日期', ylabel='销售金额') plt.grid(True) plt.show() # 🔹 按月聚合销售金额趋势 wujing_monthly_sales = wujing.resample('M')['应收金额'].sum() wujing_monthly_sales.plot(figsize=(12, 6), title='每月销售金额趋势', xlabel='月份', ylabel='销售金额') plt.grid(True) plt.show() # 🔹 各药品销售排名(前10名) wujing_product_sales = wujing.groupby('商品名称')['应收金额'].sum().sort_values(ascending=False) print("销售额前10的药品:") print(wujing_product_sales.head(10)) wujing_product_sales.head(10).plot(kind='barh', figsize=(10, 6), title='销售额前十药品') plt.xlabel('销售金额') plt.ylabel('药品名称') plt.show() # 🔹 按地区销售统计(假设字段名为“销售地点”) if '销售地点' in wujing.columns: wujing_region_sales = wujing.groupby('销售地点')['应收金额'].sum().sort_values(ascending=False) print("各地区销售金额:") print(wujing_region_sales) wujing_region_sales.plot(kind='bar', figsize=(12, 6), title='各地区销售金额对比') plt.xlabel('地区') plt.ylabel('销售金额') plt.xticks(rotation=45) plt.grid(True) plt.show() # 🔹 是否使用社保对销售金额的影响(假设字段名为“是否使用社保”) if '是否使用社保' in wujing.columns: wujing_insurance_sales = wujing.groupby('是否使用社保')['应收金额'].mean() print("是否使用社保对应平均销售金额:") print(wujing_insurance_sales) wujing_insurance_sales.plot(kind='bar', figsize=(8, 5), title='是否使用社保对销售金额的影响') plt.xlabel('是否使用社保') plt.ylabel('平均销售金额') plt.grid(True) plt.show() # 🔹 销售数量与应收金额相关性分析 print("销售数量与应收金额相关性:") wujing_corr = wujing['销售数量'].corr(wujing['应收金额']) print(f"相关系数 r = {wujing_corr:.2f}") sns.jointplot(x='销售数量', y='应收金额', data=wujing, kind='reg', height=6) plt.suptitle(f'销售数量与应收金额相关性 (r = {wujing_corr:.2f})') plt.tight_layout() plt.show() # 3️⃣ 【构建预测模型:随机森林】 # 定义特征与目标变量 wujing_features = ['月份', '星期几', '商品名称编码', '销售数量'] wujing_target = '应收金额' X = wujing[wujing_features] y = wujing[wujing_target] # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 初始化并训练随机森林模型 wujing_model = RandomForestRegressor(n_estimators=100, random_state=42) wujing_model.fit(X_train, y_train) # 进行预测 wujing_predictions = wujing_model.predict(X_test) # 4️⃣ 【模型评估与可视化】 # 评估模型 wujing_mse = mean_squared_error(y_test, wujing_predictions) wujing_r2 = r2_score(y_test, wujing_predictions) print(f'均方误差 MSE: {wujing_mse:.2f}') print(f'决定系数 R²: {wujing_r2:.2f}') # 可视化:预测值 vs 实际值 plt.figure(figsize=(12, 6)) sns.lineplot(x=X_test.index, y=y_test, label='实际值') sns.lineplot(x=X_test.index, y=wujing_predictions, label='预测值') plt.title('实际值 vs 预测值') plt.xlabel('时间') plt.ylabel('应收金额') plt.legend() plt.show() # 特征重要性可视化 wujing_importances = wujing_model.feature_importances_ indices = np.argsort(wujing_importances)[::-1] plt.figure(figsize=(10, 6)) plt.title("特征重要性") plt.bar(range(X.shape[1]), wujing_importances[indices], align="center") plt.xticks(range(X.shape[1]), [wujing_features[i] for i in indices]) plt.ylabel("重要性得分") plt.xlabel("特征") plt.show() 转化为用PyCharm 写的代码

仍然出现 “目标列已重命名: 每股经营活动现金流量净额_元_股_ncffropeps → 每股经营活动现金流量净额_元_股__NCFfropePS --------------------------------------------------------------------------- KeyError Traceback (most recent call last) File D:\anacondaxiaz\Lib\site-packages\pandas\core\indexes\base.py:3805, in Index.get_loc(self, key) 3804 try: -> 3805 return self._engine.get_loc(casted_key) 3806 except KeyError as err: File index.pyx:167, in pandas._libs.index.IndexEngine.get_loc() File index.pyx:196, in pandas._libs.index.IndexEngine.get_loc() File pandas\\_libs\\hashtable_class_helper.pxi:7081, in pandas._libs.hashtable.PyObjectHashTable.get_item() File pandas\\_libs\\hashtable_class_helper.pxi:7089, in pandas._libs.hashtable.PyObjectHashTable.get_item() KeyError: '每股经营活动现金流量净额_元_股__NCFfropePS' The above exception was the direct cause of the following exception: KeyError Traceback (most recent call last) Cell In[13], line 94 91 df = df.drop(columns=low_variance[low_variance].index) 93 #计算相关性矩阵 ---> 94 corr_matrix = df_numeric.corr()[target].abs().sort_values(ascending=False) 95 selected_features = corr_matrix[corr_matrix > 0.3].index.tolist() 97 # 合并目标变量(强制保留) File D:\anacondaxiaz\Lib\site-packages\pandas\core\frame.py:4102, in DataFrame.__getitem__(self, key) 4100 if self.columns.nlevels > 1: 4101 return self._getitem_multilevel(key) -> 4102 indexer = self.columns.get_loc(key) 4103 if is_integer(indexer): 4104 indexer = [indexer] File D:\anacondaxiaz\Lib\site-packages\pandas\core\indexes\base.py:3812, in Index.get_loc(self, key) 3807 if isinstance(casted_key, slice) or ( 3808 isinstance(casted_key, abc.Iterable) 3809 and any(isinstance(x, slice) for x in casted_key) 3810 ): 3811 raise InvalidIndexError(key) -> 3812 raise KeyError(key) from err 3813 except TypeError: 3814 # If we have a listlike key, _check_indexing_error will raise 3815 # InvalidIndexError. Otherwise we fall through and re-raise 3816 # the TypeError. 3817 self._check_indexing_error(key) KeyError: '每股经营活动现金流量净额_元_股__NCFfropePS'”

导入所需库 import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns from sklearn.ensemble import RandomForestRegressor from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error, r2_score 2️⃣ 加载并预处理数据 wujing = pd.read_excel(‘朝阳医院2018年销售数据.xlsx’) # 读取销售数据 wujing[‘购药时间’] = pd.to_datetime(wujing[‘购药时间’]) # 将“购药时间”转换为时间格式 wujing.set_index(‘购药时间’, inplace=True) # 设置时间索引 wujing.sort_index(inplace=True) # 按时间排序 wujing.dropna(inplace=True) # 删除缺失值 3️⃣ 特征工程 wujing[‘月份’] = wujing.index.month # 提取月份 wujing[‘星期几’] = wujing.index.dayofweek # 提取星期几(0为周一,6为周日) wujing[‘商品名称编码’] = pd.factorize(wujing[‘商品名称’])[0] # 商品名称编码 4️⃣ 销售金额时间趋势分析(按天聚合) wujing_daily_sales = wujing.resample(‘D’)[‘应收金额’].sum() wujing_daily_sales.plot(figsize=(12, 6), title=‘每日销售金额趋势’, xlabel=‘日期’, ylabel=‘销售金额’) plt.grid(True) plt.show() 5️⃣ 销售金额按月分析 wujing_monthly_sales = wujing.resample(‘M’)[‘应收金额’].sum() wujing_monthly_sales.plot(figsize=(12, 6), title=‘每月销售金额趋势’, xlabel=‘月份’, ylabel=‘销售金额’) plt.grid(True) plt.show() 6️⃣ 各药品销售排名(前10名) wujing_product_sales = wujing.groupby(‘商品名称’)[‘应收金额’].sum().sort_values(ascending=False) print(“销售额前10的药品:”) print(wujing_product_sales.head(10)) 7️⃣ 销售额前十药品可视化 wujing_product_sales.head(10).plot(kind=‘barh’, figsize=(10, 6), title=‘销售额前十药品’) plt.xlabel(‘销售金额’) plt.ylabel(‘药品名称’) plt.show() 8️⃣ 按地区销售统计(假设字段名为“销售地点”) if ‘销售地点’ in wujing.columns: wujing_region_sales = wujing.groupby(‘销售地点’)[‘应收金额’].sum().sort_values(ascending=False) print(“各地区销售金额:”) print(wujing_region_sales) wujing_region_sales.plot(kind=‘bar’, figsize=(12, 6), title=‘各地区销售金额对比’) plt.xlabel(‘地区’) plt.ylabel(‘销售金额’) plt.xticks(rotation=45) plt.grid(True) plt.show() 9️⃣ 是否使用社保对销售金额的影响(假设字段名为“是否使用社保”) if ‘是否使用社保’ in wujing.columns: wujing_insurance_sales = wujing.groupby(‘是否使用社保’)[‘应收金额’].mean() print(“是否使用社保对应平均销售金额:”) print(wujing_insurance_sales) wujing_insurance_sales.plot(kind=‘bar’, figsize=(8, 5), title=‘是否使用社保对销售金额的影响’) plt.xlabel(‘是否使用社保’) plt.ylabel(‘平均销售金额’) plt.grid(True) plt.show() 🔟 销售数量与应收金额相关性分析 print(“销售数量与应收金额相关性:”) wujing_corr = wujing[‘销售数量’].corr(wujing[‘应收金额’]) print(f"相关系数 r = {wujing_corr:.2f}") sns.jointplot(x=‘销售数量’, y=‘应收金额’, data=wujing, kind=‘reg’, height=6) plt.suptitle(f’销售数量与应收金额相关性 (r = {wujing_corr:.2f})') plt.tight_layout() plt.show() 🔪 构建随机森林模型(使用特征:月份、星期几、商品名称编码、销售数量) wujing_features = [‘月份’, ‘星期几’, ‘商品名称编码’, ‘销售数量’] wujing_target = ‘应收金额’ X = wujing[wujing_features] y = wujing[wujing_target] 分割训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) 初始化并训练随机森林回归模型 wujing_model = RandomForestRegressor(n_estimators=100, random_state=42) wujing_model.fit(X_train, y_train) 模型预测 wujing_predictions = wujing_model.predict(X_test) 模型评估 wujing_mse = mean_squared_error(y_test, wujing_predictions) wujing_r2 = r2_score(y_test, wujing_predictions) print(f’均方误差 MSE: {wujing_mse:.2f}‘) print(f’决定系数 R²: {wujing_r2:.2f}’) 可视化:预测值 vs 实际值 plt.figure(figsize=(12, 6)) sns.lineplot(x=X_test.index, y=y_test, label=‘实际值’) sns.lineplot(x=X_test.index, y=wujing_predictions, label=‘预测值’) plt.title(‘实际值 vs 预测值’) plt.xlabel(‘时间’) plt.ylabel(‘应收金额’) plt.legend() plt.show() 特征重要性可视化 wujing_importances = wujing_model.feature_importances_ indices = np.argsort(wujing_importances)[::-1] plt.figure(figsize=(10, 6)) plt.title(“特征重要性”) plt.bar(range(X.shape[1]), wujing_importances[indices], align=“center”) plt.xticks(range(X.shape[1]), [wujing_features[i] for i in indices]) plt.ylabel(“重要性得分”) plt.xlabel(“特征”) plt.show() 加数据结构探索,销售药品最好的和最差的

import pandas as pd import numpy as np from sklearn.preprocessing import OrdinalEncoder, StandardScaler from sklearn.impute import SimpleImputer from sklearn.model_selection import train_test_split from factor_analyzer import FactorAnalyzer from factor_analyzer.factor_analyzer import calculate_kmo from xgboost import XGBClassifier import lightgbm as lgb from sklearn.metrics import classification_report # ====================== # 1. 数据读取与清洗 # ====================== def load_and_clean(data_path): # 读取数据 df = pd.read_csv(data_path) # 缺失值处理 num_imputer = SimpleImputer(strategy='median') cat_imputer = SimpleImputer(strategy='most_frequent') # 数值型字段 numeric_cols = ['付费金额', '活跃时长', '广告收入', '留存'] df[numeric_cols] = num_imputer.fit_transform(df[numeric_cols]) # 分类型字段 categorical_cols = ['设备价值档位', '用户初始广告档位'] df[categorical_cols] = cat_imputer.fit_transform(df[categorical_cols]) # 异常值处理 df['活跃时长'] = np.where(df['活跃时长'] > 24, 24, df['活跃时长']) df['付费金额'] = np.where( df['付费金额'] > df['付费金额'].quantile(0.99), df['付费金额'].quantile(0.95), df['付费金额'] ) return df # ====================== # 2. 特征工程 # ====================== def feature_engineering(df): # 构造复合特征 df['ARPU密度'] = df['付费金额'] / (df['活跃天数'] + 1) df['广告展示率'] = df['广告曝光次数'] / df['短剧观看次数'] df['内容互动指数'] = np.log1p(df['收藏数']*1 + df['分享数']*2 + df['评论数']*3) # 分类变量编码 encoder = OrdinalEncoder(handle_unknown='use_encoded_value', unknown_value=-1) cat_cols = ['设备价值档位', '用户初始广告档位'] df[cat_cols] = encoder.fit_transform(df[cat_cols]) return df # ====================== # 3. 特征筛选与降维 # ====================== def feature_selection(df, target_col='付费意愿档位'): # 划分特征和目标 X = df.drop(columns=[target_col]) y = df[target_col] # 计算IV值筛选 from sklearn.feature_selection import mutual_info_classif iv_values = mutual_info_classif(X, y) iv_df = pd.DataFrame({'feature': X.columns, 'iv': iv_values}) selected_features = iv_df[iv_df['iv'] > 0.02]['feature'].tolist() X_selected = X[selected_features] # 因子分析降维 kmo_all, kmo_model = calculate_kmo(X_selected) if kmo_model > 0.6: fa = FactorAnalyzer(n_factors=5, rotation='varimax') fa.fit(X_selected) factor_scores = fa.transform(X_selected) factor_cols = [f'Factor_{i}' for i in range(1,6)] X_factors = pd.DataFrame(factor_scores, columns=factor_cols) else: X_factors = X_selected.copy() return X_factors, y # ====================== # 4. XGBoost特征筛选 # ====================== def xgb_feature_importance(X, y): # 训练XGBoost模型 model = XGBClassifier( objective='multi:softmax', eval_metric='mlogloss', use_label_encoder=False ) model.fit(X, y) # 获取特征重要性 importance = pd.DataFrame({ 'feature': X.columns, 'importance': model.feature_importances_ }).sort_values('importance', ascending=False) top10_features = importance.head(10)['feature'].tolist() return X[top10_features] # ====================== # 5. LightGBM建模预测 # ====================== def lgb_modeling(X, y): # 数据划分 X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, stratify=y, random_state=42 ) # 模型训练 model = lgb.LGBMClassifier( num_leaves=31, max_depth=5, learning_rate=0.1, n_estimators=300, class_weight='balanced' ) model.fit(X_train, y_train) # 模型评估 y_pred = model.predict(X_test) print(classification_report(y_test, y_pred)) return model # ====================== # 主流程执行 # ====================== if __name__ == "__main__": # 数据路径 DATA_PATH = "user_data.csv" # 执行流程 df = load_and_clean(DATA_PATH) df = feature_engineering(df) X, y = feature_selection(df) X_top10 = xgb_feature_importance(X, y) final_model = lgb_modeling(X_top10, y) # 模型保存 final_model.booster_.save_model('user_value_model.txt')解释一下这个代码

import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns from sklearn.model_selection import train_test_split, GridSearchCV from sklearn.preprocessing import StandardScaler, OneHotEncoder from sklearn.compose import ColumnTransformer from sklearn.ensemble import RandomForestRegressor from sklearn.metrics import mean_squared_error, r2_score from xgboost import XGBRegressor # 加载数据 df = pd.read_csv('new_副本_1.csv', encoding='gbk') # 查看数据概览 print(df.info()) print(df.describe()) # 目标变量 target = '用户累计付费金额' # 处理缺失值 df.replace('null', np.nan, inplace=True) df.fillna(df.median(numeric_only=True), inplace=True) # 数值型用中位数填充 df.fillna('missing', inplace=True) # 分类型用'missing'填充 # 特征类型分类 numeric_features = df.select_dtypes(include=np.number).columns.tolist() categorical_features = df.select_dtypes(include=['object']).columns.tolist() # 移除无关特征 remove_cols = ['新增日期', '剧集id', '末次活跃日期', '埋点信息是否follow'] # 示例 df = df.drop(columns=remove_cols) # 更新特征分类列表 numeric_features = [col for col in numeric_features if col not in remove_cols] # 处理分类变量 preprocessor = ColumnTransformer( transformers=[ ('num', StandardScaler(), numeric_features), ('cat', OneHotEncoder(handle_unknown='ignore'), categorical_features) ]) # 分离特征和目标 X = df.drop(columns=[target]) y = df[target] # 数据拆分 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 应用预处理 X_train_processed = preprocessor.fit_transform(X_train) X_test_processed = preprocessor.transform(X_test) # 初始化模型 xgb = XGBRegressor(objective='reg:squarederror') # 超参数网格 params = { 'n_estimators': [100, 200], 'max_depth': [3, 5], 'learning_rate': [0.01, 0.1] } # 网格搜索 grid = GridSearchCV(xgb, params, cv=3, scoring='neg_mean_squared_error') grid.fit(X_train_processed, y_train) # 最佳模型 best_model = grid.best_estimator_ # 预测 y_pred = best_model.predict(X_test_processed) # 评估指标 print(f"RMSE: {np.sqrt(mean_squared_error(y_test, y_pred))}") print(f"R² Score: {r2_score(y_test, y_pred)}") # 特征重要性 feature_names = numeric_features + list(preprocessor.named_transformers_['cat'].get_feature_names_out()) importance = pd.Series(best_model.feature_importances_, index=feature_names) print(importance.sort_values(ascending=False).head(10)) # 目标变量分布 plt.figure(figsize=(10,6)) sns.histplot(y, kde=True) plt.title('Target Variable Distribution') plt.show() # 特征相关性 corr_matrix = df[numeric_features + [target]].corr() plt.figure(figsize=(15,10)) sns.heatmap(corr_matrix, annot=True, cmap='coolwarm') plt.title('Feature Correlation Matrix') plt.show()

大家在看

recommend-type

微信小程序之列表打电话

微信小程序实现列表排列打电话功能,完整代码,JSON数组数据,可加载云数据和其它数据库的数据,直接能运行。功能简单,难者不会,会者不难。只有一个列表中打电话的功能,不需勿下。
recommend-type

matlab自相关代码-Ecology-Discovery-via-Symbolic-Regression:通过符号回归揭示复杂生态动力学的代

matlab自相关代码通过符号回归进行生态发现 通过符号回归揭示复杂生态动力学的代码回购 陈以泽,Marco Tulio Angulo和Liu Yang-Yu 被BioEssays接受,2019(作为封面故事),第41卷,第12期 动机 了解复杂生态系统的动态是维持和控制它们的必要步骤。 然而,逆向工程生态系统动力学仍然具有挑战性,这主要是因为生态系统可能会采用非常广泛的动力学类别,这使得选择合适的模型结构来应用参数推论方法具有挑战性。 在这里,我们建议通过符号回归来缩小这种差距,这是一种机器学习方法,可以从时间数据中自动对模型结构和参数进行逆向工程。 关于发现的生态动力学的一些结果 在这里,我们显示了一些生成的样本以及样本的自相关 语言和依存关系 我们使用Matlab来实现该算法。 具体来说,我们使用开源Matlab包在符号回归算法中启用了多基因搜索。
recommend-type

基于tensorflow框架,用训练好的Vgg16模型,实现猫狗图像分类的代码.zip

人工智能-深度学习-tensorflow
recommend-type

LMX2571原理图pcb工程

TI芯片LMX2571的原理图PCB,还有中文数据手册,需要的朋友自行下载,仿照ti官网。
recommend-type

天津大学逻辑与形式化方法复习资料.rar

天津大学逻辑与形式化方法复习资料,其中包括: 1.命题逻辑 2.一阶逻辑 3.Z语言的类型及构造单元 4.关系 5.函数 6.模式与规格说明 7.序列 8.包 9.Z语言规格说明的形式推理 10.模型检测

最新推荐

recommend-type

aaaa1111sdfs

aaaa1111sdfs
recommend-type

三菱PLC结构化编程在整条生产线自动化控制中的应用与实现 - 机器人控制 实战版

基于三菱Q系列PLC的整条生产线自动化控制系统的设计与实现。项目涵盖了两台Q系列PLC、六台触摸屏、MES系统、CCD检测系统、以太网通信、CCLINK远程IO站、RS232串口通信和机器人控制等多个关键技术。通过结构化模块化编程方法,项目实现了高效的代码复用和管理,提升了生产线的自动化和智能化水平。文中还展示了如何通过主从通信方式实现触摸屏的人机交互,以及如何通过功能块(FB)和功能(FC)封装实现各种复杂控制任务。此外,项目提供了完整的PLC程序、触摸屏程序、电气CAD图纸、IO表和设计数据文档,具有很高的参考价值。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对三菱PLC编程感兴趣的读者。 使用场景及目标:适用于需要提升生产线自动化程度的企业和个人开发者。通过学习本文,读者可以掌握三菱PLC结构化编程的方法,应用于实际项目中,提高生产效率和管理水平。 其他说明:本文不仅提供详细的编程思路和技术细节,还附带了丰富的参考资料,有助于读者深入理解和实践。
recommend-type

交流异步电机VF调速系统Matlab Simulink 2016b仿真研究与实例解析 - 交流异步电机 v2.1

利用Matlab Simulink 2016b进行交流异步电机VF(恒压频比)调速系统的建模与仿真方法。首先,构建了三相电压源和异步电机的基本模型,设置了关键电气参数如电阻、电感等。然后,实现了电压频率控制的核心逻辑,特别是针对低频段进行了电压补偿以确保足够的启动转矩。此外,还探讨了PWM生成器配置以及仿真过程中可能出现的问题及其解决方案。最终,通过示波器观测转速和转矩的变化情况来验证系统的性能特点。 适合人群:从事电力电子、自动化控制领域的工程师和技术人员,尤其是那些希望深入了解交流异步电机调速原理并掌握具体仿真技巧的人士。 使用场景及目标:适用于需要评估或优化交流异步电机VF调速系统的设计人员,在实际项目前期可以通过此类仿真实验快速测试不同工况下系统的响应特性,从而指导硬件选型和软件算法调整。 其他说明:文中提到的一些具体参数设定和调试经验对于初次接触这类仿真的读者非常有帮助,同时强调了一些容易忽视但会影响结果的关键点,如持续关注电流波形、正确选择PWM载波频率等。
recommend-type

【java毕业设计】医家管理系统源码(ssm+mysql+说明文档).zip

java语言,idea开发平台,mysql5.5以上版本,ssm框架 前台+后台,3个用户,注册用户,医生,管理员 网站前台: 用户注册,登录 信息公示查看 医生信息展示(姓名, 职称,科室,擅长领域等) 就医预约(填写选择医生,对应某个科室,日期,就医症状等) 医药信息费用查看 管理员 管理员信息管理 科室管理 医生信息管理 注册用户管理,审核 信息公示管理 医药信息管理(医药名称,类别,费用,图片等) 医药出入库管理 医药库存查看 系统管理 医生 个人资料修改 就医预约审核 病历管理 用户 用户资料修改 我的预约信息 我的病历查看 完整前后端源码,部署后可正常运行! 环境说明 开发语言:Java后端 框架:ssm,mybatis JDK版本:JDK1.8+ 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:eclipse/idea Maven包:Maven3.3+ 部署容器:tomcat7.5+
recommend-type

Notes App API开发与使用指南

### API基础知识 #### 标题分析:“notes-app-api” 从标题“notes-app-api”可以推断,此API(Application Programming Interface,应用程序接口)是专为一个名为“notes-app”的应用程序设计的。这种API通常被用来允许不同的软件组件之间进行通信。在这个案例中,“notes-app”可能是一款笔记应用,该API提供了笔记数据的获取、更新、删除等操作的接口。 #### 描述分析:“API休息说明” 在提供的“API休息说明”中,我们可以看到几个重要的操作指令: 1. **指令“dev”:** `npm run dev` - 这是一个用于启动开发模式的命令。通常情况下,`npm run dev`会使用Node.js环境下的某种热重载功能,让开发者在开发过程中实时看到代码更改的效果。 - `npm`是Node.js的包管理器,用于安装项目所需的依赖、运行脚本等。 - `dev`是脚本命令的缩写,实际对应的是`package.json`文件中定义的某个开发环境下的脚本命令。 2. **指令“服务”:** `npm start` - 这是一个用于启动应用程序服务的命令。 - 同样利用Node.js的`npm`包管理器执行,其目的是部署应用程序,使其对外提供服务。 3. **指令“构建”:** `npm run build` - 这是用于构建项目的命令,通常会将源代码进行压缩、转译等操作,生成用于生产环境的代码。 - 例如,如果项目使用了TypeScript,构建过程可能包括将TypeScript代码编译成JavaScript,因为浏览器不能直接运行TypeScript代码。 #### 标签分析:“TypeScript” TypeScript是JavaScript的超集,提供了静态类型检查和ES6+的特性。使用TypeScript可以提高代码的可读性和可维护性,同时在编译阶段发现潜在的错误。 1. **TypeScript的特性:** - **静态类型检查:** 有助于在开发阶段捕捉类型错误,降低运行时错误的概率。 - **ES6+特性支持:** TypeScript支持最新的JavaScript语法和特性,可以使用装饰器、异步编程等现代JavaScript特性。 - **丰富的配置选项:** 开发者可以根据项目需求进行各种配置,如模块化系统、编译目标等。 2. **TypeScript的使用场景:** - 大型项目:在大型项目中,TypeScript有助于维护和扩展代码库。 - 多人协作:团队开发时,类型定义有助于减少沟通成本,提高代码一致性。 - 错误敏感应用:如金融、医疗等领域的应用,可以利用TypeScript的静态类型检查减少bug。 #### 文件分析:“压缩包子文件的文件名称列表: notes-app-api-develop” 这个文件列表中包含了“notes-app-api-develop”,它表明存在一个与开发相关的压缩包或存档文件。这个文件很可能包含了应用程序的源代码,通常还会包括`package.json`文件,这个文件定义了项目的依赖关系和可运行的脚本命令。在开发和部署过程中,开发者通常会根据`package.json`中定义的脚本来执行不同的任务,如`npm run dev`或`npm start`等。 ### Docker使用说明 在描述中还提到了使用Docker的命令: 1. **构建镜像:** `docker build -t notes-api .` - 这个命令用于构建一个名为`notes-api`的Docker镜像。 - `.`表示Dockerfile在当前目录。 - `-t`指定镜像的名称和标签。 2. **运行容器:** `docker run -d -it -p 3005:3005 notes-api` - 该命令用于从`notes-api`镜像启动一个容器,并在后台运行。 - `-d`表示后台运行容器。 - `-it`则是将容器的标准输入打开,并分配一个伪终端。 - `-p 3005:3005`将容器内部的3005端口映射到宿主机的3005端口,允许宿主机与容器内部的服务进行通信。 Docker作为容器化平台,它允许开发者打包应用及其依赖环境为一个轻量级、可移植的容器,这样无论在什么环境下,都能保证应用运行的一致性。这一点对于开发和部署API来说尤为重要,因为它确保了开发环境与生产环境的一致性,减少了所谓的“在我的机器上可以运行”的问题。 ### 总结 综上所述,“notes-app-api”是一个为笔记应用程序设计的API,开发者可以通过一系列npm脚本命令进行开发、服务和构建操作。此外,该API还涉及到使用Docker进行容器化部署的流程。最后,提及的TypeScript标签意味着该项目在前端开发上采用了TypeScript,以期获得更加健壮和可维护的代码库。了解这些知识点对开发、部署和维护现代Web应用至关重要。
recommend-type

【PMSM建模与测试最佳实践】:MATLAB电机仿真模型的权威指导

# 1. PMSM电机模型的基础知识 在现代工业自动化和电动车辆领域,永磁同步电机(PMSM
recommend-type

如何通过四元数避免万向节死锁?

<think>好的,用户想了解如何使用四元数来避免万向节锁问题,尤其是在3D旋转中保持姿态的稳定性。首先,我需要回忆万向节锁的基本概念和四元数如何解决这个问题。万向节锁发生在使用欧拉角时,当两个旋转轴对齐导致失去一个自由度。而四元数通过四维空间的旋转避免了这种顺序依赖。 接下来,我应该解释万向节锁的原因,比如三个轴依次旋转时,某个轴可能与其他轴对齐,导致无法正确旋转。然后对比四元数的优势,比如四元数的连续性和无奇异性。需要提到四元数的数学表示,如单位四元数和旋转插值方法(如球面线性插值),以及它们如何避免万向节锁。 还要考虑用户可能的实际应用场景,比如游戏开发或机器人学,是否需要示例代码?
recommend-type

Python实现Couchbase大规模数据复制技术

标题中提到的技术“couchbase-massive-replication”是一种针对Couchbase数据库的开源Python开发工具,专门用于高效地实现跨集群的大量存储桶和索引的复制。Couchbase是一个高性能、可扩展、容错的NoSQL文档数据库,它支持同步分布式复制(XDCR),能够实现跨地域的数据复制。 描述部分详细阐述了该技术的主要用途和优势。它解决了一个常见问题:在进行XDCR复制时,迁移大量存储桶可能会遇到需要手动检查并迁移缺失存储桶的繁琐步骤。Couchbase-massive-replication技术则允许用户在源和目标集群之间无需进行存储桶配置,简化了迁移过程。开发者可以通过简单的curl请求,向集群发送命令,从而实现大规模存储桶的自动化迁移。 此外,为了帮助用户更容易部署和使用该技术,项目提供了一个Dockerfile,允许用户通过Docker容器来运行程序。Docker是一种流行的容器化平台,可以将应用及其依赖打包到一个可移植的容器中,便于部署和扩展。用户只需执行几个Docker命令,即可快速启动一个名为“cbmigrator”的容器,版本为0.1。启动容器后,可以通过发送简单的POST请求来操作迁移任务。 项目中还提到了Docker Hub,这是一个公共的Docker镜像注册中心,用户可以在其中找到并拉取其他用户分享的镜像,其中就包括了“cbmigrator”镜像,即demir94/cbmigrator:0.1。这大大降低了部署和使用该技术的门槛。 根据标签“Python”,我们可以推断出该项目是使用Python开发的。Python是一种广泛使用的高级编程语言,以其简洁的语法和强大的库支持而闻名。该项目中Python的使用意味着用户可能需要具备一定的Python基础知识,以便对项目进行定制或故障排除。Python的动态类型系统和解释执行机制,使得开发过程中可以快速迭代和测试。 最后,从提供的压缩包子文件的文件名称列表“couchbase-massive-replication-main”来看,该项目的源代码文件夹可能遵循了通用的开源项目结构,其中“main”文件夹通常包含了项目的主要代码和入口文件。用户在获取项目后,可以在这个文件夹中找到相关的代码文件,包括配置文件、数据库模型、业务逻辑实现以及API接口等。 综合来看,这个项目涉及的技术点包括: - Couchbase数据库:一种文档数据库,广泛用于构建可扩展的应用程序。 - XDCR(Cross-Datacenter Replication):Couchbase提供的跨数据中心数据复制机制,实现数据的无缝迁移和灾难恢复。 - Python编程语言:用来开发该项目的高级编程语言,以其易读性和简洁的语法著称。 - Docker容器化技术:用于打包、分发和运行应用程序的平台,提供了一种便捷的部署方式。 - Docker Hub:一个存放和分享Docker镜像的平台,可以简化镜像的查找、下载和管理过程。 这个项目对于需要在多个Couchbase集群间迁移大量数据的开发者和运维人员来说是一个宝贵的资源,因为它大大简化了存储桶迁移的过程,并提高了操作的便利性和效率。
recommend-type

【MATLAB电机性能评估案例】:仿真环境下的深度研究

# 1. MATLAB在电机性能评估中的应用概述 电机作为现代工业中不可或缺的电力传动设备,其性能优劣直接影响整个系统的可靠性和效率。在众多的电机性能评估工具中,MATLAB凭借其强大的数值计算能力和丰富的工具箱资源,成为该领域研究和工程实践中的有力工具。本章将对MATLAB在电机性能评估中的应用进行概述,并介绍其在电机仿真、故障诊断和性能优化等方面的具体应用前景和价值。MA
recommend-type

专业版立创EDA怎么画板子边框圆角

<think>嗯,用户问的是如何在专业版立创EDA中画板子的圆角边框。首先,我得回忆一下立创EDA的功能布局。专业版和标准版可能有些不同,所以得确认步骤是否正确。 首先,用户可能需要知道如何进入板子边框的编辑模式。通常,这类操作是在PCB设计界面里进行的。所以第一步应该是打开或创建一个PCB文件。然后,找到板子边框的选项,可能在“设计”或者“工具”菜单下,或者有专门的边框层,比如Board Outline层。需要确认专业版的具体位置,可能在顶部工具栏或右键菜单里。 接下来,用户需要绘制一个矩形作为基础边框。这里可能需要使用绘制矩形工具,然后调整大小到所需的板子尺寸。但问题是如何将矩形的四个