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

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

一、引言

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

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

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

  在探索波士顿房价的预测问题时,我们首先需要做的是收集相关的数据集,并对数据进行清洗和初步的可视化分析。以下,我们将详细介绍这一过程,并使用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(低收入人口的百分比)与房价之间存在强烈的负相关关系,这表明低收入人群的比例越高,房价越低。
  进一步地,箱线图帮助我们识别了数据中的异常值。这些异常值可能是由于数据录入错误、测量误差或其他未知因素造成的。在房价预测模型中,异常值可能会导致模型性能下降,因此,在模型训练之前,我们通常需要对这些异常值进行处理。
  此外,我们还通过分布图(如直方图和密度图)了解了特征的分布形态。例如,一些特征可能呈现出正态分布,而另一些特征则可能呈现出偏态分布或双峰分布。这些分布信息对于选择合适的预测模型和参数调整至关重要。

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

五、结论与展望

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

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

六、附录

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AtCoder Regular Contest 178 A~D

A.Good Permutation 2&#xff08;贪心&#xff09; 题意&#xff1a; 给你一个正整数 N N N和一个由 M M M个正整数 A ( A 1 , A 2 , … , A M ) A(A_{1},A_{2}, \dots,A_{M}) A(A1​,A2​,…,AM​)组成的序列。 在这里&#xff0c; A A A的所有元素都是介于 1 1 1和 N N …

胶原蛋白三肽能否深入皮肤?一场关于美丽的科学之旅

在追求美丽的道路上&#xff0c;我们总是对各种护肤成分充满好奇。今天&#xff0c;就让我们一起探讨一个热门话题——胶原蛋白三肽&#xff0c;它究竟能否深入我们的皮肤&#xff0c;为我们带来期待中的美丽改变呢&#xff1f; 首先&#xff0c;我们需要了解胶原蛋白肽是什么…

【编译原理复习笔记】中间语言

中间语言 中间语言的特点和作用 &#xff08;1&#xff09;独立于机器 &#xff08;2&#xff09;复杂性介于源语言和目标语言之间 中间语言可以使编译程序的结构在逻辑上更为简单明确 常用的中间语言 后缀式 图表示&#xff1a;抽象语法树&#xff0c;有向无环图 三地址代…

css卡片翻转 父元素翻转子元素不翻转效果

css卡片翻转 父元素翻转子元素不翻转效果 vue <div class"moduleBox"><div class"headTitle"><span class"headName">大额案例</span></div><div class"moduleItem"><span class"module…

时间(空间)复杂度(结构篇)

目录 前言&#xff1a; 一、时间复杂度 1.1 时间复杂度的定义 1.2 时间复杂度的分析 表示方法&#xff1a; 1.3 常见的时间复杂度 1.4 时间复杂度的计算以及简单的分析 冒泡排序 折半查找&#xff08;二分查找&#xff09; 斐波那契数列&#xff08;递归&#xff09…

手把手教学,一站式教你实现服务器(Ubuntu)Anaconda多用户共享

背景&#xff1a;书接上回&#xff0c;一站式安装Ubuntu及配置服务器手把手教学&#xff0c;一站式安装ubuntu及配置服务器-CSDN博客 在安装及配置好服务器后&#xff0c;因为课题组可能涉及多个用户共用一台服务器&#xff0c;为了防止服务器上代码误删和Anaconda环境管理混乱…

爽!AI手绘变插画,接单赚爆了!

我最近发现一款名叫Hyper-SD15-Scribble的AI项目&#xff0c;可以实现一键手绘变插画的功能&#xff0c;而且它搭载了字节出品的超快速生成图片的AI大模型Hyper-SD15&#xff0c;可以实现几乎实时生成图片&#xff0c;有了它&#xff0c;拿去接一些手绘商单分分钟出图&#xff…

安卓手机电脑平板均支持

最近随着人工智能的火热&#xff0c;越来越多人问我怎么设置&#xff0c;我这边主要提供简单的配置&#xff0c;能够实现想要的功能&#xff0c;不懂得的友友们可以私聊我&#xff0c;

MyBatis详细教程!!(入门版)

目录 什么是MyBatis&#xff1f; MyBatis入门 1&#xff09;创建工程 2&#xff09;数据准备 3&#xff09;配置数据库连接字符串 4&#xff09;写持久层代码 5&#xff09;生成测试类 MyBatis打印日志 传递参数 MyBatis的增、删、改 增&#xff08;Insert&#xff0…

鸿蒙 DevEco Studio 3.1 Release 下载sdk报错的解决办法

鸿蒙 解决下载SDK报错的解决方法 最近在学习鸿蒙开发&#xff0c;以后也会记录一些关于鸿蒙相关的问题和解决方法&#xff0c;希望能帮助到大家。 总的来说一般有下面这样的报错 报错一&#xff1a; Components to install: - ArkTS 3.2.12.5 - System-image-phone 3.1.0.3…

Django-auth组件

Django-auth组件 1 表结构 我们从python manage.py migrate为我们创建的auth组件内置的表开始看 auth_user&#xff1a;用户表存储用户信息&#xff08;登录admin后台&#xff09; 里面的字段分两类&#xff1a;用户基本信息&#xff08;用户名&#xff0c;邮箱&#xff0c;密…

【线程的互斥】

线程的互斥 临界区资源多个线程的运行多个线程对同一资源的竞争原子性保持线程之间地互斥互斥量(锁的原理)为什么是原子的 正确使用锁 临界区资源 进程创建线程&#xff0c;是共享内存的&#xff0c;可以对共享的资源有很方便的操作&#xff0c;当一些共享资源可以被多个线程进…

【找出第 K 大的异或坐标值】python

4层循环暴力超时 class Solution:def kthLargestValue(self, matrix: List[List[int]], k: int) -> int:nums[]for a in range(len(matrix)):for b in range(len(matrix[0])):num0for i in range(a1):for j in range(b1):num^matrix[i][j]nums.append(num)nums.sort()retu…

Golang实现文件复制

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

【QGIS入门实战精品教程】10.7: 基于DEM的地形因子分析(坡度、坡向、粗糙度、山体阴影、耐用指数)

文章目录 一、加载dem二、山体阴影三、坡度四、坡向五、地形耐用指数六、地形位置指数七、地表粗糙度一、加载dem 二、山体阴影 方法一:符号系统 利用符号系统中的山体阴影,渲染出阴影效果。 方法二:山体阴影工具 该算法计算输入中的数字化地形模型的山体阴影。根据太阳的位…

2024年教你怎么将学浪视频保存到本地

你是否曾为无法将学浪视频保存到本地而烦恼&#xff1f;现在&#xff0c;我们将在2024年教给你如何解决这个问题&#xff01;只需简单几步操作&#xff0c;即可轻松将学浪视频保存到您的本地设备&#xff0c;随时随地想看就看&#xff01; 我已经将下载学浪的工具打包好了&…

OSPF网络类型实验2

对R4 对R5&#xff0c;找R1注册 对R1宣告环回&#xff0c;再宣告一下tunnel接口 本实验不考虑区域划分 现在已经全部宣告完成 对R1&#xff0c;2&#xff0c;3改接口 broadcast工作方式hello时间10s&#xff0c;然后进行dr选举&#xff0c;由于2&#xff0c;3之间没有伪广播 …

滑不动窗口的秘密—— “滑动窗口“算法 (Java版)

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人能接…