に疲れたのでnehanでデータ分析してみた(コロナ禍でもライブに行きたい - 後編)
ご挨拶
こんにちは、マンボウです。
「Twtter×コロナ」引き続き分析していきます。
前編はtweetテキストを形態素解析し、頻出単語の日別出現数を出すところまでやりました。
Twitterのデータから、上昇・下降トレンドの単語を探してみる
コロナウイルスが社会問題になってから半年以上が経過しました。
人々の中で何が高まり、逆に何が忘れられているのか、つぶやきから追ってみます。
後編では、回帰分析を用いて上昇・下降トレンドの単語を見つけ出します。
データ
前編で作成した、日別・単語別出現数のデータを使います。
↓データ
↓可視化すると
回帰分析を行う準備
日が経過するに連れ、出現数が増or減、の単語を見つけたいと思います。
つまり
y:特定単語のtweet数=a\times x:経過日数+b
こういう回帰式を導き、傾きであるa
と、相関係数を観察してみよう、と。
データ操作としては、日付のデータから「経過日数」を算出する必要があります。
アプローチとして、連番を・単語ごとに・日付が若い順から、振ります。
from scipy.spatial.distance import cdist
import pandas as pd
import statsmodels.api as sm
port_23 = port_22.copy()
model_params = {'method': 'first', 'ascending': True}
port_23[['Created_At']] = pd.to_datetime(port_23[['Created_At']])
port_23['index'] = port_23.groupby(['単語'])[['Created_At']].rank(**model_params)
port_23[['Created_At']] = port_23[['Created_At']].map(lambda x: x.date())
回帰分析を実施。単語ごとに
選定した24単語が経過日数に応じてどう変化しているか、回帰分析結果から観察していきます。
pythonで書こうとすると、単語ごとにループを回したりと、大変です。
group_keys = ['単語']
X_columns = ['index']
Y_column = 'カウント'
groups = port_23.groupby(group_keys)
models = {}
summaries = {}
def corr_xy(X, y):
"""目的変数と説明変数の相関係数を求める"""
X_label = X.columns.tolist()
X = X.T.values
y = y.values.reshape(1, -1)
corr = 1 - cdist(X, y, metric='correlation')
corr = pd.DataFrame(corr, columns=['目的変数との相関係数'])
corr['説明変数'] = X_label
return corr
for i, g in groups:
X = g[X_columns]
Y = g[Y_column].squeeze()
corr = corr_xy(X, Y)
try:
model = sm.OLS(y, sm.add_constant(X, has_constant='add')).fit()
model.X = X.columns
models[i] = model
summary = pd.DataFrame(
{
'説明変数': X.columns,
'係数': np.round(model.params, 5),
'標準偏差': np.round(model.bse, 5),
't値': np.round(model.tvalues, 5),
'Pr(>|t|)': np.round(model.pvalues, 5)
},
columns=['説明変数', '係数', '標準偏差', 't値', 'Pr(>|t|)'])
summary = summary.merge(corr, on='説明変数', how='left')
summaries[i] = summary
except:
continue
res = []
for key, value in summaries.items():
value[group_keys] = key
res.append(value)
concat_summary = pd.concat(res, ignore_index=True)
port_24 = models
port_25 = concat_summary
↓nehanであれば、グループごとにモデルを作成する
オプションで面倒なループ処理を書かずに済みます。
そして、単語ごとの回帰分析の結果を得られました。説明変数=const
、は切片の情報です。
上昇/下降トレンドの単語に絞る
様々な解釈はありますが、ここでは
- 相関係数が0.4以上
- 相関係数が-0.4以下
に絞り、これを相関がある、として単語を抽出します。
port_27 = port_25[(port_25['目的変数との相関係数'] <= -0.4) |
(port_25['目的変数との相関係数'] >= 0.4)]
結果を観察
上昇トレンドの単語
- イベント
- ライブ
下降トレンドの単語
- 患者
- 政府
- 症状
- 重症
まとめ
コロナの脅威は去ったわけでは有りませんが、危機的な時期にニュースでよく見ていたような単語の出現数は減り、イベントやライブといった、自粛の影響を強く受けた単語の出現数が増えている様子が見て取れます。
もちろん、これだけでは「みんなライブに行きたいんだ!」とは言えませんが、ここまでのデータを見た、いち考察として本テーマを締めさせていただければと思います。
前処理したデータから様々な分析、可視化に繋げられるプログラミング不要の分析ツールnehanの魅力が少しでも伝われば幸いです。
※分析ツールnehanのご紹介はこちらから。
※↓今日の内容
なお、上記のソースコードはnehanのpythonエクスポート機能で出力したコードをコピペしました。(一部バグってたので、書き直しました・・・)
Author And Source
この問題について(に疲れたのでnehanでデータ分析してみた(コロナ禍でもライブに行きたい - 後編)), 我々は、より多くの情報をここで見つけました https://qiita.com/nehan_io/items/828dd62a629b29b14483著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .