-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Code refactoring proposals #128
Comments
Смешение функционала на уровне модулей. Использование кода делится на два этапа:
Для упрощения понимания кода эти два этапа лучше максимально разнести по разным модулям(пакетам). Смешение сущностей в иерархии классов. class Publisher(Varnames) Избыточная иерархия классов. class InputDefinition() Много микрофункций, состоящих из одной-двух строчек. Лучше заменить их вызовы на их содержимое. https://github.com/epogrebnyak/rosstat-kep-data/blob/master/kep/getter/dataframes.py#L259 Функции которые используются только в одном месте можно заменить на их содержимое. https://github.com/epogrebnyak/rosstat-kep-data/blob/master/kep/reader/rs.py#L164 |
Упомянутые проблемы с иерархией классов и с функциями встречаются в коде повсеместно, я дал ссылки только на то что удалось найти за несколько часов. Сейчас подобных проблем в коде очень много, и порог вхождения для сторонних разработчиков измеряется днями |
Дайте разбивку этапов на которые можно разбить проект, чтобы его
|
Лучше начинать с простых вещей которые помогут в процессе понять код. Пакет reader лучше отложить на последнее место, как самый сложный.
|
Tentative class structure (no todo) from word2csv import WordDocuments
from csv2db import RowSystem
from db_query import DataFrames
# folder is data folder with current month word files
# import it from config.py
# create raw csv file if it does not exist
WordDocuments(folder).convert_to_csv()
# raw csv file parsing result as generator
flat_data = RowSystem(folder).get_stream()
# get dataframes and save as files
holder = DataFrames(gen=flat_data)
dfa, dfq, dfm = holder.get_all()
holder.save_as_csv()
holder.save_as_xl()
# example for parsing
csv_text = """Gross domestic product
billion USD
2000 1455 100 110 121 121
rate of growth, %
2000 1,075 0,99 1,10 1,10 1
"""
headers = {"Gross domestic product":"GDP"}
units = {"billion USD":"bln_usd", "rate of growth, %":"rog"}
labelled_rows = [["VAR_X_bln_usd", "2000", "1455", "300", "345", "400", "410"],
[ "VAR_X_rog", "2000", "1,075", "0,99", "1,10", "1,10", "1"]]
flat_data = [("VAR_X_bln_usd", "a", 2000, None, None, 1455),
("VAR_X_bln_usd", "q", 2000, 1, None, 300),
("VAR_X_bln_usd", "q", 2000, 2, None, 345),
("VAR_X_bln_usd", "q", 2000, 3, None, 400),
("VAR_X_bln_usd", "q", 2000, 4, None, 410),
("VAR_X_rog", "a", 2000, None, None, 1.075),
("VAR_X_rog", "q", 2000, 1, None, 0.99),
("VAR_X_rog", "q", 2000, 2, None, 1.10),
("VAR_X_rog", "q", 2000, 3, None, 1.10),
("VAR_X_rog", "q", 2000, 4, None, 1)] |
не приоритетное
под вопросом, может быть
API достаточно простой (получить фреймы dfa, dfq, dfm + записать их в + функционал по varnames - названиям и расшифровкам переменных)
нужно делать
Можно уточнить, где есть признаки обмена данными между reader\getter, кроме того что getter получает информацию от reader? Varnames() - он берет данные из разных частей?
можно делать |
API должен исходить из конкретных юзкейсов, которые у меня пока не получается представить. Кто будет потенциальным пользователем API? Какие именно практические цели поможет ему достичь этот проект? |
Юзеркейс тут: https://github.com/epogrebnyak/rosstat-kep-data#Как-использовать-эти-данные |
Интересует скорее не "как" использовать, а "зачем" и кому это будет нужно? То есть конкретно вот эти два вопроса:
Касаемо того как использовать - возникает вопрос зачем нужна sqlite БД, если она в юзкейсе не используется? |
Я затрудняюсь кто и зачем скпщать: пользователи экономической статистики,
|
Ок. Имеющийся юзкейс покрывает только сsv файл. Хочется понять для чего тогда нужен класс KEP и БД? |
База данных сейчас может бвть не нужна, в итоге она понадобится, чтобы |
Предазначение этой обертки непонятно - какие преимущества ее использования по сравнению с созданием стандартного dataframe прямо из csv? Это неплохо бы описать в юзкейсе. Текущий юзкейс описывает как пользователь может использовать данные без изучения дополнительных API, в одну строчку кода. Необходимость в каких-то еще обертках в этом случае у меня не получается оправдать:
|
Дайте подумаю... KEP - действительно тонкая обертка для создания датафреймов, она может быть или может не быть. Наверное он мне дорог как упражнение, если считаете что лишний, можно его в новой версии убрать.
dfm = pd.read_csv("data_monthly.txt", |
To be listed below
The text was updated successfully, but these errors were encountered: