Logo
TGCATALOG
Catalog Collections Blog
Data analysis - DA SQL

Data analysis - DA SQL

Data analysis: SQL, Python.

No ratings
582
29.10.2026
582
29.10.2026
No ratings
582
29.10.2026
Safe redirect via bot
О канале

Data analysis: SQL, Python.

Подписчиков 1,700
Тематика Technology
Язык English
Ссылка t.me/business_stats

We also recommend

Kekaton AI | Voiceover and voice clone
Kekaton AI | Voiceover and voice clone
Bot

AI bot for text-to-speech and voice cloning in Telegram. Create audio using neural network quickly and easily.

Description

About data analysis: databases, SQL, Python and more for analysts.

Latest posts

Data analysis - DA SQL
Data analysis - DA SQL
🔒Открыть пост
и посмотреть медиа
Нечёткий поиск и дедупликация записей на Python В DWH бывают ситуации, когда разные записи означают одно и то же. Например, "ООО Ромашка", "ООО Ромашкa" (с лат. 'a') и "Ромашка ООО" могут быть 3 разными клиентами в витрине, но 1 реальным бизнесом. Таких расхождений может быть много. Вручную перебирать это долго и неэффективно, т.к. есть риск что-то пропустить. На помощь приходит кластеризация дубликатов при помощи косинусного сходства. Суть метода в следующем: 1️⃣Данные нужно подготовить, т.е. привести к одному формату: убрать лишние пробелы и переносы, сокращения, привести текст к нижнему регистру. Нужно это для облегчения работы алгоритма и для снижения риска лишних ошибок. Делается это просто и быстро: import pandas as pd import numpy as np from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.metrics.pairwise import cosine_similarity #ДАННЫЕ + DataFrame df['name1'] = df['name'].str.lower().str.strip().str.replace(r'\s+', ' ', regex=True) 2️⃣Затем делается блокировка - т.е. выбирается сильный атрибут (ИНН, ОГРН, номер телефона) и вокруг него строится кластеризация, где ищутся названия с опечатками. Но стоит сделать оговорку. Во-первых, если нужно сделать JOIN, то можно сделать это по ИНН или другому сильному атрибуту, а не по битым названиям. Во-вторых, если такой JOIN невозможен или не нужен, то можно в каком-нибудь полу-автоматическом режиме заменить названия, фильтруя их по логике SELECT name FROM table WHERE inn = XXX Представить на практике ситуации, где невозможно ни то, ни другое, довольно сложно. Поэтому логичнее усложнить задачу и представить, что твердого атрибута нет. Например, такое возможно в клиентских таблицах, где клиенты - физ лица. В таких таблицах часто единственный идентификатор помимо id - это ФИО человека, и всяких ИНН там может и не быть. 🟠Но если в таблице много строк, то блокировка все равно нужна, т.к. она делит расчет на блоки. Если же в лоб сравнивать каждую запись между собой, то скорее всего такая операция никогда не будет завершена. Если нет ни одного сильного атрибута, то универсальный способ - это блокировать по первым буквам ФИО. Если есть хоть какая-то другая информация, то можно использовать её: год рождения, последние цифры номера телефона... И еще в случае с ФИО важно отсортировать слова по алфавиту: df['name_sorted'] = df['name1'].apply(lambda x: ' '.join(sorted(x.split()))) df['block_key'] = df['name_sorted'].str[0] print(df[['name', 'name_sorted', 'block_key']].to_string(index=False)) 3️⃣И, наконец, построение самой кластеризации: all_pairs = [] threshold = 0.9 for block_key, group in df.groupby('block_key'): if len(group) < 2: continue vectorizer = TfidfVectorizer(analyzer='char_wb', ngram_range=(2, 4)) tfidf_matrix = vectorizer.fit_transform(group['name_sorted']) cosine_sim = cosine_similarity(tfidf_matrix) rows, cols = np.where(cosine_sim > threshold) pairs = [ (r, c, round(cosine_sim[r, c], 3)) for r, c in zip(rows, cols) if r < c ] for r, c, score in pairs: all_pairs.append({ 'id_1': group.iloc[r]['client_id'], 'id_2': group.iloc[c]['client_id'], 'score': score }) df_pairs = pd.DataFrame(all_pairs) df_pairs['name_1'] = df_pairs['id_1'].map(df.set_index('client_id')['name']) df_pairs['name_2'] = df_pairs['id_2'].map(df.set_index('client_id')['name']) print(df_pairs[['name_1', 'name_2', 'score']].to_string(index=False)) Задается порог косинусного сходства (threshold) от 0 до 1. 1 - выводятся идентичные данные. 0 - выводятся все данные. Потом данные группируются по признаку блокировки. Затем для блоков текст режется на n-граммы (кусочки по 2-4 буквы). Это нужно для того, чтобы находить опечатки. Т.к. там, где есть опечатки, только 1-2 n-грамма будут различаться, что в итоге даст высокий threshold и позволит обнаружить дубликаты. Ну а дальше текст превращается в вектора, между ними ищется косинусное сходство и выводится в виде матрицы. И фильтруются те пары, которые проходят заданный нами порог threshold.
Data analysis - DA SQL
FAQ

Open Data analysis - DA SQL in Telegram and press the Start button. No separate registration is required.

Yes. The service is designed to be straightforward: open the resource, follow the on-screen instructions and start using it.

No. You can use Data analysis - DA SQL directly in Telegram unless the resource description says otherwise.

Access depends on the resource. Check the current information in Telegram after opening Data analysis - DA SQL.

The exact features depend on the resource. Open Data analysis - DA SQL to see its current functions, content and access conditions.
Subscriber dynamics
+-0.5% last 30 days
Current
1,700
Month ago
1,709
Average growth
+0 / day
Updated
11 hours ago

Reviews for channel Data analysis - DA SQL

Log in to leave a review

Only registered users can share their opinion.

No reviews yet

Be the first to share your impression of this resource!

Similar resources

Loading
Switch to Light Theme
Home Catalog Collections Blog Login