Функция расчета TWR (time weighted return)

def twr_eavaluate(df):
    
    """Ф-я рассчитывает time weighted return  по данным датафрейма ['AUM_DATE', 'POSITION_VALUE','NET_INPUT']

     AUM_DATE - колонка с датами
     POSITION_VALUE - оценочная  стоимость портфеля на дату
     NET_INPUT - вводы-выводы средств на дату (ввод - вывод)"""

    df.sort_values(by='AUM_DATE', inplace=True)

    # порфтель на  день-1
    prev_portf = [0] + df['POSITION_VALUE'].tolist()[:-1]
    df['prev_portf'] = prev_portf

    df['delta_for_twr'] = (df['POSITION_VALUE'] - df['NET_INPUT']) / df['prev_portf']

    # замена пропусков
    df = df.replace([np.inf, -np.inf], np.nan)
    df.dropna(axis=0, subset=['delta_for_twr'], inplace=True)
    twr = df['delta_for_twr'].prod() - 1
    return twr

Простая функция расчета TWR (time-weighted return) для определения эффективности вложений с учетом вводов и выводов средств

Функция поиска ISIN в строке

Википедия:

Международный идентификационный код ценной бумаги (англ. International Securities Identification Number, общепринятое сокращение — ISIN) — 12-разрядный буквенно-цифровой код, однозначно идентифицирующий ценную бумагу.

import re


def look_for_isins(string):

    ''' Возвращает список ISIN из переданной строки'''

    isins = []
    isin_pattern = '[A-Z]{2}\w{9}\d{1}'
    f = re.findall(isin_pattern, string)
    for i in f:
        isins.append(i)
    return isins

Блок питания. Рессюрекшн.

Утро началось с недоброго электрического трещания блока питания ноутбука. Соответственно, сам ноутбук то заряжался, то нет, в зависимости от положения провода.

Вскрытие показало, что распаялся контакт гнезда штепселя 220В. Штырек болтался в отверстии платы, то контача, то нет, задорно искря. Капля припоя решила вопрос, но вот синей изоленты не было, пришлось крепить разобранный корпус красной. Не знаю, долго ли продержится.

Парсинг писем из Outlook в Python

Python-cкрипт разбора писем из папки "Входящие" Outlook. Сохранение письма как html-страницы с сохранением отображения вложенных картинок

import win32com.client
import os
import datetime
import re

outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder(6).Items  # 6- папка Входящие Outlook
msg = inbox.GetLast() # последнее письмо в ящике

path  = r'C:\Users\user\Documents' # папка для сохранения вложений письма

while msg :
    subject = str(msg.Subject) # тема письма
    msg_date = datetime.datetime.strptime(str(msg.SentOn)[0:19], '%Y-%m-%d %H:%M:%S')
    to_list = str(msg.To).split(';') # список получателей
    sender = msg.SenderName # отправитель
    text = str(msg.Body) # текст письма
    html_text = str(msg.HTMLBody) # html код письма
    
    # сохранение вложений
    att_list=[]
    for att in msg.Attachments:
        att_name = att.FileName
        att.SaveAsFile(path + '\\' + att_name) # сохранение файла вложения
        att_list.append(att_name)  
    
    # корректировка html-кода для отражения вложенных картинок (замена адреса картинок на локальный вариант)
    if att_list:
        for fname in att_list:
            # паттерн ссылки на вставленное изображение
            pattern = '\"cid:' + fname  + '@[\w]{,20}.[\w]{,20}\"'
            html_text = re.sub(pattern, '\"' + fname + '\"', html_text, count=5)
    
    # создание  html-страницы с телом письма
    with open(path + '\\' + 'index_.html', 'w', encoding='utf8') as file:
        file.write(html_text)
    
    msg = inbox.GetPrevious() # переход к следующему письму

Оживить старый ноут с Windows7.

Как оказалось, достаточно грохнуть процесс svchost.exe. Эта тварь пожирала память, как не в себя.

В строке поиска: services.msc - Enter
В открывшемся окне "Службы" выделить: Центр обновления Windows. Правой кнопкой выбрать "Остановить".

Чтобы прибить окончательно: щелчок правой кнопкой мыши - Свойства - Тип запуска, выбрать: Отключена.

Вуаля! на компе снова можно работать. Правда обновления остановились еще на том моменте, когда в Москве переводилось время на летнее. 🙂

Определенно…

...определенно - лучшее решение 2020 года на текущий момент - проведение оптоволоконного интернета на дачу.

Мир, определенно изменится. По крайней мере - многие не вернутся с удаленки в офисы. То, о чем так долго мечтали мизантропы, вот-вот сбудется )

Перевод категориальных признаков датафрейма в бинарные

Заметка

test_df
номер город колич. признак
0 2 москва 1
1 3 питер 2
2 4 саратов 3
3 5 москва 4
4 6 питер 3
5 7 москва 4
6 8 сыктывкар 5
7 9 саратов 6
df_nonbinary = pd.get_dummies(test_df['город'], )
df_nonbinary 
москва питер саратов сыктывкар
0 1.0 0.0 0.0 0.0
1 0.0 1.0 0.0 0.0
2 0.0 0.0 1.0 0.0
3 1.0 0.0 0.0 0.0
4 0.0 1.0 0.0 0.0
5 1.0 0.0 0.0 0.0
6 0.0 0.0 0.0 1.0
7 0.0 0.0 1.0 0.0
new_df = pd.concat([test_df, df_nonbinary], axis=1 )
new_df
номер город колич. признак москва питер саратов сыктывкар
0 2 москва 1 1.0 0.0 0.0 0.0
1 3 питер 2 0.0 1.0 0.0 0.0
2 4 саратов 3 0.0 0.0 1.0 0.0
3 5 москва 4 1.0 0.0 0.0 0.0
4 6 питер 3 0.0 1.0 0.0 0.0
5 7 москва 4 1.0 0.0 0.0 0.0
6 8 сыктывкар 5 0.0 0.0 0.0 1.0
7 9 саратов 6 0.0 0.0 1.0 0.0

Ссылка

Amazon собирается сделать Alexa офисным сотрудником

Интеллект появится там, где будет разнообразие входящей информации. Как вариант - на стыке голосового бота и устройств IoT. Это, конечно, будет только первым шагом.

Для сильного ИИ потребуется поток и ассортимент данных, сравнимый с таковым у человека. А это, ни много ни мало, постоянный поток аудио, визуальной, тактильной (включая самоощущение), обонятельно-вкусовой, а также оценочной информации как минимум 8-10 часов в сутки.