<?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><subtitle>Кручу-верчу BI</subtitle><author><name>Сережа, епт, где дашборд?!</name></author><id>https://teletype.in/atom/python-pro</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/python-pro?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@python-pro?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=python-pro"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/python-pro?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-04-13T15:41:27.586Z</updated><entry><id>python-pro:pyodbc-sqlalchemy-mysql-ntlm-auth-python-code</id><link rel="alternate" type="text/html" href="https://teletype.in/@python-pro/pyodbc-sqlalchemy-mysql-ntlm-auth-python-code?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=python-pro"></link><title>Python: подключение к MS SQL с использованием библиотеки SQLAlchemy и аутентификации NTLM</title><published>2023-12-29T14:28:17.422Z</published><updated>2023-12-29T14:28:17.422Z</updated><summary type="html">Для подключения к MS SQL с использованием библиотеки SQLAlchemy и аутентификации NTLM, вы можете воспользоваться библиотекой pyodbc вместе с sqlalchemy и pyodbc:</summary><content type="html">
  &lt;p id=&quot;OL1p&quot;&gt;Для подключения к MS SQL с использованием библиотеки SQLAlchemy и аутентификации NTLM, вы можете воспользоваться библиотекой &lt;code&gt;pyodbc&lt;/code&gt; вместе с &lt;code&gt;sqlalchemy&lt;/code&gt; и &lt;code&gt;pyodbc&lt;/code&gt;:&lt;/p&gt;
  &lt;pre id=&quot;rpNx&quot;&gt;from sqlalchemy import create_engine
from sqlalchemy import MetaData, Table

# Укажите свои параметры подключения
server = &amp;#x27;your_server_name&amp;#x27;
database = &amp;#x27;your_database_name&amp;#x27;
username = &amp;#x27;your_username&amp;#x27;
password = &amp;#x27;your_password&amp;#x27;

# Создайте строку подключения с использованием NTLM аутентификации
connection_string = f&amp;#x27;mssql+pyodbc://{username}:{password}@{server}/{database}?driver=ODBC+Driver+17+for+SQL+Server&amp;amp;authentication=NTLM&amp;#x27;

# Создайте движок SQLAlchemy
engine = create_engine(connection_string, echo=True)

# Создайте метаданные SQLAlchemy
metadata = MetaData()

# Пример выполнения SQL-запроса
# Замените &amp;#x27;your_table_name&amp;#x27; на имя вашей таблицы
your_table = Table(&amp;#x27;your_table_name&amp;#x27;, metadata, autoload_with=engine)

# Ваш SQL-запрос
query = your_table.select()

# Выполнение запроса
result = engine.execute(query)

# Вывод результатов
for row in result:
    print(row)

# Закрытие соединения
engine.dispose()&lt;/pre&gt;
  &lt;p id=&quot;HY3V&quot;&gt;Обратите внимание, что вы должны заменить &lt;code&gt;&amp;#x27;your_server_name&amp;#x27;&lt;/code&gt;, &lt;code&gt;&amp;#x27;your_database_name&amp;#x27;&lt;/code&gt;, &lt;code&gt;&amp;#x27;your_username&amp;#x27;&lt;/code&gt;, и &lt;code&gt;&amp;#x27;your_password&amp;#x27;&lt;/code&gt; на свои реальные данные подключения. Также, убедитесь, что у вас установлены библиотеки &lt;code&gt;pyodbc&lt;/code&gt;, &lt;code&gt;sqlalchemy&lt;/code&gt; и &lt;code&gt;pandas&lt;/code&gt;:&lt;/p&gt;
  &lt;pre id=&quot;gkrp&quot;&gt;pip install pyodbc sqlalchemy pandas&lt;/pre&gt;
  &lt;h2 id=&quot;ZPaT&quot;&gt;Аунтентификация без логина и пароля&lt;/h2&gt;
  &lt;p id=&quot;SqMo&quot;&gt;Если вы хотите использовать NTLM аутентификацию без явного указания логина и пароля, вы можете использовать Windows Integrated Authentication. В этом случае, библиотека &lt;code&gt;pyodbc&lt;/code&gt; будет использовать учетные данные текущего пользователя Windows. Вот обновленный код:&lt;/p&gt;
  &lt;pre id=&quot;dXxK&quot;&gt;from sqlalchemy import create_engine
from sqlalchemy import MetaData, Table

# Укажите свои параметры подключения
server = &amp;#x27;your_server_name&amp;#x27;
database = &amp;#x27;your_database_name&amp;#x27;

# Создайте строку подключения с использованием Windows Integrated Authentication (NTLM)
connection_string = f&amp;#x27;mssql+pyodbc://{server}/{database}?driver=ODBC+Driver+17+for+SQL+Server&amp;amp;authentication=NTLM&amp;#x27;

# Создайте движок SQLAlchemy
engine = create_engine(connection_string, echo=True)

# Создайте метаданные SQLAlchemy
metadata = MetaData()

# Пример выполнения SQL-запроса
# Замените &amp;#x27;your_table_name&amp;#x27; на имя вашей таблицы
your_table = Table(&amp;#x27;your_table_name&amp;#x27;, metadata, autoload_with=engine)

# Ваш SQL-запрос
query = your_table.select()

# Выполнение запроса
result = engine.execute(query)

# Вывод результатов
for row in result:
    print(row)

# Закрытие соединения
engine.dispose()&lt;/pre&gt;
  &lt;p id=&quot;FdZt&quot;&gt;В этом коде логин и пароль не указаны явно в строке подключения. Вместо этого используется Windows Integrated Authentication (NTLM), и библиотека &lt;code&gt;pyodbc&lt;/code&gt; использует учетные данные текущего пользователя Windows для аутентификации. Пожалуйста, замените &lt;code&gt;&amp;#x27;your_server_name&amp;#x27;&lt;/code&gt;, &lt;code&gt;&amp;#x27;your_database_name&amp;#x27;&lt;/code&gt;, и &lt;code&gt;&amp;#x27;your_table_name&amp;#x27;&lt;/code&gt; на свои реальные данные.&lt;/p&gt;

</content></entry><entry><id>python-pro:python-read-data-from-sql-with-chunksize-parquet</id><link rel="alternate" type="text/html" href="https://teletype.in/@python-pro/python-read-data-from-sql-with-chunksize-parquet?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=python-pro"></link><title>Как при помощи Python читать таблицу из MS SQL с помощью chunksize</title><published>2023-12-29T13:27:49.247Z</published><updated>2023-12-29T13:27:49.247Z</updated><summary type="html">Как при помощи Python читать таблицу из MS SQL состоящую из 20 миллионов строк данных не полностью за один запрос, а с помощью chunksize и писать output в один файл parquet.</summary><content type="html">
  &lt;blockquote id=&quot;Cndd&quot;&gt;&lt;em&gt;Как при помощи Python читать таблицу из MS SQL состоящую из 20 миллионов строк данных не полностью за один запрос, а с помощью chunksize и писать output в один файл parquet.&lt;/em&gt;&lt;/blockquote&gt;
  &lt;p id=&quot;tlgI&quot;&gt;Для выполнения этой задачи вы можете использовать библиотеки &lt;code&gt;pandas&lt;/code&gt; для работы с данными и &lt;code&gt;pyodbc&lt;/code&gt; для подключения к базе данных MS SQL. Вот пример кода, который демонстрирует, как это можно сделать:&lt;/p&gt;
  &lt;p id=&quot;VLrZ&quot;&gt;Установите необходимые библиотеки:&lt;/p&gt;
  &lt;pre id=&quot;QjX2&quot;&gt;pip install pandas pyodbc pyarrow&lt;/pre&gt;
  &lt;p id=&quot;3a7Z&quot;&gt;Импортируйте библиотеки в вашем скрипте:&lt;/p&gt;
  &lt;pre id=&quot;ZRKm&quot;&gt;import pandas as pd
import pyodbc&lt;/pre&gt;
  &lt;p id=&quot;A2ev&quot;&gt;Установите параметры подключения к вашей базе данных MS SQL:&lt;/p&gt;
  &lt;pre id=&quot;WIX6&quot;&gt;server = &amp;#x27;your_server_name&amp;#x27;
database = &amp;#x27;your_database_name&amp;#x27;
username = &amp;#x27;your_username&amp;#x27;
password = &amp;#x27;your_password&amp;#x27;&lt;/pre&gt;
  &lt;p id=&quot;CZAE&quot;&gt;Установите параметры запроса:&lt;/p&gt;
  &lt;pre id=&quot;4e03&quot;&gt;table_name = &amp;#x27;your_table_name&amp;#x27;
chunksize = 10000  # Размер блока (chunk) для пошагового чтения данных&lt;/pre&gt;
  &lt;p id=&quot;KEir&quot;&gt;Создайте подключение к базе данных и используйте &lt;code&gt;pd.read_sql&lt;/code&gt; с параметром &lt;code&gt;chunksize&lt;/code&gt; для пошагового чтения данных:&lt;/p&gt;
  &lt;pre id=&quot;jcB7&quot;&gt;connection_string = f&amp;#x27;DRIVER={{SQL Server}};SERVER={server};DATABASE={database};UID={username};PWD={password}&amp;#x27;
conn = pyodbc.connect(connection_string)

query = f&amp;#x27;SELECT * FROM {table_name}&amp;#x27;
chunks = pd.read_sql(query, conn, chunksize=chunksize)&lt;/pre&gt;
  &lt;p id=&quot;ByTy&quot;&gt;Используйте цикл для пошаговой обработки и записи данных в файл parquet:&lt;/p&gt;
  &lt;pre id=&quot;fjJD&quot;&gt;output_filename = &amp;#x27;output.parquet&amp;#x27;

for i, chunk in enumerate(chunks):
    if i == 0:
        chunk.to_parquet(output_filename, index=False, engine=&amp;#x27;pyarrow&amp;#x27;)
    else:
        chunk.to_parquet(output_filename, index=False, engine=&amp;#x27;pyarrow&amp;#x27;, mode=&amp;#x27;a&amp;#x27;)&lt;/pre&gt;

</content></entry><entry><id>python-pro:pandas-types-of-data-loading-from-mssql-parquet</id><link rel="alternate" type="text/html" href="https://teletype.in/@python-pro/pandas-types-of-data-loading-from-mssql-parquet?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=python-pro"></link><title>Преобразование типов данных при загрузке данных из MS SQL в Pandas DataFrame и сохранение в Parquet</title><published>2023-12-29T12:31:18.085Z</published><updated>2023-12-29T13:02:30.792Z</updated><summary type="html">Pandas - мощная библиотека для анализа данных в языке программирования Python. Одной из её ключевых особенностей является работа с DataFrame, табличной структурой данных, которая предоставляет удобный интерфейс для манипуляций с данными. В этой статье мы рассмотрим, как произвести преобразование типов данных при загрузке данных из Microsoft SQL Server в Pandas DataFrame и как сохранить данные в формате Parquet с учетом корректных типов данных.</summary><content type="html">
  &lt;p id=&quot;HCyV&quot;&gt;Pandas - мощная библиотека для анализа данных в языке программирования Python. Одной из её ключевых особенностей является работа с DataFrame, табличной структурой данных, которая предоставляет удобный интерфейс для манипуляций с данными. В этой статье мы рассмотрим, как произвести преобразование типов данных при загрузке данных из Microsoft SQL Server в Pandas DataFrame и как сохранить данные в формате Parquet с учетом корректных типов данных.&lt;/p&gt;
  &lt;h2 id=&quot;ECzR&quot;&gt;Шаг 1: Установка библиотек&lt;/h2&gt;
  &lt;p id=&quot;jcBd&quot;&gt;Перед началом работы убедитесь, что у вас установлены необходимые библиотеки. Если их нет, установите их с помощью следующих команд:&lt;/p&gt;
  &lt;pre id=&quot;IoEo&quot;&gt;pip install pandas
pip install pyodbc
pip install fastparquet&lt;/pre&gt;
  &lt;h2 id=&quot;WyZJ&quot;&gt;Шаг 2: Подключение к MS SQL и загрузка данных в Pandas DataFrame&lt;/h2&gt;
  &lt;p id=&quot;kd63&quot;&gt;Для начала подключимся к базе данных MS SQL Server с использованием библиотеки &lt;code&gt;pyodbc&lt;/code&gt;:&lt;/p&gt;
  &lt;pre id=&quot;KBUt&quot;&gt;import pandas as pd
import pyodbc

# Задайте свои параметры подключения
server = &amp;#x27;your_server&amp;#x27;
database = &amp;#x27;your_database&amp;#x27;
username = &amp;#x27;your_username&amp;#x27;
password = &amp;#x27;your_password&amp;#x27;

# Строка подключения
connection_string = f&amp;#x27;DRIVER=ODBC Driver 17 for SQL Server;SERVER={server};DATABASE={database};UID={username};PWD={password}&amp;#x27;

# Установка соединения
conn = pyodbc.connect(connection_string)

# SQL-запрос
sql_query = &amp;#x27;SELECT * FROM your_table&amp;#x27;

# Загрузка данных в DataFrame
df = pd.read_sql(sql_query, conn)&lt;/pre&gt;
  &lt;h2 id=&quot;2IP6&quot;&gt;Шаг 3: Преобразование типов данных&lt;/h2&gt;
  &lt;p id=&quot;kGaC&quot;&gt;После загрузки данных из базы данных MS SQL в DataFrame необходимо убедиться, что типы данных корректны. Для этого воспользуемся методом &lt;code&gt;astype()&lt;/code&gt;:&lt;/p&gt;
  &lt;pre id=&quot;TkcU&quot;&gt;# Преобразование типов данных
df[&amp;#x27;DatetimeColumn&amp;#x27;] = pd.to_datetime(df[&amp;#x27;DatetimeColumn&amp;#x27;], format=&amp;#x27;%Y-%m-%d %H:%M:%S&amp;#x27;, errors=&amp;#x27;coerce&amp;#x27;)
df[&amp;#x27;DateColumn&amp;#x27;] = pd.to_datetime(df[&amp;#x27;DateColumn&amp;#x27;], format=&amp;#x27;%Y-%m-%d&amp;#x27;, errors=&amp;#x27;coerce&amp;#x27;).dt.date
df[&amp;#x27;TimeColumn&amp;#x27;] = pd.to_datetime(df[&amp;#x27;TimeColumn&amp;#x27;], format=&amp;#x27;%H:%M:%S&amp;#x27;, errors=&amp;#x27;coerce&amp;#x27;).dt.time
df[&amp;#x27;IntColumn&amp;#x27;] = df[&amp;#x27;IntColumn&amp;#x27;].astype(int)
df[&amp;#x27;FlagColumn&amp;#x27;] = df[&amp;#x27;FlagColumn&amp;#x27;].astype(int)
df[&amp;#x27;FloatColumn&amp;#x27;] = df[&amp;#x27;FloatColumn&amp;#x27;].astype(float)&lt;/pre&gt;
  &lt;p id=&quot;pZXb&quot;&gt;В приведенном выше коде &lt;code&gt;DatetimeColumn&lt;/code&gt;, &lt;code&gt;DateColumn&lt;/code&gt; и &lt;code&gt;TimeColumn&lt;/code&gt; преобразуются в соответствующие типы данных даты и времени. &lt;code&gt;IntColumn&lt;/code&gt; преобразуется в целое число, &lt;code&gt;FlagColumn&lt;/code&gt; - в целое число 0 или 1, а &lt;code&gt;FloatColumn&lt;/code&gt; - в число с плавающей точкой.&lt;/p&gt;
  &lt;h2 id=&quot;L4bh&quot;&gt;Шаг 4: Сохранение в формате Parquet&lt;/h2&gt;
  &lt;p id=&quot;9fMM&quot;&gt;Теперь, когда типы данных корректны, можно сохранить данные в формате Parquet с использованием библиотеки &lt;code&gt;fastparquet&lt;/code&gt;:&lt;/p&gt;
  &lt;pre id=&quot;NP8m&quot;&gt;# Задайте путь к файлу Parquet
parquet_path = &amp;#x27;your_file.parquet&amp;#x27;

# Сохранение в Parquet
df.to_parquet(parquet_path, index=False)&lt;/pre&gt;
  &lt;p id=&quot;SQ8Y&quot;&gt;Теперь у вас есть DataFrame с корректными типами данных, загруженный из MS SQL Server, и сохраненный в формате Parquet.&lt;/p&gt;
  &lt;p id=&quot;Oh8X&quot;&gt;Этот процесс обеспечивает правильное представление данных и сохраняет целостность типов при последующей загрузке данных в Pandas DataFrame.&lt;/p&gt;
  &lt;h2 id=&quot;tc41&quot;&gt;Лучшие практики преобразования типов при загрузке данных в pandas&lt;/h2&gt;
  &lt;p id=&quot;A4g8&quot;&gt;Преобразование типов данных при загрузке данных из CSV в DataFrame важно для обеспечения корректности анализа данных и оптимизации использования памяти. Ниже представлены лучшие практики для преобразования типов данных в Pandas DataFrame при чтении данных из CSV файлов:&lt;/p&gt;
  &lt;p id=&quot;hmUL&quot;&gt;&lt;strong&gt;Используйте параметр &lt;code&gt;dtype&lt;/code&gt; при чтении данных:&lt;/strong&gt;Параметр &lt;code&gt;dtype&lt;/code&gt; позволяет явно указать тип данных для каждого столбца. Это может быть особенно полезно при загрузке больших данных, чтобы избежать автоматического определения типов, которое может быть медленным. Пример:&lt;/p&gt;
  &lt;pre id=&quot;aZBf&quot;&gt;dtype_dict = {&amp;#x27;column1&amp;#x27;: &amp;#x27;int32&amp;#x27;, &amp;#x27;column2&amp;#x27;: &amp;#x27;float64&amp;#x27;, &amp;#x27;column3&amp;#x27;: &amp;#x27;str&amp;#x27;}
df = pd.read_csv(&amp;#x27;your_file.csv&amp;#x27;, dtype=dtype_dict)&lt;/pre&gt;
  &lt;p id=&quot;tDAf&quot;&gt;&lt;strong&gt;Используйте параметр &lt;code&gt;parse_dates&lt;/code&gt; для дат:&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;SOnc&quot;&gt;Если ваши данные содержат столбцы с датами, используйте параметр &lt;code&gt;parse_dates&lt;/code&gt; для автоматического преобразования в объекты даты. Пример:&lt;/p&gt;
  &lt;pre id=&quot;4BVX&quot;&gt;date_columns = [&amp;#x27;date_column1&amp;#x27;, &amp;#x27;date_column2&amp;#x27;]
df = pd.read_csv(&amp;#x27;your_file.csv&amp;#x27;, parse_dates=date_columns)&lt;/pre&gt;
  &lt;p id=&quot;X7dH&quot;&gt;&lt;strong&gt;Обрабатывайте пропущенные значения:&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;auUI&quot;&gt;Используйте параметр &lt;code&gt;na_values&lt;/code&gt; для указания значений, которые следует считать пропущенными. Это важно, чтобы Pandas правильно обрабатывал пропущенные значения и не превращал их в строки. Пример:&lt;/p&gt;
  &lt;pre id=&quot;NPFf&quot;&gt;na_values = [&amp;#x27;-1&amp;#x27;, &amp;#x27;NA&amp;#x27;, &amp;#x27;null&amp;#x27;]
df = pd.read_csv(&amp;#x27;your_file.csv&amp;#x27;, na_values=na_values)&lt;/pre&gt;
  &lt;p id=&quot;2obT&quot;&gt;&lt;strong&gt;Выбирайте наименьший подходящий тип данных:&lt;/strong&gt;Выбирайте наименьший подходящий тип данных для каждого столбца, чтобы оптимизировать использование памяти. Например, если столбец содержит целые числа в ограниченном диапазоне, используйте &lt;code&gt;int8&lt;/code&gt; или &lt;code&gt;int16&lt;/code&gt;, чтобы сэкономить память.&lt;/p&gt;
  &lt;p id=&quot;azFf&quot;&gt;&lt;strong&gt;Оптимизируйте строковые столбцы:&lt;/strong&gt;Если столбцы содержат ограниченное количество уникальных значений, рассмотрите возможность использования категориальных данных с помощью &lt;code&gt;astype(&amp;#x27;category&amp;#x27;)&lt;/code&gt;. Это снижает потребление памяти и может ускорить операции с данными.&lt;/p&gt;
  &lt;pre id=&quot;8OWk&quot;&gt;df[&amp;#x27;categorical_column&amp;#x27;] = df[&amp;#x27;categorical_column&amp;#x27;].astype(&amp;#x27;category&amp;#x27;)&lt;/pre&gt;
  &lt;p id=&quot;Tq3K&quot;&gt;&lt;strong&gt;Обрабатывайте большие файлы порциями:&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;FeUj&quot;&gt;При работе с большими CSV-файлами используйте параметр &lt;code&gt;chunksize&lt;/code&gt; для чтения данных порциями. Это может быть полезно, если ваши ресурсы по памяти ограничены.&lt;/p&gt;
  &lt;pre id=&quot;oLvU&quot;&gt;chunk_size = 10000
chunks = pd.read_csv(&amp;#x27;your_file.csv&amp;#x27;, chunksize=chunk_size)
for chunk in chunks:
    # Обработка каждой порции данных&lt;/pre&gt;
  &lt;p id=&quot;8dAc&quot;&gt;&lt;strong&gt;Используйте память для чисел с плавающей точкой:&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;1Ft4&quot;&gt;Если столбцы содержат числа с плавающей точкой, рассмотрите возможность использования &lt;code&gt;float32&lt;/code&gt; вместо &lt;code&gt;float64&lt;/code&gt;. Это уменьшит потребление памяти в два раза.&lt;/p&gt;
  &lt;pre id=&quot;Mmzy&quot;&gt;df[&amp;#x27;float_column&amp;#x27;] = df[&amp;#x27;float_column&amp;#x27;].astype(&amp;#x27;float32&amp;#x27;)&lt;/pre&gt;
  &lt;h2 id=&quot;oZ3o&quot;&gt;Как обрабатывать отдельно пустые значения для строк, для int, для дат, datetime&lt;/h2&gt;
  &lt;p id=&quot;xFbm&quot;&gt;При формировании DataFrame из разных типов столбцов в одной команде с использованием &lt;code&gt;read_csv&lt;/code&gt;, можно применить более общий подход к обработке пустых значений для разных типов данных. Воспользуемся параметром &lt;code&gt;converters&lt;/code&gt; для более гибкого управления преобразованием данных. &lt;/p&gt;
  &lt;p id=&quot;XHwS&quot;&gt;Пример:&lt;/p&gt;
  &lt;pre id=&quot;ItLa&quot;&gt;import pandas as pd

# Задайте путь к вашему CSV файлу
csv_file_path = &amp;#x27;your_file.csv&amp;#x27;

# Функция для обработки пустых значений для строк (str)
def process_string(value):
    return &amp;#x27;&amp;#x27; if value in (&amp;#x27;&amp;#x27;, &amp;#x27;NA&amp;#x27;, &amp;#x27;null&amp;#x27;) else value

# Функция для обработки пустых значений для целых чисел (int)
def process_int(value):
    return pd.to_numeric(value, errors=&amp;#x27;coerce&amp;#x27;)

# Функция для обработки пустых значений для дат
def process_date(value):
    return pd.to_datetime(value, errors=&amp;#x27;coerce&amp;#x27;)

# Функция для обработки пустых значений для datetime
def process_datetime(value):
    return pd.to_datetime(value, errors=&amp;#x27;coerce&amp;#x27;)

# Задайте словарь с функциями-обработчиками для каждого столбца
column_processors = {
    &amp;#x27;column1&amp;#x27;: process_string,
    &amp;#x27;column2&amp;#x27;: process_string,
    &amp;#x27;column3&amp;#x27;: process_int,
    &amp;#x27;column4&amp;#x27;: process_int,
    &amp;#x27;date_column1&amp;#x27;: process_date,
    &amp;#x27;date_column2&amp;#x27;: process_date,
    &amp;#x27;datetime_column1&amp;#x27;: process_datetime,
    &amp;#x27;datetime_column2&amp;#x27;: process_datetime,
}

# Чтение CSV с применением обработчиков
df = pd.read_csv(csv_file_path, converters=column_processors)&lt;/pre&gt;
  &lt;p id=&quot;BF28&quot;&gt;В данном примере:&lt;/p&gt;
  &lt;ul id=&quot;jefv&quot;&gt;
    &lt;li id=&quot;076O&quot;&gt;Создаются функции-обработчики (&lt;code&gt;process_string&lt;/code&gt;, &lt;code&gt;process_int&lt;/code&gt;, &lt;code&gt;process_date&lt;/code&gt;, &lt;code&gt;process_datetime&lt;/code&gt;), каждая из которых принимает значение и возвращает преобразованное значение, обрабатывая пустые значения по своему усмотрению.&lt;/li&gt;
    &lt;li id=&quot;OnW9&quot;&gt;Создается словарь &lt;code&gt;column_processors&lt;/code&gt;, в котором каждому столбцу сопоставляется соответствующая функция-обработчик.&lt;/li&gt;
    &lt;li id=&quot;spHW&quot;&gt;При чтении CSV используется параметр &lt;code&gt;converters&lt;/code&gt;, который применяет соответствующий обработчик для каждого столбца.&lt;/li&gt;
  &lt;/ul&gt;

</content></entry><entry><id>python-pro:10-data-visualization-trends-that-will-be-relevant</id><link rel="alternate" type="text/html" href="https://teletype.in/@python-pro/10-data-visualization-trends-that-will-be-relevant?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=python-pro"></link><title>10 трендов визуализации данных, которые будут актуальны в 2021 году</title><published>2021-02-10T06:59:24.336Z</published><updated>2021-02-10T06:59:24.336Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://teletype.in/files/3d/8f/3d8f0ce9-330a-4fd0-832c-468ebe733f5c.png"></media:thumbnail><category term="data-analysis" label="Data Analysis"></category><summary type="html">&lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21885/content_Risunok3.png&quot;&gt;Источник: https://www.e-xecutive.ru/management/marketing/1993476-10-trendov-vizualizatsii-dannyh-kotorye-budut-aktualny-v-2021-godu</summary><content type="html">
  &lt;p&gt;&lt;strong&gt;Источник:&lt;/strong&gt; &lt;a href=&quot;https://www.e-xecutive.ru/management/marketing/1993476-10-trendov-vizualizatsii-dannyh-kotorye-budut-aktualny-v-2021-godu&quot; target=&quot;_blank&quot;&gt;https://www.e-xecutive.ru/management/marketing/1993476-10-trendov-vizualizatsii-dannyh-kotorye-budut-aktualny-v-2021-godu&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;Эти тренды помогут переосмыслить ваши отчеты, планы и презентации, чтобы они стали красивее и доступнее.&lt;/p&gt;
  &lt;p&gt;В конце года подводят итоги, а в начале года занимаются планированием. И это вполне логично. Я же хотела бы начать год с рассказа о трендах, которые будут задавать тон в визуализации в 2021 году. Как это ни странно, но в бесконечном мире интернета я не нашла ни одной статьи, где были бы собраны все тренды визуализации. Поэтому решила сделать это самостоятельно и поделиться с вами.&lt;/p&gt;
  &lt;p&gt;Итак, 10 основных трендов визуализации с примерами.&lt;/p&gt;
  &lt;h2&gt;Тренд 1. Минимализм&lt;/h2&gt;
  &lt;p&gt;При разработке графических данных, диаграмм и таблиц важно не перегружать пользователя ненужной информацией. В мире визуализации есть понятие &lt;strong&gt;Data-ink ratio&lt;/strong&gt; &lt;em&gt;(коэффициент полезных чернил)&lt;/em&gt;. Если вы в своем отчете потратите 75% чернил для украшения и только 25% для отображения полезной информации, то есть большая вероятность, что читатель упустит действительно значимые вещи. Ценность такой визуализации теряется.&lt;/p&gt;
  &lt;p&gt;Меньше визуального мусора! Убираем все ненужное – сетку, лишние элементы дизайна, оси, если есть подписи данных. На первый план должны выходить данные, а не форма. Все больше диаграмм появляется именно в таком минималистическом стиле. И это прекрасно!&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21885/content_Risunok3.png&quot; width=&quot;620&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21886/content_2.png&quot; width=&quot;620&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;em&gt;Источник: Росстат&lt;/em&gt;&lt;/p&gt;
  &lt;h2&gt;Тренд 2. Простая инфографика для визуализации больших массивов данных&lt;/h2&gt;
  &lt;p&gt;Читатели не будут долго разбираться в графиках, если глядя на них ничего не понятно. Сложная визуализация – это как лонгриды, которые мало, кто читает до конца. Упрощайте &lt;a href=&quot;https://www.e-xecutive.ru/management/practices/1988443-kak-analitika-dobavlyaet-tsennosti-vashemu-produktu&quot; target=&quot;_blank&quot;&gt;анализ информации&lt;/a&gt;: разбивайте данные на несколько графиков, подписывайте основные выводы, расставляйте акценты.&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21887/content_3.png&quot; width=&quot;620&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;em&gt;Источник: исследования Яндекса&lt;/em&gt;&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21888/content_4.png&quot; width=&quot;620&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;em&gt;Источник: исследования Яндекса&lt;/em&gt;&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21889/content_5.png&quot; width=&quot;620&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;em&gt;Источник: Reddit&lt;/em&gt;&lt;/p&gt;
  &lt;h2&gt;Тренд 3. Неяркие цвета, приглушенная цветовая палитра&lt;/h2&gt;
  &lt;p&gt;Люди устали не только от лишних элементов на диаграммах, но и от ярких цветов. Слишком много вокруг &lt;a href=&quot;https://www.e-xecutive.ru/career/hr-management/1784678-privychki-razdrazhiteli-ili-desyat-prichin-gnevatsya-na-kollegu&quot; target=&quot;_blank&quot;&gt;раздражителей&lt;/a&gt; и информации. Используйте приглушенные оттенки, если хотите, чтобы на ваши диаграммы было приятно смотреть.&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21890/content_6.png&quot; width=&quot;620&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21891/content_7.png&quot; width=&quot;620&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Любовь к пастельным, мягким и неярким цветам в дизайне появилась еще в прошлом году. И этот тренд не намерен сбавлять обороты.&lt;/p&gt;
  &lt;p&gt;Приглушенные цвета – это оттенки, разбавленные белым или черным цветом. Наглядно эту мысль демонстрирует вот этот пример:&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21892/content_8.jpg&quot; width=&quot;620&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;em&gt;Источник: Biecom&lt;/em&gt;&lt;/p&gt;
  &lt;p&gt;Если вы сомневаетесь в своем чувстве цвета, используйте сервисы для подбора гармоничных палитр &lt;em&gt;(Color Hunt, COLOURLovers, Adobe Color)&lt;/em&gt;.&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21893/content_9.png&quot; width=&quot;620&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;em&gt;Источник: исследования Яндекса&lt;/em&gt;&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21894/content_10.png&quot; width=&quot;620&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;em&gt;Паллеты Colorhunt&lt;/em&gt;&lt;/p&gt;
  &lt;h2&gt;Тренд 4. Упрощение легенды&lt;/h2&gt;
  &lt;p&gt;Данный тренд относится именно к визуализации. Если можете не использовать легенду как отдельный элемент диаграммы – не используйте. Размещайте подписи в непосредственной близости с рядами данных. При этом цвет шрифта подписей должен соответствовать цвету линий.&lt;/p&gt;
  &lt;p&gt;Посмотрите, как эффективно работает данное правило на линейных графиках ниже. И никаких лишних элементов!&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21895/content_11.png&quot; width=&quot;620&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;em&gt;Источник: Ayecapitalist&lt;/em&gt;&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21897/content_12.png&quot; width=&quot;620&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;em&gt;Источник: Towardsdatascience&lt;/em&gt;&lt;/p&gt;
  &lt;p&gt;Отличное решение – вынести легенду в заголовок, делая акценты цветом:&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21898/content_13.png&quot; width=&quot;620&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;em&gt;Источник: Economist&lt;/em&gt;&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21899/content_14.png&quot; width=&quot;620&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;em&gt;Источник: Тинькоф-журнал&lt;/em&gt;&lt;/p&gt;
  &lt;h2&gt;Тренд 5. Тонкие линии&lt;/h2&gt;
  &lt;p&gt;Простые формы и иллюстрации, нарисованные тонкими линиями как будто от руки – еще один тренд 2021 года. Жирным шрифтам и прописным буквам нет места в трендовых отчетах. Используйте полужирное форматирование, которое выглядит более легким.&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21900/content_15.png&quot; width=&quot;620&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21901/content_16.png&quot; width=&quot;620&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;em&gt;Источник: Nytimes&lt;/em&gt;&lt;/p&gt;
  &lt;p&gt;В данном контексте обратите внимание на шрифты light. Они занимают меньше места и не перегружают восприятие текста.&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21902/content_17.png&quot; width=&quot;620&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2&gt;Тренд 6. Монохром и легкие градиенты&lt;/h2&gt;
  &lt;p&gt;Диаграмма будет выглядеть &lt;a href=&quot;https://www.e-xecutive.ru/management/marketing/1859070-devyat-oshibok-pri-ispolzovanii-infografiki-v-prezentatsiyah&quot; target=&quot;_blank&quot;&gt;более профессиональной&lt;/a&gt; (и, следовательно, более достоверной), когда используется только несколько цветов или градиент – градация одного цвета от темного к светлому. При этом для акцента можно добавить более яркий оттенок комплементарного цвета, т.е. наиболее подходящего по сочетанию.&lt;/p&gt;
  &lt;p&gt;Все чаще встречается и легкий градиент в более светлый тон основного цвета. Главное – не переусердствовать.&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21903/content_18.png&quot; width=&quot;620&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;em&gt;Источник: Habr&lt;/em&gt;&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21906/content_19.png&quot; width=&quot;419&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;em&gt;Источник: Lukebeacon&lt;/em&gt;&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21907/content_20.jpg&quot; width=&quot;292&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2&gt;Тренд 7. Шрифты с засечками&lt;/h2&gt;
  &lt;p&gt;Шрифты с засечками становятся все популярнее. Их используют такие бренды как &lt;strong&gt;New York Times&lt;/strong&gt; и &lt;strong&gt;Tiffany&lt;/strong&gt;. Текст, набранный шрифтом с засечками, смотрится единым целым и легко читается. Часто такие элегантные шрифты составляют отличную пару сдержанному шрифту без засечек.&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21911/content_21.jpg&quot; width=&quot;620&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21912/content_22.jpg&quot; width=&quot;620&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;В диаграммах и на графиках шрифт с засечками тоже смотрится гармонично. Times New Roman, знакомый нам со школы, навевает легкое чувство ностальгии.&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21931/content_22.1.png&quot; width=&quot;620&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21932/content_22.2.png&quot; width=&quot;620&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;em&gt;Источник: онлайн-школа визуализации Excellent&lt;/em&gt;&lt;/p&gt;
  &lt;h2&gt;Тренд 8. Геометрические фигуры везде&lt;/h2&gt;
  &lt;p&gt;В рекламе, в оформлении обложек и упаковок, в бизнес-презентациях все чаще встречаются геометрические фигуры: круги, квадраты, овалы, треугольники. Четкие фигуры легко нарисовать, смотрятся они современно и, что немаловажно, структурировано. В этом контексте графики и диаграммы – чистая геометрия, и, значит, актуальны.&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21913/content_23.jpg&quot; width=&quot;620&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21915/content_24.jpg&quot; width=&quot;620&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;em&gt;Источник: Biecom&lt;/em&gt;&lt;/p&gt;
  &lt;p&gt;Даже в шаблоне резюме есть элементы инфографики.&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21918/content_25.png&quot; width=&quot;620&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;em&gt;Больше примеров бесплатных шаблонов для Google Docs можно найти &lt;a href=&quot;https://www.superside.com/blog/google-docs-templates&quot; target=&quot;_blank&quot;&gt;здесь&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
  &lt;h2&gt;Тренд 9. Плоские иконки и эмодзи&lt;/h2&gt;
  &lt;p&gt;На первый взгляд для бизнеса иконки и эмодзи не очень подходят. Однако, когда надо упростить восприятие информации или добавить эмоций, разделить контент или расставить акценты, без них не обойтись. При использовании иконок важно соблюдать единство типа, цвета и размера.&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21919/content_26.jpg&quot; width=&quot;620&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21920/content_27.jpg&quot; width=&quot;620&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21921/content_28.jpg&quot; width=&quot;620&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;em&gt;Источник: Canva&lt;/em&gt;&lt;/p&gt;
  &lt;p&gt;Почему бы не использовать иконки и эмодзи в Excel? На круговой диаграмме они смотрятся очень органично. Да и на гистограмме смайлик не воспринимается как нечто чуждое.&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21922/content_29.png&quot; width=&quot;620&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21923/content_30.png&quot; width=&quot;620&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;em&gt;Источник: онлайн-школа визуализации Excellent&lt;/em&gt;&lt;/p&gt;
  &lt;h2&gt;Тренд 10. Анимация&lt;/h2&gt;
  &lt;p&gt;Все больше набирает тренд применения анимации. И это понятно, так как живые картинки притягивают и удерживают внимание, они очень показательные и интересно смотрятся. Все это решается несложным программированием. Пока сложно представить, как можно использовать анимацию в Excel в полной мере без специальных навыков программирования. Первое, что приходит на ум – срезы, сводные таблицы, формулы, выпадающие списки, дашборды.&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21924/content_31.png&quot; width=&quot;620&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Еще элементы «анимации» в Excel-отчете можно сделать следующим образом:&lt;/p&gt;
  &lt;ol&gt;
    &lt;li&gt;Акцентируем внимание на область, на которую надо обратить внимание, «приглушив» остальную область фигурой с заливкой → подписываем вывод по «открытой» части.&lt;/li&gt;
    &lt;li&gt;Следующим пунктом показываем тот же график, но оставляем «не приглушенной» другую область, на которую следует обратить внимание → остальные части «приглушаем» областью с заливкой → пишем новый вывод по «открытой» части графика.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p&gt;Например:&lt;/p&gt;
  &lt;p&gt;В период 2006 по 2009 год наблюдался стабильный рост выручки в связи с открытием новых магазинов:&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21925/content_32.png&quot; width=&quot;620&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;В период 2010 по 2013 год резкое падение по всем показателям в связи с ростом курса валюты:&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21927/content_33.png&quot; width=&quot;620&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;И второй пример по этой же теме: делаем ярким цветом все элементы одной категории, по которой делаем вывод, а остальное – «приглушенным» тоном → следующим пунктом выделяем ярким элементы следующей категории с выводом, остальное – «приглушенным»:&lt;/p&gt;
  &lt;p&gt;Количество заболеваний в цехе 1 с 2005 года пошло на спад после улучшения производственных условий (установка фильтра и снижение температуры среды):&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21928/content_34.png&quot; width=&quot;620&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Количество заболеваний в цехе 2 с 2005 года осталось в той же тенденции. В данном цехе не было произведено улучшение условий труда. Необходимо запланировать работы в следующий кап.ремонт:&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://www.e-xecutive.ru/uploads/image/src/21929/content_35.png&quot; width=&quot;620&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Такие приемы очень хорошо использовать в презентациях Power Point. При перелистывании слайдов будет появляться эффект анимации.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;p&gt;Итак, самое время переосмыслить свои отчеты, исходя из представленных трендов. Оставляйте только самое важное, делайте отчеты легкими и воздушными, подбирайте правильные цвета и шрифты, расставляйте акценты, смело добавляйте эмоций.&lt;/p&gt;
  &lt;p&gt;Ваши красивые и доступные отчеты делают вас трендовым специалистом, а мир – чуточку красивее и лучше.&lt;/p&gt;

</content></entry><entry><id>python-pro:SumKKTJh7</id><link rel="alternate" type="text/html" href="https://teletype.in/@python-pro/SumKKTJh7?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=python-pro"></link><title>Без проектирования сложно масштабировать систему</title><published>2020-05-25T18:44:38.012Z</published><updated>2020-05-25T18:44:38.012Z</updated><summary type="html">Рассуждения про проектирование системы.</summary><content type="html">
  &lt;p&gt;Рассуждения про проектирование системы.&lt;/p&gt;
  &lt;h2&gt;Проектирование&lt;/h2&gt;
  &lt;p&gt;&lt;strong&gt;Проектирование системы&lt;/strong&gt; - это когда на старте, до самой разработки, вы рисуете схему взаимодействия всех компонентов системы, описываете принципы функционирования системы, рисуете логические схемы, прорабатываете какие слои нужны в системе, продумываете структуру каталогов и т.д. Причем этот процесс всегда проходит несколько итераций улучшений.&lt;/p&gt;
  &lt;p&gt;Постепенно накапливается много компонентов системы, вы начинаете оптимизировать схему, что-то убираете, что-то группируете/объединяете, где-то применяется динамическая схема работы (за счет параметров). Постепенно из сложной запутанной схемы вырастает лаконичное &lt;strong&gt;Решение&lt;/strong&gt; на бумаге.&lt;/p&gt;
  &lt;p&gt;Если процесс проектирования пропустить, то система/решение может функционировать и масштабироваться за счет энтузиазма разработчиков очень долгое время. Вы будете на ходу поднимать систему после очередного краха, латать дыры в архитектуре хардкодом, плодить дублированный код, хранить одинаковые данные в разных таблицах хранилища и т.д. &lt;/p&gt;
  &lt;p&gt;Без проектирования скорость получения первых сверх быстрых результатов воодушевляет, правда через пару лет такой подход приведет к коллапсу развития системы. Даже опытные разработчики будут плутать в построенной системе, подолгу зависая над теми или иными справочниками, над кодом и т.д.&lt;/p&gt;
  &lt;h2&gt;Почему игнорируют или пропускают стадию проектирования?&lt;/h2&gt;
  &lt;p&gt;По сути, стадия проектирования всегда присутствует при разработке. Варьируется только продолжительность этого этапа и глубина проработки. Если у вас уже есть опыт разработки и есть ряд реализаций, то вы можете из различных кусков собрать новую архитектуру, более качественную и гибкую. Причем вам будет гораздо легче предусмотреть разные ситуации, заложить в систему нужную гибкость для дальнейшего масштабирования. Вы сможете спрогнозировать узкие места системы и предложить оптимальное решение исходя из ваших ресурсов.&lt;/p&gt;
  &lt;p&gt;Когда опыта нет, то вы пытаетесь придумать хоть что-то, чтобы закрыть стоящую перед вами задачу. В таких ситуациях 20-ти килограммовая тачка с квадратными колесами кажется идеальным решением для грузчика, которому надо срочно раскидать кучу песка. Да, с большими усилиями, но это возможно.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Рассмотрим пример с API:&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Например, вам нужно выгрузить данные из API, без какого-либо опыта вы полезете гуглить, найдете какой-то рабочий пример и из-него соберете свое решение задачи. Далее будет расти объем данных, ширина данных (количество полей в выгрузке), будет усложняться обработка данных, появится еще ряд API и т.д. Разработанный инструмент будет требовать все больше и больше вашего времени (на поддержку работоспособности, оптимизацию и т.д.). В какой-то момент вы достигните лимита запросов для API, придется использовать еще одну учетную запись или придется переработать алгоритм получения данных от API. В какой-то момент вы сядите за комп и придумаете как переработать решение, чтобы учесть все полученные шишки. На это уйдет некоторое время - эту стадию можно обозвать Редизайн системы. А дальше придется переписывать код, повторно тестировать систему, тестировать смежные области.&lt;/p&gt;
  &lt;p&gt;Если бы у вас был опыт работы с API, то вы наверняка бы сразу предусмотрели инкрементальную выгрузку данных, разбили процесс на подэтапы (tasks), задачи бы объединили в jobs (пакеты обработки данных). Взяли бы какой-то менеджер для запуска задач. На основе запусков сформировали бы ежедневную отчетность, чтобы отслеживать текущие ошибки и видеть узкие места системы (которые потом можно переработать и снизить издержки эксплуатации системы).&lt;/p&gt;
  &lt;h2&gt;Проектирование аналитической структуры предприятия&lt;/h2&gt;
  &lt;p&gt;Проектировать можно как программу (из каких модулей состоит, как они взаимодействуют, какие классы или функции нужно написать и т.д.), так и аналитическую структуру предприятия.&lt;/p&gt;
  &lt;p&gt;Есть управленческий учет, где продумываются количественные показатели для оценки эффективности бизнес-процессов, проектов, работы фирмы, производства и т.д. На основе общепринятых в компании показателей вырабатываются аналитические признаки. Справочники в системе учета приводятся в порядок, проверяется качество занесенных данных в справочники (контроль качества справочников). Это относится зачастую к справочникам контрагентов, товарных справочников и справочников услуг, должна быть выстроена иерархия категорий товаров. Должна быть выстроена четкая структура каналов продаж, введена классификация клиентов, чтобы можно было по этой классификации оценить наиболее прибыльные направления, а также понять где компания теряет деньги.&lt;/p&gt;
  &lt;h2&gt;Контроль данных&lt;/h2&gt;
  &lt;p&gt;Обязательно закладывайте в проектировании элемент контроля данных. Например, у вас должно быть описано или отображено на схеме, как вы будете автоматически сверять правдивость данных. Например, вы выгрузили данные из системы, сформировали отчеты и отправили руководству. Через час звонок и неприятный разговор. А если бы у вас были заложены механизмы контроля данных, то вам бы пришла отбивка - выявлены расхождения между системой аналитики и отчетом в системе 1С Предприятие.&lt;/p&gt;
  &lt;h2&gt;Какие бесплатные инструменты для проектирования есть&lt;/h2&gt;
  &lt;p&gt;Я использую очень часто сервис &lt;a href=&quot;https://app.diagrams.net/&quot; target=&quot;_blank&quot;&gt;https://app.diagrams.net/&lt;/a&gt; (ранее &lt;a href=&quot;https://app.diagrams.net/&quot; target=&quot;_blank&quot;&gt;https://draw.io&lt;/a&gt;). Документы можно сохранять на гугл диск и повторно открывать хоть с работы, хоть из дома.&lt;/p&gt;

</content></entry><entry><id>python-pro:lVhM8_kGwf</id><link rel="alternate" type="text/html" href="https://teletype.in/@python-pro/lVhM8_kGwf?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=python-pro"></link><title>Аналитика на мусорных данных</title><published>2020-05-21T21:44:36.764Z</published><updated>2020-05-21T22:24:55.370Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://teletype.in/files/42/f9/42f9c61e-bd22-4b35-a560-22b2f9f58b6d.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://teletype.in/files/71/85/718595c0-f0d5-40b7-a353-8b7c403fbaf2.png&quot;&gt;Салют! Это мой первый пост про отчетность компаний.</summary><content type="html">
  &lt;p&gt;Салют! Это мой первый пост про отчетность компаний.&lt;/p&gt;
  &lt;p&gt;Многие компании задумываются о внедрении различных BI инструментов, потому что руководство хочет видеть красивые отчеты, дашборды, понимать как работает бизнес.&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/71/85/718595c0-f0d5-40b7-a353-8b7c403fbaf2.png&quot; width=&quot;1080&quot; /&gt;
    &lt;figcaption&gt;Что хотелось бы получить при внедрении BI&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p&gt;Для того, чтобы реализовать эту задачу качественно, нужно правильно выстраивать процессы не обработки данных для BI системы, а бизнес-процессы по вводу данных в учетных системах. Далеко не всегда у бизнеса есть это понимание. Это большая проблема в людях на местах (скорей всего). Сделать хорошо всегда сложно и нужен человек драйвер, который все выстроит грамотно. Возможно даже в одиночку, главное, чтобы специалист был с руками из плеч и была воля руководства наделить этого человека правами творить.&lt;/p&gt;
  &lt;p&gt;Если бизнес плохо ведет учет своей деятельности и хочет внедрить BI, то можно ли построить бизнес-аналитику?&lt;/p&gt;
  &lt;p&gt;Можно, даже нужно! Сначала может получится очень хорошая аналитика за счет усилий по очистке данных. Различные меппинги, правила для обработки данных. Появится много различных отчетов у менеджмента. Даже выводы будут сделаны верные и BI себя окупит. Но вот дальше путь раздваивается.&lt;/p&gt;
  &lt;figure class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/b1/18/b1189585-46f6-46e8-81ca-3943f11a90d3.png&quot; width=&quot;500&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;strong&gt;Проблема качества данных&lt;/strong&gt; - это проблема масштабируемости. Если ваши данные кристально чистые и понятные, то вы меньше времени думаете как сделать правильную модель, как связать данные, как проверять данные, меньше времени тратите на исправление косяков.&lt;/p&gt;
  &lt;p&gt;Выдавать правильные и качественные данные - это задача ERP: правильные бизнес-процессы, правильные настройки системы учета, защита от дурака, понятный интерфейс ERP.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;На картинке два пути, но их все же три:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;Пойти к топам и заявить - система говно, отдел такой-то работает несистемно, надо перестроить ведение данных вот так то и так то. За такие действия естественно можно заслужить плохую репутацию, поссориться с коллегами, вас скорей всего могут назначить ответственным за предложенные изменения, а коллеги навставляют палок в колеса. И в завершении вы либо справитесь с войне за качество данных, либо провалите битву со всеми вытекающими.&lt;/li&gt;
    &lt;li&gt;Начать строить BI систему без участия в модернизации учета данных. Тут тоже свои последствия - Вы с каждым разом все меньше и меньше будете хотеть смотреть на эту кучу говна из палок. Безусловно, можно делать качественно из мусора, но с большими усилиями. И каждый раз прилагать титанические усилия не к поиску смыслов в данных, а к созданию моделей для аналитических приложений, очищать данные, настраивать правила, меппинги и харкод.&lt;/li&gt;
    &lt;li&gt;Строить систему бизнес-аналитики на плохих данных и постепенно втираться в доверие к топам и сеять зерна сомнений в тех или иных подходах. Предлагать свои идеи, когда наберется лимит доверия.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;Вам очень повезло, если у вас есть отдел толковых ребят, которые занимаются качеством данных, правильно проектируют аналитические признаки в системе (атрибуты контрагентов, товаров и т.п.). Все выстроено логично, четко, системно. Но бывают и не очень ситуации ;)&lt;/p&gt;
  &lt;p&gt;Первый рассмотренный вариант является самым быстрым и самым рискованным.&lt;/p&gt;
  &lt;p&gt;Второй вариант непонятно к чему приведет, скорей всего к продолжительным страданиям.&lt;/p&gt;
  &lt;p&gt;Третий вариант компромиссный с точки зрения сберегания своих нервов, но за пару лет разрастется система учета, разрастется система бизнес-аналитики, появится куча отчетов, которые уже не переделать без огромных трудозатрат. Но при этом можно постепенно все больше и больше оказывать влияние на топ-менеджмент по развороту к проблеме качества данных и учету данных.&lt;/p&gt;
  &lt;p&gt;Опытным бы я советовал идти по первому пути - так можно попасть в топ менеджмент, проявив инициативу. Правда все зависит от открытости руководства. Если между вами и руководством амбарный замок, то лучше не соваться в эту гавань.&lt;/p&gt;
  &lt;p&gt;Без опыта, конечно же второй вариант (у вас скорей всего будет начальник, который будет отвечать за последствия такой стратегии). Просто наслаждайтесь плохим опытом, ведь плохой опыт - тоже опыт. При этом вы вдоволь наэкспериментируетесь на всяких меппингах, мудренной обработке данных.&lt;/p&gt;
  &lt;p&gt;Ну а третий вариант я проживаю в данный момент, уже набравшись опыта. Надеюсь, что может моя ситуация вырулит в правильное направление!&lt;/p&gt;

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