使用机器学习和深度学习技术预测股票价格

2023-11-03

介绍

预测股市的走势是最困难的事情之一。影响预测的因素很多 - 包括物理因素与心理因素,理性行为和非理性行为等。所有这些因素结合在一起共同导致股价波动,很难以高精度预测。

我们是否可以将机器学习作为该领域的游戏规则改变者吗?利用一些特性,比如关于一个组织的最新公告,他们的季度收入结果等功能,机器学习技术有可能发掘出我们以前没有看到的模式和见解,并且可以用来做出准确无误的预测。

在本文中,我们将使用有关上市公司股票价格的历史数据。我们将使用多种机器学习算法来预测该公司的未来股票价格,从平均算法和线性回归等简单的算法开始,然后转向Auto ARIMA和LSTM等高级技术。

本文背后的核心思想是展示如何实现这些算法。我将简要介绍该技术并提供相关链接,以便在必要时了解这些概念。

问题描述

我们很快就会深入到本文的实现部分,但首先要确定我们要解决的问题。从广义上讲,股票市场分析分为两部分 - 基础分析和技术分析。

  • 基础分析是根据公司当前的商业环境和财务业绩分析公司未来的盈利能力。
  • 另一方面,技术分析包括阅读图表和使用统计数据来确定股票市场的趋势。

你可能已经猜到了,我们的重点将放在技术分析部分。我们将使用Quandl的数据集(你可以在这里查找各种股票的历史数据),对于这个特定的项目,我使用了“ 塔塔全球饮料 ” 的数据。是时候让我们动起来了!

注意:有关文章的数据集我将在文章最后放出

首先我们先加载数据集,定义问题的目标变量:

导入包

import pandas as pd
import numpy as np

在笔记本上绘图

import matplotlib.pyplot as plt
%matplotlib inline

设置图的大小

from matplotlib.pylab import rcParams
rcParams['figure.figsize'] = 20,10

规范数据

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler(feature_range=(0, 1))

读取文件

df = pd.read_csv('NSE-TATAGLOBAL(1).csv')

打印头部数据

df.head()

数据集中有多个变量 - date,open,high,low,last,close,totaltradequantity和turnover。

  • “ 开盘价(open)“和“收盘价(close)”列表示股票在特定日期交易的起始和最终价格。
  • 高(hight)、低(low)和最后(last)代表当天股票的最高,最低和最后价格。
  • 总交易数量(Total Trade Quantity)是当天买入或卖出的股票数量,而成交量(Lacs)是特定公司在特定日期的成交量。

另一个需要注意的重要事项是,市场在周末和公共假期关闭。再次注意上表,一些日期值缺失 - 2/10/201,6/10/201,7/10/201。在这些日期中,2号是法定假日,6号和7号是周末。

损益的计算通常由当天股票的收盘价确定,因此我们将收盘价视为目标变量。让我们绘制目标变量,以了解它在我们的数据中是如何形成的:

将索引设置为日期

df['Date'] = pd.to_datetime(df.Date,format='%Y-%m-%d')
df.index = df['Date']

画图

plt.figure(figsize=(16,8))
plt.plot(df['Close'], label='Close Price history')

