Only Analyst
2.56K subscribers
139 photos
20 videos
156 links
Канал для всех, кто интересуется аналитикой данных и хочет изучить данную профессию
@onlyanalyst
Download Telegram
Сегодня разберем довольно частую задачу на собеседованиях:
Необходимо объединить два словаря в один. Довольно частая проблема, которая встречается в работе, например для объединения двух разных источников данных.
x = {'a': 1, 'b': 2}
y = {'b': 3, 'c': 4}

Для решения есть два варианта:
1. Для Python 3.9.
z = x | y

2. Для Python 3.5.
z = {**x, **y}

В результате Python объединяет ключи словаря в порядке, указанном в выражении, перезаписывая дубликаты слева направо.
{'a': 1, 'b': 3, 'c': 4}

В следующем посте разберем задачи из новой рубрики на собеседованиях “Pandas-программист”. Интересующие вопросы задавайте в комментариях! #python #собеседование #словари
👍124👏1
Внимание, друзья! 🎓

Сегодня поговорим о словарях Python! 🐍📚

🤔 Вам когда-нибудь требовалось хранить данные таким образом, чтобы к ним было легко получить доступ или изменить их? В таком случае пригодятся словари!

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

📝 Вот пример того, как создать словарь на Python:

my_dict = {"яблоко": 2, "банан": 3, "апельсин": 1}


🍎,🍌,🍊 В этом примере у нас есть три ключа (яблоко, банан и апельсин) с соответствующими им значениями (2, 3 и 1).

🔍 Чтобы получить доступ к значению, используй ключ следующим образом:

my_dict["яблоко"] 
# Output: 2


🔄 Чтобы изменить значение, просто присвой ключу новое значение:

my_dict["банан"] = 4
my_dict["банан"]
# Output: 4


🗑️ Чтобы удалить пару ключ-значение, используй ключевое слово del:

del my_dict["апельсин"]
my_dict
Output: {"яблоко": 2, "банан": 4}


Вызывает ли работа со словарями у тебя сложности, если да, то задавай вопросы в комментариях!
💻 Если показалось очень легко, то в следующем посте разберем более сложные манипуляции!
#python #словари
🔥103👏2
Всем привет! Сегодня продолжим тему словарей и разберем более сложные случаи!
Такие примеры часто встречаются на собеседованиях в части Python.

🔍 Использование метода get()
Метод get() является полезным инструментом при работе со словарями. Он позволяет получить доступ к значению для данного ключа, и если ключ не найден, он возвращает значение по умолчанию.

my_dict = {"apple": 2, "banana": 3, "orange": 1}
my_dict.get("apple", 0)
# Output: 2
my_dict.get("kiwi", 0)
# Output: 0

🧹 Нахождение дубликатов (словарное включение)

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

numbers = [1, 2, 2, 3, 4, 4, 4, 5, 6, 6, 7]
unique_numbers = {num: numbers.count(num) for num in numbers}
print(unique_numbers)
# Output: {1: 1, 2: 2, 3: 1, 4: 3, 5: 1, 6: 2, 7: 1}

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

import random
rolls = [random.randint(1, 6) for _ in range(100)]
counts = {}
for roll in rolls:
counts[roll] = counts.get(roll, 0) + 1
print(counts)
# Output: {1: 16, 2: 18, 3: 18, 4: 21, 5: 15, 6: 12}

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

keys = ['apple', 'banana', 'orange']
values = [2, 3, 1]
my_dict = dict(zip(keys, values))
print(my_dict)
# Output: {'apple': 2, 'banana': 3, 'orange': 1}

В следующем посте разберем другие методы словарей и как их использовать для решения задач!

#python #собеседование #словари
🔥98👏2
📊🔎🤖 Всем привет, сегодня будем решать задачи с собеседований! Продолжая наше обсуждение словарных методов, давайте взглянем на dictionary comprehension (словарное включение). Словарное включение - это краткий и мощный способ создания словарей на Python.

📝 Словарное включение выполняется по синтаксису, аналогичному списковому включению, но с использованием пар ключ-значение вместо отдельных значений. Вот пример:

my_dict = {key: value for key, value в iterable}

🧐 Словарное включение может быть использовано для решения самых разных задач. Вот несколько примеров:

🔍 Задача 1: Преобразуйте список строк в словарь, где ключом является строка, а значением - длина строки.

my_list = ['apple', 'banana', 'cherry']
my_dict = {string: len(string) for string in my_list}
print(my_dict)
# Output: {'apple': 5, 'banana': 6, 'cherry': 6}


