模型预测笔记(一):数据清洗分析及可视化、模型搭建、模型训练和预测代码一体化和对应结果展示(可作为baseline)

模型预测

  • 一、导入关键包
  • 二、如何载入、分析和保存文件
  • 三、修改缺失值
    • 3.1 众数
    • 3.2 平均值
    • 3.3 中位数
    • 3.4 0填充
  • 四、修改异常值
    • 4.1 删除
    • 4.2 替换
  • 五、数据绘图分析
    • 5.1 饼状图
      • 5.1.1 绘制某一特征的数值情况(二分类)
    • 5.2 柱状图
      • 5.2.1 单特征与目标特征之间的图像
      • 5.2.2 多特征与目标特征之间的图像
    • 5.3 折线图
      • 5.3.1 多个特征之间的关系图
    • 5.4 散点图
  • 六、特征选择
    • 6.1、相关性分析
      • 6.1.1 皮尔逊相关系数
      • 6.1.2 斯皮尔曼相关系数
      • 6.1.3 肯德尔相关系数
      • 6.1.4 计算热力图
    • 6.2 主成分分析
    • 6.3 线性判别分析
  • 七、数据归一化
  • 八、模型搭建
  • 九、模型训练
  • 十、评估模型
  • 十一、预测模型

一、导入关键包

# 导入数据分析需要的包
import pandas as pd
import numpy as np
# 可视化包
import seaborn as sns
sns.set(style="whitegrid")
import matplotlib.pyplot as plt
%matplotlib inline
# 忽略警告信息
import warnings
warnings.filterwarnings('ignore')
# 导入数据分析需要的包
import pandas as pd
import numpy as np
from datetime import datetime# 构建多个分类器
from sklearn.ensemble import RandomForestClassifier          # 随机森林
from sklearn.svm import SVC, LinearSVC                       # 支持向量机
from sklearn.linear_model import LogisticRegression          # 逻辑回归
from sklearn.neighbors import KNeighborsClassifier           # KNN算法
from sklearn.naive_bayes import GaussianNB                   # 朴素贝叶斯
from sklearn.tree import DecisionTreeClassifier              # 决策树分类器
from xgboost import XGBClassifier
from sklearn.ensemble import AdaBoostClassifier
from sklearn.ensemble import GradientBoostingClassifier   
from sklearn.metrics import precision_score, recall_score, f1_score
from sklearn.metrics import confusion_matrix
from sklearn.model_selection import GridSearchCV  # 网格搜索
np.set_printoptions(suppress=True)# 显示中文
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

二、如何载入、分析和保存文件

df=pd.read_csv('data/dataset.csv')df.head(5)# 查看前几列数据
df.tail() # 返回CSV文件的最后几行数据。
df.info() # 显示CSV文件的基本信息,包括数据类型、列数、行数、缺失值等。
df.describe()# 对CSV文件的数值型数据进行统计描述,包括计数、均值、标准差、最小值、最大值等。
df.shape()# 返回CSV文件的行数和列数。
df['IS_WX'].unique()  # 返回CSV文件中某一列的唯一值。
df.value_counts()# 计算CSV文件中某一列中每个值的出现次数。
df.groupby('col1')['col2'] # 按照某一列的值进行分组,并对其他列进行聚合操作,如求和、计数、平均值等。
df.sort_values(by='col1') # 按照某一列的值进行排序。
df.pivot_table(values='C', index='A', columns='B', aggfunc='mean')# 创建透视表,根据指定的行和列对数据进行汇总和分析。# 保存处理后的数据集
df.to_csv('data/Telecom_data_flag.csv')

三、修改缺失值

3.1 众数

# 对每一列属性采用相应的缺失值处理方式,通过分析发现这类数据都可以采用众数的方式解决
df.isnull().sum()
modes = df.mode().iloc[0]
print(modes)
df = df.fillna(modes)
print(df.isnull().sum())

3.2 平均值

mean_values = df.mean()
print(mean_values)
df = df.fillna(mean_values)
print(df.isnull().sum())

3.3 中位数

median_values = df.median()
print(median_values)
df = df.fillna(median_values)
print(df.isnull().sum())

3.4 0填充

df = df.fillna(0)
print(df.isnull().sum())

四、修改异常值

4.1 删除

1.删除DataFrame表中全部为NaN的行

	your_dataframe.dropna(axis=0,how='all') 

