Подводя итоги 2020 года

Привет от U-Net
Привет от U-Net

Привет, Хабр! Я люблю считать и собирать данные. 2020 год состоял из 8784 часов, 4874 из которых я смог учесть в собранной мною статистике. Я знаю как потратил 55% всего прошлого года! В этой статье я постараюсь доказать, что учиться в университете совсем не сложно, а также расскажу о своем методе учета времени, и заодно проанализирую собранные за год данные о временных затратах почти на все, чем я занимаюсь. С самого начала учебы в университете на старте каждого семестра я наблюдал вздыхающих студентов: “Ой ряды начались! А теперь страшный теорвер! Диффуры душат. Как же сложно закрыть ТАУ или случайные процессы”. И каждый раз мы сдавали экзамены, и каждый раз выдыхали с облегчением, ведь столько времени потратили, такую сложную задачу решили… А насколько сложную? А сколько времени? Чем дальше, тем чаще я задавался этими вопросами, ведь субъективные мнения такие субъективные. Мы ведь в техническом вузе учимся, где циферы? С тех пор как я стал хорошо учиться, меня все больше озадачивали суждения других студентов обо мне, мол просто с мозгами повезло. Причем на мой вопрос, сколько времени они ботали на этой неделе я часто слышал: “Ну не знаю, примерно часа два”. Недавно я смог совершенно четко самому себе отвечать на этот вопрос, и собрал доказательства в пользу очевидного тезиса: в вопросах учебы дело вовсе не в везении с объемом серого вещества в голове, а в количество потраченного времени.

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

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

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

Предобработка датасета

Посмотрим на датасет

Код/Результат
import math
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
import matplotlib.dates as dates
import matplotlib.dates as mdates
                
file_name = "CLK 31 12 20.xlsx"
sheet =  "Sheet 1"

df = pd.read_excel(io=file_name, sheet_name=sheet)

print(df)
print(df.info())
[2823 rows x 4 columns]
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2823 entries, 0 to 2822
Data columns (total 4 columns):
 #   Column              Non-Null Count  Dtype         
---  ------              --------------  -----         
 0   Project             2823 non-null   object        
 1   Description         2823 non-null   object        
 2   Start Date          2823 non-null   datetime64[ns]
 3   Duration (decimal)  2823 non-null   float64       
dtypes: datetime64[ns](1), float64(1), object(2)

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

Код/Результат
projects = df.Project.unique()
descriptions = df.Description.unique()
for project in projects:
    print("n Проект: ", project, "n Задачи:")
    for description in df[df.Project == project].Description.unique():
        print("       ", description)
Задача:  Rest 
 Подзадачи:
        Games
        Watching anime
        Watching films
        Kara no Shōjo
        Doki-Doki!

 Задача:  Life 
 Подзадачи:
        Sleep
        Walks

 Задача:  Study at home 
 Подзадачи:
        m_3_Other
        m_3_ILNT
        m_3_C-A DaP S
        m_3_Research work
        m_3_ET_in_SR
        m_3_Course_work
        m_3_IPT_in_IMR
        m_2_Practice
        m_2_English_courses
        m_2_AIS_MR
        m_2_HaSCS_IMR
        m_2_S-LaF_in_CS_IMR
        m_2_K_Practice
        m_2_Research work
        m_2_Course_work
        Other
        m_2_Other
        m_1_GT_MIMR
        m_1_OMaT
        m_1_Practice
        m_1_AB_ACS
        Schedule
        m_1_SDoAS
        m_1_English
        m_1_IS_MaR
        Master's dissertation
        b_8_Math for master's
        b_8_DepLoME
        b_8_GOSI
        b_8_AI
        b_8_Research work
        b_7_Prak 7
        b_8_Basics of designing
        b_8_VM
        b_8_Electronics

 Задача:  Development 
 Подзадачи:
        Data Science
        Drawing
        Guitar
        Reading books
        SQL for DS
        Japanese
        Writing
        Sport
        English
        Python
        Machine Learning
        Handmade
        Python finance
        Reading articles
        Programming

 Задача:  Studying at the University 
 Подзадачи:
        m_3_ET_in_SR
        m_3_English_courses
        m_3_IMR_CS_TA
        m_3_IPT_in_IMR
        m_3_C-A_DaP_S
        m_3_ILNT
        m_2_English_courses
        m_2_S-LaF_in_CS_IMR
        m_2_HaSCS_IMR
        m_2_K_Practice
        m_2_Practice
        m_1_AB_ACS
        m_1_GT_MIMR
        m_1_SDoAS
        m_1_English
        m_1_IS_MaR
        B&R Practice
        m_1_OMaT

