乳腺癌患者的生存分析:从传统方法到DeepSurv

news2024/12/27 13:39:39

一、引言

乳腺癌作为全球女性中最常见的癌症之一,其早期诊断和治疗对于提高患者生存率至关重要。随着医学技术和数据分析方法的不断发展,乳腺癌患者的生存分析逐渐成为研究的热点。通过生存分析,我们可以更好地理解疾病进展、预测患者预后,并制定个性化的治疗方案。然而,传统的生存分析方法,如Cox比例风险模型和Kaplan-Meier曲线,尽管在过去几十年中发挥了重要作用,但也存在一定的局限性。这些方法通常依赖于线性假设,无法充分捕捉复杂的非线性关系。此外,它们对高维数据的处理能力有限,难以充分利用现代医学研究中常见的大规模、多维度数据。为了克服这些局限性,近年来,深度学习技术在生存分析领域显示出巨大的潜力。特别是DeepSurv模型,它结合了深度神经网络的强大功能和传统Cox模型的优势,通过学习数据中的复杂模式,提供了更为准确和灵活的生存预测。在乳腺癌生存分析中,DeepSurv不仅能够处理大规模临床数据,还能更好地捕捉患者特征与生存时间之间的非线性关系,从而提供更加精确的预后评估。

本文将详细探讨乳腺癌生存分析从传统方法到现代深度学习方法的发展历程,分析各方法的优缺点,并通过实例验证其应用效果。通过这种方法的对比研究,我们希望为未来乳腺癌生存分析提供新的思路和方向。

二、传统方法的应用与局限

在乳腺癌生存分析中,传统的统计方法一直扮演着重要角色。这些方法不仅为我们提供了基本的生存率预测模型,还帮助我们理解了多种因素对患者生存时间的影响。然而,随着数据复杂性和量级的增加,这些传统方法也暴露出了一些局限性。

2.1 Cox比例风险模型及其应用

Cox比例风险模型(Cox Proportional Hazards Model)是一种广泛应用于生存分析的回归模型。它通过估计风险比(Hazard Ratio),分析不同变量(如年龄、肿瘤大小、治疗方式等)对生存时间的影响。该模型具有以下特点和应用:

  1. 线性回归基础:Cox模型基于线性回归,但它不要求具体的生存时间分布假设,只需假设变量与生存时间的对数关系是线性的。
  2. 变量选择:可以纳入多个协变量,通过偏相关分析确定每个变量对生存时间的独立贡献。
  3. 临床应用:常用于评估治疗效果、筛选预后因子,以及制定个性化治疗方案。

尽管Cox模型在临床研究中被广泛使用,但其主要局限性在于假设变量与生存时间之间的关系是线性的,这在处理复杂的非线性关系时显得不足。

2.2 KM曲线分析的优势与局限

Kaplan-Meier曲线(Kaplan-Meier Survival Curve)是一种非参数统计方法,用于估计随时间推移的生存概率。其主要应用和特点如下:

  1. 生存概率估计:通过绘制生存曲线,可以直观地展示各时间点的生存概率。
  2. 组间比较:可以通过Log-rank检验对不同组别(如不同治疗方案、患者特征)的生存曲线进行比较。
  3. 无分布假设:无需假设生存时间的分布形式,因此在小样本和不完全数据(如截尾数据)下表现良好。

然而,Kaplan-Meier方法也存在一些局限性,例如无法处理多维协变量,不能直接提供各协变量对生存影响的精确估计。此外,它在应对高维数据和非线性关系方面能力有限。

2.3 传统方法的挑战与问题

虽然Cox比例风险模型和Kaplan-Meier曲线在乳腺癌生存分析中有广泛应用,但面对现代医学研究中复杂、多维的数据集,它们面临以下挑战和问题:

  1. 高维数据处理:传统方法在处理大量协变量时效率低下,容易导致模型过拟合或欠拟合。
  2. 非线性关系捕捉:线性假设限制了模型对复杂非线性关系的捕捉能力,影响了预测的准确性。
  3. 数据依赖性:对数据完整性和质量要求较高,对于缺失值和噪声数据敏感,可能影响结果的可靠性。
  4. 模型扩展性:难以扩展到包含多种数据类型(如基因数据、影像数据等)的综合分析。

