Python-шпаргалка для аналитика

Базовый синтаксис

# Переменные
x = 10
name = 'Иван'
is_active = True

# Комментарии
# Однострочный
"""
Многострочный
"""

# Print
print('Hello')
print(f'Name: {name}, x: {x}')  # f-string

Типы данных

# Числа
x = 10          # int
y = 3.14        # float

# Строки
s = 'hello'
s = "hello"
s = '''многострочная'''

# Булевы
b = True
b = False

# None
x = None

# Проверка типа
type(x)         # <class 'int'>
isinstance(x, int)  # True

Операции

# Арифметика
+ - * /
//      # деление нацело: 7 // 2 = 3
%       # остаток: 7 % 2 = 1
**      # степень: 2 ** 3 = 8

# Сравнение
== != < > <= >=

# Логика
and or not

# Проверка вхождения
'a' in 'abc'         # True
5 in [1, 2, 5]       # True

Строки

s = 'Hello World'
len(s)              # 11
s.upper()           # 'HELLO WORLD'
s.lower()           # 'hello world'
s.replace('Hello', 'Hi')  # 'Hi World'
s.split(' ')        # ['Hello', 'World']
'-'.join(['a', 'b', 'c'])  # 'a-b-c'
s.strip()           # убрать пробелы

# Slicing
s[0]                # 'H'
s[0:5]              # 'Hello'
s[:5]               # 'Hello'
s[6:]               # 'World'
s[::-1]             # 'dlroW olleH' (reverse)

# F-strings
name = 'Иван'
age = 25
f'{name} is {age} years old'
f'{1.234:.2f}'      # '1.23'

Списки (list)

# Создание
l = [1, 2, 3]
l = list(range(5))  # [0, 1, 2, 3, 4]

# Доступ
l[0]                # 1
l[-1]               # последний
l[1:3]              # [2, 3]

# Методы
l.append(4)         # добавить
l.extend([5, 6])    # расширить
l.insert(0, 0)      # вставить на позицию
l.remove(2)         # удалить первое вхождение
l.pop()             # удалить последний
l.pop(0)            # удалить первый
l.sort()            # сортировка in-place
sorted(l)           # новый отсортированный
l.reverse()         # обратить

# Длина, сумма, мин, макс
len(l), sum(l), min(l), max(l)

Словари (dict)

d = {'name': 'Иван', 'age': 25}

# Доступ
d['name']           # 'Иван'
d.get('city', 'Москва')  # default если нет

# Изменение
d['city'] = 'Москва'
del d['age']
d.pop('age')

# Итерация
for key, value in d.items():
    print(key, value)

# Проверка
'name' in d

Подробнее про dict.

Множества (set)

s = {1, 2, 3}
s = set([1, 2, 3, 3])  # {1, 2, 3}

s.add(4)
s.remove(2)

# Операции
a | b   # объединение
a & b   # пересечение
a - b   # разность

Если хочется сразу закрепить тему на практике — открой тренажёр в Telegram. 10 минут в день — и синтаксис в пальцах.

Кортежи (tuple)

Неизменяемые списки:

t = (1, 2, 3)
t[0]                # 1
# t[0] = 5          # TypeError — неизменяемый

# Распаковка
x, y, z = t

Условия

if x > 0:
    print('positive')
elif x == 0:
    print('zero')
else:
    print('negative')

# Тернарный
label = 'positive' if x > 0 else 'non-positive'

Циклы

# For
for i in range(5):          # 0, 1, 2, 3, 4
    print(i)

for x in [1, 2, 3]:
    print(x)

for i, x in enumerate(['a', 'b', 'c']):
    print(i, x)

for k, v in d.items():
    print(k, v)

# While
n = 0
while n < 5:
    n += 1

# break / continue
for x in l:
    if x == 0:
        break
    if x < 0:
        continue
    print(x)

List comprehensions

[x**2 for x in range(10)]
[x for x in l if x > 0]
[x if x > 0 else 0 for x in l]

Подробнее.

Функции

def greet(name, greeting='Hello'):
    return f'{greeting}, {name}!'

greet('Иван')                   # 'Hello, Иван!'
greet('Иван', greeting='Hi')    # 'Hi, Иван!'

# Lambda
square = lambda x: x ** 2

# *args, **kwargs
def f(*args, **kwargs):
    print(args, kwargs)

Работа с файлами

# Чтение
with open('file.txt', 'r') as f:
    content = f.read()
    lines = f.readlines()

# Запись
with open('file.txt', 'w') as f:
    f.write('hello')

# CSV
import csv
with open('file.csv') as f:
    reader = csv.DictReader(f)
    for row in reader:
        print(row)

Модули для аналитика

# Pandas
import pandas as pd
df = pd.read_csv('file.csv')

# NumPy
import numpy as np
arr = np.array([1, 2, 3])

# Matplotlib
import matplotlib.pyplot as plt
plt.plot([1, 2, 3])
plt.show()

# Seaborn
import seaborn as sns
sns.histplot(df['x'])

# Scipy
from scipy import stats
stats.ttest_ind(a, b)

# Requests (для API)
import requests
r = requests.get('https://api.example.com')
data = r.json()

# JSON
import json
d = json.loads('{"a": 1}')
s = json.dumps({'a': 1})

# Datetime
from datetime import datetime, timedelta
now = datetime.now()
week_ago = now - timedelta(days=7)

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

Обработка ошибок

try:
    x = int('abc')
except ValueError as e:
    print(f'Error: {e}')
else:
    print('success')
finally:
    print('cleanup')

Классы (базово)

class User:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def greet(self):
        return f'Hello, {self.name}'

u = User('Иван', 25)
u.greet()

Polymorphism и наследование

class Admin(User):
    def __init__(self, name, age, role):
        super().__init__(name, age)
        self.role = role

Основные встроенные функции

len(obj)                # длина
sum(iterable)            # сумма
min(x), max(x)           # мин/макс
sorted(l)                # сортировка
reversed(l)              # реверс
zip(a, b)                # пары
map(func, iter)          # применить ко всем
filter(func, iter)       # отфильтровать
any(l), all(l)           # любое / все True
abs(x), round(x, 2)      # модуль, округление

pipenv / virtualenv

# Создать виртуальное окружение
python -m venv venv
source venv/bin/activate  # Linux/Mac
venv\Scripts\activate     # Windows

# Установить пакеты
pip install pandas numpy
pip freeze > requirements.txt

Читайте также

FAQ

С чего начать?

Синтаксис → pandas → ML. Для аналитика 80% времени — pandas.

Какой редактор выбрать?

Jupyter Notebook для анализа. VS Code + Jupyter extension — универсально. PyCharm — тяжеловат.

Python 2 или 3?

Только Python 3 (3.10+). Python 2 умер в 2020.

Нужен ли продвинутый Python?

На junior — нет. На middle+ — полезно (ООП, decorators, generators).