🔍 Задача 2: Отфильтруйте словарь, чтобы он включал только пары ключ-значение, в которых значение больше 5.

my_dict = {'apple': 3, 'banana': 6, 'cherry': 2, orange: 8}
filtered_dict = {key: value for key, value in my_dict.items() if value > 5}
print(filtered_dict)
# Output: {'banana': 6, orange: 8}


🔍 Задача 3: Создайте словарь, использую словарное включение, на основе списка из чисел, где ключом является число, а его значением квадрат числа!

numbers = [1, 2, 3, 4, 5]
squares_dict = {место для кода}
# Output {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}


Если получится решить, то присылай свой код в комментарии, а если нет, то задавай вопросы и всей командой поможем тебе!
#собеседование #python #словари #задача
🔥9👍7🥰1
📊Всем привет! Сегодня будет новый формат, где мы по шагам разберем решение рабочей задачи с моими комментариями!

А также применим наши знания о словарях из предыдущих постов и познакомимся с новой структурой данных в Python - множества (set).

📝 Если хочешь испытать себя, то реши задачу самостоятельно, пришли решение в комментарии и сравни с моим!

🔍 Задача! Есть список со словарями и нам необходимо найти все уникальные ключи:

arr = [{'a': 1, 'b': 2},
{'a': 3, 'b': 4},
{'c': 5}]

💯Решение:

1. Первое, что приходит на ум, это создать цикл и пройтись по списку:

for i in arr:
pass

2. Далее, нам необходимо получить доступ к ключам каждого словаря, это можно сделать с помощью метода .keys():

for i in arr:
i.keys()


3. Теперь, хотелось бы сохранить эти ключи в список, для этого создадим пустой список result и с помощью метода .extend() добавим ключи:

result = []
for i in arr:
result.extend(i.keys())
print(result)
#Output ['a', 'b', 'a', 'b', 'c']


4. На данном этапе у нас есть список со всеми значениями ключей из словарей и необходимо оставить только уникальные, для этого можно использовать структуру данных Python - множества (set), в которой могут быть только уникальные значения:

result = []
for i in arr:
result.extend(i.keys())
result = set(result)
print(result)
#Output ['a','c','b']


🐥Вот такое решение у меня получилось в первом приближение, есть идеи переписать это полностью с использованием множеств и метода .update().

🐊В следующих постах более подробно расскажу множествах и как использовать их в работе и для решения задач на собеседованиях!

👉 Обязательно задавайте вопросы и присылайте свои решения!

🗿Понравился ли такой формат?
#python #словари #множества #работа
9🔥9👏3
📊 Давайте поговорим о структуре данных в Python - множество (set) 🐍

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

🤓 Вот некоторые методы множества:

add() - добавляет элемент в набор
remove() - удаляет элемент из набора
intersection() - возвращает пересечение двух наборов
union() - возвращает объединение двух наборов

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

# Создаем 2 множества
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
print(set1) # Output: {1, 2, 3, 4, 5}
print(set2) # Output: {4, 5, 6, 7, 8}

#
Добавим элемент в set1
set1.add(
6)
print(set1) # Output: {1, 2, 3, 4, 5, 6}

#
Удлаим элемент из set2
set2.remove(8)
print(set2) # Output: {4, 5, 6, 7}

#
Найдем пересечение set1 и set2
intersection_set = set1.intersection(set2)
print(intersection_set) # Output: {4, 5, 6}

#
Найдем уникальные значения set1 and set2
union_set = set1.union(set2)
print(union_set) # Output: {1, 2, 3, 4, 5, 6, 7}


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

Вопрос: что будет если с помощью метода .add() добавить в множество уже имеющийся элемент? Пиши ответ в комментариях! В следующем посте раберем на сколько множество быстрее, чем списки!

#python #множества #set
👍10🔥81
📣 Всем привет! 🐍

Я хотел поделиться классной встроенной функцией в Python, которая может помочь Вам писать более эффективный код: 🔍
range()
.

👉
range()
- это удобная функция для генерации последовательности чисел. Она обычно используется в циклах
for
для выполнения итерации определенное количество раз. Вот пример:

for i in range(5):
print(i)
Output: 0 1 2 3 4

Функция
range()
принимает до трех аргументов:
start
,
stop
и
step
.

👉
start
(необязательно) — это первое значение последовательности. Если не указано, то по умолчанию значение равно 0.