这些挑战促使研究人员探寻新的方法,以期在更大程度上提高乳腺癌生存分析的准确性和实用性。这也为现代深度学习方法,如DeepSurv的引入创造了条件。

三、DeepSurv简介

随着数据科学和计算能力的飞速发展,深度学习方法在各个领域得到了广泛应用。在医疗健康领域,深度学习同样展示了其强大的潜力,特别是在生存分析方面。DeepSurv模型作为一种基于深度学习的方法,通过引入神经网络结构,为生存分析提供了新的解决方案。

3.1 DeepSurv模型的介绍和原理

DeepSurv是一种利用深度神经网络进行生存分析的模型,它可以被视为一种非线性的Cox比例风险模型。其核心思想是用神经网络来替代传统Cox模型中的线性部分,从而更好地捕捉复杂的非线性关系。DeepSurv的主要特点和原理包括:

  1. 模型结构:DeepSurv使用多层神经网络来建模协变量与风险函数之间的关系。输入层接受患者的各种特征数据(如年龄、肿瘤大小、治疗方式等),经过若干隐藏层处理后,输出一个风险得分。
  2. 损失函数:DeepSurv的训练目标是最大化部分似然函数(Partial Likelihood Function),这与Cox模型的目标一致,但它通过神经网络实现更灵活的映射。
  3. 非线性特征捕捉:得益于神经网络的非线性激活函数,DeepSurv能够捕捉到数据中复杂的非线性关系,提高了模型的表达能力和预测准确性。

3.2 深度学习在医学生存分析中的优势

深度学习方法在医学生存分析中展现出许多优势,使其成为当前研究的热点。具体优势包括:

  1. 处理高维数据:深度学习能够有效处理高维数据集,包括基因组数据、影像数据等,这些数据在传统统计方法中往往难以应对。
  2. 非线性建模:通过使用非线性激活函数,深度学习模型可以捕捉到复杂的非线性关系,提高了预测的精确度。
  3. 自动特征提取:相比于传统方法需要手工选择和提取特征,深度学习可以自动学习和提取重要特征,减少了人为干预和错误可能。
  4. 扩展性和通用性:深度学习模型可以方便地扩展和适应不同类型的数据和任务,具有很强的通用性。

3.3 DeepSurv的应用场景

DeepSurv模型在乳腺癌生存分析中有着广泛的应用场景,其灵活性和强大的预测能力使其在多个方面得到了应用:

  1. 个性化治疗决策:通过分析患者的多维特征数据,DeepSurv可以预测个体化的生存概率,从而帮助医生制定更加精准的治疗方案。
  2. 预后评估:DeepSurv能够根据患者的特征数据进行生存期预测,评估不同治疗方案的预后效果,为临床决策提供支持。
  3. 风险因素识别:通过对模型进行解释及重要性分析,DeepSurv可以识别出影响患者生存时间的重要因素,这对于了解疾病机制和发现新的生物标志物具有重要意义。
  4. 多模态数据融合:DeepSurv可以整合包括临床数据、基因数据和医学影像在内的多种数据类型,提供更加全面和精准的生存分析结果。

在这些应用中,DeepSurv不仅提高了乳腺癌生存分析的准确性,还为个性化医疗和精准医学的发展提供了新的工具和方法。

四、实例演示

  • 数据集准备
library(survival)
head(gbsg)

结果展示:

   pid age meno size grade nodes pgr er hormon rfstime status
1  132  49    0   18     2     2   0  0      0    1838      0
2 1575  55    1   20     3    16   0  0      0     403      1
3 1140  56    1   40     3     3   0  0      0    1603      0
4  769  45    0   25     3     1   0  4      0     177      0
5  130  65    1   30     2     5   0 36      1    1855      0
6 1642  48    0   52     2    11   0  0      0     842      1
  • 示例数据集介绍
> str(gbsg)
'data.frame':   686 obs. of  10 variables:
 $ age    : int  49 55 56 45 65 48 48 37 67 45 ...
 $ meno   : int  0 1 1 0 1 0 0 0 1 0 ...
 $ size   : int  18 20 40 25 30 52 21 20 20 30 ...
 $ grade  : int  2 3 3 3 2 2 3 2 2 2 ...
 $ nodes  : int  2 16 3 1 5 11 8 9 1 1 ...
 $ pgr    : int  0 0 0 0 0 0 0 0 0 0 ...
 $ er     : int  0 0 0 4 36 0 0 0 0 0 ...
 $ hormon : int  0 0 0 0 1 0 0 1 1 0 ...
 $ rfstime: int  1838 403 1603 177 1855 842 293 42 564 1093 ...
 $ status : Factor w/ 2 levels "0","1"1 2 1 1 1 2 2 1 2 2 ...

age:患者年龄
meno:更年期状态(0表示未更年期,1表示已更年期)
size:肿瘤大小
grade:肿瘤分级
nodes:受累淋巴结数量
pgr:孕激素受体表达水平
er:雌激素受体表达水平
hormon:激素治疗(0表示否,1表示是)
rfstime:复发或死亡时间(以天为单位)
status:事件状态(0表示被截尾,1表示事件发生)
  • 划分训练集和测试集
# 划分训练集和测试集
set.seed(123)
data <- gbsg[,c(-1)]


# 划分训练集和测试集
set.seed(123)
train_indices <- sample(x = 1:nrow(data), size = 0.7 * nrow(data), replace = FALSE)
test_indices <- sample(setdiff(1:nrow(data), train_indices), size = 0.3 * nrow(data), replace = FALSE)

train_data <- data[train_indices, ]
test_data <- data[test_indices, ]
  • Cox回归
library(rms)
library(forestplot)
library(ggplot2)
library(survminer)
gbsg$status <- as.factor(gbsg$status)
surv_obj <- Surv(time = gbsg$rfstime, event = gbsg$status)
cox_model <- coxph(surv_obj ~ age + meno + size + grade + nodes + pgr + er + hormon, data = gbsg)

# 输出模型摘要
summary(cox_model)

# Schoenfeld 残差图
cox.zph <- cox.zph(cox_model)
plot(cox.zph)

# 风险比(危险比)森林图
ggforest(cox_model,fontsize = 1)

结果展示:

> summary(cox_model)
Call:
coxph(formula = surv_obj ~ age + meno + size + grade + nodes + 
    pgr + er + hormon, data = gbsg)

  n= 686, number of events= 299 

             coef  exp(coef)   se(coef)      z Pr(>|z|)    
age    -0.0093924  0.9906516  0.0092733 -1.013 0.311136    
meno    0.2672772  1.3064025  0.1833366  1.458 0.144882    
size    0.0077164  1.0077463  0.0039497  1.954 0.050739 .  
grade   0.2802894  1.3235128  0.1060553  2.643 0.008221 ** 
nodes   0.0498939  1.0511596  0.0074094  6.734 1.65e-11 ***
pgr    -0.0022378  0.9977647  0.0005758 -3.887 0.000102 ***
er      0.0001674  1.0001674  0.0004477  0.374 0.708431    
hormon -0.3372029  0.7137640  0.1289618 -2.615 0.008929 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

       exp(coef) exp(-coef) lower .95 upper .95
age       0.9907     1.0094    0.9728    1.0088
meno      1.3064     0.7655    0.9121    1.8713
size      1.0077     0.9923    1.0000    1.0156
grade     1.3235     0.7556    1.0751    1.6293
nodes     1.0512     0.9513    1.0360    1.0665
pgr       0.9978     1.0022    0.9966    0.9989
er        1.0002     0.9998    0.9993    1.0010
hormon    0.7138     1.4010    0.5543    0.9190

Concordance= 0.688  (se = 0.015 )
Likelihood ratio test= 101.9  on 8 df,   p=<2e-16
Wald test            = 115.3  on 8 df,   p=<2e-16
Score (logrank) test = 120.1  on 8 df,   p=<2e-16

  • KM曲线
f <- survfit(Surv(gbsg$rfstime, gbsg$status) ~ gbsg$hormon)
ggsurvplot(f,
           data = gbsg,
           surv.median.line = "hv"
           #legend.title = "Risk Group",
           #legend.labs = c("Low Risk", "High Risk"),
           pval = TRUE
           ggtheme = theme_bw()
)
  • DeepSurv

