Kodduu Python
1.07K subscribers
312 photos
28 videos
188 links
Научись программировать на Python на интересных примерах

Самый быстрый курс https://stepik.org/a/187914
Самый нескучный курс https://stepik.org/a/185238

Во вопросам сотрудничества: @AlexErf
Download Telegram
Распродажа курсов в самом разгаре, даже Elon Mask 🤯 уже купил наш курс 👉 JavaScript: самый быстрый курс 🔥 и учит JavaScript 🤖
Создадим программу, которая генерирует музыкальные пьесы на основе заданной музыкальной гаммы с использованием библиотеки mido, которая предназначена для работы с MIDI файлами. Программа будет спрашивать у пользователя желаемый размер композиции и используемую гамму, после чего создаст случайную музыкальную последовательность.

Для начала установите библиотеку mido:

pip install mido


А вот и сам код:

import random
from mido import MidiFile, MidiTrack, Message, MetaMessage

def create_scale(root_note, scale_type):
# Музыкальные интервалы для разных типов гамм
scale_patterns = {
'major': [2, 2, 1, 2, 2, 2, 1],
'minor': [2, 1, 2, 2, 1, 2, 2],
}
pattern = scale_patterns[scale_type]
scale = [root_note]
current_note = root_note
for step in pattern:
current_note += step
if current_note > 127: # MIDI notes range from 0 to 127
break
scale.append(current_note)
return scale

def generate_music(scale, num_notes, file_name):
mid = MidiFile()
track = MidiTrack()
mid.tracks.append(track)

track.append(MetaMessage('set_tempo', tempo=500000)) # Установить темп
track.append(Message('program_change', program=12)) # Выбор инструмента

for _ in range(num_notes):
note = random.choice(scale)
track.append(Message('note_on', note=note, velocity=64, time=120))
track.append(Message('note_off', note=note, velocity=64, time=120))

mid.save(file_name)
print(f"Музыкальное произведение сохранено в {file_name}")

def main():
root_note = int(input("Введите начальную ноту (MIDI номер): "))
scale_type = input("Введите тип гаммы (major или minor): ")
num_notes = int(input("Количество нот в композиции: "))
file_name = input("Введите имя файла для сохранения композиции: ")

scale = create_scale(root_note, scale_type)
generate_music(scale, num_notes, file_name)

if __name__ == "__main__":
main()


Эта программа выполняет следующие задачи:
1. Запрашивает у пользователя начальную ноту, тип гаммы, количество нот и имя файла.
2. Создаёт музыкальную гамму на основе заданных параметров.
3. Генерирует последовательность нот на основе этой гаммы.
4. Сохраняет полученную музыкальную композицию в MIDI-файл.

Это интересный способ познакомиться с генерацией музыки на Python!

Подпишись 👉🏻 @KodduuPython 🤖
Создадим программу на Python, которая моделирует эволюцию популяции с помощью генетического алгоритма. Генетические алгоритмы — это методы поиска и оптимизации, вдохновлённые процессом естественного отбора. Мы создадим простую симуляцию, в которой "особи" популяции будут стремиться к максимальному значению какой-то численной "приспособленности".

import random

# Параметры
population_size = 10
genome_length = 10
mutation_rate = 0.01
num_generations = 50

# Генерируем начальную популяцию
def generate_initial_population(size, genome_length):
return [[random.randint(0, 1) for _ in range(genome_length)] for _ in range(size)]

# Оценка приспособленности
def fitness(genome):
return sum(genome) # Приспособленность особи пропорциональна количеству единиц в геноме

# Размножение
def reproduce(parent1, parent2):
crossover_point = random.randint(0, len(parent1) - 1)
child = parent1[:crossover_point] + parent2[crossover_point:]
return child

# Мутация
def mutate(genome, mutation_rate):
return [gene if random.random() > mutation_rate else 1 - gene for gene in genome]

# Отбор особей для размножения
def select_pair(population):
return random.sample(population, 2)

def run_simulation():
population = generate_initial_population(population_size, genome_length)

for generation in range(num_generations):
# Оцениваем приспособленность каждой особи
population = sorted(population, key=fitness, reverse=True)

# Выводим лучшую особь
print(f"Поколение {generation}, Лучшая приспособленность: {fitness(population[0])}")

# Создаем новую популяцию
new_population = []
while len(new_population) < population_size:
parent1, parent2 = select_pair(population)
child = reproduce(parent1, parent2)
child = mutate(child, mutation_rate)
new_population.append(child)

population = new_population

if __name__ == "__main__":
run_simulation()


В этой программе:
1. Начальная популяция генерируется случайным образом.
2. Каждое поколение оценивается по приспособленности, определяемой количеством единиц в геноме.
3. Родители выбираются случайно, их дети создаются путем скрещивания, а затем подвергаются мутации.
4. Программа выводит лучшую приспособленность в каждом поколении, что демонстрирует, как улучшается "приспособленность" популяции со временем.

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

Подпишись 👉🏻 @KodduuPython 🤖
В Python можно демонстрировать разные парадигмы программирования, такие как процедурное программирование, объектно-ориентированное программирование (ООП) и функциональное программирование. Я покажу примеры каждой из этих парадигм:

1. Процедурное программирование — использует последовательность процедурных вызовов для выполнения задач.
2. Объектно-ориентированное программирование (ООП) — организует программу вокруг объектов и данных, а не функций и логики.
3. Функциональное программирование — строит структуру программы с использованием функций, использует концепции неизменяемости и первоклассных функций.

### Пример кода

#### Процедурное программирование
Процедурный пример может быть реализован как простая функция для вычисления факториала числа:
python
def factorial(n):
result = 1
for i in range(2, n + 1):
result *= i
return result

