【机器学习数据可视化-07】波士顿房价预测数据分析

news2024/11/17 7:22:15

波士顿房价预测:基于数据可视化的深入探索

一、引言

  在当今社会,房地产市场作为经济的重要支柱之一,其走势与波动直接影响着国家经济的稳定和人民生活的品质。波士顿,这座历史悠久且充满活力的城市,其房地产市场一直备受关注。波士顿房地产市场以其独特的地理位置、丰富的教育资源、优质的医疗设施以及独特的城市魅力,吸引了众多投资者和购房者的目光。

  首先,让我们来了解一下波士顿房地产市场的概况。波士顿地区拥有丰富的住宅和商业地产资源,市场供需关系相对平衡。然而,随着城市的发展和人口的增长,房价也呈现出不断上涨的趋势。同时,波士顿房地产市场还受到政策、经济、社会等多种因素的影响,其房价的波动性和不确定性较大。因此,准确预测波士顿房价的走势,对于投资者、开发商和购房者都具有重要意义。  
  房价预测的重要性不言而喻。对于投资者来说,准确预测房价可以帮助他们制定更加合理的投资策略,降低投资风险;对于开发商来说,了解房价的走势可以帮助他们更好地规划项目的开发进度和售价;对于购房者来说,了解房价的预测结果可以帮助他们做出更加明智的购房决策。
  然而,房价预测并非易事。传统的房价预测方法主要依赖于专家的经验和直觉,以及历史数据的统计分析。这些方法虽然具有一定的参考价值,但往往存在主观性强、准确性不高等问题。近年来,随着大数据和人工智能技术的快速发展,数据可视化技术逐渐成为房价预测的重要工具之一。
  数据可视化技术通过将复杂的数据以图形、图表等直观的形式展现出来,使人们能够更加方便地理解数据的含义和特征。在房价预测中,数据可视化技术可以帮助我们更加深入地了解房价与各维度特征之间的关系,揭示数据间的关联与趋势。通过数据可视化技术,我们可以将房价与地理位置、房屋类型、房屋面积、交通便利性等多个特征进行关联分析,发现它们之间的潜在规律和趋势。
  本文旨在通过数据可视化技术,深入探索波士顿房价与各维度特征之间的关系。我们将使用波士顿房价数据集作为研究对象,利用数据可视化技术对数据进行清洗、整理和分析,揭示房价与各特征之间的关联性和趋势。同时,我们还将介绍一些常用的数据可视化工具和方法,以及它们在房价预测中的应用。
  在接下来的章节中,我们将详细介绍数据收集与初步可视化、多维度数据可视化、深入可视化分析等内容,并通过具体的图表和案例来展示数据可视化技术在房价预测中的强大功能和价值。我们相信,通过本文的介绍和分析,读者将更加深入地了解数据可视化技术在房价预测中的应用,为未来的研究和实践提供有益的参考和借鉴。

二、数据收集与初步可视化

  在探索波士顿房价的预测问题时,我们首先需要做的是收集相关的数据集,并对数据进行清洗和初步的可视化分析。以下,我们将详细介绍这一过程,并使用python库来实现数据可视化。

数据来源与字段解析

  波士顿房价数据集是一个经典的机器学习数据集,它包含了波士顿郊区房价的中位数以及一些可能影响房价的特征信息。该数据集通常用于回归问题的研究,因为它包含了目标变量(即房价中位数)和多个预测变量(即特征)。

  在波士顿房价数据集中,每个样本代表波士顿郊区的一个小镇或区域,每个样本包含以下字段:
  查看数据集:

import pandas as pd 
from sklearn.datasets import load_boston

dir(load_boston())
print(load_boston().DESCR)

  • CRIM:城镇人均犯罪率
  • ZN:住宅用地超过25,000平方英尺的比例
  • INDUS:非零售商业用地比例
  • CHAS:查尔斯河虚拟变量(如果边界是查尔斯河则为1,否则为0)
  • NOX:一氧化氮浓度(单位:百万分之一)
  • RM:每个住宅的平均房间数
  • AGE:1940年之前建成的自用房屋比例
  • DIS:到波士顿五个就业中心的加权距离
  • RAD:到径向公路的可达性指数
  • TAX:全值财产税率(每10,000美元)
  • PTRATIO:学生与教师比例
  • B:1000(Bk - 0.63)^2,其中Bk是城镇中黑人的比例
  • LSTAT:较低地位人口比例
  • MEDV:房价中位数(单位:千美元)
导入数据
X = load_boston().data
y = load_boston().target
df = pd.DataFrame(X, columns=load_boston().feature_names)
df['MEDV'] = y
df.head()


在这里插入图片描述

  数据无缺失值的情况存在;

数据清洗

  在数据清洗阶段,我们需要处理数据中的缺失值、异常值和重复值,以确保数据质量。对于缺失值,我们可以根据数据的分布情况选择合适的填充方法,如均值填充、中位数填充或众数填充。对于异常值,我们需要根据业务背景和数据的分布情况来判断是否需要进行处理,常见的处理方法包括删除异常值、用均值或中位数替换异常值等。对于重复值,我们需要找出并删除它们,以避免对模型训练产生影响。

单维度数据可视化

  在单维度数据可视化阶段,我们将使用直方图、箱线图和饼图或条形图来展示数据的分布情况。
直方图
  直方图是一种用于展示数据分布情况的图形。我们可以使用pyecharts库中的Bar类来绘制直方图。通过直方图,我们可以清晰地看到每个特征值的分布情况,包括数据的集中程度、离散程度以及是否存在偏态等。   例如,我们可以绘制一个直方图来展示房价中位数(MEDV)的分布情况:
import matplotlib.pyplot as plt
import seaborn as sns

sns.displot(df['MEDV'],bins=30,kde=True)
plt.show()

箱线图
  箱线图是一种用于展示数据四分位数、中位数、异常值等信息的图形。我们可以使用seaborn库中的Boxplot类来绘制箱线图。通过箱线图,我们可以快速地识别出数据的分布情况、中位数以及异常值等。   例如,我们可以绘制一个箱线图来展示每个维度的数据分布情况:
sns.boxplot(data=df)
plt.show()

在这里插入图片描述

  CHAS:查尔斯河虚拟变量(如果边界是查尔斯河则为1,否则为0)和房价中位数(MEDV)的关系;

sns.boxplot(x='CHAS',y='MEDV',data=df)

饼图或条形图
  饼图或条形图通常用于对比不同类别的数量或比例。在波士顿房价数据集中,我们可以使用饼图或条形图来展示不同特征类别的分布情况。   例如,我们可以绘制一个饼图来展示不同犯罪率(CRIM)区间的样本数量比例:
from pyecharts.charts import Pie
bins = pd.qcut(df['CRIM'], q=10, labels=False, duplicates='drop')
df['CRIM_bin'] = bins
#假设我们已经将数据按照CRIM进行了分组,并计算了每个组的样本数量
crim_groups = df.groupby('CRIM_bin').size().reset_index(name='counts')

pie = (
    Pie()
    .add("", [list(z) for z in zip(crim_groups['CRIM_bin'], crim_groups['counts'])])
    .set_global_opts(title_opts=opts.TitleOpts(title="不同犯罪率区间的样本数量比例"))
)
pie.render("crim_pie_chart.html")

  请注意,在上面的示例中,我假设CRIM_bin是预先计算好的一个字段,它表示CRIM的分组区间。在实际情况中,您可能需要先对数据进行分组处理,然后再进行饼图的绘制。

  在初步数据探索与可视化阶段,我们将使用散点图和相关性矩阵图来初步观察房价与单个特征之间的关系,以及各特征之间的相关性。

散点图
  散点图可以直观地展示两个变量之间的关系。我们可以使用pyecharts库中的Scatter类来绘制散点图。通过散点图,我们可以初步观察房价与单个特征之间的关系,并判断是否存在线性或非线性关系。   例如,我们可以绘制一个散点图来展示房价中位数(MEDV)与每个房间数(RM)之间的关系:
sns.scatterplot(data=df,x='RM',y='MEDV')
plt.show()

sns.swarmplot(x='CHAS',y='MEDV',data=df)
plt.show()

在这里插入图片描述

折线图
df['MEDV'].plot(kind='line')
plt.show()

在这里插入图片描述

相关性矩阵图
  相关性矩阵图可以展示各特征之间的相关性。我们可以使用pyecharts库中的Heatmap类来绘制相关性矩阵图。通过相关性矩阵图,我们可以快速地识别出哪些特征之间存在较强的相关性,以及这些相关性是正相关还是负相关。
import seaborn as sns
import matplotlib.pyplot as plt

#计算相关性矩阵
corr_matrix = df.corr()

#使用seaborn绘制相关性矩阵图
plt.figure(figsize=(10, 8))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')
plt.title('特征相关性矩阵')
plt.show()


  数据不存在相关性较小的属性,也不用担心共线性,所以我们可以用线性回归模型去预测;

  请注意,虽然pyecharts是一个功能强大的可视化库,但它并不直接支持相关性矩阵图的绘制。因此,在上述示例中,我使用了另一个常用的数据可视化库seaborn来绘制相关性矩阵图。您可以将生成的图形保存为图片或使用其他方法将其嵌入到博客中。
  通过以上步骤,我们完成了数据的收集、清洗和初步可视化。在接下来的部分中,我们将进一步使用数据可视化技术对数据进行深入探索和分析。

多变量研究

  尝试了解因变量和自变量、自变量和自变量之间的关系

sns.pairplot(df[["LSTAT","RM","RAD","MEDV"]],palette='Set2')
plt.show()

三、深入可视化分析

  在波士顿房价预测的项目中,深入的可视化分析不仅有助于我们理解数据的内在规律,还能指导我们构建更准确的预测模型。以下将详细阐述如何通过可视化技术来展示房价的趋势预测、预测结果的置信水平以及异常值的检测。

一、趋势预测可视化

1. 预测曲线

  为了展示模型对未来房价的预测结果,我们可以绘制预测曲线。这里以线性回归模型为例,使用Python的 matplotlib库进行可视化。
import matplotlib.pyplot as plt
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_boston

#加载波士顿房价数据集
boston = load_boston()
X = boston.data
y = boston.target

#划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

#构建线性回归模型
model = LinearRegression()
model.fit(X_train, y_train)

#假设我们有一个未来的时间点,使用模型进行预测
#这里为了演示,我们简单地使用训练集的平均值作为未来的“时间点”
future_points = np.mean(X_train, axis=0).reshape(1, -1)
future_prices = model.predict(future_points)

#绘制预测曲线
#由于我们只有一个预测点,这里可以简单地使用散点图表示
plt.scatter(X_train[:, 0], y_train, color='blue', label='Training Data')  #假设第一个特征为时间
plt.scatter(future_points[0, 0], future_prices[0], color='red', label='Predicted Price')
plt.xlabel('Time/Feature')
plt.ylabel('Price')
plt.title('Trend Prediction of Boston Housing Prices')
plt.legend()
plt.show()

  # 注意:在实际应用中,我们通常会有一系列的时间点或特征值来绘制完整的预测曲线

2. 置信区间图

  要展示预测结果的置信水平,我们通常需要计算预测值的置信区间。然而,线性回归模型本身并不直接提供置信区间的计算。但我们可以使用统计方法(如自助法、公式法等)来近似估计。以下是一个简化的示例,假设我们已经有了置信区间的上下界。
# 假设我们有了置信区间的上下界(这里仅为示例,实际中需要计算)
lower_bound = future_prices - np.std(y_train)  # 简化的示例,不是真实置信区间
upper_bound = future_prices + np.std(y_train)

#绘制置信区间图
plt.scatter(X_train[:, 0], y_train, color='blue', label='Training Data')
plt.scatter(future_points[0, 0], future_prices[0], color='red', label='Predicted Price')
plt.fill_between([future_points[0, 0], future_points[0, 0]], lower_bound, upper_bound, color='lightgray', alpha=0.5, label='Confidence Interval')
plt.xlabel('Time/Feature')
plt.ylabel('Price')
plt.title('Trend Prediction with Confidence Interval')
plt.legend()
plt.show()

二、异常值检测与可视化

1. 箱线图结合散点图

  箱线图可以帮助我们快速识别数据中的异常值。结合散点图,我们可以高亮显示这些异常值及其对应的样本。
# 假设我们选择了某个特征(如'RM'表示房间数)来检测异常值
plt.boxplot(X_train[:, 5], vert=False, patch_artist=True, labels=['RM'])  # 假设'RM'是第六个特征
plt.scatter(X_train[:, 5], np.zeros_like(X_train[:, 5]), color='red', s=3)  # 绘制散点图,y轴使用零值仅为了对齐
plt.title('Boxplot with Outliers Highlighted')
plt.xlabel('RM')
plt.ylabel('Values')
plt.show()

在这里插入图片描述

  注意:为了更清晰地展示异常值,我们可以使用更复杂的逻辑来区分正常值和异常值,并为它们设置不同的颜色或标记

二、异常值检测与可视化

1. 箱线图结合散点图

  为了更精确地识别并高亮显示异常值,我们可以使用箱线图(boxplot)与散点图(scatter plot)相结合的方式。箱线图可以帮助我们快速定位数据中的四分位数(Q1, Q2, Q3)和异常值(通常定义为小于Q1-1.5 IQR或大于Q3+1.5IQR的值,其中IQR是四分位距,即Q3-Q1),而散点图则用于展示所有样本点。
import seaborn as sns


#计算四分位数和IQR
Q1 = np.percentile(X_train[:, 5], 25)
Q3 = np.percentile(X_train[:, 5], 75)
IQR = Q3 - Q1

#假设我们选择了某个特征(如'RM'表示房间数)来检测异常值
sns.boxplot(x=X_train[:, 5], palette="Set2", orient='v', whis=1.5)  #whis参数用于定义IQR的倍数
plt.scatter(X_train[~((X_train[:, 5] < Q1 - 1.5 * IQR) | (X_train[:, 5] > Q3 + 1.5 * IQR)), 5], 
            np.zeros_like(X_train[~((X_train[:, 5] < Q1 - 1.5 * IQR) | (X_train[:, 5] > Q3 + 1.5 * IQR)), 5]), 
            color='blue', s=3, label='Normal Values')  #绘制正常值的散点图
plt.scatter(X_train[(X_train[:, 5] < Q1 - 1.5 * IQR) | (X_train[:, 5] > Q3 + 1.5 * IQR), 5], 
            np.zeros_like(X_train[(X_train[:, 5] < Q1 - 1.5 * IQR) | (X_train[:, 5] > Q3 + 1.5 * IQR), 5]), 
            color='red', s=3, label='Outliers')  #绘制异常值的散点图


plt.xlabel('RM')
plt.ylabel('Values')
plt.title('Boxplot with Outliers Highlighted as Scatter Points')
plt.legend()
plt.show()

  在上面的代码中,我们使用了Seaborn库的boxplot函数来绘制箱线图,并使用matplotlib的scatter函数来绘制散点图。我们根据是否满足异常值的条件(即小于Q1-1.5IQR或大于Q3+1.5IQR)来区分正常值和异常值,并为它们设置不同的颜色。

2. 密度图(Kernel Density Estimation, KDE)

  密度图(或核密度估计图)可以展示数据的分布情况,并帮助我们识别异常聚集区域。我们可以使用Seaborn的 kdeplot函数或 displot函数来绘制密度图
#假设我们想要查看'RM'特征的密度分布
sns.kdeplot(X_train[:, 5], bw_adjust=0.5, label='RM Density')  #bw_adjust参数用于调整带宽,影响曲线的平滑度

#绘制正常值和异常值的直方图作为对比(可选)
sns.histplot(X_train[~((X_train[:, 5] < Q1 - 1.5 * IQR) | (X_train[:, 5] > Q3 + 1.5 * IQR)), 5], kde=True, bins=30, alpha=0.5, label='Normal Values')
sns.histplot(X_train[(X_train[:, 5] < Q1 - 1.5 * IQR) | (X_train[:, 5] > Q3 + 1.5 * IQR), 5], kde=True, bins=30, alpha=0.5, color='red', label='Outliers')

plt.xlabel('RM')
plt.ylabel('Density')
plt.title('Kernel Density Estimation of RM Feature')
plt.legend()
plt.show()

在这里插入图片描述

  在上面的代码中,我们使用了Seaborn的kdeplot函数来绘制’RM’特征的密度图,并使用histplot函数(结合kde=True参数)来同时绘制直方图和核密度估计图。通过设置不同的颜色或透明度

四、结果解读与讨论

解读可视化结果

  在波士顿房价预测项目中,我们使用了多种可视化技术来探索数据中的潜在模式。首先,通过散点图和相关性矩阵,我们观察到某些特征(如RM,即房间数)与房价之间存在明显的正相关关系。这意味着房间数越多,房价往往越高。同样,我们也发现LSTAT(低收入人口的百分比)与房价之间存在强烈的负相关关系,这表明低收入人群的比例越高,房价越低。
  进一步地,箱线图帮助我们识别了数据中的异常值。这些异常值可能是由于数据录入错误、测量误差或其他未知因素造成的。在房价预测模型中,异常值可能会导致模型性能下降,因此,在模型训练之前,我们通常需要对这些异常值进行处理。
  此外,我们还通过分布图(如直方图和密度图)了解了特征的分布形态。例如,一些特征可能呈现出正态分布,而另一些特征则可能呈现出偏态分布或双峰分布。这些分布信息对于选择合适的预测模型和参数调整至关重要。

讨论数据可视化在房价预测中的应用价值及局限性
  数据可视化在房价预测项目中发挥了重要作用。首先,它帮助我们直观地了解数据中的模式和趋势,这对于指导模型选择和参数调整非常有价值。其次,数据可视化可以帮助我们快速识别数据中的异常值和潜在问题,从而提高模型的预测性能。   然而,数据可视化也存在一定的局限性。首先,可视化图表只能展示数据的部分信息,无法全面反映数据的复杂性和多维性。因此,在进行数据分析时,我们还需要结合其他统计方法和机器学习技术来深入挖掘数据中的信息。其次,数据可视化容易受到主观因素的影响,不同的可视化方式可能会导致不同的解读结果。因此,在进行数据可视化时,我们需要保持客观和理性,避免过度解读和误导。

五、结论与展望

本文总结
  通过本次波士顿房价预测项目,我们深入探索了数据可视化在房价预测中的应用。通过绘制散点图、相关性矩阵、箱线图、直方图和密度图等多种可视化图表,我们成功地揭示了房价与各特征之间的关系及趋势。同时,我们也发现了数据中存在的一些异常值和潜在问题,并提出了相应的处理建议。   在模型训练方面,我们选择了合适的预测模型,并通过调整模型参数和优化算法来提高模型的预测性能。最终,我们得到了一个具有较高预测精度的房价预测模型,可以为房地产市场的投资者和决策者提供有价值的参考信息。
不足与展望

  尽管我们在本次项目中取得了一些成果,但仍然存在一些不足之处。首先,我们仅使用了部分常用的可视化技术来探索数据中的信息,可能遗漏了一些重要的模式和趋势。未来,我们可以尝试使用更多的可视化技术和方法来深入挖掘数据中的信息。其次,我们的模型在预测精度方面仍有提升的空间。未来,我们可以尝试使用更复杂的预测模型和算法来提高模型的预测性能。此外,我们还可以进一步探索数据的时空特性和影响因素,以更好地理解房价的变动规律和趋势。

