<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>Дмитрий</title><author><name>Дмитрий</name></author><id>https://teletype.in/atom/catdem</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/catdem?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@catdem?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=catdem"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/catdem?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-05-24T20:44:10.381Z</updated><entry><id>catdem:7LNeDtEOpQj</id><link rel="alternate" type="text/html" href="https://teletype.in/@catdem/7LNeDtEOpQj?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=catdem"></link><title>Как забирать данные из Google Sheets по API  через Python:</title><published>2025-10-07T21:48:17.906Z</published><updated>2025-10-08T22:40:25.002Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/9c/13/9c134305-5378-47fb-8bae-10118cb57d76.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/3a/e7/3ae73250-b2aa-4da0-a098-a603572561f8.png&quot;&gt;🔥 Google Sheets — это удобный инструмент для хранения и обмена данными, особенно когда нужно быстро поделиться таблицей с коллегами или клиентами. И может возникнуть потребность поработать с этими данными в Python или вовсе построить на них аналитику. Давайте представим, что мы хотим анализировать свои расходы, которые мы ведем в &quot;Гугл Табличках&quot;.

1) Первым шагом нам нужно зарегистрировать аккаунт gmail, думаю, что с этим трудностей не возникнет.
2) Далее мы переходим по ссылке и создаем проект. Если ссылка на работает, то сервис называется https://console.cloud.google.com/</summary><content type="html">
  &lt;p id=&quot;cTGK&quot;&gt;🔥 Google Sheets — это удобный инструмент для хранения и обмена данными, особенно когда нужно быстро поделиться таблицей с коллегами или клиентами. И может возникнуть потребность поработать с этими данными в Python или вовсе построить на них аналитику. Давайте представим, что мы хотим анализировать свои расходы, которые мы ведем в &amp;quot;Гугл Табличках&amp;quot;.&lt;br /&gt;&lt;br /&gt;1) Первым шагом нам нужно зарегистрировать аккаунт gmail, думаю, что с этим трудностей не возникнет.&lt;br /&gt;2) Далее мы переходим по &lt;a href=&quot;http://console.cloud.google.com&quot; target=&quot;_blank&quot;&gt;ссылке&lt;/a&gt; и создаем проект. Если ссылка на работает, то сервис называется https://console.cloud.google.com/&lt;/p&gt;
  &lt;figure id=&quot;fyqm&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a4/9a/a49a920b-a652-4958-8bb8-3e08fda3a022.png&quot; width=&quot;610&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;gM1v&quot; class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/4d/25/4d255367-c9da-42e2-84c5-5bcc1aa146a5.png&quot; width=&quot;601&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;4TqD&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/06/58/0658db6a-5a26-4534-bfad-819c2cccb6d4.png&quot; width=&quot;606&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;ckPG&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a2/68/a268170b-c6a2-4911-ac08-e4a05f2d9b09.png&quot; width=&quot;621&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;sLVV&quot;&gt;3) Теперь нам нужно включить API Google Sheets для нашего проекта - для этого делаем следующее:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
  &lt;figure id=&quot;Wlfs&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/2c/06/2c0669ca-eb04-43fe-974f-47032ebe1062.png&quot; width=&quot;645.0000000000001&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;pASq&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/70/c6/70c63786-266e-4f86-b13b-845067a8c303.png&quot; width=&quot;572.7457627118645&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;UEgF&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/7e/5a/7e5ae5a5-3093-47b5-8ad8-f21bca8a921c.png&quot; width=&quot;813&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;HDoK&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/3a/66/3a66d2f8-0d01-4edc-a668-07460bb953ff.png&quot; width=&quot;806&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;mEc4&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ab/80/ab80ba31-af48-4825-abdd-7f59618b945e.png&quot; width=&quot;814&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;Y3UE&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/7a/19/7a192579-bd6f-4b10-b3b5-59e1e560e6bc.png&quot; width=&quot;834&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;8MCB&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ac/b9/acb9a418-ddbc-445b-ab9b-d8516ade56cc.png&quot; width=&quot;506.5324858757062&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;VPLO&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/9d/11/9d111b03-048b-4f24-9f00-f62de6b29919.png&quot; width=&quot;621.6865148861647&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;1FIb&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a5/91/a59124a7-4d2e-47d9-9b3a-7d0d15a5ec6e.png&quot; width=&quot;641&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;8Qdx&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/68/25/68251819-e868-468d-97d2-36e1faa0d32b.png&quot; width=&quot;643&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;oSFf&quot;&gt;4) Теперь после того, как мы настроили аккаунт и получили json ключ, нужно добавить этот аккаунт в качестве редактора в наш google sheet:&lt;br /&gt;&lt;/p&gt;
  &lt;figure id=&quot;JtCm&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/7d/92/7d92deac-8235-4293-a91a-2c7e6e55bdfe.png&quot; width=&quot;792&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;XuVC&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/9d/9b/9d9be44e-f651-4d15-9e53-1caa77fe20fa.png&quot; width=&quot;362.7596899224807&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;lDiG&quot;&gt;5) Отлично, теперь можем забирать данные из google sheet в который мы добавили наш аккаунт, для этого используем библиотеки в python (Pandas и gspread):&lt;br /&gt;&lt;br /&gt;Ставим библиотеки через pip:&lt;br /&gt;&lt;code&gt;pip install gspread pandas&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;gqUW&quot;&gt;Ну и далее - мы забираем данные из google sheet&lt;br /&gt;&lt;/p&gt;
  &lt;figure id=&quot;a7zA&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/e6/e2/e6e2a5de-9a63-4e48-b359-f3e4b1efcb58.png&quot; width=&quot;851&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;bPYV&quot;&gt;Вод код, чтобы можно было скопировать:&lt;/p&gt;
  &lt;p id=&quot;Qzxb&quot;&gt;&lt;code&gt;import gspread&lt;br /&gt;import pandas as pd&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;oCH5&quot;&gt;&lt;code&gt;#Загрузка через API google_sheet&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;Azr5&quot;&gt;&lt;code&gt;gc = gspread.service_account(&amp;quot;путь до json файла с кредами&amp;quot;)&lt;br /&gt;sh = gc.open_by_url(&amp;quot;url&amp;quot;)&lt;br /&gt;worksheet_dash = sh.worksheet(&amp;quot;название_листа&amp;quot;)&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;Brad&quot;&gt;&lt;code&gt;df = pd.DataFrame(worksheet_dash.get_all_values())&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;YHPR&quot;&gt;&lt;code&gt;&lt;br /&gt;print(df)&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;sPSA&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;ZcPQ&quot;&gt;Итог:&lt;br /&gt;😎 Теперь вы можете автоматизировать импорт из Sheets в любой пайплайн — от простого в Jupyter до сложных ETL. Это сэкономит часы на рутине!&lt;/p&gt;

