Bonjour, c'est sunfish. ** "Twtter x Corona" ** Nous continuerons à analyser. Partie 1 a analysé morphologiquement le texte du tweet et a même calculé le nombre de mots fréquents qui apparaissent quotidiennement.
↓ Sélection de mots fréquemment utilisés 27
Plus de six mois se sont écoulés depuis que le virus corona est devenu un problème social. Suivons du tweet ce qui monte chez les gens et ce qui est oublié. Dans la deuxième partie, nous utiliserons l'analyse de régression pour trouver des mots avec des tendances à la hausse / à la baisse.
Nous utiliserons les données sur le nombre d'occurrences par jour et mot créé dans la première partie. ↓ Données ↓ Lorsque visualisé
Au fil des jours, j'aimerais trouver les mots qui apparaissent plus ou moins. En d'autres termes
y:Nombre de tweets pour un mot spécifique=a\times x:Nombre de jours écoulés+b
Dérivons une telle équation de régression et observons la pente «a» et le coefficient de corrélation. En tant qu'opération de données, il est nécessaire de calculer les "jours écoulés" à partir des données de date. En guise d'approche, attribuez les numéros de série, mot par mot et la date dans l'ordre croissant.
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(['mot'])[['Created_At']].rank(**model_params)
port_23[['Created_At']] = port_23[['Created_At']].map(lambda x: x.date())
↓ Faites attention à l'axe des x. Maintenant que nous avons le nombre de jours écoulés, nous sommes prêts pour l'analyse de régression.
Nous observerons comment les 24 mots sélectionnés changent en fonction du nombre de jours écoulés à partir des résultats de l'analyse de régression. Quand j'essaye de l'écrire en python, il est difficile de faire une boucle pour chaque mot.
group_keys = ['mot']
X_columns = ['index']
Y_column = 'compter'
groups = port_23.groupby(group_keys)
models = {}
summaries = {}
def corr_xy(X, y):
"""Trouvez le coefficient de corrélation entre la variable objective et la variable explicative"""
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=['Coefficient de corrélation avec la variable objective'])
corr['Variable explicative'] = 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(
{
'Variable explicative': X.columns,
'coefficient': np.round(model.params, 5),
'écart-type': np.round(model.bse, 5),
'valeur t': np.round(model.tvalues, 5),
'Pr(>|t|)': np.round(model.pvalues, 5)
},
columns=['Variable explicative', 'coefficient', 'écart-type', 'valeur t', 'Pr(>|t|)'])
summary = summary.merge(corr, on='Variable explicative', 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
↓ Avec nehan, vous pouvez éviter le traitement de boucle gênant avec l'option Créer un modèle pour chaque groupe
.
Et nous avons obtenu le résultat de l'analyse de régression pour chaque mot. «Variable explicative = const», est une information de section.
Il y a différentes interprétations, mais ici
Extrayez les mots au fur et à mesure qu'ils sont corrélés.
port_27 = port_25[(port_25['Coefficient de corrélation avec la variable objective'] <= -0.4) |
(port_25['Coefficient de corrélation avec la variable objective'] >= 0.4)]
Examinons de plus près le mot information.
Mot de tendance haussière
Mot de tendance baissière
↓ ** Live **, transition par nombre de jours ↓ ** Gouvernement **, changement par nombre de jours
La menace de Corona n'est pas partie, mais le nombre de mots que nous voyons souvent dans les nouvelles pendant les périodes critiques a diminué, et le nombre de mots qui ont été fortement influencés par la retenue, tels que les événements et les performances en direct, a augmenté. Vous pouvez voir comment cela se passe. Bien sûr, cela ne peut pas être considéré à lui seul comme ** "tout le monde veut aller vivre!" **, mais je voudrais conclure ce thème en tenant compte des données à ce jour.
Nous espérons que vous comprendrez l'attrait de nehan, un outil d'analyse sans programmation qui peut être lié à diverses analyses et visualisations à partir de données prétraitées.
Recommended Posts