b – значит бакалавриат, а m – магистратура. Циферки – это номер семестра. Остальное – название предметов или задач. Нижний предел в форме уникальности названий соблюден, а верхний у меня улетает в +бесконечность вместе с бритвой Оккама. нужно большей ассоциаций и зачеркнутого текста. Извиняюсь. Дальше удаляем из датафрейма ряды с данным по хендмейду, писательству и гитаре, потому что я тратил на это слишком уж мало времени. Хнык. Ну да ладно, когда-нибудь я отращу золотые руки, стану вообще писец и на гитаре игрец. Когда-нибудь потом… А сейчас подумаем, что мы хотим получить на выходе? Пожалуй, хотелось бы пронаблюдать динамику интеллектуальных похождений объекта исследования, так что будем строить графики зависимости времени работы над задачей от даты. Но, во-первых, записи в один день могут дублироваться, а во-вторых, в них есть куча пропусков, ведь не каждый день я занимаюсь сразу всеми делами. Дубликаты удаляем, пропуски заполняем Nan’ами, поскольку по жанру я должен посчитать всякие средние и отклонения.

Обработка дубликатов

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

def remove_duplicates(df):
    date = df["Start Date"].to_numpy()
    time = df["Duration (decimal)"].to_numpy()
    
    length = len(date)
    remove_list = []
    for i in range(length - 1):
        for j in range(i + 1, length):
            if date[i] == date[j]:
                time[i] += time[j]
                if not j  in remove_list:
                    remove_list.append(j)
    
    df = df.drop(df.index[remove_list])
    date = np.delete(date, remove_list)
    time = np.delete(time, remove_list)
    return df

Теперь просто пройдемся по всем подзадачам в датафрейме. Удалено около 800 дубликатов.

data = pd.DataFrame()

for project in projects:
    descriptions = df[df.Project == project].Description.unique()
    for description in descriptions:
        df_temp = df[df.Project == project]
        df_temp = df_temp[df_temp.Description == description]
        new = remove_duplicates(df_temp)
        data = data.append(new, ignore_index=True)
            
print(data.info())
df = data
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2095 entries, 0 to 2094
Data columns (total 4 columns):
 #   Column              Non-Null Count  Dtype         
---  ------              --------------  -----         
 0   Project             2095 non-null   object        
 1   Description         2095 non-null   object        
 2   Start Date          2095 non-null   datetime64[ns]
 3   Duration (decimal)  2095 non-null   float64       
dtypes: datetime64[ns](1), float64(1), object(2)

На данный момент мы можем обратиться к ячейкам со временем только по названию задачи, названию подзадачи и дате, но этого маловато. Хотелось бы провести некоторые обобщения, например, разбить данные по семестрам, свести вместе все данные по занятиям data science и тд. Для этого создается еще одна колонка, которая заполняется метками для обобщения данных: b7, b8, m1, m2, m3, games, DS и english.

Почти готово. Осталось только дописать метод для заполнения недостающих дат и пару методов для вывода графиков и статистики.

Коды методов
def reindex(data_frame, name='data', start_date='1-1-2019', end_date='12-31-20'):
    idx = pd.date_range(start_date, end_date)
    dates = pd.Index(pd.to_datetime(data_frame['Start Date'].tolist(), format="%Y%m%d"))
    
    column = data_frame['Duration (decimal)'].tolist()
    column = [float(i) for i in column]
    series = pd.Series(column, dates)
    series.index = pd.DatetimeIndex(series.index)
    series = series.reindex(idx, fill_value=0)
    
    data = series.to_frame(name=name)
    return data
  
def plot_kde(data_frame, col_name):
    fig = plt.figure(figsize=(14, 7))
    ax = fig.add_subplot(111)
    sns.distplot(data_frame[col_name], hist=True, ax=ax, bins=20)
    fig.savefig('kde.png', dpi=300)
