Архив рубрики: Без рубрики

Python + Orange

# ​https://orange3.readthedocs.io/projects/orange-data-mining-library/en/latest/tutorial/classification.html Документация по работе с моделями Orange для классификации из кода на Python
# ​https://stackoverflow.com/questions/63060587/deploying-orange-3-models рецепт по загрузке готовой модели из файла 

>>> import Orange
>>> iris = Orange.data.Table('Iris')  # Загрузка данных для модели, имя файла
>>> iris  # как выглядят загруженные данные
[[5.1, 3.5, 1.4, 0.2 | Iris-setosa],
 [4.9, 3.0, 1.4, 0.2 | Iris-setosa],
 [4.7, 3.2, 1.3, 0.2 | Iris-setosa],
 [4.6, 3.1, 1.5, 0.2 | Iris-setosa],
 [5.0, 3.6, 1.4, 0.2 | Iris-setosa],
 ...
]
>>> iris.domain  # колонки загруженной таблицы
[sepal length, sepal width, petal length, petal width | iris]
>>> tr = Orange.classification.TreeLearner()  # выбор типа классификатора
>>> classifier = tr(iris)  # обучение модели на загруженных данных
>>> printed_tree = classifier.print_tree()  # просмотр, чему модель на данных научилась (не обязательно смотреть)
>>> for i in printed_tree.split('\n'):
...   print(i)
...
       [50.  0.  0.] petal length ≤ 1.9
       [ 0. 50. 50.] petal length > 1.9
       [ 0. 49.  5.]     petal width ≤ 1.7
       [ 0. 47.  1.]         petal length ≤ 4.9
          [0. 2. 4.]         petal length > 4.9
          [0. 0. 3.]             petal width ≤ 1.5
          [0. 2. 1.]             petal width > 1.5
          [0. 2. 0.]                 sepal length ≤ 6.7
          [0. 0. 1.]                 sepal length > 6.7
       [ 0.  1. 45.]     petal width > 1.7
>>> iris[2]  # просмотр произвольной записи из данных для обучения
[4.7, 3.2, 1.3, 0.2 | Iris-setosa]
>>> classifier(iris[2])  # предсказание класса для записи из данных для обучения
0  # индекс предсказанного класса
>>> classifier(iris)  # предсказание классов для всех записей из данных для обучения
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], dtype=int64)
>>> classifier([1,1,1,1])  # предсказание по произвольным значениям от пользователя
0  # индекс предсказанного класса
>>> classifier([3,3,3,3])
2
>>> classifier([3,3,3,0])
1
>>> classifier([3,0,3,0])
1
>>> classifier([3,0,0,0])
0
>>>

Cron добавление заданий

Для редактирования заданий текущего пользователя:

crontab -e

Формат записи:

minute hour day_of_month month day_of_week command_to_execute

Допустимые значения:

  • minute 0-59
  • hour 0-23
  • day_of_month 1-31
  • month 1-12
  • day_of_week 0-7 (0 и 7 — воскресенье)

Управление другим пользователем:

sudo crontab -u username -e

Просто посмотреть:

crontab -l

Проверка, запущен ли cron:

sudo systemctl status cron

Запуск задания каждые 5 минут:

*/5 * * * *

Выполнить задание при включении компьютера:

@reboot

Таблица умножения на Python за 2 строчки

>>> for i in range(1, 11):
...     print(" ".join(map(str, [i*j for j in range(1, 11)])))
...
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
4 8 12 16 20 24 28 32 36 40
5 10 15 20 25 30 35 40 45 50
6 12 18 24 30 36 42 48 54 60
7 14 21 28 35 42 49 56 63 70
8 16 24 32 40 48 56 64 72 80
9 18 27 36 45 54 63 72 81 90
10 20 30 40 50 60 70 80 90 100
>>> for i in range(1, 11):
...     print("".join(map(lambda x: str(x).rjust(4), [i*j for j in range(1, 11)])))
...
   1   2   3   4   5   6   7   8   9  10
   2   4   6   8  10  12  14  16  18  20
   3   6   9  12  15  18  21  24  27  30
   4   8  12  16  20  24  28  32  36  40
   5  10  15  20  25  30  35  40  45  50
   6  12  18  24  30  36  42  48  54  60
   7  14  21  28  35  42  49  56  63  70
   8  16  24  32  40  48  56  64  72  80
   9  18  27  36  45  54  63  72  81  90
  10  20  30  40  50  60  70  80  90 100
>>>

Решено: если не работает буфер обмена при RDP-подключении

Варианты:

  1. Найти в диспетчере задач и прибить процесс «Монитор буфера обмена RDP«
  2. В командной строке выполнить:
taskkill /F /IM rdpclip.exe

Pygame — рисование линий, кругов и прямоугольников

>>> import pygame
pygame 2.0.1 (SDL 2.0.14, Python 3.8.10)
Hello from the pygame community. https://www.pygame.org/contribute.html
>>> from pygame.locals import *
>>> pygame.init()
(7, 0)
>>> window = pygame.display.set_mode((800, 600))
>>> window.fill((255, 255, 255))
<rect(0, 0, 800, 600)>
>>> pygame.draw.rect(window, (0, 0, 255), (100, 100, 400, 100), 2)
<rect(100, 100, 401, 101)>
>>> pygame.draw.circle(window, (0, 255, 0), 
...                    [300, 300], 170, 3)
<rect(130, 130, 340, 340)>
>>> pygame.draw.polygon(window, (255, 0, 0), 
...                     [[300, 300], [100, 400],
...                      [100, 300]])
<rect(100, 300, 201, 101)>
>>> pygame.draw.line(window, (0, 0, 0), 
...                  [100, 300], 
...                  [500, 300], 5)
<rect(100, 298, 401, 5)>
>>> pygame.display.update()

Pillow — открытие картинок, рисование, просмотр и сохранение

Открыть файл-картинку:

>>> from PIL import Image
>>> image = Image.open("bike.png")
>>> image.show()
>>>

Сгенерировать, сохранить и открыть картинку:

>>> from PIL import Image
>>> from PIL import ImageDraw
>>> i = Image.new("RGB", (200, 200))
>>> d = ImageDraw.Draw(i)
>>> d.ellipse((100, 100, 150, 200), fill='red', outline=(0, 0, 0))
>>> d.rectangle((20, 10, 30, 20), fill='blue', outline=(255, 255, 255))
>>> d.line((35, 20, 45, 10), fill='pink', width=10)
>>> i.save('draw-ellipse-rectangle-line.jpg', quality=95)
>>> i.show()
>>> 

Как в Python запустить отвязанный (detached) от основной программы процесс

>>> import subprocess
>>> subprocess.Popen(["notepad", r"c:\windows\system.ini"])
<subprocess.Popen object at 0x000001E78BFB6400>
>>>

При таком запуске основная программа не будет дожидаться, пока закончит работу запущенная ей другая программа.