# factorial(5)


#### Объектно-ориентированное программирование (ООП)
Пример ООП может использовать класс для представления геометрической фигуры, например, круга, с методами для вычисления площади и периметра:
python
class Circle:
def __init__(self, radius):
self.radius = radius

def area(self):
return 3.14159 * self.radius ** 2

def perimeter(self):
return 2 * 3.14159 * self.radius

# circle = Circle(5)
# print(circle.area())
# print(circle.perimeter())


#### Функциональное программирование
Функциональный пример может включать использование функций высшего порядка и лямбда-функций для работы с данными:
python
from functools import reduce

def multiply(x, y):
return x * y

numbers = [1, 2, 3, 4, 5]
product = reduce(multiply, numbers)

# product


Подпишись 👉🏻 @KodduuPython 🤖
Давайте создадим программу на Python для моделирования цепочек Маркова, которая генерирует случайные тексты на основе обучения на исходном тексте. Это полезно для создания интересных имитаций стилей письма или даже для автоматической генерации текста на основе образца.

import random

class MarkovChain:
def __init__(self):
self.lookup_dict = {}

def add_words(self, words):
for i in range(len(words) - 1):
key = words[i]
if key in self.lookup_dict:
self.lookup_dict[key].append(words[i + 1])
else:
self.lookup_dict[key] = [words[i + 1]]

def train(self, text):
words = text.split()
self.add_words(words)

def generate_text(self, length):
word1 = random.choice(list(self.lookup_dict.keys()))
chain = [word1]
for _ in range(length - 1):
word2 = random.choice(self.lookup_dict[word1])
chain.append(word2)
word1 = word2
if word1 not in self.lookup_dict:
break
return ' '.join(chain)

def main():
text = """В своем путешествии по Америке я посетил множество интересных мест и увидел много красивых пейзажей."""
markov = MarkovChain()
markov.train(text)
generated_text = markov.generate_text(20)
print("Сгенерированный текст:", generated_text)

if __name__ == "__main__":
main()


В этом примере:
1. Класс MarkovChain инициализирует внутренний словарь для хранения последовательностей слов.
2. Метод add_words обрабатывает список слов и добавляет каждое слово в словарь вместе со следующим словом как возможное продолжение.
3. Метод train разбивает исходный текст на слова и передает их в add_words.
4. Метод generate_text создает текст определенной длины, начиная со случайного слова и последовательно выбирая следующее слово из возможных вариантов.

Такая программа может быть интересным инструментом для экспериментов с текстовыми данными, создания художественных текстов или даже для разработки игр и приложений, где нужно динамически генерировать текст.

Подпишись 👉🏻 @KodduuPython 🤖
2
Давайте создадим простой скрипт на Python для визуализации данных с использованием библиотеки matplotlib. Этот скрипт будет генерировать случайные данные и визуализировать их в виде графика разброса (scatter plot), который полезен для анализа распределения и корреляций между двумя переменными.

Перед тем как начать, убедитесь, что у вас установлены необходимые библиотеки:

pip install matplotlib numpy


Вот код скрипта:

import numpy as np
import matplotlib.pyplot as plt

def generate_data():
# Генерация случайных данных
x = np.random.rand(50) * 100 # 50 случайных значений X от 0 до 100
y = x * 0.5 + np.random.normal(size=50) * 10 # Y зависит от X, добавляем нормальный шум
return x, y

def plot_data(x, y):
plt.figure(figsize=(8, 5))
plt.scatter(x, y, color='blue', alpha=0.5, label='Data points')
plt.title('Random Data Scatter Plot')
plt.xlabel('X values')
plt.ylabel('Y values')
plt.legend()
plt.grid(True)
plt.show()

def main():
x, y = generate_data()
plot_data(x, y)

if __name__ == "__main__":
main()


В этой программе:
1. Функция generate_data() генерирует случайные данные для двух переменных x и y, где y частично зависит от x с добавлением случайного шума.
2. Функция plot_data() использует matplotlib для создания и отображения графика разброса. Мы настраиваем некоторые аспекты визуализации, такие как цвет точек, подписи осей и сетка.
3. main() вызывает эти функции для выполнения генерации данных и их визуализации.

Этот скрипт можно использовать как основу для более сложных анализов данных, добавляя различные типы графиков, настройки или другие элементы анализа.

Подпишись 👉🏻 @KodduuPython 🤖
🆒2
Допустим, мы хотим создать микросервис для обработки запросов по REST API с использованием асинхронной библиотеки FastAPI. Этот микросервис будет принимать запросы на добавление пользователей в базу данных и возвращать информацию о пользователях.

from fastapi import FastAPI, HTTPException, status
from pydantic import BaseModel
from typing import List
import databases
import sqlalchemy
from sqlalchemy import create_engine, Column, Integer, String, MetaData
import asyncio

DATABASE_URL = "sqlite:///./test.db"
database = databases.Database(DATABASE_URL)
metadata = MetaData()

users = sqlalchemy.Table(
"users",
metadata,
Column("id", Integer, primary_key=True),
Column("name", String(50)),
Column("email", String(50))
)

engine = create_engine(DATABASE_URL)
metadata.create_all(engine)

class User(BaseModel):
id: int
name: str
email: str

class UserCreate(BaseModel):
name: str
email: str

app = FastAPI()

@app.on_event("startup")
async def startup():
await database.connect()

@app.on_event("shutdown")
async def shutdown():
await database.disconnect()

@app.post("/users/", response_model=User, status_code=status.HTTP_201_CREATED)
async def create_user(user: UserCreate):
query = users.insert().values(name=user.name, email=user.email)
last_record_id = await database.execute(query)
return {**user.dict(), "id": last_record_id}

