Dev.to에서 발표할 수 있는 가장 좋은 시기는 언제입니까?

Python을 사용하여 Dev.to에서 가장 좋은 시간과 테마를 시각화합니다
Dev.to에 국제 커뮤니티가 있다는 것은 전천후에 활발한 사용자가 있다는 것을 의미하기 때문에 이 커뮤니티가 언제 가장 활발한지 이해하기 어렵다.이 점을 이해하는 것은 당신의 시청자를 더욱 잘 이해하고, 당신이 발표한 내용에 최대한 참여하는 데 도움이 된다.
간단한 파이톤을 통해 Dev.to의 사용자와 행동을 가능한 한 많이 이해할 수 있습니다. 예를 들어 우리가 언제 발표해야 하는지, 가능한 한 많은 사람들이 그것을 볼 수 있도록 합니다.더군다나 데이터 준비와 조작을 배울 수 있는 좋은 기회다.
작년에 저는 당사의 Yammer think company 페이스북에 사용자가 무엇을 발표했는지 알아보기 위해 프로젝트에 참여했습니다.우리는python을 사용하여 우리 팀이 흥미를 느끼는 주제의 참여도와 그들이 어떻게 감지되고 언제 그들과 상호작용하는지 추적합니다.사방에서 시각화된 아이디어를 찾았을 때, 나는 이곳에 발표할 가장 좋은 시간에 관한 게시물을 보았다.


이제 저는 이곳에 더 자주 글을 올리기 시작했습니다. 저는 비슷한 것을 시도할 것이라고 생각합니다. 그래서 저는 이곳의 사용자들이 읽을 때의 상황, 어떤 추세, 그리고 그들이 어떤 주제와 가장 자주 상호작용하는지에 대해 더 많은 것을 알아보기 위해 간단한 프로젝트를 시도하기로 결정했습니다.
독자를 이해하기 위해서 우리는 성공한 게시물의 결정적인 요소인 통상적으로 읽는 사람 수, 평론과 반응을 찾아야 한다.
우리는 매 게시물의 읽기 횟수를 얻을 수 없기 때문에 이 두 가지 강렬한 연관성에 대한 반응을 주목할 것이다.더 많은 반응, 더 많은 읽기, 더 많은 읽기, 더 많은 반응.따라서 반응은 사용자의 행동이나 댓글에 대한 답변을 결정하는 기준이 될 것입니다!

데이터 가져오기


우선, 우리는 데이터가 필요하다.
우리는 이전의 댓글이 어떻게 표현되었는지 알아야 한다. 다행히도 이곳의 팀은 우리가 사용할 수 있는 좋은 플랫폼을 가지고 있다!
Python과 requests 라이브러리를 사용하면 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, 그리고 Python에서 데이터 조작의 주간 Numpy 으로 변환하기 위한 정리가 필요합니다.
Pandas와 간단한 generator를 사용하면 우리는 데이터를 데이터 프레임에 불러올 수 있다.
# 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)
Data frames는 매우 유용하다. 기본적으로 이것은 줄과 열을 표시하는 표로 매우 유연하고 많은 기능을 내장했다.그것들은 확장과 조작이 쉬워서 하나의 라이브러리만으로도 전 세계의 데이터 조작을 실현할 수 있다.

데이터 준비


데이터 구조를 구축한 후에 우리는 피에르가 해야 할 똑같은 일을 살펴보는 초보적인 탐색을 할 수 있다.날짜와 시간을 각각 열로 나누어 조작하기 편리하도록 하다.여기서 표지 그림이나 규범 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 score를 사용하면 우리는 원시 데이터 상자에서 일부 이상 댓글을 삭제할 수 있다.
z = np.abs(stats.zscore(reaction_df))
reaction_df = reaction_df[(z < 3).all(axis=1)]
이 필터는 유사 이래 가장 잘 표현된 댓글을 삭제했지만 우리가 다시 핫맵을 생성할 때 대부분의 댓글의 표현을 전면적으로 이해할 수 있습니다!

이렇게 해서 우리는 명확한 경계가 생겼다.일주일 동안 UTC 정오쯤!
이것은 Pierre의 신속한 발견과 유사하지만 더욱 엄격한 범위 내에서 이 사이트의 존재가 끊임없이 증가하고 더욱 광범위한 사용자 기반을 가지거나 겨우 1년의 데이터 때문일 수 있습니다!

특정 태그에 대해 쓰기


열도는 매우 보편적인 개념이다. 만약에 특정한 라벨을 만드는 내용에만 관심이 있다면 내가 가장 좋아하는 것인 토론을 해 보자.
# 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"]]

잘 알 수 없는 것은 우리가 너무 많은 데이터 집합을 삭제했기 때문에 우리는 데이터를 잃어버리기 시작하고 결과를 왜곡하기 시작한다는 것이다.즉, 일부 가장 유행하는 라벨은 볼 수 있는 충분한 데이터가 있을 수도 있다는 것이다.

참여 및 의견


'토론'라벨은 나로 하여금 다른 방법을 시도하게 했다. 우리는 얼마나 많은 사람들이 댓글을 읽고 반응하는지, 그리고 얼마나 많은 사람들이 댓글에 대한 댓글 사이의 관계를 검사할 수 있습니까?이것은'토론'과 같은 꼬리표에 특히 중요하다. 그러나 독자와 당신의 댓글이 응답이 아니라 상호작용을 하고 싶다면.
우리는 regression plot를 사용하여 반응과 평론을 비교하여 관련성이 있는지 확인할 수 있다.
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 토·일 아침
  • 및 UTC 화요일~일요일
  • 저녁 5/6
    이러한 추세를 이용하면 댓글과 토론을 통해 당신의 댓글을 더욱 매력적으로 만들 수 있다. 인과관계가 있는지, 아니면 사용자와 더 많은 상호작용을 하고 싶은지 시험해 볼 만하다.

    우리는 어떤 화제를 써야 합니까?


    라벨로 돌아가서 전면적인 검색엔진 최적화를 원하는 사람이 있다면?가장 인기 있는 화제는 무엇입니까? 이것은 우리에게 지역 사회에 관한 무엇을 알려줄 수 있습니까?
    우선, 우리는 tag list 열을 단독 항목으로 나누어야 한다. 판다스에서 이것은 큰 고통이었지만, 지금은 단지 하나의 방법으로 호출될 뿐이다.
    popular_df = popular_df.explode('tag_list')
    
    # Fill in any gaps
    popular_df["tag_list"] = popular_df["tag_list"].fillna('None')
    
    그곳에서 우리는 사건에 따라 화해를 구할 수 있지만, 사실은 이것이 이미 완성되었다는 것을 증명한다!당신은 자바스크립트 등 큰 것들을 생각할 수 있습니다. 그래서 사용자들은 틀림없이 무엇을 발표하는 것을 좋아할 것입니다. 그러나 이것은 지역 사회에서 원하는 것입니까?이것들이 가장 상호작용적인 것입니까?
    만약 우리가 먼저 비교에 사용되는 평균 반응을 얻게 된다면:
    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 / 데이터 제어 게시


    Dev.to에서 발표할 가장 좋은 시기를 찾아라


    지금 가서 시간을 좀 써서 당신의 독자를 이해해 보세요. 즐겁게 글을 올려주세요!

    좋은 웹페이지 즐겨찾기