Don Python [DATA SCIENCE]
69 subscribers
6 photos
1 file
19 links
Путь python разработчика после 30. Знания, обсуждения, книги, rock & roll
Download Telegram
🤕 [SHORT] Не очевидное создание кортежа

При создании кортежа можно опустить скобки. Нужно ли? Дело каждого, но язык позволяет это сделать:

numbers = 5, 5, 10, 25, 35, 70
print(numbers)

# >>> (5, 5, 10, 25, 35, 70)


———

Good coding 🧑‍💻

#python #tuple #short
Please open Telegram to view this post
VIEW IN TELEGRAM
🤕 [SHORT] Оператор else для цикла

В Python блок else может использоваться не только в условных конструкциях if, но и с циклами for и while. Блок else в цикле выполняется, если цикл завершился "нормально", то есть без прерывания с помощью оператора break. Если же цикл был прерван с помощью break, блок else не выполнится. Это позволяет, например, выполнить определенный код в конце цикла, если цикл не был прерван.

for i in range(5):
if i == 3:
print("Цикл прерван на итерации:", i)
break
else:
print("Цикл завершился без прерываний")


В этом цикле блок кода после else не выполнится. Но следующий цикл "переживет" все итерации и блок else выполнится:

for i in range(5):
print("Текущая итерация:", i)
else:
print("Цикл завершился без прерываний")


———

Good coding 🧑‍💻

#python #else #for #while #short
Please open Telegram to view this post
VIEW IN TELEGRAM
[PROBLEM] Asya the cat is playing with boxes

Перевод и решение задачи посвящается прекрасной кошке Асе. На самом деле с коробками любит играть кот Арсений. Поэтому у Аси не нашлось фото с коробкой 🐈🐈

Сложность для junior: 4 / 10

Задача с решением на русском здесь

* Прежде чем смотреть готовое решение,желательно потратить 2-3 часа на самостоятельные попытки. И если не получится, то переходить к анализу ответа.

———

Good coding 🧑‍💻

#python #problem #list
Please open Telegram to view this post
VIEW IN TELEGRAM
🤕 [SHORT] Памятка по созданию и подключению виртуального окружения

Открываем терминал в корне проекта и прописываем — python -m venv venv

— Флаг -m используется для запуска venv как исполняемого модуля.

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

💻 Создание окружения в pycharm без терминала

— Проходим по пути settings - project:<your_project> - python Interpreter для открытия окна с настройками виртуального окружения

— Нажимаем справа сверху add Interpreter и выбираем add local Interpreter

— Настройте интерпретатор и нажмите OK. По сути в Base Interpreter просто выберите доступный интерпретатор и это все настройки

🖥 Активация

Что бы активировать окружение на windows введите .\venv\Scripts\activate, где venv название директории с виртуальным окружением.

Для активации на mac и linux введите source venv/bin/activate

Если вы используете git bash, то команда активации будет следующей — source venv/Scripts/activate


Что бы отключить окружение введите deactivate

———

Good coding 🧑‍💻

#python #memo #venv
Please open Telegram to view this post
VIEW IN TELEGRAM
[PROBLEM] Big wash

Задача о том, как программисты добывают себе одежду 🛒

Сложность для junior: 7 / 10

Задача с решением на русском здесь

* Прежде чем смотреть готовое решение,желательно потратить 2-3 часа на самостоятельные попытки. И если не получится, то переходить к анализу ответа.

———

Good coding 🧑‍💻

#python #problem #list
Please open Telegram to view this post
VIEW IN TELEGRAM
😴 [OFFTOP] Мега крестики-нолики

Что может быть интересного в столь простой и уже не популярной игре, как крестики-нолики? Игра элементарна и наверное навсегда останется украшением школьных парт и полей тетрадей. Ну и какой программист не писал крестики нолики на этапе обучения?

Играя в карты можно быть уверенным, что каждая партия уникальна и никогда не повториться. А общее количество уникальных партий в крестики нолики, учитывающих победы и ничьи, составляет 26 830.

Довольно скромно 😐

Недавно я прочитал книгу. Называется 'Математика с дурацкими рисунками'. Оттуда и узнал про интересную модификацию крестиков-ноликов.

Суть в том, что поле игры всё так же состоит из 9 квадратов, но теперь каждый квадрат является самостоятельным полем крестиков-ноликов размером 3x3. В итоге поле представляет собой 9 отдельных "классических" игр в крестики-нолики.

Как программисты мы можем представить такое поле в виде трехмерной матрицы:

game_board = [
[['.', '.', '.'], ['.', '.', '.'], ['.', '.', '.']],
[['.', '.', '.'], ['.', '.', '.'], ['.', '.', '.']],
[['.', '.', '.'], ['.', '.', '.'], ['.', '.', '.']],
[['.', '.', '.'], ['.', '.', '.'], ['.', '.', '.']],
[['.', '.', '.'], ['.', '.', '.'], ['.', '.', '.']],
[['.', '.', '.'], ['.', '.', '.'], ['.', '.', '.']],
[['.', '.', '.'], ['.', '.', '.'], ['.', '.', '.']],
[['.', '.', '.'], ['.', '.', '.'], ['.', '.', '.']],
[['.', '.', '.'], ['.', '.', '.'], ['.', '.', '.']]
]

Весь game play строится на том, что поле, в котором игрок будет делать ход, зависит от хода его соперника. Например: если первый игрок поставил X в центральную клетку одного из малых полей, то следующий игрок должен поставить свой O на центральное большуо поле.

Подробные правила читайте тут — тык

☺️ Так вот..

В классическом варианте игры, при должном терпении, мы могли бы сыграть 26 830 возможных уникальных партий и сказать, что мы видели всё и нам скучно. Но в мега варианте такой роскоши себе позволить нельзя. Здесь мы получаем приморно 10^30 уникальных партий. Это вот такое число 1000000000000000000000000000000, которое называется нониллион. Даже если прожить 100 лет и каждую секунду играть уникальную партию, нам не удастся перебрать даже 1% возможных вариантов.

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

Игру можно посмотреть в репазитории.
Если кому то будет интересно, можно дописать к ней интерфейс. Сейчас весь game play осуществляется только через консоль.

Буду рад комментариям, оценкам, критике и исправлениям.

Также ссылка на вдохновившую меня книгу — Математика с дурацкими рисунками

———

Good coding 🧑‍💻

#python #list #matrix #game #offtop
Please open Telegram to view this post
VIEW IN TELEGRAM
[PROBLEM] Tides

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

Сложность для junior: 5 / 10

Задача с решением на русском здесь

* Прежде чем смотреть готовое решение,желательно потратить 2-3 часа на самостоятельные попытки. И если не получится, то переходить к анализу ответа.

———

Good coding 🧑‍💻

#python #problem #list
Please open Telegram to view this post
VIEW IN TELEGRAM
🤕 [SHORT] Циклический сдвиг списка

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

С созданием копии списка:

my_list = [1, 5, 2, 4, 3]
new_list = my_list[:]

for i in range(len(my_list)):
my_list = new_list[i:] + new_list[:i]


Без копии:

my_list = [1, 5, 2, 4, 3]

for _ in range(len(my_list)):
my_list.append(my_list[0])
my_list.pop(0)


Выбор способа зависит от задачи.

———

Good coding 🧑‍💻

#python #short #list
Please open Telegram to view this post
VIEW IN TELEGRAM
🤕 [SHORT] Поиск в множествах

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

Давайте убедимся на деле:

import time, random

# Генерируем список с дубликатами и преобразуем в множество
numbers_list = [random.randint(0, 10**6) for _ in range(10**6)]
numbers_set = set(numbers_list)

# Список случайных элементов для поиска
search_items = random.sample(range(10**6), 1000)

# Функция для замера времени поиска
def measure_search(container):
start = time.time()
for item in search_items:
item in container
return time.time() - start

# Замеры времени поиска
list_time = measure_search(numbers_list)
set_time = measure_search(numbers_set)

# Результаты
print(f"Поиск в списке: {list_time:.6f} сек") # Примерно 4.3 сек
print(f"Поиск в множестве: {set_time:.6f} сек") # Примерно 0.0009 сек


———

Good coding 🧑‍💻

#python #short #list #set
Please open Telegram to view this post
VIEW IN TELEGRAM
🤕 [SHORT] Инвертирование словаря

Предположим, что наше приложение — это что-то там связанное с английским. У нас есть некоторый словарь в котором ключ — это английское слово, а значение — перевод этого слова:

animals = {
'cat': 'кот',
'dog': 'собака',
'mouse': 'мышь',
'elephant': 'слон',
}


Нам нужно чтобы было наоборот: ключи на русском, а значения на английском. Пишем простое выражение:

print({value: key for key, value in animals.items()})

# >>> {'кот': 'cat', 'собака': 'dog', 'мышь': 'mouse', 'слон': 'elephant'}


———

Good coding 🧑‍💻

#python #short #dict
Please open Telegram to view this post
VIEW IN TELEGRAM
🤕 [SHORT] Разворот списка, 3 способа

С помощью метода reverse()

my_position = ['first', 'second', 'third']
my_position.reverse()

print(my_position)
# >>> ['third', 'second', 'first']


С помощью функции reversed()

sequence = [1, 2, 3, 4, 5, 6]
reverse_sequence = list(reversed(sequence))

print(reverse_sequence)
# >>> [6, 5, 4, 3, 2, 1]


С помощью среза

split_name = ['r', 'd', 'n', 'a', 's', 'k', 'e', 'l', 'a']
reverse_split_name = split_name[::-1]

print(reverse_split_name)
# >>> ['a', 'l', 'e', 'k', 's', 'a', 'n', 'd', 'r']


———

Good coding 🧑‍💻

#python #short #list
Please open Telegram to view this post
VIEW IN TELEGRAM
🤕 [SHORT] Двусторонняя очередь в Python

Класс deque (от "double-ended queue" - двухсторонняя очередь) в Python удобен для работы с коллекцией элементов, где важны операции добавления и удаления элементов в начале и в конце списка. Обычные списки делают это медленно, так как элементы приходится смещать, а deque оптимизирован под такие операции, выполняя их за O(1).

from collections import deque  

# Создаем deque и добавляем элементы
queue = deque([1, 2, 3])
queue.append(4) # добавляет 4 в конец
queue.appendleft(0) # добавляет 0 в начало

print(queue) # deque([0, 1, 2, 3, 4])

# Удаляем элементы
queue.pop() # удаляет последний элемент
queue.popleft() # удаляет первый элемент

print(queue) # deque([1, 2, 3])


———

Good coding 🧑‍💻

#python #short #list #libraries #deque #collections
Please open Telegram to view this post
VIEW IN TELEGRAM
⬆️ [ARTICLE] Поиск кратчайшего пути

Я славно поработал и написал 2 статьи посвященные алгоритму BFS (поиск в ширину) и алгоритму Дейкстры (поиск во взвешенных графах). Для меня лучший способ в чем то разобраться - это объяснить другим как это работает. Эти работы не исключение.

Краткая статистика

- 25 000 символов
- 3 600 слов
- 23 часа работы

———

Первая часть - Алгоритмы поиска путей на пальцах. Часть 1: Поиск в ширину

Первая часть - Алгоритмы поиска путей на пальцах. Часть 2: Алгоритм Дейкстры

———

📦 Ресурсы

Это всё что я использовал для написания материала и создания анимаций:

1. Алгоритмика — много материала об алгоритмах
2. Clippa — здесь можно доработать гифки
3. ChatGPT — все знают
4. Program4you — здесь можно создавать и анимировать графы
5. Теория графов — хороший материал для прочной базы
6. Двусторонняя очередь — статья о классе deque
7. Кучи и приоритетные очереди — статья о модуле heapq

———

Good coding 🧑‍💻

#python #info #algorithms #dijkstra #bfs #graphs #habr #articles
Please open Telegram to view this post
VIEW IN TELEGRAM
📦 [BOOK] «Python без проблем: решаем реальные задачи и пишем полезный код». Зингаро Д

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

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

Автор книги изложил материал следующим образом:

1. Каждая глава начинается с урока. Не расстраивайтесь если вы уже знакомы с материалом. Каждый учитель объясняет по своему и всегда есть возможность узнать что то новое.

2. После каждого урока автор подробно разбирает несколько задач (2 - 3). Советую сначала пробовать решать их самостоятельно, а потом сверяться с решением автора.

3. В конце каждой главы приведен список задач, которые вы сможете решить усвоив материал из пройденного урока.

———

Книга на Яндекс Книгах — здесь

Купить бумажную версию — здесь

Английская версия бесплатно — здесь

Русская версия бесплатно — здесь

———

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

Репозиторий

———

🧑‍💻 Good coding

#python #book #problems
Please open Telegram to view this post
VIEW IN TELEGRAM
🤕 [SHORT] Коротко о генерации паролей в python

Если вы вдруг решили написать в том или ином виде генератор паролей/токенов или других случайных значений, имеющих высокие требования к безопасности, не идите очивидным путем и не используйте модуль random.

