GithubHelp home page GithubHelp logo

boo's People

Contributors

epogrebnyak avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

boo's Issues

Make announcemeng about 0.1.0

Немного корпоративной отчетности и питона - я обновил и выложил пакет boo, который
позволет работать с годовой бухгалтерскую отчетностью компаний (по РСБУ). Пакет boo
скачивает данные с сайта Росстата, чистит от компаний-призраков и причесывает до удобоваримого вида (добавляет названия переменных, например). Сейчас добавлен 2018 год.

Эти же данные платно предоставляет СПАРК, Прайм и другие провайдеры, а также бесплатно но по одной компании сайты типа sbis, list-org и другие.

Если вы или кто-то из ваших коллег владеете питоном, вы можете обращаться к данным напрямую и строить выборки, насколько позволяют коды классификации (регион регистрации, ОКВЭД, показатели баланса и т.д.). Данные можно скачать, уменьшить до нужной выборки и сохранить в CSV или Excel.

Помимо документации к пакету, есть Jupyter ноутбук Google Colab, где показываются примеры работы с этими данными и пакетом boo.

https://github.com/ru-corporate/boo

caching in rename_rows() function

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

2019-2020 reports

Hello! Thanks for your project!
Will reporting for 2019-2020 years be added?

create canonical dataframe

Преобразовать данные:

  • Привести все строки к одинаковым единицам измерения (тыс. руб.)
  • Новые колонки:
    • найти короткое название компании
    • код ОКВЭД разбить на три уровня
    • определить регион по ИНН

README not identified as utf-8 file

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())"

replace TODO.txt

TODO:

  • тест с проверкой свойств отчетности #11

MAYBE:

  • larger dummy example for tests, 50 + 50 + 1000 example #3
  • писать отдельные файлы: make zip files and save to S3

NOT TODO:

  • silence .loc warning (а где они?)
  • download() can show line count
  • kernel для kaggle
  • проверка размера скачанного файла, риск обрыва данных (curl -C -)
  • сделать интерфейс доступа к данным в R
  • описание псевдокода алгоритма boo
  • управление проектом через invoke

DONE:

  • download() must fail on small fail on HTML file
  • нет нектороых переменных в whatis #9
  • more subsets, eg SME
  • lookup dataframe.util, maybe dataframe.filter
  • extend whatis() functionto new coluns
  • revive xfailed tests - using temp directory in a fixture with pytest - has get_folder() failure
  • global pytest fixture for sample year 0
  • test_main.py
  • smaller messages.py
  • port existing tests fro sandbox
  • variable descriptions boo.whatis
  • boo vs . in backage
  • pip install boo
  • okved v2
  • autopep8
  • частичное скачивание по размеру kB
  • тесты Travis CI + coverage
  • сквознные тесты с условным данными sample
  • более чиcтый вариант логгера (tqdm)
  • названия переменных и счетов бухучета в виде справочной функции
  • example.py cleanup

Одно из заданий

"""
Задание:

  1. Выберите одну компанию и проверьте несколько цифр ее отчетности
    по данным web-сайта компании (по примеру АвтоВАЗа) или
    агрегатора статистики типа https://www.list-org.com/

    Желательно взять цифры из разных разделов отчетности.

    Обратите внимание, что данные могут быть переведены в
    млн. или млрд. рублей и округлены.

  2. Добавьте финансовые показатели в функцию add_ratios(). Этих показателей
    может быть довольно много, приветствутеся, если вы сгруппируете
    их (например, ликвидность, рентабельность, финансовая устойчивость).

    В комментарии в коде кратко объясните логику показателя или дайте ему
    характерное название. Можете указать показатели, которые вы бы хотели,
    посчитать на основе бухгалтерской отчетности, но у вас не хватает данных.

    Опционально: попробуйте построить распределение этого предложенных
    показателей для на сформированной в этом примере выборке.

    Справочно: вид форм, которые раскрыывают компании по РСБУ определяется
    Приложение N 4 к приказу Минфина РФ от 2 июля 2010 г. N 66н
    http://ivo.garant.ru/#/document/12177762/paragraph/110832:0

  3. Дополнительно / обсуждение:

    • заполнить несколько позиций в my_inn
    • предложения по другим проверкам или показателям (free cash flow?)
    • идеи как улучшить показатель ebitda_proxy()
    • показатели cash-flow холдинговых компаний
    • какое поведение компаний мы молги бы показать на этой отчетности
      (например, инвестицонная фаза проекта)
    • какие показатели нужно ввести, чтобы уточнить расчет "прочих" переменных
    • предложения по визуализациям использованным в презентации
      """

"""
Далее:

  • компании-банкроты
  • инвестиции
  • свертка показателей Altman Z-score
  • проверть балансовые равенства на исходных данных source_df
  • график показателей "все-против-всех"
    """

path vs file roles

The filenames are too close together, may need docstrings and/or name change to make roles more obvious.

API change proposal and new examples

import boo

boo.download(year=2018, folder=".")
boo.read_dataframe(year=2018, folder=".", names="long", nrows=1000)

# ("text", "numeric")

(1100, "total_assets", "ta")

ideas for teaching/mentoring

Intro:

  1. excercise vs product
  2. data engineering vs EDA vs model vs business use / actions
  3. corporate info disclosure: sources + data model + gaps
  4. code or 'point-and-click', reproducible code
  5. raw or vendor datasets

