ru-corporate / boo Goto Github PK
View Code? Open in Web Editor NEWPython client for Rosstat open data corporate reports for 2012-2018.
License: MIT License
Python client for Rosstat open data corporate reports for 2012-2018.
License: MIT License
Немного корпоративной отчетности и питона - я обновил и выложил пакет boo, который
позволет работать с годовой бухгалтерскую отчетностью компаний (по РСБУ). Пакет boo
скачивает данные с сайта Росстата, чистит от компаний-призраков и причесывает до удобоваримого вида (добавляет названия переменных, например). Сейчас добавлен 2018 год.
Эти же данные платно предоставляет СПАРК, Прайм и другие провайдеры, а также бесплатно но по одной компании сайты типа sbis, list-org и другие.
Если вы или кто-то из ваших коллег владеете питоном, вы можете обращаться к данным напрямую и строить выборки, насколько позволяют коды классификации (регион регистрации, ОКВЭД, показатели баланса и т.д.). Данные можно скачать, уменьшить до нужной выборки и сохранить в CSV или Excel.
Помимо документации к пакету, есть Jupyter ноутбук Google Colab, где показываются примеры работы с этими данными и пакетом boo.
import boo
def rename_rows2(df):
RENAME_DICT = {
'2460066195': "РусГидро",
'4716016979': "ФСК ЕЭС",
'7702038150': "Московский метрополитен",
'7721632827': "Концерн Росэнергоатом",
'7706664260': "Атомэнергопром",
'7703683145': "Холдинг ВТБ Капитал АЙ БИ",
'9102048801': "Черноморнефтегаз",
'7736036626': "РИТЭК"
}
for k, v in RENAME_DICT.items():
df.loc[k, 'title'] = v
return df
print("obtaining source...")
root_df0 = boo.main.read_intermediate_df(2017)
print("renaming")
df = root_df0.copy()
%timeit rename_rows2(df)
del df
Somehow this simple code eats up the memory in Colab when running repetitively:
obtaining source...
renaming
The slowest run took 13.05 times longer than the fastest. This could mean that an intermediate result is being cached.
1 loop, best of 3: 1.38 s per loop
Hello! Thanks for your project!
Will reporting for 2019-2020 years be added?
Преобразовать данные:
Тест с проверкой свойств отчетности
Lines 83 to 87 in 94ec38b
D:\github\boo (master)
λ python -c "import pathlib; print(pathlib.Path('README.md', encoding='utf-8').read_text())"
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "D:\Anaconda3\lib\pathlib.py", line 1200, in read_text
return f.read()
File "D:\Anaconda3\lib\encodings\cp1251.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x98 in position 2505: character maps to <undefined>
D:\github\boo (master)
λ python -c "import pathlib; print(pathlib.Path('README.md', encoding='utf-8').read_text())"
TODO:
MAYBE:
NOT TODO:
curl -C -
)boo
invoke
DONE:
sandbox
sample
Lines 50 to 60 in f031505
"""
Задание:
Выберите одну компанию и проверьте несколько цифр ее отчетности
по данным web-сайта компании (по примеру АвтоВАЗа) или
агрегатора статистики типа https://www.list-org.com/
Желательно взять цифры из разных разделов отчетности.
Обратите внимание, что данные могут быть переведены в
млн. или млрд. рублей и округлены.
Добавьте финансовые показатели в функцию add_ratios(). Этих показателей
может быть довольно много, приветствутеся, если вы сгруппируете
их (например, ликвидность, рентабельность, финансовая устойчивость).
В комментарии в коде кратко объясните логику показателя или дайте ему
характерное название. Можете указать показатели, которые вы бы хотели,
посчитать на основе бухгалтерской отчетности, но у вас не хватает данных.
Опционально: попробуйте построить распределение этого предложенных
показателей для на сформированной в этом примере выборке.
Справочно: вид форм, которые раскрыывают компании по РСБУ определяется
Приложение N 4 к приказу Минфина РФ от 2 июля 2010 г. N 66н
http://ivo.garant.ru/#/document/12177762/paragraph/110832:0
Дополнительно / обсуждение:
my_inn
"""
Далее:
The filenames are too close together, may need docstrings and/or name change to make roles more obvious.
'okpo': None,
'okopf': None,
'okfs': None,
'okved': None,
'unit': None
See https://ru-corporate.github.io/boo/ for draft
Used commands:
pdoc3 --html boo -o docs
move docs\boo\*.* docs
import boo
boo.download(year=2018, folder=".")
boo.read_dataframe(year=2018, folder=".", names="long", nrows=1000)
# ("text", "numeric")
(1100, "total_assets", "ta")
Intro:
Corporate disclosure:
Dig in boo dataset:
Dig into problem-solving:
Risks and pitfalls:
Notes:
When loading a dataframe, a part of columns are set type np.int64. But they have NaN values. The problem is solved by replacing in boo/columns.py/class Column/method dtype: numpy.int64 -> numpy.float64. But it's bad decision for memory consumption.
"""
pip install boo
mkdir boo_data
boo download 2012 --dir boo_data
boo unpack 2012 --dir boo_data
boo data 2012 --nrows 5 --dir boo_data
boo path 2012 --csv --dir boo_data
boo wipe 2012 --csv --dir boo_data
"""
Открытые данные — это могут быть проекты по сбору общественно значимой информации с ее последующим преобразованием в машиночитаемый формат, а также создание общедоступных инструментов для сбора, анализа, обработки и визуализации данных.
[источник]
Росстат выкладывает данные бухгалтерской отчетности организаций в виде файла за весь год, за что ему большое спасибо, но без метаданных - приходится интуитивно догадываться, что значат коды колонок. (Раньше было проблема с ошибками в исходном CSV файле, но сейчас с этим лучше.)
Помимо этого в файле используют разные денежные единицы – рубли, тысячи, млн рублей (например у РЖД) – это тоже никак не задокументировано.
Даже если все как-то прочитать, то данные портят компании- призраки. При всей строгости статотчетности в данных сидят компании с выручкой больше чем у Газпрома.
Я написал клиент на python'e, который позволяет сказать эти данные и считать в виде единообразного датафрейма pandas, чтобы потом делать выборки необходимых данных по размеру предприятий, отраслям, регионам и другим признакам. Соответственно, из pandas можно перекидывать данные в CSV и Excel.
Столбцы описаны в документации, а по компаниям-призракам предложен простой механизм фильтрации.
Репозитарий проекта:
https://github.com/ru-corporate/boo
На этих данных работает целая индустрия сайтов информации о компаниях (см README проекта), а также они входят в состав услуг, которые предлагают коммерческие провайдеры информации - СПАРК, ПРАЙМ и другие. До появления клиента boo
не было открытого способа, считать эти данные по всем компаниям РФ.
Я сам использую эти данные при подготовке учебных материалов по корпоративным финансам. Считаю, что они также полезны во всех сферах отраслевого и социально-экономического анализа, где мы хотим перейти на микро уровень отдельных предприятий (анализ налоговой база, развитие МСП, кредитование и т.д.).
На этих же данных построение рейтинги крупнейших компаний России, которые публикуют ведущие издания
Повышая доступность набора данных, мы даем большему числу СМИ и их читателей воспроизвести информацию.
В идеале видится ситуация, что сходив в булочную можно было бы узнать финансовое положение компании, которая продала вам хлеб и той, которая его испекла.
В 2018 году Росстат улучшил качество данных, и отпала необходимость в парсинге битых строк, код клиента boo
получилось упростить и так появились текущая версия в виде пакета pypi. Также с сайта Росстата пропали версии данных, но с этим можно жить.
Visibility.
Если честно сил и писать код и пиарить его нет - поэтому, если конкурс привлечет новых пользователей датасета, которые найдут недочеты и новые применения пакета. Немного странная ситуация – данные полезные, пользователей почти нет.
Ответы на вопросы.
Можно ли ускорить релиз этих данных Росстатом? Правда ли что эти же данные коммерческие провайдеры информации получают раньше, чем выкладываются открытые данные? Почему так получается и как это поменять?
В машиночитаемой форме пропущены некоторые поля, которые есть в индивидуальной отчетности, но нет в сводной (например, налоги уплаченные помимо налога на прибыль). Как это можно поменять?
На что-то одно из:
Аналогичный клиент для данных ФНС по налогам компаний (публичные данные, которые нужно долго преобразовывать, с идентификатором по ОГРН, а у Росстата- ИНН).
Переходник между ИНН и ОГРН в виде публичного API или датасета.
Получить ОКВЭД в виде JSON?
Сделать более крупный файл для теста с помощью csvki (например, 10+ 10+ 50 рядов)
from boo import years, file_length_mb
def test_rosstat_files_are_available_and_big_in_size():
for year in years():
assert file_length_mb(year) > 500
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.