사람들은 일년의 어느 시기에 시간의 흐름을 느끼는가
세월이 쏜살같이 지나가다.
정신을 차린 지 벌써 12월이 되었다.2021년의 91%가 끝났다고 한다.
2021 is 91% complete. pic.twitter.com/yX1LBkYJo0 — Progress Bar 2021 (@ProgressBar202_) November 29, 2021
에서 이 Progress Bar bot은 가끔 TL이 흘러나오는 것을 볼 수 있지만 백분율에 따라 반응의 크기도 차이가 있다.이 녀석에게 답장할 때는 기본적으로 "그렇게 오래됐나!?"이런 느낌이 들었을 때 사람들이 1년 중 몇 퍼센트가 지나갔는지 조사했을 때 사람들이 이bot을 전달하려고 했어요.p>
데이터 수집
Twitter API를 잘 모르기 때문에 옆에 있는 DevTools로 열의를 북돋워 업데이트합니다
2021/12/01 현재 트위터 화면은 화면 밖으로 굴러간 트위터의 DOM이 삭제되고 새로 표시된 트위터 DOM이 생성됩니다.그런 다음 스크립트를 실행하여 이벤트를 감지하고 정보를 수집합니다.
// <div area-label="タイムライン: Progress Bar 2021さんのツイート" class="css-1dbjc4n">
// この子ノードにツイートが詰められている
const elm = document.querySelector("#react-root > div > div > div.css-1dbjc4n.r-18u37iz.r-13qz1uu.r-417010 > main > div > div > div > div > div > div:nth-child(2) > div > div > div:nth-child(3) > section > div");
const tweets = new Set();
const observer = new MutationObserver((mutationList, _) => {
for (let record of mutationList) {
for (let node of record.addedNodes) {
if (node.innerText.includes("@ProgressBar202_")) {
// 例:"Progress Bar 2021\n@ProgressBar202_\n·\n11月18日\n2021 is 88% complete.\n115\n4,668\n2.8万"
const text = node.innerText;
tweets.add(text);
}
}
}
});
observer.observe(elm.children[0], {childList: true});
Devotols로 실행한 후 화가 풀릴 때까지 스크롤합니다.이번에 2018년 12월까지 수집했습니다.
그리고
const tweetsArr = Array.from(tweets);
를 실행한 후 나타나는 그룹을 복사하려면 오른쪽 단추를 누르십시오.
시각화
여기서부터 파이톤을 사용하여 시각화합니다.이전에 복사한 그룹을 파이톤으로 가져옵니다.
tweets = [
"Progress Bar 2021\n@ProgressBar202_\n·\n11月14日\n2021 is 87% complete.\n77\n4,427\n2.6万",
"Progress Bar 2021\n@ProgressBar202_\n·\n11月11日\n2021 is 86% complete.\n114\n4,444\n2.7万",
"Progress Bar 2021\n@ProgressBar202_\n·\n11月7日\n2021 is 85% complete.\n137\n7,648\n3.9万",
"Progress Bar 2021\n@ProgressBar202_\n·\n11月3日\n2021 is 84% complete.\n84\n4,693\n2.7万",
...
느낌이 좋은regex로 성형하여pandas로 표를 만듭니다.이번에 일본어 환경에서 수집한 것이기 때문에 수량에'만'을 더한 점도 주의해야 한다p>
import re
import pandas as pd
table = {"year": [], "percent": [], "reply": [], "RT": [], "fab": []}
def parse(x):
if x[-1] == "万":
return int(float(x[:-1]) * 10000)
elif "," in x:
return int(x.replace(",",""))
else:
return int(x)
for tw in tweets:
m = re.search(r"(\d+).* is (\d+)%.*\n(.*)\n(.*)\n(.*)", tw)
table["year"].append(int(m[1]))
table["percent"].append(int(m[2]))
table["reply"].append(parse(m[3]))
table["RT"].append(parse(m[4]))
table["fab"].append(parse(m[5]))
df = pd.DataFrame(table)
<p> 사실 2019년 4월께 트위터에 오자가 나온 시기가 있었다.나는 손으로 이것을 수정한다.
"""
'Progress Bar 2021\n@ProgressBar202_\n·\n2019年4月2日\nApologies for my previous post. 2019 (Two thousand and *nineteen*) is 25% complete.\n114\n3,858\n1.2万',
'Progress Bar 2021\n@ProgressBar202_\n·\n2019年3月29日\n2018 is 24% complete.\n286\n3,160\n1.3万'
"""
df.iloc[269].year = 2019
결과를 시각화
plt.figure(figsize=(15, 10))
plt.subplot(2,1,1)
for year in [2018, 2019, 2020, 2021]:
data = df[df.year == year].sort_values("percent")
plt.plot(data.percent, data.RT, ".-", label="%d"%year)
plt.legend()
plt.xlabel("%")
plt.xticks(range(0, 101, 10))
plt.title("# of RTs")
plt.subplot(2,1,2)
for year in [2018, 2019, 2020, 2021]:
data = df[df.year == year].sort_values("percent")
plt.plot(data.percent, data.fab, ".-", label="%d"%year)
plt.legend()
plt.xlabel("%")
plt.xticks(range(0, 101, 10))
plt.title("# of fabs")
plt.show()
최고치가
- 0%, 100%(설날)
- 10%
- 20%
- 25%
- 50%
- 69%
- 75%
- 80%
- 90%
- 99%(연말)
알겠습니다
, 50%가 새해처럼 떠들썩합니다p>
신기한 점은 왜 70%가 아니라 69%(9월 10일 부근) RT/fab가 증가했을까.'1년의 7할이 지나갔다'가 아니라'1년의 7할이 지나갔다'는 점에서 감개무량하다p>
총결산
트위터의 Progress Bar bot(ProgressBar202)RT/fab 수, 사람들이 언제 이것에 반응하는지 조사했다.기본적으로 숫자가 딱 맞을 때나 새해에는 떠들썩했지만 70% 만이 69%의 반응을 보였다.제목의 결론은'1년의 69%가 지나가면 사람들은 시간의 흐름을 느낄 것이다'p>
-- 추기 -
아무래도 해외에 이런 고기가 있는 것 같다.부적당한 고찰을 했어...결론 50%로 변경br/>
해설:https://www.dailydot.com/unclick/69-nice-meme-twitter/
강력한 Chrome 새 버전 알림: https://twitter.com/ChromiumDev/status/1037022478927912961
Reference
이 문제에 관하여(사람들은 일년의 어느 시기에 시간의 흐름을 느끼는가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/__dAi00/items/a47d8e1c75120fceeeee텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)