六、附录

  在附录部分,我们可以附加额外的图表、代码或参考资料。例如,我们可以展示一些在数据分析过程中使用的具体代码片段,以便读者更好地理解我们的分析过程和方法。此外,我们还可以附加一些额外的图表来展示数据的更多细节和特征。最后,我们还可以列出一些参考资料和文献,以便读者进一步深入了解数据可视化和房价预测的相关知识。

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

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

相关文章

ElasticSearch学习篇12_《检索技术核心20讲》基础篇

背景 学习极客实践课程《检索技术核心20讲》https://time.geekbang.org/column/article/215243 课程分为基础篇、进阶篇、系统案例篇 主要记录企业课程学习过程课程大纲关键点&#xff0c;以文档形式记录笔记。 内容 检索技术&#xff1a;它是更底层的通用技术&#xff0c…

如何用bet快速创建文件夹多个同级文件夹,多层子文件夹

第一种用txt编辑&#xff0c;保存格式改为bat 运行即可 md用来创建文件夹 md空格文件夹名字 或者 md空格文件夹名字\子文件夹名字 第一个创建一个文件夹&#xff0c;或者多个同级文件夹用空格隔开或者用,英文逗号隔开 md 00 md 00 md 11 md 22 md 33 或者 md 00 1…

Python 中别再用 ‘+‘ 拼接字符串了!

当我开始学习 Python 时&#xff0c;使用加号来连接字符串非常直观和容易&#xff0c;就像许多其他编程语言&#xff08;比如Java&#xff09;一样。 然而&#xff0c;很快我意识到许多开发者似乎更喜欢使用.join()方法而不是。 在本文中&#xff0c;我将介绍这两种方法之间的…

Charles抓包App_https_夜神模拟器

Openssl安装 下载安装 下载地址&#xff1a; http://slproweb.com/products/Win32OpenSSL.html 我已经下载好了64位的&#xff0c;也放出来&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1Nkur475YK48_Ayq_vEm99w?pwdf4d7 提取码&#xff1a;f4d7 --来自百度网…

Golang实现文件复制

方法&#xff1a;三种 package zdpgo_fileimport ("errors""io""os" )// CopyFile 使用io.Copy进行文件的复制&#xff0c;同时也会复制文件的所有权限 // param src 复制文件 // param des 目标文件 // return error 错误信息 func CopyFile(s…

MacOS安装Docker-Compose

方法一 按照百度的方法进行安装&#xff0c;我大致复制一下百度的方法 1.确保您已经安装了Docker Desktop。 2.下载Docker Compose二进制文件。 3.将二进制文件移动到/usr/local/bin目录。 4.更改二进制文件的权限&#xff0c;使其可执行。 以下是具体的命令&#xff1a;…

LiveGBS流媒体平台GB/T28181用户手册-用户管理:添加用户、编辑、关联通道、搜索、重置密码

LiveGBS流媒体平台GB/T28181用户手册-用户管理:添加用户、编辑、关联通道、搜索、重置密码 1、用户管理1.1、添加用户1.2、编辑用户1.3、关联通道1.4、重置密码1.5、搜索1.6、删除 2、搭建GB28181视频直播平台 1、用户管理 1.1、添加用户 添加用户&#xff0c;可以配置登陆用户…

git 无法下载UE5源码问题

最近做镜像&#xff0c;突然遇到这个问题。 无法下载&#xff0c;应该如何解决呢&#xff1f; 1.首先 跳过htts ssl验证 2&#xff0c;设置更大的缓冲区 结果还是这个问题&#xff1a;

鹏特资本进入中国市场具有以下一些优势

1. 带来资金&#xff1a;补充国内资金缺口&#xff0c;为企业发展和项目建设提供重要的资金支持。 2. 先进技术和管理经验&#xff1a;有助于推动技术创新和管理水平提升&#xff0c;促进产业升级和优化。 3. 促进竞争&#xff1a;激发国内市场活力&#xff0c;促使本土企业不…

【调和级数】100321. 优质数对的总数 II

本文涉及知识点 调和级数 质数、最大公约数、菲蜀定理 LeetCode100321. 优质数对的总数 II 给你两个整数数组 nums1 和 nums2&#xff0c;长度分别为 n 和 m。同时给你一个正整数 k。 如果 nums1[i] 可以被 nums2[j] * k 整除&#xff0c;则称数对 (i, j) 为 优质数对&#…

网络模型-路由策略

一、路由策略 路由策略(Routing Policy)作用于路由&#xff0c;主要实现了路由过滤和路由属性设置等功能&#xff0c;它通过改变路由属性(包括可达性)来改变网络流量所经过的路径。目的:设备在发布、接收和引入路由信息时&#xff0c;根据实际组网需要实施一些策略&#xff0c…

什么是聚簇索引和非聚簇索引,如何理解回表、索引下推

聚簇索引&#xff08;Clustered Index&#xff09;和非聚簇索引&#xff08;Non-clustered Index&#xff09;是数据库中的两种索引类型&#xff0c;它们在组织和存储数据时有不同的方式。 聚簇索引 聚簇索引简单理解就是将数据与索引放在一起&#xff0c;找到索引即找到了数…

当AWR1843发送完设置的固定帧后,如何使其再发送第一次的帧?

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

Qt 界面上字体自适应控件大小 - 随控件缩放

Qt 界面上字体自适应控件大小 - 随控件缩放 引言一、设计思路二、进阶版大致思路三、参考链接 引言 Qt控件自适应字体大小可以用adjustSize()函数&#xff0c;但字体自适应控件大小并没有现成的函数可调. - 本文实现了按钮上的字体随按钮大小变化而变化 (如上图所示) - 其他控件…

[CISCN2024]-PWN:gostack解析(go语言程序,syscall)

查看保护 ida比较复杂&#xff0c;建议动调配合静态分析程序运行 这里函数返回不用leave和ret&#xff0c;而是利用add rsp和ret&#xff0c;所以要动调查看到底要覆盖哪里。 完整exp&#xff1a; from pwn import* pprocess(./gostack) syscall0x4616c9 pop_rax0x40f984 po…

电子电器架构 - AUTOSAR ON THE AIR

电子电器架构 - AUTOSAR ON THE AIR 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己…

C# 控制台应用模板可生成顶级语句

C# 控制台应用模板可生成顶级语句 项目2024/01/0810 个参与者 反馈 本文内容 使用新的程序样式隐式 using 指令全局 using 指令使用旧程序样式 从 .NET 6 开始&#xff0c;新 C# 控制台应用的项目模板在 Program.cs 文件中生成以下代码&#xff1a; C#复制 // See https…

C语言基础(六)

C语言基础 指针与一维数组总结 * p、* (p)、&#xff08;\*p&#xff09;、* p、*(p)、*p区别和用法运算优先级p与p区别*p与 *&#xff08;p&#xff09;与&#xff08;*p&#xff09;*p与 *&#xff08;p&#xff09;与 *p 指针常量与一维数组的关系指针变量与一维数组的关系数…

基于FIDO2和USBKEY硬件的SSH认证

在 8.2&#xff08;最新为 8.3&#xff09;版本中&#xff0c;OpenSSH 提供了对 FIDO 和 UAF 的支持。从此用户就可以用硬件 USBKEY 证书进行 SSH 原生认证。这样可以实现简捷、有效和安全的 SSH 认证。本文我们就就少一下 FIDO2 以及 OpenSSH 对其的支持&#xff0c;并尝试一下…

十大排序 —— 冒泡排序

十大排序 —— 冒泡排序 什么是冒泡排序基本步骤特点 优化冒泡的各项性能时间复杂度空间复杂度稳定性总结 我们今天来讲一个大家熟悉的老朋友——冒泡排序&#xff1a; 什么是冒泡排序 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法&#xff0c;因其工作…