Сообщество Engee

Кластеризация регионов РФ в Julia

Автор
avatar-alexsaralexsar
Notebook
Решение задачи кластеризации регионов РФ по типу экономики
с выбором числа кластеров
1. Ввод исходных данных, нормализация данных и реализация алгоритма kmeans
In [ ]:
using RDatasets, Clustering, Plots, PlotThemes
using DataFrames, Query
import XLSX
using StatsPlots
using Random
Random.seed!(123)

#ввод социально-экономических показателей регионов РФ
Regdata = XLSX.readxlsx("/user/Clasters/REG_RU.xlsx")
Regtab1 = Regdata["dan02"]
Regtab00 = Regtab1[2:82, 5:7]
Regtab00 = Float64.(Regtab00)
XX = Regtab00

#нормирование значений элементов массива XX
XX1 = XX[:, 1]
XX2 = XX[:, 2]
XX3 = XX[:, 3]
SUMX = XX1 + XX2 + XX3
XX[:, 1] = (XX[:, 1] ./ SUMX) .* 100
XX[:, 2] = (XX[:, 2] ./ SUMX) .* 100
XX[:, 3] = (XX[:, 3] ./ SUMX) .* 100
XX[:, 1:3]
Reg = Regtab1[2:82, 1]

print("Введите число кластеров:2,3,4,5,6,7, 8 \n")
num = readline()
Ncl = tryparse(Int64, num)
println("Число заданных кластеров = ", Ncl)

#Ncl=6
#println("Число заданных кластеров = ", Ncl)
XXtr = transpose(XX[:, 1:3])
result = kmeans(XXtr, Ncl); # запустить K-средних для   Ncl кластеров
Y = result.assignments[:, 1] # получить назначения точек кластерам
c = counts(result) # получить размеры кластеров
M = result.centers # получить центры кластеров

#println(Y)
println("Размеры кластеров\n $c")
println("Центры кластеров:")
for i in 1:3
    println("$(M[i,1:Ncl])")
end

Tab = hcat(Reg, XX, Y)
Tabdf = DataFrame(Tab, :auto)
Tabdf = Tabdf[1:81, :]

Tabdf.x1 = convert(Vector{String}, Tabdf.x1)
Tabdf.x2 = convert(Vector{Float64}, Tabdf.x2)
Tabdf.x3 = convert(Vector{Float64}, Tabdf.x3)
Tabdf.x4 = convert(Vector{Float64}, Tabdf.x4)
Tabdf.x5 = convert(Vector{Int64}, Tabdf.x5)
Tabdf[:, 2:4] = @.round(Tabdf[:, 2:4]);
global Tabdf;
Число заданных кластеров = 6
Размеры кластеров
 [11, 6, 21, 9, 6, 28]
Центры кластеров:
[20.721928264237473, 71.3905021278264, 3.1108902249773474, 42.573034975330785, 3.081844943227313, 2.1378528370841474]
[5.2287259003319875, 9.02945477613967, 30.78014714497308, 7.9203633411604795, 66.09617828206524, 8.80708768326089]
[74.04934583543053, 19.58004309603393, 66.10896263004958, 49.50660168350875, 30.82197677470744, 89.05505947965499]

2.Графическое представление результатов решения задачи кластеризации

In [ ]:
dfM1 = DataFrame(M', [:x2, :x3, :x4])
colkl = floor.(Int, Tabdf.x5);
plotly()
theme(:dao)
scatter(Tabdf.x2, Tabdf.x3, Tabdf.x4, legend= false, wsize=(1000, 650),
    hovers=Tabdf.x1, color=colkl, ms=4, ma=0.7)

    for i in 1:Ncl
    #@show [dfM[i, 1] dfM[i, 2] dfM[i, 3]]
    clast = string(i)
    Centr = "Центр кластера" * " " * clast
    scatter!([dfM1.x2[i]],[dfM1.x3[i]],[dfM1.x4[i]], hovers=Centr, mc=:black, ms=5, ma=0.9)
end
titstr = "Кластеризация регионов РФ по структуре производства (алгоритм kmeans)." * " " * "Число кластеров=  $Ncl" 
xlabel!("PI_N %")
ylabel!("Pcx_N %")
zlabel!("PP_N %")
title!(titstr)
#legend = :topleft
Out[0]:

3.Табличное представление результатов решения задачи кластеризации

In [ ]:
Tab=Tabdf
Tab = select(Tab, "x1" => "Регион", "x2" => "Добыча %", "x3" => "Агро % ", "x4" => "Индустрия %", "x5" => "Кластер")

@show Tab;
Tab = 81×5 DataFrame
 Row │ Регион                           Добыча %  Агро %   Индустрия %  Кластер
     │ String                           Float64   Float64  Float64      Int64
─────┼──────────────────────────────────────────────────────────────────────────
   1 │ Белгородская область                 15.0     23.0         62.0        3
   2 │ Брянская область                      0.0     26.0         74.0        3
   3 │ Владимирская область                  1.0      5.0         94.0        6
   4 │ Воронежская область                   1.0     27.0         72.0        3
   5 │ Ивановская область                    1.0      8.0         91.0        6
   6 │ Калужская область                     0.0      6.0         94.0        6
   7 │ Костромская область                   1.0     10.0         90.0        6
   8 │ Курская область                      19.0     34.0         47.0        3
   9 │ Липецкая область                      1.0     18.0         82.0        6
  10 │ Московская область                    0.0      3.0         96.0        6
  11 │ Орловская область                     0.0     42.0         58.0        3
  12 │ Рязанская область                     0.0     18.0         81.0        6
  13 │ Смоленская область                    1.0      9.0         90.0        6
  14 │ Тамбовская область                    0.0     46.0         54.0        3
  15 │ Тверская область                      0.0      8.0         91.0        6
  16 │ Тульская область                      1.0      9.0         90.0        6
  17 │ Ярославская область                   0.0      8.0         92.0        6
  18 │ г. Москва                            11.0      0.0         89.0        6
  19 │ Республика Карелия                   36.0      2.0         62.0        4
  20 │ Республика Коми                      55.0      2.0         42.0        4
  21 │ Архангельская область                48.0      2.0         50.0        4
  22 │ Вологодская область                   0.0      4.0         95.0        6
  23 │ Калининградская область               2.0      7.0         91.0        6
  24 │ Ленинградская область                 1.0      7.0         92.0        6
  25 │ Мурманская область                   20.0      0.0         80.0        1
  26 │ Новгородская область                  0.0     10.0         90.0        6
  27 │ Псковская область                     1.0     26.0         72.0        3
  28 │ г. Санкт-Петербург                    1.0      0.0         99.0        6
  29 │ Республика Адыгея                     3.0     35.0         62.0        3
  30 │ Республика Калмыкия                   0.0     85.0         15.0        5
  31 │ Республика Крым                       6.0     24.0         70.0        3
  32 │ Краснодарский край                    2.0     29.0         69.0        3
  33 │ Астраханская область                 61.0     13.0         26.0        2
  34 │ Волгоградская область                 3.0     17.0         80.0        6
  35 │ Ростовская область                    2.0     24.0         73.0        3
  36 │ Республика Дагестан                   2.0     70.0         28.0        5
  37 │ Республика Ингушетия                  6.0     77.0         17.0        5
  38 │ Кабардино-Балкарская республика       0.0     55.0         45.0        5
  39 │ Карачаево-Черкесская республика       4.0     45.0         51.0        3
  40 │ Республика Северная Осетия            1.0     49.0         50.0        3
  41 │ Чеченская Республика                  6.0     49.0         45.0        5
  42 │ Ставропольский край                   2.0     32.0         66.0        3
  43 │ Республика Башкортостан              12.0     11.0         76.0        1
  44 │ Республика Марий Эл                   0.0     22.0         77.0        3
  45 │ Республика Мордовия                   0.0     24.0         76.0        3
  46 │ Республика Татарстан                 20.0      9.0         71.0        1
  47 │ Удмуртская Республика                29.0     11.0         59.0        4
  48 │ Чувашская Республика                  0.0     15.0         84.0        6
  49 │ Пермский край                        19.0      3.0         78.0        1
  50 │ Кировская область                     0.0     14.0         85.0        6
  51 │ Нижегородская область                 0.0      5.0         94.0        6
  52 │ Оренбургская область                 48.0     14.0         38.0        4
  53 │ Пензенская область                    0.0     31.0         68.0        3
  54 │ Самарская область                    17.0      8.0         76.0        1
  55 │ Саратовская область                   5.0     25.0         70.0        3
  56 │ Ульяновская область                   4.0     15.0         81.0        6
  57 │ Курганская область                    2.0     24.0         75.0        3
  58 │ Свердловская область                  4.0      4.0         93.0        6
  59 │ Тюменская область                    73.0      1.0         26.0        2
  60 │ Челябинская область                   8.0      6.0         86.0        6
  61 │ Республика Алтай                      5.0     60.0         36.0        5
  62 │ Республика Тыва                      54.0     26.0         20.0        2
  63 │ Республика Хакасия                   29.0      6.0         65.0        1
  64 │ Алтайский край                        2.0     28.0         70.0        3
  65 │ Красноярский край                    24.0      4.0         72.0        1
  66 │ Иркутская область                    42.0      5.0         52.0        4
  67 │ Кемеровская область                  48.0      4.0         48.0        4
  68 │ Новосибирская область                 7.0     13.0         80.0        6
  69 │ Омская область                        0.0     10.0         90.0        6
  70 │ Томская область                      30.0      9.0         61.0        4
  71 │ Республика Бурятия                   26.0      9.0         65.0        1
  72 │ Республика Саха (Якутия)             86.0      3.0         11.0        2
  73 │ Забайкальский край                   66.0      9.0         25.0        2
  74 │ Камчатский край                      16.0      5.0         78.0        1
  75 │ Приморский край                       6.0     12.0         82.0        6
  76 │ Хабаровский край                      5.0      4.0         91.0        6
  77 │ Амурская область                     46.0     21.0         32.0        4
  78 │ Магаданская область                  27.0      1.0         72.0        1
  79 │ Сахалинская область                  88.0      2.0         10.0        2
  80 │ Еврейская автономная область          1.0     29.0         70.0        3
  81 │ Чукотский автономный округ           18.0      1.0         81.0        1