UCI心脏疾病数据Python实战:从清洗到建模的完整指南
简介适用于计算机专业毕业设计、课程设计或期末大作业的完整实践资源围绕UCI心脏病数据集展开数据分析通过预处理、可视化与机器学习建模识别心脏病风险因素。资源包含Python源码、数据集、分析报告和答辩PPT共70个文件涵盖4个Python脚本、2个CSV数据文件、1份PDF报告及1份PPT演示另有大量图表辅助说明压缩包约23.24MB。已有82人学习查看适合需要完整项目参考的数据分析初学者。源码按数据预处理、可视化、建模、模型选择分模块组织便于理解每一步思路报告详细阐述数据选择原因、处理步骤与模型性能答辩PPT结构清晰适合作为成果汇报框架。整体覆盖从数据清洗到模型评估的完整流程能帮助读者快速掌握用Python开展医学数据分析的基本方法。1. 心脏疾病数据分析UCI数据集先搞清这份数据为什么值得做把心脏疾病数据分析做成一个完整的Python项目最值得拿UCI数据集练手的原因是它小、真实、坑还多。一份几百行的数据、14列看起来简单真跑起来第一版模型很容易在准确率上还行、召回率却一塌糊涂因为原始标签是0到4的五级分档还有一堆缺失值被编码成问号混在数值列里。这个项目的完整链路——用Python做探索分析、清洗、建模、可视化最后产出报告和PPT——是国内课程设计和求职作品集里的常客也是把“会跑代码”升级成“能把结论讲清楚”的入门样本。适合刚做完Python基础、想找一个有真实数据又有业务含义的项目练手的人。2. 拿到UCI心脏疾病数据后的第一件事清洗与特征对齐2.1 数据包结构不要只盯着csv原始文件没有表头先说数据从哪来。UCI Machine Learning Repository的Heart Disease数据集解开压缩包后里面有多个版本的processed数据和原始数据。最常用的Cleveland子集对应文件是processed.cleveland.data它是纯文本、用逗号分隔、没有表头。很多教程直接pd.read_csv(processed.cleveland.data)打开结果列名全变成0、1、2……这是第一个坑这个数据文件必须自己维护一份字段字典。字段字典我一般直接写进代码里共14列。前13列是特征age年龄、sex性别1男0女、cp胸痛类型1典型心绞痛、2非典型心绞痛、3非心绞痛、4无症状、trestbps静息血压、chol血清胆固醇、fbs空腹血糖是否大于120mg/dl、restecg静息心电图结果、thalach最大心率、exang运动诱发心绞痛、oldpeakST段压低数值、slope运动峰值ST段斜率、ca主要血管数、thal血流状态分级最后一列是标签num0表示没有心脏病1到4表示不同程度的心脏病。import pandas as pd COLUMNS [ age, sex, cp, trestbps, chol, fbs, restecg, thalach, exang, oldpeak, slope, ca, thal, num ] df pd.read_csv( processed.cleveland.data, namesCOLUMNS, na_values? # 原始数据里缺失值是用?写的 ) print(df.shape) # 预期是 303 行 14 列 print(df.isna().sum()) # 缺多少一目了然这段代码做的事情很简单但经常被跳过用names参数把字段名挂上去用na_values把问号统一转成NaN。processed.cleveland.data里ca和thal两列的缺失值就是问号如果不处理pandas会把整列读成字符串object后面做任何数值运算都会报错或者静默出问题。na_values?的意思是告诉pandas“这个符号代表缺失”而不是再手动去replace。如果你已经习惯用pd.to_numeric(..., errorscoerce)补救也能达到类似效果但清洗动作必须放在最前面先转类型再算特征。2.2 缺失值处理填中位数还是直接删取决于分析目的清洗完拿到的是带NaN的数据框接下来决策缺失值怎么处理。Cleveland子集里缺失集中在ca和thal两列行数不多总共大概6行左右。两条路线一条是直接dropna简单粗暴样本量从303掉到297对后续模型影响不大另一条是按分组填充中位数适合要做细粒度统计图表的场景。我一般这样区分如果任务是做分类建模优先dropna因为ca这个特征本身信息量很高拿填充值代替真实缺失会污染它如果任务是做EDA画图比如按thal分组画患病率柱状图用“缺失值单独分一组”的策略反而更诚实硬填中位数会让图表失真。df_model df.dropna().copy() # 把标签从五级转成二分类0代表健康1代表患病 df_model[disease] (df_model[num] ! 0).astype(int) # 看看类别分布是否均衡 print(df_model[disease].value_counts(normalizeTrue))转换标签是这一步的重点。原数据num是0到4的整数0代表无病1到4代表不同程度。做分类预测时除非你有把握预测严重程度否则最常见的做法是压成二分类只要num不等于0就算患病。normalizeTrue让value_counts直接输出比例你会看到健康与患病的比例大约在46%对54%类别基本均衡不需要做重采样。有人会把num直接丢给回归模型拟合或者做成五分类任务这两种做法在这个项目里都不推荐。数据量只有300行左右五分类会让每个类别样本数降到几十条模型方差太大回归拟合更不符合业务语义你预测的是风险等级而不是连续数值。2.3 特征理解比跑模型更重要用分组统计验证直觉数据洗好、标签转好先别急着建模。我习惯先做一组分组统计患病组和健康组在每个特征上的均值有没有拉开。这一步直接决定后面哪些特征值得进模型也能帮你发现数据本身有没有问题。grouped df_model.groupby(disease).agg( mean_age(age, mean), mean_chol(chol, mean), mean_thalach(thalach, mean), top_cp(cp, lambda x: x.value_counts().index[0]) ).reset_index() print(grouped)这里的agg用了命名聚合写法(age, mean)这种元组形式是pandas 2.x推荐的旧版的groupby(disease)[age].mean()也能跑但一次性输出多个统计量的时候可读性差很多。lambda那行取cp列里出现频次最高的值用来快速看患病组最常见的胸痛类型。一个常见的现象是患病组的thalach最大心率均值明显低于健康组oldpeakST段压低均值明显更高。这与医学直觉一致也是你PPT里能讲的“数据合理性验证”。如果你拿到的分组结果完全反直觉先别怀疑医学回头查一下标签有没有转反。这一步做完你才算真正“见过”这份数据。3. 建模实践从基线逻辑回归到XGBoost的完整流程3.1 训练集与测试集划分分层抽样保住类别比例样本只有300行划分策略直接决定你最后PPT上的数字经不经得起追问。随机切分有个风险小数据集上健康组和患病组在训练集、测试集里的比例可能漂移导致训练时模型偏科。解决办法是stratify参数按标签列做分层抽样让两边类别比例保持一致。from sklearn.model_selection import train_test_split feature_cols [c for c in COLUMNS if c ! num] X df_model[feature_cols] y df_model[disease] X_train, X_test, y_train, y_test train_test_split( X, y, test_size0.2, random_state42, stratifyy ) print(y_train.value_counts(normalizeTrue)) print(y_test.value_counts(normalizeTrue))random_state42是固定随机种子保证每次运行得到同样的划分。做报告时这是基本素质——如果每次跑结果都不一样评审大概率会问“你这个准确率是挑出来的吗”。stratifyy让训练集和测试集的患病比例都与全量数据一致对这个小数据集来说比随机划分稳健得多。注意feature_cols这里保留了ca和thal的原始数值列没有做one-hot因为这两列本身是有序的数值语义血管数、血流状态分级直接进树模型没问题。逻辑回归那边稍后会做标准化。3.2 逻辑回归先建可解释基线别上来就上XGBoost逻辑回归在这个项目里的价值不在精度在可解释性。它给你一组系数能直接说“年龄每增加一岁患病对数几率怎么变”。但要让它配合好需要两个处理数值特征标准化、避免不收敛。from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression from sklearn.pipeline import make_pipeline pipe_lr make_pipeline( StandardScaler(), LogisticRegression(max_iter1000, C0.1, random_state42) ) pipe_lr.fit(X_train, y_train) train_acc pipe_lr.score(X_train, y_train) test_acc pipe_lr.score(X_test, y_test) print(fLR train acc: {train_acc:.3f}, test acc: {test_acc:.3f})make_pipeline把标准化和模型串在一起fit时先算训练集的均值方差再对训练集和测试集用同一套参数变换避免测试集信息泄漏到预处理里。这是新手最容易犯的错先在全量数据上StandardScaler().fit()再切分虽然在小数据集上影响未必致命但流程上站不住。C0.1是正则化强度的逆值越小正则化越强。300行数据、13个特征逻辑回归容易过拟合C取小一点能压住方差。max_iter1000是因为标准化后的特征在lbfgs求解器下一般几十次迭代就收敛设大一点只是防止警告刷屏。跑完后观察的方向是系数绝对值排序。coef_正负代表方向绝对值大小代表影响强度但不同特征量纲不同这一步只做排序参考不要直接说“chol系数0.01所以影响小”正确的说法是“标准化后系数绝对值排名靠前的特征是thalach、oldpeak、ca”。3.3 随机森林与XGBoost参数怎么设、什么时候用基线之后我用随机森林和XGBoost做精度提升。随机森林的优势是不用归一化、对异常值不敏感、能给出feature_importances_XGBoost在这么小的数据集上提升有限但作为对比项写在报告里比只放逻辑回归有说服力。from sklearn.ensemble import RandomForestClassifier from xgboost import XGBClassifier # 随机森林树多、深度受限、叶子样本数受限 rf RandomForestClassifier( n_estimators500, max_depth6, min_samples_leaf3, random_state42 ) rf.fit(X_train, y_train) # XGBoost小学习率配较多树 xgb XGBClassifier( n_estimators200, max_depth3, learning_rate0.05, eval_metriclogloss, random_state42 ) xgb.fit(X_train, y_train, eval_set[(X_test, y_test)], verboseFalse)随机森林参数n_estimators500树多了方差小300行样本训练完全没压力max_depth6防止单棵树过深记住训练集min_samples_leaf3让叶子节点至少3个样本是控制过拟合最有效的参数之一比max_depth更容易压制噪声。XGBoost参数n_estimators200配合learning_rate0.05小学习率必须用更多树来补偿否则欠拟合eval_metriclogloss用来在训练时观察验证集表现verboseFalse是让训练过程别刷屏。新版XGBoost 2.x不需要再写use_label_encoderFalse那个参数已经移除了。提示如果XGBoost在测试集上只比随机森林高零点几个百分点别硬吹XGBoost更好。小数据集上树模型的随机性本来就大0.5%的差距完全可能是随机种子带来的。我一般会跑三个随机种子的结果取均值再下结论。3.4 交叉验证与评估准确率不是唯一标准最后的评估不能只报一个test accuracy。心脏病预测这个场景漏诊的代价比误诊高所以recall、ROC-AUC、F1都要看。cross_val_score用来验证模型在不同子集上的表现波动范围。from sklearn.model_selection import cross_val_score from sklearn.metrics import classification_report, roc_auc_score # 5折交叉验证AUC作为评估指标 scores cross_val_score(rf, X_train, y_train, cv5, scoringroc_auc) print(fRF 5-fold CV AUC: {scores.mean():.3f} ± {scores.std():.3f}) y_pred_rf rf.predict(X_test) y_proba_rf rf.predict_proba(X_test)[:, 1] print(classification_report(y_test, y_pred_rf)) print(fTest AUC: {roc_auc_score(y_test, y_proba_rf):.3f})cv5对300行数据来说足够scoringroc_auc比accuracy更稳因为它看的是排序能力而不是硬阈值分类。classification_report会输出每一类的precision、recall、f1和support注意看患病类类别1的recall——如果你的目标是“尽量别漏掉病人”recall低就比较危险可以考虑把分类阈值从默认0.5往下调比如0.4用predict_proba后自己定阈值。小数据集上交叉验证的std通常有0.03到0.05写报告时把AUC区间写出来比只写均值更诚实也更能体现你真的做过验证而不是只跑了一次fit。4. 把分析变成报告用matplotlib和seaborn画出PPT能直接用的图4.1 出图规范中文字体、dpi、尺寸一次设好做可视化前先花两分钟统一全局设置。默认的matplotlib出图有两个实际问题中文显示成方框保存图片dpi太低放进PPT里会糊。我的习惯是在脚本开头把三样东西固定中文字体回退、负号显示、统一样式。import matplotlib.pyplot as plt import seaborn as sns plt.rcParams[font.sans-serif] [SimHei, Microsoft YaHei, DejaVu Sans] plt.rcParams[axes.unicode_minus] False sns.set_theme(stylewhitegrid, palettemuted)SimHei和Microsoft YaHei按平台走Windows上SimHei能用macOS上没有这两个字体就改成PingFang SC或Hiragino Sans GB。列表里最后一个DejaVu Sans是字母数字的兜底。写成列表后matplotlib会逐个找第一个可用的。axes.unicode_minusFalse解决负号显示成方块的问题这是中文字体场景下最常见的玄学问题本质是字体回退把负号渲染坏了。stylewhitegrid让图表带网格线适合投影palettemuted用低饱和度配色避免投出来颜色过艳。这步做完后面所有图的样式就统一了不会出现一张图一个风格的情况。4.2 必出的三类图分布对比、相关矩阵、ROC曲线PPT里放太多图反而没人看。我一般只保留三张一张患病与健康的年龄/心率分布对比、一张关键特征相关矩阵、一张模型ROC曲线对比。三张图分别回答“数据长什么样”“特征之间什么关系”“模型到底多强”。# 分布对比图患病组与健康组的年龄、最大心率核密度曲线 fig, axes plt.subplots(1, 2, figsize(12, 5)) for ax, col in zip(axes, [age, thalach]): sns.kdeplot( datadf_model, xcol, huedisease, fillTrue, common_normFalse, axax ) ax.set_title(f{col} by disease) plt.tight_layout() plt.savefig(dist_compare.png, dpi150, bbox_inchestight)kdeplot画的是核密度估计曲线fillTrue填充面积common_normFalse让两组分别归一化这样即使两组样本量不同曲线的面积也是可比的不会出现样本多的一组曲线整体更高。这是画分布对比最容易翻车的地方两组样本量差距大时默认归一化会把少数组的形态盖住。savefig的bbox_inchestight自动裁掉多余白边PPT排版时不用再手动裁剪。第二张是相关矩阵热力图。13个特征全画进去会糊成一团我通常删掉与标签相关性极低的那几列只留下绝对值排序前8的特征。# 相关矩阵取与标签相关性靠前的特征 cols_keep [age, cp, trestbps, chol, thalach, oldpeak, ca, thal, disease] corr df_model[cols_keep].corr(methodspearman) plt.figure(figsize(10, 8)) sns.heatmap(corr, annotTrue, fmt.2f, cmapRdBu_r, vmin-1, vmax1, center0) plt.title(Spearman correlation of key features) plt.savefig(corr_heatmap.png, dpi150, bbox_inchestight)用Spearman而不是Pearson因为ca、thal这些列是等级变量不是连续分布Spearman排秩相关更稳健。cmapRdBu_r让负相关显示蓝色、正相关显示红色视觉上更容易找规律。你在报告里可以指出的典型模式oldpeak、ca与患病正相关较强thalach与患病负相关较强这和第2章分组统计的直觉一致。第三张是三个模型的ROC曲线对比。ROC曲线天然适合PPT一张图同时展示多个模型的判别能力AUC值直接标在图上。from sklearn.metrics import roc_curve, auc plt.figure(figsize(8, 6)) for model, name in [(pipe_lr, LogisticRegression), (rf, RandomForest), (xgb, XGBoost)]: proba model.predict_proba(X_test)[:, 1] fpr, tpr, _ roc_curve(y_test, proba) plt.plot(fpr, tpr, labelf{name} (AUC{auc(fpr, tpr):.3f})) plt.plot([0, 1], [0, 1], k--, labelRandom guess) plt.xlabel(False Positive Rate) plt.ylabel(True Positive Rate) plt.title(ROC comparison on test set) plt.legend() plt.savefig(roc_compare.png, dpi150, bbox_inchestight)有了这三张图PPT核心页就齐了。后面章节我会说怎么给这些图配文字而不是把图一贴就完事。4.3 图注与配色让图表自己会说话图表放进PPT之前我习惯再检查三件事坐标轴有没有单位、图例名称是不是人能读懂的、标题是不是一句完整的结论。默认的图例经常是disease0、disease1这种评审要盯着代码才知道含义。保存图片前加一句ax.legend([健康, 患病])之类比在PPT里补文本框省事得多。坐标轴单位也是thalach的数值是心率trestbps是血压不加单位别人只能猜。这些细节不会影响模型精度但直接影响汇报观感——同样的内容图注干净的人讲出来就是更可信。5. 避坑UCI心脏疾病数据集最常见的5个翻车点5.1 翻车点一把问号缺失值当成字符串整个数据框变成object现象pd.read_csv后不指定na_values直接跑df.describe()发现age列是object或所有列都变成object再建模时报错“Unknown label type”。原因processed.cleveland.data里的ca、thal列用问号表示缺失。如果没告诉pandas这是缺失标记它会把整列读成str类型从而把整个数据框推断成object dtype。数值运算和sklearn的fit都会直接失败。解决读文件时带上na_values?或者读完后用pd.to_numeric(..., errorscoerce)强制转换把无法解析的值变成NaN。这个动作要放在所有处理的最前面因为在dtype是object的情况下做缺失值统计是无效的。5.2 翻车点二把num标签当多分类算准确率现象直接用原始num0到4作为多分类目标模型输出五类预测PPT上报告的准确率只有50%多不同类别间F1差异悬殊。原因这个数据集的num字段不是均匀分级的。4级心脏病样本极少可能只有十几条模型基本学不到这一类的模式而且医疗场景下“1级和2级”的区分本来就没那么可靠标签设计初衷就是0和非0二分类。解决统一转成二分类等于0为健康不等于0为患病并在报告开头注明“本分析将研究目标定义为是否存在心脏疾病严重程度分级不作为预测目标”。如果有人追问为什么不做多分类一句话解释样本量不足以支撑五级细粒度预测。5.3 翻车点三全量数据标准化后才切分训练测试集现象先对X全量做StandardScaler再train_test_split测试集准确率比正常流程高一点点但答辩时被问到“数据泄漏”答不上来。原因全量标准化时测试集的均值和方差已经参与了变换相当于模型在预测前“见过”测试集的分布信息。这不是故意作弊但流程上确实是泄漏严谨的评审一定会抓。解决用make_pipeline(StandardScaler(), model)让标准化在fit时只学习训练集参数transform测试集时复用同一套参数。代码示例在第3.2节已经给过。这个坑太隐蔽不报错、指标还更好看最容易让人误以为自己是调参天才。5.4 翻车点四忽略分层抽样测试集里患病比例失真现象切分后y_test里健康样本占了80%模型测试准确率看起来特别高但仔细一比召回率却很低。原因300行小数据集随机切分时类别比例有概率漂移。特别是原数据本身就接近均衡46%对54%不分层也经常看不出问题但一旦漂移评估结果就会不稳定。解决train_test_split加stratifyy切分后打印训练集、测试集的正负样本占比给评审看。这一步能直接证明你的评估流程可靠属于“检查一下就能加分”的动作。5.5 翻车点五报告只写准确率不写召回率和AUC现象PPT结论页写着“模型准确率85%”没有precision、recall、AUC也没有交叉验证方差。评审问“这个85%是哪个类别的准确率”“模型会不会漏诊严重患者”时答不上。原因二分类场景里accuracy是最容易受类别比例和阈值影响的指标。心脏病预测场景下漏诊比误诊更危险只看准确率会掩盖漏诊率。解决至少同时报三个数患病类的recall、ROC-AUC、交叉验证AUC的均值加减标准差。PPT里用一句话解释清楚“我们用AUC评估排序能力用recall评估漏诊控制两个指标组合起来看而不是单看准确率。”6. 做一场让评审点头的汇报报告结构与PPT四页核心6.1 报告写作顺序先讲故事再放数字项目报告和代码注释是两回事。代码注释讲“怎么实现”项目报告讲“为什么这么做、结果说明什么”。我的报告结构是四段式背景与数据说明说明数据来自UCI Machine Learning Repository的心脏疾病数据集选用Cleveland子集共303条样本目标是把原始五级标签转成二分类并说明为什么这样转换。分析与发现放分组统计的结论例如患病组的最大心率均值低于健康组、ST段压低指标更高强调这些结果与医学常识自洽证明数据质量可用。建模与评估放三个模型的对比表每个模型的AUC、recall、precision、训练时间对比表里必须有交叉验证AUC的区间只写一个点值会被质疑。结论与局限说明XGBoost在当前数据规模上相对随机森林并无显著优势差距在随机波动范围内同时声明300条样本量的限制模型只适合做风险筛查参考不能替代临床诊断。6.2 PPT的四个必放页面第一页放ROC曲线对比图这是最直观的模型能力展示。第二页放患病与健康组的年龄分布对比这是医学相关性最明显的图。第三页放相关矩阵热力图用来解释你选特征的理由。第四页放一张“特征重要性Top 6”的条形图这张图需要单独跑一段代码。# 随机森林特征重要性排序取前6画水平条形图 importance pd.Series( rf.feature_importances_, indexfeature_cols ).sort_values(ascendingTrue).tail(6) plt.figure(figsize(10, 6)) importance.plot(kindbarh) plt.title(Top 6 features by RandomForest importance) plt.xlabel(Importance) plt.tight_layout() plt.savefig(feature_importance.png, dpi150, bbox_inchestight)用barh画水平条形图特征名从下到上排列视觉上最好读。feature_importances_是随机森林训练时统计每个特征被用于分裂带来的纯度增益总和归一化后每个特征一个比值适合做排序展示但不能解读成相关性方向——它只告诉你“这个特征被用得多”不告诉你“它是保护因素还是危险因素”。这是我在类似项目里的固定收尾动作把所有技巧沉淀成一页能讲图的逻辑。做一个项目最大的收获不只是跑通代码而是能回答三个问题这个数据在讲什么、模型为什么有效、结果能怎么用。每次做数据分析项目我都会在最后逼自己用三句话把这个项目讲完讲不完就说明还有地方没想透。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

1Password涨价背后:订阅制与买断制密码管理器怎么选?

1Password涨价背后:订阅制与买断制密码管理器怎么选?

1Password 涨价这事,这几天好几个朋友转给我看,说个人版一年涨了三分之一,家庭版涨得更狠,问我是不是该考虑换个密码管理器。刚好我也一直在研究这个品类,标题里提到的“168元终身版”我也实际买过、用过一阵子&#x…

2026/10/12 5:01:57 阅读更多 →
Agent技能体系设计实战:从函数堆到可复用、可编排的工程化架构

Agent技能体系设计实战:从函数堆到可复用、可编排的工程化架构

聊到Agent开发,很多人第一反应是:这不就是给大模型套个循环,再挂几个工具函数吗?我一开始也这么想,直到亲手把一个Demo性质的Agent往真实场景里推,才发现最大的短板根本不是模型能力,而是那堆散…

2026/10/12 5:01:57 阅读更多 →
APP 只写了 4KB,FileSystem 却等了 80ms:HarmonyOS 7 怎么分清逻辑 I/O、物理 I/O 和排队

APP 只写了 4KB,FileSystem 却等了 80ms:HarmonyOS 7 怎么分清逻辑 I/O、物理 I/O 和排队

APP 只写了 4KB,FileSystem 却等了 80ms:HarmonyOS 7 怎么分清逻辑 I/O、物理 I/O 和排队 DevEco Studio 26.0 新增 FileSystem 模板,分别展示应用逻辑读写、物理读写、调用栈和 Frame。当前官方文档注明该能力仅在中国大陆可用,…

2026/10/12 5:01:57 阅读更多 →

最新新闻

代码级对抗攻击:AST扰动如何绕过SAST与CI门禁

代码级对抗攻击:AST扰动如何绕过SAST与CI门禁

1. 这不是“黑客炫技”,而是代码层攻防的日常切片“Code-Level Adversarial Attacks 相关工作”——看到这个标题,很多人第一反应是:又一个AI安全论文里的抽象概念?其实不然。它背后是一群人在真实代码世界里反复拆解、注入、绕过…

2026/10/12 5:44:22 阅读更多 →
自然数立方与连续奇数之和:推导证明与Python验证

自然数立方与连续奇数之和:推导证明与Python验证

任何一个自然数 m,它的立方都可以写成 m 个连续奇数之和。这句话我第一次读到时,第一反应是:真的假的?当时正好在翻等差数列求和公式,索性拿纸笔列了一串奇数:1、3、5、7、9、11、13、15、17、19、21……然…

2026/10/12 5:44:22 阅读更多 →
最新Nessus2026.10.8版本主机漏洞扫描/探测工具Windows/Linux

最新Nessus2026.10.8版本主机漏洞扫描/探测工具Windows/Linux

前言 Nessus号称是世界上最流行的扫描程序,全世界有超过75000个组织在使用它。该工具提供完整的电脑扫描服务,并随时更新其数据库。Nessus不同于传统的扫描软件,Nessus可同时在本机或远端上遥控,进行系统的分析扫描。对应渗透测试…

2026/10/12 5:44:22 阅读更多 →
psutil详解:用Python搞定CPU、内存与进程监控

psutil详解:用Python搞定CPU、内存与进程监控

前阵子公司一台线上服务CPU突然飙到100%,我用系统自带的任务管理器看了半天,除了一个pid能锁定,剩下的信息全靠猜。后来发现这个进程是哪个服务的、占了多少内存、网络连了哪里,全是黑盒。那次之后我花了两天把psutil完整过了一遍…

2026/10/12 5:44:22 阅读更多 →
编程循环控制核心:break与continue用法详解与多语言实战对比

编程循环控制核心:break与continue用法详解与多语言实战对比

做开发这几年,几乎每个项目里都会碰上循环控制的问题。for 循环本身很简单,真正让新手挠头、让老手翻车的,往往是循环体里的那两个关键字:break 和 continue。很多新手写循环,要么不敢用 break 导致白白跑完全部数据&a…

2026/10/12 5:44:22 阅读更多 →
mediamtx v1.21.2发布:UDP、JWT、RTSP、RTMP、HLS、WebRTC全面修复,稳定性与安全性再提升

mediamtx v1.21.2发布:UDP、JWT、RTSP、RTMP、HLS、WebRTC全面修复,稳定性与安全性再提升

2026年10月10日,mediamtx 发布 v1.21.2 最新版本。本次更新以“修复与改进”为主,覆盖通用逻辑、API、Media-Over-QUIC、RTSP、RTMP、HLS、WebRTC 以及依赖库升级等多个方向。 v1.21.2 没有引入新的功能模块,而是集中处理实际运行中可能出现的…

2026/10/12 5:43:21 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →