Что делает лямбда-функция в параметре info_dict файла summary_col в этом коде? - PullRequest
0 голосов
/ 26 января 2019

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

summary_col(
        [reg0,reg1,reg2,reg3],
        stars=True,
        float_format='%0.2f',
        info_dict = {
                'N':lambda x: "{0:d}".format(int(x.nobs)),
                'R2':lambda x: "{:.2f}".format(x.rsquared)
        })

Я посмотрел лямбда-функции. У меня достаточно приличное понимание того, как они работают. Аспекты кода, которые я понимаю:

  1. info_dict - это словарь значений, который можно вызвать, если вы хотите включить их в сводную статистику

  2. лямбда-функция работает, вызывая анонимную функцию «лямбда-х», затем вы помещаете : и перечисляете, какую операцию вы хотите выполнить (т.е. х + 5), а затем, если вы уже знаете, какие параметры вы хотите для запуска вы можете добавить в список через секунду ":".

  3. {0:d} округляется до целых чисел, что имеет смысл для наблюдений. Хотя я не знаю, почему ты не можешь просто сказать {%.f}. Может быть, это потому, что первый возвращает явное int, а второй возвращает число с плавающей точкой, которое выглядит как int.

  4. {:.2f} вернет число с двумя десятичными знаками

Я не совсем понимаю, что делает somestring.format(). Каким-то образом x определяется как результат регрессии, как я полагаю, а x.nobs - это переменная "число наблюдений". Аналогично для x.rsquared.

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

1 Ответ

0 голосов
/ 26 января 2019

Давайте немного разберемся с этим, чтобы было понятно, что происходит:

summary_col(
    [reg0,reg1,reg2,reg3],
    stars=True,
    float_format='%0.2f',
    info_dict={
        'N':lambda x: "{0:d}".format(int(x.nobs)),
        'R2':lambda x: "{:.2f}".format(x.rsquared)
    }
)

Объект summary_col принимает некоторый ввод, первый аргумент - список объектов регрессии, [reg0,reg1,reg2,reg3].Тогда есть три именованных аргумента, stars, float_format и info_dict.Когда мы передаем список объектов регрессии в качестве первого аргумента, я считаю, что лямбда-функция знает, как применять анонимную функцию к каждому объекту.Поэтому все, что делает info_dict, - это создание словаря с двумя ключами N и R2, которые сопоставляются со строками.Когда на элементы x.nobs и x.rsquared ссылаются в лямбда-функциях, они применяются к объектам регрессии из-за контекста, в котором они используются.

Если вы попытаетесь использовать лямбду в этой строке кода на чем-то, чего нет в объектах регрессии, вы почти наверняка получите ошибку.Ключ находится в контексте, к которому применяется лямбда.

Хорошим примером в контексте лямбда-функций является перебор словаря и сортировка по ключу и значению.

# sort the dict by value first, and key second...
# x is inferred from the context (my_dict.items())
for key, value in sorted(my_dict.items(), key=lambda x: (x[1], x[0]):
    print(key, value)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...