에 지쳤기 때문에 nehan로 데이터 분석해 보았다

인사말



안녕하세요, 맘보입니다.
「Twtter×코로나」 계속 분석해 갑니다.
전편 는 tweet 텍스트를 형태소 해석해, 빈출 단어의 일별 출현수를 내는 곳까지 했습니다.

↓선택된 빈출 단어 27


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())



↓x축에 주목. 경과 일수를 내고 회귀 분석 준비가 되었습니다.


회귀 분석을 실시. 단어당



선정한 24단어가 경과 일수에 따라 어떻게 변화하고 있는지, 회귀 분석 결과로부터 관찰해 갑니다.
파이썬으로 쓰려고하면 단어별로 루프를 돌리거나 어렵습니다.
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의 파이썬 내보내기 기능에서 출력한 코드를 복사했습니다. (일부 버그가 있었으므로, 재작성했습니다・・・)

    좋은 웹페이지 즐겨찾기