2.删除DataFrame表中全部为NaN的列

	your_dataframe.dropna(axis=1,how='all') 

3.删除表中含有任何NaN的行

	your_dataframe.dropna(axis=0,how='any') 

4.删除表中含有任何NaN的列

  your_dataframe.dropna(axis=1,how='any')

4.2 替换

这里的替换可以参考前文的中位数,平均值,众数,0替换等。

	replace_value = 0.0# 这里设置 inplace 为 True,能够直接把表中的 NaN 值替换掉your_dataframe.fillna(replace_value, inplace=True)# 如果不设置 inplace,则这样写就行# new_dataframe = your_dataframe.fillna(replace_value)

五、数据绘图分析

5.1 饼状图

5.1.1 绘制某一特征的数值情况(二分类)

# 查看总体客户流失情况
churnvalue = df["LEAVE_FLAG"].value_counts()
labels = df["LEAVE_FLAG"].value_counts().index
plt.pie(churnvalue,labels=["未流失","流失"],explode=(0.1,0),autopct='%.2f%%', shadow=True,)
plt.title("客户流失率比例",size=24)
plt.show()
# 从饼形图中看出,流失客户占总客户数的很小的比例,流失率达3.58%

在这里插入图片描述

5.2 柱状图

5.2.1 单特征与目标特征之间的图像

# 粘性/忠诚度分析  包括绑定银行卡张数
fig, axes = plt.subplots(1, 1, figsize=(12,12))
plt.subplot(1,1,1) 
# palette参数表示设置颜色
gender=sns.countplot(x='BANK_NUM',hue="LEAVE_FLAG",data=df,palette="Pastel2") 
plt.xlabel("绑定银行卡张数",fontsize=16)
plt.title("LEAVE_FLAG by BANK_NUM",fontsize=18)
plt.ylabel('count',fontsize=16)
plt.tick_params(labelsize=12)     # 设置坐标轴字体大小
# 从此表可知,对于没有绑定银行卡的用户流失情况会更大,应该加强督促用户绑定银行卡

在这里插入图片描述

# 查看正常用户与流失用户在上网流量上的差别
plt.figure(figsize=(10,6))
g = sns.FacetGrid(data = df,hue = 'LEAVE_FLAG', height=4, aspect=3)
g.map(sns.distplot,'BYTE_ALL',norm_hist=True)
g.add_legend()
plt.ylabel('density',fontsize=16)
plt.xlabel('BYTE_ALL',fontsize=16)
plt.xlim(0, 100)
plt.tick_params(labelsize=13)     # 设置坐标轴字体大小
plt.tight_layout()
plt.show()
# 从上图看出,上网流量少的用户流失率相对较高。

在这里插入图片描述

5.2.2 多特征与目标特征之间的图像

这里绘制的多个二分类特征的情况是与目标特征之间的关系

# 粘性/忠诚度分析  包括是否捆绑微信、是否捆绑支付宝
# sns.countplot()函数绘制了"是否使用支付宝"(IS_ZFB)这一列的柱状图,并根据"LEAVE_FLAG"(是否离网)进行了颜色分类。
fig, axes = plt.subplots(1, 2, figsize=(12,12))
plt.subplot(1,2,1) 
# palette参数表示设置颜色
partner=sns.countplot(x="IS_ZFB",hue="LEAVE_FLAG",data=df,palette="Pastel2")
plt.xlabel("是否使用支付宝(1代表使用,0代表使用)")
plt.title("LEAVE_FLAG by IS_ZFB",fontsize=18)
plt.ylabel('count',fontsize=16)
plt.tick_params(labelsize=12)   # 设置坐标轴字体大小plt.subplot(1,2,2)
seniorcitizen=sns.countplot(x="IS_WX",hue="LEAVE_FLAG",data=df,palette="Pastel2")
plt.xlabel("是否使用微信(1代表使用,0代表使用)")
plt.title("LEAVE_FLAG by IS_WX",fontsize=18)
plt.ylabel('count',fontsize=16)
plt.tick_params(labelsize=12)   # 设置坐标轴字体大小
# 从此表可知  支付宝绑定目前对于用户流失没有影响,微信的绑定影响会稍微大点,可能是微信用户用的较多

在这里插入图片描述

# 异常性 根据用户流失情况来结合判定
covariables=["CMPLNT_NUM", "STOP_COUNT"]
fig,axes=plt.subplots(1,2,figsize=(20,12))
for i, item in enumerate(covariables):'''0,'CMPLNT_NUM'1,'STOP_COUNT''''plt.subplot(1,2,(i+1))ax=sns.countplot(x=item,hue="LEAVE_FLAG",data=df,palette="Set2")plt.xlabel(str(item),fontsize=16)plt.tick_params(labelsize=14)     # 设置坐标轴字体大小plt.title("LEAVE_FLAG by "+ str(item),fontsize=20)i=i+1
plt.tight_layout()
plt.show()
# 从此表可知 最近6个月累计投诉次数间接性的决定了用户的流失,停机天数也和用户流失成正相关。

在这里插入图片描述

5.3 折线图

5.3.1 多个特征之间的关系图

# 用户的成长性分析,结合用户流失情况。
# 包括流量趋势、语音通话次数趋势、语音通话时长趋势、交往圈趋势
# 提取特征数据列
feature1 = df["LIULIANG_B"]
feature2 = df["YUYING_COUNT"]
feature3 = df["YUYING_B"]
feature4 = df["JIAOWANG_B"]# 绘制折线图
plt.plot(feature1, label="LIULIANG_B")
plt.plot(feature2, label="YUYING_COUNT")
plt.plot(feature3, label="YUYING_B")
plt.plot(feature4, label="JIAOWANG_B")# 添加标题和标签
plt.title("Trend of User growth")
plt.xlabel("Index")
plt.ylabel("Value")# 添加图例
plt.legend()# 显示图表
plt.show()
# 从此图可以发现针对流量趋势来说,用户的波动是最大的。

在这里插入图片描述

5.4 散点图

df.plot(x="SERV_ID_COUNT", y="CDR_NUM", kind="scatter", c="red")
plt.show()

这段代码的作用是绘制一个以"SERV_ID_COUNT"为横轴,"CDR_NUM"为纵轴的散点图,并将散点的颜色设置为红色。通过这个散点图,可以直观地观察到"SERV_ID_COUNT"和"CDR_NUM"之间的关系。
在这里插入图片描述

六、特征选择

6.1、相关性分析

6.1.1 皮尔逊相关系数

plt.figure(figsize=(16,8))
df.corr()['LEAVE_FLAG'].sort_values(ascending = False).plot(kind='bar')
plt.tick_params(labelsize=14)     # 设置坐标轴字体大小
plt.xticks(rotation=45)         # 设置x轴文字转向
plt.title("Correlations between LEAVE_FLAG and variables",fontsize=20)
plt.show()
# 从图可以直观看出,YUYING_COUNT 、YUYING_B、IS_ZFB、BALANCE、JIAOWANG_B、IS_WX这六个变量与LEAVE_FLAG目标变量相关性最弱。

在这里插入图片描述

6.1.2 斯皮尔曼相关系数

plt.figure(figsize=(16,8))
df.corr(method='spearman')['LEAVE_FLAG'].sort_values(ascending = False).plot(kind='bar')
plt.tick_params(labelsize=14)     # 设置坐标轴字体大小
plt.xticks(rotation=45)         # 设置x轴文字转向
plt.title("Correlations between LEAVE_FLAG and variables",fontsize=20)
plt.show()

6.1.3 肯德尔相关系数

plt.figure(figsize=(16,8))
df.corr(method='kendall')['LEAVE_FLAG'].sort_values(ascending = False).plot(kind='bar')
plt.tick_params(labelsize=14)     # 设置坐标轴字体大小
plt.xticks(rotation=45)         # 设置x轴文字转向
plt.title("Correlations between LEAVE_FLAG and variables",fontsize=20)
plt.show()

6.1.4 计算热力图

# 计算相关性矩阵
corr_matrix = df.corr()# 绘制热力图
plt.figure(figsize=(10, 8))
sns.heatmap(corr_matrix, annot=True, cmap="coolwarm")
plt.title("Correlation Heatmap", fontsize=16)
plt.show()

6.2 主成分分析

PCA思想:构造原变量的一系列线性组合形成几个综合指标,以去除数据的相关性,并使低维数据最大程度保持原始高维数据的方差信息

一般来说在进行数据降维之前,需要先对其做归一化

from sklearn import preprocessing
X_scaled = preprocessing. scale(X)
pca = PCA(n_components=2)       # 加载PCA算法,设置降维后主成分数目为2
# n_components的值不能大于n_features(特征数)和n_classes(类别数)之间的较小值减1。
reduced_x = pca.fit_transform(X_scaled)  # 对样本进行降维
reduced_x = pd.DataFrame(reduced_x, columns = ['pca_1','pca_2'])

PCA代码:

# -*- coding:utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
from sklearn.decomposition import PCA           # 加载PCA算法包
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn import svm
import pandas as pddf = pd.read_csv(r'D:\Python\test\iris.csv')
X = df.iloc[:, 0:4]
Y = df.iloc[:, 4]
x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.2)
pca = PCA(n_components=2)       # 加载PCA算法,设置降维后主成分数目为2
# n_components的值不能大于n_features(特征数)和n_classes(类别数)之间的较小值减1。
reduced_x = pca.fit_transform(X)  # 对样本进行降维
reduced_x = pd.DataFrame(reduced_x, columns = ['pca_1','pca_2'])
print(reduced_x.head(5))# SVM分类
x_train, x_test, y_train, y_test = train_test_split(reduced_x, Y, test_size=0.2)
clf = svm.SVC(gamma='scale', decision_function_shape="ovr")    # 一对多法
# clf = svm.SVC(gamma='scale', decision_function_shape='ovo')  # 一对一法
clf.fit(x_train, y_train.astype('int'))
y_pred = clf.predict(x_test)# 可视化,画分类结果图
N, M = 500, 500  # 横纵各采样多少个值
x1_min, x2_min = x_train.min(axis=0)
x1_max, x2_max = x_train.max(axis=0)
t1 = np.linspace(x1_min, x1_max, N)
t2 = np.linspace(x2_min, x2_max, M)
x1, x2 = np.meshgrid(t1, t2)  # 生成网格采样点
x_show = np.stack((x1.flat, x2.flat), axis=1)  # 测试点
y_predict = clf.predict(x_show)
cm_light = mpl.colors.ListedColormap(['#A0FFA0', '#FFA0A0', '#A0A0FF'])
cm_dark = mpl.colors.ListedColormap(['g', 'r', 'b'])
plt.pcolormesh(x1, x2, y_predict.reshape(x1.shape), cmap=cm_light)
plt.scatter(x_train.iloc[:, 0], x_train.iloc[:, 1], c=y_train, cmap=cm_dark, marker='o', edgecolors='k')
plt.grid(True, ls=':')
plt.show()

PCA结果:
在这里插入图片描述

6.3 线性判别分析

LDA思想:最早提出是为了解决生物问题的分类问题,有监督的线性降维。使用数据的类别信息,将高维的样本线性投影到低维空间中,使得数据样本在低维空间中,数据的类别区分度最大

LDA代码:

# 1.导入所需的库和模块:
import matplotlib.pyplot as plt
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.datasets import load_iris# 2.加载数据集:
iris = load_iris()
X = iris.data
y = iris.target# 3.创建一个LDA对象并拟合数据:
# 在这里,n_components参数指定要保留的主成分数量。
lda = LinearDiscriminantAnalysis(n_components=2)
X_lda = lda.fit_transform(X, y)# 4.可以使用以下代码可视化结果:
plt.scatter(X_lda[:, 0], X_lda[:, 1], c=y)
plt.xlabel('LD1')
plt.ylabel('LD2')
plt.show()

LDA结果:
在这里插入图片描述

七、数据归一化

特征主要分为连续特征和离散特征,其中离散特征根据特征之间是否有大小关系又细分为两类。

  • 连续特征:一般采用归一标准化方式处理。
  • 离散特征:特征之间没有大小关系。
  • 离散特征:特征之间有大小关联,则采用数值映射。
# 通过归一化处理使特征数据标准为1,均值为0,符合标准的正态分布,
# 降低数值特征过大对预测结果的影响
# 除了目标特征全部做归一化,目标特征不用做,归一化会导致预测结果的解释变得困难
from sklearn.preprocessing import StandardScaler  
# 实例化一个转换器类
scaler = StandardScaler(copy=False)
target = df["LEAVE_FLAG"]
# 提取除目标特征外的其他特征
other_features = df.drop("LEAVE_FLAG", axis=1)
# 对其他特征进行归一化
normalized_features = scaler.fit_transform(other_features)
# 将归一化后的特征和目标特征重新组合成DataFrame
normalized_data = pd.DataFrame(normalized_features, columns=other_features.columns)
normalized_data["LEAVE_FLAG"] = target
normalized_data.head()