</content></entry><entry><id>catdem:RR1vNh5gKRI</id><link rel="alternate" type="text/html" href="https://teletype.in/@catdem/RR1vNh5gKRI?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=catdem"></link><title>Machine Learning в Бизнесе - как просто сделать Прогноз Временных Рядов при помощи Prophet</title><published>2025-08-17T19:24:49.097Z</published><updated>2025-08-17T19:24:49.097Z</updated><summary type="html">Сначала разберём, что такое временной ряд — это важно для понимания. Временной ряд (time series) — это последовательность данных, которые собираются через равные интервалы времени. Например, ежедневные продажи в магазине, ежемесячный трафик на сайте или ежечасные метрики revenue. Такие данные имеют паттерны: тренд (общий рост или спад со временем), сезонность (повторяющиеся циклы, как пики продаж по выходным) и случайные шумы (непредсказуемые колебания).</summary><content type="html">
  &lt;p id=&quot;0Bh7&quot;&gt;Сначала разберём, что такое временной ряд — это важно для понимания. Временной ряд (time series) — это последовательность данных, которые собираются через равные интервалы времени. Например, ежедневные продажи в магазине, ежемесячный трафик на сайте или ежечасные метрики revenue. Такие данные имеют паттерны: тренд (общий рост или спад со временем), сезонность (повторяющиеся циклы, как пики продаж по выходным) и случайные шумы (непредсказуемые колебания). &lt;/p&gt;
  &lt;p id=&quot;Itw2&quot;&gt;Давайте представим, что у вас есть задача спрогнозировать, сколько можно ожидать выручки (GMV) в следующем квартале — типичный запрос от бизнеса. С этим отлично справится инструмент Prophet. &lt;/p&gt;
  &lt;p id=&quot;A260&quot;&gt;1️⃣ Устанавливаем нужные библиотеки:&lt;br /&gt;&lt;code&gt;pip install pandas prophet holidays&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;LAfZ&quot;&gt;2️⃣ Создаём и подготавливаем данные:&lt;br /&gt;&lt;code&gt;import pandas as pd  # Импортируем pandas — это библиотека для работы с таблицами данных (DataFrames)&lt;br /&gt;import holidays  # Импортируем holidays — библиотека для получения дат праздников в разных странах&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;WQuG&quot;&gt;&lt;code&gt;# Создаём простой DataFrame с вымышленными данными: даты и значения KPI (y)&lt;br /&gt;data = {  # Это словарь — простой способ задать данные&lt;br /&gt;    &amp;#x27;ds&amp;#x27;: [&amp;#x27;2025-01-01&amp;#x27;, &amp;#x27;2025-01-02&amp;#x27;, &amp;#x27;2025-01-03&amp;#x27;, &amp;#x27;2025-01-04&amp;#x27;, &amp;#x27;2025-01-05&amp;#x27;],  # Колонка ds: даты в формате строки (потом преобразуем в настоящие даты)&lt;br /&gt;    &amp;#x27;y&amp;#x27;: [100, 120, 110, 130, 105]  # Колонка y: значения KPI, например, ежедневная сумма ставок&lt;br /&gt;}&lt;br /&gt;df_pred = pd.DataFrame(data)  # Создаём DataFrame из словаря — теперь df_pred это таблица с колонками ds и y&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;A13t&quot;&gt;&lt;code&gt;df_pred[&amp;#x27;ds&amp;#x27;] = pd.to_datetime(df_pred[&amp;#x27;ds&amp;#x27;])  # Преобразуем колонку ds в настоящий тип даты (datetime), чтобы Prophet мог с ней работать&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;PONp&quot;&gt;3️⃣ Добавляем праздники (для России):&lt;br /&gt;Prophet может учитывать праздники, чтобы прогноз был точнее. Мы выгружаем их автоматически и создаём таблицу.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;# Определяем диапазон лет на основе наших данных (от минимального года до максимального +1)&lt;br /&gt;years = range(df_pred[&amp;#x27;ds&amp;#x27;].min().year, df_pred[&amp;#x27;ds&amp;#x27;].max().year + 1)  # Здесь min() и max() находят самые раннюю и позднюю даты в ds&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;B5f2&quot;&gt;&lt;code&gt;ru_holidays = holidays.RU(years=years)  # Получаем словарь праздниками за эти годы (например, 1 января — &amp;#x27;New Year&amp;#x27;s Day&amp;#x27;)&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;K248&quot;&gt;&lt;code&gt;# Преобразуем словарь в DataFrame для Prophet: колонки ds (дата) и holiday (название праздника)&lt;br /&gt;df_holidays = pd.DataFrame(list(ru_holidays.items()), columns=[&amp;#x27;ds&amp;#x27;, &amp;#x27;holiday&amp;#x27;])  # list(ru_holidays.items()) превращает словарь в список пар (дата, название)&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;xIzi&quot;&gt;&lt;code&gt;df_holidays[&amp;#x27;ds&amp;#x27;] = pd.to_datetime(df_holidays[&amp;#x27;ds&amp;#x27;])  # Преобразуем ds в тип даты, как и в основных данных&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;Dk7t&quot;&gt;4️⃣ Создаём и обучаем модель Prophet:&lt;br /&gt;Важный момент: Prophet ожидает данные в конкретном формате — DataFrame обязательно должен иметь колонку &amp;#x27;ds&amp;#x27; (с датами в формате datetime) и колонку &amp;#x27;y&amp;#x27; (с числовыми значениями, которые вы прогнозируете). Если в ваших данных колонки названы иначе (например, &amp;#x27;date&amp;#x27; и &amp;#x27;value&amp;#x27;), переименуйте их перед обучением: df_pred = df_pred.rename(columns={&amp;#x27;date&amp;#x27;: &amp;#x27;ds&amp;#x27;, &amp;#x27;value&amp;#x27;: &amp;#x27;y&amp;#x27;}).&lt;/p&gt;
  &lt;p id=&quot;WQ42&quot;&gt;Теперь главная часть — модель. Мы укажем сезонность (еженедельную и годовую) и передадим праздники. Если праздники не нужны, просто напишите Prophet(..., holidays=None) — модель заработает без них, но может быть менее точной для данных с праздничными спадами.&lt;/p&gt;
  &lt;p id=&quot;g3I1&quot;&gt;5️⃣ Делаем прогноз на будущее:&lt;br /&gt;&lt;code&gt;prediction_days = 200  # Задаём, сколько дней вперёд прогнозировать (здесь 200 — можно изменить)&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;Sy0h&quot;&gt;&lt;code&gt;future = model.make_future_dataframe(periods=prediction_days)  # Создаём таблицу будущих дат: make_future_dataframe() берёт даты из df_pred и добавляет prediction_days новых&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;TW1J&quot;&gt;&lt;code&gt;forecast = model.predict(future)  # Делаем прогноз: predict() применяет модель к future и возвращает таблицу с предсказаниями (yhat — основное значение, плюс интервалы и компоненты)&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;O8by&quot;&gt;6️⃣ Анализируем результаты: Агрегация по кварталам и расчёт отклонения:&lt;br /&gt;Чтобы бизнесу было удобно смотреть (они любят квартальные отчёты), суммируем данные по кварталам и считаем процент отклонения (warn) от истинного значения — полезно, чтобы увидеть, насколько прогноз верно предсказывает. По хорошему, нужно из базового DataFrame взять рандомно 70% выборки и на ней обучить модель, а на остальных 30% проверить прогнозную модель и посчитать метрики отклонения, но это уже тема отдельного поста, можете почитать про это самостоятельно, сейчас обойдемся без этого.&lt;/p&gt;
  &lt;p id=&quot;tGDj&quot;&gt;&lt;code&gt;# Добавляем колонку с кварталом (например, 2025Q1) для группировки&lt;br /&gt;df_pred[&amp;#x27;quarter&amp;#x27;] = df_pred[&amp;#x27;ds&amp;#x27;].dt.to_period(&amp;#x27;Q&amp;#x27;)  # dt.to_period(&amp;#x27;Q&amp;#x27;) превращает дату в квартал (Q значит quarter)&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;sGe8&quot;&gt;&lt;code&gt;forecast[&amp;#x27;quarter&amp;#x27;] = forecast[&amp;#x27;ds&amp;#x27;].dt.to_period(&amp;#x27;Q&amp;#x27;)  # То же самое для прогноза&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;44Fn&quot;&gt;&lt;code&gt;# Суммируем реальные данные по кварталам&lt;br /&gt;real_quarters = df_pred.groupby(&amp;#x27;quarter&amp;#x27;)[&amp;#x27;y&amp;#x27;].sum().reset_index()  # groupby() группирует по quarter, sum() суммирует y, reset_index() делает из этого новую таблицу&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;iyZs&quot;&gt;&lt;code&gt;# Суммируем прогноз по кварталам&lt;br /&gt;forecast_quarters = forecast.groupby(&amp;#x27;quarter&amp;#x27;)[&amp;#x27;yhat&amp;#x27;].sum().reset_index()  # Аналогично, но для yhat (предсказанное значение)&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;W3fx&quot;&gt;&lt;code&gt;# Объединяем таблицы по кварталам (outer — чтобы включить все, даже если в одной нет данных)&lt;br /&gt;all_quarters = pd.merge(real_quarters, forecast_quarters, how=&amp;#x27;outer&amp;#x27;, on=&amp;#x27;quarter&amp;#x27;, suffixes=(&amp;#x27;_actual&amp;#x27;, &amp;#x27;_forecast&amp;#x27;))  # merge() соединяет, suffixes добавляют _actual и _forecast к колонкам&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;7hao&quot;&gt;&lt;code&gt;# Считаем отклонение в %: насколько прогноз (yhat) отличается от реала (y)&lt;br /&gt;all_quarters[&amp;#x27;warn&amp;#x27;] = ((all_quarters[&amp;#x27;yhat&amp;#x27;] / all_quarters[&amp;#x27;y&amp;#x27;]) - 1) * 100  # Формула: (прогноз / реал - 1) * 100 = процент изменения&lt;/code&gt;&lt;br /&gt;&lt;/p&gt;
  &lt;p id=&quot;1TUz&quot;&gt;Это базовый пример — в реальности добавьте больше данных для точности. Тестируйте модель на исторических данных: разделите df_pred на &amp;quot;обучение&amp;quot; и &amp;quot;тест&amp;quot;, чтобы проверить, насколько прогноз совпадает с реальностью.&lt;/p&gt;

