使用k-means及k-prototype对混合型数据集进行聚类分析
1. 分析目标
本项目旨在使用聚类算法对110个城市进行分类与排序,以寻找客观真实的城市分层方法、支持业务运营与决策。
2. 数据集
数据集来源于某互联网公司,特征值标签已做脱敏处理。数据集尺寸为111行×5列,第一行为标题行,其余110行为实例。
- 第一列:城市名,将作为index不参与模型计算;
- 第二列:特征值a,以数值表现的分类变量,1代表评价最好、4代表最差;
- 第三列:特征值b,数值型变量,数值越高对业务积极影响越大;
- 第四列:特征值c,数值型变量,数值越高对业务消极影响越大;
- 第五列:特征值d,数值型变量,数值越高对业务积极影响越大。
3. 方法论
首先,由于数据集呈现分类变量与数值变量混合的特点,本次数据分析将采用以下两种算法并在分析结束后进行对比择优:
- K-means算法:需要将分类变量a转换为哑变量,使其成为数值型变量,然后通过计算欧几里得距离得出聚类结果。算法运行结束后将使用轮廓系数评价聚类效果。
- K-prototype算法:无需创建哑变量,将分别为分类变量计算汉明距离、为数值型变量计算欧几里得距离然后得出聚类结果。算法运行结束后将使用成本函数评价聚类效果。
其次,数值型变量b、c、d的量纲明显不等,为避免量纲影响距离计算中不同变量的权重,需要对变量b、c、d进行处理。由于不知道是否符合正态分布,在这里使用归一化而非标准化。
最后,由于机器无法理解业务场景,算法本身无法对不同聚类进行排序。在找到合理聚类方法后需要人工构建一个聚类评价指标以实现排序。
本项目基于python 3.7.3,使用的库包括pandas、numpy、sklearn、matplotlib、seaborn、kmodes,具体代码详见附录。
4. 预处理
预处理步骤包括:
- 使用MinMaxScaler对变量b,c,d进行归一化
- 使用get_dummies为变量a创建哑变量
处理结束后的数据集如下所示(仅展示前五行为例):
城市 |
a_1 |
a_2 |
a_3 |
a_4 |
a |
b |
c |
d |
三亚 |
0 |
0 |
1 |
0 |
3 |
0.016206 |
0.009198 |
0.00757 |
上海 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
东莞 |
0 |
0 |
1 |
0 |
3 |
0.314485 |
0.187345 |
0.299205 |
中山 |
0 |
0 |
0 |
1 |
4 |
0.109215 |
0.060833 |
0.057343 |
临沂 |
0 |
0 |
0 |
1 |
4 |
0.106044 |
0.035673 |
0.018547 |
5. 分析过程
5.1 K-means
- 参与运算的列:a_1,a_2,a_3,a_4,b,c,d
- 手肘法求解最优k值(聚类数量):k=3
- k=3时的轮廓系数评价:
- 聚类间距:
- 解读:虽然聚类间距良好,但是聚类2的轮廓系数过低,说明聚类2的聚合效果不好。在检视聚类2时发现其包含北京、上海、牡丹江、大庆等城市,有悖常规认知,说明该聚类不合理。
- 结论:k-means聚类结果不可用。
5.2 K-prototype
- 参与运算的列:a,b,c,d
- 手肘法求解最优k(使用成本函数制图):k=4
注1:python中计数从0开始计,所以横轴数值为聚类数量-1
注2:此方法结果具有随机性,有时会产生不止一个肘点,存在最优解和次优解。为确保k=3为最优解,此过程被运行了十次,最后验证最优解众数为3。
- 解读:分为四个聚类时,四个聚类所包含的城市符合一、二、三、四线城市的常规认知,说明聚类接近真实情况。
- 结论:K-prototype的聚类结果较为真实客观,可以采用。
6. 聚类排序
为实现聚类排序,首先调取了每个聚类的质点:
|
Centroids(Min-max Scaled) |
Centroids(原数据) |
|||||||
Cluster |
a |
b |
c |
d |
a |
b |
c |
d |
Count |
0 |
4 |
0.05 |
0.02 |
0.01 |
4 |
3853.19 |
6638.98 |
56.46 |
48 |
1 |
2 |
0.66 |
0.52 |
0.59 |
2 |
38517.47 |
178333.07 |
3119.33 |
6 |
2 |
2 |
0.31 |
0.17 |
0.15 |
2 |
18678.75 |
60002.46 |
785.96 |
24 |
3 |
3 |
0.10 |
0.04 |
0.03 |
3 |
7053.54 |
16004.42 |
148.87 |
32 |
此处需要基于业务理解构建一个作为聚类评价指标。四个特征值的业务重要程度一致,因此需要采用等权重计算每个特征值的,但是变量c对总的贡献为负。但是,考虑到量纲的影响,仍需使用归一化的b、c、d作为其。如果将a作为数值型变量进行考量,也应当进行归一化处理,并且应注意数值越大实际上对的贡献越低。综上所述,的构建方法如下:
其中,
经计算,每个聚类的及排名如下:
Cluster |
Score |
Ranking |
0 |
0.04 |
4 |
1 |
1.40 |
1 |
2 |
0.95 |
2 |
3 |
0.42 |
3 |
经检视,聚类1、2、3、0非常接近常规认知中的一、二、三、四线城市,证明排序合理。
7. 结论
经过使用k-prototype算法和构建聚类评价指标,成功将110个城市分为四个聚类及聚类排序。同时运用评价指标,结合归一化数据可对个体城市实现细粒度上的评价,从而得到每个聚类内部的城市排名情况或跨四个聚类的总体城市排名:
城市 |
a |
b |
c |
d |
cluster |
cluster_tag |
in-cluster_score |
in-cluster_ranking |
上海 |
1 |
57874 |
342463 |
5286 |
1 |
tier1 |
1.510 |
1 |
北京 |
2 |
40210 |
182647 |
3457 |
1 |
tier1 |
1.162 |
2 |
深圳 |
3 |
37620 |
160159 |
3228 |
1 |
tier1 |
1.116 |
3 |
苏州 |
2 |
34424 |
117925 |
1871 |
1 |
tier1 |
0.897 |
4 |
广州 |
3 |
29242 |
105356 |
2288 |
1 |
tier1 |
0.875 |
5 |
杭州 |
2 |
31735 |
161448 |
2586 |
1 |
tier1 |
0.834 |
6 |
城市 |
a |
b |
c |
d |
cluster |
cluster_tag |
in-cluster_score |
in-cluster_ranking |
东莞 |
3 |
18958 |
64856 |
1583 |
2 |
tier2 |
0.587 |
1 |
南京 |
2 |
23572 |
84459 |
1266 |
2 |
tier2 |
0.592 |
2 |
南昌 |
2 |
10282 |
36616 |
639 |
2 |
tier2 |
0.260 |
3 |
厦门 |
1 |
15059 |
70708 |
1073 |
2 |
tier2 |
0.369 |
4 |
合肥 |
2 |
18372 |
75802 |
724 |
2 |
tier2 |
0.377 |
5 |
哈尔滨 |
2 |
16126 |
29936 |
332 |
2 |
tier2 |
0.377 |
6 |
嘉兴 |
2 |
10918 |
35879 |
370 |
2 |
tier2 |
0.228 |
7 |
大连 |
2 |
13676 |
31977 |
358 |
2 |
tier2 |
0.311 |
8 |
天津 |
2 |
25428 |
65309 |
1010 |
2 |
tier2 |
0.649 |
9 |
宁波 |
2 |
21712 |
64354 |
928 |
2 |
tier2 |
0.538 |
10 |
常州 |
2 |
12683 |
29769 |
355 |
2 |
tier2 |
0.290 |
11 |
成都 |
3 |
30619 |
95611 |
918 |
2 |
tier2 |
0.681 |
12 |
无锡 |
2 |
18622 |
42607 |
632 |
2 |
tier2 |
0.463 |
13 |
武汉 |
2 |
21566 |
92360 |
1399 |
2 |
tier2 |
0.541 |
14 |
沈阳 |
2 |
23688 |
67889 |
735 |
2 |
tier2 |
0.543 |
15 |
泉州 |
2 |
15615 |
63454 |
761 |
2 |
tier2 |
0.346 |
16 |
温州 |
1 |
22346 |
72011 |
903 |
2 |
tier2 |
0.527 |
17 |
湖州 |
2 |
6299 |
17706 |
156 |
2 |
tier2 |
0.118 |
18 |
福州 |
1 |
15067 |
82398 |
1031 |
2 |
tier2 |
0.327 |
19 |
西安 |
3 |
23634 |
57532 |
1118 |
2 |
tier2 |
0.645 |
20 |
重庆 |
3 |
31119 |
76562 |
656 |
2 |
tier2 |
0.701 |
21 |
金华 |
2 |
15317 |
48394 |
568 |
2 |
tier2 |
0.346 |
22 |
长沙 |
2 |
19307 |
77104 |
822 |
2 |
tier2 |
0.416 |
23 |
青岛 |
2 |
18305 |
56769 |
526 |
2 |
tier2 |
0.393 |
24 |
城市 |
a |
b |
c |
d |
cluster |
cluster_tag |
in-cluster_score |
in-cluster_ranking |
三亚 |
3 |
2025 |
4000 |
42 |
3 |
tier3 |
0.023 |
1 |
九江 |
3 |
4582 |
8585 |
56 |
3 |
tier3 |
0.080 |
2 |
南宁 |
3 |
9909 |
23157 |
361 |
3 |
tier3 |
0.237 |
3 |
南通 |
3 |
10861 |
29783 |
219 |
3 |
tier3 |
0.216 |
4 |
台州 |
3 |
11892 |
27683 |
221 |
3 |
tier3 |
0.250 |
5 |
吉林 |
3 |
4658 |
6652 |
31 |
3 |
tier3 |
0.083 |
6 |
咸阳 |
3 |
3754 |
5903 |
49 |
3 |
tier3 |
0.065 |
7 |
太原 |
3 |
7675 |
16814 |
248 |
3 |
tier3 |
0.175 |
8 |
惠州 |
3 |
9378 |
29550 |
448 |
3 |
tier3 |
0.220 |
9 |
扬州 |
3 |
6396 |
16309 |
141 |
3 |
tier3 |
0.122 |
10 |
新乡 |
3 |
4417 |
6036 |
58 |
3 |
tier3 |
0.084 |
11 |
泰州 |
3 |
5609 |
15036 |
57 |
3 |
tier3 |
0.089 |
12 |
济南 |
3 |
13485 |
32222 |
297 |
3 |
tier3 |
0.293 |
13 |
淄博 |
3 |
4308 |
9902 |
68 |
3 |
tier3 |
0.071 |
14 |
湛江 |
3 |
3243 |
6016 |
36 |
3 |
tier3 |
0.048 |
15 |
潍坊 |
3 |
8754 |
20406 |
201 |
3 |
tier3 |
0.184 |
16 |
烟台 |
3 |
7611 |
15206 |
110 |
3 |
tier3 |
0.152 |
17 |
珠海 |
3 |
4775 |
12372 |
116 |
3 |
tier3 |
0.085 |
18 |
盐城 |
3 |
7908 |
21129 |
113 |
3 |
tier3 |
0.143 |
19 |
石家庄 |
3 |
13750 |
29776 |
462 |
3 |
tier3 |
0.339 |
20 |
绍兴 |
3 |
7073 |
22799 |
188 |
3 |
tier3 |
0.130 |
21 |
芜湖 |
3 |
4555 |
11467 |
63 |
3 |
tier3 |
0.072 |
22 |
荆州 |
3 |
3325 |
4988 |
20 |
3 |
tier3 |
0.050 |
23 |
营口 |
3 |
3574 |
5605 |
19 |
3 |
tier3 |
0.055 |
24 |
蚌埠 |
3 |
2961 |
6873 |
38 |
3 |
tier3 |
0.039 |
25 |
赣州 |
3 |
7994 |
16110 |
172 |
3 |
tier3 |
0.171 |
26 |
郑州 |
3 |
18906 |
42977 |
432 |
3 |
tier3 |
0.432 |
27 |
银川 |
3 |
6829 |
10248 |
149 |
3 |
tier3 |
0.153 |
28 |
镇江 |
3 |
6047 |
20610 |
101 |
3 |
tier3 |
0.092 |
29 |
长春 |
3 |
12492 |
22492 |
208 |
3 |
tier3 |
0.279 |
30 |
黄石 |
3 |
2118 |
4601 |
22 |
3 |
tier3 |
0.020 |
31 |
齐齐哈尔 |
3 |
4850 |
6836 |
18 |
3 |
tier3 |
0.085 |
32 |
城市 |
a |
b |
c |
d |
cluster |
cluster_tag |
in-cluster_score |
in-cluster_ranking |
中山 |
4 |
7305 |
21639 |
305 |
0 |
tier4 |
0.161 |
1 |
临沂 |
4 |
7125 |
13044 |
100 |
0 |
tier4 |
0.143 |
2 |
乌鲁木齐 |
4 |
1825 |
858 |
5 |
0 |
tier4 |
0.020 |
3 |
佛山 |
4 |
11138 |
33369 |
560 |
0 |
tier4 |
0.277 |
4 |
佳木斯 |
1 |
3781 |
6769 |
20 |
0 |
tier4 |
0.057 |
5 |
兰州 |
4 |
5566 |
10263 |
128 |
0 |
tier4 |
0.115 |
6 |
包头 |
4 |
2032 |
1750 |
27 |
0 |
tier4 |
0.027 |
7 |
呼伦贝尔 |
4 |
2499 |
2107 |
5 |
0 |
tier4 |
0.034 |
8 |
呼和浩特 |
4 |
3444 |
3478 |
63 |
0 |
tier4 |
0.066 |
9 |
唐山 |
4 |
4240 |
5776 |
25 |
0 |
tier4 |
0.073 |
10 |
商丘 |
4 |
4619 |
5356 |
17 |
0 |
tier4 |
0.083 |
11 |
大同 |
4 |
2213 |
2399 |
8 |
0 |
tier4 |
0.026 |
12 |
大庆 |
2 |
4379 |
4913 |
12 |
0 |
tier4 |
0.077 |
13 |
威海 |
2 |
5125 |
10654 |
83 |
0 |
tier4 |
0.094 |
14 |
安阳 |
4 |
2582 |
2371 |
21 |
0 |
tier4 |
0.038 |
15 |
宜昌 |
4 |
3298 |
3941 |
15 |
0 |
tier4 |
0.052 |
16 |
宝鸡 |
4 |
2565 |
1789 |
12 |
0 |
tier4 |
0.038 |
17 |
宿迁 |
4 |
3054 |
5249 |
19 |
0 |
tier4 |
0.042 |
18 |
岳阳 |
4 |
2784 |
3660 |
13 |
0 |
tier4 |
0.039 |
19 |
延边 |
4 |
3315 |
4166 |
6 |
0 |
tier4 |
0.050 |
20 |
开封 |
4 |
3523 |
2555 |
8 |
0 |
tier4 |
0.060 |
21 |
徐州 |
4 |
8302 |
16204 |
87 |
0 |
tier4 |
0.163 |
22 |
揭阳 |
2 |
4710 |
11208 |
90 |
0 |
tier4 |
0.082 |
23 |
日照 |
4 |
1190 |
2352 |
4 |
0 |
tier4 |
-0.002 |
24 |
昆明 |
4 |
8389 |
18251 |
177 |
0 |
tier4 |
0.176 |
25 |
景德镇 |
1 |
2304 |
5690 |
63 |
0 |
tier4 |
0.029 |
26 |
柳州 |
4 |
2279 |
4194 |
4 |
0 |
tier4 |
0.022 |
27 |
桂林 |
4 |
3379 |
4137 |
23 |
0 |
tier4 |
0.055 |
28 |
江门 |
4 |
2978 |
5948 |
27 |
0 |
tier4 |
0.040 |
29 |
泸州 |
4 |
2023 |
2084 |
5 |
0 |
tier4 |
0.021 |
30 |
洛阳 |
4 |
4999 |
4765 |
38 |
0 |
tier4 |
0.099 |
31 |
济宁 |
4 |
6007 |
11411 |
93 |
0 |
tier4 |
0.117 |
32 |
海口 |
4 |
4678 |
17398 |
148 |
0 |
tier4 |
0.074 |
33 |
淮北 |
4 |
1105 |
1636 |
8 |
0 |
tier4 |
-0.001 |
34 |
淮安 |
4 |
4921 |
8405 |
34 |
0 |
tier4 |
0.085 |
35 |
牡丹江 |
1 |
4140 |
5646 |
20 |
0 |
tier4 |
0.070 |
36 |
秦皇岛 |
4 |
2449 |
2005 |
18 |
0 |
tier4 |
0.035 |
37 |
绵阳 |
4 |
2895 |
4501 |
28 |
0 |
tier4 |
0.042 |
38 |
肇庆 |
4 |
2932 |
5465 |
47 |
0 |
tier4 |
0.044 |
39 |
舟山 |
1 |
2430 |
6081 |
40 |
0 |
tier4 |
0.027 |
40 |
西宁 |
4 |
1710 |
1616 |
19 |
0 |
tier4 |
0.017 |
41 |
贵阳 |
4 |
4506 |
7772 |
181 |
0 |
tier4 |
0.104 |
42 |
赤峰 |
4 |
3819 |
3971 |
19 |
0 |
tier4 |
0.066 |
43 |
运城 |
4 |
2850 |
1866 |
3 |
0 |
tier4 |
0.044 |
44 |
连云港 |
4 |
3454 |
6768 |
40 |
0 |
tier4 |
0.052 |
45 |
通辽 |
4 |
1702 |
1491 |
2 |
0 |
tier4 |
0.014 |
46 |
遵义 |
4 |
4835 |
5303 |
28 |
0 |
tier4 |
0.091 |
47 |
鞍山 |
4 |
3555 |
6398 |
12 |
0 |
tier4 |
0.051 |
48 |
附录:代码
K-means:
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
%matplotlib inline
import pandas as pd
import numpy as np
from sklearn import preprocessing
from sklearn.cluster import KMeans
from sklearn.cluster import MiniBatchKMeans
from yellowbrick.cluster import KElbowVisualizer
from yellowbrick.cluster import SilhouetteVisualizer
from yellowbrick.cluster import InterclusterDistance
from yellowbrick.model_selection import LearningCurve
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style("whitegrid")
sns.set_context("notebook")df = pd.read_csv('practice_2_clustering_with_cat.csv')
df.head()
df['a'] = df['a'].astype(object)
dummies = pd.get_dummies(df['a'], prefix='a')
bcd = df.iloc[:, 2:5]min_max_scaler = preprocessing.MinMaxScaler()
x_scaled = min_max_scaler.fit_transform(bcd)
X_scaled = pd.DataFrame(x_scaled,columns=bcd.columns)
X_scaled = pd.concat([X_scaled,dummies], axis=1,)# Elbow method 手肘法
plt.figure(figsize=(12,9))model = KMeans()visualizer = KElbowVisualizer(model, k=(1,8))
visualizer.fit(X_scaled)
visualizer.show()model=MiniBatchKMeans(n_clusters=3)
model.fit(X_scaled)
print("Predicted labels ----")
model.predict(X_scaled)
df['cluster'] = model.predict(X_scaled)plt.figure(figsize=(12,9))model=MiniBatchKMeans(n_clusters=3).fit(X_scaled)visualizer = SilhouetteVisualizer(model, colors='yellowbrick')
visualizer.fit(X_scaled)
visualizer.show()plt.figure(figsize=(12,9))visualizer = InterclusterDistance(model, min_size=10000)
visualizer.fit(X_scaled)
visualizer.show()df = pd.concat([df,X_scaled], axis=1)
df
K-prototype
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
%matplotlib inline
import pandas as pd
import numpy as np
from sklearn import preprocessing
from sklearn.cluster import KMeans
from sklearn.cluster import MiniBatchKMeans
from yellowbrick.cluster import KElbowVisualizer
from yellowbrick.cluster import SilhouetteVisualizer
from yellowbrick.cluster import InterclusterDistance
from yellowbrick.model_selection import LearningCurve
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style("whitegrid")
sns.set_context("notebook")
import numpy as np
import pandas as pd
from kmodes.kprototypes import KPrototypes
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as snsdf = pd.read_csv('practice_2_clustering_with_cat.csv')
df.head()
df['a'] = df['a'].astype(object)X = df.iloc[:, 1:5]
X.columns = ['a','b','c','d']
X.head()min_max_scaler = preprocessing.MinMaxScaler()
bcd = X.iloc[:,1:4]
x_scaled = min_max_scaler.fit_transform(bcd)
X_scaled = pd.DataFrame(x_scaled,columns=bcd.columns)
X = pd.concat([df['a'],X_scaled], axis=1)X_matrix = X.values
cost = []
for num_clusters in list(range(1,9)):kproto = KPrototypes(n_clusters=num_clusters, init='Cao')kproto.fit_predict(X_matrix, categorical=[0])cost.append(kproto.cost_)plt.plot(cost)
pd.DataFrame(cost)kproto = KPrototypes(n_clusters=6, init='Cao')
clusters = kproto.fit_predict(X_matrix, categorical=[0])
print('====== Centriods ======')
kproto.cluster_centroids_
print()
print('====== Cost ======')
kproto.cost_centroids = pd.concat([pd.DataFrame(kproto.cluster_centroids_[1]),pd.DataFrame(kproto.cluster_centroids_[0])], axis=1)
centroids
df['cluster'] = clusters
df.head()
使用k-means及k-prototype对混合型数据集进行聚类分析相关推荐
- OpenCV的k - means聚类 -对图片进行颜色量化
OpenCV的k - means聚类 目标 学习使用cv2.kmeans()数据聚类函数OpenCV 理解参数 输入参数 样品:它应该的np.float32数据类型,每个特性应该被放在一个单独的列. ...
- OpenCV官方文档 理解k - means聚类
理解k - means聚类 目标 在这一章中,我们将了解k - means聚类的概念,它是如何工作等. 理论 我们将这个处理是常用的一个例子. t恤尺寸问题 考虑一个公司要发布一个新模型的t恤. 显然 ...
- kmeans改进 matlab,基于距离函数的改进k―means 算法
摘要:聚类算法在自然科学和和社会科学中都有很普遍的应用,而K-means算法是聚类算法中经典的划分方法之一.但如果数据集内相邻的簇之间离散度相差较大,或者是属性分布区间相差较大,则算法的聚类效果十分有 ...
- 文献记录(part89)--I-k-means-+:An iterative clustering algorithm based on an enhanced k -means
学习笔记,仅供参考,有错必究 关键词:k均值:解决方案改进:准确的k均值:迭代改进 I-k-means-+:An iterative clustering algorithm based on an ...
- K means 图片压缩
k-means的基本原理较为清晰,这里不多赘述,本次博客主要通过基础的k means算法进行图像的压缩处理. 原理分析 在彩色图像中,每个像素的大小为3字节(RGB),可以表示的颜色总数为256 * ...
- 为了联盟还是为了部落 | K means
1. 问题 人类有个很有趣的现象,一群人在一起,过一段时间就会自发的形成一个个的小团体.好像我们很擅长寻找和自己气质接近的同类.其实不只是人类,数据也有类似情况,这就是聚类(Clustering)的意 ...
- k均值聚类算法(K Means)及其实战案例
算法说明 K均值聚类算法其实就是根据距离来看属性,近朱者赤近墨者黑.其中K表示要聚类的数量,就是说样本要被划分成几个类别.而均值则是因为需要求得每个类别的中心点,比如一维样本的中心点一般就是求这些样本 ...
- 从零开始用Python实现k近邻算法(附代码、数据集)
作者:Tavish Srivastava 翻译:王雨桐 校对:丁楠雅 本文约2000字,建议阅读8分钟. 本文将带领读者理解KNN算法在分类问题中的使用,并结合案例运用Python进行实战操作. 注意 ...
- classification_report进阶:针对top-k的结果计算precision@k、recall@k、f1-score@k
sklearn自带的classification_report方法可以针对二分类或多分类问题,计算分类器的precision.recall和f1-score. 示例: from sklearn.met ...
最新文章
- 【转】一句话的设计模式
- [你必须知道的.NET]第三十五回,判断dll是debug还是release,这是个问题
- 【JVM】第三章 垃圾收集机制
- 使用zabbix监控mariadb性能状态
- python基础语法入门大全_python 基础语法——快速入门
- 构建一个可行的BI系统的造价是多少,实施周期?具备条件基础是什么? 数据量有要求么
- 视频教程-PHP开发进阶课程docker入门与进阶-PHP
- 机器学习 | MATLAB实现GLM广义线性模型参数设定
- shiro ajax 验证码,关于Shiro登录报验证码错误的问题
- 阿里工程师的自我修养之:如何在工作中快速成长? 致工程师的 10 个简单技巧
- 《魔兽世界》中的小背景
- 【企业微信实现免密登录以及发送消息(企业内部应用)】
- 保证RabbitMQ消息的可靠性总结
- 同时删除Excel表格中多行隔行空白行
- [译]PG15加速排序性能
- [电路]10-支路电流法
- HTTP 与 HTTPS 的理解
- [存]MySpace兴衰沉浮启示录:方向混乱 技术欠债多
- JPG怎么转换成PDF?用迅读PDF大师,一键批量转换
- 省选专练[POI2008]TRO-Triangles
热门文章
- 视频特效如何制作?快把这些方法收好
- 阿里六面(总结他人事迹)
- 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(上海)G Fibonacci
- NoSQL和MemeryCache的出现意味着传统数据库使用方式的变革吗?(arvin-推荐--看评论)
- Linux系统配置安装Nginx反向代理服务器
- 四足机器人|机器狗|仿生机器人|多足机器人|PPT|汇报|科研汇报PPT|技术汇报
- RHEL服务篇_DNS服务
- 凯盛融英在港招股书“失效”:遭证监会严格发问,需补充披露
- 华为鸿蒙HarmonyOS 简介
- SaaSBase:免费的思维导图软件:2022年9种最好的工具