@app.get("/users/", response_model=List[User])
async def read_users():
query = users.select()
result = await database.fetch_all(query)
return result

@app.get("/users/{user_id}", response_model=User)
async def read_user(user_id: int):
query = users.select().where(users.c.id == user_id)
user = await database.fetch_one(query)
if user is None:
raise HTTPException(status_code=404, detail="User not found")
return user


Этот код демонстрирует:

1. Создание базы данных и таблиц с помощью SQLAlchemy.
2. Асинхронное взаимодействие с базой данных через databases.
3. Определение моделей данных с использованием Pydantic для валидации.
4. Обработка API-запросов с помощью FastAPI для создания и чтения данных пользователей.
5. Асинхронный старт и остановка сервиса.

Код написан чисто и модульно, учитывает обработку ошибок и правильно использует асинхронные вызовы для повышения производительности.

Подпишись 👉🏻 @KodduuPython 🤖
Давайте расширим предыдущий пример, добавив к нашему микросервису возможность обновления и удаления данных пользователей. Также мы добавим более сложные элементы, такие как валидация данных и использование средств логирования для отслеживания событий.

import logging
from fastapi import FastAPI, HTTPException, status, Depends
from pydantic import BaseModel, EmailStr, validator
from typing import List, Optional
import databases
import sqlalchemy
from sqlalchemy import create_engine, Column, Integer, String, MetaData
import asyncio

# Setup logger
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

DATABASE_URL = "sqlite:///./test.db"
database = databases.Database(DATABASE_URL)
metadata = MetaData()

users = sqlalchemy.Table(
"users",
metadata,
Column("id", Integer, primary_key=True),
Column("name", String(50)),
Column("email", String(50))
)

engine = create_engine(DATABASE_URL)
metadata.create_all(engine)

class User(BaseModel):
id: int
name: str
email: EmailStr

class UserCreate(BaseModel):
name: str
email: EmailStr

@validator('name')
def validate_name(cls, value):
if not value.isalpha():
raise ValueError('Name must contain only letters')
return value

class UserUpdate(BaseModel):
name: Optional[str] = None
email: Optional[EmailStr] = None

app = FastAPI()

@app.on_event("startup")
async def startup():
await database.connect()
logger.info("Database connection established.")

@app.on_event("shutdown")
async def shutdown():
await database.disconnect()
logger.info("Database connection closed.")

@app.post("/users/", response_model=User, status_code=status.HTTP_201_CREATED)
async def create_user(user: UserCreate):
query = users.insert().values(name=user.name, email=user.email)
last_record_id = await database.execute(query)
logger.info(f"User created with ID: {last_record_id}")
return {**user.dict(), "id": last_record_id}

@app.get("/users/", response_model=List[User])
async def read_users():
query = users.select()
result = await database.fetch_all(query)
logger.info("Read all users")
return result

@app.get("/users/{user_id}", response_model=User)
async def read_user(user_id: int):
query = users.select().where(users.c.id == user_id)
user = await database.fetch_one(query)
if user is None:
logger.warning(f"User not found: {user_id}")
raise HTTPException(status_code=404, detail="User not found")
return user

@app.put("/users/{user_id}", response_model=User)
async def update_user(user_id: int, user: UserUpdate):
query = users.update().where(users.c.id == user_id).values(**user.dict(exclude_unset=True))
await database.execute(query)
updated_user = await read_user(user_id)
logger.info(f"User updated with ID: {user_id}")
return updated_user

@app.delete("/users/{user_id}", status_code=status.HTTP_204_NO_CONTENT)
async def delete_user(user_id: int):
query = users.delete().where(users.c.id == user_id)
await database.execute(query)
logger.info(f"User deleted with ID: {user_id}")
return {"message": "User deleted successfully"}


Этот код включает следующие дополнительные функции:

1. **Валидация данных**: Используется Pydantic для валидации имен и адресов электронной почты пользователей.
2. Логирование: Ведение журнала операций для отслеживания действий пользователей и ошибок.
3. Обновление и удаление данных: API теперь поддерживает запросы PUT и DELETE для обновления и удаления пользователей.

Таким образом, код остается структурированным и читаемым, а также обеспечивает дополнительный контроль над данными и их безопасностью.

Подпишись 👉🏻 @KodduuPython 🤖
Технологии экстремально малоразрядного квантования, такие как BitNet и модели с квантованием до 1.58 бита, представляют собой интересный подход в машинном обучении. Эти методы позволяют существенно сократить объем необходимой памяти и ускорить операции, такие как умножение матриц, за счет использования весов с очень низкой битовой глубиной.

Для реализации такого рода подхода можно использовать библиотеку TensorFlow или PyTorch, которые поддерживают различные техники квантования. Для примера, я покажу, как можно имитировать процесс квантования с использованием TensorFlow. В данном примере мы не будем достигать уровня 1.58 бита, но покажем, как можно квантовать модель с более высоким уровнем квантования, например, до 8 бит:

import tensorflow as tf
from tensorflow.keras.layers import Input, Dense
from tensorflow.keras.models import Model
from tensorflow.keras.datasets import mnist
from tensorflow.keras.utils import to_categorical

# Загружаем и предобрабатываем данные
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
x_train = x_train.reshape(-1, 28*28).astype('float32')
x_test = x_test.reshape(-1, 28*28).astype('float32')
y_train, y_test = to_categorical(y_train, 10), to_categorical(y_test, 10)

# Строим простую модель
inputs = Input(shape=(784,))
x = Dense(128, activation='relu')(inputs)
outputs = Dense(10, activation='softmax')(x)
model = Model(inputs=inputs, outputs=outputs)

# Компилируем модель
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

# Обучаем модель
model.fit(x_train, y_train, batch_size=64, epochs=5, validation_split=0.1)

# Квантуем модель
converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
quantized_model = converter.convert()

# Сохраняем квантованную модель
with open('quantized_model.tflite', 'wb') as f:
f.write(quantized_model)

print("Модель квантована и сохранена.")


В этом примере мы создаем простую нейронную сеть для классификации рукописных цифр из набора данных MNIST, обучаем её, а затем применяем квантование, используя TensorFlow Lite. Квантованная модель имеет значительно меньший размер и может быть более эффективной при выполнении инференса на устройствах с ограниченными ресурсами.

Тем не менее, достижение уровня квантования в 1.58 бита требует специализированных подходов и возможно с использованием более продвинутых техник квантования, которые могут включать собственные разработки алгоритмов или использование экспериментального программного обеспечения.

Подпишись 👉🏻 @KodduuPython 🤖
Один из интересных и нестандартных подходов в сфере искусственного интеллекта связан с использованием генеративно-состязательных сетей (GANs) для создания синтетических данных. Этот метод позволяет генерировать новые, реалистичные образцы данных, которые могут быть использованы для обучения других машинных моделей, увеличения объемов данных без нарушения приватности и для улучшения моделей машинного обучения в условиях дефицита данных.

Примером применения GAN для создания синтетических изображений может служить следующий код на Python с использованием Keras (библиотеки над TensorFlow):

import numpy as np
from keras.models import Sequential
from keras.layers import Dense, LeakyReLU, BatchNormalization, Reshape, Flatten
from keras.layers.convolutional import Conv2D, Conv2DTranspose
from keras.optimizers import Adam
from keras.datasets import mnist

# Загрузка и подготовка данных
(x_train, _), (_, _) = mnist.load_data()
x_train = (x_train - 127.5) / 127.5 # Нормализация данных в диапазон [-1, 1]
x_train = np.expand_dims(x_train, axis=3)

# Параметры
img_rows, img_cols, channels = 28, 28, 1
img_shape = (img_rows, img_cols, channels)

# Генератор
generator = Sequential([
Dense(256, input_dim=100),
LeakyReLU(alpha=0.2),
BatchNormalization(momentum=0.8),
Dense(512),
LeakyReLU(alpha=0.2),
BatchNormalization(momentum=0.8),
Dense(1024),
LeakyReLU(alpha=0.2),
BatchNormalization(momentum=0.8),
Dense(np.prod(img_shape), activation='tanh'),
Reshape(img_shape)
])
generator.summary()

# Дискриминатор
discriminator = Sequential([
Flatten(input_shape=img_shape),
Dense(512),
LeakyReLU(alpha=0.2),
Dense(256),
LeakyReLU(alpha=0.2),
Dense(1, activation='sigmoid')
])
discriminator.summary()
discriminator.compile(loss='binary_crossentropy', optimizer=Adam(0.0002, 0.5), metrics=['accuracy'])

# Состязательная модель
discriminator.trainable = False
gan = Sequential([generator, discriminator])
gan.compile(loss='binary_crossentropy', optimizer=Adam(0.0002, 0.5))

# Тренировка GAN
def train_gan(epochs, batch_size=128, save_interval=50):
for epoch in range(epochs):
# Генерация шума
noise = np.random.normal(0, 1, (batch_size, 100))
# Генерация изображений
gen_imgs = generator.predict(noise)

# Подготовка реальных и синтетических данных
idx = np.random.randint(0, x_train.shape[0], batch_size)
real_imgs = x_train[idx]
valid = np.ones((batch_size, 1))
fake = np.zeros((batch_size, 1))

# Тренировка дискриминатора
d_loss_real = discriminator.train_on_batch(real_imgs, valid)
d_loss_fake = discriminator.train_on_batch(gen_imgs, fake)
d_loss = 0.5 * np.add(d_loss_real, d_loss_fake)

# Тренировка генератора
noise = np.random.normal(0, 1, (batch_size, 100))
g_loss = gan.train_on_batch(noise, valid)

# Прогресс
print(f"{epoch} [D loss: {d_loss[0]}, acc.: {100*d_loss[1]}%] [G loss: {g_loss}]")

# Сохранение изображений
if epoch % save_interval == 0:
noise = np.random.normal(0, 1, (25, 100))
gen_imgs = generator.predict(noise)
gen_imgs = 0.5 * gen_imgs + 0.5 # Денормализация

train_gan(epochs=

10000, batch_size=32, save_interval=1000)


В этом примере:
- Генератор строит изображения из шума.
- Дискриминатор оценивает, насколько реалистично изображение.
- GAN обучается таким образом, чтобы генератор становился все лучше в создании реалистичных изображений, а дискриминатор — в их распознавании.

Такие GANs могут быть использованы в различных областях, от создания искусственного контента до улучшения моделей машинного зрения.

Подпишись 👉🏻 @KodduuPython 🤖
Один из необычных и передовых подходов в искусственном интеллекте — использование нейронных сетей для управления коммуникацией между мозгом и компьютером (BCI, Brain-Computer Interface). Эти технологии позволяют людям управлять внешними устройствами, такими как протезы или компьютеры, используя только свои мыслительные процессы. Нейронные сети играют ключевую роль в декодировании нейронных сигналов, что делает возможным преобразование мысленных команд в управляющие сигналы.

В этом примере мы рассмотрим простую модель, которая использует нейронную сеть для классификации и декодирования ЭЭГ-сигналов. ЭЭГ (электроэнцефалограмма) — это метод регистрации электрической активности мозга, и его данные часто используются в системах BCI.

Пример модели на Python с использованием Keras для классификации ЭЭГ-сигналов:

import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Dropout, LSTM
from keras.utils import to_categorical
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

# Загрузка данных ЭЭГ (здесь мы используем гипотетическую функцию загрузки)
def load_eeg_data():
# В реальном примере данные должны быть загружены и предобработаны соответствующим образом
data = np.random.rand(1000, 128) # 1000 примеров, 128 признаков (например, амплитуды сигналов в разные моменты времени)
labels = np.random.randint(0, 2, 1000) # Бинарные метки классов
return data, labels

# Предобработка данных
data, labels = load_eeg_data()
labels = to_categorical(labels, num_classes=2)
data_train, data_test, labels_train, labels_test = train_test_split(data, labels, test_size=0.2)

# Масштабирование данных
scaler = StandardScaler()
data_train = scaler.fit_transform(data_train)
data_test = scaler.transform(data_test)

# Создание модели
model = Sequential([
LSTM(64, input_shape=(data_train.shape[1], 1), return_sequences=True),
Dropout(0.5),
LSTM(32),
Dropout(0.5),
Dense(2, activation='softmax')
])

# Компиляция модели
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

# Обучение модели
model.fit(data_train[:, :, np.newaxis], labels_train, epochs=20, batch_size=64)

# Оценка модели
loss, accuracy = model.evaluate(data_test[:, :, np.newaxis], labels_test)
print(f"Точность модели: {accuracy * 100}%")


В этом примере:
- Мы используем LSTM (Long Short-Term Memory) слои, так как они хорошо подходят для работы с временными рядами и последовательными данными, какими являются ЭЭГ-сигналы.
- Производится классификация между двумя состояниями на основе ЭЭГ-данных.
- Данные масштабируются для улучшения процесса обучения.

Системы BCI, использующие такой подход, могут быть использованы для помощи людям с ограниченными физическими возможностями, обеспечивая новый способ взаимодействия с окружающим миром.

Подпишись 👉🏻 @KodduuPython 🤖
Давайте рассмотрим ещё один необычный подход в AI, который используется в области сохранения биоразнообразия и экологии — машинное обучение для распознавания и мониторинга видов дикой природы. Этот подход позволяет исследователям и экологам более эффективно отслеживать популяции животных, анализировать их поведение и принимать меры по сохранению видов.

### Пример: Использование ИИ для анализа аудиоданных тропических лесов

Представим, что у нас есть аудиозаписи из тропического леса, и наша задача — обучить модель, которая будет распознавать звуки различных видов животных. Это может помочь в мониторинге биологического разнообразия и раннем обнаружении изменений в экосистеме.

#### Вот пример кода на Python с использованием библиотеки librosa для анализа аудио и keras для создания модели машинного обучения:

import librosa
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Dropout, Conv2D, MaxPooling2D, Flatten
from keras.utils import to_categorical
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder

# Загрузка и предобработка аудиоданных
def load_audio_files(path, labels):
features = []
for file, label in zip(path, labels):
# Загрузка аудиофайла
audio, sr = librosa.load(file, sr=None)
# Извлечение признаков (мел-спектрограмма)
melspec = librosa.feature.melspectrogram(y=audio, sr=sr, n_mels=40)
melspec = librosa.power_to_db(melspec, ref=np.max)
features.append(melspec)
return np.array(features), np.array(labels)

# Предположим, у нас есть список путей к файлам и соответствующие метки
file_paths = ['path/to/audio1.wav', 'path/to/audio2.wav', ...]
labels = ['species1', 'species2', ...]

# Загрузка данных
X, y = load_audio_files(file_paths, labels)

# Кодирование меток
le = LabelEncoder()
y_encoded = le.fit_transform(y)
y_categorical = to_categorical(y_encoded)

# Разделение данных на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X, y_categorical, test_size=0.2, random_state=42)

# Модель
model = Sequential([
Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(X_train.shape[1], X_train.shape[2], 1)),
MaxPooling2D(pool_size=(2, 2)),
Dropout(0.25),
Flatten(),
Dense(128, activation='relu'),
Dropout(0.5),
Dense(len(le.classes_), activation='softmax')
])

# Компиляция и обучение модели
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(X_train, y_train, epochs=10, batch_size=32, validation_data=(X_test, y_test))

# Оценка модели
score = model.evaluate(X_test, y_test, verbose=0)
print(f'Точность модели: {score[1] * 100}%')


В этом примере:
- Мы используем librosa для загрузки аудиофайлов и извлечения мел-спектрограмм, которые являются мощным способом представления аудиосигналов.
- Создаем модель с конволюционными слоями (CNN), которые хорошо подходят для анализа визуаль

Подпишись 👉🏻 @KodduuPython 🤖
Попробуем использовать библиотеку art, которая позволяет создавать арт-тексты и различные виды ASCII арта. Её можно использовать для украшения интерфейсов консольных приложений или просто для развлечения.

### Установка

Для начала вам нужно установить библиотеку, если она у вас ещё не установлена:

pip install art


### Пример использования

Ниже приведён пример скрипта, который выводит различные стили текста и некоторые виды ASCII арта:

from art import *

def main():
# Отображение текста в разных арт-стилях
text_art = text2art("Art!") # Выбор стиля ASCII арта для текста
print(text_art)

font_list = ['block', 'bubble', 'bulbhead'] # Некоторые интересные шрифты для примера
for font in font_list:
print("Font:", font)
print(text2art("Hello!", font=font))

# Добавление различных ASCII изображений
animal_arts = ['butterfly', 'cat', 'dog']
for animal in animal_arts:
print("Animal art for:", animal)
print(art(animal))

# Однолинейный ASCII арт
one_line_art = one_line_art("love")
print("One-line art for love:")
print(one_line_art)

if __name__ == "__main__":
main()


### Описание кода
- text2art: функция для создания арт-текста с использованием разных шрифтов.
- art: функция, возвращающая ASCII изображения из предопределённого списка.
- one_line_art: возвращает символы в виде одной строки для некоторых ключевых слов.

Этот код можно запускать в консоли, и он показывает различные виды искусства ASCII, что может быть особенно интересно для пользовательских сообщений в консольных приложениях или командных файлах.

Подпишись 👉🏻 @KodduuPython 🤖
Чтобы создать код на Python для управления роботизированной рукой, которая может складывать вещи, нужно рассмотреть несколько аспектов: управление сервоприводами руки, логику обнаружения и захвата предметов, а также последовательность действий для складывания.

Допустим, у нас есть роботизированная рука с несколькими степенями свободы, которую мы управляем через Raspberry Pi или Arduino. В этом примере я покажу основной скелет программы на Python, используя библиотеку gpiozero для Raspberry Pi. Если вы используете Arduino или другую систему, код будет отличаться, но концепция останется та же.

### Шаг 1: Настройка
Установите библиотеку gpiozero, если вы используете Raspberry Pi. Это можно сделать через pip:

pip install gpiozero


### Шаг 2: Код программы

from gpiozero import Servo
from time import sleep

# Настройка GPIO пинов для сервоприводов
# Пример: GPIO17, GPIO27, GPIO22 для основания, плеча и кисти соответственно
servo_base = Servo(17)
servo_arm = Servo(27)
servo_hand = Servo(22)

def initialize():
""" Инициализирует руку в начальное положение """
servo_base.mid()
servo_arm.min()
servo_hand.min()
sleep(1)

def pick_item():
""" Процедура захвата предмета """
servo_hand.max() # Открывает захват
sleep(1)
servo_arm.max() # Опускает руку
sleep(1)
servo_hand.min() # Закрывает захват
sleep(1)
servo_arm.min() # Поднимает руку
sleep(1)

def place_item():
""" Помещает предмет в новое место """
servo_arm.max()
sleep(1)
servo_hand.max()
sleep(1)
servo_arm.min()
sleep(1)

def main():
initialize()
while True:
pick_item()
servo_base.max() # Поворот на 90 градусов для размещения
sleep(1)
place_item()
servo_base.mid() # Возвращение в исходное положение
sleep(10) # Ожидание перед следующим циклом

if __name__ == "__main__":
main()


### Объяснение кода
1. Инициализация: Рука устанавливается в начальное положение.
2. Захват предмета: Рука опускается, захватывает предмет и поднимается обратно.
3. Перемещение предмета: Рука переносит предмет, помещает его в новое место и возвращается.

Этот код является лишь примером и предполагает, что вы знаете размеры и веса объектов, которые рука будет перемещать, и что они всегда будут находиться в доступном месте. В реальных условиях также понадобится интеграция с системами машинного зрения для точного определения положения объектов и возможно использование более сложных алгоритмов для управления сервоприводами.

Подпишись 👉🏻 @KodduuPython 🤖
👍1
Создадим основу программы для управления складским роботом, который может перемещаться по складу, поднимать и перемещать коробки с одного места на другое. Этот код будет использовать концепцию конечных автоматов для управления различными состояниями робота: поиск товара, подход к товару, подъем товара, перенос товара и разгрузка товара.

### Шаг 1: Установка
Для начала установим библиотеку transitions, которая поможет нам управлять состояниями робота.

pip install transitions


### Шаг 2: Код программы

from transitions import Machine
import time

class WarehouseRobot:
states = ['searching', 'approaching', 'lifting', 'carrying', 'unloading']

def __init__(self):
self.machine = Machine(model=self, states=WarehouseRobot.states, initial='searching')

# Добавление переходов
self.machine.add_transition(trigger='find_item', source='searching', dest='approaching')
self.machine.add_transition(trigger='reach_item', source='approaching', dest='lifting')
self.machine.add_transition(trigger='lift_item', source='lifting', dest='carrying')
self.machine.add_transition(trigger='deliver_item', source='carrying', dest='unloading')
self.machine.add_transition(trigger='unload_item', source='unloading', dest='searching')

def find_item(self):
print("Ищу товар...")

def reach_item(self):
print("Подхожу к товару...")

def lift_item(self):
print("Поднимаю товар...")

def deliver_item(self):
print("Переношу товар...")

def unload_item(self):
print("Разгружаю товар...")

def simulate_robot():
robot = WarehouseRobot()
actions = [robot.find_item, robot.reach_item, robot.lift_item, robot.deliver_item, robot.unload_item]

# Имитация работы робота
for action in actions:
action()
time.sleep(2) # Добавлено задержка для имитации времени выполнения задач

if __name__ == "__main__":
simulate_robot()


### Объяснение кода
- Инициализация и состояния: Робот начинает в состоянии searching, где он ищет товар на складе.
- Переходы: Когда робот находит товар, он переходит в состояние approaching, затем в lifting, carrying и unloading.
- Действия: Для каждого состояния определены специфические действия (например, reach_item означает подход к товару).

Этот простой пример показывает основную структуру программы управления складским роботом. В реальных условиях потребуется интеграция с системами для навигации и манипуляции в реальном мире, а также возможно интеграция с системами складского учета.

Подпишись 👉🏻 @KodduuPython 🤖
Давайте рассмотрим пример программы для управления роботом-уборщиком, который перемещается по определённой территории, обнаруживает и убирает мусор. В этом примере мы также воспользуемся концепцией конечных автоматов и добавим элементы случайности для имитации обнаружения мусора. Такой робот может найти применение в парках, на улицах или в больших помещениях.

### Шаг 1: Установка библиотеки
Установите библиотеку transitions и random, если последняя ещё не установлена:

pip install transitions
pip install random


### Шаг 2: Код программы

import random
from transitions import Machine
import time

class CleaningRobot:
states = ['patrolling', 'detecting', 'cleaning', 'returning']

def __init__(self):
self.machine = Machine(model=self, states=CleaningRobot.states, initial='patrolling')

# Добавление переходов
self.machine.add_transition('detect_trash', 'patrolling', 'detecting')
self.machine.add_transition('clean_trash', 'detecting', 'cleaning')
self.machine.add_transition('trash_cleaned', 'cleaning', 'returning')
self.machine.add_transition('finish_cleaning', 'returning', 'patrolling')

def patrol(self):
print("Патрулирую территорию...")
if random.randint(0, 10) > 8:
self.detect_trash()
else:
time.sleep(1) # Имитация времени патрулирования

def detect_trash(self):
print("Обнаружен мусор!")
time.sleep(1)
self.clean_trash()

def clean_trash(self):
print("Убираю мусор...")
time.sleep(2)
self.trash_cleaned()

def return_to_base(self):
print("Возвращаюсь на базу для опорожнения мусора...")
time.sleep(2)
self.finish_cleaning()

def simulate_robot():
robot = CleaningRobot()
for _ in range(10): # Симуляция 10 циклов работы робота
robot.patrol()

if __name__ == "__main__":
simulate_robot()


### Объяснение кода
- Состояния и переходы: Робот начинает с патрулирования (patrolling). Если обнаруживает мусор, переходит в состояние detecting, затем cleaning, после чистки — returning, и возвращается к патрулированию.
- Действия: Для каждого состояния определено конкретное действие, включая паузы для имитации затрат времени на выполнение задач.
- Случайное обнаружение мусора: Используется модуль random для имитации случайного обнаружения мусора во время патрулирования.

Этот пример демонстрирует базовую структуру программы для управления роботом-уборщиком. В реальности, такой робот может использовать датчики и камеры для более точного обнаружения мусора и препятствий на своём пути.

Подпишись 👉🏻 @KodduuPython 🤖
Программа для робота-охранника может включать мониторинг территории, обнаружение вторжений и реагирование на них. Давайте создадим пример кода, используя конечный автомат для управления различными состояниями робота: патрулирование, обнаружение вторжения, преследование и вызов помощи.

### Шаг 1: Установка библиотеки
Установите библиотеку transitions:

pip install transitions


### Шаг 2: Код программы

from transitions import Machine
import random
import time

class SecurityRobot:
states = ['patrolling', 'detecting', 'chasing', 'calling_for_help']

def __init__(self):
self.machine = Machine(model=self, states=SecurityRobot.states, initial='patrolling')

# Добавление переходов
self.machine.add_transition('detect_intruder', 'patrolling', 'detecting')
self.machine.add_transition('start_chase', 'detecting', 'chasing')
self.machine.add_transition('call_help', 'detecting', 'calling_for_help')
self.machine.add_transition('intruder_gone', 'chasing', 'patrolling')
self.machine.add_transition('help_arrived', 'calling_for_help', 'patrolling')

def patrol(self):
print("Патрулирую территорию...")
if random.randint(0, 20) > 18:
self.detect_intruder()

def detect_intruder(self):
print("Обнаружен вторженец! Пытаюсь идентифицировать...")
time.sleep(2)
if random.randint(0, 5) > 3:
self.start_chase()
else:
self.call_help()

def chase_intruder(self):
print("Преследую вторженца...")
time.sleep(3)
if random.randint(0, 5) > 2:
print("Вторженец сбежал.")
self.intruder_gone()
else:
self.call_help()

def call_for_help(self):
print("Вызываю помощь!")
time.sleep(3)
print("Помощь прибыла, возвращаюсь к патрулированию.")
self.help_arrived()

def simulate_robot():
robot = SecurityRobot()
for _ in range(10): # Симуляция 10 циклов работы робота
robot.patrol()
time.sleep(1)

if __name__ == "__main__":
simulate_robot()


### Объяснение кода
- Состояния и переходы: Робот начинает с патрулирования (patrolling). При обнаружении вторженца переходит в состояние detecting, где выбирает между началом преследования (chasing) или вызовом помощи (calling_for_help).
- Реагирование: В зависимости от случайного исхода, робот может преследовать вторженца или сразу вызывать помощь.
- Возвращение к патрулированию: После окончания ситуации робот возвращается к патрулированию.

Этот код демонстрирует базовую структуру программы для управления роботом-охранником. В реальных условиях, такой робот может использовать камеры, датчики движения и другие технологии для более точного обнаружения и отслеживания вторженцев, а также для автоматического вызова помощи.

Подпишись 👉🏻 @KodduuPython 🤖
🏆2
### Классификация товаров с использованием машинного обучения на Python

В современном ритейле одной из ключевых задач является автоматизация процессов, включая классификацию товаров. Это не только сокращает время обработки данных, но и повышает точность работы системы управления запасами. Python предлагает мощные инструменты для решения такой задачи, в частности, с помощью библиотеки PyTorch можно эффективно реализовать модели глубокого обучения для классификации изображений товаров.

#### Подготовка данных

Для начала работы нам нужен набор данных, содержащий изображения товаров и соответствующие метки классов. В этом примере мы используем упрощённый набор данных, аналогичный MNIST, но в реальных условиях это будут фотографии товаров. Для обучения модели требуется следующий код подготовки данных:

from torchvision import datasets, transforms
from torch.utils.data import DataLoader

# Трансформации для предобработки изображений
transform = transforms.Compose([
transforms.Resize((128, 128)),
transforms.ToTensor(),
transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5])
])

# Загрузка данных
train_data = datasets.ImageFolder(root='path_to_train_data', transform=transform)
train_loader = DataLoader(dataset=train_data, batch_size=32, shuffle=True)


#### Создание модели

Следующий шаг — создание модели нейронной сети. Мы будем использовать свёрточную нейронную сеть (CNN), так как она хорошо подходит для задач обработки изображений:

import torch
import torch.nn as nn
import torch.nn.functional as F

class CNN(nn.Module):
def __init__(self):
super(CNN, self).__init__()
self.conv1 = nn.Conv2d(3, 32, kernel_size=5, stride=1, padding=2)
self.pool = nn.MaxPool2d(kernel_size=2, stride=2, padding=0)
self.conv2 = nn.Conv2d(32, 64, kernel_size=5, stride=1, padding=2)
self.fc1 = nn.Linear(64 * 32 * 32, 1000)
self.fc2 = nn.Linear(1000, 10) # предполагается 10 классов товаров

def forward(self, x):
x = self.pool(F.relu(self.conv1(x)))
x = self.pool(F.relu(self.conv2(x)))
x = x.view(-1, 64 * 32 * 32)
x = F.relu(self.fc1(x))
x = self.fc2(x)
return x

model = CNN()


#### Обучение модели

Третий шаг — обучение модели. Здесь важно правильно выбрать функцию потерь и оптимизатор:

import torch.optim as optim

criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

# Цикл обучения
for epoch in range(10):
for i, (images, labels) in enumerate(train_loader):
optimizer.zero_grad()
outputs = model(images)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()

if (i+1) % 100 == 0:
print(f'Epoch [{epoch+1}/10], Step [{i+1}], Loss: {loss.item():.4f}')


#### Применение и оценка модели

После обучения модели важно проверить её эффективность на тестовом наборе данных и на реальных примерах из бизнеса. Оценка качества классификации поможет понять, насколько хорошо модель справляется с задачей в условиях, максимально

приближенных к реальным.

#### Заключение

Автоматизация классификации товаров с помощью глубокого обучения на Python позволяет значительно повысить эффективность розничной торговли. Используя современные инструменты и алгоритмы, компании могут не только оптимизировать свои процессы, но и улучшить пользовательский опыт, предлагая быстрее и точнее обслуживание клиентов.

Подпишись 👉🏻 @KodduuPython 🤖
Давай напишем небольшой код на Python, который будет моделировать движение планет в солнечной системе. Мы создадим упрощённую систему с Солнцем, Землёй и Марсом, используя законы Ньютона и гравитационные силы.

Код будет использовать библиотеку matplotlib для анимации движения планет, чтобы вы могли визуализировать, как они движутся по своим орбитам.

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

# Константы
G = 6.67430e-11 # Гравитационная постоянная Ньютона
AU = 1.496e11 # одна астрономическая единица (расстояние от Земли до Солнца в метрах)
TIMESTEP = 24 * 3600 # один день в секундах

# Инициализация планет
class Planet:
def __init__(self, name, mass, distance, velocity):
self.name = name
self.mass = mass
self.pos = np.array([distance, 0])
self.vel = np.array([0, velocity])
self.trail = np.empty((0, 2), float)

def update_position(self, timestep):
self.trail = np.vstack([self.trail, self.pos])
self.pos += self.vel * timestep

def update_velocity(self, timestep, forces):
self.vel += forces / self.mass * timestep

def compute_gravitational_force(p1, p2):
distance_vector = p2.pos - p1.pos
distance = np.linalg.norm(distance_vector)
force_magnitude = G * p1.mass * p2.mass / distance**2
force_vector = force_magnitude * distance_vector / distance
return force_vector

# Создаем систему
sun = Planet('Sun', 1.989e30, 0, 0)
earth = Planet('Earth', 5.972e24, AU, 29.78e3)
mars = Planet('Mars', 6.39e23, 1.524 * AU, 24.077e3)

planets = [sun, earth, mars]

# Функция для обновления позиций и скоростей
def update_system(planets, timestep):
forces = {}
for planet in planets:
total_force = np.array([0.0, 0.0])
for other_planet in planets:
if planet != other_planet:
force = compute_gravitational_force(planet, other_planet)
total_force += force
forces[planet] = total_force

for planet in planets:
planet.update_velocity(timestep, forces[planet])
planet.update_position(timestep)

# Визуализация
fig, ax = plt.subplots()
ax.set_xlim(-2 * AU, 2 * AU)
ax.set_ylim(-2 * AU, 2 * AU)

points = {planet: ax.plot([], [], 'o', label=planet.name)[0] for planet in planets}
trails = {planet: ax.plot([], [], '-', color=points[planet].get_color())[0] for planet in planets}

def animate(frame):
update_system(planets, TIMESTEP)
for planet in planets:
points[planet].set_data(planet.pos[0], planet.pos[1])
trails[planet].set_data(planet.trail[:, 0], planet.trail[:, 1])
return points.values(), trails.values()

ani = FuncAnimation(fig, animate, frames=365, interval=50, blit=True)

plt.legend()
plt.show()


В этом коде мы моделируем орбиты Земли и Марса вокруг Солнца на протяжении одного земного года. Вы можете запустить этот код в любом Python окружении, которое поддерживает matplotlib.

Подпишись 👉🏻 @KodduuPython 🤖