!](http://upload-images.jianshu.io/upload_images/13825820-1713f7366318e2b4.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

在接下来的部分中,我们将探索这些变量,并使用不同的技术来预测股票的每日收盘价。

1.移动平均法

介绍

“平均”很容易成为我们日常生活中最常用的词汇之一。例如,计算平均分来确定整体性能,或者找出过去几天的平均温度以了解今天的温度 - 这些都是我们经常做的例行工作。因此,这是一个很好的起点,可以用于我们的数据集进行预测。

每天的预计收盘价将是一组先前观测值的平均值。我们将使用移动平均技术而不是使用简单平均值,该技术为每个预测使用最新的一组值。换句话说,对于每个后续步骤,在从集合中移除最老的观测值的同时考虑预测值。下面是一个简单的图形,可以帮助你更清晰地理解这一点。

我们将在我们的数据集上实现此技术。第一步是创建一个仅包含Date和Close price列的DataFrame,然后将其拆分为训练集和验证集以验证我们的预测。

Python代码

使用日期和目标变量创建dataframe

data = df.sort_index(ascending=True, axis=0)
new_data = pd.DataFrame(index=range(0,len(df)),columns=['Date', 'Close'])

for i in range(0,len(data)):
new_data['Date'][i] = data['Date'][i]
new_data['Close'][i] = data['Close'][i]

在将数据拆分为训练集和验证集时,我们不能使用随机拆分,因为这会破坏时间组件。所以这里我把去年的数据和之前四年的数据进行了验证。

分隔为训练集和验证集

train = new_data[:987]
valid = new_data[987:]

new_data.shape, train.shape, valid.shape
((1235, 2), (987, 2), (248, 2))

train['Date'].min(), train['Date'].max(), valid['Date'].min(), valid['Date'].max()

(Timestamp('2013-10-08 00:00:00'),
Timestamp('2017-10-06 00:00:00'),
Timestamp('2017-10-09 00:00:00'),
Timestamp('2018-10-08 00:00:00'))

下一步是为验证集创建预测,并使用实际值检查RMSE。

做出预测

preds = []
for i in range(0,248):
a = train['Close'][len(train)-248+i:].sum() + sum(preds)
b = a/248
preds.append(b)

结果

计算 rmse

rms=np.sqrt(np.mean(np.power((np.array(valid['Close'])-preds),2)))
rms

104.51415465984348

仅检查RMSE并不能帮助我们理解模型的执行方式。让我们把它形象化来获得更直观的理解。因此,这是预测值与实际值的关系图。

画图

valid['Predictions'] = 0
valid['Predictions'] = preds
plt.plot(train['Close'])
plt.plot(valid[['Close', 'Predictions']])

推论

RMSE值接近105,但结果不是很有希望(可以从图中看出)。预测值与验证集中的观测值具有相同的范围(最初存在增加趋势,然后缓慢减小)。

在下一节中,我们将介绍两种常用的机器学习技术 - 线性回归和kNN,并了解它们在我们股票市场数据上的表现。

2.线性回归

介绍

可以在此数据上实现的最基本的机器学习算法是线性回归。线性回归模型返回一个确定自变量和因变量之间关系的方程。

线性回归的方程可以写成:

这里,x1,x2,... .Xň代表独立变量,而系数θ1,θ2,...θÑ表示的权重。

对于我们的问题描述,我们没有一组自变量。我们只有日期而已。让我们使用日期列来提取诸如 - 日,月,年,星期一/星期五等特征,然后拟合线性回归模型。

Python代码

我们将首先按升序对数据集进行排序,然后创建一个单独的数据集,以便创建的任何新要素都不会影响原始数据。

将索引设置为日期值

df['Date'] = pd.to_datetime(df.Date,format='%Y-%m-%d')
df.index = df['Date']

排序

data = df.sort_index(ascending=True, axis=0)

创建单独的数据集

new_data = pd.DataFrame(index=range(0,len(df)),columns=['Date', 'Close'])

for i in range(0,len(data)):
new_data['Date'][i] = data['Date'][i]
new_data['Close'][i] = data['Close'][i]

创建功能

from fastai.structured import add_datepart
add_datepart(new_data, 'Date')
new_data.drop('Elapsed', axis=1, inplace=True) #elapsed will be the time stamp

这会创建以下特征:

‘Year’, ‘Month’, ‘Week’, ‘Day’, ‘Dayofweek’, ‘Dayofyear’, ‘Ismonthend’, ‘Ismonthstart’, ‘Isquarterend’, ‘Isquarterstart’, ‘Isyearend’, and ‘Isyearstart’.

注意:我使用了fastai库中的add_datepart。如果你没有安装它,只需使用命令pip install fastai。或者,你可以在python中使用简单的for循环创建这个功能。我在下面展示了一个例子。

除此之外,我们可以添加我们自己认为与预测相关的特征。例如,我的假设是,本周的第一天和最后一天可能会影响股票的收盘价,并且远远超过其他日子。所以我创建了一个特征,可以确定某一天是周一/周五还是周二/周三/周四。这可以使用以下的代码行完成:

new_data['mon_fri'] = 0
for i in range(0,len(new_data)):
if (new_data['Dayofweek'][i] == 0 or new_data['Dayofweek'][i] == 4):
new_data['mon_fri'][i] = 1
else:
new_data['mon_fri'][i] = 0

如果星期几等于0或4,则列值将为1,否则为0。同样的,你可以创建多个特征。如果你对可以帮助预测股票价格的功能有一些想法,请在评论区分享。

我们现在将数据拆分为训练集和验证集,以检查模型的性能。

拆分为训练集与验证集

train = new_data[:987]
valid = new_data[987:]

x_train = train.drop('Close', axis=1)
y_train = train['Close']
x_valid = valid.drop('Close', axis=1)
y_valid = valid['Close']

实现线性回归

from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(x_train,y_train)

结果

做出预测并找rmse

preds = model.predict(x_valid)
rms=np.sqrt(np.mean(np.power((np.array(y_valid)-np.array(preds)),2)))
rms

121.16291596523156

RMSE值高于之前的技术,这清楚地表明线性回归表现不佳。让我们看一下图表,并理解为什么线性回归做的不好:

画图

valid['Predictions'] = 0
valid['Predictions'] = preds

valid.index = new_data[987:].index
train.index = new_data[:987].index

plt.plot(train['Close'])
plt.plot(valid[['Close', 'Predictions']])

推论

线性回归是一种简单的技术,并且很容易解释,但有一些明显的缺点。使用回归算法的一个问题是模型与日期列和月份列过度匹配。模型将考虑一个月前的同一日期或一年前的同一日期/月的值,而不是从预测的角度考虑以前的值。

从上图可以看出,2016年1月和2017年1月,股价出现下跌。该模型已预测2018年1月的情况相同。线性回归技术可以很好地解决诸如大型超市的销售问题,在这些问题中独立特征对于确定目标值是有用的。

3.K-近邻

介绍

这里可以使用的另一个有趣的ML算法是KNN(K近邻)。KNN基于自变量找到新数据点和旧数据点之间的相似性。让我用一个简单的例子解释一下。

考虑11个人的身高和年龄。根据给定的特征('年龄Age'和'身高Height'),表格可以用图形格式表示,如下所示:

为了确定ID#11的权重,K-NN考虑该ID的最近邻的权重。ID#11的权重预计是其邻居的平均值。如果我们现在考虑三个邻居(k = 3),ID#11的权重将是=(77 + 72 + 60)/ 3 = 69.66千克。

PYthon代码

导入库

from sklearn import neighbors
from sklearn.model_selection import GridSearchCV
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler(feature_range=(0, 1))

使用上一节中相同的训练集和验证集:

尺度数据

x_train_scaled = scaler.fit_transform(x_train)
x_train = pd.DataFrame(x_train_scaled)
x_valid_scaled = scaler.fit_transform(x_valid)
x_valid = pd.DataFrame(x_valid_scaled)

使用gridsearch查找最佳参数

params = {'n_neighbors':[2,3,4,5,6,7,8,9]}
knn = neighbors.KNeighborsRegressor()
model = GridSearchCV(knn, params, cv=5)

拟合模型并做出预测

model.fit(x_train,y_train)
preds = model.predict(x_valid)

结果

查看RMSe值

rms=np.sqrt(np.mean(np.power((np.array(y_valid)-np.array(preds)),2)))
rms

115.17086550026721

RMSE值没有太大差异,但预测值和实际值的图应提供一个更清晰的理解。

画图

valid['Predictions'] = 0
valid['Predictions'] = preds
plt.plot(valid[['Close', 'Predictions']])
plt.plot(train['Close'])

推论

RMSE值几乎与线性回归模型类似,并且图表也显示了相同的模式。与线性回归一样,KNN也确定了2018年1月的下降,因为这是过去几年的形式。我们可以有把握地说,回归算法在这个数据集上表现不佳。

让我们继续看看一些时间序列预测技术,以了解它们在面对股票价格预测挑战时的表现。

4.Auto ARIMA

介绍

ARIMA是一种非常流行的时间序列预测统计方法。ARIMA模型考虑了过去的值来预测未来的价值。ARIMA有三个重要参数:

  • p(用于预测下一个值的过去值)
  • q(用于预测未来值的过去预测误差)
  • d(差分的顺序)

ARIMA的参数调整会消耗大量时间。因此,我们将使用auto ARIMA,它自动选择(p,q,d)提供最小错误的的最佳组合。

Python代码

from pyramid.arima import auto_arima

data = df.sort_index(ascending=True, axis=0)

train = data[:987]
valid = data[987:]

training = train['Close']
validation = valid['Close']

model = auto_arima(training, start_p=1, start_q=1,max_p=3, max_q=3, m=12,start_P=0, seasonal=True,d=1, D=1, trace=True,error_action='ignore',suppress_warnings=True)
model.fit(training)

forecast = model.predict(n_periods=248)
forecast = pd.DataFrame(forecast,index = valid.index,columns=['Prediction'])

结果

rms=np.sqrt(np.mean(np.power((np.array(valid['Close'])-np.array(forecast['Prediction'])),2)))
rms

44.954584993246954

画图

plt.plot(火车[ '关闭'])
plt.plot(有效[ '关闭'])
plt.plot(预测[ '预测'])

推论

如前所述,auto ARIMA模型使用过去的数据来理解时间序列中的模式。使用这些值,模型获得了该系列中的增长趋势。虽然使用这种技术的预测远比先前实现的机器学习模型的预测好,但这些预测仍然没有接近实际值。

从图中可以看出,该模型已经捕捉到了该系列中的一个趋势,但并没有关注季节性部分。在下一节中,我们将实现一个时间序列模型,而这个模型考虑了系列的趋势和季节性。

5.Prophet

介绍

有许多时间序列技术可以在股票预测数据集上实现,但是大多数这些技术在拟合模型之前需要大量的数据预处理。由Facebook设计和开创的Prophet是一个时间序列预测库,它不需要数据预处理,实现起来也非常简单。Prophet的输入是一个包含两列的数据框:date和target(ds和y)。

Prophet试图获取过去数据中的季节性,并在数据集很大时可以进行很好的工作。

Python代码

导入 prophet

from fbprophet import Prophet

创建 dataframe

new_data = pd.DataFrame(index=range(0,len(df)),columns=['Date', 'Close'])

for i in range(0,len(data)):
new_data['Date'][i] = data['Date'][i]
new_data['Close'][i] = data['Close'][i]

new_data['Date'] = pd.to_datetime(new_data.Date,format='%Y-%m-%d')
new_data.index = new_data['Date']

准备数据

new_data.rename(columns={'Close': 'y', 'Date': 'ds'}, inplace=True)

训练和验证

train = new_data[:987]
valid = new_data[987:]

使用合适的模型

model = Prophet()
model.fit(train)

预测

close_prices = model.make_future_dataframe(periods=len(valid))
forecast = model.predict(close_prices)

结果

查看rmse

forecast_valid = forecast['yhat'][987:]
rms=np.sqrt(np.mean(np.power((np.array(valid['y'])-np.array(forecast_valid)),2)))
rms

57.494461930575149

画图

valid['Predictions'] = 0
valid['Predictions'] = forecast_valid.values

plt.plot(train['y'])
plt.plot(valid[['y', 'Predictions']])

推论

Prophet(与大多数时间序列预测技术一样)试图从过去的数据中获取趋势性和季节性。此模型通常在时间序列数据集上表现良好,但在这种情况下无法达到它的名誉。

事实证明,股票价格没有特定的趋势性或季节性。它在很大程度上取决于市场目前的情况,从而价格会上涨和下跌。因此,像ARIMA,SARIMA和Prophet这样的预测技术对于这个特定问题不会显示出良好的结果。

让我们继续尝试另一种先进技术 - 长短时记忆(LSTM)。

6.长短时记忆(LSTM)

介绍

LSTM广泛用于序列预测问题,并且已被证明是非常有效的。他们非常有效的原因是因为LSTM能够存储过去重要的信息,并忘记不重要的信息。LSTM有三个门:

  • 输入门:输入门将信息添加到单元格状态
  • 遗忘门:它删除模型不再需要的信息
  • 输出门: LSTM的输出门选择要显示为输出的信息

现在,让我们将LSTM实现为一个黑盒子,并检查它在我们的特定数据上的性能。

Python代码

导入所需要的库

from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import Dense, Dropout, LSTM

创建dataframe

data = df.sort_index(ascending=True, axis=0)
new_data = pd.DataFrame(index=range(0,len(df)),columns=['Date', 'Close'])
for i in range(0,len(data)):
new_data['Date'][i] = data['Date'][i]
new_data['Close'][i] = data['Close'][i]

设置索引

new_data.index = new_data.Date
new_data.drop('Date', axis=1, inplace=True)

创建训练集和测试集

dataset = new_data.values

train = dataset[0:987,:]
valid = dataset[987:,:]

将数据集转换为X列和Y列

scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(dataset)

x_train, y_train = [], []
for i in range(60,len(train)):
x_train.append(scaled_data[i-60:i,0])
y_train.append(scaled_data[i,0])
x_train, y_train = np.array(x_train), np.array(y_train)

x_train = np.reshape(x_train, (x_train.shape[0],x_train.shape[1],1))

创建并使用LSTM网络

model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(x_train.shape[1],1)))
model.add(LSTM(units=50))
model.add(Dense(1))

model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(x_train, y_train, epochs=1, batch_size=1, verbose=2)

使用训练集中的过去的60个值预测246个值

inputs = new_data[len(new_data) - len(valid) - 60:].values
inputs = inputs.reshape(-1,1)
inputs = scaler.transform(inputs)

X_test = []
for i in range(60,inputs.shape[0]):
X_test.append(inputs[i-60:i,0])
X_test = np.array(X_test)

X_test = np.reshape(X_test, (X_test.shape[0],X_test.shape[1],1))
closing_price = model.predict(X_test)
closing_price = scaler.inverse_transform(closing_price)

结果

rms=np.sqrt(np.mean(np.power((valid-closing_price),2)))
rms

11.772259608962642

画图

train = new_data[:987]
valid = new_data[987:]
valid['Predictions'] = closing_price
plt.plot(train['Close'])
plt.plot(valid[['Close','Predictions']])

推论

LSTM模型可以根据不同的参数进行调整,例如改变LSTM层的数量,添加dropout值或增加epoch的数量。但LSTM的预测是否足以确定股价是涨还是降?当然不是!

正如我在文章开头提到的那样,股票价格受到有关公司的新闻以及其他因素的影响,如公司的非货币化或合并/分拆。还有一些无形因素,往往是事先无法预测的。

结束笔记

时间序列预测是一个非常有趣的领域,正如我在撰写这些文章时所认识到的那样。在社区中有一种看法,认为它是一个非常复杂的领域,虽然有些的确比较复杂,但是一旦掌握了基本技术,也就不那么困难了。

本文作者使用了六种方法来进行了对股票涨跌的预测,并从结果中分析了每个算法用于时间序列模型的优劣,并且从图中可以看出LSTM方法是拟合最好的一种方法,但是股票市场需要考虑的因素有很多,并不是只需要几个关键的特征就可以预测的,我们可以根据以前的数据,对算法进行验证,但使用算法去预测未来的股票的涨跌,还是有一些风险的,所以还是要谨慎的去使用这些算法。至少现在没有一种算法可以百分之百的去预测未来股票的时间序列模型算法,还是先暂时的用算法去不断的训练,直到未来技术成熟的一天。

Stock Prices Prediction Using Machine Learning and Deep Learning Techniques (with Python codes)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用机器学习和深度学习技术预测股票价格 的相关文章

  • 密码学基础

    密码学基本概念 密码学 Cryptology 是结合数学 计算机科学 电子与通信等学科于一体的交叉学科 研究信息系统安全的科学 起源于保密通信技术 具体来讲 研究信息系统安全保密和认证的一门科学 密码编码学 通过变换消息 对信息编码 使其保
  • 微信小程序上线流程

    1 登陆小程序后台 登陆地址 https mp weixin qq com 2 将项目中测试appid换成正式appid 正式appid 小程序后台 gt 开发管理 gt 开发设置 测试appid 小程序开发工具 gt 右侧详情 gt 基本
  • 软件系统概要设计的三大要素

    概要设计是一个设计师根据用户交互过程和用户需求来形成交互框架和视觉框架的过程 其结果往往以反映交互控件布置 界面元素分组以及界面整体板式的页面框架图的形式来呈现 这是一个在用户研究和设计之间架起桥梁 使用户研究和设计无缝结合 将对用户目标与
  • Python反编译exe文件为py文件

    目的如标题 首先要安装python环境 1 下载pyinstxtractor py文件 地址 链接 https pan baidu com s 1PwQim8B8yau5 MWgKzTKeg pwd 2023 提取码 2023 2 将pyi
  • linux-三剑客(sed、awk、grep)

    三剑客sed awk grep 三剑客与正则表达式是什么关系呢 正则表达式 grep 文本过滤工具 sed 操作 过滤和转换文本内容的强大工具 组合多个表达式 引用 定界符 命令中字符 在sed中作为定界符使用 也可以使用任意的定界符 se
  • 小程序canvas上绘制图片真机不显示

    小程序在画布上绘制图片时真机不显示 分析 小程序的画布不能绘制网络图片 所以需要wx downloadFile 或者wx getImageInfo 方法把网络图片加载到本地再进行绘制 使用wx downloadFile获取到图片的临时路径
  • wireshark 抓取 https

    背景介绍 首先 https双向加密的 如果需要解密数据 除非知道 客户端 服务器 任何一方私钥 否则无法解密 常用手段 基于中间人攻击抓包 使用fiddler 或 charles 实现的是中间人代理 将客户端私钥改为 fiddler 或 c
  • Roslyn介绍

    介绍 一般来说 编译器是一个黑箱 源代码从一端进入 然后箱子中发生一些奇妙的变化 最后从另一端出来目标文件或程序集 编译器施展它们的魔法 它们必须对所处理的代码进行深入的理解 不过相关知识不是每个人都需要知道 除了实现编译器的大法师 因此在
  • 李宏毅机器学习:self-attention(自注意力机制)和transformer及其变形

    目录 self attention self attention的输入 文字处理领域 语音领域 图 自注意力机制的输出 输出序列长度与输入序列相同 输出序列长度为1 模型决定输出序列长度 Self attention 原理 self att
  • codeforces Epic Game 题解

    Simon and Antisimon play a game Initially each player receives one fixed positive integer that doesn t change throughout
  • MOT学习 - 卡尔曼滤波

    参考资料 https www bzarg com p how a kalman filter works in pictures 协方差矩阵 https youzipi blog csdn net article details 48788
  • 关于Qt和C++中的反射机制实现与运用(2)

    看到一个很好的实例 这里就转载过来了 原文地址 C 反射机制 一 前言 Java有着一个非常突出的动态相关机制 Reflection 用在Java身上指的是我们可以于运行时加载 探知 使用编译期间完全未知的classes 换句话说 Java
  • Springboot+Vue前后端分离实现token登录验证和状态保存

    token可用于登录验证和权限管理 大致步骤分为 前端登录 post用户名和密码到后端 后端验证用户名和密码 若通过 生成一个token返回给前端 前端拿到token用vuex和localStorage管理 登录成功进入首页 之后前端每一次
  • 从放弃到再入门之拉格朗日对偶问题推导

    https blog csdn net qq 34564612 article details 79974635
  • 【第19篇】SSD论文翻译和代码汇总

    文章目录 摘要 1 简介 2 单次检测器 SSD 2 1 模型 2 2 训练 3 实验结果 3 1 PASCAL VOC2007 3 2 模型分析 3 3 PASCAL VOC2012 3 4 COCO 3 5 初步的ILSVRC结果 3
  • 2021-07-08

    阿里DevOps发布策略简介 前言 DevOps追求更短的迭代周期 更高频的发布 但发布的次数越多 引入故障的可能性就越大 更多的故障将会降低服务的可用性 进而影响到客户体验 所以 为了保证服务质量 守好发布这个最后一道关 阿里逐步发展出了
  • Vue3+Element-Plus中的Tree组件,多选时的赋值与取值

    el tree 是 element ui 提供的一个树形组件 可以在 Vue js 应用中使用 el tree 组件提供了 getCheckedNodes 方法 可以用来获取树形结构中被选中的节点
  • C/C++混合编程编译问题

    以下为本实验使用的编译器版本 系统环境为 目的 搞清以下几个问题 1 g 能否编译c文件 2 g 编出的s文件和gcc编出来的有何异同 3 cplusplus宏在何时被定义 4 c调用c 的注意事项 5 c 调用c的注意事项 6 针对上述问
  • js检测是否为数组的方法-JavaScript学习笔记

    1 方法一 instanceof 运算符 它可以用来检测是否为数组 代码 var arr var obj console log arr instanceof Array true console log obj instanceof Ar
  • Spring Boot 学习研究笔记(九) - Spring Data JPA常用注解

    Spring Data JPA 常用注解详细说明 1 Entity Entity 说明这个class 是实体类 并且使用默认的orm 规则 即 class 名对应数据库表中的表明 class 字段名即表中的字段名 如果想要改变这种默认的or

