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

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

Во вопросам сотрудничества: @AlexErf
Download Telegram
Интересно, когда Python используется для создания необычных вещей. Давайте напишем код, который будет генерировать "Облако слов" на основе текста, который мы предоставляем.

Для этого нам понадобится библиотека wordcloud, которую можно установить с помощью pip:

bash
pip install wordcloud


Теперь давайте сгенерируем облако слов на основе некоторого текста:

python
from wordcloud import WordCloud
import matplotlib.pyplot as plt

def generate_wordcloud(text):
wordcloud = WordCloud(width = 800, height = 800,
background_color ='white',
stopwords = None,
min_font_size = 10).generate(text)

plt.figure(figsize = (8, 8), facecolor = None)
plt.imshow(wordcloud)
plt.axis("off")
plt.tight_layout(pad = 0)

plt.show()

text = """
Python is an interpreted high-level general-purpose programming language. Python's design philosophy emphasizes code readability with its notable use of significant indentation. Its language constructs as well as its object-oriented approach aim to help programmers write clear, logical code for small and large-scale projects.
"""

generate_wordcloud(text)


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

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

Подпишись 👉🏻 @KodduuPython 🤖
1
Вот простой код на Python, который использует модуль zipfile для создания архива из указанной папки.

python
import os
import zipfile

def zipdir(path, ziph):
# ziph - это zipfile handle
for root, dirs, files in os.walk(path):
for file in files:
ziph.write(os.path.join(root, file),
os.path.relpath(os.path.join(root, file),
os.path.join(path, '..')))

def create_zip_archive(folder_path, archive_name):
zipf = zipfile.ZipFile(archive_name, 'w', zipfile.ZIP_DEFLATED)
zipdir(folder_path, zipf)
zipf.close()

# Путь к папке, которую вы хотите архивировать
folder_path = '/path/to/your/folder'

# Имя файла архива
archive_name = 'my_archive.zip'

create_zip_archive(folder_path, archive_name)


Обратите внимание, что вам нужно заменить /path/to/your/folder на путь к папке, которую вы хотите архивировать, а my_archive.zip - на имя, которое вы хотите дать архиву.

Этот простой архиватор архивирует все файлы в указанной папке и ее подпапках.

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

Подпишись 👉🏻 @KodduuPython 🤖
👍2
Архивация данных - это сложная тема и подразумевает не только сжатие, но и группировку данных в одном файле. Однако в качестве примера я могу предложить вам простейший алгоритм сжатия данных без использования сторонних библиотек - это алгоритм сжатия RLE (Run-length encoding).

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

Вот пример реализации на Python:

python
def rle_encode(data):
encoding = ''
i = 0

while i < len(data):
count = 1
while i + 1 < len(data) and data[i] == data[i+1]:
i += 1
count += 1
encoding += str(count) + data[i]
i += 1

return encoding

def rle_decode(data):
decoding = ''
count = ''
for char in data:
if char.isdigit():
count += char
else:
decoding += char * int(count)
count = ''
return decoding

# Исходные данные
data = 'AAAABBBCCD'

# Сжатие данных
encoded_data = rle_encode(data)
print(f'Encoded: {encoded_data}') # 4A3B2C1D

# Декодирование данных
decoded_data = rle_decode(encoded_data)
print(f'Decoded: {decoded_data}') # AAAABBBCCD


В этом примере мы сначала кодируем строку 'AAAABBBCCD' с использованием алгоритма RLE, а затем декодируем ее обратно в исходную форму.

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

Подпишись 👉🏻 @KodduuPython 🤖
Примера простого алгоритма шифрования данных, который называется шифром Цезаря. Этот алгоритм является типом подстановочного шифра, в котором каждый символ в тексте заменяется символом, смещенным на некоторое количество позиций в алфавите. Например, с сдвигом на 1, A будет заменено на B, B станет C и т.д.

Ниже приведен код, демонстрирующий алгоритм шифра Цезаря:

