from scipy import stats as st
sample = [1,2,3,4,5]
results = st.shapiro(sample)
Если выборка небольшая или средняя по размеру (до 5000 наблюдений), критерий Шапиро-Уилка — лучший выбор, так как он более чувствителен к отклонениям от нормальности.
Если выборка большая, можно использовать критерий Колмогорова-Смирнова, хотя в таких случаях более целесообразно визуально проверить распределение или воспользоваться другими критериями, такими как Лиллиефорс, модификация Колмогорова-Смирнова.
This blog is not a documetation or an article project, its just expanded bookmarks with timeline
понедельник, 16 сентября 2024 г.
Критерий Колмогорова-Смирнова VS критерий Шапиро-Уилка в тесте на нормальность
суббота, 14 сентября 2024 г.
Общие принципы создания базы экспериментов
- достоверность вносимой информации должна быть подтверждена не только её автором, но и другим участником базы, например, другим автором; а правила проверки — зафиксированы и понятны. Это делают во избежание ошибок при заполнении базы и крайне редко, чтобы исключить влияние недобросовестных сотрудников.
- Прозрачность. Всем пользователям должны быть ясны правила добавления, изменения и удаления информации из базы.
- Стандартный формат записей. Каждый пользователь будет понимать, как найти нужные сведения.
- Доступность базы для всех заинтересованных внутри компании. Уровни доступа могут различаться, но видеть результаты работы других полезно всем. Как минимум, чтобы не делать одно и то же несколько раз. Как максимум, чтобы на основе чужих результатов генерировать собственные идеи.
пятница, 30 августа 2024 г.
Hattifatteners
среда, 28 августа 2024 г.
sql contents
- SQL basics (based on PostgreSQL)
- DATE_TRUNC и EXTRACT
- CAST
- LIKE
- CASE ... WHEN ... END
- SQL агрегирующие функции, GROUP BY, ORDER BY и HAVING
- SQL взаимоотношения между таблицами
- переименование AS
- к псевдонимам нельзя обратиться в WHERE или HAVING
- JOIN
- SQL порядок выполнения операторов
- SQL UNION and UNION ALL
- SQL Подзапросы и общие табличные выражения
- подзапрос во FROM
- подзапрос в IN
- WITH ... AS ...
- SQL Функции для работы со строками
- BI calculations in SQL - examples
- Aggregate window functions
- OVER
- PARTITION BY
- Ranking window functions
- ROW_NUMBER (и ORDER BY)
- RANK (1, 2, 2, 4, 4, 4 ...)
- DENSE_RANK (1, 2, 2, 3, 3, 3 ...)
- NTILE
- Offset window functions
- SUM, MIN, MAX, COUNT ...
- LEAD, LAG
- Some features of window functions
- WINDOW и сохранение окна
- Ограничения оконных функций
- Retention
- Churn
- LTV
- explain
четверг, 22 августа 2024 г.
Курс матстата
Основные понятия
- Случайная величина
- Плотность распределения и функция распределения
- Закон распределения
- Математическое ожидание
- Дисперсия
- Какие именно бывают случайные величины
- Когда используются те или иные распределения случайных величин (их связь с реальностью)
- Описательные статистики: среднее, дисперсии, медианы и пр.
- Работа с данными: предобработка, сбор, разведочный анализ, визуализация
Понятие случайной величины
- Распределение дискретной случайной величины
- Функция распределения дискретной случайной величины
- Распределение непрерывной случайной величины
- Функция распределения непрерывной случайной величины
- Свойства функции распределения случайной величины
Характеристики случайной величины
- Математическое ожидание
- Свойства математического ожидания
- Дисперсия
- Свойства дисперсии
- Мода случайной величины
- Медиана случайной величины
- Квантиль
Какими бывают случайные величины
- Распределение Бернулли
- Биномиальное распределение
- Геометрическое распределение
- Распределение Пуассона
- Експоненциальное распределение
- Равномерное распределение
- Нормальное распределение
Описательные статистики и выборки
- Понятие генеральной совокупности
- Понятие выборки (случайная выборка, репрезентативная выборка, сратифицированная выборка)
- independent identically distributed
- Понятие статистика
- Выборочное среднее, медиана, дисперсия, перцентиль, квартиль
- Сравнение теоретических величин и выборочных величин
Гистограмма и эмпирическая функция распределения
- Эмпирическая функция распределения cdf
- Эмперическая плотность распределения pdf
- Kernel density estimation на гистограмме
- Box plot
Зависимые случайные величины
- определение зависимых и независимых случайных величин
- Ковариация
- Свойства ковариации
- Корреляция Пирсона
- Корреляция Спирмена (корреляция Пирсона между рангами, определение рангов)
- Корреляция и причинность
Нормальное распределение и его свойства
- Математическое ожидание нормального распределения
- Дисперсия нормального распределения
- Функция и плотность распределения нормального распределения
- Стандартное нормальное распределение (центрирование и нормирование)
- Правила сигм
- Тяжелые хвосты
- Эксцесс и Куртосис
Многомерное нормальное распределение
- Вектор математических ожиданий
- Ковариационная матрица
Преобразование Бокса-Кокса
- логарифмирование данных (на примере цен)
- как избавиться от длинных тяжелых хвостов в данных чтобы применять к данным стандартные методы статистики
Масштабирование и категориальные переменные
- Пример рост вес и их размерность
- Подсчет расстояния между переменными разных размерностей
- Способы масштабирования
- Нормализация standard scaler
- Масштабирование на отрезок [0;1]
- Устойчивая к выбросам нормализация
- Категориальные переменные
- Dummy trap
- Линейная зависимость и мультиколлинеарность
- Особенности бинарного кодирования и проклятие размерности
Распределения связанные с нормальным
- Хи-квадрат распределение
- Число степеней свободы для Хи-квадрат распределения
- Распределение Стьюдента
- Распределение Фишера
Закон Больших Чисел (ЗБЧ)
- Собственно теорема
- Сходимость по вероятности
- Свойства сходимости по вероятности plim
Центральная Предельная Теорема (ЦПТ)
- Иллюстрация теоремы на игральных костях
- Сходимость по распределению
- Средиземье и Крайнеземье в статистике
- ЗБЧ vs ЦПТ сравнение формулировок
- Виды сходимостей (почти наверное, по вероятности, по распределению)
- Генерация распределений и квантильное преобразование
Схема математической статистики
- Построение большой карты/схемы для математической статистики
- Как оценить? (метод моментов, метод максимального правдоподобия)
- Союзники асимптотические при большом n: ЦПТ и дельта метод
- Союзники точные: Теорема Фишера, Хи-квадрат, t-статистика, F(n,k)
- Хорошие свойства: Несмещенность, Состоятельность, Эффективность
- Пример про деревню Гипотезово
Точечные оценки и метод моментов
- Точечная оценка параметров неизвестного распределения по выборке
- Момент 1 порядка и более высоких порядков
- Использование ЗБЧ
Асимптотические доверительные интервалы
- Асимптотический доверительный интервал для среднего
- Длина доверительного интервала
- Асимптотический доверительный интервал для разности средних
- Асимптотический доверительный интервал для долей
- Асимптотический доверительный интервал для разности долей
- Дельта метод
Хорошие свойства оценок
- Несмещенность
- Состоятельность
- Асимптотическая несмещенность
- Сравнение оценок, MSE (mean squared error)
- Несмещенная оценка для среднего и дисперсии
- Состоятельные оценки для среднего и дисперсии
- Состоятельность и несмещенность на примерах
- Дилема: Смещение VS Разброс
- MSE в виде суммы смещения и разброса Bias-variance decomposition (первое замечательное свойство MSE)
- Регуляризация
- Эффективность оценок
- Неравенство Рао-Фреше-Крамера (второе замечательное свойство MSE)
- Информация Фишера
- Проверка некоторых оценок на эффективность (распределение Бернулли и оценка среднего для доли; и для нормального распределения N(mu, 1))
Доверительные интервалы
- Предсказательный интервал
- Что такое доверительный интервал
- Зачем нужны доверительные интервалы
- Асимптотические доверительные интервалы
- Почему можно заменить дисперсию на выборочную дисперсию и это ничего не поломает
- Асимптотический доверительный интервал для дисперсии
- Точные доверительные интервалы для нормальных выборок (мало наблюдений)
- Точные доверительные интервалы для нормальных выборок - средние
- Теорема Фишера
- Точный VS асимптотический доверительный интервал
- Когда начинаются большие n (сходимость t-распределения к нормальному при больших n)
- Точные доверительные интервалы для нормальных выборок - разность средних: случаи когда дисперсии известны, дисперсии неизвестны и равны, дисперсии неизвестны и не равны
- Нерешенная проблема Беленца-Фишера и приближенное распределение Уэлча
- Точные доверительные интервалы для нормальных выборок: разность средних для зависимых выборок
- Точные доверительные интервалы для нормальных выборок: для дисперсии: случаи конда mu известно и неизвестно
- Точные доверительные интервалы для нормальных выборок: отношение дисперсий
- Как построить точный доверительный интервал для любого распределения (на примере равномерной выборки)
- На практике точные доверительные интервалы для разных экстравагантных распределений не строят, а пытаются набрать как можно больше наблюдений и использовать ЦПТ
Проверка гипотез
- Что такое гипотеза, что значит проверить гипотезу, на примере мартини Джеймса Бонда
- Уровень значимости
- Пошаговая процедура проверки гипотезы
- Нельзя принять нулевую гипотезу (можно опровергнуть или не опровергнуть)
- Альнатретивная гипотеза
- P-value
- Ошибки первого и второго рода
- Презумпция нулевой гипотезы (и примеры различных формулировок гипотез)
- Вычисление ошибок 1 и 2 рода для простого критерия
- Вычисление ошибок 1 и 2 рода для доли
- Мощность критерия
Какими бывают критерии
- Параметрические критерии (включают в себя расчет параметров конкретного распределения)
- Непараметрические (не завазяны на конкретное распределение)
- Согласия (проверяется гипотеза о виде неизвестного закона распределения)
Параметрические критерии
- z критерий гипотезы о долях
- z критерий для разности незваисимых долей
- z критерий для разности зависимых долей (несколько исследований одной и той же выборки)
- Гипотезы о средних, z критерий
- t-критерий для среднего (дисперсия известна, дисперсия неизвестна)
- Гипотезы о разности средних, z критерий
- Точные критерии о разности средних: случаи когда дисперсии известны, дисперсии неизвестны и равны, дисперсии неизвестны и не равны
- Алгоритм подбора критерия:
- Выборка нормальна?
- нет: z тест (ЦПТ)
- да: дисперсия известна?
- да: z тест (точный)
- нет: дисперсии равны?
- да: тест Стьюдента
- нет: тест Уэлча
- --- если выборка оказалась маленькой, а данные не нормальны можно использовать непараметрические критерии и процедуру бутстрапа
- Разность средних для зависимых выборок (исп. одновыборочный критерий стьюдента)
- Гипотезы о дисперсиях: случаи конда mu известно и неизвестно
- Тест Фишера для отношения дисперсий
Непараметрические тесты, критерии согласия, бутстрап
- Непараметрические критерии: критерий знаков
- Непараметрические критерии: критерий знаков двухвыборочный
- Непараметрические критерии: ранговые критерии
- Одновыборочный критерий Уилкоксона
- Двухвыборочный критерий Уилкоксона
- Двухвыборочный критерий Манна-Уитни (накладывается ограничение одинаковой формы распределения)
- Бутстрап и его схема по шагам
- Доверительный интервал Эфрона
- Особенности Бутстрапа, Центрирование
- Доверительный интервал Холла
- t-процентильный доверительный интервал
- Проверка гипотез при помощи бутстрапа
- Проблемы Бутстрапа
- Какой процент выборки используется при построении бутстрап выборок
- Эмпирическая функция распределения
- Несмещенность, состоятельность, асимптотическая нормальность эмпирической функции распределения
- Критерий Колмогорова (для непрерывных распределений)
- Расстояние между функциями распределения
- Теорема Колмогорова (новый союзник)
- Другие способы подсчета расстояния: критерий Крамера-Мизеса, критерий Андерсона-Дарменга
- Гипотезы об однородности выборок
- Критерий Колмагорова-Смирнова
- Критерий Пирсона (для дискретных распределений, и для непрерывных с оговорками)
- Гипотезы об однородности выборок на основании критерия Пирсона
понедельник, 12 августа 2024 г.
Reporting attribution model GA4
https://support.google.com/analytics/answer/10597962?hl=en
An attribution model can be a rule, a set of rules, or a data-driven algorithm that determines how credit is assigned to touchpoints along a user's path to completing important actions.
Reporting attribution model lets you select the attribution model you want to use to attribute credit in your Google Analytics 4 reports and the reports of any linked Firebase projects. Changing the reporting attribution model applies to historical and future data. Learn more Get started with attribution.
Changing the reporting attribution model is reflected in all key event reports and explorations that use event-scoped traffic dimensions, for example, Source, Medium, Campaign, and Default channel group. In Explore, you can view a full list of dimensions that are compatible with attribution. User- and session-scoped traffic dimensions, such as Session source or First user medium, are unaffected by changes to the reporting attribution model.
Fractional credit
When you switch to a non-last click attribution model, you may notice decimals or "fractional credit" for the first time in these columns. This is because credit for a given key event is distributed between contributing ad interactions according to your selected attribution model.
You select the Linear model. A user follows the path keyword1 > keyword2 and then converts. In this case, each keyword will display 0.5 in the Key events column from that key event.
Channels that can receive credit
Key event lookback window
Users can trigger key events days or weeks after interacting with your ad.
The conversion window determines how far back in time a touchpoint is eligible for attribution credit. For example, a 30-day conversion window will result in January 30th conversions being attributed only to touchpoints occurring from January 1-30.
The conversion window applies to all attribution models and all conversion types. Changes to the conversion window apply going forward and will be reflected in all reports within your Analytics property.
For Acquisition conversion events (first_open and first_visit), the default conversion window is 30 days. You can switch to 7 days if you have different attribution needs.
For all other conversion events, the default conversion window is 90 days. You can also choose 30 days or 60 days.
Note: The key event lookback window you choose also applies to session attribution.
среда, 10 июля 2024 г.
Множественная проверка гипотез
Поправка Бонферрони
Метод Шидака
)1/m
Метод Холма
метод Холма — итерационный. То есть рассчитывается не единый уровень αα для всех тестов, а новый для каждого из тестов. Формула расчёта уровней коррекции выглядит такimport pandas as pd
import numpy as np
from matplotlib import pyplot as plt
# подготавливаем данные
report = pd.DataFrame()
report['m'] = pd.Series([2, 3, 4, 5, 6, 7, 8, 9, 10]) # число тестов
report['alpha'] = 0.05 # исходный уровень значимости
# считаем поправки
report['Метод Бонферрони'] = report['alpha'] / report['m']
report['Метод Шидака'] = 1 - (1 - report['alpha']) ** (1 / report['m'])
# рассчитываем поправку Холма
def holm_correction(row):
m, alpha = int(row['m']), row['alpha'] # число тестов и уровень значимости
result = []
for i in range(m): # получаем номер текущего теста и считаем коррекцию
result += [alpha / (m - i)]
return result
# поскольку поправка Холма возвращает много результатов - возьмём среднее по ним
report['Поправки Холма'] = report.apply(holm_correction, axis=1)
report['Средний ур. знач. при поправке Холма'] = report['Поправки Холма'].apply(np.mean) # считаем средний уровень значимости с учётом поправки Холма
print(report)
# строим график
report.set_index('m')[['Метод Бонферрони', 'Метод Шидака', 'Средний ур. знач. при поправке Холма']].plot(grid=True)
# подписываем оси
plt.xlabel('Число тестов'), plt.ylabel('Уровень значимости')
plt.legend(title = 'Метод коррекции'), plt.title('Скорректированные уровни значимости')
plt.show()
На практике чаще всего применяют коррекцию Бонферрони — из-за простоты, но можно применять и коррекцию Холма, поскольку она более «щадящая» по отношению к мощности теста.
На практике это означает, что с таким низким уровнем значимости мы практически всегда будем оказываться в ситуации, когда нулевая гипотеза не отвергается и, возможно, будем совершать частые ошибки второго рода (то есть пострадает мощность теста). Это может произойти даже при коррекции для десяти сравнений и выше.
Чтобы справиться с этой проблемой, придумали специальные тесты для множественного сравнения гипотез:
- ANOVA — аналог t-теста для ситуаций сравнения трёх и более выборок;
- χ2-тест (читается «хи-квадрат») на независимость для сравнения пропорций, долей и шагов воронок — аналог z-теста для пропорций. Обратите внимание, что существует целое семейство тестов χ2, использующихся для самых разных целей. Для сравнения пропорций используется только тест на независимость (test of independence/association);
- Тест Краскела-Уоллиса — аналог теста Манна-Уитни для ситуации множественных сравнений. С тестом Манна-Уитни вы познакомитесь в следующей теме.
вторник, 9 июля 2024 г.
Ошибки 1ого и 2ого рода
Уровень статистической значимости — это вероятность случайно получить в реальном наблюдении значение, далёкое от предполагаемого в нулевой гипотезе.
Уровень статистической значимости — это одновременно и вероятность ошибиться: отвергнуть нулевую гипотезу, потому что наблюдение отличается от предполагаемого значения слишком сильно. Такая ошибка называется ошибкой первого рода, или ложнопозитивным результатом статистического теста. Это означает, что различий между сравниваемыми группами нет, но тест показал p-value меньше уровня значимости. Получается, есть основания отвергнуть H₀. Так, вероятность ошибки первого рода равна уровню значимости α.
воскресенье, 7 июля 2024 г.
Приоретизация гипотез
- срочно / не срочно; важно / не важно (Матрица Эйзенхауэра — способ приоритизации, в котором задаче присваивают два свойства: важность и срочность)
- Weighted Shortest Job First = (User-Business Value + Time Criticality + Risk Reduction or Opportunity Enablement) / Job Duration
- RICE = (reach * impact * confidence) / efforts
Определение важных метрик
- продуктовые
- маркетинговые
- финансовые модели
- доходов и расходов
- маркетинговой и продуктовой воронки
- когорт и юнит-экономики
- пользовательских метрик
- при анализе стейкхолдеров
- при анализу P&L
- User jorney, UX, интервью с пользователями
- список не исчерпывающий
Пример анализа стейкхолдеров e-comm
- Инвесторы, владельцы
- Рост стоимости бизнеса, увеличение дивидендов
- Метрики: Выручка, прибыль
- Chief executive officer
- KPI от владельцев по росту выручки, прибыли
- Метрики: Темпы роста выручки, прибыли
- Chief marketing officer
- Рост выручки, увеличение маркетингового бюджета
- Метрики: Маркетинговый бюджет, ROMI, выручка
- CTO
- Стабильная работа продукта, бюджет разработки
- Метрики: downtime&bugs, объем выполненных задач
- Пользователи
- удобство продукта, ценность, стоимость использования
- ROI продукта, экономия времени, количество запросов в поддержку, удельное количество часов, потраченных на поддержку клиента

- Содержит информацию обо всех доходах и расходах компании. Включает платежи, которые нужно исполнить или получить по договору с отсрочкой.
- Информация в P&L предоставляется за период, а не по состоянию на конкретную дату.
- Имеет стандартную структуру. Её шаблоны для разных видов бизнеса легко найти.
- Структура P&L уже декомпозирована на траты по направлениям деятельности подразделений и отделов. Это позволяет рассчитать юнит-экономику с минимальными дополнительными вычислениями.
понедельник, 24 июня 2024 г.
Основные бизнес показатели
- Оборот или выручка - это сумма платежей полученных от клиентов (за период)
- Себестоимость (товаров и/или услуг) - деньги которые компания тратит на производство или закупку товаров или услуг (сюда могут входить затраты на расходные материалы, станки топливо)
- Валовая прибыль = Выручка - Себестоимость. Если валовая прибыль отрицательна это плохой знак, однако она таковой может быть в случае распродаж (для освобождения складов) или с целью занятия доли рынка с целью дальнейшего получения прибыли на сервисах или поддержке
- Валовая маржинальность = Валовая прибыль / Выручка
- Операционные расходы - это расходы связанные с основной деятельностью компании, выплата зарплат, аренда помещений, электричество и интернет, маркетинг
- Операционная прибыль = Валовая прибыль - Операционные расходы. Если операционная прибыль отрицательна это операционный убыток. Операционный убыток может быть допустим если компания реинвестирует все доступные средства в свое развитие и рост. Некоторые компании могут получать операционный убыток десятилетиями.
- Операционная маржинальность = Операционная прибыль / Выручка. Это доля выручки, которая остается в компании после вычета себестоимости, зарплат, аренды, маркетинга и других расходов, связанных с основной деятельностью.
- Чистая прибыль = Операционная прибыль - налоги и кредиты. Все затраты компании — себестоимость, операционные расходы и обязательства перед государством и кредиторами — учитывает показатель чистой прибыли. Это именно та сумма, которую владельцы бизнеса могут забрать себе, выплатить акционерам или реинвестировать в развитие компании. Точную чистую прибыль можно посчитать только в конце года, когда известны все обязательства по налогам и кредитам, поэтому в ежедневном управлении компанией обычно опираются на валовую и операционную. Отрицательная чистая прибыль называется чистым убытком.
- ROI = (Чистая прибыль - Инвестиции) / Инвестиции. ROI на старте = -1 т.к. чистая прибыль по началу = 0
- ROMI = (Валовая прибыль от рекламной кампании - затраты) / затраты. На практике часто пользуются упрощенной формулой ROMI рекламной кампании = Валовая прибыль от этой кампании / Затраты. При расчёте ROMI по сокращённой формуле точка окупаемости будет не в ROMI = 0%, а в ROMI = 100%. Такое значение ROMI показывает, что затраты окупились на 100%.
Опережающие метрики - показатели, изменение которых напрямую влияет на основную метрику бизнеса (приведены выше). Это м.б. CAC/LTV или конверсия или еще какая-то выявленная метрика (например количество связей на пользователя в социальной сети, которые оказывают влияние на удержание). Некоторые игроки на рынке создают целые экосистемы взаимосвязанных сервисов для удержания пользователей.
Иногда выбранная опережающая метрика может не коррелировать с главными бизнес метриками, например онлайн кинотеатр может выбрать как опережающую метрику количество просмотренных фильмов в первый месяц, и всячески стараться ее увеличивать промо акциями, а потом окажется что в по итогу месяца использования сервиса пользователи не начинают активнее оформлять подписки.
Декомпозировать метрики можно и нужно разными способами, например:
- выручка = средний чек покупки * кол-во покупок
- кол-во покупок = число привлеченных пользователей * конверсия
- выручка = число привлеченных пользователей * средний доход с одного привлеченного пользователя RPV (revenue per visitor, revenue per user)
- число привлеченных пользователей = затраты на привлечение / CAC
- декомпозировать основную метрику бизнеса несколькими способами
- проверить корреляцию основного показателя бизнеса и выбранных опережающих метрик
- изучить best practices отрасли
четверг, 30 мая 2024 г.
Some words about server container GTM
https://business.reddithelp.com/helpcenter/s/article/Set-Up-a-Web-Container
With a client-side GTM setup, you can track tags in your website's code. Plus, it makes it simpler to handle consent, so it’s easier to follow the rules and respect what users want with their data.However, potential limitations like browser-based privacy measures or ad-blocking extensions can impact data collection accuracy. Server-side tagging can potentially mitigate client-side measurement blocking.
While setting up a server GTM container improves the reliability and consistency of conversion metrics, the setup process can be a little complicated. We suggest reaching out to developers if you're unsure and giving the setup a good test run to ensure it’s working as best as it can.
Replace some href with GTM example
<script>
var chnglinks = document.querySelectorAll('a[href="/"]');
var currentUrl = window.location.href;
chnglinks.forEach(function(link){
link.setAttribute("href", currentUrl);
});
</script>
воскресенье, 12 мая 2024 г.
Git cложное слияние
http://uneex.org/LecturesCMC/PythonDevelopment2023/04_MergetoolCommandline
https://youtu.be/uVh3BEL1iyU
Вообще merge commit опасная штука, их плодить не надо т.к. могут быть конфликты, когда редактируется одно и то же место, которое правится вручную при merge commit
Сложное слияние
При merge и rebase могут возникать конфликты: в двух историях изменён один и тот же контекст:
- Создадим заведомо конфликтующий коммиты на двух ветках $ git init
Initialized empty Git repository in /home/george/example/.git/ $ git add . $ git commit -a -m "Initial commit" [master (root-commit) 8ab1be9] Initial commit 1 file changed, 63 insertions(+) create mode 100644 keyword.py $ git branch second $ git branch * master second $ grep -Ev "except|False" /usr/lib64/python3.10/keyword.py > keyword.py $ git diff diff --git a/keyword.py b/keyword.py index cc2b46b..9f30ffb 100644 --- a/keyword.py +++ b/keyword.py @@ -16,7 +16,6 @@ Alternatively, you can run 'make regen-keyword'. __all__ = ["iskeyword", "issoftkeyword", "kwlist", "softkwlist"] kwlist = [ - 'False', 'None', 'True', 'and', @@ -31,7 +30,6 @@ kwlist = [ 'del', 'elif', 'else', - 'except', 'finally', 'for', 'from', $ git commit -a -m "False+except" [master f1fbdeb] False+except 1 file changed, 2 deletions(-) $ git checkout second Switched to branch 'second' $ grep -Ev "finally|yield" /usr/lib64/python3.10/keyword.py > keyword.py $ git diff diff --git a/keyword.py b/keyword.py index cc2b46b..251bd3a 100644 --- a/keyword.py +++ b/keyword.py @@ -32,7 +32,6 @@ kwlist = [ 'elif', 'else', 'except', - 'finally', 'for', 'from', 'global', @@ -50,7 +49,6 @@ kwlist = [ 'try', 'while', 'with', - 'yield' ] softkwlist = [ $ git commit -a -m "finally+yield" [second 0804e39] finally+yield 1 file changed, 2 deletions(-) $ git log --graph --pretty=oneline --abbrev-commit --all * 0804e39 (HEAD -> second) finally+yield | * f1fbdeb (master) False+except |/ * 8ab1be9 Initial commit
Итак, у нас есть три состояния файла keyword.py:
8ab1be9 (общий предок)
f1fbdeb (на ветке master) — без False и except
0804e39 (на ветке second) — без finally и yield
Контекст изменений для except и finally пересекается
- ⇒ при слиянии будут конфликты
- Попробуем объединить:
1 $ git branch 2 master 3 * second 4 $ git merge master 5 Auto-merging keyword.py 6 CONFLICT (content): Merge conflict in keyword.py 7 Automatic merge failed; fix conflicts and then commit the result. 8 $ grep -EC3 "<<<<|====|>>>>" keyword.py 9 'del', 10 'elif', 11 'else', 12 <<<<<<< HEAD 13 'except', 14 ======= 15 'finally', 16 >>>>>>> master 17 'for', 18 'from', 19 'global', 20
Часть изменений применены (про False и про yield), потому что контексты не пересекались, часть (про except и finally) — нет.
- Файл содержит вставки вида:
<<<<<<< HEAD … ======= … >>>>>>> master
- Это т. н. 3-way diff по схеме «общий предок + конфликтующие изменения»
Все неконфликтующие изменения из обеих веток применены
HEAD — это содержимое текущей ветка, master — с чем мержим
было бы неплохо ещё знать, что раньше-то было, но тут не показывается
Все "<<<<<<<", "=======" и ">>>>>>>" надо убрать (и ненужные изменения тоже)
- Получится merge commit с изменением, неравным тому, что делалось на ветках
Если вас удовлетворяют изменения, проделанные на ветке master, можно просто git checkout master keyword.py,
но тогда пропадут все изменения, включая уже применённые.
Когда всё готово, делаем git commit -a:
2 …
3 $ git commit -a
4 [second 6568682] Merge branch 'master' into second
5 $ git log --graph --pretty=oneline --abbrev-commit --all
6 * 6568682 (HEAD -> second) Merge branch 'master' into second
7 |\
8 | * f1fbdeb (master) False+except
9 * | 0804e39 finally+yield
10 |/
11 * 8ab1be9 Initial commit
12
Если в историях больше одного коммита, merge надо продолжить с помощью git merge --continue
Если вы окончательно запутались (особенно в многокоммитных мержах), всё можно откатить назад с помощью git merge --abort
Mergetool
Инструмент, в котором есть
, имеет общее название «merge tool».
Список: git mergetool --tool-help
- Запускается вместо ручного исправления конфликтов
*vimdiff показывает четыре окна:
«Эта» ветка (LOCAL)
Общий предок (BASE)
«Та» ветка (REMOTE)
Файл с конфликтами (его и надо исправлять)
Могут остаться backup-файлы, их надо удалить git clean -f
- Другие утилиты позволяют «накликивать» изменения)
Пример на том же репозитории:
просто удалим merge-коммит (git reset --hard HEAD~)
вызовем git merge
вызовем git merge-tool --tool=gvimdiff (или meld)
:diffget RE " get from REMOTE :diffget BA " get from BASE :diffget LO " get from LOCAL
Для постоянного вызова правильного mergetool:
$ git config --global merge.tool ваш_mergetool