当前位置: 首页 > news >正文

Python数据分析案例47——笔记本电脑价格影响因素分析

案例背景

博主对电脑的价格和配置一直略有研究,正好最近也有笔记本电脑相关的数据,想着来做点分析吧,写成一个案例。基本上描述性统计,画图,分组聚合,机器学习,交叉验证,搜索超参数那些。


数据介绍

这数据集室友给的,很像kaggle上的数据集,很规整,如下:

其中price是我们响应变量,其他都是X时特征变量。

需要该演示数据和全部代码文件的同学可以参考: 笔记本电脑


代码实现

数据分析四件套先导入:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt 
import seaborn as snsplt.rcParams ['font.sans-serif'] ='SimHei'               #显示中文
plt.rcParams ['axes.unicode_minus']=False               #显示负号

读取数据,展示前五行

df=pd.read_csv('laptop_data_cleaned.csv')
df.head()

查看数据基础信息

df.info()

可以看到大概是13个变量,1273条数据,数据量不是很大。

简单整理一下变量的类别和含义的关系:

查看非数值型变量的描述性统计:

df.select_dtypes(exclude=['int','float']).describe()

数值型变量的描述性统计

df.describe()

下面进行初步分析:


类别变量画图

我们首先查看不同类别的变量的数量分布

# Select non-numeric columns
non_numeric_columns = df[['Company', 'TypeName', 'TouchScreen',  'Os','Cpu_brand','Gpu_brand' ,  'Ram','HDD', 'SSD'] ].columns
f, axes = plt.subplots(3, 3, figsize=(10,10),dpi=128)
# Flatten axes for easy iterating
axes_flat = axes.flatten()
for i, column in enumerate(non_numeric_columns):if i < 9:  sns.countplot(x=column, data=df, ax=axes_flat[i])axes_flat[i].set_title(f'Count of {column}')for label in axes_flat[i].get_xticklabels():label.set_rotation(90)   #类别标签旋转一下,免得多了堆叠看不清# Hide any unused subplots
for j in range(i + 1, 9):f.delaxes(axes_flat[j])
plt.tight_layout()
plt.show()

公司: 大多数笔记本电脑来自戴尔、联想和惠普品牌。 微软、三星等品牌的笔记本电脑较少。

类型名称: 超极本和笔记本是最常见的类型。 游戏本、二合一本、可转换本和工作站类型较少。

触摸屏: 大多数笔记本电脑没有触摸屏。 只有一小部分具有触摸屏功能。

操作系统: Windows 是最普遍的操作系统。 少数笔记本电脑使用 Mac 或其他操作系统。

处理器品牌: 英特尔酷睿 i5 和英特尔酷睿 i7 是最常见的 CPU 品牌。 AMD 处理器和其他英特尔处理器不太常见。

Gpu的牌子: 英特尔和 Nvidia GPU 最常用。 AMD GPU 不太常见。

内存: 8GB 和 16GB 内存是最常见的配置。 配备 4GB 和 12GB 内存的笔记本电脑较少。

机械硬盘: 大多数笔记本电脑没有机械硬盘或机械硬盘容量较小(32GB)。 少数笔记本电脑的机械硬盘容量较大(128GB、500GB、1000GB、2000GB)。

固态硬盘: 最常见的固态硬盘容量为 256GB 和 512GB。 也有一些笔记本电脑配备 128GB 或更大容量的固态硬盘,最高可达 1024GB。

关键结论:

  • 数据表明,人们偏好某些品牌和配置,戴尔、联想和惠普是热门选择。
  • 超极本和笔记本是主流类型,这可能是由于它们的多功能性和市场需求。
  • Windows 操作系统比 Mac 和其他操作系统更受欢迎。
  • 英特尔 CPU(尤其是酷睿 i5 和 i7)在市场上占据主导地位,而 AMD 则不太常见。
  • 与 AMD 相比,Nvidia GPU 更受青睐。
  • 8GB 和 16GB 内存的趋势表明,这些内存被认为是性能最佳的内存。
  • 与硬盘相比,固态硬盘更受青睐,相当多的笔记本电脑采用 256GB 至 512GB 的固态硬盘。

数值型变量画图

画密度图

#画密度图,
num_columns = df[['Weight', 'Price','Ppi']].columns.tolist() # 列表头
dis_cols = 3                   #一行几个
dis_rows = len(num_columns)
plt.figure(figsize=(3 * dis_cols, 2 * dis_rows),dpi=256)for i in range(len(num_columns)):ax = plt.subplot(dis_rows, dis_cols, i+1)ax = sns.kdeplot(df[num_columns[i]], color="skyblue" ,fill=True)ax.set_xlabel(num_columns[i],fontsize = 14)
plt.tight_layout()
#plt.savefig('训练测试特征变量核密度图',formate='png',dpi=500)
plt.show()

价格分布很均匀,PPI和重量有一些极大的异常点。

  1. 重量(Weight)的核密度图

从图中可以看出,笔记本电脑的重量主要集中在1到2.5公斤之间。 约在1.5公斤左右有一个峰值,表示大部分笔记本电脑的重量集中在这个范围。 在2.5公斤左右还有一个较小的峰值,说明有一部分笔记本电脑重量较重。 重量超过3公斤的笔记本电脑非常少见。

  1. 价格(Price)的核密度图

从图中可以看出,笔记本电脑的价格主要集中在10到11之间。 图中有一个明显的峰值,表示大部分笔记本电脑的价格集中在这个范围内。 价格在9到10之间和11到12之间的分布较少,但仍然有一定的密度。 价格超过12的笔记本电脑非常少见。

  1. PPI(Ppi)的核密度图

从图中可以看出,笔记本电脑的PPI主要集中在100左右。 在100 PPI左右有一个明显的峰值,表示大部分笔记本电脑的PPI集中在这个范围内。 图中显示了一些更高的PPI值(超过200),但这些笔记本电脑的数量较少。 PPI在200以上的笔记本电脑密度极低,几乎可以忽略不计。

总结 笔记本电脑的重量主要集中在1到2.5公斤之间,重量超过3公斤的笔记本电脑非常少见。 笔记本电脑的价格主要集中在10到11之间,价格超过12的笔记本电脑非常少见。 笔记本电脑的PPI主要集中在100左右,超过200 PPI的笔记本电脑数量极少。

画箱线图:

### 箱线图 
plt.figure(figsize=(3 * dis_cols, 2.5 * dis_rows),dpi=128)
for i in range(len(num_columns)):plt.subplot(dis_rows,dis_cols,i+1)sns.boxplot(data=df[num_columns[i]], orient="v",width=0.5)plt.xlabel(num_columns[i],fontsize = 14)
plt.tight_layout()
#plt.savefig('特征变量箱线图',formate='png',dpi=500)
plt.show()

 不同变量之间的分析

联合不同变量的分布,因为基本是价格影响因素,所以我们都是根据不同的类别去分析价格,所以都是分组聚合计算价格,我们直接画图

不同 的Company、TypeName、Cpu_brand、Gpu_brand的价格分布情况:

fig, axes = plt.subplots(2, 2, figsize=(14, 10), dpi=128)# 绘制第一个子图的小提琴图
sns.violinplot(ax=axes[0, 0], x='Company', y='Price', data=df)
axes[0, 0].set_title('不同牌子的电脑价格分布')
axes[0, 0].set_xlabel('牌子')
axes[0, 0].set_ylabel('价格')
axes[0, 0].set_xticklabels(axes[0, 0].get_xticklabels(), rotation=90)# 绘制第二个子图的小提琴图
sns.violinplot(ax=axes[0, 1], x='TypeName', y='Price', data=df)
axes[0, 1].set_title('不同类型的电脑价格分布')
axes[0, 1].set_xlabel('类型')
axes[0, 1].set_ylabel('价格')
axes[0, 1].set_xticklabels(axes[0, 1].get_xticklabels(), rotation=90)# 绘制第三个子图的小提琴图
sns.violinplot(ax=axes[1, 0], x='Cpu_brand', y='Price', data=df)
axes[1, 0].set_title('不同CPU的电脑价格分布')
axes[1, 0].set_xlabel('CPU')
axes[1, 0].set_ylabel('价格')
axes[1, 0].set_xticklabels(axes[1, 0].get_xticklabels(), rotation=90)# 绘制第四个子图的小提琴图
sns.violinplot(ax=axes[1, 1], x='Gpu_brand', y='Price', data=df)
axes[1, 1].set_title('不同GPU的电脑价格分布')
axes[1, 1].set_xlabel('GPU')
axes[1, 1].set_ylabel('价格')
axes[1, 1].set_xticklabels(axes[1, 1].get_xticklabels(), rotation=90)# 调整子图之间的间距
plt.tight_layout()# 显示图形
plt.show()

1.不同品牌的电脑价格分布

该图展示了各个品牌的笔记本电脑价格分布情况。 从图中可以看出,Microsoft、LG、Apple等品牌的电脑价格普遍较高。 华为(Huawei)、小米(Xiaomi)等品牌的价格较为集中且偏低。 Dell和Lenovo的价格分布较广,表明它们的产品线覆盖了从低端到高端的多个价格区间。 部分品牌如Chuwi、Vero等价格分布范围较小,表明它们的产品种类可能较少或集中在某一价格区间。

2.不同类型的电脑价格分布

该图展示了不同类型笔记本电脑的价格分布情况。 2 in 1 Convertible(二合一的笔记本)和Ultrabook的价格普遍较高,尤其是Ultrabook,价格范围较大且中位数较高。 Netbook的价格最低且分布范围较窄,表明这类电脑价格较为统一,主要集中在低价区间。 Gaming(游戏本)的价格分布范围较大,说明有从中端到高端不同价格的产品。 Workstation(工作站)的价格也较高且分布范围广,反映出其高性能和专业用途的特点。

3.不同CPU品牌的电脑价格分布

该图展示了不同CPU品牌的笔记本电脑价格分布情况。 Intel Core i7的电脑价格最高且分布范围广,反映出其高性能带来的高价格。 AMD Processor的价格分布较低且范围较小,说明使用AMD处理器的笔记本电脑价格较为集中且偏低。 Intel Core i5的价格分布居中且范围适中,表明这类笔记本电脑覆盖了中端市场。 其他Intel Processor的价格分布范围较大,说明使用其他Intel处理器的笔记本电脑有不同的市场定位。

4.不同GPU品牌的电脑价格分布

该图展示了不同GPU品牌的笔记本电脑价格分布情况。 使用Intel GPU的笔记本电脑价格分布范围最广,覆盖了从低端到高端的多个价格区间。 使用Nvidia GPU的价格较高且分布集中,反映出其高性能和高价位的特点。 使用AMD GPU的价格分布较宽,说明其产品线覆盖了从中低端到高端不同价格的市场。 总体来看,不同品牌、类型、CPU品牌和GPU品牌的笔记本电脑在价格上都有较明显的分布特点,反映出市场上不同定位和需求的产品特征。这些分布图可以帮助消费者在选择笔记本电脑时,更好地了解不同产品的价格定位,从而做出更加符合自身需求的选择。


研究不同的 'TouchScreen', 'Ram','HDD', 'SSD' 下的价格

fig, axes = plt.subplots(2, 2, figsize=(14, 8), dpi=128)# 绘制 TouchScreen 与 Price 的散点图
sns.scatterplot(ax=axes[0, 0], x='TouchScreen', y='Price', data=df, hue='TouchScreen',palette='brg')
axes[0, 0].set_title('TouchScreen 与 Price 的关系')
axes[0, 0].set_xlabel('TouchScreen')
axes[0, 0].set_ylabel('Price')
axes[0, 0].legend(title='TouchScreen')# 绘制 Ram 与 Price 的散点图
sns.scatterplot(ax=axes[0, 1], x='Ram', y='Price', data=df, hue='Ram', palette='viridis')
axes[0, 1].set_title('Ram 与 Price 的关系')
axes[0, 1].set_xlabel('Ram')
axes[0, 1].set_ylabel('Price')
axes[0, 1].legend(title='Ram')# 绘制 HDD 与 Price 的散点图
sns.scatterplot(ax=axes[1, 0], x='HDD', y='Price', data=df, hue='HDD', palette='plasma')
axes[1, 0].set_title('HDD 与 Price 的关系')
axes[1, 0].set_xlabel('HDD')
axes[1, 0].set_ylabel('Price')
axes[1, 0].legend(title='HDD')# 绘制 SSD 与 Price 的散点图
sns.scatterplot(ax=axes[1, 1], x='SSD', y='Price', data=df, hue='SSD', palette='coolwarm')
axes[1, 1].set_title('SSD 与 Price 的关系')
axes[1, 1].set_xlabel('SSD')
axes[1, 1].set_ylabel('Price')
axes[1, 1].legend(title='SSD')plt.tight_layout()
# 显示图形
plt.show()

  1. TouchScreen 与 Price 的关系

该图展示了触摸屏(TouchScreen)与价格之间的关系。 从图中可以看出,有触摸屏的笔记本电脑(标记为1)的价格显著高于没有触摸屏的笔记本电脑(标记为0)。 这表明触摸屏功能会显著提高笔记本电脑的价格。

  1. Ram 与 Price 的关系

该图展示了内存大小(Ram)与价格之间的关系。 从图中可以看出,随着内存大小的增加,笔记本电脑的价格也在增加。 内存较大的笔记本电脑(如30GB及以上)的价格明显高于内存较小的笔记本电脑。 颜色深浅表示不同内存容量,可以看出内存容量越大,价格越高。

  1. HDD 与 Price 的关系

该图展示了硬盘容量(HDD)与价格之间的关系。 从图中可以看出,硬盘容量较大的笔记本电脑(如1000GB及以上)的价格显著高于硬盘容量较小的笔记本电脑(如0GB到500GB)。 硬盘容量为0的笔记本电脑价格分布较广,可能是因为这类笔记本电脑使用的是SSD而非HDD。 总体来说,HDD容量越大,笔记本电脑的价格也越高。

  1. SSD 与 Price 的关系

该图展示了固态硬盘(SSD)容量与价格之间的关系。 从图中可以看出,SSD容量较大的笔记本电脑(如1000GB)的价格明显高于SSD容量较小的笔记本电脑(如200GB及以下)。 没有SSD的笔记本电脑价格相对较低,但也有一定的分布范围。 整体上,SSD容量越大,笔记本电脑的价格越高。

总结

笔记本电脑的价格受到多个因素的影响,包括触摸屏功能、内存大小、HDD和SSD的容量。 拥有触摸屏的笔记本电脑价格普遍较高。 内存、HDD和SSD容量越大,笔记本电脑的价格越高。


数据清洗

数值型变量不需要处理,但是很多类别变量需要继续处理

df.select_dtypes(exclude=['int','float']).describe()
 

可以看到现在5个类别变量之间的类别数量,company是19个,类别有点多,Company太多了,会造成维度较多,所以进行因子话,其他变量数量都是5,6个,可以直接进行独立热编码。

# 因子化 'Company' 列
df['Company'] = pd.factorize(df['Company'])[0].astype('int')
df['Company'].head()

可以看到数据变成了数值型变量。

# 独立热编码,然后查看变量的信息

# 独立热编码
data= pd.get_dummies(df)
data.info()

可以看到所有的数据都是数值型了,可以直接进行机器学习了。


开始机器学习

划分训练集和测试集

## 取出X和y
 

X=data.drop('Price',axis=1)
y=data['Price']

 划分训练集和验证集

#划分训练集和验证集
from sklearn.model_selection import train_test_split
X_train,X_val,y_train,y_val=train_test_split(X,y,test_size=0.2,random_state=0)

数据标准化

#数据标准化
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(X_train)
X_train_s = scaler.transform(X_train)
X_val_s = scaler.transform(X_val)
print('训练数据形状:')
print(X_train_s.shape,y_train.shape)
print('验证数据形状:')
(X_val_s.shape,y_val.shape,)

模型选择

常见的手段了,十种模型一起训练

#采用十种模型,对比验证集精度
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import ElasticNet
from sklearn.neighbors import KNeighborsRegressor
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor
from sklearn.ensemble import GradientBoostingRegressor
from xgboost.sklearn import XGBRegressor
from lightgbm import LGBMRegressor
from sklearn.svm import SVR
from sklearn.neural_network import MLPRegressor
#线性回归
model1 = LinearRegression()#弹性网回归
model2 = ElasticNet(alpha=0.05, l1_ratio=0.5)#K近邻
model3 = KNeighborsRegressor(n_neighbors=10)#决策树
model4 = DecisionTreeRegressor(random_state=77)#随机森林
model5= RandomForestRegressor(n_estimators=500,  max_features=int(X_train.shape[1]/3) , random_state=0)#梯度提升
model6 = GradientBoostingRegressor(n_estimators=500,random_state=123)#极端梯度提升
model7 =  XGBRegressor(objective='reg:squarederror', n_estimators=1000, random_state=0)#轻量梯度提升
model8 = LGBMRegressor(n_estimators=1000,objective='regression', # 默认是二分类random_state=0,force_row_wise=True)#支持向量机
model9 = SVR(kernel="rbf")#神经网络
model10 = MLPRegressor(hidden_layer_sizes=(8,), random_state=7, max_iter=10000)model_list=[model1,model2,model3,model4,model5,model6,model7,model8,model9,model10]
model_name=['线性回归','惩罚回归','K近邻','决策树','随机森林','梯度提升','极端梯度提升','轻量梯度提升','支持向量机','神经网络']

自定义评价函数

from sklearn.metrics import mean_absolute_error
from sklearn.metrics import mean_squared_error,r2_scoredef evaluation(y_test, y_predict):mae = mean_absolute_error(y_test, y_predict)mse = mean_squared_error(y_test, y_predict)rmse = np.sqrt(mean_squared_error(y_test, y_predict))mape=(abs(y_predict -y_test)/ y_test).mean()r_2=r2_score(y_test, y_predict)return mae, rmse, mape,r_2  #mse

遍历,训练

df_eval=pd.DataFrame(columns=['MAE','RMSE','MAPE','R2'])
for i in range(len(model_list)):model_C=model_list[i]name=model_name[i]print(f'{name}正在训练...')model_C.fit(X_train_s, y_train)pred=model_C.predict(X_val_s)s=evaluation(y_val,pred)df_eval.loc[name,:]=list(s)

查看不同模型的数值型评价指标

df_eval

可视化:

bar_width = 0.4
colors=['c', 'b', 'g', 'tomato', 'm', 'y', 'lime', 'k','orange','pink','grey','tan','purple']
fig, ax = plt.subplots(2,2,figsize=(7,5),dpi=256)
for i,col in enumerate(df_eval.columns):n=int(str('22')+str(i+1))plt.subplot(n)df_col=df_eval[col]m =np.arange(len(df_col))#hatch=['-','/','+','x'],plt.bar(x=m,height=df_col.to_numpy(),width=bar_width,color=colors)#plt.xlabel('Methods',fontsize=12)names=df_col.indexplt.xticks(range(len(df_col)),names,fontsize=8)plt.xticks(rotation=40)if col=='R2':plt.ylabel(r'$R^{2}$',fontsize=14)else:plt.ylabel(col,fontsize=14)
plt.tight_layout()
#plt.savefig('柱状图.jpg',dpi=512)
plt.show()

可能因为数据量不大,所以神经网络的效果不太好。基本都是树模型的效果最好,还是一样的经验,集成模型方法都是最好的,也就是XGB,LGBM,RF等。下面对他们进行交叉验证。


交叉验证

自定义一些交叉验证的函数

#回归问题交叉验证,使用拟合优度,mae,rmse,mape 作为评价标准
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import mean_squared_error,r2_score
from sklearn.model_selection import KFolddef evaluation(y_test, y_predict):mae = mean_absolute_error(y_test, y_predict)mse = mean_squared_error(y_test, y_predict)rmse = np.sqrt(mean_squared_error(y_test, y_predict))mape=(abs(y_predict -y_test)/ y_test).mean()r_2=r2_score(y_test, y_predict)return mae, rmse, mape
def evaluation2(lis):array=np.array(lis)return array.mean() , array.std()
def cross_val(model=None,X=None,Y=None,K=5,repeated=1):df_mean=pd.DataFrame(columns=['R2','MAE','RMSE','MAPE']) df_std=pd.DataFrame(columns=['R2','MAE','RMSE','MAPE'])for n in range(repeated):print(f'正在进行第{n+1}次重复K折.....随机数种子为{n}\n')kf = KFold(n_splits=K, shuffle=True, random_state=n)R2=[]; MAE=[] ; RMSE=[]  ; MAPE=[]print(f"    开始本次在{K}折数据上的交叉验证.......\n")i=1for train_index, test_index in kf.split(X):print(f'        正在进行第{i}折的计算')X_train=X.values[train_index]y_train=y.values[train_index]X_test=X.values[test_index]y_test=y.values[test_index]model.fit(X_train,y_train)score=model.score(X_test,y_test)R2.append(score)pred=model.predict(X_test)mae, rmse, mape=evaluation(y_test, pred)MAE.append(mae)RMSE.append(rmse)MAPE.append(mape)print(f'        第{i}折的拟合优度为:{round(score,4)},MAE为{round(mae,4)},RMSE为{round(rmse,4)},MAPE为{round(mape,4)}')i+=1print(f'    ———————————————完成本次的{K}折交叉验证———————————————————\n')R2_mean,R2_std=evaluation2(R2)MAE_mean,MAE_std=evaluation2(MAE)RMSE_mean,RMSE_std=evaluation2(RMSE)MAPE_mean,MAPE_std=evaluation2(MAPE)print(f'第{n+1}次重复K折,本次{K}折交叉验证的总体拟合优度均值为{R2_mean},方差为{R2_std}')print(f'                               总体MAE均值为{MAE_mean},方差为{MAE_std}')print(f'                               总体RMSE均值为{RMSE_mean},方差为{RMSE_std}')print(f'                               总体MAPE均值为{MAPE_mean},方差为{MAPE_std}')print("\n====================================================================================================================\n")df1=pd.DataFrame(dict(zip(['R2','MAE','RMSE','MAPE'],[R2_mean,MAE_mean,RMSE_mean,MAPE_mean])),index=[n])df_mean=pd.concat([df_mean,df1])df2=pd.DataFrame(dict(zip(['R2','MAE','RMSE','MAPE'],[R2_std,MAE_std,RMSE_std,MAPE_std])),index=[n])df_std=pd.concat([df_std,df2])return df_mean,df_std

训练lgbm

model = LGBMRegressor(n_estimators=200,objective='regression',random_state=1)
lgb_crosseval,lgb_crosseval2=cross_val(model=model,X=X,Y=y,K=5,repeated=6)

训练xgboost

model = XGBRegressor(n_estimators=200,objective='reg:squarederror',random_state=0)
xgb_crosseval,xgb_crosseval2=cross_val(model=model,X=X,Y=y,K=5,repeated=6)

训练随机森林

model = RandomForestRegressor(n_estimators=200,  max_features=int(X_train.shape[1]/3) , random_state=0)
rf_crosseval,rf_crosseval2=cross_val(model=model,X=X,Y=y,K=5,repeated=6)

四个评价指标的均值图

对三个模型的评价指标不同的交叉验证的均值

plt.subplots(1,4,figsize=(16,3))
for i,col in enumerate(lgb_crosseval.columns):n=int(str('14')+str(i+1))plt.subplot(n)plt.plot(lgb_crosseval[col], 'k', label='LGB')plt.plot(xgb_crosseval[col], 'b-.', label='XGB')plt.plot(rf_crosseval[col], 'r-^', label='RF')plt.title(f'不同模型的{col}对比')plt.xlabel('重复交叉验证次数')plt.ylabel(col,fontsize=16)plt.legend()
plt.tight_layout()
plt.show()

均值上来看LGBM的效果最好,R2大,误差指标低。

四个评价指标的方差图
plt.subplots(1,4,figsize=(16,3))
for i,col in enumerate(lgb_crosseval2.columns):n=int(str('14')+str(i+1))plt.subplot(n)plt.plot(lgb_crosseval2[col], 'k', label='LGB')plt.plot(xgb_crosseval2[col], 'b-.', label='XGB')plt.plot(rf_crosseval2[col], 'r-^', label='RF')plt.title(f'不同模型的{col}方差对比')plt.xlabel('重复交叉验证次数')plt.ylabel(col,fontsize=16)plt.legend()
plt.tight_layout()
plt.show()

方差差不多,模型的稳定性都差不多。

均值上来看LGBM的效果最好,下面对LGBM搜索超参数。


搜超参数

k折交叉验证,随机超参数搜索

#利用K折交叉验证搜索最优超参数
from sklearn.model_selection import KFold, StratifiedKFold
from sklearn.model_selection import GridSearchCV,RandomizedSearchCV

 超参数搜索

# Choose best hyperparameters by RandomizedSearchCV
#随机搜索的参数
param_distributions = {'max_depth': range(5, 8), 'subsample':np.linspace(0.5,1,5 ),'num_leaves': [15, 31, 63,],'colsample_bytree': [0.6, 0.7, 0.8, 1.0],'learning_rate': np.linspace(0.05,0.3,6 ), 'n_estimators':[100,200,300,400,500]}# 'min_child_weight':np.linspace(0,0.1,2 ),
kfold = KFold(n_splits=5, shuffle=True, random_state=1)
randomsearch=RandomizedSearchCV(estimator= LGBMRegressor(objective='regression',random_state=0,verbosity=-1),param_distributions=param_distributions, n_iter=100)
randomsearch.fit(X_train_s, y_train)

查看最好的模型参数

randomsearch.best_params_

带入最好的参数模型训练和测试:

best_estimator = randomsearch.best_estimator_
best_estimator.score(X_val_s, y_val)

#利用找出来的最优超参数在所有的训练集上训练,然后预测
model=LGBMRegressor(objective='regression',subsample=0.75,learning_rate= 0.1,n_estimators= 500,num_leaves=31,max_depth= 6,colsample_bytree=0.6,random_state=0,verbosity=-1)
model.fit(X_train_s, y_train)
model.score(X_val_s, y_val)


变量重要性排序图

最好的模型,在全部数据上给进行训练

model=LGBMRegressor(objective='regression',subsample=0.75,learning_rate= 0.1,n_estimators= 500,num_leaves=31,max_depth= 6,colsample_bytree=0.6,random_state=0,verbosity=-1)
model.fit(X.to_numpy(),y.to_numpy())
model.score(X.to_numpy(), y.to_numpy())

然后取出变量重要性,排序画图

sorted_index = model.feature_importances_.argsort()[::-1]
plt.figure(figsize=(10, 8),dpi=128) # 可以调整尺寸以适应所有特征# 使用 seaborn 来绘制条形图
sns.barplot(x=model.feature_importances_[sorted_index], y=X.columns[sorted_index], orient='h')
plt.xlabel('Feature Importance')  # x轴标签
plt.ylabel('Feature')             # y轴标签
plt.show()

分析如下:

Weight(重量): 重量是最重要的特征,表明重量对电脑价格有显著影响。较轻的电脑通常设计更为紧凑,使用了高端材料和技术,从而增加了成本。 轻便的设计是便携设备的一个重要特征,尤其是对需要经常携带电脑的用户。

Company(公司): 品牌对价格的影响也非常大。不同品牌在设计、制造和市场定位上有显著差异,进而反映在价格上。 选择知名品牌的电脑可能提供更好的质量、售后服务和用户体验,但通常价格也更高。

Ppi(像素密度): 像素密度表示屏幕的清晰度。高像素密度的屏幕通常用于高端设备,提供更好的显示效果,但也会增加成本。 对于需要高质量显示效果的用户,如设计师和多媒体编辑,选择高PPI的屏幕是值得的。

SSD(固态硬盘): 固态硬盘的容量和存在对价格有重要影响。SSD提供更快的读写速度和更好的耐用性,因此价格较高。 选择较大容量的SSD可以显著提升电脑性能和用户体验,但也要考虑成本因素。

Ram(内存): 内存容量对价格的影响较大。较大的内存意味着更高的计算能力和多任务处理能力,因此会提高电脑价格。 对于需要处理大量数据或运行多个程序的用户,大容量内存是必不可少的。

HDD(机械硬盘): 机械硬盘容量对价格也有一定影响。尽管SSD更受欢迎,但大容量HDD依然是存储大量数据的经济选择。 对于需要大量存储空间的用户,可以选择搭配SSD和HDD的混合存储方案。

Ips(IPS屏幕): IPS屏幕提供更好的视角和颜色表现,但也会增加成本,从而提高电脑价格。 对于需要高质量显示效果的用户,IPS屏幕是一个重要特征。

Cpu_brand_Intel Core i7: Intel Core i7处理器是高端处理器,通常用于高性能电脑,对价格有显著影响。 高性能处理器意味着更高的处理速度和更强的计算能力,这在一定程度上反映了产品的高端定位。

Cpu_brand_Intel Core i5: Intel Core i5处理器虽然性能不如i7,但在主流市场上有较高的性价比,对价格也有显著影响。 对于预算有限但需要较高性能的用户,i5处理器是一个不错的选择。

TypeName_Notebook(笔记本类型): 笔记本类型对价格也有重要影响。不同类型的笔记本(如普通笔记本、游戏本、超极本等)在设计和性能上有显著差异,进而影响价格。 选择合适类型的笔记本应根据具体用途和预算进行权衡。 其他特征如显卡品牌、触摸屏、操作系统等也对价格有一定影响,但相对较低。这些特征可以根据具体需求进行选择,以获得最优的性价比和使用体验。

结论 从变量重要性图中可以看出,重量、品牌和像素密度是影响电脑价格的主要因素。这些特征显著提升了电脑的性能和用户体验,因此对价格有较大影响。其他特征如SSD、内存和处理器类型等也对价格有重要影响,应根据具体需求和预算综合考虑这些因素。

在选择电脑时,优先考虑这些关键特征,可以在保证性能的同时控制成本,获得最优的使用体验。


创作不易,看官觉得写得还不错的话点个关注和赞吧,本人会持续更新python数据分析领域的代码文章~(需要定制类似的代码可私信)

相关文章:

Python数据分析案例47——笔记本电脑价格影响因素分析

案例背景 博主对电脑的价格和配置一直略有研究&#xff0c;正好最近也有笔记本电脑相关的数据&#xff0c;想着来做点分析吧&#xff0c;写成一个案例。基本上描述性统计&#xff0c;画图&#xff0c;分组聚合&#xff0c;机器学习&#xff0c;交叉验证&#xff0c;搜索超参数…...

【加密与解密】【09】GPG Client签名流程

什么是GPG客户端 GPG客户端是实现PGP加密协议的一套客户端程序&#xff0c;可用于加密或签名 下载GPG客户端 建议安装命令行工具&#xff0c;图形工具一般不具备完整功能 https://gnupg.org/download/index.html生成私钥 此时会要求你输入名称&#xff0c;邮箱&#xff0c…...

“2024软博会” 为软件企业提供集展示、交流、合作一站式平台

随着全球科技浪潮的涌动&#xff0c;软件行业正迎来前所未有的发展机遇&#xff0c;成为了全球新一轮竞争的“制高点”&#xff0c;以及未来经济发展的“增长点”。在当前互联网、大数据、云计算、人工智能、区块链等技术加速创新的背景下&#xff0c;数字经济已经渗透到经济社…...

【Zoom安全解析】深入Zoom的端到端加密机制

标题&#xff1a;【Zoom安全解析】深入Zoom的端到端加密机制 在远程工作和在线会议变得越来越普及的今天&#xff0c;视频会议平台的安全性成为了用户关注的焦点。Zoom作为全球领先的视频会议软件&#xff0c;其端到端加密&#xff08;E2EE&#xff09;功能保证了通话的安全性…...

7 动态规划

下面的例子不错&#xff1a; 对于动态规划&#xff0c;能学到不少东西&#xff1b; 你要清楚每一步都在做什么&#xff0c;划分细致就能够拆解清楚&#xff01; xk​​​​​​​. - 力扣&#xff08;LeetCode&#xff09; labuladong的算法笔记-动态规划-CSDN博客 动态规划是…...

.net 快速开发框架开源

DF.OpenAPI开源系统 前后端分离&#xff0c;开箱即用&#xff0c;java经典功能.net也具备 系统介绍 DF.OpenAPI是基于Admin.NET二开的&#xff0c;是一个开源的多租户后台管理系统。采用前后端分离技术&#xff08;前端使用vue.js&#xff0c;后端使用.net 3~.net6&#xff…...

《昇思25天学习打卡营第06天|网络构建》

网络构建 神经网络模型由神经网络层和Tensor操作构成 #实验环境已经预装了mindspore2.2.14&#xff0c;如需更换mindspore版本&#xff0c;可更改下面mindspore的版本号 !pip uninstall mindspore -y !pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindspore2.2.…...

【链表】- 两两交换链表中的节点

1. 对应力扣题目连接 两两交换链表中的节点 2. 实现案例代码 public class ExchangeLinkedListsPairwise {public static void main(String[] args) {// 示例链表&#xff1a;[1, 2, 3, 4]ListNode head new ListNode(1);head.next new ListNode(2);head.next.next new L…...

java设计模式(四)——抽象工厂模式

一、模式介绍 改善在工厂方法模式中,扩展时新增产品类、工厂类,导致项目中类巨多的场面,减少系统的维护成本,且一个工厂可以生成多种产品,而不是同一种的产品,比如一个工厂既可以生产鞋子又可以衣服,而不是只能生产鞋子。 二、工厂方法模式 1、实现步骤 第一步: 定义…...

动物检测yolo格式数据集(水牛 、大象 、犀牛 、斑马四类)

动物检测数据集 1、下载地址&#xff1a; https://download.csdn.net/download/qq_15060477/89512588?spm1001.2101.3001.9500 2、数据集介绍 本数据集含有四种动物可以检测&#xff0c;分别是水牛 、大象 、犀牛 、斑马四类&#xff0c;数据集格式为yolo格式&#xff0c;…...

昇思25天学习打卡营第05天 | 数据变换 Transforms

昇思25天学习打卡营第05天 | 数据变换 Transforms 文章目录 昇思25天学习打卡营第05天 | 数据变换 TransformsCommon TransformsCompose Vision TransformsText TransformPythonTokenizerLookup Lambda Transforms数据处理模式Pipeline模式Eager模式 总结打卡 通常情况下的原始…...

Springboot+MySQL 公寓报修管理系统源码

功能结构图 效果图&#xff1a;...

jenkins 发布服务到linux服务器

1.环境准备 1.1 需要一台已经部署了jenkins的服务器&#xff0c;上面已经集成好了&#xff0c;jdk、maven、nodejs、git等基础的服务。 1.2 需要安装插件 pusblish over ssh 1.3 准备一台额外的linux服务器&#xff0c;安装好jdk 2.流程描述 2.1 配置jenkins&#xff0c;包括p…...

Appium+python自动化(三十九)-Appium自动化测试框架综合实践 - 代码实现(超详解)

1.简介 今天我们紧接着上一篇继续分享Appium自动化测试框架综合实践 - 代码实现。由于时间的关系&#xff0c;宏哥这里用代码给小伙伴演示两个模块&#xff1a;注册和登录。 2.业务模块封装 因为现在各种APP的层出不群&#xff0c;各式各样的。但是其大多数都有注册、登录。为…...

防止跨站脚本攻击XSS之Antisamy

目录 一、什么是跨站脚本攻击&#xff08;XSS&#xff09; 二、通常有哪些解决方案 三、常见的XSS攻击例子有哪些 3.1 存储型XSS攻击&#xff08;黑产恶意截流&#xff0c;跳转不法网站&#xff09; 3.2反射型XSS攻击&#xff1a; 四、什么是跨站请求伪造&#xff1f; 五…...

Python爬虫实战案例——王者荣耀皮肤抓取

大家好&#xff0c;我是你们的老朋友——南枫&#xff0c;今天我们一起来学习一下该如何抓取大家经常玩的游戏——王者荣耀里面的所有英雄的皮肤。 老规矩&#xff0c;直接上代码&#xff1a; 导入我们需要使用到的&#xff0c;也是唯一用到的库&#xff1a; 我们要抓取皮肤其…...

PyTorch计算机视觉实战:目标检测、图像处理与深度学习

本书基于真实数据集&#xff0c;全面系统地阐述现代计算机视觉实用技术、方法和实践&#xff0c;涵盖50多个计算机视觉问题。全书分为四部分&#xff1a;一部分介绍神经网络和PyTorch的基础知识&#xff0c;以及如何使用PyTorch构建并训练神经网络&#xff0c;包括输入数据缩放…...

4D 生物打印:将时间维度融入,打造个性化动态组织

4D 生物打印技术将时间维度融入 3D 生物打印&#xff0c;赋予打印出的结构动态变化的能力&#xff0c;使其更接近于真实组织和器官的特性。要实现这一目标&#xff0c;需要使用智能生物材料和智能设计策略。 智能生物材料 目前用于 4D 生物打印的智能生物材料主要包括形状记忆…...

银行清算业务功能测试解析

银行清算业务是指银行间通过账户或有关货币当地清算系统&#xff0c;在办理结算和支付中用以清讫双边或多边债权债务的过程和方法。按地域划分&#xff0c;清算业务可分为国内联行清算和国际清算。常见的清算模式包括实时全额清算、净额批量清算、大额资金转账系统及小额定时清…...

CVE-2024-6387漏洞预警:尽快升级OpenSSH

OpenSSH维护者发布了安全更新&#xff0c;其中包含一个严重的安全漏洞&#xff0c;该漏洞可能导致在基于glibc的Linux系统中使用root权限执行未经身份验证的远程代码。该漏洞的代号为regreSSHion&#xff0c;CVE标识符为CVE-2024-6387。它驻留在OpenSSH服务器组件&#xff08;也…...

学习整理在php中使用PHPExcel读取excel表列数大于Z时读取不到的解决方案

php读取excel列数大于Z时读取不到 背景解决方案关键代码 背景 表格数据超过26列&#xff0c; 也就是在Z列之前没有AA列及以后的情况&#xff0c; 测试一直都没有问题&#xff0c;超过&#xff0c;就会获取不到数据了 解决方案 private function getExcelData(){//获取excel文…...

python sklearn机械学习-数据预处理

&#x1f308;所属专栏&#xff1a;【机械学习】✨作者主页&#xff1a; Mr.Zwq✔️个人简介&#xff1a;一个正在努力学技术的Python领域创作者&#xff0c;擅长爬虫&#xff0c;逆向&#xff0c;全栈方向&#xff0c;专注基础和实战分享&#xff0c;欢迎咨询&#xff01; 您…...

搜索引擎常用语法

引号 (" "): 用双引号将词组括起来&#xff0c;搜索引擎将返回包含完全相同短语的结果。 示例&#xff1a;"人工智能发展趋势" 减号 (-): 在关键词前加上减号可以排除包含特定词语的结果。 示例&#xff1a;人工智能 -机器学习&#xff08;排除包含 “机器…...

华为智能驾驶方案剖析

华为ADS智驾方案始终坚持激光雷达毫米波雷达摄像头的多传感器融合路线&#xff0c;行业降本压力下硬件配置从超配逐步转向贴合实际需求&#xff0c;带动整体硬件成本下降。 1)单车传感器数量呈现下降趋势&#xff0c;包括激光雷达从3个减配至1个、毫米波雷达从6R减配至3R、摄像…...

DDR3(一)

目录 1 SDRAM1.1 同步动态随机存储器1.2 位宽1.3 SDRAM结构1.4 SDRAM引脚图 2 SDRAM操作指令2.1 读写指令2.2 刷新和预充电2.3 配置模式寄存器2.4 读/写突发2.5 数据屏蔽 SDRAM是DDR3的基础&#xff0c;在学习DDR3之前&#xff0c;我们先来学习一下SDRAM的相关知识。 1 SDRAM …...

Eureka与Spring Cloud Bus的协同:打造智能服务发现新篇章

Eureka与Spring Cloud Bus的协同&#xff1a;打造智能服务发现新篇章 在微服务架构中&#xff0c;服务发现是实现服务间通信的关键机制。Eureka作为Netflix开源的服务发现框架&#xff0c;与Spring Cloud Bus的集成&#xff0c;提供了一种动态、响应式的服务治理解决方案。本文…...

Kafka入门到精通(三)-Kafka

Kafka简介 Kafka是由Apache软件基金会开发的一个开源流处理平台&#xff0c;由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统&#xff0c;它可以处理消费者在网站中的所有动作流数据。 这种动作&#xff08;网页浏览&#xff0c;搜索和其他用户的行动&#xf…...

高校教师教学质量评估系统-计算机毕业设计源码03344

摘要 在高等教育中&#xff0c;教学质量是培养优秀人才的关键。为了提高教学质量&#xff0c;高校需要建立一套科学、有效的教师教学质量评估系统。本研究采用 SSM技术框架&#xff0c;旨在开发一款高校教师教学质量评估系统。 SSM框架作为一种成熟的Java开发框架&#xff0c;具…...

币界网讯,预计以太坊现货 ETF 将于 7 月中旬推出

刚刚 ETF Store 总裁 Nate Geraci 在 X &#xff08;前Twitter&#xff09;平台上宣布&#xff0c;备受数字货币市场期待的SEC以太坊现货 ETF提案&#xff0c;将于7 月中旬通过美国证券交易委员会&#xff08;SEC&#xff09;批准。Nate Geraci透露修订后的 S-1 文件将于 7 月 …...

【FFmpeg】avio_open2函数

【FFmpeg】avio_open2函数 1.avio_open21.1 创建URLContext&#xff08;ffurl_open_whitelist&#xff09;1.1.1 创建URLContext&#xff08;ffurl_alloc&#xff09;1.1.1.1 查找合适的protocol&#xff08;url_find_protocol&#xff09;1.1.1.2 为查找到的URLProtocol创建UR…...

技术成神之路:设计模式(二)建造者模式

1.定义 建造者模式&#xff08;Builder Pattern&#xff09;是一种创建型设计模式&#xff0c;它允许你分步骤创建复杂对象&#xff0c;而不必直接调用构造函数。建造者模式特别适合那些包含多个组成部分并且构造过程复杂的对象。 2. 结构 建造者模式的主要组成部分包括&#…...

基于Springboot+Vue+mysql仓库管理系统仓库进销存管理系统

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Php和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…...

爬虫scrapy库精简使用大全

一、基本命令 创建项目 scrpay startproject myapp创建爬虫文件 scrapy genspider spider_name "https://www.baidu.com"运行爬虫文件 scrapy crawl spider_name一、使用代理ip 打开中间件middlewares.py&#xff0c;增加以下代码 class ProxyMiddleware:def process…...

Qt - 如何在新线程 (QThread)中使用一个进程 (QProcess)?

在Qt中&#xff0c;QThread 用于处理后台任务&#xff0c;而 QProcess 用于启动和管理外部程序。如果你想在一个新的 QThread 中使用 QProcess&#xff0c;你需要了解 QProcess 并不是专门为在特定线程中运行而设计的。实际上&#xff0c;QProcess 通常在创建它的线程&#xff…...

Qt绘制多线段

最近画辅助线有刚需。 画图准备增加绘制多线段功能。 有哪些方法呢&#xff1f; QPainter Class | Qt GUI 5.15.17 void QPainter::drawPolyline(const QPolygon &points) QPolygon Class | Qt GUI 5.15.17 QPolygon polygon; polygon << QPoint(10, 20) <&…...

去中心化革命:探索区块链技术的前沿

随着信息技术的飞速发展&#xff0c;区块链技术作为一种新兴的去中心化解决方案&#xff0c;正逐渐改变着我们的经济、社会和技术格局。本文将从区块链的基本原理、当前的应用实例以及未来的发展趋势三个方面&#xff0c;深入探讨区块链技术在革命性变革中的角色和影响。 1. 区…...

2024年湖南省各市科小申报时间(科技型中小企业申报流程、条件、好处)新政

湖南省各市科小申报时间流程 一、评价管理 省科技厅牵头负责科技型中小企业评价工作的组织和监督、实地核查、公示公告、入库登记及编号撤销和集中抽查工作&#xff0c;及时处理相关异议、投诉和举报信息。 各市州科技局负责科技型中小企业评价工作的具体实施&#xff0c;组…...

【JD-GUI】MacOS 中使用Java反编译工具JD-GUI

希望文章能给到你启发和灵感&#xff5e; 如果觉得文章对你有帮助的话&#xff0c;点赞 关注 收藏 支持一下博主吧&#xff5e; 阅读指南 开篇说明概念理解一、基础环境说明1.1 硬件环境1.2 软件环境 二、下载与安装2.1 选择对应版本2.2 解压运行排除异常&#xff1a;2.3 关于…...

C++:求梯形面积

梯形面积 已知上底15厘米&#xff0c;下底25厘米&#xff0c;问梯形面积值是多少&#xff1f; #include<iostream> using namespace std; int main() {//梯形的面积公式&#xff08;上底下底&#xff09; 高 2//上底变量、下底变量int s,d,h,m;s15;d25;h 2*150 * 2/s ;…...

学会python——在excel中写入数据(python实例十三)

目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3 .想Excel中写入数据 3.1 代码构思 3.2 代码实例 3.3 运行结果 4.总结 1.认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的…...

Stable Diffusion【基础篇】:降噪强度(denoising strength)

提到降噪强度&#xff08;denoising strength&#xff09;&#xff0c;大家一定不会陌生&#xff0c;这个参数是图生图中最关键的参数之一。今天在Stable Diffusion Art网站看到一篇介绍降噪强度&#xff08;denoising strength&#xff09;的文章&#xff08;地址&#xff1a;…...

【Python】语法入门

文章目录 Python 基础语法&#xff1a;打印和变量打印和变量的基本语法打印变量 变量操作变量的命名规则打印和变量的应用场景示例&#xff1a;基本计算器 Python 基础语法&#xff1a;列表推导式列表推导式的基本语法基本示例带条件的列表推导式列表推导式的应用场景 Python 基…...

匠心独运:红酒与手工艺的很好结合

在岁月的长河中&#xff0c;红酒与手工艺都以其不同的魅力和技艺&#xff0c;书写着各自的故事。当这两者相遇&#xff0c;仿佛是一场跨越时空的对话&#xff0c;不仅展现了匠心独运的技艺之美&#xff0c;更在无声中诉说着对品质与生活的热爱。今天&#xff0c;就让我们一起探…...

第20章 Mac+VSCode配置C++环境

1. 下载VSCode VSCode下载地址在mac终端里输入xcode- select --install命令&#xff0c;根据提示安装xcode工具。 2. 安装插件&#xff08;4个&#xff09; 打开VScode&#xff0c;点击应用右侧菜单栏 C/C&#xff08;必装&#xff09; Code Runner&#xff08;必装&#xf…...

FactoryBean 原理简介

FactoryBean 首先是一个工厂类&#xff0c;它可以生产指定的Bean&#xff0c;特殊之处在于它可以向Spring容器中注册两个Bean&#xff0c;一个是它本身&#xff0c;一个是FactoryBean.getObject()方法返回值所代表的Bean。通过实现 FactoryBean 接口&#xff0c;你可以控制某个…...

Redis中hash类型的操作命令(命令的语法、返回值、时间复杂度、注意事项、操作演示)

文章目录 字符串和哈希类型相比hset 命令hget 命令hexistshdelhkeyshvalshgetallhmgethlenhsetnxhincrbyhincrbyfloat 字符串和哈希类型相比 假设有以下一种场景&#xff1a;现在要在 Redis 中存储一个用户的基本信息(id1、namezhangsan、age17)&#xff0c;下图表示使用字符串…...

UE5基本操作(二)

文章目录 前言相机的移动速度修改默认地图使用初学者内容包文件夹结构 总结 前言 在我们的上一篇文章中&#xff0c;我们已经介绍了一些Unreal Engine 5&#xff08;UE5&#xff09;的基本操作。UE5是一款强大的游戏开发引擎&#xff0c;它提供了许多工具和功能&#xff0c;使…...

React Navigation 和 Expo Router

React Navigation 是 React Native 社区最常用的导航库&#xff0c;其具有高度可定制性且性能良好的特性。它提供了一系列导航器&#xff08;如堆栈导航器、标签导航器、抽屉导航器等&#xff09;&#xff0c;可以满足绝大多数的页面导航需求。 Expo Router 是 Expo 官方最新发…...

如何使用python网络爬虫批量获取公共资源数据教程?

原文链接&#xff1a;如何使用python网络爬虫批量获取公共资源数据教程&#xff1f;https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247608240&idx4&snef281f66727afabfaae2066c6e92f792&chksmfa826657cdf5ef41571115328a09b9d34367d8b11415d5a5781dc4c…...

常见位运算总结

1.基础位运算 左移 &#xff08;<<&#xff09;: 最左侧位不要了, 最右侧补 0 右移&#xff08;>>&#xff09;: 最右侧位不要了, 最左侧补符号位(正数补0, 负数补1) 按位取反&#xff08;~&#xff09;&#xff1a;如果该位为 0 则转为 1, 如果该位为 1 则转为…...

尚硅谷 一 JS简介

一 JS简介 1.1 JS起源 Javascript是一种由Netscape(网景)的LiveScript发展而来的原型化继承的面向对象的动态类型的区分大小写的客户端脚本语言&#xff0c;主要目的是为了解决服务器端语言&#xff0c;遗留的速度问题&#xff0c;为客户提供更流畅的浏览效果。当时服务端需要…...

安全与环境学报

《安全与环境学报》 创刊于2001年&#xff0c;是安全与环境学科的学术性月刊&#xff0c;国内外公开发行&#xff0c;刊号为ISSN 1009-6094、CN 11-4537/X&#xff0c;由北京理工大学、中国环境科学学会和中国职业安全健康协会主办&#xff0c;第十一、十二届全国人大常委会委员…...

Python爬虫教程第1篇-基础知识

文章目录 什么是爬虫爬虫的工作原理用途搜索引擎爬虫Robots协议HTTP的请求过程URL的含义HTTP常见请求头爬虫常用的技术 什么是爬虫 信息的交互是通过web网页、或者移动端等不同的客户端端形式进行交互&#xff0c;这个过程是一个人与网路正常的交互行为。而爬虫可以用来模拟人…...

笔记本休眠后自动关闭所有程序

关于主动进入休眠后&#xff0c;笔记本过一晚第二天会关闭所有程序&#xff0c;开始还以为&#xff0c;笔记本没电了&#xff0c;或者公司停电了导致笔记本没电关机&#xff0c;排查后发现不是。。。 原因是笔记本电脑默认设置休眠20分钟后自动关闭硬盘。 解决方案&#xff1a…...

平安养老险宿州中心支公司积极参与“78奋力前行”集体健步行活动

7月3日&#xff0c;平安养老保险股份有限公司&#xff08;以下简称“平安养老险”&#xff09;宿州中心支公司组织员工参加由宿州市保险行业协会2024年“78奋力前行”线下集体健步行活动。 平安养老险宿州中心支公司员工高举公司旗帜&#xff0c;与同业伙伴一起出发&#xff0…...

大数据开发语言 Scala(三):控制流程和函数

目录 1. Scala的控制流程 1.1 条件语句 1.2 循环语句 1.3 模式匹配 2. Scala的函数 2.1 函数定义 2.2 匿名函数 2.3 高阶函数 2.4 柯里化 3. 实践中的Scala控制流程与函数 3.1 使用模式匹配实现简单的命令解析器 3.2 使用高阶函数实现数据处理流水线 3.3 使用柯里…...

C# 元组 Tuple

C# 元组 Tuple 元组创建元组访问元组元素命名元组元素元组的类型使用元组作为方法返回值 解构解构元组的基本用法解构部分元组解构方法 元组 在C#中&#xff0c;元组&#xff08;Tuple&#xff09;是一种数据结构&#xff0c;它允许你将多个值组合成一个单一的对象。 元组在处…...

UE5文件操作

首先在虚幻引擎中创建UMyBlueprintFunctionLibrary类&#xff0c;可以在该类中写我们重复利用的功能&#xff0c;并且这些功能不依赖于特定的游戏对象&#xff0c;方便全局调用。 1.文件的读取和写入 UFUNCTION(BlueprintCallable, Category "File")static bool lo…...

Matlab|基于PMU相量测量单元进行电力系统电压幅值和相角状态估计

主要内容 程序采用三种方法对14节点和30节点电力系统状态进行评估&#xff1a; ①PMU同步相量测量单元结合加权最小二乘法&#xff08;WLS&#xff09;分析电力系统的电压幅值和相角状态&#xff1b; ②并采用牛顿-拉夫逊方法进行系统潮流计算&#xff0c;结果作为理论分…...

基于广义极大极小凹惩罚的心电信号降噪方法(MATLAB R2021B)

凸优化是数学最优化的一个子领域&#xff0c;研究定义于凸集中的凸函数最小化问题。由于心电信号降噪的过程可以理解为求信号的稀疏近似解&#xff0c;因此基于凸优化和稀疏性表达的去噪方法可用于心电信号处理。在凸优化的数学模型中&#xff0c;惩罚项的选取对最终结果会产生…...

milvus 中的集合与 database

在Milvus中&#xff0c;集合&#xff08;Collection&#xff09;和数据库&#xff08;Database&#xff09;是两个不同的概念&#xff0c;它们之间存在一定的关系。 1. 数据库&#xff08;Database&#xff09; 数据库是Milvus中的最顶层的组织单位&#xff0c;可以理解为一个…...

普华永道调查:“拥抱AI”的行业正呈现出生产率激增景象

全球知名四大会计师事务所之一的普华永道最新报告显示&#xff0c;一些最有可能将人工智能技术融入业务的企业&#xff0c;其生产率增长速度几乎是其他行业的5倍&#xff0c;这有望推动整体经济。周二&#xff08;5月21日&#xff09;发布的报告称&#xff0c;2018年至2022年间…...