Отзывы на наш самый быстрый курс по Python 🤖 Спасибо за все комментарии, курс был еще раз значительно улучшен по результатам ваших вводных 🤝
Подпишись 👉🏻 @KodduuPython 🤖
Подпишись 👉🏻 @KodduuPython 🤖
👍2
Вот код для анимации движения частиц, которые следуют за полем ветра, визуализированным стрелками. В этом коде используется библиотека
### Объяснение:
1. Поле ветра: Используем
2. Частицы: Частицы (синие точки) движутся по направлению ветра, обновляя свои позиции на каждом кадре на основе текущего значения
3. Стрелки (quiver): Красные стрелки отображают направление и скорость ветра в каждом кадре, обновляясь вместе с полем ветра.
4. Анимация:
Подпишись 👉🏻 @KodduuPython 🤖
matplotlib для отображения стрелок, которые показывают направление и скорость ветра, и движущихся частиц, которые следуют этому полю.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from noise import pnoise2 # Убедитесь, что установлен пакет noise (pip install noise)
# Параметры сетки и шума
grid_size = 10
num_particles = 200
scale = 0.1 # Масштаб шума
speed = 0.05 # Скорость изменения шума
time_step = 0
# Инициализация начальных позиций частиц
particles_x = np.random.uniform(0, grid_size, num_particles)
particles_y = np.random.uniform(0, grid_size, num_particles)
# Функция для генерации поля ветра с использованием перлин-шума
def generate_wind_field(time):
U = np.zeros((grid_size, grid_size))
V = np.zeros((grid_size, grid_size))
for i in range(grid_size):
for j in range(grid_size):
U[i, j] = pnoise2(i * scale, j * scale, octaves=3, base=int(time)) * 5
V[i, j] = pnoise2(i * scale + 100, j * scale + 100, octaves=3, base=int(time)) * 5
return U, V
# Настройка графика
fig, ax = plt.subplots(figsize=(8, 8))
ax.set_xlim(0, grid_size)
ax.set_ylim(0, grid_size)
# Начальная визуализация частиц и стрелок
scat = ax.scatter(particles_x, particles_y, color='blue', s=2)
U, V = generate_wind_field(time_step)
quiver = ax.quiver(np.linspace(0, grid_size, grid_size), np.linspace(0, grid_size, grid_size), U, V, color='red')
# Функция инициализации
def init():
scat.set_offsets(np.c_[particles_x, particles_y])
quiver.set_UVC(U, V)
return scat, quiver
# Функция обновления анимации
def update(frame):
global particles_x, particles_y, time_step
U, V = generate_wind_field(time_step)
time_step += speed
# Обновление стрелок
quiver.set_UVC(U, V)
# Интерполяция скорости ветра для частиц
particle_u = np.interp(particles_x, np.linspace(0, grid_size, grid_size), U[:, int(particles_y[0]) % grid_size])
particle_v = np.interp(particles_y, np.linspace(0, grid_size, grid_size), V[int(particles_x[0]) % grid_size, :])
# Обновление позиций частиц
particles_x = (particles_x + particle_u * 0.1) % grid_size
particles_y = (particles_y + particle_v * 0.1) % grid_size
scat.set_offsets(np.c_[particles_x, particles_y])
return scat, quiver
# Запуск анимации
ani = animation.FuncAnimation(fig, update, frames=200, init_func=init, interval=50, blit=True)
plt.show()
### Объяснение:
1. Поле ветра: Используем
pnoise2 для создания переменных U и V, которые определяют горизонтальные и вертикальные компоненты скорости ветра. Значения U и V изменяются со временем, создавая динамическое поле ветра.2. Частицы: Частицы (синие точки) движутся по направлению ветра, обновляя свои позиции на каждом кадре на основе текущего значения
U и V.3. Стрелки (quiver): Красные стрелки отображают направление и скорость ветра в каждом кадре, обновляясь вместе с полем ветра.
4. Анимация:
FuncAnimation обновляет позиции частиц и стрелок для каждого кадра, создавая плавное движение воздушных масс.Подпишись 👉🏻 @KodduuPython 🤖
Пример кода для прогнозирования спроса на продукт с использованием временных рядов и модели ARIMA. Этот код поможет предсказать будущий спрос на продукт на основе предыдущих данных о продажах. ARIMA (AutoRegressive Integrated Moving Average) — популярная модель для анализа и прогнозирования временных рядов.
### Объяснение:
1. Подготовка данных: Загружаем временной ряд продаж и визуализируем данные.
2. Создание модели: Настраиваем параметры модели ARIMA и обучаем её на исторических данных.
3. Прогноз: Строим прогноз на 30 дней вперед.
4. Оценка модели: Вычисляем среднеквадратичную ошибку (MSE) для тестовой выборки, чтобы оценить точность прогноза.
### Примечания:
- Параметры модели ARIMA (`p`,
- Этот пример подходит для анализа и прогнозирования временных рядов, таких как продажи, спрос, посещаемость и другие временные данные.
Подпишись 👉🏻 @KodduuPython 🤖
import pandas as pd
import numpy as np
from statsmodels.tsa.arima.model import ARIMA
import matplotlib.pyplot as plt
from sklearn.metrics import mean_squared_error
# Загрузка данных о продажах
# Предположим, у нас есть временной ряд с ежедневными данными о продажах
data = pd.read_csv('sales_data.csv')
data['date'] = pd.to_datetime(data['date'])
data.set_index('date', inplace=True)
# Визуализируем данные
plt.figure(figsize=(10, 6))
plt.plot(data, label='Daily Sales')
plt.title('Sales Data')
plt.xlabel('Date')
plt.ylabel('Sales')
plt.legend()
plt.show()
# Создание модели ARIMA
# (p, d, q) - параметры модели, их можно подбирать автоматически, но здесь поставим примерные значения
p, d, q = 5, 1, 2
model = ARIMA(data['sales'], order=(p, d, q))
fitted_model = model.fit()
# Прогноз на 30 дней вперед
forecast_steps = 30
forecast = fitted_model.forecast(steps=forecast_steps)
# Построение графика прогноза
plt.figure(figsize=(10, 6))
plt.plot(data, label='Historical Sales')
plt.plot(pd.date_range(data.index[-1], periods=forecast_steps+1, closed='right'), forecast, color='red', label='Forecast')
plt.title('Sales Forecast for Next 30 Days')
plt.xlabel('Date')
plt.ylabel('Sales')
plt.legend()
plt.show()
# Оценка точности модели (например, среднеквадратичная ошибка на последних 30 днях)
train_size = int(len(data) * 0.8)
train, test = data['sales'][:train_size], data['sales'][train_size:]
model = ARIMA(train, order=(p, d, q))
fitted_model = model.fit()
forecast_test = fitted_model.forecast(steps=len(test))
mse = mean_squared_error(test, forecast_test)
print(f"Mean Squared Error: {mse}")
### Объяснение:
1. Подготовка данных: Загружаем временной ряд продаж и визуализируем данные.
2. Создание модели: Настраиваем параметры модели ARIMA и обучаем её на исторических данных.
3. Прогноз: Строим прогноз на 30 дней вперед.
4. Оценка модели: Вычисляем среднеквадратичную ошибку (MSE) для тестовой выборки, чтобы оценить точность прогноза.
### Примечания:
- Параметры модели ARIMA (`p`,
d, q`) можно подобрать автоматически с помощью библиотек, таких как `pmdarima, которая содержит функцию auto_arima, чтобы выбрать лучшие параметры на основе критериев оценки модели.- Этот пример подходит для анализа и прогнозирования временных рядов, таких как продажи, спрос, посещаемость и другие временные данные.
Подпишись 👉🏻 @KodduuPython 🤖
⚡2
И не забываем про бесплатный курс "Язык программирования BrainFuck или ВыносМозга!", отзывы говорят сами за себя 😀 Курс для тех кто хочет напрячь мозг, и понять - как же все таки работает компьютер 💻
Подпишись 👉🏻 @KodduuPython 🤖
Подпишись 👉🏻 @KodduuPython 🤖
Вот код для отображения видимого пути Марса на небесной сфере в течение 2024 года. Используем библиотеку Skyfield для расчета астрономических позиций и matplotlib для визуализации.
### Краткое объяснение:
1. Эфемеридные данные: Загружаем данные о положении планет из файла
2. Местоположение наблюдателя: Создаем объект, представляющий наблюдателя на Земле на экваторе.
3. Расчет траектории: Для каждого дня 2024 года рассчитываем прямое восхождение (RA) и склонение (Dec) Марса.
4. Визуализация: Строим график, показывающий видимое движение Марса на небесной сфере.
Подпишись 👉🏻 @KodduuPython 🤖
from skyfield.api import load, Topos
import matplotlib.pyplot as plt
# Загрузка эфемерида
ephemeris = load('de440s.bsp')
earth = ephemeris['earth'] # Центральное тело Земли
mars_barycenter = ephemeris['mars barycenter'] # Барицентр системы Марса
# Создаем местоположение наблюдателя на Земле
location = earth + Topos(latitude_degrees=0.0, longitude_degrees=0.0)
# Выбор временного интервала
timescale = load.timescale()
dates = timescale.utc(2024, range(1, 366)) # Каждый день 2024 года
# Координаты прямого восхождения (RA) и склонения (Dec) для каждого дня
ra_values = []
dec_values = []
for date in dates:
astrometric = location.at(date).observe(mars_barycenter)
ra, dec, distance = astrometric.radec()
ra_values.append(ra.hours)
dec_values.append(dec.degrees)
# Визуализация движения Марса на звездном небе
plt.figure(figsize=(10, 6))
plt.plot(ra_values, dec_values, label="Mars Path", color='red')
plt.xlabel("Right Ascension (hours)")
plt.ylabel("Declination (degrees)")
plt.title("Apparent Path of Mars on the Celestial Sphere in 2024")
plt.gca().invert_xaxis() # Инверсия оси для астрономической системы
plt.legend()
plt.grid()
plt.show()
### Краткое объяснение:
1. Эфемеридные данные: Загружаем данные о положении планет из файла
de440s.bsp.2. Местоположение наблюдателя: Создаем объект, представляющий наблюдателя на Земле на экваторе.
3. Расчет траектории: Для каждого дня 2024 года рассчитываем прямое восхождение (RA) и склонение (Dec) Марса.
4. Визуализация: Строим график, показывающий видимое движение Марса на небесной сфере.
Подпишись 👉🏻 @KodduuPython 🤖
Надо помнить - в Python некоторые вещи могут зависеть от настроек инстанса интерпретатора.
Например вот такой случай, "print(a, b)" может выдавать разный вывод на Stepik и на вашем локальном Python. И не смотря на то, что при сравнении результата кода с expected здесь используется strip(), который должен срезать все пробелы спереди и сзади, вот в этом конкретном случае сравнение идет целиком всех букв сразу, и будет разница и fail при "print(a) print(b)" vs "print(a, b)", поэтому ВАЖНО использовать конструкции, которые не зависят от настроек интерпретатора, например "print(a + b)", вместо "print(a, b)".
Как понять что зависит, а что нет? 🤨 С этим сложнее - например достаточно знать синтаксис языка C, и его аналоги переиспользовать даже в Python, тогда все будет ok.
Подпишись 👉🏻 @KodduuPython 🤖
Например вот такой случай, "print(a, b)" может выдавать разный вывод на Stepik и на вашем локальном Python. И не смотря на то, что при сравнении результата кода с expected здесь используется strip(), который должен срезать все пробелы спереди и сзади, вот в этом конкретном случае сравнение идет целиком всех букв сразу, и будет разница и fail при "print(a) print(b)" vs "print(a, b)", поэтому ВАЖНО использовать конструкции, которые не зависят от настроек интерпретатора, например "print(a + b)", вместо "print(a, b)".
Как понять что зависит, а что нет? 🤨 С этим сложнее - например достаточно знать синтаксис языка C, и его аналоги переиспользовать даже в Python, тогда все будет ok.
Подпишись 👉🏻 @KodduuPython 🤖
Тем не менее незнание С не особождает от ответственности 🧐 Если столкнулись с ситуацией когда визуально все ok, а оно говорит не совпадает 🤷 Надо прокачивать другой важный скилл разработчика - debugging и root cause analysis. Надо пойти в "любой" online diff checker и сравнить два текста, и увидеть что разница все таки есть. Кстати diff чекеру тоже доверять на 100% не надо, вот как в этом случае он показывает, что посимвольно разницы нет (снизу должен был показать красным добавленые пробелы), но кол-во символов то разное 👆Вот тут мы все и поняли 😀
Курс про который идет тут речь вот тут 🔥
Подпишись 👉🏻 @KodduuPython 🤖
Курс про который идет тут речь вот тут 🔥
Подпишись 👉🏻 @KodduuPython 🤖
Пример кода, который моделирует взаимодействие материи и антивещества. В нем мы создадим простую симуляцию, где частицы вещества и антивещества движутся в пространстве и аннигилируют при столкновении. Этот пример визуализирует, как происходит аннигиляция, что является ключевой концепцией антивещества.
### Объяснение:
1. Начальные позиции и скорости: Создаются случайные позиции и направления для частиц материи и антивещества в заданной области.
2. Отражение от стенок: Частицы отскакивают от стенок, если достигают границы области.
3. Проверка на аннигиляцию: Когда частица материи находится на определенном расстоянии от частицы антивещества, обе частицы "аннигилируют" — их позиции заменяются на
4. Анимация:
### Ключевая идея:
Когда частица материи и антивещества сталкиваются, они аннигилируют, исчезая из пространства симуляции, что демонстрирует основную концепцию антивещества.
Подпишись 👉🏻 @KodduuPython 🤖
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
# Параметры симуляции
num_particles = 50 # Число частиц вещества и антивещества
box_size = 10 # Размер области
# Начальные позиции и направления для частиц вещества и антивещества
positions_matter = np.random.uniform(0, box_size, (num_particles, 2))
positions_antimatter = np.random.uniform(0, box_size, (num_particles, 2))
velocities_matter = np.random.uniform(-1, 1, (num_particles, 2))
velocities_antimatter = np.random.uniform(-1, 1, (num_particles, 2))
# Создание графика
fig, ax = plt.subplots(figsize=(6, 6))
ax.set_xlim(0, box_size)
ax.set_ylim(0, box_size)
matter_plot = ax.scatter(positions_matter[:, 0], positions_matter[:, 1], color='blue', label='Matter')
antimatter_plot = ax.scatter(positions_antimatter[:, 0], positions_antimatter[:, 1], color='red', label='Antimatter')
plt.legend()
# Функция обновления для анимации
def update(frame):
global positions_matter, positions_antimatter
# Обновляем позиции частиц
positions_matter += velocities_matter
positions_antimatter += velocities_antimatter
# Отражение от стенок
for pos, vel in [(positions_matter, velocities_matter), (positions_antimatter, velocities_antimatter)]:
vel[pos < 0] *= -1
vel[pos > box_size] *= -1
# Проверка на столкновения и аннигиляцию
for i, pos_m in enumerate(positions_matter):
distances = np.linalg.norm(positions_antimatter - pos_m, axis=1)
collision_indices = np.where(distances < 0.5)[0] # Радиус аннигиляции
# Удаление столкнувшихся частиц
if len(collision_indices) > 0:
positions_matter[i] = np.nan # Устанавливаем NaN для "аннигилированных" частиц
positions_antimatter[collision_indices] = np.nan
# Обновляем отображение частиц
matter_plot.set_offsets(positions_matter)
antimatter_plot.set_offsets(positions_antimatter)
return matter_plot, antimatter_plot
# Запуск анимации
ani = animation.FuncAnimation(fig, update, frames=200, interval=50, blit=True)
plt.show()
### Объяснение:
1. Начальные позиции и скорости: Создаются случайные позиции и направления для частиц материи и антивещества в заданной области.
2. Отражение от стенок: Частицы отскакивают от стенок, если достигают границы области.
3. Проверка на аннигиляцию: Когда частица материи находится на определенном расстоянии от частицы антивещества, обе частицы "аннигилируют" — их позиции заменяются на
NaN, чтобы их не отображать.4. Анимация:
FuncAnimation обновляет позиции и проверяет столкновения, создавая визуализацию аннигиляции.### Ключевая идея:
Когда частица материи и антивещества сталкиваются, они аннигилируют, исчезая из пространства симуляции, что демонстрирует основную концепцию антивещества.
Подпишись 👉🏻 @KodduuPython 🤖
👍2