</content></entry><entry><id>catdem:3IZ3S4kDvOR</id><link rel="alternate" type="text/html" href="https://teletype.in/@catdem/3IZ3S4kDvOR?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=catdem"></link><title>Как за 5 минут превратить CSV файл в полноценную базу данных через SQLite в DBeaver 🔥</title><published>2025-08-11T20:00:14.865Z</published><updated>2025-08-11T20:00:14.865Z</updated><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/13/99/13997624-8f6e-42a7-9ca5-e09209eab072.png&quot;&gt;💎 Представьте: у вас куча CSV файлов с данными, и вы хотите быстро выполнить анализ - выполнить между ними JOIN'ы или провести агрегацию GROUP BY. Давайте превратим эти CSV файлы в полноценную базу!

1️⃣ Создаём подключение к SQLite</summary><content type="html">
  &lt;p id=&quot;mNfZ&quot;&gt;💎 Представьте: у вас куча CSV файлов с данными, и вы хотите быстро выполнить анализ - выполнить между ними JOIN&amp;#x27;ы или провести агрегацию GROUP BY. Давайте превратим эти CSV файлы в полноценную базу!&lt;br /&gt;&lt;br /&gt;1️⃣ Создаём подключение к SQLite&lt;br /&gt;&lt;/p&gt;
  &lt;figure id=&quot;EDex&quot; class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/92/f4/92f469f9-a84b-4f55-9f2f-a9581077ce57.png&quot; width=&quot;801&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;wqxj&quot;&gt;2️⃣ Выбираем создать и указываем путь где будет храниться наша база данные и даем ей любое имя&lt;/p&gt;
  &lt;figure id=&quot;J6GS&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/75/57/7557f637-edae-459a-95bc-1752580ec9fb.png&quot; width=&quot;828&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;chsn&quot;&gt;3️⃣ Импортируем CSV файлы&lt;br /&gt;Нажмете по базе данных ПКМ (правой кнопкой мыши) и увидите импорт данных, далее там будет предложено выбрать csv файл и различные настройки. Советую самостоятельно по изучать этот функционал.&lt;/p&gt;
  &lt;figure id=&quot;Ed3F&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/11/98/1198fc40-5d1f-4af3-9d85-ac3237251ad4.png&quot; width=&quot;431&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;7csA&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;Nz3D&quot;&gt;4️⃣ Наслаждаемся полноценной поддержкой SQL для csv файлов:&lt;/p&gt;
  &lt;figure id=&quot;9Ccc&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/75/4c/754c240c-067d-4d0b-a9b0-1f2e36f0b407.png&quot; width=&quot;284&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;45SJ&quot;&gt;Итог:&lt;br /&gt;😎 Если эта инструкция вам помогла, то кидайте 🔥 или ❤️!&lt;br /&gt;&lt;br /&gt;❓ А вы используете SQLite для аналитики? Пишите в комментариях, какие ещё способы работы с CSV хотели бы узнать!&lt;/p&gt;

