Статья Автор: Лебедев Дмитрий

Тетрадь для разбора заданий типа 27


Решаем задание по плану

Программа - считывание данных и их предварительный вывод в  кластер 0
Вот такой код написали
 from turtle import *
def pokraska(k, m=50):
  tracer(0)
  up()
  clr =colors[k]
  for x, y in dk[k]:
    goto(x*m,y*m)
    dot(3,clr)
  update()
  
  
dk ={0:[],1:[],2:[]}
colors ={0:'red',1:'green',2:'blue'}
for s in open('27_vB.txt'):
  s = s.replace(',','.')
  x,y = map(float,s.split())
  dk[0].append((x,y))
for k in dk :
  pokraska(k,25)
  print(k, len(dk[k]))
         
         
 

2. Открываем в EXCEL и определяем, что один кластер можно выделить условием
 y > 7.5 
Добавлем в код и запускаем
from turtle import *
def pokraska(k, m=50):
  tracer(0)
  up()
  clr =colors[k]
  for x, y in dk[k]:
    goto(x*m,y*m)
    dot(3,clr)
  update()
  
  
dk ={0:[],1:[],2:[]}
colors ={0:'red',1:'green',2:'blue'}
for s in open('27-16B.txt'):
  s = s.replace(',','.')
  x,y = map(float,s.split())
  if y > 7.5 :
      dk[1].append((x,y))
  else :
      dk[0].append((x,y))
for k in dk :
  pokraska(k,25)
  print(k, len(dk[k]))
       

Делаем более детальное разбиение линиями
Следующий частично отрезаем по условию 
x > 8.5 (можно запустить и увидеть остаток)
или x > 8.2  and y < 5.6  
видим что состав кластеров не совсем ровны - может одна точки из 0 убежала в 2 кластер
Увеличиваем размер точки до 10 и масштаб
from turtle import *
def pokraska(k, m=50):
  tracer(0)
  up()
  clr =colors[k]
  for x, y in dk[k]:
    goto(x*m,y*m)
    dot(10,clr)
  update()
  
  
dk ={0:[],1:[],2:[]}
colors ={0:'red',1:'green',2:'blue'}
for s in open('27-16B.txt'):
  s = s.replace(',','.')
  x,y = map(float,s.split())
  if y > 7.5 :
      dk[1].append((x,y))
  elif x > 8.5 or x>8.2 and y < 5.6:
      dk[2].append((x,y))
  else :
      dk[0].append((x,y))
for k in dk :
  pokraska(k, 50)
  print(k, len(dk[k]))
Убеждаемся, что так и случилось
меняем  или x > 8.2  and y < 5.6  
на или x > 8.2  and y < 5.4
Получаем идеальное разбиение  

Теперь разбиение можно не выводить.
Определим истинные кластеры.
Напишем программу определения расстояния между точек и программу для кластера.
Запускать будем из тетради, кластеры выводить не будем.

Прикрепленные файлы
27-16a.txt
27-16b.txt
Печать