Коннектом. Или нью-эйджа псто.

Если ты плюнешь в коллектив — коллектив утрется.
Если коллектив плюнет в тебя — ты утонешь
.

У человека вроде как порядка 100 млрд. нейронов. Из них в коре головного мозга — около 16 миллиардов. Согласно общепринятой на данный момент концепции, во взаимодействии нейронов и кроется основа, на которой появилось человеческое сознание — способность переживать события внешнего/внутреннего мира, а также выдавать ответную реакцию на них. Мечты, желания, переживания/страдания планирование , пофигизм и вот это вот все — наверняка живут где-то там же.

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

Человеков на планете Земля — чуть меньше 10 млрд, то есть на порядок меньше (можно написать «всего на порядок», но не буду), чем нейронов вообще, и почти столько же, сколько в коре головного мозга. Человеки, помимо того что едят, еще и так или иначе общаются друг с другом. Передают информацию разными способами. Устно, письменно, один к одному, один ко многим. Кто-то с удовольствием передает слухи, кто-то выступает цензором. Кто-то приукрашивает, кто-то фильтрует. Если раньше количество социальных связей худо-бедно укладывалось в число Данбара, то с появлением интернетов и всяких соцсетей, счет легко идет на тысячи связей для каждого человека. При этом география и языковой барьер уже не играют значительной роли.

Т.е. модельно принципиальной разницы между мозгом человека и человечеством нет. Вроде как количество нейронов все еще значительно превышает количество людей, но тут имеет смысл вспомнить про растущую неживую сеть — сервера, сайты, устройства, простигосподи IoT, да даже просто ПК, подключенные к сети — все они тоже являются обработчиками/проводниками/усилителями/блокировщиками сигналов и напрямую взаимодействуют с коннектомом, составленным из людей. Можно до кучи прилепить всю остальную флору с фауной, которая так или иначе взаимодействует друг с другом в лайт-режиме. В данном случае транзисторы попроще, зато их заметно побольше.

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

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

Правда, пока не могу придумать, что могло бы послужить аналогом отбора (структура мозга же сформировались не просто так, а в результате отбора). Но, вполне возможно, что способность к самоосознанию у человека — всего лишь побочный эффект сложности мозга, что позволяет допускать, что сознанием может обладать любая структура достаточной сложности. В конце-концов цивилизация «философских зомби» должна быть не менее успешной, чем цивилизация людей, осознающих собственное существование.

В общем, если вам встретится блаженный, заливающий про эгрегоры, трансерфинг реальности и «сообщения в космос» — подумайте, может он и не такой уж и сумасшедший ))

Функция расчета 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 года на текущий момент — проведение оптоволоконного интернета на дачу.

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

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

номер город колич. признак
0 2 москва 1
1 3 питер 2
2 4 саратов 3
3 5 москва 4
4 6 питер 3
5 7 москва 4
6 8 сыктывкар 5
7 9 саратов 6

москва питер саратов сыктывкар
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

номер город колич. признак москва питер саратов сыктывкар
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