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

Вы только что начали самообучать Python? Отличное решение! Согласно исследованию Kaggle Machine Learning and Data Science за 2018 год, Python является довольно популярным языком в нескольких областях, особенно в Data Science. В нем есть ряд библиотек, которые считаются отраслевыми стандартами для тяжелых задач, таких как NLTK, pandas, spaCy и многие другие, а также немало хитрых трюков для обработки данных на ходу.

Так что, если вы изучаете Python для науки о данных, обязательно ознакомьтесь со следующими вариантами!

Все примеры используют Python 3.6.

1. Чтение файлов

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

>>>for line in fh.readlines():
...     print(line)

Если входной файл выглядит следующим образом:

line1
line2
line3
line4

Результатом будет:

line1
 
line2
 
line3
 
line4
 

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

Также обратите внимание, что если вы используете readline(), он также действителен, но в этом случае будет напечатан каждый символ в первой строке:

l
i
n
e
1

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

>>>for char in fh.read():
...     print(char)

Выход:

l
i
n
e
1
l
i
n
e
2
…

И так далее.

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

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

>>>for chunk in fh.read(10):
....     print(chunk)

Выход:

l
i
n
e
1
l
i
n
e

Это напечатает первые 10 байтов ваших данных, которые не превышают символ «2» в строке «line2».

2. Использование range()

Если у вас есть часть данных, организованная в виде списка элементов, может быть множество различных модификаций обработки, которые вы, возможно, захотите с ней сделать - возможно, сопоставьте категориальные элементы списка с числовыми значениями, а затем сделайте с ними что-то еще. Возможно, вы захотите внести определенные изменения только в подмножество строк в строке. Или вы можете пропустить каждую n-ю строку в вашем файле. range() может тогда очень пригодиться в циклах for.

С range() вы можете установить нижнюю и верхнюю границы:

>>> for i in range(1, 5):
...     print(i)

Выход:

1
2
3
4

А также укажите шаг помимо лимитов:

>>> for i in range(1, 10, 2):
...    print(i)

Выход:

1
3
5
7
9

Обратите внимание, что в Python 3 range() - это генератор, аналогичный xrange() в Python 2.

3. Итак, как мне печатать без лишней новой строки?

Если вы также хотите распечатать каждый элемент исследуемых данных без новой строки, вы можете использовать end:

>>> for i in range(1, 10):
...    print(i, end='')

Выход:

123456789

Это похоже на следующее в Python 2:

...    print i,

Однако вариант Python 3 по умолчанию не вставляет нежелательные пробелы, в отличие от аналога Python 2.

Пример Python 2:

>>> for i in xrange(1, 10):
...    print i,

Вывод Python 2:

1 2 3 4 5 6 7 8 9

4. Использование enumerate ()

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

>>> l = ['a', 'b', 'c']
>>> for i, j in enumerate(l):
...    print(i, j)

Выход:

0 a
1 b
2 c

5. Присвоение значений

В других случаях при работе с последовательностями элементов данных, таких как списки, вам может потребоваться присвоить значения нескольким переменным, что вы можете сделать в Python за один раз - «распаковка»:

>>> a, b, c = [1, 2, 3]
>>> a
1
>>> b
2
>>> c
3

Или даже:

>>> a, b, *c = [1, 2, 3, 4]
>>> a
1
>>> b
2
>>> c
[3, 4]

Вы также можете сделать это между списками и кортежами, например:

>>> [a, b, c] = (1, 2, 3)
>>> a
1
>>> a, c
(1, 3)

6. Итерация по нескольким последовательностям.

zip() позволяет выполнять итерацию по нескольким последовательностям параллельно. Однако он останавливается, как только достигает конца самой короткой последовательности:

>>> l1 = ['a', 'b', 'c']
>>> l2 = [1, 2]
>>> for i in zip(l1, l2):
...    print(i)

Выход:

('a', 1)
('b', 2)

Чтобы заставить его следовать самому длинному, популярным трюком в Python 2 было использование map() для вставки None в самый короткий. В Python 3 вы можете использовать zip_longest() из itertools:

>>> import itertools
>>> for i in itertools.zip_longest(l1, l2):
...    print(i)

Выход:

('a', 1)
('b', 2)
('c', None)

Это лишь небольшая часть встроенных функций и ярлыков, которые помогают проверять и обрабатывать данные в Python. Какие еще интересные уловки вы сочли полезными на данный момент? Делитесь в комментариях!

Больше контента на plainenglish.io