Don Python [DATA SCIENCE]
69 subscribers
6 photos
1 file
19 links
Путь python разработчика после 30. Знания, обсуждения, книги, rock & roll
Download 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
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
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
💩 [HATE] Российский рынок IT продуктов — это жадная змея

Знаете почему западный рынок софта более свободный, открытый и продуктивный, чем наш? Ответ лежит в вопросе: потому что он более свободный и открытый.

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

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

Меня вскрыло в момент, когда я хотел найти российский аналог популярных BI систем, таких как power bi или tableau. Такие существуют. Но что бы попробовать хотя бы демку, вам нужно оставить свою почту, потом вам напишут, скажут условия, дадут ссылки и тд. Вы такое в последний раз когда видели?

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

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

Power bi и tableau были доступны для изучения, даже для работы. Хочешь расширяться, вот тебе тарифы, покупай. Пользуешься бесплатно — согласись на обработку данных.

У наших же какой-то красный флаг на «открытые отношения».

Почему мы делаем аналоги, иной раз чуть ли не под чистую копируя оригинал, но не копируем модель распространения? Китай например копирует. Дак и получается, что российскими продуктами я до сих пор не пользуюсь, а китайскими уже пользуюсь. А причина лишь в том, что к «чужим» товарам доступ проще. Меня там не заставляют ждать почты, тыкать демку, покупать сразу что-то.

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

Программой хочется пользоваться, потому что она хорошо работает, а не потому что она «НАША».

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

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

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

———

🧑‍💻 Good coding

#it #hate
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
🌡 [RESOURCES] Задачи для подготовки к интервью по работе со SQL запросами

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

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

Ссылка на сайт

Также ряд задач с курса на знание SQL запросов:

Easy

1. Apply Discount
2. Car Failure

Moderate

1. Tech Layoffs
2. Separation

Hard

1. Kelly's 3rd Purchase
2. Temperature Fluctuations

———

🧑‍💻 Good coding

#SQL #problems #interview #resource #data_analytics
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
Channel name was changed to «Don Python [DATA SCIENCE]»
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