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

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

Во вопросам сотрудничества: @AlexErf
Download Telegram
Создание VPN-сервера на Python — это сложная задача, которая выходит за рамки базового программирования из-за необходимости в глубоких знаниях сетевых технологий и безопасности. Также требуются административные привилегии для конфигурации сетевых интерфейсов и маршрутизации.

Однако, я могу показать вам, как создать простой TCP-сервер и клиент на Python, который можно использовать как отправную точку для изучения основ создания сетевых приложений. Для создания полноценного VPN-сервера вам потребуется использовать дополнительные инструменты и протоколы, такие как OpenVPN или WireGuard, и гораздо более сложная настройка.

Пример простого TCP-сервера и клиента на Python

TCP-сервер:
import socket

def start_server(port=12345):
# Создаем сокет
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('0.0.0.0', port))
server_socket.listen()

print(f"Сервер запущен и слушает порт {port}...")

# Принимаем соединение
client_socket, client_address = server_socket.accept()
print(f"Подключение от {client_address}")

# Получаем и отправляем данные
while True:
message = client_socket.recv(1024).decode()
if not message:
break
print(f"Получено от клиента: {message}")
client_socket.send(f"Эхо: {message}".encode())

client_socket.close()
server_socket.close()

if __name__ == '__main__':
start_server()


TCP-клиент:
import socket

def start_client(server_ip='127.0.0.1', port=12345):
# Подключаемся к серверу
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((server_ip, port))

print(f"Подключено к серверу {server_ip} на порту {port}")

# Отправка и получение данных
try:
while True:
message = input("Введите сообщение: ")
client_socket.send(message.encode())
response = client_socket.recv(1024).decode()
print(f"Ответ сервера: {response}")
except KeyboardInterrupt:
print("\nОтключение от сервера...")

client_socket.close()

if __name__ == '__main__':
start_client()


Описание
- TCP-сервер: Слушает входящие соединения и отправляет обратно эхо полученных сообщений.
- TCP-клиент: Подключается к серверу, отправляет сообщения и получает их эхо.

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

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

1. Загрузим данные и проведем их первичную обработку.
2. Рассчитаем средние продажи по каждому магазину.
3. Визуализируем данные, показывая тенденции продаж в зависимости от времени года.

Предположим, у нас есть CSV-файл sales_data.csv, который содержит колонки Store, Date, и Sales.

Вот примерный код:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# Загрузка и предварительная обработка данных
data = pd.read_csv('sales_data.csv')
data['Date'] = pd.to_datetime(data['Date'])

# Вычисление средних продаж по магазинам
average_sales = data.groupby('Store')['Sales'].mean()

# Визуализация
plt.figure(figsize=(10, 6))
sns.barplot(x=average_sales.index, y=average_sales.values)
plt.title('Средние продажи по магазинам')
plt.xlabel('Магазин')
plt.ylabel('Средние продажи')
plt.xticks(rotation=45)
plt.show()

# Анализ продаж в зависимости от времени года
data['Month'] = data['Date'].dt.month
seasonal_sales = data.groupby('Month')['Sales'].mean()

plt.figure(figsize=(10, 6))
seasonal_sales.plot(kind='line')
plt.title('Продажи по месяцам')
plt.xlabel('Месяц')
plt.ylabel('Средние продажи')
plt.show()


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

Подпишись 👉🏻 @KodduuPython 🤖
🆒2🔥1
Давайте создадим еще один пример анализа данных на Python, на этот раз сосредоточимся на анализе текстовых данных. Мы будем использовать библиотеку pandas для обработки данных и nltk (Natural Language Toolkit) для обработки текста.

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

Предположим, у нас есть CSV-файл reviews.csv, который содержит колонки Product и Review.

Вот примерный код:

import pandas as pd
import nltk
from nltk.sentiment import SentimentIntensityAnalyzer
from nltk.corpus import stopwords
from collections import Counter
import matplotlib.pyplot as plt

# Загрузка и предварительная обработка данных
data = pd.read_csv('reviews.csv')