随机推荐

  • shell之多分支if语句

    1 语法格式 if 条件测试1 then 命令序列1 elif 条件测试2 then 命令序列2 elif 条件测试3 then 命令序列3 else 命令序列n fi 2 吃鸡段位排行 bin bash Author hejing Dat
  • 蓝牙硬件设备没有链接到计算机,电脑未发现蓝牙硬件设备怎么办

    有时我们想连接蓝牙硬件设备 却发现找不到了 没发现 怎么办 下面是学习啦小编为大家介绍电脑未发现蓝牙硬件设备的解决方法 欢迎大家阅读 电脑未发现蓝牙硬件设备的解决方法 首先我们在桌面找到 我的电脑 当然如果是WIN7 WIN8等系统以上的电
  • Postman 中文汉化界面

    参考 大佬的Gitee地址 gitee地址
  • GateWay 中StripPrefix的作用

    StripPrefix网关过滤器工厂采用一个参数StripPrefix StripPrefix参数表示在将请求发送到下游之前从请求中剥离的路径个数 spring cloud gateway routes id crm uri http cr
  • [1068]启动hdfs时,报错 Canary 测试无法在目录 /tmp/.cloudera_health_monitoring_canary_files 中创建文件

    启动hdfs时 报错 Canary 测试无法在目录 tmp cloudera health monitoring canary files 中创建文件 经过查看日志 发现 Name node is in safe mode 解决方法 sud
  • python练习10

    活动 10 while 循环的应用实例 一 程序示例 问 题 编程实现 猜数游戏 在给定某数后 让用户进行猜测并输入数 计算机给出相应提示 如偏大 偏小或正 确 若所猜测的数正确 则输出猜测次数 否则继续猜数 设计算法 初始 给定数 num
  • logback最详细配置讲解,及命名规范

    介绍 logback是一款日志框架 这个就不详细赘述了 命名规范 一般来说logback的配置文件可以命名为logback xml 项目启动时就可以读取到里面的配置 但是在spring boot项目中 这样会有一点问题 因为logback
  • 通过Docker方式安装海思Hi3516EV200交叉编译工具arm-himix100-linux

    前言 安装交叉编译环境 繁琐 耗时间 还得解决ubuntu版本不同 导致的各种错误 docker很好的解决了 不同版本 不同系统之间的差异性的问题 DOPI制作了docker方式的交叉编译环境 工作环境 vmare安装的ubuntu18 0
  • 实现前端项目自动化部署(webpack+nodejs)

    前言 一般来说 我们前端是不需要关心部署的事情的 只需要把打包后的文件直接丢给后台去部署就可以了 但是呢 如果频繁修改一点东西就要叫后台进行部署 这样后台会很烦 毕竟人家还有其他工作嘛 我们也会很不好意思 或许有些公司会给前端配置可视化操作
  • 静态时序分析——基础概念

    一 简述 静态时序分析是检查系统时序是否满足要求的主要手段 以往时序的验证依赖于仿真 采用仿真的方法 覆盖率跟所施加的激励有关 有些时序违例会被忽略 此外 仿真方法效率非常的低 会大大延长产品的开发周期 静态时序分析工具很好地解决了这两个问
  • Java的冒泡排序方法

    废话不多说 直接上代码 看不懂的话可以看注释 在这里插入代码片 public static void bubbleSort int arr 标志位 标志是否进行交换 boolean flag false for int i 0 i lt a
  • java 双列集合Map 万字详解

    目录 一 前言 二 概述 三 特点 四 常用方法 1 V put K key V value 代码演示 2 V get Object key 代码演示 3 V remove Object key 代码演示 4 int size 代码演示 5
  • excel两个指标相关性分析_指数相关性如何计算?

    且慢上长赢指数计划中有个指标叫相关性 这是统计学概念 主要看两个数列之间的相关程度 用在指数投资上 用作分散参照 如果两只指数的相关性越高 说明指数走势高度相似 涨的时候都涨 跌的时候都跌 起不到平衡或者分散风险的目的 因而 在投资时 尽量
  • 力扣 - 106、从中序与后序遍历序列构造二叉树

    题目 根据一棵树的中序遍历与后序遍历构造二叉树 注意 你可以假设树中没有重复的元素 例如 给出 中序遍历 inorder 9 3 15 20 7 后序遍历 postorder 9 15 7 20 3 返回如下的二叉树 3 9 20 15 7
  • 活锁和饥饿

    活锁 活锁本质上不是锁 是互相干扰导致线程无法跳出循环 比如 public class TestLiveLock static volatile int count 10 static final Object lock new Objec
  • SpringBoot 自定义注解(一)参数校验

    SpringBoot 2 3 0版本之后就没有引入validation对应的包 需要手动引用 依赖如下
  • ​JVM-调优参数归纳​

    本地线程分配缓冲 XX UseTLAB 把内存分配的动作按照线程划分在不同的空间之中进行 即每个线程在Java堆中预先分配一小块内存 通过 XX UseTLAB参数来设定虚拟机是否使用TLAB JVM会默认开启 XX UseTLAB XX
  • moviepy剪切视频&spleeter视频降噪-CPU&GPU

    文章目录 简介 安装spleeter 代码执行 简介 moviepy官方中文API spleeter官方github 本文视频降噪原理为使用spleeter提取出人声 仅将人声写回视频并保存 对于AudioClip和VideoClip使用完
  • 三分钟带你了解ES【详解版】

    1 ES是什么 Elasticsearch 是一个分布式的 RESTful 搜索和分析引擎 可用来集中存储您的数据 以便您对形形色色 规模不一的数据进行搜索 索引和分析 上面是 官网 API文档 对的定位描述 ES 是一个分布式的搜索引擎
  • 使用机器学习和深度学习技术预测股票价格

    介绍 预测股市的走势是最困难的事情之一 影响预测的因素很多 包括物理因素与心理因素 理性行为和非理性行为等 所有这些因素结合在一起共同导致股价波动 很难以高精度预测 我们是否可以将机器学习作为该领域的游戏规则改变者吗 利用一些特性 比如关于