Twitterの繋がりから作成する自己紹介

こんにちは，SNS関連のデータを触るのが好きな[Shimasan](https://twitter.com/nitkcdadon)です．
この記事は[Advent Calendar 2021: ソーシャルメディアのデータを使用した分析・活用方法](https://qiita.com/advent-calendar/2021/socialmedia-data)の12月3日分の記事です．

普段は自身のブログやnoteなどに投稿することが多く，Qiita初投稿ですがよろしくお願いいたします．

## どういう記事？

> こんにちは，SNS関連のデータを触るのが好きな[Shimasan](https://twitter.com/nitkcdadon)です．

のように自己紹介をする機会というのはエンジニア関連のイベント，学会など様々な場面で存在します．

当たり前ではありますが，自己紹介を考えるのは自分です．

自分がどのような職や経歴，立ち位置を持っているのか，趣味はなんなのかを語るのは自分自身です．

この記事はそんな**自己紹介になる情報を社会学の観点からTwitterのフォローユーザ，フォロワーユーザの関係情報のみで作成しよう！**という試みです．

## この記事のゴール

この記事ではTwitterのフォローユーザ，フォロワーユーザの関係情報を活用し，

- 興味ある領域，趣味
- 経歴，立ち位置
- 望まれている情報

を主に**WordCloud**を作成して表現していきます．

![follow-follower.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342225/9fc5ed74-264d-b0cc-30fe-5dea1ef2705e.png)
↑これは私の興味ある領域，趣味を表しています．

最後に本手法の制限と発展可能性について言及します．

## 前提共有事項

### そもそも社会学の観点に基づくとは

社会学ではユーザからなるネットワークがあるときにそのユーザがどのような特性を持っているかは
その**ユーザ自身の情報は必要ではなく**，接続されているユーザから決定されると考えるそうです．

この考えかたを私はTwitterというソーシャルネットワークに適用していきます．

### 自分以外に適用したことあるの？

あります．

自身のブログやnoteにてVTuberであったり，

少し異なりますが社会学の観点に基づいた分析としてAPEXによる文化的背景の違うユーザの交流に関する分析があります．

https://murabitoleg.com/vtuber-twitter/

https://note.com/shimasan/n/n777ff09ff296

### Twitterで自己紹介とはいかなくても所属を明らかにする手法くらいあるんじゃないの？

あります．

https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0175368

機械的に科学者の識別及び分析をしている研究なのですが，特定にTwitterのリスト機能を活用しています．

対象ユーザが含まれているリストを集めてきて，そのリストの名前からそのユーザが何かを識別するのですがこれはある程度著名なユーザにしか効果がありません．

私のような無名ユーザとは無縁の手法となっています．

また，ツイートデータを使えばいいじゃないかという考えもあるかと思いますが，用いたとしても各ユーザ単位でコンテンツの揺れがでかすぎるのであまり使用したくありません．

なので今回はプロフィールデータを使用しています．



## 手法

以下の手順で進めていきます．

1. Twitter APIを使用して自身のフォロー，フォロワー情報を収集
    1. その際にそれらのユーザのプロフィール部分を収集
1.  **特定のフォロー，フォロワーの組み合わせを作成**(この記事のポイント)
    1.  所属するユーザのプロフィール部分の情報からWordCloudを作成

### 環境
- Ubuntu 20.04(WSL2)
- Python 3.8.6
    - sudachipy 0.6.0
        - 20210802のfull_dict
    - wordcloud 1.8.1

### Twitter APIを使用して自身のフォロー，フォロワー情報を収集

フォロー，フォロワーユーザそれぞれの情報を以下のTwitter APIで取得していきます．

- フォローユーザ
    - ユーザid: `https://api.twitter.com/1.1/friends/ids.json`
    - プロフィール: `https://api.twitter.com/1.1/users/show.json`
        - `description`フィールドを参照

- フォロワーユーザ
    - ユーザid: `https://api.twitter.com/1.1/followers/ids.json`
    - プロフィール: フォローユーザと同様

### 特定のフォロー，フォロワーの組み合わせを作成

フォローユーザ，そしてフォロワーユーザを集合を見なした場合，その組み合わせは6通り作成されます．

- フォロー集合
- フォロワー集合
- フォロー集合とフォロワー集合の和集合
- フォロー集合とフォロワー集合の積集合
- **(フォロー集合 – フォロワー集合)の差集合**
- **(フォロワー集合 – フォロー集合)の差集合**

特に後半の2つが今回の対象です．

簡単に言うなら，**一方的にフォローしているユーザ群**と**一方的にフォローされているユーザ群**です．

上記で紹介したブログで分析したのですが，一方的にフォローしているユーザ群は自身の願望や興味，趣味が強く表出し，

一方的にフォローされているユーザ群は自身の属性を表出させてくれます．

これは直感に合う結果なのではないでしょうか．

#### WordCloudの作成

作成したそれぞれの集合でWordCloudを作成していきます．

集合のユーザのプロフィール部分を抽出し，前処理をかけて「名詞」のみを取り出します．

ストップワードはいくつか設定しましたが，ここは実行する人依存だと思います．

前処理は簡潔ではありますがneologdnをかけ，URLを除去しました．

名詞のみの取り出しはsudachipyで形態素解析して行いました．語彙はfull_dictです．

取り出したらwordcloudを作成し，終了です．

## 結果

### 一方的にフォローしているユーザ群

![follow-follower.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342225/9fc5ed74-264d-b0cc-30fe-5dea1ef2705e.png)
これは興味ある領域，趣味が一目瞭然ですね．

NLPやら機械学習系，データ分析，エンジニア関連に強い興味を持ち，ゲームだったりニュースを嗜む人間のようです．

めっちゃ研究に興味ある人間に見えます．

これは手軽に最新の論文情報を得ることができる最高の手段がTwitterなのが悪いんです．

### 一方的にフォローされているユーザ群

![follower-follow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342225/a4b2f186-c725-fcdb-98ad-4413358e6994.png)

元高専生で編入した学生という属性が出てます．フォロワーデータのみで．

Twitterでネットワークを広げる際にその時期，その時期に自身に関連するユーザとつながっていくことから自然な結果に見えます．

これはフォローしてくれているユーザの属性とも捉えられるので配信者やインフルエンサーに本手法を適用することでファン層を特定することができると考えられます．

### 制限と手法の発展について

この手法はTwitterアカウントが非公開アカウントでは難しいです．

また，Twitterアカウントというのは自身のパーソナリティを分割し，複数のアカウントでそれらを表現できるため，自身の一部の側面が強く表現されてしまうこともあります．

パーソナリティを多くのアカウントで分割していないユーザであれば，LDAを適用すると自分の興味領域はなにかというのをそのトピック数で表現することができます．

可視化にはPyLDAvizなどを使えばお手軽に確認することができます．

https://github.com/bmabey/pyLDAvis

私の場合はトピックを複数設定しても研究やら機械学習やらから逃げられず，マルチトピックを観測することはできませんでした．私のWordCloudを見ればマルチトピックからは程遠いのが一目瞭然なので仕方ないですね．

## さいごに

今回はTwitterの繋がりの情報のみで自己紹介できるのかWordCloudなどを用いて実行しました．

対象とするユーザ群を適切に設定することである程度使える情報になっていたと思います．

Twitter APIを叩ける方は手法も簡単なのでぜひ試してみてください．

自分から見た自己紹介，他者との繋がりだけで見た自己紹介というネタを作れるのでいいかなと思います(私は使っていきたいと思います)．