# Подготовка анализа настроения
nltk.download('vader_lexicon')
nltk.download('stopwords')
sia = SentimentIntensityAnalyzer()
stop_words = set(stopwords.words('english'))

# Анализ настроения и ключевых слов
data['Sentiment'] = data['Review'].apply(lambda x: sia.polarity_scores(x)['compound'])
data['Keywords'] = data['Review'].apply(lambda x: [word for word in x.split() if word.lower() not in stop_words])

# Средний уровень настроения по продуктам
average_sentiment = data.groupby('Product')['Sentiment'].mean()

# Визуализация
plt.figure(figsize=(10, 6))
average_sentiment.plot(kind='bar')
plt.title('Средний уровень настроения отзывов по продуктам')
plt.xlabel('Продукт')
plt.ylabel('Средний уровень настроения')
plt.show()

# Самые популярные ключевые слова
all_keywords = sum(data['Keywords'], [])
word_freq = Counter(all_keywords)
most_common_words = word_freq.most_common(10)

plt.figure(figsize=(10, 6))
words, counts = zip(*most_common_words)
plt.bar(words, counts)
plt.title('Топ-10 самых часто упоминаемых слов в отзывах')
plt.show()


В этом скрипте мы анализируем отзывы, используя библиотеку nltk для определения общего тонального окраса (сентимента) каждого отзыва. Затем мы анализируем частоту слов в отзывах, исключая стоп-слова, чтобы определить ключевые темы или слова, чаще всего упоминаемые клиентами. Полученные результаты визуализируются с помощью matplotlib.

Подпишись 👉🏻 @KodduuPython 🤖
👍2
Давайте рассмотрим ещё один интересный пример анализа данных. На этот раз мы сосредоточимся на анализе временных рядов и прогнозировании. Будем использовать библиотеку pandas для обработки данных и statsmodels для временного анализа и прогнозирования.

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

Предположим, у нас есть CSV-файл sales_data.csv, который содержит колонки Date и Sales.

Вот примерный код:

import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.seasonal import seasonal_decompose
from statsmodels.tsa.arima_model import ARIMA

# Загрузка и предварительная обработка данных
data = pd.read_csv('sales_data.csv')
data['Date'] = pd.to_datetime(data['Date'])
data.set_index('Date', inplace=True)

# Декомпозиция временного ряда
result = seasonal_decompose(data['Sales'], model='multiplicative')
result.plot()
plt.show()

# Построение модели ARIMA для прогнозирования
model = ARIMA(data['Sales'], order=(5,1,0))
model_fit = model.fit(disp=0)

# Прогнозирование
forecast = model_fit.forecast(steps=12)[0]

# Визуализация прогноза
plt.figure(figsize=(10,6))
plt.plot(data['Sales'], label='Исторические данные')
plt.plot(pd.date_range(data.index[-1], periods=12, freq='M'), forecast, label='Прогноз')
plt.title('Прогноз продаж')
plt.xlabel('Дата')
plt.ylabel('Продажи')
plt.legend()
plt.show()


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

Подпишись 👉🏻 @KodduuPython 🤖
🆒2
Давайте исследуем ещё один аспект анализа данных: кластеризацию и визуализацию многомерных данных. Мы будем использовать библиотеку pandas для обработки данных, scikit-learn для кластеризации и matplotlib вместе с seaborn для визуализации.

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

Допустим, у нас есть файл customer_data.csv, содержащий соответствующие метрики.

Вот примерный код:

import pandas as pd
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA

# Загрузка данных
data = pd.read_csv('customer_data.csv')

# Нормализация данных
scaler = StandardScaler()
scaled_data = scaler.fit_transform(data)

# Кластеризация с использованием KMeans
kmeans = KMeans(n_clusters=5, random_state=0)
clusters = kmeans.fit_predict(scaled_data)
data['Cluster'] = clusters

# Понижение размерности для визуализации
pca = PCA(n_components=2)
principal_components = pca.fit_transform(scaled_data)
principal_df = pd.DataFrame(data = principal_components, columns = ['PC1', 'PC2'])

# Объединение с информацией о кластерах
final_df = pd.concat([principal_df, data[['Cluster']]], axis = 1)

# Визуализация результатов
plt.figure(figsize=(10,6))
sns.scatterplot(x='PC1', y='PC2', hue='Cluster', data=final_df, palette='viridis')
plt.title('Визуализация кластеров клиентов')
plt.show()


В этом коде мы сначала загружаем данные, а затем нормализуем их для улучшения качества кластеризации. Затем мы используем алгоритм KMeans из scikit-learn для группировки данных в кластеры. Чтобы визуализировать кластеры в двумерном пространстве, мы применяем метод главных компонент (PCA). Наконец, мы строим график, чтобы увидеть, как данные группируются в кластерах. Это может помочь компании лучше понять свою клиентскую базу и разработать более целевые маркетинговые стратегии.

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

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

Предположим, у нас есть файл locations.csv, который содержит колонки Name, Latitude и Longitude.

Вот примерный код:

import pandas as pd
import geopandas as gpd
from shapely.geometry import Point
import matplotlib.pyplot as plt

# Загрузка данных
data = pd.read_csv('locations.csv')

# Преобразование в географические данные
geometry = [Point(xy) for xy in zip(data['Longitude'], data['Latitude'])]
geo_df = gpd.GeoDataFrame(data, geometry=geometry)

# Загрузка карты города или региона
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
city_map = world[world['name'] == 'Your City Name Here'] # Замените на название вашего города

# Визуализация
fig, ax = plt.subplots(figsize=(10,10))
city_map.plot(ax=ax, alpha=0.4, color='grey')
geo_df.plot(ax=ax, markersize=20, color='blue', marker='o', label='Locations')
plt.title('Распределение объектов интереса в городе')
plt.legend()
plt.show()


Этот код сначала загружает географические данные из файла, преобразует их в точки на карте с помощью shapely, а затем создает гео-датафрейм с помощью geopandas. Для визуализации мы загружаем карту города (или любой другой области, которую вы хотите исследовать) и отображаем на ней точки интереса. Это позволяет наглядно увидеть, как объекты распределены по городу и выявить потенциальные зоны для развития или улучшения инфраструктуры.

Подпишись 👉🏻 @KodduuPython 🤖
Для тех кому некогда, но очень нужно выучить Python запустили самый короткий курс (как раз можно пройти за январские праздники), скидка тоже прилагается https://stepik.org/a/187914
Давайте рассмотрим пример анализа данных с использованием методов машинного обучения. Мы будем использовать библиотеку pandas для обработки данных, scikit-learn для моделирования и matplotlib для визуализации.

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

Предположим, у нас есть файл bank_customers.csv, который содержит колонки, такие как возраст клиента, баланс на счете, количество продуктов банка, используемых клиентом, и статус активности, а также целевая переменная Exited, указывающая, ушел клиент или нет.

Вот примерный код:

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, confusion_matrix
import matplotlib.pyplot as plt
import seaborn as sns

# Загрузка данных
data = pd.read_csv('bank_customers.csv')

# Подготовка данных для модели
X = data.drop('Exited', axis=1) # Удаление целевой переменной
y = data['Exited']

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

# Создание и обучение модели
model = RandomForestClassifier()
model.fit(X_train, y_train)

# Оценка модели
predictions = model.predict(X_test)
print(classification_report(y_test, predictions))

# Визуализация матрицы ошибок
conf_matrix = confusion_matrix(y_test, predictions)
plt.figure(figsize=(10,6))
sns.heatmap(conf_matrix, annot=True, fmt='g')
plt.title('Матрица ошибок')
plt.xlabel('Предсказанное значение')
plt.ylabel('Истинное значение')
plt.show()


В этом коде мы сначала загружаем данные и подготавливаем их для моделирования, разделяя на обучающую и тестовую выборки. Затем мы используем алгоритм случайного леса (RandomForestClassifier) из scikit-learn для создания и обучения модели. После обучения модели мы оцениваем её производительность на тестовых данных, выводим отчёт о классификации и строим матрицу ошибок для визуализации результатов. Это позволяет нам понять, насколько хорошо модель способна предсказывать отток клиентов.

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

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

from flask import Flask, render_template, request

app = Flask(__name__)

@app.route('/')
def index():
return render_template('index.html')

@app.route('/greet', methods=['POST'])
def greet():
name = request.form['name']
return render_template('greet.html', name=name)

if __name__ == '__main__':
app.run(debug=True)


В этом коде есть два маршрута:
- Один для главной страницы (index), который отображает форму.
- Другой (greet) для обработки отправленных данных и отображения персонализированного приветствия.

Теперь вам понадобятся два HTML-шаблона: index.html и greet.html.

index.html:
html
<!DOCTYPE html>
<html>
<head>
<title>Welcome</title>
</head>
<body>
<h1>Welcome to our site!</h1>
<form action="/greet" method="post">
<input type="text" name="name" placeholder="Enter your name">
<input type="submit" value="Greet me!">
</form>
</body>
</html>


greet.html:
html
<!DOCTYPE html>
<html>
<head>
<title>Greeting</title>
</head>
<body>
<h1>Hello, {{ name }}!</h1>
<a href="/">Go back</a>
</body>
</html>


Чтобы запустить это приложение, вам нужно установить Flask, создать эти файлы в соответствующей структуре директорий и запустить скрипт Python. После запуска вы сможете перейти по адресу http://localhost:5000 в вашем веб-браузере и увидеть приложение в действии.

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

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

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

from flask import Flask, request, render_template, redirect, url_for
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///posts.db'
db = SQLAlchemy(app)

class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100), nullable=False)
content = db.Column(db.Text, nullable=False)

def __repr__(self):
return 'Post ' + str(self.id)

@app.route('/')
def index():
posts = Post.query.all()
return render_template('index.html', posts=posts)

@app.route('/add', methods=['GET', 'POST'])
def add_post():
if request.method == 'POST':
post_title = request.form['title']
post_content = request.form['content']
new_post = Post(title=post_title, content=post_content)
db.session.add(new_post)
db.session.commit()
return redirect(url_for('index'))
return render_template('add_post.html')

if __name__ == '__main__':
db.create_all()
app.run(debug=True)


В этом коде определена модель Post для хранения постов. Есть два маршрута:
- Один для главной страницы (index), который отображает все посты.
- Другой (add_post) для добавления новых постов.

Теперь создадим два HTML-шаблона: index.html и add_post.html.

index.html:
html
<!DOCTYPE html>
<html>
<head>
<title>Simple Blog</title>
</head>
<body>
<h1>Welcome to the Simple Blog</h1>
<a href="/add">Add new post</a>
<div>
{% for post in posts %}
<div>
<h2>{{ post.title }}</h2>
<p>{{ post.content }}</p>
</div>
{% endfor %}
</div>
</body>
</html>


add_post.html:
html
<!DOCTYPE html>
<html>
<head>
<title>Add Post</title>
</head>
<body>
<h1>Add Post</h1>
<form method="POST">
<input type="text" name="title" placeholder="Post title" required>
<textarea name="content" placeholder="Post content" required></textarea>
<input type="submit" value="Add Post">
</form>
<a href="/">Back to Home</a>
</body>
</html>


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

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

Прежде всего, вам понадобится установить библиотеку OpenCV, если она ещё не установлена. Это можно сделать с помощью pip:

pip install opencv-python


Теперь давайте напишем код:

import cv2
import sys

def detect_faces(image_path):
# Загрузка изображения и каскада Хаара для обнаружения лиц
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
image = cv2.imread(image_path)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Обнаружение лиц
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30), flags=cv2.CASCADE_SCALE_IMAGE)

# Рисование прямоугольников вокруг лиц
for (x, y, w, h) in faces:
cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)

# Вывод обработанного изображения
cv2.imshow("Faces found", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

# Пример использования функции
image_path = 'path_to_your_image.jpg' # Замените на путь к вашему изображению
detect_faces(image_path)


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

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

Подпишись 👉🏻 @KodduuPython 🤖
Если у Вас есть знакомые и друзья кому тоже некогда, но надо с чего то начать в ИТ, то самый короткий курс по Python (как раз чтобы пройти на январских праздниках) будет лучшим подарком. Скидка прилагается 🎅