</content></entry><entry><id>catdem:-GLmMSFi9C8</id><link rel="alternate" type="text/html" href="https://teletype.in/@catdem/-GLmMSFi9C8?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=catdem"></link><title>Эффективная база знаний для обучения и работы: мой опыт с Obsidian</title><published>2025-07-05T14:19:09.024Z</published><updated>2025-07-05T14:19:09.024Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/93/87/938775a3-56ac-4a39-9f49-694e8de064dc.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/92/0c/920c8dfe-6a7f-4a09-9888-88e7e4bf977d.png&quot;&gt;Ты нашёл классный материал, статью, видео или у тебя возникла идея — и ты говоришь себе: «Запомню», «Вернусь потом», «Потом запишу»... Но проходит время, и всё теряется. Где это было? В каком чате? В какой заметке телефона? Может, в Google Docs? Или в Telegram?</summary><content type="html">
  &lt;h2 id=&quot;Ubcq&quot;&gt;&lt;strong&gt;1) Думаю, у каждого была такая ситуация:&lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;KNfk&quot;&gt;Ты нашёл классный материал, статью, видео или у тебя возникла идея — и ты говоришь себе: &lt;em&gt;«Запомню»&lt;/em&gt;, &lt;em&gt;«Вернусь потом»&lt;/em&gt;, &lt;em&gt;«Потом запишу»&lt;/em&gt;... Но проходит время, и всё теряется. Где это было? В каком чате? В какой заметке телефона? Может, в Google Docs? Или в Telegram?&lt;/p&gt;
  &lt;p id=&quot;sOfd&quot;&gt;Вот именно для этого и нужна &lt;strong&gt;база знаний&lt;/strong&gt; — &lt;strong&gt;единое место&lt;/strong&gt;, где ты структурируешь, сохраняешь и возвращаешься к нужной информации. И я хочу рассказать, как именно я это делаю с помощью приложения &lt;strong&gt;Obsidian&lt;/strong&gt;.&lt;/p&gt;
  &lt;p id=&quot;pVvB&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;YPzf&quot;&gt;2) Как я веду базу знаний:&lt;/h2&gt;
  &lt;p id=&quot;sPLb&quot;&gt;У меня есть простая система. В течение дня, когда у меня возникает идея, мысль или просто задача «на подумать», я быстро кидаю её &lt;strong&gt;себе в личные сообщения&lt;/strong&gt; в Telegram. Это удобно, потому что это всегда под рукой.&lt;/p&gt;
  &lt;p id=&quot;jz7H&quot;&gt;А когда я сажусь за компьютер, я открываю &lt;strong&gt;Obsidian&lt;/strong&gt; и разбираю эти сообщения. Записываю все в общий backlog (пример на фото):&lt;/p&gt;
  &lt;figure id=&quot;GHuf&quot; class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/e1/d7/e1d73366-57b1-4364-b201-f0f88bd13dd6.png&quot; width=&quot;473&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;hTHP&quot;&gt;Таким образом, я не перегружаю голову. Всё, что меня заинтересовало, теперь записано и системно сохранено в одном месте.&lt;/p&gt;
  &lt;p id=&quot;0wlD&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;ReYO&quot;&gt;3) Применение Obsidian в обучении:&lt;/h2&gt;
  &lt;p id=&quot;OJtA&quot;&gt;Отдельный мощный кейс — это &lt;strong&gt;изучение курсов, книг, лекций&lt;/strong&gt;. В Obsidian можно использовать &lt;strong&gt;заголовки, ссылки, оглавление&lt;/strong&gt;, разбивать одну тему на подтемы и легко между ними переключаться. Всё благодаря &lt;strong&gt;Markdown-разметке&lt;/strong&gt;, которая делает структуру чистой и управляемой.&lt;/p&gt;
  &lt;p id=&quot;UYA0&quot;&gt;Я, например, создаю отдельную заметку на каждый курс/тему/и т.п. и делаю подзаметки по каждому модулю.&lt;/p&gt;
  &lt;p id=&quot;NfFf&quot;&gt;Например:&lt;br /&gt;&lt;/p&gt;
  &lt;figure id=&quot;p0RD&quot; class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/0f/c6/0fc6e771-9185-4c87-be9a-b1d96ecb0238.png&quot; width=&quot;709.5&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;pHWN&quot;&gt;&lt;/h2&gt;
  &lt;h2 id=&quot;avlJ&quot;&gt;4) Продвинутый obsidian:&lt;/h2&gt;
  &lt;p id=&quot;53ND&quot;&gt;Да, в Obsidian есть &lt;strong&gt;граф знаний&lt;/strong&gt; — визуальная схема, где ты можешь увидеть, как все темы и заметки связаны между собой. Можно делать &lt;strong&gt;двусторонние ссылки&lt;/strong&gt;, видеть, какие темы ты пересекаешь чаще всего, и даже строить на этом свои выводы. Это уже следующий уровень.&lt;/p&gt;
  &lt;p id=&quot;19ZK&quot;&gt;Но честно? Для начала — &lt;strong&gt;этого всего не нужно&lt;/strong&gt;. Нам нужно &lt;strong&gt;просто навести порядок в голове и информации&lt;/strong&gt;. Начни с одной заметки. С одной идеи. С одной темы.&lt;/p&gt;
  &lt;p id=&quot;Ma6I&quot;&gt;А если захочешь углубиться, для этого есть &lt;strong&gt;сотни гайд-видео&lt;/strong&gt; на YouTube. Я рекомендую вот это видео (от Автора - &amp;quot;Диджитализируй!&amp;quot;), которое покрывает 90% базовых и нужных сценариев:&lt;/p&gt;
  &lt;figure id=&quot;lKCO&quot; class=&quot;m_column&quot;&gt;
    &lt;iframe src=&quot;https://rutube.ru/play/embed/0e9e5f60f20f0b77cebe071dbde6e3de/&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;tdjf&quot;&gt;5) Заключение:&lt;/h2&gt;
  &lt;p id=&quot;51Cr&quot;&gt;Если ты чувствуешь, что &lt;strong&gt;тонешь в потоке идей, ссылок, заметок и мыслей&lt;/strong&gt;, и всё теряется — попробуй Obsidian. Это не просто редактор. Это привычка &lt;strong&gt;вести порядок в голове и вокруг себя&lt;/strong&gt;.&lt;/p&gt;
  &lt;p id=&quot;YBgh&quot;&gt;Начни с одного файла. А потом увидишь, как всё начнёт складываться.&lt;/p&gt;