# Помимо баров также прорисую линию среднего значения и среднее отклонение.   
def plot_bar(data_frame, img_name):
    fig = plt.figure(figsize=(20, 10))
    ax = fig.add_subplot(111)
    data_frame.plot.bar(ax=ax, legend=False)
    
    ax.xaxis.set_major_locator(dates.MonthLocator())
    ax.xaxis.set_major_formatter(dates.DateFormatter('nnn%bn'))
    plt.tight_layout()
    ax.tick_params(labelsize=20)
    ax.set_xlabel("Месяц 2020", fontsize=25)
    ax.set_ylabel("Время", fontsize=25)
    
    
    plt.axhline(y=data_frame.data.mean(), color='r', linestyle='-')
    x = list(range(0, data_frame.data.shape[0]))
    mean = data_frame.data.mean()
    std = data_frame.data.std()
    ax.fill_between(x,
                    (mean - std) if (mean - std) > 0 else 0,
                    mean + std,
                    color='silver')
    plt.tight_layout()
    fig.savefig(img_name, dpi=500)
    return ax
# Да, я хотел написать это своими руками :)    
def stat(data_frame, col_name):
    print("Sum: ".ljust(10), "%0.2f" % data_frame[col_name].sum())
    print("Mean: ".ljust(10), "%0.2f" % data_frame[col_name].mean())
    print("Std: ".ljust(10), "%0.2f" % data_frame[col_name].std())
    print("Min: ".ljust(10), data_frame[col_name].min())
    print("Max: ".ljust(10), data_frame[col_name].max())
    print("Zero: ".ljust(10), (data_frame[col_name] == 0).astype(int).sum())
    print("Not zero: ".ljust(10), (data_frame[col_name] != 0).astype(int).sum())

Анализ временных затрат на полезности и бесполезность

Пришло время смотреть на палочки заняться разведочным анализом! Начнем со сна. В этом случае пропуски в данных нужно заполнить не Nan-ами, а средним значением. Причем в некоторых случаях объект исследования действительно не спал сутки, а в некоторых просто забил на сохранение данных. Будем считать, что если встречается один пропуск посреди данных, то сутки были бессонными, а если пропусков сразу несколько, то поля нужно заполнить средним значением.

Код
start_date = '1-1-2020'
end_date = '12-31-2020'

sleep_data = df.loc[df['Description'].isin(['Sleep'])]
sleep_data = reindex(sleep_data,
                     start_date=start_date,
                     end_date=end_date)
sleep_data['data'] = sleep_data['data'].replace({0:np.nan})
sleep_arr = sleep_data['data'].to_numpy()


for i in range(1, len(sleep_arr - 1)):
    if math.isnan(sleep_arr[i]) and not math.isnan(sleep_arr[i - 1]) and not math.isnan(sleep_arr[i + 1]):
        sleep_arr[i] = 0
        
sleep_arr[np.isnan(sleep_arr)] = np.nanmean(sleep_arr)

sleep_data['data'] = sleep_arr
stat(sleep_data, 'data')
plot_bar(sleep_data, 'sleep.png')
plot_kde(sleep_data, 'data')

В итоге, за год я проспал 3224 часа. Для полноты картины стоит заметить, что в этом году всего было 8784 часа. Со средним ладно, а вот отклонение слишком большое. Ну и минимум с максимумом в виде 0 и 20 часов выглядят не очень. На добивании 16 суток без сна. Хорошо еще, что на графике не видно, как часто мой режим переворачивается вверх тормашками. Определенно, нужно что-то менять…

Можно было бы перевести во временной формат, но и без этого все понятно.
Sum:       3224.42
Mean:      8.81
Std:       3.28
Min:       0.0
Max:       20.0
Zero:      16
Not zero:  350

Ну и, следуя канонам жанра, добавлю график плотности распределения. Не будем забывать Гаусса, Колмогорова, Байеса и других великих!

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

Чтение книг

Итого 152 часа за год. На самом деле я читал книги 216 часов, но недостающая часть времени записана в DS, потому что читал я Рашку, Николенко и прочих. В целом, в этом году я читал мало, и объясняется это очень просто. Много читать, а точнее слушать книги, я стал в тот момент, когда вдруг заметил, что в универ мне ехать полтора часа в одну сторону, а кубик Рубика уже реально надоел, да и люди косятся. И не потому, что я гениально выучил целых восемь комбинаций, а из-за шума. Так вот в этом году я в университете почти не появлялся (из-за пандемии и уменьшения количества пар), отсюда и низкие показатели. Странно осознавать, как сильно внешние условия могут влиять на жизнь. А еще страннее объяснять знакомым, почему мне выгодно ехать в универ даже на одну пару.

