Рубрики
Без рубрики

Когда лучше всего опубликовать на Dev.to?

Использование Python для разработки визуализируйте лучшие времена и темы на Dev.Temange International Co … с меткой Meta, Python, Jupyter, новичками.

Использование Python для разработки визуализации лучших времен и тем на Dev.To

Наличие международного сообщества на Dev.To означает, что по всему часам работают пользователи, что затрудняет понимание, когда сообщество является наиболее активным. Знание этого помогает больше понять вашу аудиторию и поможет вам получить наибольшее взаимодействие с контентом, который вы публикуете.

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

В прошлом году я работал над проектом, чтобы понять, что пользователи публикуют на Yammer моей компании, Think Company Facebook; Мы использовали Python для отслеживания вовлеченности по темам, которые интересовалась моей командой, как их воспринимали и когда они взаимодействовали. Оглядываясь на некоторые идеи визуализации, я увидел пост Пьера о лучшем времени для публикации здесь,

Какое время лучше всего публиковать на Dev.to? Ответ, поддерживаемый данными, 🕰🦄🤷‍♂️

Пьер ・ 24 марта ’19 ・ 7 мин ЧИТАЙТЕ

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

Чтобы попытаться понять читателя, нам нужно решить, что определяет успешный пост – обычно это чтение цифр, комментарии и реакции.

Поскольку мы не можем получить чтения числа для каждого поста, мы рассмотрим реакции, поскольку оба тесно связаны; Больше реагирует, больше чтений и больше чтений, больше реагирует. Таким образом, реакции будет метрикой, которую мы используем для определения поведения пользователей или ответа на сообщение!

Во -первых, нам нужны данные.

Нам нужно знать, как выступили предыдущие посты, к счастью, у команды здесь есть отличное API Для нас использовать!

Используя Python и Запросы Библиотека, мы можем позвонить в API и создать файл линий JSON из каждого поста:

# To get the first page on articles on Dev.to
URL = "https://dev.to/api/articles"
payload = {"page":1}
r = requests.get(URL, params=payload)
r.raise_for_status()
f.write(r.text)

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

Запустив это, мы можем создать набор данных, но ему нужна некоторая очистка, чтобы получить его в более разрабатываемом формате для следующей библиотеки, которую мы собираемся использовать – Pandas, вместе с Numpy Это основание манипуляций с данными в Python.

Используя панды и простой генератор Мы можем загрузить данные в DataFrame;

# Generator for data
def json_line_gen(file_name):
    for row in open(file_name, "r"):
        yield row

json_response = json_line_gen('./data.json')

for json in json_response:
    df = df.append(pd.read_json(json), sort=False)

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

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

df = df.drop(columns=unwanted_columns)

# Splitting Timestamp into hour and day of week
df['hour'] = pd.to_datetime(df['published_at']).dt.hour
df['day_of_week'] = pd.to_datetime(df['published_at']).dt.strftime('%A')

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

Лучший способ визуализации этого – это тепловая карта – мы начинаем с группировки данных, необходимых нам, подсчетом реакций и времени, прежде чем разворачивать таблицу, чтобы его столбцы были дни недели:

# Get the average reactions per post at a given timeslot
reaction_df = df.groupby(["day_of_week", "hour"]) ["positive_reactions_count"].mean()

# Pivot the dataframe & reorganise the columns
reaction_df = reaction_df.reset_index().pivot('hour', 'day_of_week', 'positive_reactions_count')
reaction_df = reaction_df[["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]]

Тогда мы используем Seaborn , библиотека визуализации данных, чтобы генерировать тепловую карту:

plt.figure(figsize=(16, 16))
sns.heatmap(reaction_df , cmap="coolwarm")

И мы столкнулись с проблемой, нет четкой тенденции, иногда это так, но этот час в воскресенье кажется выбросом. Это время намного темнее, чем другие – давайте проверим, мы можем использовать ящик в качестве простого способа проверки, опять же от Seaborn:

sns.boxplot(reaction_df)

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

z = np.abs(stats.zscore(reaction_df))
reaction_df = reaction_df[(z < 3).all(axis=1)]

Эта фильтрация удаляет некоторые из лучших постов всех времен, но дает гораздо более общее представление о том, как большинство постов выступают, когда мы снова генерируем нашу тепловую карту!

Так что это оставляет нас с чистой группой; Около полуденного UTC в течение недели!

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

Тепловая карта была очень общей, что, если вы заинтересованы только в создании контента вокруг некоторых конкретных тегов, давайте попробуем один из моих любимых – обсудить;

# Tag to find map for
tag = 'discuss'

tag_df = tag_df.loc[tag_df['tags'].str.contains(tag, case=False, na=False)]

tag_df = tag_df.groupby(["day_of_week", "hour"]) ["positive_reactions_count"].mean()
tag_df = tag_df.reset_index().pivot('hour', 'day_of_week', 'positive_reactions_count')
tag_df = tag_df[["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]]

Менее ясно, проблема в том, что мы вырезаем так много нашего набора данных, что мы просто начнем пропущенные данные, которые начнут искажать результаты. Тем не менее, у некоторых из самых популярных тегов может быть достаточно данных, чтобы изучить.

Обсуждение TAG заставило меня попробовать что -то еще, можем ли мы проверить связь между тем, сколько людей читают и отреагируют на пост, и сколько людей прокомментируют это? Это было бы особенно актуально для тегов, таких как обсуждение, но, как правило, если вы хотите, чтобы читатели взаимодействовали с вашим постом за пределами реагирования.

Мы можем использовать Регрессионный сюжет Чтобы сравнить реакцию с комментариями и посмотреть, есть ли корреляция:

sns.regplot(comment_df["comments_count"], comment_df["positive_reactions_count"])

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

Если мы заменим количество реакций в наших предыдущих тепловых картах, с столбцом подсчета комментариев и генерируем новую тепловую карту:

comment_df = comment_df.groupby(["day_of_week", "hour"]) ["comments_count"].mean()
comment_df = comment_df.reset_index().pivot('hour', 'day_of_week', 'comments_count')
comment_df = comment_df[["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]]

plt.figure(figsize=(16, 16))
sns.heatmap(comment_df , cmap="coolwarm")

Мы видим, что в будущем мы можем проверить два больших кластера:

  • Очень рано утром UTC в субботу и воскресенье
  • И ранний вечер, 5/6 вечера UTC вторник – воскресенье

Использование этих тенденций может привести к большему участию в ваших сообщениях посредством комментариев и обсуждения, стоит сделать шанс увидеть, есть ли причинно -следственная связь или хотите больше взаимодействовать со своими пользователями.

Давайте вернемся к тегам, а что, если кто -то хочет пойти на полную SEO? Что являются самыми популярными темами, и рассказывает ли это нам что -нибудь о сообществе?

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

popular_df = popular_df.explode('tag_list')

# Fill in any gaps
popular_df["tag_list"] = popular_df["tag_list"].fillna('None')

Оттуда мы могли бы суммировать по случаю, но оказывается, что это уже сделано для нас! Некоторые большие, которых вы ожидаете, JavaScript и т. Д., Так что, безусловно, о том, о чем нравится публиковать, но это то, чего хочет сообщество? Это самые взаимодействующие?

Если мы впервые получим средние реакции для сравнения:

popular_df['positive_reactions_count'].mean()

Затем мы можем использовать наш набор данных с удаленными выбросами, чтобы сгенерировать список верхних тегов с наибольшим средним числом реакции:

popular_sum_df = popular_df.groupby(['tag_list'])["positive_reactions_count"].mean()

# Get top 50 average posts
popular_sum_df.sort_values(ascending=False).head(50)

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

  • Карьера
  • Новички
  • Крючки
  • SQL
  • Научился

(Полный список тегов доступен в репо, посмотрите на них там)

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

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

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

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

Если вы хотите попытаться создать что -то большее, сделайте это самостоятельно или посмотрите, как быстро что -то подобное можно сделать в Python, здесь доступны тетрадь и сценарии Jupyter;

Nevin243/Pray-Prosting

Для того, чтобы разрабатывать лучшее время, чтобы опубликовать на dev.to

А теперь потратьте некоторое время, пытаясь понять своего читателя, счастливого публикации!

Оригинал: “https://dev.to/m_nevin/when-s-the-best-time-to-post-on-dev-to-5824”