</content></entry><entry><id>catdem:t5yN4wQJchU</id><link rel="alternate" type="text/html" href="https://teletype.in/@catdem/t5yN4wQJchU?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=catdem"></link><title>Telegram-бот, который работает, пока ты отдыхаешь</title><published>2025-06-28T20:51:51.146Z</published><updated>2025-06-28T20:51:51.146Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img3.teletype.in/files/69/1f/691f3b6d-b6f5-4765-b626-1f299e902539.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/a3/59/a359c17c-ad0c-492e-a06c-6808277d9ec9.png&quot;&gt;Как аналитик, я часто запускаю тяжёлые SQL-скрипты. Некоторые из них выполняются долго, могут упасть, а иногда — наоборот, неожиданно быстро отрабатывают. Раньше я просто сидел и смотрел в экран. Или забывал проверить вовремя, теряя время.</summary><content type="html">
  &lt;p id=&quot;HJER&quot;&gt;Как аналитик, я часто запускаю тяжёлые SQL-скрипты. Некоторые из них выполняются долго, могут упасть, а иногда — наоборот, неожиданно быстро отрабатывают. Раньше я просто сидел и смотрел в экран. Или забывал проверить вовремя, теряя время.&lt;/p&gt;
  &lt;p id=&quot;q6LQ&quot;&gt;Теперь всё проще — я настроил Telegram-бота, который сам шлёт мне сообщение, когда скрипт завершился. Или если вдруг он упал. Даже если я в это время на встрече, завтракаю или не у компа — уведомление приходит прямо на часы, телефон, куда угодно.&lt;/p&gt;
  &lt;p id=&quot;i8aW&quot;&gt;Это экономит кучу времени и реально повышает продуктивность: не нужно постоянно следить вручную, бот сам говорит, когда можно брать данные и работать дальше. А если что-то пошло не так — я узнаю об этом сразу.&lt;/p&gt;
  &lt;p id=&quot;x8by&quot;&gt;И всё это делается за 5 минут на Python. Сейчас покажу, как.&lt;/p&gt;
  &lt;p id=&quot;Sfy3&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;eGQX&quot;&gt;Шаг №1: Создаём Telegram-бота:&lt;/h2&gt;
  &lt;p id=&quot;CiW3&quot;&gt;1) Открываем Telegram и пишем в поиске &lt;strong&gt;@BotFather&lt;/strong&gt; — это официальный бот для управления другими ботами.&lt;/p&gt;
  &lt;p id=&quot;Sfcx&quot;&gt;2) Отправляем команду: /newbot&lt;/p&gt;
  &lt;p id=&quot;lbh3&quot;&gt;3) Придумываем:&lt;/p&gt;
  &lt;ul id=&quot;7bLu&quot;&gt;
    &lt;li id=&quot;D8Yb&quot;&gt;Имя для бота: Можно любое (это имя, которое будет отображаться в чатах)&lt;/li&gt;
    &lt;li id=&quot;b2Wg&quot;&gt; Username (обязательно должно заканчивается на &lt;code&gt;bot&lt;/code&gt;, например: s&lt;code&gt;sos_alert_bot&lt;/code&gt;)&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;GqaU&quot;&gt;4) Получаем в ответ &lt;strong&gt;токен&lt;/strong&gt; — это строка вида: &amp;quot;9107281927:GvGWxBBiGTbPBvPubgWW-tBGTR-pWnuT-y1&amp;quot; (копируем ее без кавычек)&lt;/p&gt;
  &lt;p id=&quot;yGtf&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;eNI5&quot;&gt;Шаг №2: Переходим в python:&lt;/h2&gt;
  &lt;p id=&quot;T9cn&quot;&gt;Теперь нам нужно узнать свой chat_id, чтобы бот знал, куда писать&lt;/p&gt;
  &lt;p id=&quot;1oVd&quot;&gt;1) Устанавливаем библиотеку requests, если не установлена - для этого выполняем следующий код:&lt;/p&gt;
  &lt;pre id=&quot;YsyM&quot;&gt;pip install requests&lt;/pre&gt;
  &lt;p id=&quot;eayx&quot;&gt;2) Пишем любое сообщение в чат боту (это нужно чтобы в следующем пункте мы нашли свое сообщение). &lt;/p&gt;
  &lt;p id=&quot;v60D&quot;&gt;3) Пишем и выполняем следующий код:&lt;/p&gt;
  &lt;p id=&quot;S0cv&quot;&gt;Заполняем переменные своими значениями и выполняем код&lt;/p&gt;
  &lt;pre id=&quot;bMk9&quot;&gt;import requests

TOKEN = &amp;#x27;ВАШ_ТОКЕН_БОТА&amp;#x27; # здесь ваш token от бота из пункта 1.4
url = f&amp;#x27;https://api.telegram.org/bot{TOKEN}/getUpdates&amp;#x27;

response = requests.get(url).json()
print(response)&lt;/pre&gt;
  &lt;p id=&quot;EWpz&quot;&gt;4) В ответе ищем кусок вида:&lt;/p&gt;
  &lt;pre id=&quot;WdAK&quot;&gt;&amp;#x27;chat&amp;#x27;: {&amp;#x27;id&amp;#x27;: 4815162342, ...}&lt;/pre&gt;
  &lt;p id=&quot;kmna&quot;&gt;копируем этот id&lt;/p&gt;
  &lt;p id=&quot;V3xM&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;pSjZ&quot;&gt;Шаг №3: Отправляем себе любое сообщение:&lt;/h2&gt;
  &lt;p id=&quot;Zd8u&quot;&gt;Заполняем переменные своими значениями и выполняем код&lt;/p&gt;
  &lt;pre id=&quot;pUHw&quot;&gt;bot_token = &amp;#x27;ВАШ_ТОКЕН_БОТА&amp;#x27; # здесь ваш token от бота из пункта 1.4
chat_id = &amp;#x27;ВАШ_CHAT_ID&amp;#x27; # здесь ваш chat_id из пункта 2.4
message = &amp;#x27;✅ Скрипт завершён, можно работать!&amp;#x27;

url = f&amp;#x27;https://api.telegram.org/bot{bot_token}/sendMessage&amp;#x27;

payload = {
    &amp;#x27;chat_id&amp;#x27;: chat_id, 
    &amp;#x27;text&amp;#x27;: message
}

requests.post(url, data=payload)&lt;/pre&gt;
  &lt;p id=&quot;VpbD&quot;&gt;Поздравляю, если вы все сделали правильно, на этом моменте вы должны были получить свое первое сообщение от бота.&lt;/p&gt;

</content></entry></feed>