Corporate disclosure:

  • who provides what information to whom and why
  • Russian corporate data
  • role of data providers (Interfax SPARK, PRIME Bir, etc)
  • good disclosuse at source (government service API) + own parsing + vendor GUI or API

Dig in boo dataset:

  • data access excercises
  • understanding data structure
  • refreshing accounting and corporate finance
  • constraints, data quality

Dig into problem-solving:

  • what decisions or actions someone needs to take (the product)
  • solution: "miracle" vs pipeline
  • face the client + know your resources
  • replicate known products or design your own (see "mircale")

Risks and pitfalls:

  • data product success not guaranteed - are ready for this?
  • "there is always a through-away" (F. Brooks)
  • failing on right process is better than just failing
  • need to manage risks (iterate, refine, update expectations, manage scope, face the client)

Notes:

NaN in int col

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.

use --dir option in command line interface

"""
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
"""

microgrant application

Клиент для получения данных бухгалтерской отчетности организаций Росстата

Направление - "открытые данные"

Открытые данные — это могут быть проекты по сбору общественно значимой информации с ее последующим преобразованием в машиночитаемый формат, а также создание общедоступных инструментов для сбора, анализа, обработки и визуализации данных.

[источник]

Краткое описание

Росстат выкладывает данные бухгалтерской отчетности организаций в виде файла за весь год, за что ему большое спасибо, но без метаданных - приходится интуитивно догадываться, что значат коды колонок. (Раньше было проблема с ошибками в исходном CSV файле, но сейчас с этим лучше.)

Помимо этого в файле используют разные денежные единицы – рубли, тысячи, млн рублей (например у РЖД) – это тоже никак не задокументировано.
Даже если все как-то прочитать, то данные портят компании- призраки. При всей строгости статотчетности в данных сидят компании с выручкой больше чем у Газпрома.

Я написал клиент на python'e, который позволяет сказать эти данные и считать в виде единообразного датафрейма pandas, чтобы потом делать выборки необходимых данных по размеру предприятий, отраслям, регионам и другим признакам. Соответственно, из pandas можно перекидывать данные в CSV и Excel.

Столбцы описаны в документации, а по компаниям-призракам предложен простой механизм фильтрации.

Репозитарий проекта:

https://github.com/ru-corporate/boo

Полезность

На этих данных работает целая индустрия сайтов информации о компаниях (см README проекта), а также они входят в состав услуг, которые предлагают коммерческие провайдеры информации - СПАРК, ПРАЙМ и другие. До появления клиента boo не было открытого способа, считать эти данные по всем компаниям РФ.

Я сам использую эти данные при подготовке учебных материалов по корпоративным финансам. Считаю, что они также полезны во всех сферах отраслевого и социально-экономического анализа, где мы хотим перейти на микро уровень отдельных предприятий (анализ налоговой база, развитие МСП, кредитование и т.д.).

На этих же данных построение рейтинги крупнейших компаний России, которые публикуют ведущие издания

Повышая доступность набора данных, мы даем большему числу СМИ и их читателей воспроизвести информацию.

В идеале видится ситуация, что сходив в булочную можно было бы узнать финансовое положение компании, которая продала вам хлеб и той, которая его испекла.

История проекта

В 2018 году Росстат улучшил качество данных, и отпала необходимость в парсинге битых строк, код клиента boo получилось упростить и так появились текущая версия в виде пакета pypi. Также с сайта Росстата пропали версии данных, но с этим можно жить.

Что у нас есть

  • все в репо на гитхабе и даже с тестами
  • документация на русском и английском языке (README.md)
  • примеры использования в ноутбуке Jupyter и на Google Colab

Что нужно от конкурса

  1. Visibility.
    Если честно сил и писать код и пиарить его нет - поэтому, если конкурс привлечет новых пользователей датасета, которые найдут недочеты и новые применения пакета. Немного странная ситуация – данные полезные, пользователей почти нет.

  2. Ответы на вопросы.

  • Можно ли ускорить релиз этих данных Росстатом? Правда ли что эти же данные коммерческие провайдеры информации получают раньше, чем выкладываются открытые данные? Почему так получается и как это поменять?

  • В машиночитаемой форме пропущены некоторые поля, которые есть в индивидуальной отчетности, но нет в сводной (например, налоги уплаченные помимо налога на прибыль). Как это можно поменять?

  1. Поучиться у других проектов
    Обмен опытом с другими разработчиками, которые ведут какие-то аналогичные проекты: как работают с пользователями, общаются ли госорганами-владельцами датасетов, как еще строят работу по проектах.

На что может пойти микрогрант

На что-то одно из:

  • подготовка сводной визуализации набора данных в разрезе отраслей и/или регионов
  • стыковка данных по организациям со сводной отраслевой статистикой (сравнить число организаций, объем выручки и т.д.)
  • добавление примеров анализа отдельных отраслей в https://github.com/ru-corporate/boo-industries
  • доработка issues проекта https://github.com/ru-corporate/boo/issues
  • другие направления, которые могут возникнуть при обсуждении проекта

Что хотелось бы сделать, но микрогрантом не достигнешь

  • Аналогичный клиент для данных ФНС по налогам компаний (публичные данные, которые нужно долго преобразовывать, с идентификатором по ОГРН, а у Росстата- ИНН).

  • Переходник между ИНН и ОГРН в виде публичного API или датасета.

  • Получить ОКВЭД в виде JSON?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.