我的R环境是4.3.1;Python版本是3.7.8,然后pycox是0.21,numba是0.56.4,torch版本是1.13.1.直接调用survivalmodels的install_pycox(pip = TRUE, install_torch = FALSE)很容易报错,所以我选择的是直接在python的命令台上安装的,安装代码如下:

pip install pycox -i https://pypi.tuna.tsinghua.edu.cn/simple/

pip install numba -i https://pypi.tuna.tsinghua.edu.cn/simple/

pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple/

在python环境安装好后,切换到R,构建模型:

install.packages("survivalmodels")
library(survivalmodels)

library(reticulate)
# python环境所在地址,载入python环境
use_python("E:/work/image/Scripts/python.exe", required = TRUE)

#构建模型
fit <- deepsurv(Surv(rfstime, status) ~ ., # 生存函数
                data = train_data,           # 数据集
                frac = 0.2,             # 验证集的比例
                num_nodes = c(10,10,10), # 隐藏层及节点数
                dropout = 0.1,          # 丢弃比例
                epochs = 50             # 迭代次数
                )

summary(fit)

展示:

> summary(fit)

 DeepSurv Neural Network 

Call:
  deepsurv(formula = Surv(rfstime, status) ~ ., data = train_data,      frac = 0.2, num_nodes = c(10, 10, 10), dropout = 0.1, epochs = 50)

Response:
  Surv(time, status)
Features:
  {age, meno, size, grade, nodes, pgr, er, hormon} 

模型预测,预测类型包括"survival", "risk"和"all":

# 预测survival
predict_survival <- predict(fit, newdata = test_data,type = "survival")
# 预测risk
pred_risk <- predict(fit, newdata = test_data, type = "risk")
# 预测all
pred_all <- predict(fit, newdata = test_data, type = "all")

# 计算c-index
pred_risk
cindex(risk = pred_risk, truth = test_data[, "rfstime"])

结果展示:

> pred_risk
      0         1         2         3         4         5         6         7   
 80.12736 327.17328 189.39695 134.55141  67.94922 274.02600  51.44136 108.24392 
      8         9         10        11        12        13        14        15  
114.18961 574.10202 221.68230 462.79823 130.68237 131.21035 211.55929 398.72837 
      16        17        18        19        20        21        22        23  
147.25787 111.91293 400.09115 137.37606  53.55314 153.31386 106.42626 211.10138 
      24        25        26        27        28        29        30        31  
 82.74198 306.75164  44.72644 101.65856 159.00379 136.19707 149.21874 169.81787 
      32        33        34        35        36        37        38        39  
197.22143 144.11227  59.11857 308.49735 146.42685 101.17418 337.71257 486.46840 
      40        41        42        43        44        45        46        47  
129.26178  72.52315 409.10793 278.68016 155.67095  56.83786 284.10788  97.28708 
      48        49        50        51        52        53        54        55  
198.47229 285.18211 138.73939 124.16116  53.57482 133.26099 107.10976 278.34643 
      56        57        58        59        60        61        62        63  
 90.72356 130.08133 210.53352 128.66593  47.34550 105.87534 101.40301 109.83489 
      64        65        66        67        68        69        70        71  
346.61130 145.05662  97.98250 117.22922 126.94511  98.01944 162.01521 162.03262 
      72        73        74        75        76        77        78        79  
145.67819 251.87218 141.14477 383.28518 172.89826  57.96955 138.09030  54.73976 
      80        81        82        83        84        85        86        87  
 96.59379 147.26509 139.73348 128.59405  67.47137 133.07111 317.15832  86.45016 
      88        89        90        91        92        93        94        95  
129.83943 152.08206 270.72811 303.48258 150.29952 169.06237 148.69828  43.46272 
      96        97        98        99        100       101       102       103 
 64.17921 127.12986 280.16405 160.24267 148.19581 151.83081 154.07808  60.79155 
      104       105       106       107       108       109       110       111 
183.88459 237.96573  96.31389 100.42688 133.25614 104.01997 187.76998 300.76916 
      112       113       114       115       116       117       118       119 
100.45509 108.22447 205.61734 254.49152  74.32411 160.13690 155.30184 136.66622 
      120       121       122       123       124       125       126       127 
222.51139 299.46922  89.11486 155.67773 238.05134  53.53340  63.48115 120.82007 
      128       129       130       131       132       133       134       135 
142.17557 158.03411 125.77776 231.60429 129.22552  31.37500 293.94934 117.36460 
      136       137       138       139       140       141       142       143 
187.37866 170.05713  87.99622 178.99964 120.88055 279.94733 155.80732 300.77463 
      144       145       146       147       148       149       150       151 
 53.01152 134.35913 265.30663  41.13955  60.59557 151.61541 306.75251  98.87177 
      152       153       154       155       156       157       158       159 
115.26952 179.99319  57.73859 152.25170 128.66639 257.59329 278.66759  50.23968 
      160       161       162       163       164       165       166       167 
129.63275 345.23194 317.84273 150.14964 103.94026 169.72435 335.38401  92.99068 
      168       169       170       171       172       173       174       175 
101.14991 242.36740 141.83460 175.07276 125.70793 147.20586 121.24276 145.70031 
      176       177       178       179       180       181       182       183 
127.75253  93.41605 111.58675 161.60848 283.54243 177.18073 199.09026 105.09877 
      184       185       186       187       188       189       190       191 
144.15396 222.20554 153.66556 232.83480 179.76305 160.92410  70.33592 376.13669 
      192       193       194       195       196       197       198       199 
152.74814 364.42211 317.46268 119.04612  90.04021 356.26450  56.01602 323.29105 
      200       201       202       203       204 
126.80601 117.82606 157.53607 215.44190 364.23803 

> cindex(risk = pred_risk, truth = test_data[, "rfstime"])
[1] 0.5910918

五、总结

5.1 深度学习的潜在作用

深度学习作为人工智能的一个重要分支,具有强大的数据处理和模式识别能力。随着医疗数据的不断积累和计算能力的提升,深度学习在乳腺癌生存分析中的潜在作用日益显著。

  1. 高精度预测:深度学习算法可以处理复杂的多维数据,提取出传统统计方法难以捕捉的特征,从而提高生存预测的准确性。
  2. 个性化治疗方案:通过分析大量患者数据,深度学习模型可以帮助制定更加个性化的治疗方案,提高患者的生存率和生活质量。
  3. 自动化分析:深度学习技术可以实现乳腺癌生存分析的自动化处理,减少人工干预,提升效率,并降低人为误差。

5.2 传统方法与深度学习方法的结合

尽管深度学习在处理大数据和复杂模式方面具有显著优势,但将其与传统统计方法结合,可能会带来更为全面和可靠的分析结果。

  1. 互补优势:传统方法如Cox比例风险模型在解释性和理论基础上有独特的优势,而深度学习擅长处理非线性关系和大数据。两者结合可以弥补各自的不足,实现优势互补。
  2. 混合模型:开发混合模型,将深度学习算法的非线性建模能力与传统统计方法的解释能力结合,能够提供更为精准且可解释的生存分析结果。
  3. 验证与优化:使用传统方法对深度学习模型进行验证和优化,可以增强模型的可信度和临床应用价值。

5.3 对乳腺癌生存分析未来发展的展望

随着科技的不断进步和多学科的交叉融合,乳腺癌生存分析将在多个方面迎来新的发展机遇。

  1. 数据融合与共享:未来,通过整合多源数据,如基因组学、影像学、临床记录等,构建更为全面的数据集,有望显著提升生存分析的准确性。
  2. 实时监测与预测:借助物联网和可穿戴设备,实时监测患者的健康状况,结合深度学习模型进行动态预测和及时干预,将成为可能。
  3. 多学科协作:生物信息学、数据科学、医学等领域的紧密合作,将推动更为创新和高效的解决方案,为乳腺癌生存分析和治疗提供有力支持。
  4. 伦理与隐私保护:随着数据使用和分析技术的普及,加强数据隐私保护和伦理规范,确保患者信息安全和合法合规,是未来发展的重要方向。

深度学习方法在乳腺癌生存分析中展现出巨大的潜力,通过与传统方法的结合,可以实现更为精准和个性化的预测和治疗方案。未来,随着数据融合、多学科协作以及技术的不断进步,乳腺癌生存分析将迎来更加广阔的发展前景,为患者提供更好的治疗和护理服务。这一领域的持续创新和发展,不仅有助于提高乳腺癌患者的生存率和生活质量,也将推动整个医学和健康领域的进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1853035.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Oracle】实验二 体系结构、存储结构与各类参数

【实验目的】 理解Oracle体系结构了解初始化参数文件以及初始化参数的含义掌握查看三类数据字典视图和动态性能视图的方法 【实验内容】 如何查看初始化参数&#xff1f;有哪几种方法&#xff1f;初始化参数文件有几种&#xff1f;默认的保存位置在哪里&#xff1f;在SQL*Pl…

L57---112.路径总和(广搜)---Java版

1.题目描述 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;这条路径上所有节点值相加等于目标和 targetSum 。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。叶子节点 是指…

DVWA 靶场 Weak Session IDs 通关解析

前言 DVWA代表Damn Vulnerable Web Application&#xff0c;是一个用于学习和练习Web应用程序漏洞的开源漏洞应用程序。它被设计成一个易于安装和配置的漏洞应用程序&#xff0c;旨在帮助安全专业人员和爱好者了解和熟悉不同类型的Web应用程序漏洞。 DVWA提供了一系列的漏洞场…

https://curl.trillworks.com不能用的解决方法

gitee源码:https://gitee.com/Project0ne/curlconverter 首先打开上面的链接 然后下载文件 下载文件到本地 然后安装node.js(Node.js official website.)不会的自行百度,这里不做过多赘述。 在curlconverter文件夹下面打开终端(在文件夹下面右键-在终端打开) 输入 npm…

文本分析-中文停用词集合(结合百度停用词表、哈工大停用词表、四川大学机器智能实验室停用词库、中文停用词表等)

将这4个停用词表进行组合并去重。 # _*_coding:utf-8 _*_import os #得到当前文件路径 current_pathos.getcwd() #获取文件列表 list_fileos.listdir(current_path) #用来存储停用词 temp_stopwords[] for file in list_file:file_tailfile.split(.)[-1]#只要txt格式的文件if f…

Kylin系列:架构和高级功能详解

目录 一、Kylin的架构 1.1 总体架构概述 1.2 数据源 1.3 元数据存储 1.4 构建引擎 1.5 存储引擎 1.6 查询引擎 1.7 用户接口 二、Kylin的高级功能 2.1 多维立方体(Cube) 2.1.1 Cube的定义 2.1.2 Cube的构建 2.2 查询优化 2.3 数据模型和星型模式 2.3.1 数据模…

我做了个Hexo博客

最近花了两个周末的时间边学变做Hexo博客&#xff0c;最终成品地址如下&#xff1a; https://blog.mybatis.io 下面先说说做博客的经过&#xff0c;想做Hexo博客一开始是因为看到了 hexo-theme-icarus 主题&#xff0c;这个主题样式如下&#xff1a; 首页 内容页 这个主题是…

字节豆包全新图像Tokenizer:生成图像最低只需32个token,最高提速410倍

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 更多资源欢迎关注 在生成式模型的迅速发展中&#xff0c;Image Tokenization 扮演着一个很重要的角色&#xff0c;例如Diffusion依赖的VAE或者是Transformer依赖的VQGAN。这些Tokenizers会将图像编码至一个更为紧凑的隐…

AI味太重怎么办?1个超简单的方法就能解决

我们知道随着GPT技术的迅速发展&#xff0c;解决了我们大部分写作的难题。但是很多小伙伴想必都会遇到同样的问题&#xff0c;就是写出来的文章太正式-我们叫这“AI味”。 这AI味让人感觉内容虽然条理清楚&#xff0c;但就是缺了点人情味&#xff0c;读起来不够亲切。 其实&a…

獭崎酱酒:传承百年酱香,品味经典之选

在中国白酒文化中&#xff0c;酱香型白酒以其独特的风味和精湛的酿造工艺&#xff0c;一直受到广大酒友的青睐。而在众多酱香型白酒品牌中&#xff0c;獭崎酱酒以其传承百年的酱香工艺和高品质的产品&#xff0c;成为了众多酒友心中的经典之选。    | | | |–|–| | | | 百…

几何内核开发-实现自己的NURBS曲线生成API

我去年有一篇帖子&#xff0c;介绍了NURBS曲线生成与显示的实现代码。 https://blog.csdn.net/stonewu/article/details/133387469?spm1001.2014.3001.5501文章浏览阅读323次&#xff0c;点赞4次&#xff0c;收藏2次。搞3D几何内核算法研究&#xff0c;必须学习NURBS样条曲线…

L56---226.翻转二叉树(广搜)---Java版

1.题目描述 2.思路和知识点 &#xff08;1&#xff09;按照每层来划分&#xff0c; 第一层是2^0&#xff08; 1&#xff09; 第二层是2^1&#xff08;2&#xff0c;3&#xff09; 第三层是2^2 &#xff08;4&#xff0c;5&#xff0c;6&#xff0c;7&#xff09; 第n层是2^(n-…

栅格数据重心迁移变化分析

目前网络上大多是针对矢量重心迁移进行计算&#xff0c;或把栅格转矢量在进行计算&#xff0c;可以不用怎么麻烦&#xff0c;可以直接利用栅格进行得出多期数据的重心&#xff0c;然后进行变化分析等方面的分析。 矢量数据可以通过下面方式进行重心计算&#xff1a; 使用ArcGIS…

谷歌学术内容爬取

最近面临导师灵魂拷问&#xff1a; “你怎么知道你提出的这个方法前人都没有提出过呢&#xff1f;” “你相比于之前的方法&#xff0c;创新点究竟在哪里&#xff1f;” 好吧&#xff0c;为了彻底杜绝这样的问题&#xff0c;开始学习使用谷歌学术。先来学习下关键词检索 哈哈…

qt基本窗口类(QWidget,QDialog,QMainWindow)

1.三个基本窗口类 1.1QWidget 所有窗口的基类 可以内嵌到其他窗口的内部&#xff0c;无边框 也可以作为独立窗口显示&#xff0c;有边框 1.2QDialog 继承于QWidget 对话框窗口类 不可以内嵌到其他窗口 有模态和非模态两种显示方式 1.3QMainWind 继承于QWidget 主窗口类 不可以…

前端Web开发HTML5+CSS3+移动web视频教程 Day1

链接 HTML 介绍 写代码的位置&#xff1a;VSCode 看效果的位置&#xff1a;谷歌浏览器 安装插件 open in browser&#xff1a; 接下来要保证每次用 open in browser 打开的是谷歌浏览器。只需要将谷歌浏览器变为默认的浏览器就可以了。 首先进入控制面板&#xff0c;找到默…

【会议征稿,ACM出版】2024年图像处理、智能控制与计算机工程国际学术会议(IPICE 2024,8月9-11)

2024年图像处理、智能控制与计算机工程国际学术会议&#xff08;IPICE 2024&#xff09;将于2024年8月9-11日在中国福州举行。本届会议由阳光学院、福建省空间信息感知与智能处理重点实验室、空间数据挖掘与应用福建省高校工程研究中心联合主办。 会议主要围绕图像处理、智能控…

QtCreator/VS中制作带有界面的静态库

1、可参考以下文章 QT中制作带有界面的动态库 2、相比动态库,静态库就更简单了,,, 1)创建静态库项目 2)直接右键创建同名窗口类进行覆盖 3)编译生成静态库 4)使用 3、上述都是基于QtCreator来制作的含有界面的静态库,下面基于VS2017来制作带有界面的静态库 …

Temu(拼多多跨境电商) API接口:获取商品详情

核心功能介绍——获取商品详情 在竞争激烈的电商市场中&#xff0c;快速、准确地获取商品数据详情对于电商业务的成功至关重要。此Temu接口的核心功能在于其能够实时、全面地获取平台上的商品数据详情。商家通过接入Temu接口&#xff0c;可以轻松获取商品的标题、价格、库存、…

Day6 —— 电商日志数据分析项目部署流程

项目二 _____&#xff08;电商日志数据分析项目&#xff09; 项目部署过程相关依赖运行结果截图统计页面浏览量日志的ETL操作统计各个省份的浏览量 项目部署过程 以IDEA 2023版本为例 步骤一&#xff1a;创建一个空项目&#xff0c;命名为demo_2&#xff0c;并指定语言类型和构…