python
def caesar_encrypt(text, shift):
result = ""

# проходимся по каждому символу
for i in range(len(text)):
char = text[i]

# проверяем, является ли символ буквой
if char.isalpha():
# определяем, является ли буква заглавной
ascii_offset = 65 if char.isupper() else 97
result += chr((ord(char) - ascii_offset + shift) % 26 + ascii_offset)
else:
result += char

return result

def caesar_decrypt(text, shift):
return caesar_encrypt(text, -shift)

# текст для шифрования
text = "Hello, World!"
# сдвиг
shift = 3

encrypted = caesar_encrypt(text, shift)
print(f"Encrypted: {encrypted}") # Khoor, Zruog!

decrypted = caesar_decrypt(encrypted, shift)
print(f"Decrypted: {decrypted}") # Hello, World!


В этом коде функция caesar_encrypt шифрует текст путем смещения каждого символа на заданное количество позиций (shift). Функция caesar_decrypt расшифровывает текст путем смещения каждого символа в обратном направлении. Обратите внимание, что этот код работает только для английского алфавита и не обрабатывает символы, которые не являются буквами.

Подпишись 👉🏻 @KodduuPython 🤖
В Python для работы с PostgreSQL часто используется библиотека psycopg2. Допустим, у нас есть база данных для онлайн-библиотеки. В этой базе данных есть таблица "books", где хранится информация о книгах. В таблице есть следующие поля: id (идентификатор книги), title (название книги) и author (автор книги).

Наша задача - выбрать все книги определенного автора.

python
import psycopg2

# Подключаемся к БД
conn = psycopg2.connect(
dbname='library_db',
user='librarian',
password='securepassword',
host='localhost',
port='5432'
)

# Создаем курсор
cursor = conn.cursor()

# Имя автора, книги которого мы хотим найти
author_name = 'Джордж Оруэлл'

# Выполняем запрос
cursor.execute("SELECT * FROM books WHERE author = %s", (author_name,))

# Получаем все книги этого автора
books = cursor.fetchall()

for book in books:
print(f'ID: {book[0]}, Название: {book[1]}, Автор: {book[2]}')

# Закрываем соединение
cursor.close()
conn.close()


Этот пример показывает, как можно выбрать все книги определенного автора из таблицы "books" в нашей базе данных "library_db". Имя автора, книги которого мы хотим найти, задается в переменной author_name.

Важно отметить, что использование параметризованных запросов (как в этом примере, где мы используем %s и передаем параметры в execute через кортеж) является важной мерой предотвращения SQL-инъекций.

Этот пример предполагает, что у вас на локальной машине запущен сервер PostgreSQL и у вас есть доступ к нему с указанными учетными данными.

Подпишись 👉🏻 @KodduuPython 🤖
В Python для работы с MySQL обычно используется библиотека mysql-connector-python. Допустим, мы работаем с базой данных интернет-магазина и в ней есть таблица "products", где хранится информация о продуктах.

Вот пример кода, который выбирает все продукты из определенной категории:

python
import mysql.connector

# Подключаемся к базе данных
db = mysql.connector.connect(
host="localhost",
user="your_username",
passwd="your_password",
database="shop_db"
)

# Создаем курсор
cursor = db.cursor()

# Категория товаров, которую мы хотим найти
category = 'Электроника'

# Выполняем запрос
query = "SELECT * FROM products WHERE category = %s"
cursor.execute(query, (category,))

# Получаем все продукты из этой категории
products = cursor.fetchall()

for product in products:
print(f'ID: {product[0]}, Название: {product[1]}, Категория: {product[2]}, Цена: {product[3]}')

# Закрываем соединение
cursor.close()
db.close()


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

Как и в предыдущем примере, использование параметризованных запросов (т.е. передача параметров через кортеж в метод execute) помогает предотвратить SQL-инъекции.

Подпишись 👉🏻 @KodduuPython 🤖
Рассмотрим задачу обучения простой модели машинного обучения с использованием библиотеки sklearn для распознавания рукописных цифр из набора данных MNIST:

python
from sklearn.datasets import fetch_openml
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
import seaborn as sns

# Загружаем данные MNIST
X, y = fetch_openml('mnist_784', version=1, return_X_y=True)

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

# Нормализуем данные
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

# Обучаем модель логистической регрессии
model = LogisticRegression()
model.fit(X_train, y_train)

# Предсказываем значения для тестовой выборки
y_pred = model.predict(X_test)

# Выводим точность модели
print('Accuracy:', accuracy_score(y_test, y_pred))

# Выводим матрицу ошибок
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)
plt.figure(figsize=(10,7))
sns.heatmap(cm, annot=True, fmt='d')
plt.ylabel('Actual')
plt.xlabel('Predicted')
plt.show()


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

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

Это пример, как можно нарисовать очень упрощенный автомобиль с использованием линий:

python
import matplotlib.pyplot as plt

# Создание фигуры
fig, ax = plt.subplots()

# Рисование тела автомобиля
body_x = [1, 2, 3, 4, 5, 6, 6, 5, 4, 3, 2, 1]
body_y = [1, 2, 2, 3, 3, 2, 1, 1, 1, 1, 1, 1]
plt.plot(body_x, body_y)

# Рисование колес
circle1 = plt.Circle((2, 1), 0.5, color='black')
circle2 = plt.Circle((5, 1), 0.5, color='black')

ax.add_patch(circle1)
ax.add_patch(circle2)

# Установка ограничений
plt.xlim([0, 7])
plt.ylim([0, 4])

# Удаление осей
plt.axis('off')

# Показать фигуру
plt.show()


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

Подпишись 👉🏻 @KodduuPython 🤖
Как насчет программы, которая использует API сервиса OpenWeatherMap, чтобы получить текущую погоду для заданного города?

Примечание: вам нужен API-ключ от OpenWeatherMap, чтобы использовать эту программу. Вы можете получить его бесплатно, зарегистрировавшись на сайте OpenWeatherMap.

python
import requests

def get_weather(city, api_key):
base_url = "http://api.openweathermap.org/data/2.5/weather"
params = {
'q': city,
'appid': api_key,
'units': 'metric'
}
response = requests.get(base_url, params=params)
weather_data = response.json()

description = weather_data['weather'][0]['description']
temp = weather_data['main']['temp']
humidity = weather_data['main']['humidity']

print(f'Погода в {city}: {description}')
print(f'Температура: {temp}°C')
print(f'Влажность: {humidity}%')

# Замените 'your_api_key' на свой ключ API от OpenWeatherMap
get_weather('Moscow', 'your_api_key')


Когда вы запускаете эту программу, она делает запрос к API OpenWeatherMap и получает информацию о погоде для заданного города. Затем она выводит описание погоды, температуру и влажность.

Подпишись 👉🏻 @KodduuPython 🤖
👍1
Как насчет интерактивной программы для создания графов функций? Мы будем использовать библиотеку matplotlib для построения графиков и numpy для вычисления значений функции.

python
import numpy as np
import matplotlib.pyplot as plt

def plot_func():
x = np.linspace(-10, 10, 400)

function = input("Введите функцию, которую нужно построить (используйте 'np' для вызова функций numpy, например, np.sin(x)): ")
y = eval(function)

plt.plot(x, y)
plt.title(f"График функции {function}")
plt.grid(True)
plt.show()

plot_func()


При выполнении этого скрипта вам будет предложено ввести функцию, которую нужно построить. Вы можете использовать любую функцию из numpy, используя префикс np.. Например, если вы хотите построить график функции sin(x), введите np.sin(x).

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

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

Для этого нам понадобится библиотека wordcloud, которую можно установить с помощью pip:

bash
pip install wordcloud


Теперь давайте сгенерируем облако слов на основе некоторого текста:

python
from wordcloud import WordCloud
import matplotlib.pyplot as plt

def generate_wordcloud(text):
wordcloud = WordCloud(width = 800, height = 800,
background_color ='white',
stopwords = None,
min_font_size = 10).generate(text)

plt.figure(figsize = (8, 8), facecolor = None)
plt.imshow(wordcloud)
plt.axis("off")
plt.tight_layout(pad = 0)

plt.show()

text = """
Python is an interpreted high-level general-purpose programming language. Python's design philosophy emphasizes code readability with its notable use of significant indentation. Its language constructs as well as its object-oriented approach aim to help programmers write clear, logical code for small and large-scale projects.
"""

generate_wordcloud(text)


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

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

Подпишись 👉🏻 @KodduuPython 🤖
👍1
Этот код создает небольшую текстовую RPG (ролевую игру), где пользователь должен выбирать свои действия.

python
class Character:
def __init__(self, name, health, power):
self.name = name
self.health = health
self.power = power

def attack(self, enemy):
enemy.health -= self.power
print(f"{self.name} attacks {enemy.name}!")

def is_alive(self):
return self.health > 0

class Player(Character):
def decision(self, enemy):
decision = input("Do you want to [A]ttack, [H]eal, or [R]un away? ")
if decision.upper() == "A":
self.attack(enemy)
elif decision.upper() == "H":
self.health += 10
print(f"{self.name} heals!")
elif decision.upper() == "R":
print(f"{self.name} runs away...")
return False
return True

class Enemy(Character):
pass

def game():
player = Player("Hero", 50, 10)
enemy = Enemy("Enemy", 50, 5)

while player.is_alive() and enemy.is_alive():
print(f"{player.name} HP: {player.health}, {enemy.name} HP: {enemy.health}")
if not player.decision(enemy):
break
if enemy.is_alive():
enemy.attack(player)

game()


В этой игре вы играете за "Hero" и сражаетесь с "Enemy". Ваша цель - уничтожить врага, управляя своим персонажем: атакуйте врага, лечите себя или бегите, если ситуация становится слишком опасной.

Подпишись 👉🏻 @KodduuPython 🤖
Вот еще один интересный пример кода на Python. Этот код генерирует бесконечную последовательность чисел Фибоначчи.

python
def fibonacci():
a, b = 0, 1
while True:
yield a
a, b = b, a + b

fib = fibonacci()

for _ in range(10):
print(next(fib))


В этом коде используется концепция генераторов в Python. Функция fibonacci является бесконечным генератором, который продолжает возвращать числа Фибоначчи каждый раз, когда мы вызываем next(fib). Поскольку это бесконечный генератор, вы можете продолжать вызывать next(fib) сколько угодно раз, и он продолжит возвращать следующее число Фибоначчи.

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

Подпишись 👉🏻 @KodduuPython 🤖
Вот пример кода на Python, который записывает аудио с микрофона, сохраняет его в файл, а затем воспроизводит этот файл. Мы будем использовать библиотеку sounddevice для записи и воспроизведения звука, и библиотеку scipy для сохранения звуковых данных в файл.

Установите эти библиотеки, используя pip, если они у вас еще не установлены:

pip install sounddevice scipy


А вот пример кода:

python
import sounddevice as sd
from scipy.io.wavfile import write, read
import numpy as np

# Настройте длительность записи в секундах и частоту дискретизации
duration = 5.0 # seconds
fs = 44100 # Sampling frequency

# Запись звука
print("Начинаем запись")
recording = sd.rec(int(duration * fs), samplerate=fs, channels=2)
sd.wait() # Wait until recording is finished
print("Запись завершена")

# Сохранение записи в файл
write('output.wav', fs, recording)

# Чтение файла
fs, data = read('output.wav')

# Воспроизведение записанного звука
print("Воспроизведение записи")
sd.play(data, fs)
sd.wait() # Wait until file is done playing
print("Воспроизведение завершено")


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

Обратите внимание: Этот код работает с устройствами ввода/вывода звука по умолчанию на вашей машине. Если у вас есть специфические требования к оборудованию, вам возможно придется добавить дополнительные параметры при вызове sd.rec и sd.play.

Подпишись 👉🏻 @KodduuPython 🤖
👏2
Еще пример работы со звуком на Python может включать анализ звука, например, вычисление и визуализацию спектрограммы звукового сигнала. Для этого мы будем использовать библиотеки numpy, scipy и matplotlib.

Установите необходимые библиотеки, если они еще не установлены:

pip install numpy scipy matplotlib


Пример кода:

python
import numpy as np
from scipy.io.wavfile import read
from scipy.signal import spectrogram
import matplotlib.pyplot as plt

# Чтение WAV файла
fs, data = read('output.wav')

# Если аудио стерео (2 канала), преобразуем его в моно (1 канал)
if len(data.shape) > 1:
data = np.mean(data, axis=1)

# Вычисление спектрограммы
freqs, times, Sx = spectrogram(data, fs=fs, nperseg=1024, noverlap=512, window='hann', scaling='spectrum')

# Построение спектрограммы
plt.figure(figsize=(10, 5))
plt.pcolormesh(times, freqs / 1000, 10 * np.log10(Sx), cmap='viridis')
plt.colorbar(label='Intensity [dB]')
plt.ylabel('Frequency [kHz]')
plt.xlabel('Time [s]')
plt.show()


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

Подпишись 👉🏻 @KodduuPython 🤖
Ещё один интересный пример работы со звуком на Python - это изменение скорости воспроизведения аудиозаписи без изменения её тональности. Для этой задачи мы воспользуемся библиотекой pydub и pydub.silence для выделения и изменения скорости воспроизведения немых участков.

Установите pydub, если она еще не установлена:

shell
pip install pydub


Вот пример кода:

python
from pydub import AudioSegment
from pydub.playback import play
from pydub.silence import split_on_silence

# Загрузим аудиофайл
audio = AudioSegment.from_file("output.wav")

# Разобьем аудиофайл на участки без звука
chunks = split_on_silence(audio,
# настройка: участки звука короче 500 мс считаются тишиной
min_silence_len = 500,

# настройка: участки звука тише -36 дБФС считаются тишиной
silence_thresh = -36
)

# Увеличим скорость каждого участка в два раза и соберем обратно в единое аудио
speed_up_audio = AudioSegment.empty()
for chunk in chunks:
speed_up_audio += chunk.speedup(playback_speed=2.0)

# Воспроизведем ускоренное аудио
play(speed_up_audio)


Этот код загружает аудиофайл, затем разбивает его на участки, разделенные тишиной. Затем он ускоряет каждый участок в два раза и объединяет все ускоренные участки обратно в один аудиофайл. Наконец, он воспроизводит полученное ускоренное аудио.

Подпишись 👉🏻 @KodduuPython 🤖
В качестве следующего примера мы можем создать простое приложение, которое использует спектральный анализ для определения основной частоты (тона) звукового сигнала в реальном времени. Для этого нам понадобится библиотека PyAudio для записи аудио, а также NumPy и SciPy для обработки сигнала.

python
import pyaudio
import numpy as np
from scipy.fftpack import fft

CHUNK = 1024 # Размер блока
WIDTH = 2 # Ширина (в байтах)
CHANNELS = 1 # Моно
RATE = 44100 # Частота дискретизации (Гц)

p = pyaudio.PyAudio()

stream = p.open(format=p.get_format_from_width(WIDTH),
channels=CHANNELS,
rate=RATE,
input=True,
output=True,
frames_per_buffer=CHUNK)

print("* recording")

while True:
data = np.frombuffer(stream.read(CHUNK), dtype=np.int16)
yf = fft(data)
xf = np.linspace(0.0, 1.0/(2.0*1/RATE), CHUNK//2)
freq = xf[np.argmax(2.0/CHUNK * np.abs(yf[0:CHUNK//2]))]
print(f"Частота: {freq} Hz")

print("* done")

stream.stop_stream()
stream.close()

p.terminate()


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

Пожалуйста, учтите, что для работы этого кода вам необходимо установить PyAudio. Если у вас еще нет этой библиотеки, вы можете установить ее с помощью pip:

shell
pip install pyaudio


Но в зависимости от вашей операционной системы установка PyAudio может потребовать дополнительных шагов.

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

Сначала установите Astropy и photutils, если у вас их еще нет:

shell
pip install astropy photutils


Вот базовый пример того, как можно использовать photutils для поиска звезд на изображении:

python
import numpy as np
from astropy.io import fits
from astropy.stats import mad_std
from photutils import DAOStarFinder
import matplotlib.pyplot as plt

# Открыть FITS файл
image_file = 'example.fits' # замените на ваш файл
image_data = fits.getdata(image_file)

# Вычислить медианное абсолютное отклонение (MAD) в качестве оценки шума
bkg_sigma = mad_std(image_data)

# Инициализировать "звездоискатель" (star finder)
daofind = DAOStarFinder(fwhm=3., threshold=5.*bkg_sigma)

# Найти звезды
sources = daofind(image_data)

# Вывести количество найденных звезд
print(f"Найдено {len(sources)} звезд")

# Визуализировать изображение и найденные звезды
plt.imshow(image_data, cmap='gray_r', origin='lower')
plt.scatter(sources['xcentroid'], sources['ycentroid'], s=30, color='red', alpha=0.9)
plt.show()


В этом примере сначала считывается FITS-файл (стандартный формат для астрономических данных). Затем находится оценка шума на изображении. Инициализируется "звездоискатель" DAOStarFinder, который затем применяется к данным для поиска звезд. Результаты визуализируются с помощью Matplotlib.

Помните, что параметры DAOStarFinder, такие как fwhm и threshold, могут потребовать настройки в зависимости от ваших данных. В этом примере используется fwhm (ширина на полувысоте) 3 пикселя и пороговое значение 5 сигма.

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

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

В этом примере используется библиотека Keras, поэтому сначала установите ее, если еще не сделали этого:

shell
pip install keras tensorflow


Код обучения модели будет выглядеть примерно так:

python
import keras
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense

# Создаем модель
model = Sequential()

# Добавляем сверточные слои
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(64, 64, 3)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

# Добавляем полносвязные слои
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

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

# Обучаем модель
model.fit(X_train, y_train, epochs=10, batch_size=32, validation_data=(X_test, y_test))


Этот пример предполагает, что вы уже загрузили и предобработали свои данные в массивы X_train, X_test, y_train и y_test.

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

python
new_image = ... # Загрузите новое изображение и выполните те же предварительные обработки
prediction = model.predict(new_image)


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

Кроме того, это предполагает, что у вас есть доступ к большому количеству обучающих данных. Если у вас нет большого набора данных для обучения, возможно, вам придется использовать техники, такие как перенос обучения (transfer learning), где вы можете использовать предварительно обученную модель и адаптировать ее к своей задаче.

Подпишись 👉🏻 @KodduuPython 🤖
👍2
Ещё одной полезной библиотекой Python для астрономии является astroquery. Она позволяет получать данные от множества веб-служб и баз данных, таких как NASA Exoplanet Archive, SIMBAD, VizieR и других.

Вот пример того, как можно использовать astroquery для поиска информации о конкретной звезде:

python
from astroquery.simbad import Simbad

# Создаем объект запроса
customSimbad = Simbad()

# Добавляем поля для поиска
customSimbad.add_votable_fields('flux(V)', 'otype')

# Ищем информацию о звезде Betelgeuse
result_table = customSimbad.query_object("Betelgeuse")

# Выводим результат
print(result_table)


Этот код делает запрос к SIMBAD для поиска информации о звезде Betelgeuse. Результатом является таблица данных, включающая различную информацию о звезде.

Установите astroquery, если она еще не установлена:

shell
pip install astroquery


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

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