八、模型搭建

# 深拷贝
X=normalized_data.copy()
X.drop(['LEAVE_FLAG'],axis=1, inplace=True)
y=df["LEAVE_FLAG"]
#查看预处理后的数据
X.head()# 建立训练数据集和测试数据集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size = 0.3, random_state = 0)
print("原始训练集包含样本数量: ", len(X_train))
print("原始测试集包含样本数量:  ", len(X_test))
print("原始样本总数: ", len(X_train)+len(X_test))# 使用分类算法 
Classifiers=[["RandomForest",RandomForestClassifier()],["LogisticRegression",LogisticRegression(C=1000.0, random_state=30, solver="lbfgs",max_iter=100000)],["NaiveBayes",GaussianNB()],["DecisionTree",DecisionTreeClassifier()],["AdaBoostClassifier", AdaBoostClassifier()],["GradientBoostingClassifier", GradientBoostingClassifier()],["XGB", XGBClassifier()]
]

九、模型训练

from datetime import datetime
import pickle
import joblibdef get_current_time():current_time = datetime.now()formatted_time = current_time.strftime("%Y-%m-%d %H:%M:%S")return current_time, formatted_timeClassify_result=[]
names=[]
prediction=[]
i = 0for name, classifier in Classifiers:start_time, formatted_time = get_current_time()print("**********************************************************************")print("第{}个模型训练开始时间:{}  模型名称为:{}".format(i+1, formatted_time, name))classifier = classifierclassifier.fit(X_train, y_train)y_pred = classifier.predict(X_test)recall = recall_score(y_test, y_pred)precision = precision_score(y_test, y_pred)f1score = f1_score(y_test, y_pred)model_path = 'models/{}_{}_model.pkl'.format(name, round(precision, 5))print("开始保存模型文件路径为:{}".format(model_path))# 保存模型方式1#     with open('models/{}_{}_model.pkl'.format(name, precision), 'wb') as file:#         pickle.dump(classifier, file)#     file.close()# 保存模型方式2joblib.dump(classifier, model_path)end_time = datetime.now()  # 获取训练结束时间print("第{}个模型训练结束时间:{}".format(i+1, end_time.strftime("%Y-%m-%d %H:%M:%S")))print("训练耗时:", end_time - start_time)# 打印训练过程中的指标print("Classifier:", name)print("Recall:", recall)print("Precision:", precision)print("F1 Score:", f1score)print("**********************************************************************")# 保存指标结果class_eva = pd.DataFrame([recall, precision, f1score])Classify_result.append(class_eva)name = pd.Series(name)names.append(name)y_pred = pd.Series(y_pred)prediction.append(y_pred)i += 1

在这里插入图片描述

十、评估模型

召回率(recall)的含义是:原本为对的当中,预测为对的比例(值越大越好,1为理想状态)

精确率、精度(precision)的含义是:预测为对的当中,原本为对的比例(值越大越好,1为理想状态)

F1分数(F1-Score)指标综合了Precision与Recall的产出的结果

F1-Score的取值范围从0到1的,1代表模型的输出最好,0代表模型的输出结果最差。

classifier_names=pd.DataFrame(names)
# 转成列表
classifier_names=classifier_names[0].tolist()
result=pd.concat(Classify_result,axis=1)
result.columns=classifier_names
result.index=["recall","precision","f1score"]
result

在这里插入图片描述

十一、预测模型

对于h5模型

from keras.models import load_model
model = load_model('lstm_model.h5')
pred = model.predict(X, verbose=0)
print(pred)

对于pkl模型

loaded_model = joblib.load('models/{}_model.pkl'.format(name))

由于没有预测数据集,选择最后n条数为例进行预测。

# 由于没有预测数据集,选择最后n条数为例进行预测。
n = 500
pred_id = SERV_ID.tail(n)
# 提取预测数据集特征(如果有预测数据集,可以一并进行数据清洗和特征提取)
pred_x = X.tail(n)# 使用上述得到的最优模型
model = GradientBoostingClassifier()model.fit(X_train,y_train)
pred_y = model.predict(pred_x) # 预测值# 预测结果
predDf = pd.DataFrame({'SERV_ID':pred_id, 'LEAVE_FLAG':pred_y})
print("*********************原始的标签情况*********************")
print(df.tail(n)['LEAVE_FLAG'].value_counts())
print("*********************预测的标签情况*********************")
print(predDf['LEAVE_FLAG'].value_counts())
print("*********************预测的准确率*********************")
min1 = min(df.tail(n)['LEAVE_FLAG'].value_counts()[0],predDf['LEAVE_FLAG'].value_counts()[0])
min2 = min(df.tail(n)['LEAVE_FLAG'].value_counts()[1],predDf['LEAVE_FLAG'].value_counts()[1])
print("{}%".format(round((min1+min2)/n,3)*100))
# 由于没有预测数据集,选择最后n条数为例进行预测。
n = 500 # 预测的数量
pred_id = SERV_ID.tail(n)
# 提取预测数据集特征(如果有预测数据集,可以一并进行数据清洗和特征提取)
pred_x = X.tail(n)
# 加载模型
loaded_model = joblib.load('models/GradientBoostingClassifier_0.77852_model.pkl')
# 使用加载的模型进行预测
pred_y = loaded_model.predict(pred_x)
# 预测结果
predDf = pd.DataFrame({'SERV_ID':pred_id, 'LEAVE_FLAG':pred_y})
print("*********************原始的标签情况*********************")
print(df.tail(n)['LEAVE_FLAG'].value_counts())
print("*********************预测的标签情况*********************")
print(predDf['LEAVE_FLAG'].value_counts())
print("*********************预测的准确率*********************")
min1 = min(df.tail(n)['LEAVE_FLAG'].value_counts()[0],predDf['LEAVE_FLAG'].value_counts()[0])
min2 = min(df.tail(n)['LEAVE_FLAG'].value_counts()[1],predDf['LEAVE_FLAG'].value_counts()[1])
print("{}%".format(round((min1+min2)/n,3)*100))

在这里插入图片描述

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

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

相关文章

Mysql性能优化:什么是索引下推?

导读 索引下推(index condition pushdown )简称ICP,在Mysql5.6的版本上推出,用于优化查询。 在不使用ICP的情况下,在使用非主键索引(又叫普通索引或者二级索引)进行查询时,存储引擎…

容斥原理 博弈论(多种Nim游戏解法)

目录 容斥原理容斥原理的简介能被整除的数(典型例题)实现思路代码实现扩展:用DPS实现 博弈论博弈论中的相关性质博弈论的相关结论先手必败必胜的证明Nim游戏(典型例题)代码实现 台阶-Nim游戏(典型例题&…

Java多态详解(1)

多态 多态的概念 所谓多态,通俗地讲,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。 比如: 这一时间爆火的“现代纪录片”中,麦克阿瑟总是对各种“名人”有不同的评价&…

算法通关村第十关 | 归并排序

1. 归并排序原理 归并排序(MERARE-SORT)简单来说就是将大的序列先视为若干个比较小的数组,分成比较小的结构,然后是利用归并的思想实现的排序方法,该算法采用经典的分治策略(分就是将问题分成一些小的问题分…

【Axure模板】APP帮助中心原型,在线客服意见反馈模块高保真原型

作品概况 页面数量:共 10 页 兼容软件:Axure RP 9/10,不支持低版本 应用领域:原型设计模板 作品申明:页面内容仅用于功能演示,无实际功能 作品特色 该模板作品为APP帮助与客服的通用模块,…

golang操作excel的高性能库——excelize/v2

目录 介绍文档与源码安装快速开始创建 Excel 文档读取 Excel 文档打开数据流流式写入 [相关 Excel 开源类库性能对比](https://xuri.me/excelize/zh-hans/performance.html) 介绍 Excelize是一个纯Go编写的库,提供了一组功能,允许你向XLAM / XLSM / XLS…

【Kubernetes】Kubernetes的Pod控制器

Pod控制器 一、Pod 控制器的概念1. Pod 控制器及其功用2. Pod 控制器有多种类型2.1 ReplicaSet2.2 Deployment2.3 DaemonSet2.4 StatefulSet2.5 Job2.6 Cronjob 3. Pod 与控制器之间的关系 二、Pod 控制器的使用1. Deployment2. SatefulSet2.1 为什么要有headless?2…

数据挖掘 | 零代码采集房源数据,支持自动翻页、数据排重等

1 前言 城市规划、商业选址等应用场景中经常会对地区房价、地域价值进行数据分析,其中地区楼盘房价是分析数据中重要的信息参考点,一些互联网网站上汇聚了大量房源信息,通过收集此类数据,能够对地区房价的分析提供参考依据。 如何…

216、仿真-基于51单片机温度烟雾人体感应布防报警Proteus仿真设计(程序+Proteus仿真+原理图+配套资料等)

毕设帮助、开题指导、技术解答(有偿)见文未 目录 一、硬件设计 二、设计功能 三、Proteus仿真图 四、原理图 五、程序源码 资料包括: 需要完整的资料可以点击下面的名片加下我,找我要资源压缩包的百度网盘下载地址及提取码。 方案选择 单片机的选…

Python学习笔记_进阶篇(一)_浅析tornado web框架

tornado简介 1、tornado概述 Tornado就是我们在 FriendFeed 的 Web 服务器及其常用工具的开源版本。Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于…

2023国赛数学建模思路 - 复盘:人力资源安排的最优化模型

文章目录 0 赛题思路1 描述2 问题概括3 建模过程3.1 边界说明3.2 符号约定3.3 分析3.4 模型建立3.5 模型求解 4 模型评价与推广5 实现代码 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 描述 …

衣服材质等整理(时常更新)

参考文章&图片来源 https://zhuanlan.zhihu.com/p/390341736 00. 天然纤维 01. 化学纤维 02. 聚酯纤维(即,涤纶) 一种由有机二元酸和二元醇通过化学缩聚制成的合成纤维。具有出色的抗皱性和保形性,所制衣物在穿着过程中不容…

爬虫逆向实战(十四)--某培训平台登录

一、数据接口分析 主页地址:某培训平台 1、抓包 通过抓包可以发现登录是表单提交到j_spring_security_check 2、判断是否有加密参数 请求参数是否加密? 通过查看“载荷”模块可以发现有一个j_password加密参数 请求头是否加密? 无响应是…

2024浙大MBA/MEM/MPA四个月冲刺备考策略

近期收到很多考生的咨询:距离联考就仅剩四个多月的时间,这个管理类联考的难度如何?主要考些什么内容?现在才开始备考还有希望上岸浙大吗?是不是要等到明年在开始备考比较合适?那么今天在这里小立老师就跟大…

CentOS系统环境搭建(十二)——CentOS7安装Elasticsearch

centos系统环境搭建专栏🔗点击跳转 CentOS 7.9安装Elasticsearch 7.17.6 文章目录 CentOS 7.9安装Elasticsearch 7.17.61.下载2.上传3.解压4.调整es占用内存5.修改es默认Java为本地Java6.修改elasticsearch配置文件7.创建用户8.Elasticsearch 后台启动与关闭9.es管…

查看 Linux 内核版本的几种方法

uname -a uname -srm uname -r 分拆:Linux 5.13.0-19-generic x86 64 5-内核版本 13-主修订版本 0-19 -次要修订版本 过查看 /proc/version 文件确认 /proc 目录包含虚拟文件,其中包含有关系统内存,CPU内核,已安装文件系统等的信…

【C#】条码管理操作手册

前言:本文档为条码管理系统操作指南,介绍功能使用、参数配置、资源链接,以及异常的解决等。思维导图如下: 一、思维导图 二、功能操作–条码打印(客户端) 2.1 参数设置 功能介绍:二维码图片样…

Windows定时任务计划无法显示任务程序界面的问题解决

笔者这两天写了一个python脚本程序,用来自动从公司的主数据系统获取数据,并按格式编制成excel。脚本程序编写一切顺利,运行结果很是完美,笔者很是舒心。但在最后一步,用上班的电脑每天早上定时运行它时,出了…

JAVA设计模式总结之23种设计模式

一、什么是设计模式 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计…

计算复杂度基础

1. 抽象问题 抽象问题包括决策问题和优化问题 注意:描述中,I的缩写是Instance,S的缩写是Solution。 2. 决策问题 3. 优化问题 将一个优化问题转换为决策问题后,不会变的更难。 \color {green}将一个优化问题转换为决策问题后&…