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

Заметка

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

Функция конвертации секунд в более крупные периоды времени (Python)

Заметка

Функция  превращает количество секунд в удобночитаемые человеком  значения времени.

def seconds_to_str(uptime):
    """
       Функция принимает числовое значение секунд и возвращает строку в формате:
       '3 нед., 1 дн., 18 час., 23 мин., 3 сек.'
       Доли секунды округляются до секунд.
    """

    seconds = ''
    minutes = ''
    hours = ''
    days = ''
    weeks = ''
    uptime = round(uptime, 0)

    if uptime >= 60:
        minutes = uptime // 60
        if minutes >= 60:
            hours = minutes // 60
            if hours >= 24:
                days = hours // 24
                if days >= 7:
                    weeks = days // 7
                    seconds, minutes, hours, days, weeks = str(int(uptime % 60)), str(int(minutes % 60)), str(
                        int(hours % 24)), str(int(days % 7)), str(int(weeks))
                else:
                    seconds, minutes, hours, days = str(int(uptime % 60)), str(int(minutes % 60)), str(
                        int(hours % 24)), str(int(days))
            else:
                seconds, minutes, hours = str(int(uptime % 60)), str(int(minutes % 60)), str(int(hours))
        else:
            seconds, minutes = str(int(uptime % 60)), str(int(minutes))
    else:
        seconds = str(int(uptime // 1))

    if weeks:
        weeks = weeks + ' нед.,'
    if days:
        days = days + ' дн.,'
    if hours:
        hours = hours + ' час.,'
    if minutes:
        minutes = minutes + ' мин.,'
    if seconds:
        seconds = seconds + ' сек.'
    res = weeks + ' ' + days + ' ' + hours + ' ' + minutes + ' ' + seconds
    print(res.strip())
    return res.strip()

 

Функция определения времени суток (Python)

Заметка

Первый вариант: на основе словаря, более быстрый вариант:

import datetime
import time

def time_of_day_dict(dt=None, ts=None, tod_dict=None):
    '''
    Принимает объект datetime (dt) или timestamp (ts), и словарь tod_dict {час : наименование времени}
    Возвращает строку c временем суток. 
    При отсутствии аргументов - возвращает строку с текущим временем суток.

        Словарь по умолчанию: 
        {0: 'ночь', 1: 'ночь', 2: 'ночь',
         3: 'раннее утро', 4: 'раннее утро', 5: 'раннее утро',
         6: 'утро', 7: 'утро', 8: 'утро',
         9: 'первая половина дня', 10: 'первая половина дня', 11: 'первая половина дня',
         12: 'обед', 13: 'обед', 14: 'обед',
         15: 'после обеда', 16: 'после обеда', 17: 'после обеда',
         18: 'вечер', 19: 'вечер', 20: 'вечер',
         21: 'поздний вечер', 22: 'поздний вечер', 23: 'поздний вечер' }

    Eсли час не отражен в словаре, возвращает None
    Требует import datetime
    N.B. ф-я в 2-3 раза быстрее, чем ф-я time_of_day()
    '''

    # определение словаря
    if tod_dict:
        pass
    else:
        tod_dict = {0: 'ночь', 1: 'ночь', 2: 'ночь',
                    3: 'раннее утро', 4: 'раннее утро', 5: 'раннее утро',
                    6: 'утро', 7: 'утро', 8: 'утро',
                    9: 'первая половина дня', 10: 'первая половина дня', 11: 'первая половина дня',
                    12: 'обед', 13: 'обед', 14: 'обед',
                    15: 'после обеда', 16: 'после обеда', 17: 'после обеда',
                    18: 'вечер', 19: 'вечер', 20: 'вечер',
                    21: 'поздний вечер', 22: 'поздний вечер', 23: 'поздний вечер'}

    # определение оцениваемого времени
    if dt:
        if isinstance(dt, datetime.datetime):
            dt = dt
        else:
            print('некорректный формат dt: %s \n требуется объект datetime.datetime' % (type(dt)))
            return None
    elif ts:
        if isinstance(ts, (int, float)):
            if ts > 0:
                dt = datetime.datetime.fromtimestamp(ts)
                print(dt.ctime())
            else:
                print('отрицательное значение ts недопустимо')
                return None
        else:
            print('некорректный формат ts: %s \n требуется значение int или float' % (type(ts)))
            return None
    else:
        dt = datetime.datetime.now()
    h = dt.hour

    # подбор
    if h in tod_dict:
        tod = tod_dict[h]
        return tod
    else:
        print('Значение времени отсутствует в словаре')
        return None

 

Второй вариант, как пример того, как делать не надо ))

def time_of_day(dt=None, ts=None, tod_dict=None):
    '''
    Принимает объект datetime (dt) или timestamp (ts), и словарь tod_dict 
    {наименование времени : час окончания(включительно)}

    Возвращает строку c временем суток 
    При отсутствии аргументов - возвращает строку с текущим временем суток.

        Словарь по умолчанию: 
        {'ночь' : 3, 'раннее утро' : 6, 'утро' : 9, 'первая половина дня' : 12,
         'обед' : 15, 'после обеда' : 18, 'вечер' : 21, 'поздний вечер' : 24, }

    Если час не отражен в словаре, возвращает None
    Требует import datetime
    '''

    # определение словаря
    if tod_dict:
        pass
    else:
        tod_dict = {'ночь': 3, 'раннее утро': 6, 'утро': 9, 'первая половина дня': 12,
                    'обед': 15, 'после обеда': 18, 'вечер': 21, 'поздний вечер': 24, }
    sorted_tod = sorted(tod_dict.items(), key=lambda x: x[1], reverse=False)
    # print(sorted_tod)

    # определение оцениваемого времени
    if dt:
        if isinstance(dt, datetime.datetime):
            dt = dt
        else:
            print('некорректный формат dt: %s \n требуется объект datetime.datetime' % (type(dt)))
            return None
    elif ts:
        if isinstance(ts, (int, float)):
            if ts > 0:
                dt = datetime.datetime.fromtimestamp(ts)
                print(dt.ctime())
            else:
                print('отрицательное значение ts недопустимо')
                return None

        else:
            print('некорректный формат ts: %s \n требуется значение int или float' % (type(ts)))
            return None
    else:
        dt = datetime.datetime.now()
    h = dt.hour

    # подбор
    for time in sorted_tod:
        if h <= time[1]:
            tod = time[0]
            return tod
    print('Значение времени отсутствует в словаре')
    return None

 

Сеть сделанных дел “я полезен”/’i.useful’

Заметка

да-да, почти "я сделаль" :)) или набросок очередной около-бизнес идеи

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

Концепция: социальная сеть - аналог резюме, где указываются завершенные или выполняемые дела, несущие потенциальную пользу другим людям.

Читать далее

Электрокоммутационный блок для умного дома

Заметка

Назначение: управление электрическими линиями в доме/квартире.

Модульная коробка, позволяющая целенаправленно включать/отключать электрические линии.

Размещается после блоков УЗО, желательна на DIN-рейке.

Опционально — имеется возможность учёта времени работы/тока или передачи состояния (включен/выключен).

Управление — витая пара или вай-фай.

Может быть совмещён с автоматами

Устройство:
1. Коммутация - электромагнитное реле (управляющий сигнал 5 или 3,3 V, коммутируемый ток - не менее 16 А)
2. Опционально изменяемое количество нормально включенных и нормальновыключенных реле
3. Управляющий вход - витая пара
4. Управляющий блок - плата класса Ардуино или промышленный аналог с количеством GPIO по количеству коммутируемых силовых каналов
5. Желателен Ethernet порт или возможность его подключения или Wi-Fi модуль

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

Роботизированный хвост человека или немного пятничного киберпанка.

Заметка


Girl with robo tailНемного несерьезные размышления на тему "Зачем человеку мог бы пригодиться роботизированный хвост?"

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

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

Читать далее

Рюкзак ближайшего будущего: предварительные бизнес-требования

Заметка

Без ранжирования по важности:

1. автоматическая утяжка для минимизации объема и перемещения веса к спине (вплоть до практической незаметности в пустом состоянии)
2. запас энергии (пауэрбанк)
3. запас воды (кэмелбек с системой гидратации)
4. удобный перевод на грудь
5. система заднего вида (зеркала?)
6.  система быстрого сброса
7. электроника:
- геопозиционирование,
- шагомер,
- датчики температуры,  CO2, влажности, давления,
- аларм-сирена,
- взаимодействие со смартфоном/гарнитурой,
- возможно - центральный сервер для носимой электроники
8.принудительная вентиляция спины
9. защита органов и позвоночника
10. модульность (сопряжение с доп.подсумками в т.ч. - ALICE, MOLLE(???))
11. перераспределение веса (вверх-вниз, смена опоры с плеч на поясницу)
12. ограничение несанкционированного доступа (замок?)
13. городской (до 30 литров)
14. утилитарный (немаркость, прочность, универсальность, стандарты А4, ноутбук, защита содержимого,)
15. корректор осанки
16. индикация и подсветка, также - светоотражающие элементы, которые могут быть спрятаны)
17. вес ??

Возможные способы реализации:

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

Проблемы:
1. Вес
2. Батареи (запрет к перевозу в багаже, влияние на вес)
3. "съедание" полезного объема исполнительными механизмами
4. эргономика будет отличаться от привычной, требуется слом парадигмы пользования