積ん読というらしい
記事のストック...「あとで読む」をつい溜め込んでしまうこと、ありませんか?
これまでどんな技術に興味があって放置してきたのか、と気になり、Qiitaストック記事の傾向を見える化するダッシュボードをつくってみました。
作ったものとできること
👉こちらから試していただけます。
プロジェクト全体は GitHub にあります。
今回作成したダッシュボードでは、指定したQiitaユーザーのストック記事データを取得し、以下のような情報を表示します。
1. 直近5年間のストック分析
過去5年間にストックしたQiita記事を自動で抽出し、分析します。
2. 年別ストック数
どの年に最も多くの記事をストックしたかを一目で確認できます。学習意欲が高かった時期や、新しい技術に挑戦していた時期が見えてきます。
3. ストックしがちな記事のタグランキング
全期間で最もストックした技術タグのTOP10をランキング形式で表示。金・銀・銅メダルで上位3つを強調表示します。
4. タグのトレンド
複数のタグを選択して、年次推移を折れ線グラフで比較できます。特定の技術への関心の変化を追跡できます。
5. 詳細データ
ストックした記事を年やタグでフィルタして確認できます。おまけで CSV でデータをダウンロードできるようにしました。
技術スタックと構成
Pythonだけで構築できるWEBアプリなので、開発しやすいと思います。
-
言語/環境: Python 3.12
-
主要ライブラリ:
-
requests,pandas,matplotlib,streamlit,altair
-
-
外部API: Qiita API(
/users/{user_id}/stocks) -
構成: Streamlit 単体で完結するシングルページアプリ
-
入力: Qiita ユーザーアクセストークン
-
出力: 可視化ダッシュボード、CSV
実装のポイント
Qiita API でストック記事を取得
url = f"https://qiita.com/api/v2/users/{user_id}/stocks"
headers = {"Authorization": f"Bearer {token}"}
res = requests.get(url, headers=headers, params={"page": 1, "per_page": 100})
items = res.json()
タグと年を取り出して整形
df = pd.DataFrame([...])
df["tags"] = df["tags"].apply(lambda lst: [t.lower() for t in lst])
df["year"] = pd.to_datetime(df["created_at"]).dt.year
集計と可視化(例:タグ別記事数)
tag_counter = Counter()
for tags in df["tags"]:
tag_counter.update(tags)
top_tags = tag_counter.most_common(10)
st.bar_chart(pd.DataFrame(top_tags, columns=["タグ", "件数"]).set_index("タグ"))
分析して見えてきたこと
機械学習への関心がだんだんなくなり、生成AIやクラウドなどのストック記事が増えました。
フロントエンドは恐らくバイブコーディングをする中で色々調べたのだと思います。
補足
本当はストックのタイトル別にデータを取得できるとよいのですが、今のところそのAPIリクエストは公開されていないようなので、ストック記事全体からダッシュボードをつくっています。