Sum:       152.50
Mean:      0.42
Std:       0.89
Min:       0.0
Max:       7.73
Zero:      267
Not zero:  99
Рисование

Искусство и страх (годна книга, кстати). Ну тут все плохо. Получше, чем за все пять прошлых лет, но недостаточно. Однако, все собранные мною данные можно легко использовать как почву для поиска мотивации. За это время я перешел в digital и освоил несколько интересных инструментов и техник, так что почувствовал неплохой прирост качества, причем стоило этого всего 47 часов. Уф, а если за год я порисую часов эдак 100, или 160. Уф, это ведь всего пол часа в день… Но все равно заставить меня взять в руки планшет не для игры в osu, а для рисования очень и очень сложно.

Sum:       46.60
Mean:      0.13
Std:       0.58
Min:       0.0
Max:       5.8
Zero:      339
Not zero:  27
Английский язык

Ух как я жалею, что недостаточно ботал его раньше… Опять же мало, но лучше чем раньше. Причем за эти 90 часов я неплохо продвинулся, потому что вместо чтения и заучивания слов я решил пройтись по учебникам и прокачал грамматику, что радует.

Sum:       90.69
Mean:      0.25
Std:       0.58
Min:       0.0
Max:       3.13
Zero:      282
Not zero:  84
Японский язык

Оо, нихонго. Решил я в третий раз штурмовать учебник Струговой и в этот раз бросил его не на пятнадцатой и даже не на пятидесятой страницей, а аж на сто восьмидесятой! Когда садился ботать, задача казалась нереально сложной. Некоторые иероглифы имеют до пяти чтений, да еще и запоминаются ну реально тяжело. А когда вся дневная норма в пять страниц выпадала на грамматику, я вообще хотел заняться вообще чем угодно, только не этим (хоть за курсачи сесть). Но если взглянуть на данные, то потратил-то я всего 50 часов, а проработал много материала и сильно продвинулся. Ватащи ва нихонго во декимасу… сукощи декимасу… тотему сукощи декимасу… Ну ладно, декимасен не умею я, но прирост знаний меня впечатлил. На графике видны два пика мотивации и плато безнадежности. Выводы таковы. Большой ошибкой было выставлять чрезмерные нормы, и попытка жестко придерживаться расписания. Сначала я проходил пять страниц в день без выходных, потом добавил выходные, потом снизил объем до трех страниц, а потом… забил, выгорел. Впрочем, ничего нового.

Sum:       52.42
Mean:      0.14
Std:       0.45
Min:       0.0
Max:       3.18
Zero:      320
Not zero:  46
Игры

Да всего-то пара пабов в день, аим потренить.

Впереди большая статья расходов. Но куда деваться. Над этими данными реально стоит подумать, ведь целых 344 часа своей жизни я потратил черт пойми что. Круто конечно бахать в оsu на шестизвездочных картах, но… Кстати, взрыв в октябре связан с простой вещью – покупкой нового мощного компа. Сначала я написал здесь, что в общем-то можно и поиграть немного, расслабиться и отдохнуть, но себе-то зачем врать? Больше всего меня успокаивает рисование, а на втором месте крафт бумажных цветов. Игры же меня наоборот выводят из равновесия, так что никакой пользы тут быть не может.. Вот в новеллы поиграть можно, ведь изучать чужое творчество всегда интересно и даже полезно (кстати, пик в апреле это как раз новеллы, ибо сидеть на изоляции без интернетов тяжко). Вообще, над этим графиком можно думать очень долго. Говорить можно что угодно, но реальные данные лучше всего говорят о моих приоритетах. И картина получается невеселая, однако на нее нужно смотреть, потому что иначе можно утонуть в субъективизме.

Sum:       344.03
Mean:      0.94
Std:       1.62
Min:       0.0
Max:       12.0
Zero:      165
Not zero:  201
Data science

А теперь data science. Воспользуюсь размытостью данного понятия и засчитаю сюда вообще все, что связано с работой с данными. Конкретно этим направлением я стал интересоваться примерно в марте, а до этого просто кодил что-то для себя. 208 часов выглядят весьма неплохо, и тут есть над чем подумать. С одной стороны, я до сих пор не чувствую, что реально что-то знаю в этой области, но за это время я изучил немало новых методов, и лучше понял старые. А после курса от Anrew Ng я наконец-то приобрел общее понимание проблемы машинного обучения. Но больше всего меня радует то, что никто меня не заставляет этим заниматься, а я ботаю, потому что мне это реально нравится, и нравится все больше и больше.

Основными чекпоинтами можно выделить Python и машинное обучение в апреле (18 часов), курс Andrew Ng в октябре (32 часа), Глубокое обучение Николенко в ноябре (19 часов).

Sum:       208.30
Mean:      0.57
Std:       1.04
Min:       0.0
Max:       6.0
Zero:      254
Not zero:  112
Просмотр фильмовсериалованиме

Ну сериальчики под чайок это наше все. Можно даже пледик достать на +10 к ламповости. В целом, тут меня ничего не напрягает, и ограничивать себя в просмотре годного кино я не собираюсь. Однако, более полезные занятия точно нужно дотянуть до этих показателей. В апреле опять же самоизоляция и Breaking Bad. А выброс в ноябре связан с пиццей и ночным марафоном по просмотру аниме. И да, по идее, если присмотреться, то ближе к концу года можно найти периодичность, ведь основное время просмотра я стал переносить на выходные.

Sum:       271.24
Mean:      0.74
Std:       1.25
Min:       0.0
Max:       9.5
Zero:      220
Not zero:  146
Прогулки

В какой-то момент я начал затворничать, поэтому стал сохранять эти данные для мотивации в выползании из общаги на набережную. Помнится, рекорд был 95 дней подряд. Ну а последнее время лень матушка душит, а по учебе удаленка, так что вот. Выводы? Да не пойду я на улицу! Нет, я не сыч! Да, сижу у компуктера.

Sum:       192.04
Mean:      0.52
Std:       0.41
Min:       0.0
Max:       1.0
Zero:      128
Not zero:  238

Интересно, смогу ли я продать эти данные маркетологам?

Анализ временных затрат на учебу

Перейдем к главному – данным по учебе. Начну с последнего семестра бакалавриата. Сначала нужно слегка переписать методы вывода.

Код
def plot_bot(data_frame, start_date, end_date, year, img_name):
    descriptions = data_frame.Description.unique()
    df = pd.DataFrame(reindex(remove_duplicates(data_frame[data_frame.Description == descriptions[0]]),
                              name=descriptions[0],
                              start_date=start_date,
                              end_date=end_date))
    for description in descriptions[1:]:
        new = reindex(remove_duplicates(data_frame[data_frame['Description'] == description]),
                      name=description,
                      start_date=start_date, 
                      end_date=end_date)
        df[description] = new[description].to_numpy()
    fig = plt.figure(figsize=(20, 10))
    ax = fig.add_subplot(111)
    df[descriptions].plot(kind='bar', stacked=True, figsize=(30, 15), ax=ax)
    
    ax.xaxis.set_major_locator(dates.MonthLocator())
    ax.xaxis.set_major_formatter(dates.DateFormatter('nnn%bn'))
    ax.tick_params(labelsize=20)
    ax.set_xlabel("Месяц " + str(year), fontsize=25)
    ax.set_ylabel("Время", fontsize=25)
    ax.legend(fontsize=30)
    ax.grid(axis='y')
    
    df['Sum'] = df[list(df.columns)].sum(axis=1)
    #ax.set_xlim(243, 395) #m1
    #ax.set_xlim(45, 181) #m2
    #ax.set_xlim(245, 366) #m3
    plt.tight_layout()
    fig.savefig(img_name, dpi=300)
    return ax, df

Картина матплотибом: последний семестр учебы, прокрастинация душит. Вообще, в начале семестра я не так плохо работал, но это потому, что сессия намечалась на апрель. А когда я с ней покончил и остался один на один с дипломом, почему-то решил почти месяц ничего не делать. Как обычно. Причем чем больше задача, тем ближе к дедлайну я буду подбираться в безделии. Когда до сдачи диплома осталось около месяца, я таки взялся за работу, и поработал очень даже неплохо. 212 часов = 116 страниц, или одна страница каждые 1,8 часа. Ладно, по словам и строкам кода считать уже не буду. Ну а вообще, это было очень круто. Почти каждый день я полностью отдавался делу, видел результаты и решал интересную задачу. Правда через пару часов после успешной сдачи я стоял на автобусной остановке и думал над одним вопросом. “И чо?” Помню, с соседом по общаге мы собирались купить пару сигар и с пафосом раскурить их по поводу успешной защиты. Но сигары мы так и не купили, а в тот вечер стояли на балконе и давились дешевым табаком, при этом думая: “И ЧО???” Я долго думал, что дальше, и ничего лучше магистратуры не придумал. Сосед к концу года перебрался в другую страну на хорошую работу, а я остался, и видимо, останусь снова.

Ну а дальше была подготовка к поступлению в магистратуру. 66 часов матана и “Вы зачислены на бла бла бла”. Снова посчитаем. Если покрутить формулировки, то получается, что за два года я приобретаю ресурсы, которые стоят 400 тысяч рублей, ведь год обучения стоит 200 тысяч. Переворачиваем схему деньги=ресурсы в ресурсы=деньги и… “Маааам, так я работаю, целых 400 000 / 24 = 16 666 рублей в месяц зарабатываю!!!” А ведь еще можно посчитать стипендию! За первые шесть месяцев учебы это 13700. Делим на 66 часов подготовки к поступлению и получаем 208 рублей в час. Очень даже неплохо, ведь на прошлой работе я получал около 236 рублей в час, а долгосрочной пользы от этой работы было чуть меньше чем никакой.

Sum:       390.97
Mean:      1.07
Std:       2.10
Min:       0.0
Max:       10.0
Zero:      252
Not zero:  113

DepLoME_sum:  212
Math_for_masters:  66

b_8_Math_for_masters:     66
b_8_DepLoME:              212
b_8_GOSI:                 15
b_8_AI:                   28
b_8_Research work:        25
b_8_Basics of designing:  16
b_8_VM:                   12
b_8_Electronics:          13

Дальше первый семестр магистратуры. Ситуация выглядит получше, ведь работал я стабильнее, хотя ближе к сессии все же есть слабый перегиб. В итоге получается, что чтобы закрыть этот семестр на отлично мне потребовалось 234 часа (практика по B&R не считается). Если пересчитать стипендию, то выходит 96 рублей в час. Негусто, но лишним не будет. Кстати, когда я впервые пересчитывал эти часы, было удивительно, что в итоге нужно было тратить всего 1 час 20 минут в день, чтобы без проблем все сдать. С этого момента я перестал даже думать о нытье по поводу учебы, и совершенно перестал понимать других студентов в этом вопросе.

Sum:       234.95
Mean:      0.59
Std:       1.40
Min:       0.0
Max:       12.64
Zero:      296
Not zero:  99

Average per day:  1.22

Studying at the university:  62
Study at home:  172

m_1_GT_MIMR:              34
m_1_OMaT:                 13
m_1_Practice:             56
m_1_AB_ACS:               52
m_1_SDoAS:                18
m_1_English:              15
m_1_IS_MaR:               28

Второй семестр маги. Прокрастинатор возвращается. Идея так распределить время работы явно была плохой, но я справился. А вот нервные клетки все равно не вернуть. Всего на второй семестр ушло 165 часов. Неплохо. Ну и по стипендии. Выходит 152 рубля в час. Сойдет. Кстати забавно, что в университете я провел всего 12 часов. Пандемия, что еще сказать.

Sum:       165.84
Mean:      0.45
Std:       1.21
Min:       0.0
Max:       7.97
Zero:      301
Not zero:  65

Average per day:  0.92

Studying at the university:  12
Study at home:  153

m_2_Practice:             29
m_2_AIS_MR:               7
m_2_HaSCS_IMR:            48
m_2_S-LaF_in_CS_IMR:      12
m_2_K_Practice:           18
m_2_Research work:        40
m_2_Course_work:          8

Ну и третий семестр маги. Было потрачено всего 58 часов, а нужно еще часов эдак 120. В общем, январь у меня будет веселым. Люблю наступать на грабли, что поделать.

Sum:       58.60
Mean:      0.16
Std:       0.58
Min:       0.0
Max:       4.5
Zero:      327
Not zero:  39

Studying at the university:  15
Study at home:  43

m_3_Other:                1
m_3_ILNT:                 6
m_3_C-A DaP S:            0
m_3_Research work:        5
m_3_ET_in_SR:             24
m_3_Course_work:          4

Ну и сведу все вместе. Я думал, что пик самообразования был в августе-сентябре, но и все остальное время работа велась неплохо. Разве что летом полный провал, ну и ближе к новому году тоже.

Study:        787
Development:  492
Rest:         650

И еще раз сведу все вместе для 2020 года.

                Time, h  Time, %  Time per day
Nan                3910     44.5          10.7
Sleep              3224     36.7           8.8
Games               344      3.9           0.9
Study               295      3.4           0.8
Watching films      271      3.1           0.7
DS                  208      2.4           0.6
Walks               192      2.2           0.5
Reading books       152      1.7           0.4
English              90      1.0           0.2
Japanese             52      0.6           0.1
Drawing              46      0.5           0.1

Заключение

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

Вторым открытие для меня стало количество времени, которое я потратил на учебу. В первом семестре мне потребовалось 235 часов, чтобы закрыться на отлично и получать в среднем 96 рублей за потраченный на учебу час. Ребят, мне платили за мое же образование! В течение шести месяцев это 1 час 13 минут в день без выходных, или 2 часа в день с выходными. Что в этом сложного? И больше всего этот вопрос я задавал самому себе. Сложного ничего нет, просто мозг по-другому видит ситуацию. А точнее не видит, попробуй ему объясни, зачем тратить энергию на что-то далекое и не обязательно светлое. На второй семестр потребовалось вообще 165 часов с оплатой в 152 рубля за час. Это 55 минут в день без выходных, или 1 час 22 минуты в день с выходными. Опять же ничего сложного в этом нет.

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

P.S.

Ну что, читатель. Если Вы добрались до конца статьи, а может даже открыли пару спойлеров, то я могу со спокойной совестью сохранить посвященное этой работе время под меткой “Писательство”. Девять часов получилось. Не думал я, что так сложно формулировать свои мысли. Вот бы еще научиться их доносить… О чем это я, ответы на вопросы:

1) Что за картинка в начале статьи? – Эту картинку выдал мне U-Net, когда я пытался провести сегментацию двух кирпичей. 🙂

2) Сколько времени уходит на сбор такой статистики? – Не больше пяти минут в день. Согласитесь, это время можно было потратить намного бесполезнее.

3) Зачем я это делаю и что дальше? – А это хороший вопрос. На самом деле все эти графики появились не из-за того, что год назад я начал интересоваться Data Science. Наоборот, в каком-то смысле я стал интересоваться темой данных еще восемь лет назад, когда открыл блокнот и записал: “Кажется, я чувствую необходимость вести дневник”. С тех пор я собрал кучу разных записей, заметок, статистики по временным и денежным затратам и так далее. Например, сейчас у меня имеется 1089 страниц дневниковых записей, которые хотелось бы прогнать через несколько слоев LSTM. Тут должно быть интересно, ведь на 400 тысячах слов уже можно что-то научить. Ну и все остальное можно проанализировать хотя бы ради интереса. Например, в 2020-том я потратил на обновление железа больше половины всех денег, что потратил за год. Может я в итоге покопаюсь во всем этом, а может быть и нет. А вдруг, вдруг эти данные пригодятся для воссоздания моей личности в будущем?! По крайней мере, эти привычки сохранительства приучают меня замечать детали, обдумывать, соотносить и т.п. Хотя, это лишь мое субъективное мнение.

Кстати, кроме удовлетворения собственного интереса такой подход может принести пользу другим людям. Меня всегда очень обнадеживают численные представления объема работы, лучше всего во времени. Хорошим примером может быть чтение книг. Одно дело взять в руки Python и машинное обучение на 420 страниц, а другое дело знать, что у какого-то робототехника на ее изучение ушло 18 часов. Это совсем немного, дерзайте. Аналогичную статистику можно собрать по поводу чего угодно, и кому-то она возможно принесет пользу. Но это потом, всё потом)

P.P.S.

Ну вот я и написал свою первую статью на Хабр. Надеюсь, она была интересной, а может быть даже полезной. В любом случае, жду от Вас любые конструктивные отзывы и мысли. Спасибо за прочтение!

Let’s block ads! (Why?)

Read More

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *