Python для начинающих
1.06K subscribers
283 photos
3 videos
232 files
61 links
Python для начинающих
Download Telegram
Создание виртуальных агентов с использованием библиотеки SIMBA.
Привет, друзья! Сегодня копнем чуть глубже в захватывающий мир Python и искусственного интеллекта. Рассмотрим, как создавать виртуальных агентов с помощью необычной, но очень мощной библиотеки — SIMBA.

SIMBA (Simple Intelligent Multiagent-Based Architecture) — это легковесный инструмент на Python для моделирования поведения агентов в симулированной среде. Проще говоря, он позволяет вам создавать умных ботов, которые могут принимать решения, взаимодействовать с окружением и друг с другом.

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

Начнем с простого примера: допустим, у нас есть мир, где несколько агентов ищут еду. Каждый агент может видеть окружение, двигаться и принимать решения.

Установка SIMBA:

pip install simba-agents


Теперь создаем базового агента:

from simba.agents import BaseAgent

class ForagerAgent(BaseAgent):
def __init__(self, name):
super().__init__(name)
self.energy = 10

def decide(self, perception):
if 'food' in perception:
return 'eat'
return 'move_randomly'

def act(self, action):
if action == 'eat':
self.energy += 5
elif action == 'move_randomly':
self.energy -= 1


В этом примере у каждого агента есть "энергия". Он смотрит на мир, решает, что делать (если рядом еда — ест, иначе — двигается случайно), и выполняет действие.

Теперь создаем простую среду:

from simba.environment import GridWorld

env = GridWorld(width=10, height=10)
agent = ForagerAgent("Alex")
env.add_agent(agent, position=(5, 5))
env.add_object('food', position=(6, 5))


Запускаем симуляцию:

for _ in range(10):
perception = env.get_perception(agent)
action = agent.decide(perception)
agent.act(action)
env.step()


Вуаля! У нас есть первый виртуальный агент. Конечно, это ещё не уровень GTA или The Sims, но вы уже можете создавать более сложные поведения: задания, эмоции, даже память!

SIMBA поддерживает и более продвинутые вещи — коммуникацию между агентами, настройку целей и ограничений, сценарии с многими участниками. Всё это можно комбинировать, чтобы строить обучающиеся модели, игровые NPC, симуляции толпы и многое другое.

Почему стоит попробовать?

- Прост в использовании: код читаемый, API понятный.
- Расширяемость: легко создавать свои типы агентов и объектов.
- Визуализация: можно подключать простую графику для отслеживания симуляции.

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

В следующий раз придумаем что-то более масштабное — например, колонию роботов на Марсе 😉

На этом всё, с вами был Иван. Программируйте интересно!
Интеграция инженерных моделей в Python-приложения.
Интеграция инженерных моделей в Python-приложения: от сырой формулы до готового сервиса

Когда инженеры говорят про "модель", они чаще всего имеют в виду набор уравнений или алгоритм, описывающий поведение системы. Численное моделирование, теплообмен, механика, электрика, химия — практически любая физическая дисциплина опирается на такие модели. А если нужно сделать из них что-то полезное? Например, веб-сервис расчёта теплообмена для проектировщиков? Здесь в игру вступает Python.

Основной плюс Python в этой задаче — богатство библиотек. Инженеры описывают модель на бумаге, а Python даёт возможность быстро превратить её в работающий код. Сегодня мы посмотрим, как можно встроить инженерную модель в реальное приложение — с минимальными усилиями и максимальной пользой.

Допустим, у нас есть простая модель расчёта теплопередачи через стену:

q = U A (Tinside - Toutside)

Где:
- U — коэффициент теплопередачи (Вт/м²·K),
- A — площадь стены (м²),
- Tinside и Toutside — температуры внутри и снаружи (°C).

Первым делом оформим это в отдельную функцию:

def heat_transfer(U, A, T_inside, T_outside):
return U * A * (T_inside - T_outside)


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

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class HeatRequest(BaseModel):
U: float
A: float
T_inside: float
T_outside: float

@app.post("/calculate_heat/")
def calculate_heat(data: HeatRequest):
q = heat_transfer(data.U, data.A, data.T_inside, data.T_outside)
return {"heat_loss": q}


Запускается это всё одной командой:

uvicorn main:app --reload


И вот у нас есть полноценный API, который принимает параметры инженерной модели и возвращает результат.

Далее по вкусу:
- можно добавить сохранение в базе (SQLAlchemy),
- логгирование и валидацию (Pydantic, logging),
- построение графиков (matplotlib, plotly)
- даже экспорт в Excel (openpyxl)

Если модель сложнее и реализована в специализированных пакетах вроде SciPy, pyomo (оптимизационные задачи) или sympy (символьная математика) — всё равно можно завернуть её в API на FastAPI, Flask или даже прямую CLI-утилиту.

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

Заключение? Простая инженерная формула может стать основой для серьёзного приложения, если завернуть её во что-то, что удобно использовать. И Python — прекрасный инструмент для такого превращения.
Настройка и использование приложений для анализа медицинских изображений.
🔥 Медицинские изображения и Python: сила технологий в ваших руках

Привет! Это Иван. Сегодня мы перенесемся в мир медицины — не для постановки диагноза, а чтобы посмотреть, как Python помогает врачам и исследователям анализировать медицинские снимки. Нет, это не искусственный интеллект, заменяющий докторов, а реальные инструменты, которые извлекают информацию из снимков МРТ, КТ и рентгена — быстро и эффективно.

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

- pydicom — работа с DICOM-файлами (медицинский стандарт хранения изображений),
- matplotlib и opencv-python — визуализация и первичная обработка,
- numpy — численные операции,
- scikit-image — продвинутые методы обработки изображений.

📦 Установка:

pip install pydicom opencv-python matplotlib numpy scikit-image


👌 Взгляд на DICOM

Медицинские изображения обычно хранятся в формате DICOM. Давайте откроем одно такое изображение и визуализируем его.

import pydicom
import matplotlib.pyplot as plt

dicom_file = pydicom.dcmread("example.dcm")
image_data = dicom_file.pixel_array

plt.imshow(image_data, cmap="gray")
plt.title("Original DICOM Image")
plt.axis("off")
plt.show()


Просто и понятно. Выгружаем пиксельные данные и визуализируем. Но это только начало.

✂️ Немного обработки

Теперь применим фильтр контуров, чтобы выделить аномалии или границы органов.

import cv2
import numpy as np

# Преобразуем данные в формат uint8 (от 0 до 255)
image_uint8 = cv2.convertScaleAbs(image_data)

# Применяем оператор Canny
edges = cv2.Canny(image_uint8, threshold1=50, threshold2=150)

plt.imshow(edges, cmap='gray')
plt.title("Edges Detected")
plt.axis("off")
plt.show()


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

🔬 Сегментация

Предположим, нужно выделить определённую область — например, легкие на снимке грудной клетки. Хотите магии? Давайте поработаем с порогами.

from skimage import filters

threshold = filters.threshold_otsu(image_uint8)
binary_mask = image_uint8 > threshold

plt.imshow(binary_mask, cmap='gray')
plt.title("Otsu Segmentation")
plt.axis("off")
plt.show()


Алгоритм Отсу — это способ найти “разумный” порог разделения. В результате получаем бинарное изображение, где нужная область выделяется автоматически.

🙌 Что дальше?

Дальше можно добавлять нейросеть, делать 3D-реконструкции, сохранять результаты в виде отчётов... Но самое важное: инструменты уже в ваших руках. Даже базовая визуализация может помочь исследователю сократить время анализа, а врачу — сфокусироваться на главном.

Не бойтесь сложных тем — с Python всё становится доступным. Увидимся в следующем посте ✌️

— Иван, программист.
Создание приложений управления освещением с использованием Raspberry Pi и Python.
Привет! Сегодня в нашем блоге — прикладная магия Python, а именно: управление освещением с помощью Raspberry Pi. Это не просто теоретическое упражнение, это настоящий шаг в мир умного дома. Готовы превратить свою лампочку в IoT-устройство? Погнали!

🛠 Что понадобится?

- Raspberry Pi (подойдет даже Zero W)
- Светодиод или реле (если хотите управлять настоящими лампами)
- Резистор на 220 Ом (если светодиод)
- Несколько проводов и макетная плата
- Немного терпения и Python

Подключим светодиод к GPIO-контакту, например, к пину 17. Не забудьте резистор между GPIO и анодом диода, чтобы не сжечь вывод.

Теперь к коду.

📦 Используем библиотеку gpiozero — она значительно упрощает работу с GPIO.

Простейшая версия программы для включения лампочки выглядит так:

from gpiozero import LED
from time import sleep

led = LED(17)

while True:
led.on()
sleep(1)
led.off()
sleep(1)


Это базовая моргалка, идеальная для проверки подключения.

А теперь сделаем чуть умнее: управление светом по времени суток. Например, включать освещение после заката.

Для этого используем библиотеку astral, которая дает информацию о времени восхода и заката солнца по геолокации.

Установка:

pip install astral


Пример:

from gpiozero import LED
from time import sleep
from datetime import datetime
from astral import LocationInfo
from astral.sun import sun

led = LED(17)
city = LocationInfo("Moscow", "Russia", "Europe/Moscow", 55.7558, 37.6173)

def is_dark():
s = sun(city.observer, date=datetime.now().date())
now = datetime.now(city.timezone)
return now < s['sunrise'] or now > s['sunset']

while True:
if is_dark():
led.on()
else:
led.off()
sleep(60)


Теперь лампа сама включается вечером и выключается утром — как у настоящих хайтек-грибов 🍄

🎛 Хотите больше интерактива? Подключите веб-интерфейс или контролируйте свет через Telegram-бота. А можно добавить датчик движения — и получить "умный" ночник.

💡 В чем польза?

- Изучаете работу с GPIO
- Используете сторонние модули Python (gpiozero, astral)
- Получаете практическое понимание реального применения Python в IoT

На этом всё! Пусть ваш код будет светлым — во всех смыслах этого слова :)
Как использовать Ansible и Python для автоматизации системных задач.
Как использовать Ansible и Python для автоматизации системных задач.
Привет! Сегодня копнем в сторону автоматики — поговорим о том, как использовать Ansible и Python для автоматизации системных задач. Ansible сам по себе мощный инструмент, но иногда хочется чуть больше гибкости — тут на помощь и приходит Python. Совместно они превращаются в универсальный швейцарский нож DevOps'а.

🎯 Зачем это вообще нужно?

Представим типичный сценарий: у вас есть десяток серверов, на которых нужно установить nginx, обновить пакеты, разложить конфиги. Можно, конечно, вручную, но это скучно и долго. Ansible позволяет описать всё это в виде playbook'ов — вы просто нажимаете "старт", и магия происходит сама. Но если нужна логика посложнее — Python готов помочь.

📦 Установка Ansible и библиотек

Начнем с подготовки:

pip install ansible
pip install ansible-runner


ansible-runner — это модуль, который позволяет управлять Ansible-скриптами напрямую из Python.

🛠 Простой playbook

Давайте создадим playbook, который обновляет систему и устанавливает htop.

Файл: update_install.yml

- hosts: all
become: true
tasks:
- name: Update apt cache
apt:
update_cache: yes

- name: Install htop
apt:
name: htop
state: present


Запуск playbook из Python

Теперь напишем скрипт, который запустит этот playbook прямо из Python.

import ansible_runner

def run_playbook():
result = ansible_runner.run(private_data_dir='.', playbook='update_install.yml')
print("Status:", result.status)
print("RC:", result.rc)

for e in result.events:
print(e.get('stdout', ''))

run_playbook()


Важно, чтобы рядом лежал файл inventory с описанием хостов.

Файл: inventory

[servers]
192.168.1.10 ansible_user=ubuntu ansible_ssh_private_key_file=~/.ssh/id_rsa


🔁 Генерация динамического инвентори на Python

Вместо статического файла можно сгенерировать список хостов прямо из Python:

import json

inventory = {
"all": {
"hosts": ["192.168.1.10", "192.168.1.11"],
"vars": {
"ansible_user": "ubuntu",
"ansible_ssh_private_key_file": "~/.ssh/id_rsa"
}
}
}

with open("inventory.json", "w") as f:
json.dump(inventory, f)


Запуск с таким инвентори:

result = ansible_runner.run(
private_data_dir='.',
playbook='update_install.yml',
inventory='inventory.json'
)


🚀 Бонус: передача переменных из Python

Нужно передать параметры в playbook? Не проблема:

extra_vars = {
"package_name": "nginx"
}

ansible_runner.run(
private_data_dir='.',
playbook='install_pkg.yml',
extravars=extra_vars
)


А в самом playbook:

- name: Install package
hosts: all
become: true
tasks:
- name: Install {{ package_name }}
apt:
name: "{{ package_name }}"
state: present


🔥 Вывод

Вместе Ansible и Python открывают ворота в мир мощной и гибкой автоматизации. Хотите запустить плейбук после триггера в Django или по расписанию через Celery? Просто запускайте нужный скрипт. Это отличная пара для тех, кто предпочитает программировать инфраструктуру, а не кликать по консоли.

С вами был Иван. Пиши код и автоматизируй всё вокруг!
🔥2
Работа с протоколом SNMP для управления сетевыми устройствами.
Привет! Сегодня мы окунемся в мир сетей — разберемся, как с помощью Python управлять сетевыми устройствами через протокол SNMP. Если тебе кажется, что это сложно — спешу успокоить: всё на удивление просто, особенно если использовать правильные библиотеки.

SNMP (Simple Network Management Protocol) — это протокол, который позволяет считывать информацию о состоянии устройств в сети и даже управлять ими. Чаще всего его используют для мониторинга роутеров, свитчей, принтеров и серверов.

Для работы с SNMP в Python существует отличная библиотека — pysnmp. Она поддерживает все версии протокола и предоставляет простой интерфейс для запросов.

Установим её:

pip install pysnmp


Разберем простой пример: считаем системное имя (sysName) устройства.

from pysnmp.hlapi import *

iterator = getCmd(
SnmpEngine(),
CommunityData('public', mpModel=0), # SNMPv1/v2c
UdpTransportTarget(('192.168.1.1', 161)),
ContextData(),
ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysName', 0))
)

errorIndication, errorStatus, errorIndex, varBinds = next(iterator)

if errorIndication:
print(f"Error: {errorIndication}")
elif errorStatus:
print(f"{errorStatus.prettyPrint()} at {errorIndex}")
else:
for varBind in varBinds:
print(f"{varBind[0].prettyPrint()} = {varBind[1].prettyPrint()}")


В этом скрипте мы запрашиваем объект sysName.0, который представляет имя хоста. Обрати внимание: указывается IP-адрес устройства и SNMP-комьюнити. Здесь мы используем community public, распространённое значение по умолчанию — но лучше использовать свою для безопасности.

Теперь пример посложнее: соберем список интерфейсов.

from pysnmp.hlapi import *

for (errorIndication,
errorStatus,
errorIndex,
varBinds) in nextCmd(SnmpEngine(),
CommunityData('public'),
UdpTransportTarget(('192.168.1.1', 161)),
ContextData(),
ObjectType(ObjectIdentity('IF-MIB', 'ifDescr')),
lexicographicMode=False):
if errorIndication:
print(f"Error: {errorIndication}")
break
elif errorStatus:
print(f"{errorStatus.prettyPrint()} at {errorIndex}")
break
else:
for varBind in varBinds:
print(f"{varBind[0]} = {varBind[1]}")


Функция nextCmd выполняет последовательный опрос — это удобно, когда нужно пройти по дереву OID'ов, например, чтобы получить список интерфейсов.

А теперь — изюминка! Через SNMP можно не только читать данные, но и изменять параметры. Например, выключить интерфейс. Но для этого нужно использовать права на запись, а значит подбирать правильное community и понимать последствия.

Вот пример с setCmd:

from pysnmp.hlapi import *

errorIndication, errorStatus, errorIndex, varBinds = next(
setCmd(SnmpEngine(),
CommunityData('private'), # community с правами записи
UdpTransportTarget(('192.168.1.1', 161)),
ContextData(),
ObjectType(ObjectIdentity('IF-MIB', 'ifAdminStatus', 2), Integer(2))) # 2 = down
)

if errorIndication:
print(f"Error: {errorIndication}")
elif errorStatus:
print(f"{errorStatus.prettyPrint()} at {errorIndex}")
else:
print("Interface disabled successfully")


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

На этом всё. SNMP — мощный инструмент в арсенале Python-программиста, особенно если ты работаешь с сетевым оборудованием. Надеюсь, теперь ты смотришь на сетевые протоколы без страха — скорее с азартом исследователя.

Увидимся в следующих постах!
— Иван
👍2
Работа с текстом: использование модуля textwrap для форматирования строк
📦 Python для начинающих: форматируем текст как профи с помощью textwrap

Привет! С вами Иван, и сегодня я расскажу про один из тех модулей стандартной библиотеки Python, который редко упоминают, но который может прилично упростить жизнь — особенно, если вы работаете с текстами. Речь пойдет о модуле textwrap. Он помогает красиво разносить текст по строкам, контролировать ширину текста, оформлять вывод — всего лишь парой строк кода.

Представьте, что вы делаете консольный словарь, новостной бот или пишете отчет в текстовый файл. Текст должен хорошо читаться, особенно в терминале. Вот тут в игру вступает textwrap.

Начнем с простого:

import textwrap

sample_text = "Python is a powerful high-level programming language known for its readability and versatility."

wrapped = textwrap.fill(sample_text, width=40)
print(wrapped)


Результат будет такой:

Python is a powerful high-level
programming language known for its
readability and versatility.


Функция fill возвращает строку, где длинный текст красиво "перенесен" на несколько строк, каждая — не длиннее 40 символов. Если больше — строки будут обрезаться и переноситься.

Теперь представим, что вы хотите получить список строк, чтобы, например, написать их в файл построчно. Тогда подойдет метод wrap:

lines = textwrap.wrap(sample_text, width=30)
for line in lines:
print(line)


Результат:

Python is a powerful high-
level programming language
known for its readability and
versatility.


Но это еще не всё! Бывали ли у вас случаи, когда нужно было красиво оформить блок текста с отступом или добавить префикс к каждой строке, например, "> " для цитаты? Вот как это делается:

quote = textwrap.fill(sample_text, width=50, initial_indent="> ", subsequent_indent="> ")
print(quote)


Получим:

> Python is a powerful high-level programming
> language known for its readability and
> versatility.


А ещё есть текстовая "обрезка". Не всегда хочется показывать пользователю весь текст. Иногда достаточно одного абзаца. Вот как можно аккуратно "усечь" строку до нужного количества символов с добавлением троеточия:

short = textwrap.shorten(sample_text, width=50, placeholder="...")
print(short)


Вывод:

Python is a powerful high-level programming...


textwrap — это простой, но мощный способ сделать текст более читаемым и привлекательным прямо из консоли. Особенно он полезен, если вы оформляете сообщения, вывод или простые отчеты в текстовые файлы. Не стоит недооценивать, насколько визуальная чистота и читаемость важны даже в командной строке.

На этом всё. Форматируйте с умом — и пиши красиво, даже в консоли! 👨‍💻

– Иван.
👍1
Как извлекать метаданные из изображений с помощью PIL
Как извлекать метаданные из изображений с помощью PIL
Привет! Сегодня разберёмся, как с помощью библиотеки PIL (а точнее — её форка Pillow) извлекать метаданные из изображений. Возможно, ты удивишься, но внутри фотографии может скрываться целая история: модель камеры, геолокация съёмки, ориентация, дата и даже настройки экспозиции. Эта информация называется EXIF (Exchangeable Image File Format). Так что давай копнём глубже!

📸 Что такое EXIF?

Многие изображения, особенно сделанные на смартфоны или цифровые камеры, содержат EXIF-метаданные. Они встраиваются внутрь JPEG-файлов и могут включать:

- Дату и время съёмки
- Геолокацию (если включена на устройстве)
- Параметры камеры (ISO, диафрагма, выдержка)
- Модель устройства

Для извлечения этой информации, мы будем использовать библиотеку Pillow.

📦 Установка Pillow

Если у тебя ещё не установлена Pillow, пора это исправить:

pip install pillow


🔍 Пример 1: Извлекаем EXIF

from PIL import Image
from PIL.ExifTags import TAGS

def get_exif_data(image_path):
image = Image.open(image_path)
exif_data = image._getexif()

if not exif_data:
return {}

readable_exif = {}
for tag, value in exif_data.items():
tag_name = TAGS.get(tag, tag)
readable_exif[tag_name] = value
return readable_exif

metadata = get_exif_data("example.jpg")

for key, value in metadata.items():
print(f"{key}: {value}")


В этой функции мы используем _getexif(), чтобы достать "сырой" словарь с числовыми тегами. Затем мы красиво преобразуем их в читаемые названия с помощью словаря TAGS.

🗺 Пример 2: Достаём координаты

EXIF может содержать GPS-информацию, но она закодирована хитро. Примерно так выглядит выделение широты и долготы:

from PIL.ExifTags import GPSTAGS

def get_gps_info(exif_data):
gps_info = exif_data.get("GPSInfo")
if not gps_info:
return None

gps_data = {}
for key in gps_info:
name = GPSTAGS.get(key, key)
gps_data[name] = gps_info[key]
return gps_data

gps = get_gps_info(metadata)
print(gps)


Чтобы перевести координаты в привычный вид (десятичные градусы), нужно будет ещё немного математики — но это тема для отдельного поста.

💡 Полезные советы

- Не все изображения содержат EXIF. Лучше проверяй, что _getexif() не вернул None.
- Некоторые поля, особенно GPS, могут не присутствовать даже если они поддерживаются.
- Для более продвинутой работы с GPS или редактирования EXIF-данных рекомендую посмотреть сторону библиотеки piexif.

📌 Заключение

Pillow даёт простой способ заглянуть в "паспорт" изображения. Если ты занимаешься обработкой фото, создаёшь галереи или строишь приложения с геометками — умение читать EXIF точно тебе пригодится.

На сегодня всё, с тобой был Иван. Программируй с интересом!
Создание диаграмм и графиков с использованием Plotly Express
💡 Python для начинающих: создаем диаграммы и графики с Plotly Express

Привет! Я — Иван, и сегодня в нашем блоге мы познакомимся с одной из самых визуально приятных и мощных библиотек для создания интерактивных графиков в Python — Plotly Express.

Если вы устали от статичных графиков из matplotlib и хотите добавить немного “вау”-эффекта в свои визуализации, Plotly Express вас точно не разочарует. Прост в использовании, эффектен с первого взгляда — идеальный инструмент для тех, кто только начинает погружаться в анализ данных.

📦 Установка

Для начала нужно установить Plotly (если ещё не установлено):

pip install plotly


📊 Первая диаграмма — разброс на макс

Представим, что у нас есть простой датафрейм с ростом и весом людей. Построим график рассеяния:

import plotly.express as px
import pandas as pd

data = pd.DataFrame({
'height_cm': [160, 165, 170, 175, 180, 185],
'weight_kg': [55, 60, 65, 72, 80, 90],
'gender': ['female', 'female', 'male', 'male', 'male', 'female']
})

fig = px.scatter(data,
x='height_cm',
y='weight_kg',
color='gender',
title='Height vs Weight')
fig.show()


Что круто: график интерактивный. Можно навести курсор на точку и увидеть значения. А ещё можно приближать, выделять область и даже сохранять изображение в PNG без усилий.

📈 Линии? Не вопрос!

Допустим, у нас есть рост населения по годам. Построим линейную диаграмму:

df = pd.DataFrame({
'year': [2015, 2016, 2017, 2018, 2019, 2020],
'population': [7.2, 7.4, 7.5, 7.6, 7.7, 7.8]
})

fig = px.line(df, x='year', y='population', title='World Population Over Time')
fig.show()


Одной строкой — и дашборд готов

Вместо десятка строк кода ты получаешь красивую интерактивную визуализацию буквально двумя-тремя строчками. И это особенно полезно при быстрой работе с данными — будь то исследовательский анализ (EDA) или презентация результата.

📚 Несколько дополнительных идей

- px.bar — строит столбчатые диаграммы
- px.pie — для круговых диаграмм
- px.histogram — удобно строить распределения
- px.box — boxplot без боли

Каждая из функций поддерживает такие параметры, как color, size, symbol, facetrow и facetcol — они позволяют легко группировать и сравнивать данные по категориям без сложных манипуляций.

🧙‍♂️ Заключение

Plotly Express — это мощь и простота в одном флаконе. Если ты начинаешь свой путь в анализе данных и хочешь делать визуализации, которые впечатляют — дай этой библиотеке шанс. Начни с простого scatter, поиграй со стилями... и ты не заметишь, как она станет любимой частью твоего стека.

До встречи в следующем посте! 🐍
👍2