Набор текста давно превратился в неотъемлемую часть нашей повседневной рутины. Поэтому умение оптимизировать процесс ввода текста с клавиатуры приносит огромную пользу тем, кто большую часть своего рабочего времени проводит за компьютером.
В статье я расскажу, как организован этот процесс у меня, и поделюсь скриптами и пакетами, которые использую для фиксации и визуализации своей производительности.
Зачем оптимизировать процесс набора текста?
Я инженер по машинному обучению, а значит — провожу большую часть рабочего времени за компьютером, занимаясь созданием моделей и написанием кода. Три года назад, изучая в магистратуре применение генеративно-состязательных сетей, я решил повысить продуктивность и немного поработать над своими навыками набора текста.
Научился печатать вслепую и уже через три месяца скорость печати у меня возросла с 60 до 95 слов в минуту (сегодня моя средняя скорость составляет около 105 слов в минуту). Это производительность при обычном вводе текста с клавиатуры. Скорость написания кода увеличилась с 35 до примерно 55–60 слов в минуту.
Такой прогресс здорово пригодился в работе и помог в моем хобби (в написании текстов). Думается, что нам всем будет полезно немного попрактиковаться в наборе текста.
Оптимизация набора текста
Перейдем сразу к коду! Весь процесс набора текста у меня организован очень просто и занимает около 5–10 минут в день.
Для того, чтобы практиковаться в наборе текста в терминале, я использую mltype. Это замечательный инструмент CLI (интерфейса командной строки): очень гибкий, с открытым исходным кодом и довольно аккуратный!
Для автоматизации процесса набора текста перейдем ко скрипту:
1. Импортируем зависимости
import os
import pathlib
import random
import pandas as pd
from datetime import datetime
import sys
import plotly.express as px
import plotly.graph_objs as go
2. Запускаем процесс набора текста с помощью mltype
def typePractice(typingDataset):
files = list(typingDataset.iterdir())
file = random.choice(files)
with open(file, "r") as f:
numberOfLines = len(f.readlines()) - 1
if numberOfLines<=1:
numberOfLines=2
elif numberOfLines>10:
numberOfLines=10
os.system(f"mlt file --n-lines {numberOfLines} {file}")
typingDatasetFolder = "path/to/your/typingDataset"
typingDataset = pathlib.Path(typingDatasetFolder)
typingPerformance = "path/to/your/typingPerformance.csv"
df = pd.read_csv(typingPerformance)
typePractice(typingDataset)
Здесь мы получаем все файлы Python в папке typingDataset
, из которой выбираем случайный файл и отдаем его в вызов инструмента интерфейса командной строки mltype
. Задаем количество строк этого файла параметром --n-lines
, вот и все. Интерфейс для набора текста выглядит следующим образом:
Довольно минималистичный и работает отлично.
3. Фиксируем производительность при вводе текста и обновляем csv-файл, включив в него эту производительность
def updateTypingPerformance(df,datedPerformance, typingDfPath="path/to/typingPerformance.csv"):
df.loc[len(df)] = datedPerformance
df.to_csv(typingDfPath, index=False)
return df
cont = "y"
while cont=="y":
performance = []
typePractice(typingDataset)
date = str(datetime.now())
wpm = input("What was the wpm?")
acc = input("Waht was the accuracy?")
performance.append(date)
performance.append(wpm)
performance.append(acc)
updateTypingPerformance(df,performance)
cont = input("Continue typing?")
Здесь мы получаем текущее время и фиксируем производительность с помощью встроенного метода Python input()
(мне хотелось автоматизировать эту часть, но не удалось найти простой способ сделать это непосредственно из mltype
).
Задействуем цикл while
для бесконечного продолжения: так csv-файл с данными о производительности будет каждый раз обновляться.
4. Отображаем на графике
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
from matplotlib import dates as mdates
from matplotlib import ticker
def plotTyping(typingDf):
typingDf["wpm"] = pd.to_numeric(typingDf["wpm"])
typingDf["accuracy"] = pd.to_numeric(typingDf["accuracy"])
typingDf["date"] = pd.to_datetime(typingDf["date"])
wpmAcc = typingDf.groupby("date")["wpm", "accuracy"].mean()
wpm = wpmAcc["wpm"]
acc = wpmAcc["accuracy"]
fig, ax = plt.subplots(figsize=(15,7))
ax.plot(wpm,label="wpm trend",color="red")
ax.plot(acc, label="accuracy", color="green")
# wpmAcc["wpm"].plot(label="wpm trend",color="red")
# wpmAcc["accuracy"].plot(label="accuracy",color="green")
ax.set_xticks(df["date"])
ax.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m-%d"))
ax.xaxis.set_minor_formatter(mdates.DateFormatter("%Y-%m-%d"))
plt.gcf().autofmt_xdate()
ax.xaxis.set_major_locator(ticker.MultipleLocator(5))
plt.xticks(rotation=45)
plt.legend()
plt.show()
if len(sys.argv)>1:
if sys.argv[1]=="plot":
plotTyping(df)
Здесь мы получаем простой график для текущей производительности при наборе текста. Зеленым цветом обозначены слова в минуту, а красным — процент точности. Как видите из графика, точность была в среднем выше 90 %, а скорость набора текста при написании кода — от 50 до 60 слов в минуту.
Заключение
Освоить быстрый набор текста — это круто, а написать код для автоматизации этого процесса — еще круче. Надеюсь, что статья оказалась полезной.
Спасибо за внимание!
Читайте также:
- Декораторы в Python за три минуты
- 4 Продвинутых приема работы с функциями Python, о которых вы могли…
- Стилизация фотографий под мультфильмы с помощью Python
Читайте нас в Telegram, VK и Яндекс.Дзен
Перевод статьи Lucas Soares: Optimized Typing with Python