preloader

Clustering - Agglomerative clustering - Práctica

Índice de contenido
python
import pandas as pd
from sklearn.cluster import AgglomerativeClustering
python
file_datapath = "C:/Users/user/Desktop/water-treatment.data"
df = pd.read_csv(file_datapath)
df

D-1/3/90441011.507.8?40716666.34.52110...2000?.458.895.5?.570.0?.679.487.399.6
0D-2/3/90390243.007.7?44321469.26.52660...2590?60.794.8?80.8?79.592.1100
1D-4/3/90322295.007.6?52818669.93.41666...1888?58.295.6?52.9?75.888.798.5
2D-5/3/90350233.507.920558819265.64.52430...184033.164.295.387.372.390.282.389.6100
3D-6/3/90369241.508.024249617664.84.02110...2120?62.795.6?71.092.178.287.599.5
4D-7/3/90385723.007.820237218668.84.51644...1764?59.796.586.778.390.173.184.9100
..................................................................
521D-26/8/91327230.167.79325217656.82.3894...942?62.393.369.875.979.678.696.699.6
522D-27/8/91335350.327.819234617268.64.0988...950?58.397.883.059.191.174.690.7100
523D-28/8/91329220.307.413936718064.43.01060...1136?65.097.176.266.482.077.188.999
524D-29/8/91321900.307.320054525865.14.01260...132639.865.997.181.770.989.587.089.599.8
525D-30/8/91304880.217.515230013269.7?1073...1224?69.5?81.776.4?81.786.4?

526 rows × 39 columns

python
df.set_index(df["D-1/3/90"], drop=True, inplace=True)
python
df.drop("D-1/3/90", axis=1, inplace = True)
python
df

441011.507.8?40716666.34.521107.9...2000?.458.895.5?.570.0?.679.487.399.6
D-1/3/90
D-2/3/90390243.007.7?44321469.26.526607.7...2590?60.794.8?80.8?79.592.1100
D-4/3/90322295.007.6?52818669.93.416667.7...1888?58.295.6?52.9?75.888.798.5
D-5/3/90350233.507.920558819265.64.524307.8...184033.164.295.387.372.390.282.389.6100
D-6/3/90369241.508.024249617664.84.021107.9...2120?62.795.6?71.092.178.287.599.5
D-7/3/90385723.007.820237218668.84.516447.8...1764?59.796.586.778.390.173.184.9100
..................................................................
D-26/8/91327230.167.79325217656.82.38947.7...942?62.393.369.875.979.678.696.699.6
D-27/8/91335350.327.819234617268.64.09887.8...950?58.397.883.059.191.174.690.7100
D-28/8/91329220.307.413936718064.43.010607.5...1136?65.097.176.266.482.077.188.999
D-29/8/91321900.307.320054525865.14.012607.4...132639.865.997.181.770.989.587.089.599.8
D-30/8/91304880.217.515230013269.7?10737.4...1224?69.5?81.776.4?81.786.4?

526 rows × 38 columns

python
df.dtypes
44101     object
1.50      object
7.8      float64
?         object
407       object
166       object
66.3      object
4.5       object
2110       int64
7.9      float64
?.1       object
228        int64
70.2      object
5.5       object
2120       int64
7.9.1    float64
?.2       object
280       object
94        object
72.3      object
0.3       object
2010       int64
7.3       object
?.3       object
84        object
21        object
81.0      object
0.02      object
2000      object
?.4       object
58.8      object
95.5      object
?.5       object
70.0      object
?.6       object
79.4      object
87.3      object
99.6      object
dtype: object
python
df.replace("?", "", inplace=True)
python
df

441011.507.8?40716666.34.521107.9...2000?.458.895.5?.570.0?.679.487.399.6
D-1/3/90
D-2/3/90390243.007.744321469.26.526607.7...259060.794.880.879.592.1100
D-4/3/90322295.007.652818669.93.416667.7...188858.295.652.975.888.798.5
D-5/3/90350233.507.920558819265.64.524307.8...184033.164.295.387.372.390.282.389.6100
D-6/3/90369241.508.024249617664.84.021107.9...212062.795.671.092.178.287.599.5
D-7/3/90385723.007.820237218668.84.516447.8...176459.796.586.778.390.173.184.9100
..................................................................
D-26/8/91327230.167.79325217656.82.38947.7...94262.393.369.875.979.678.696.699.6
D-27/8/91335350.327.819234617268.64.09887.8...95058.397.883.059.191.174.690.7100
D-28/8/91329220.307.413936718064.43.010607.5...113665.097.176.266.482.077.188.999
D-29/8/91321900.307.320054525865.14.012607.4...132639.865.997.181.770.989.587.089.599.8
D-30/8/91304880.217.515230013269.710737.4...122469.581.776.481.786.4

526 rows × 38 columns

python
df = df.apply(pd.to_numeric)
python
df

441011.507.8?40716666.34.521107.9...2000?.458.895.5?.570.0?.679.487.399.6
D-1/3/90
D-2/3/9039024.03.007.7NaN443.0214.069.26.526607.7...2590.0NaN60.794.8NaN80.8NaN79.592.1100.0
D-4/3/9032229.05.007.6NaN528.0186.069.93.416667.7...1888.0NaN58.295.6NaN52.9NaN75.888.798.5
D-5/3/9035023.03.507.9205.0588.0192.065.64.524307.8...1840.033.164.295.387.372.390.282.389.6100.0
D-6/3/9036924.01.508.0242.0496.0176.064.84.021107.9...2120.0NaN62.795.6NaN71.092.178.287.599.5
D-7/3/9038572.03.007.8202.0372.0186.068.84.516447.8...1764.0NaN59.796.586.778.390.173.184.9100.0
..................................................................
D-26/8/9132723.00.167.793.0252.0176.056.82.38947.7...942.0NaN62.393.369.875.979.678.696.699.6
D-27/8/9133535.00.327.8192.0346.0172.068.64.09887.8...950.0NaN58.397.883.059.191.174.690.7100.0
D-28/8/9132922.00.307.4139.0367.0180.064.43.010607.5...1136.0NaN65.097.176.266.482.077.188.999.0
D-29/8/9132190.00.307.3200.0545.0258.065.14.012607.4...1326.039.865.997.181.770.989.587.089.599.8
D-30/8/9130488.00.217.5152.0300.0132.069.7NaN10737.4...1224.0NaN69.5NaN81.776.4NaN81.786.4NaN

526 rows × 38 columns

python
df.mean()
44101    37213.035433
1.50         2.360707
7.8          7.810076
?          188.714286
407        406.898077
166        227.561905
66.3        61.383689
4.5          4.594012
2110      1477.420152
7.9          7.829848
?.1        206.207392
228        254.001901
70.2        60.351262
5.5          5.032669
2120      1494.847909
7.9.1        7.811787
?.2        122.348697
280        274.034816
94          94.225191
72.3        72.969786
0.3          0.416966
2010      1489.581749
7.3          7.710667
?.3         19.988095
84          87.301181
21          22.238004
81.0        80.150098
0.02         0.037108
2000      1493.855238
?.4         39.085806
58.8        58.518199
95.5        90.544289
?.5         83.448049
70.0        67.813000
?.6         89.013646
79.4        77.853493
87.3        88.966602
99.6        99.085253
dtype: float64
python
df = df.fillna(df.mean())
df

441011.507.8?40716666.34.521107.9...2000?.458.895.5?.570.0?.679.487.399.6
D-1/3/90
D-2/3/9039024.03.007.7188.714286443.0214.069.26.50000026607.7...2590.039.08580660.794.80000083.44804980.889.01364679.592.1100.000000
D-4/3/9032229.05.007.6188.714286528.0186.069.93.40000016667.7...1888.039.08580658.295.60000083.44804952.989.01364675.888.798.500000
D-5/3/9035023.03.507.9205.000000588.0192.065.64.50000024307.8...1840.033.10000064.295.30000087.30000072.390.20000082.389.6100.000000
D-6/3/9036924.01.508.0242.000000496.0176.064.84.00000021107.9...2120.039.08580662.795.60000083.44804971.092.10000078.287.599.500000
D-7/3/9038572.03.007.8202.000000372.0186.068.84.50000016447.8...1764.039.08580659.796.50000086.70000078.390.10000073.184.9100.000000
..................................................................
D-26/8/9132723.00.167.793.000000252.0176.056.82.3000008947.7...942.039.08580662.393.30000069.80000075.979.60000078.696.699.600000
D-27/8/9133535.00.327.8192.000000346.0172.068.64.0000009887.8...950.039.08580658.397.80000083.00000059.191.10000074.690.7100.000000
D-28/8/9132922.00.307.4139.000000367.0180.064.43.00000010607.5...1136.039.08580665.097.10000076.20000066.482.00000077.188.999.000000
D-29/8/9132190.00.307.3200.000000545.0258.065.14.00000012607.4...1326.039.80000065.997.10000081.70000070.989.50000087.089.599.800000
D-30/8/9130488.00.217.5152.000000300.0132.069.74.59401210737.4...1224.039.08580669.590.54428981.70000076.489.01364681.786.499.085253

526 rows × 38 columns

python
df.dtypes
44101    float64
1.50     float64
7.8      float64
?        float64
407      float64
166      float64
66.3     float64
4.5      float64
2110       int64
7.9      float64
?.1      float64
228        int64
70.2     float64
5.5      float64
2120       int64
7.9.1    float64
?.2      float64
280      float64
94       float64
72.3     float64
0.3      float64
2010       int64
7.3      float64
?.3      float64
84       float64
21       float64
81.0     float64
0.02     float64
2000     float64
?.4      float64
58.8     float64
95.5     float64
?.5      float64
70.0     float64
?.6      float64
79.4     float64
87.3     float64
99.6     float64
dtype: object
python
agc = AgglomerativeClustering(n_clusters=13, 
                              affinity='euclidean', 
                              linkage='ward', 
                              distance_threshold=None)
python
agc.fit(df)
AgglomerativeClustering(n_clusters=13)
python
agc.labels_
array([ 8,  3,  1,  7, 11,  8,  1,  4,  8,  0,  0,  0,  8,  8,  0, 11,  1,
        7,  8,  0,  5,  0,  8,  8,  8,  0,  0,  4,  7, 11, 11,  1,  7,  3,
       11,  7,  1,  1,  1,  7,  0, 11,  8,  8,  7,  8,  0, 12,  8,  7,  1,
        3,  6,  7, 11,  1,  4,  3,  4,  7,  5,  0,  8,  8, 11,  5,  5,  5,
        0,  8,  3,  8,  8,  5,  1,  0,  9, 11,  7,  3,  1,  8, 12,  0, 11,
        0,  0,  1,  7,  1,  1,  1,  1, 11, 11,  0, 11,  1,  1,  6, 11, 11,
       11, 11,  6, 11,  8,  0,  0, 11, 11,  7,  7,  1,  1,  3,  7,  0,  9,
        0,  0,  5,  5, 12, 12,  8,  9,  9,  5, 12,  9,  7,  1,  8,  0,  1,
        4,  1, 11,  0,  8,  7,  5,  9, 11,  1,  4,  6,  4,  8,  7,  7,  7,
        3,  7,  8,  0,  7,  1,  1,  4,  7,  1,  3,  3,  3,  4,  6,  1,  1,
        3,  1,  6,  7,  3,  0,  0,  8, 11,  7,  7,  0, 11,  7,  7,  8,  2,
        5,  9, 12,  0, 12,  7,  8, 10,  5,  5, 11,  0,  3,  2,  9,  9,  8,
       12,  5,  0,  0,  5,  0,  1, 11,  4, 11, 11,  1,  1,  6,  3,  1,  0,
        8,  1,  8,  0,  4,  4,  6,  6,  3,  1,  6,  6,  3,  4,  3,  1,  7,
        1,  7,  7,  7,  6,  4,  1,  1,  3,  4, 12,  0, 11,  0,  0,  0, 12,
        5,  0, 12,  5,  0,  4,  4,  1,  5,  5,  8,  6,  4,  6,  0,  5,  3,
        6,  6,  5,  9,  7,  1,  8, 12,  5, 12,  0, 11,  1,  9,  9,  5, 12,
       12,  0,  5, 10,  8,  8, 12,  5,  5,  5,  6,  3,  8,  8, 12,  0,  0,
        7,  7,  1,  7,  4,  3,  6,  4,  4,  3,  1,  3,  5, 12,  0,  8,  1,
        3, 11,  4,  1,  1,  7,  1,  1,  4,  4,  3,  1,  3,  1,  1,  7,  7,
        4, 11,  6,  4,  4,  3,  6,  3,  8,  1,  1,  1,  8, 11,  1,  0, 12,
        6,  0,  5,  5, 12,  7,  4,  1,  1,  7,  1,  7,  6,  3,  3,  3,  1,
       12,  0,  1,  7,  3,  1, 10, 10,  5, 10,  5,  1,  1,  3,  3,  3,  5,
        8, 11,  7,  7,  7,  0, 11,  1,  1,  1,  1,  1,  1,  1,  0,  6,  3,
        1,  1,  8,  6,  3,  3,  3,  1,  1, 11,  4,  7,  1,  1,  7,  0,  6,
        1,  3,  1,  1,  3,  3,  6,  1,  3,  1,  7,  7,  7,  7,  7,  7,  7,
        7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  3,  4,  4,  1,  1,  1,
        4,  1,  3,  3,  7,  3,  1,  4,  1,  7,  3,  3,  1,  1,  1,  3,  4,
        3,  1,  1,  3,  1,  4,  4,  1,  4,  1,  1,  0,  1,  4,  3,  1,  3,
        6,  7,  1,  1,  4,  1,  4,  4,  4,  6,  6,  4,  4,  4,  4,  4,  2,
        3,  6,  3,  6,  6,  3,  4,  3,  6,  6,  4,  3,  3,  3,  3,  4],
      dtype=int64)
python
df["cluster_id"] = agc.labels_
df

441011.507.8?40716666.34.521107.9...?.458.895.5?.570.0?.679.487.399.6cluster_id
D-1/3/90
D-2/3/9039024.03.007.7188.714286443.0214.069.26.50000026607.7...39.08580660.794.80000083.44804980.889.01364679.592.1100.0000008
D-4/3/9032229.05.007.6188.714286528.0186.069.93.40000016667.7...39.08580658.295.60000083.44804952.989.01364675.888.798.5000003
D-5/3/9035023.03.507.9205.000000588.0192.065.64.50000024307.8...33.10000064.295.30000087.30000072.390.20000082.389.6100.0000001
D-6/3/9036924.01.508.0242.000000496.0176.064.84.00000021107.9...39.08580662.795.60000083.44804971.092.10000078.287.599.5000007
D-7/3/9038572.03.007.8202.000000372.0186.068.84.50000016447.8...39.08580659.796.50000086.70000078.390.10000073.184.9100.00000011
..................................................................
D-26/8/9132723.00.167.793.000000252.0176.056.82.3000008947.7...39.08580662.393.30000069.80000075.979.60000078.696.699.6000003
D-27/8/9133535.00.327.8192.000000346.0172.068.64.0000009887.8...39.08580658.397.80000083.00000059.191.10000074.690.7100.0000003
D-28/8/9132922.00.307.4139.000000367.0180.064.43.00000010607.5...39.08580665.097.10000076.20000066.482.00000077.188.999.0000003
D-29/8/9132190.00.307.3200.000000545.0258.065.14.00000012607.4...39.80000065.997.10000081.70000070.989.50000087.089.599.8000003
D-30/8/9130488.00.217.5152.000000300.0132.069.74.59401210737.4...39.08580669.590.54428981.70000076.489.01364681.786.499.0852534

526 rows × 39 columns

python
df.loc[df["cluster_id"] == 1]

441011.507.8?40716666.34.521107.9...?.458.895.5?.570.0?.679.487.399.6cluster_id
D-1/3/90
D-5/3/9035023.03.507.9205.0588.000000192.065.64.524307.8...33.10000064.295.387.30000072.30090.282.30000089.600000100.01
D-9/3/9036107.05.007.7215.0489.000000334.040.76.016137.6...39.08580670.495.690.60000053.70092.166.90000094.600000100.01
D-21/3/9035791.01.207.8277.0466.000000246.063.44.015567.7...39.08580639.678.385.50000070.40091.373.40000089.40000099.41
D-8/2/9034193.02.008.0166.0396.000000176.070.54.012658.0...7.30000052.196.484.20000071.20084.373.20000082.400000100.01
D-14/2/9035636.01.208.0203.0469.000000264.065.25.214898.1...39.08580667.195.385.20000073.10088.779.30000085.60000099.01
..................................................................
D-16/10/9134820.00.258.1185.0439.000000256.056.37.522107.9...32.80000067.796.472.70000081.00082.289.30000091.80000099.71
D-19/10/9134408.00.258.0174.0442.000000268.057.55.713067.9...32.80000068.294.483.50000080.40088.587.80000093.30000099.61
D-24/10/9134364.01.207.9191.0406.898077184.073.96.513847.8...40.60000059.892.089.50000067.81393.777.85349391.80000098.51
D-25/10/9135400.00.707.6156.0364.000000194.063.95.516807.6...47.30000061.394.076.40000067.81386.582.40000090.70000099.81
D-27/10/9135573.07.307.6176.0333.000000178.064.03.516277.7...39.08580640.495.083.44804972.90090.979.90000088.96660298.61

103 rows × 39 columns

comments powered by Disqus