Используйте модуль secrets. Почуму? Если коротко, то random создан для симуляции, а результат работы довольно предсказуем. А secrets используется для генерации криптографически надёжных случайных чисел.

Узнать больше можно:

Короткое объяснение — тут

Документаци — тут

———

🧑‍💻 Good coding

#python #secrets #random
Please open Telegram to view this post
VIEW IN TELEGRAM
🌡 [RESOURCES] Быть аналитиком данных

Моя подборка, которая поможет, как мне кажется, найти работу в сфере аналитики данных. Я сейчас сам всё это изучаю. Базовый Python уже понятен, нужно было выбирать направление для роста.

1. Актуальный, англоязычный курс — FREE Data Analyst Bootcamp. Если плохо с английским, открывайте плейлист в Яндекс браузере и слушайте в переводе.

2. Подробная карта для изучения инструментов связанных с аналитикой данных — Data Analyst Roadmap

3. Репозиторий с большой подборкой общедоступных наборов данных — awesome-public-datasets

4. Статья на Хабр с подборкой наборов данных - 52 датасета для тренировочных проектов

5. Сайт с большим количество датасетов — kaggle-datasets

———

🧑‍💻 Good coding

#python #resources #datasets #data_analyst
Please open Telegram to view this post
VIEW IN TELEGRAM
🚫 [ERROR] Python не может найти файл init.tcl

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

Сегодня столкнулся с такой ошибкой:

...
_tkinter.TclError: Can't find a usable init.tcl in the following directories:
...
paths
...
This probably means that Tcl wasn't installed properly.


В моем случае это произошло, потому что вместе с Git я поставил MinGW, который идет вместе с пакетом Git for Windows. А MinGW поставляется с библиотеками Tcl/Tk. Из-за этого возник конфликт в переменных среды. Как я понял, если Git устанавливается на ПК вперед Python, то такого не происходит.

💊 Решение

1. Нажать win+i, что бы открыть настройки

2. Далее путь: Система — О системе — Дополнительные параметры системы — Переменные среды

3. Нажимаем создать в области системных переменных

4. Ввести название переменной: TCL_LIBRARY

5. Указать путь до папки. Что узнать путь, зайдите в диск, на который вы установили Python. Затем в поиске введите tlc. Найдите папку, которая находится в директории Python, а не в Git. В папке будут еще папки. Вам нужна с названием (на момент создания поста) tlc8.6.

В моем случае путь был такой:

C:\Users\Yastrebov\AppData\Local\Programs\Python\Python313\tcl\tcl8.6

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

———

🧑‍💻 Good coding

#python #error #tlc #tkinter #matplotlib
Please open Telegram to view this post
VIEW IN TELEGRAM
🤕 [SHORT] Сводная таблица как в Excel с помощью pandas

Представим что у на есть некоторый dataset c неопределенным количеством столбцов:

[..., 'Category', 'Region', 'Inventory Level', ...]


Задача: построить сводную таблицу (как на изображении), для отображения остатков (Inventory Level) во всех регионах для каждой категории и отобразить сумму остатков для каждой категории и каждого региона.

В Excel мы бы создали сводную таблицу, перетащили бы Category в область "Cтроки", Region в область "Столбцы", а Inventory Level в область "Значения".

🖥 С применением pandas решение будет выглядеть так:

import pandas as pd

df = pd.read_csv('retail_store_inventory.csv')

pivot_table = df.groupby(['Category', 'Region'])['Inventory Level'].sum().reset_index()

pivot_result = pivot_table.pivot(index='Category', columns='Region', values='Inventory Level')
pivot_result['Total'] = pivot_result.sum(axis=1)
pivot_result.loc['Total'] = pivot_result.sum(axis=0)


Dataset

Ссылка на набор данных

———

🧑‍💻 Good coding!

#python #pandas #data_analitycs #excel
Please open Telegram to view this post
VIEW IN TELEGRAM
data.rar
132.6 KB
🌡 [RESOURCES] Dataset. Продукция магазина Калина-Малина

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

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

В итоге даже не заслужил фразы "Мы одобрили другого кандидата, а ваше резюме отложили. Если вакансия снова откроется, то мы вам напишем".

Но никакого расстройства, прикольная практика вышла.

Репозиторий

Данные в прикрепе

———

🧑‍💻 Good coding!

#python #pandas #data_analitycs #resources #dataset
Please open Telegram to view this post
VIEW IN TELEGRAM