👉
stop
(обязательно) – это конечное значение последовательности. Это значение не включено в последовательность.

👉
step
(необязательно) — это разница между каждым значением в последовательности. Если не указано, то по умолчанию значение равно 1.

Вот пример использования
range()
со всеми тремя параметрами для генерации последовательности четных чисел от 2 до 10:

for i in range(2, 11, 2):
print(i)
Output: 2 4 6 8 10

Вы также можете использовать параметр
step
для изменения списка в обратном направлении, установив для него значение -1. Например:

my_list = [1, 2, 3, 4, 5]
reversed_list = my_list[::-1] # using slicing
print(reversed_list)
Output: [5, 4, 3, 2, 1]

# Используя range
reversed_list = []
for i in range(len(my_list)-1, -1, -1):
reversed_list.append(my_list[i])
print(reversed_list)
Output: [5, 4, 3, 2, 1]

В следующих постах мы познакомимся с еще некоторыми встроенными функциями: 🧐
enumerate
и 🗺
map
.

Какие еще способы применения функции 🔍
range()
вы знаете?

Также сообщаю, что мы с @dianakoloda, Head of HR DataGo!, записали видео с ответами на Ваши вопросы и скоро его можно будет посмотреть!
#python
17🥰16🎉8🤩6
👋 Всем привет! Сегодня разберем циклы в Python: while и for! 🐍

Цикл повторяет определенную задачу снова и снова, пока он не получит команду остановиться.

🤔 Но как мы сообщаем циклу, когда нужно остановиться?

🤖 Цикл while будет работать до тех пор, пока выполняется определенное условие.

👦🏼 Например, вы хотите сосчитать от 1 до 10:

count = 1
while count <= 10:
print(count)
сount = count + 1

Этот цикл будет выполняться до тех пор, пока count будет меньше или равно 10. Он будет выводить значение count каждый раз в цикле, а затем добавлять 1 к count. Когда количество достигает 11, условие count <= 10 больше не выполняется, и цикл останавливается.

🚶Теперь давайте поговорим о циклах for. Цикл for используется для перебора последовательности элементов, например таких как список или строка.

🍎 Например, предположим, у вас есть список фруктов, и вы хотите вывести каждый фрукт в списке:

fruits = ['яблоко', 'банан', 'вишня']
for fruit in fruits:
print(fruit)

Этот цикл пройдется по каждому элементу в списке фруктов и напечатает его. Переменная fruit используется для представления каждого элемента по очереди.

🤔 Итак, подведем итог: циклы while продолжают выполняться до тех пор, пока условие истинно, а циклы for повторяют последовательность элементов.

👋 Вот домашнее задание для закрепления материала:

🧐 Задача: Напишите код на Python, который выводит первые 10 четных чисел.

Выберете какой цикл использовать и объясните почему!

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

#python #циклы
👍6🥰61
📢 Аналитики, привет! Кто-то сталкивался с проблемой, что нужно посчитать количество повторений элемента в списке? Или узнать какие элементы повторяются больше всего раз? Для решения данной задачи можно написать свою собственную функцию или можно воспользоваться встроенным модулем Collections и объектом Counter.

🧮 Объект Counter позволяет нам подсчитывать количество каждого элемента и возвращает словарь с результатами:

# импортируем библиотеку
from collections import Counter

# создаем список со значениями
lst = ['apple', 'banana', 'orange', 'apple', 'apple', 'orange']

# создаем объект
cnt = Counter(lst)

print(cnt)

Output: Counter({'apple': 3, 'orange': 2, 'banana': 1})

# для вывода только 2 самых распространенных элементов
print(cnt.most_common(2))

Output: [('apple', 3), ('orange', 2)]

👩‍🏭
Но как насчет производительности? Давайте сравним метод Counter с решением на Python, используя timeit:

d = {}
for elem in lst:
d[elem] = d.get(elem, 0) + 1
print(d)

Output: {'apple': 3, 'banana': 1, 'orange': 2}

🔎
Результат мы получим одинаковый, но в плане скорости выполнения Counter работает в разы быстрее, чем даже самое эффективное решение на чистом Python.

⚖️ Подробное сравнение на 60 000 элементах в комментариях!
#python
🔥13👍6
😀 Всем привет!

📹 Вчера в видео мы затронули такую сущность как массивы numpy. Разберем в чем их отличия от списка в Python.

📊 Списки - это встроенная структура данных в Python, которая может содержать разнородные элементы любого типа. Давайте рассмотрим пример создания списка:

