模型预测笔记(一):数据清洗及可视化、模型搭建、模型训练和预测代码一体化和对应结果展示(可作为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.2 斯皮尔曼相关系数
    • 6.3 肯德尔相关系数
    • 6.4 计算热力图
  • 七、数据归一化
  • 八、模型搭建
  • 九、模型训练
  • 十、评估模型
  • 十一、预测模型

一、导入关键包

# 导入数据分析需要的包
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.unique()  # 返回CSV文件中某一列的唯一值。
df.value_counts()# 计算CSV文件中某一列中每个值的出现次数。
df.groupby() # 按照某一列的值进行分组,并对其他列进行聚合操作,如求和、计数、平均值等。
df.sort_values()# 按照某一列的值进行排序。
df.pivot_table()# 创建透视表,根据指定的行和列对数据进行汇总和分析。# 保存处理后的数据集
3df.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 皮尔逊相关系数

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.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.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.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()

七、数据归一化

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

  • 连续特征:一般采用归一标准化方式处理。
  • 离散特征:特征之间没有大小关系。
  • 离散特征:特征之间有大小关联,则采用数值映射。
# 通过归一化处理使特征数据标准为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/40453.shtml

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

相关文章

OpenCV基本操作——算数操作

目录 图像的加法图像的混合 图像的加法 两个图像应该具有相同的大小和类型,或者第二个图像可以是标量值 注意:OpenCV加法和Numpy加法之间存在差异。OpenCV的加法是饱和操作,而Numpy添加的是模运算 import numpy as np import cv2 as cv imp…

[数据集][目标检测]钢材表面缺陷目标检测数据集VOC格式2279张10类别

数据集格式:Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):2279 标注数量(xml文件个数):2279 标注类别数:10 标注类别名称:["yueyawan",&…

jenkins 连接服务器,提示Can‘t connect to server

在Jenkins 添加服务器时,提示 Cant connect to server,如图 搞了好久,不知道为什么不行~原来是行的,现在删了 新建一个也不行。

2023牛客暑期多校训练营8-C Clamped Sequence II

2023牛客暑期多校训练营8-C Clamped Sequence II https://ac.nowcoder.com/acm/contest/57362/C 文章目录 2023牛客暑期多校训练营8-C Clamped Sequence II题意解题思路代码 题意 解题思路 先考虑不加紧密度的情况,要支持单点修改,整体查询&#xff0…

[C++]笔记 - 知识点积累

一.运算符的优先级 一共15个级别 最高优先级 : () []最低优先级 :逗号表达式倒数第二低优先级 : 赋值和符合赋值(,,-...) ! >算术运算符 > 关系运算符 > && >> || >赋值运算符 二.数据类型转换 隐式类型转换 算数转换 char int long longlong flo…

解决Java中的“Unchecked cast: java.lang.Object to java.util.List”问题

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

搜索二叉树

目录 搜索二叉树的性质 搜索二叉树的实现、 插入 删除 代码 在以前我们学过二叉树,但是在对二叉树的学习中发现,似乎二叉树并没有什么作用,要论增删它比不上链表,论随机访问也没法和顺序表比,对于当时的我们是一头雾水,那么现在它的功能终于是体现出来了,这里就是我们要讲的…

[Go版]算法通关村第十一关白银——位运算的高频算法题

目录 专题1:位移的妙用题目:位1的个数(也被称为汉明重量)解法1:遍历所有位,判断每个位的数字是否是1Go代码 解法2:依次消除每个1的位 numnum&(num-1)Go代码 题目:比特位计数思路…

Mac 卸载appium

安装了最新版的appium 2.0.1,使用中各种问题,卡顿....,最终决定回退的。记录下卸载的过程 1.打开终端应用程序 2.卸载全局安装的 Appium 运行以下命令以卸载全局安装的 Appium: npm uninstall -g appium 出现报错:Error: EACCES: permiss…

云安全攻防(十二)之 手动搭建 K8S 环境搭建

手动搭建 K8S 环境搭建 首先前期我们准备好三台 Centos7 机器,配置如下: 主机名IP系统版本k8s-master192.168.41.141Centos7k8s-node1192.168.41.142Centos7k8s-node2192.168.41.143Centos7 前期准备 首先在三台机器上都执行如下的命令 # 关闭防火墙…

postman测试后端增删改查

目录 一、本文介绍 二、准备工作 (一)新建测试 (二)默认url路径查看方法 三、增删改查 (一)查询全部 (二)增加数据 (三)删除数据 (四&…

nginx反向代理流程

一、nginx反向代理流程 反向代理:使用代理服务器来接受internet上的连接请求,然后将请求转发给内部网络中的上游服务器,并将上游服务器得到的结果返回给请求连接的客户端,代理服务器对外表现就是一个web服务器。Nginx就经常拿来做…

【内网穿透】如何实现在外web浏览器远程访问jupyter notebook服务器

文章目录 前言1. Python环境安装2. Jupyter 安装3. 启动Jupyter Notebook4. 远程访问4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5. 固定公网地址 前言 Jupyter Notebook,它是一个交互式的数据科学和计算环境,支持多种编程语言,如…

【爱书不爱输的程序猿】公网访问本地搭建的WEB服务器之详细教程

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流 本地电脑搭建Web服务器并用cpolar发布至公网访问 前言1. 首先将PHPStudy、WordPress、cpolar下载到电脑2. 安装PHPStudy3. 安装cpolar,进入Web-UI界面4.安装wordpress5.…

KU Leuven TU Berlin 推出“RobBERT”,一款荷兰索塔 BERT

荷兰语是大约24万人的第一语言,也是近5万人的第二语言,是继英语和德语之后第三大日耳曼语言。来自比利时鲁汶大学和柏林工业大学的一组研究人员最近推出了基于荷兰RoBERTa的语言模型RobBERT。 谷歌的BERT(来自Transformers的B idirectional …

由浅入深学习Tapable

文章目录 由浅入深学习TapableTapable是什么Tapable的Hook分类同步和异步的 使用Sync*同步类型钩子基本使用bailLoopWaterfall Async*异步类型钩子ParallelSeries 由浅入深学习Tapable webpack有两个非常重要的类:Compiler和Compilation。他们通过注入插件的方式&a…

【数据分析入门】Numpy进阶

目录 一、数据重塑1.1 透视1.2 透视表1.3 堆栈/反堆栈1.3 融合 二、迭代三、高级索引3.1 基础选择3.2 通过isin选择3.3 通过Where选择3.4 通过Query选择3.5 设置/取消索引3.6 重置索引3.6.1 前向填充3.6.2 后向填充 3.7 多重索引 四、重复数据五、数据分组5.1 聚合5.2 转换 六、…

回溯算法详解

目录 回溯算法详解 回溯VS递归 回溯算法的实现过程 n个结点构造多本节要讨论的是当给定 n(n>0)个结点时,可以构建多少种形态不同的树。 回溯算法详解 回溯算法,又称为“试探法”。解决问题时,每进行一步&#…

主成分分析Python代码

对于主成分分析详细的介绍:主成分分析(PCA)原理详解https://blog.csdn.net/zhongkelee/article/details/44064401 import numpy as np import pandas as pd标准PCA算法 def standeredPCA(data,N): #data:…

十种排序算法(附动图)

排序算法 一、基本介绍 ​ 排序算法比较基础,但是设计到很多计算机科学的想法,如下: ​ 1、比较和非比较的策略 ​ 2、迭代和递归的实现 ​ 3、分而治之思想 ​ 4、最佳、最差、平均情况时间复杂度分析 ​ 5、随机算法 二、排序算法的分类 …