my_list = [1, 2, 3, 'a', 'b', 'c']

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

import numpy as np

my_array = np.array([1, 2.5, 3])

array([1., 2.5, 3.])

my_array.dtype

dtype('float64')


🧮 Как мы видим, numpy автоматически переводит из формата int64 в float64 целиком весь массив, даже если хотя бы один элемент является float64 - однородность это цена, которую приходится заплатить за скорость.

🎯 Еще одно ключевое отличие заключается в том, что массивы допускают поэлементные операции:

import numpy as np

arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])

result = arr1 * arr2

print(result)

# Output: [4, 10, 18]

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

🔭 Еще одной полезной функцией массивов numpy является broadcasting, которая позволяет выполнять операции между массивами различной формы:

import numpy as np

arr = np.array([1, 2, 3])

result = arr * 2

print(result)


# Output: [2, 4, 6]

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

🏠 Попробуйте повторить поэлементные операции и broadcasting с помощью списка Python и присылайте резудьтаты в комментарии.

🏎️ В следующих постах отдельно разберем индексацию и сравним скорость работы разных методов.

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

#numpy #python
Please open Telegram to view this post
VIEW IN TELEGRAM
13👍5
👋 Всем привет!

🔢 Сегодня сравним все возможные способы возведения списка в квадрат в Python 🐍

🦄 Во-первых, создадим список:

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

🌈 Теперь рассмотрим различные способы возведения списка в квадрат:

1️⃣ Цикл for и метод append():

squared_list = []
for num in my_list:
squared_list.append(num ** 2)


2️⃣ Списковое включение:

squared_list = [num ** 2 for num in my_list]

3️⃣ Функция map():

squared_list = list(map(lambda num: num ** 2, my_list))

4️⃣ Массив numpy:

import numpy as np
my_array = np.array(my_list)
squared_array = np.square(my_array)
squared_list = squared_array.tolist()

🔬
Теперь проверим какой способ самый быстрый в зависимости от количества элементов в списке! Для этого воспользуемся библиотекой timeit. Диапазон значений для списка будет от 0 до 500 000 элементов.

🏁 Массив Numpy неоспоримый чемпион по скорости! Практически в 5 раз превышающий цикл и функцию map(), которая я думал будет быстрее. Списковое включение не только лаконичный, но и самый быстр способ возведения списка в квадрата без использовался дополнительных библиотек.

✒️ Как Вам такие питоновские гонки? Что еще было бы интересно Вам сравнить? Какие способы возведения списка в квадрат Вы еще знаете?

🏠 В качестве задания попробуйте использовать не метод np.square(), а broadcasting.

#numpy #python
👍12🔥72
🎲 Для аналитика данных встроенная библиотека "random" в Python предлагает несколько полезных методов для работы со случайными числами.

⚒️ Рассмотрим самые полезные методы и примеры их использования.

🎬 Для начала необходимо импортировать библиотеку:

import random

1️⃣ random(): Возвращает случайное число с плавающей запятой в диапазоне от 0 до 1.

⚒️ Пример: Имитация результата подбрасывания монетки, где вероятность выпадения орла и решки 0.5.

coin_toss = random.random()

if coin_toss < 0.5:
outcome = 'Heads'
else:
outcome = 'Tails'

print(outcome)

Output: Tails


2️⃣ randint(a, b)
: Возвращает случайное целое число между a и b (включительно).

⚒️ Пример: Генерация случайных идентификаторов клиентов в пределах заданного диапазона.

random_integer = random.randint(1, 10)

print(random_integer)

output: 8

3️⃣ randrange(start, stop[, step]): Возвращает случайно выбранный элемент из диапазона(start, stop, step).

⚒️ Пример: Случайный выбор числа в рамках интервала для генерации синтетических данных.

random_element = random.randrange(0, 100, 5)

print(random_element)

output:
70

4️⃣ choice(seq): Возвращает случайно выбранный элемент из последовательности.

⚒️ Пример: Имитация случайного выбора в пределах заданного диапазона.

fruits = ['apple', 'banana', 'cherry', 'durian']

random_fruit = random.choice(fruits)

print(random_fruit)

output: durian

5️⃣ choices(population, weights=None, k=1):
Возвращает список из k случайно выбранных элементов из совокупности с необязательным взвешиванием.

⚒️ Пример: Проведение опроса с использованием метода стратифицированной выборки.

subgroups = ['A', 'B', 'C', 'D']

weights = [0.2, 0.3, 0.3, 0.2]

random_sample = random.choices(subgroups, weights=weights, k=100)

print(random_sample)

output: ['B', 'B', 'B', 'C', 'B', 'C'


6️⃣ sample(population, k)
: Возвращает список с k уникальными случайно выбранными элементами из совокупности.

⚒️ Пример: Создание случайной выборки данных из большого набора данных для предварительного анализа.

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

random_sample = random.sample(numbers, k=4)

print(random_sample)

output: [10, 5, 3, 1]

7️⃣ shuffle(x): Случайным образом перетасовывает элементы в списке x. Список изменяется.

⚒️ Пример: Произвольное изменение порядка строк набора данных или перемешивание карт в колоде.

cards = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']

random.shuffle(cards)

print(cards)

output: ['3', '8', '2', '10', 'K', '7', 'Q', '9', 'J', 'A', '6', '4', '5']

8️⃣ uniform(a, b)
: Возвращает случайное число с плавающей запятой между a и b, где a - нижняя граница, а b - верхняя граница.

⚒️ Пример: Генерирование случайных цен в пределах заданного диапазона для моделирования ценообразования или создание синтетических данных с непрерывными переменными.

random_float = random.uniform(0.0, 1.0)

print(random_float)

output: 0.294

✒️
А как вы еще использовали использовали библиотеку random?

#python
7👍6🔥6
😀 Всем привет!

📃 Сегодня наткнулся на интересную статью, рассказывающую о сравнении значений с None в Python и Pandas. Это требуется для нахождения пропущенных данных.

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

🐍 В Python при сравнении с None используйте is или is not.

🐼 В Pandas при поиске пропущенных значений используйте методы isna или isnull.

🤥 В Python есть понятие "истинных" и "ложных" значений. Благодаря этому различные небулевы типы данных могут интерпретироваться в логических контекстах. Важно различать:

😇 Буквальные значения True или False: они являются логическими.

😈 Истинные или ложные значения: любой логический или небулевой тип данных.

🗓️ В Python следующее считается "ложным":

1️⃣ Константы: None и False.

2️⃣ Ноль любого числового типа: 0, 0.0, 0j, Decimal(0), Fraction(0, 1).

3️⃣ Пустые последовательности и коллекции: ", (), [], {}, set(), range(0).

🤗 Любое другое значение считается "истинным"

✒️ А что вы делаете с пропущенными данными?

#pandas #python
Please open Telegram to view this post
VIEW IN TELEGRAM
9🔥3
📺 На канале уже более 90 постов, поэтому ориентироваться стало сложно, даже мне, поэтому сделал навигация по хэштегам и оставлю ее в закрепе:

Программирование:

🐍 #python
📕 #словари
🔢 #множества #set
🌀 #циклы
🐼 #pandas
🎱 #numpy
🕵️‍♀️ #задача

Профессиональный путь:

🔎 #поискработы
👔 #собеседования
🔥 #прожарка
📃 #резюме
📚 #курсы

Развитие:

🦊 #петпроект
👫 #opensource
📕 #книги
🧑‍🏫 #учеба
📊 #визуализация
🔬 #абтесты
🎲 #тервер
🤖 #chatgtp
🧞 #парадокс
💿 #данные

Youtube:

👩‍💻 #интервью
📹 #видео

Личное:

🦹 #истории
💼 #работа - профессиональный опыт
👩‍💻 #аналитика - статистика группы и youtube канала
©️ #авторскиеправа
🗒️ #подборка - наборы полезных ссылок
📑 #проект
🧑‍⚖️ #статьи
📰 #хабр

Конференции:

👍 #матемаркетинг #aha23

✒️ Также приглашаю в наш чат, где будем помогать друг другу и отвечать на вопросы и делиться тестовыми. Если есть советы, как сделать навигацию удобнее, то жду предложений
Please open Telegram to view this post
VIEW IN TELEGRAM
👍108🔥8
📊 Всем привет! Сегодня разберем важную тему для решения рабочих задач: создание колонок по условию в Pandas

💂‍♀️ В основном создание колонок по условию требуется для изменения гранулярности данных, например, вместо того, чтобы отдельно рассматривать пользователей по конкретному возрасту, удобнее сформировать из них смысловые группу: молодые (18-30), средние (31-59) и пожилые(60+).

🏕️ Метод 1: iterrows() построчно обрабатывает в Data Frame записи и применяет условную логику для создания нового столбца:

for index, row in df.iterrows():
if condition:
df.at[index, 'new_column'] = value
else:
df.at[index, 'new_column'] = other_value


👩‍🎤
Метод 2: apply() в pandas позволяет нам применить функцию по осям (строки, колонки) к Data Frame:

def conditional_logic(row):
if condition:
return value
else:
return other_value

df['new_column'] = df.apply(conditional_logic, axis=1)


🕵️‍♀️ Метод 3: np.where() обеспечивает векторизованный подход к созданию условного столбца. Мы можем указать условие и присвоить значения на его основе:

df['new_column']=np.where(condition, value, other_value)

👍
Метод 4: np.select() позволяет нам создать новый столбец на основе нескольких условий:

conditions = [condition1, condition2, condition3]
choices = [value1, value2, value3]
df['new_column'] = np.select(conditions, choices, default=other_value)

🏎️ Давно мы не устраивали забеги на скорость, поэтому создадим DataFrame от 100 до 10 000 записей с возрастами от 18 до 80.

🏁 Результаты впечатляющие: iterrows очевидно занимает последнее место, самый популярный метод apply быстрее примерно в 7 раз при 10 000 строк. В упорной борьбе побеждает np.where, который в 263 раза быстрее, чем iterrows, в 35 раз быстрее apply и всего лишь в 1.3, чем np.select.

🔬 В который раз убеждаемся, что numpy - лидирующая библиотека, когда необходимо добиться максимальной скорости.

✒️ Какие еще применения условного создания колонок Вы знаете? Какой метод используете?

😀 Подписаться

#pandas #numpy #python
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17👍74
📕 Вышел новый Jupyter Notebook 7

ℹ️ Главные изменения: совместная работа в режиме реального времени, интерактивная отладка, оглавление, темы, темный режим, компактный просмотр на мобильных устройствах.

🐞 В Notebook 7 завезли интерактивный отладчик от JupyterLab, который позволяет пошагово просматривать код ячейка за ячейкой. Вы также можете устанавливать точки остановки и проверять переменные.

👯 Совместная работа в режиме реального времени позволяет делиться своим блокнотом с другими пользователями и редактировать его. Чтобы начать активировать совместную работу, необходимо установить расширение jupyter-collaboration:

pip install jupyter-collaboration

🌚 Темная тема теперь доступна в Jupyter Notebook по умолчанию. Вы также можете установить множество других тем JupyterLab. Например, для установки ночной темы JupyterLab:

pip install jupyterlab-night

💁‍♂️ В посте выделил самые интересные для себя нововведения, но более подробно можете ознакомиться по ссылкам:

🔗 Документация
🔗 Технические подробности

🏥 Есть много способов, которыми вы можете принять участие в работе над Notebook 7. Например, внести свой вклад в разработку, документирование и дизайн Jupyter Notebook на GitHub.

🔗 Ссылка на открытые «good first issue»

✒️ Как Вам обновления? Как по мне самый мажорный апдейт за долгие годы. И так как Jupyter является инструментом №1 для анализа данных, поэтому очень важно следить за его новыми возможностями.

😀 Подписаться

💬 Чат

#новости #python
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥169👍2🥰2👎1
📄 Сегодня разберем одну из самых популярных задач для аналитиков данных по Python.

💼 Почти ни одно техническое собеседование не обходится без задания «Напишите функцию, которая определяет является ли строка палиндромом?»

🎓 Палиндром - это число, слово или текст, одинаково читающееся в обоих направлениях. Например, 101, «топот», «а роза упала на лапу Азора» являются палиндромами.

🎸 Рассмотрим несколько вариантов решения и сравним их по скорости:

✂️ Срезы

def is_palindrome(s):
return s == s[::-1]


🔂 Цикл

def is_palindrome(s):
reversed_string = ""
for char in s:
reversed_string = char + reversed_string
return s == reversed_string

Функция reversed()

def is_palindrome(s):
return s == ''.join(reversed(s))

🔃 Рекурсия

def is_palindrome(s):
if len(s) <= 1:
return True
return s[0] == s[-1] and is_palindrome(s[1:-1])

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

🤖 Небольшое задание, попробуйте добавить еще проверку на пробелы, знаки препинания и заглавные буквы. Ответы присылайте в комментарии.

😀 Подписаться

💬 Чат

#собеседование #python
Please open Telegram to view this post
VIEW IN TELEGRAM
11🔥6👍3