Cet article est l'article du 22ème jour du Calendrier de l'Avent Python 2014 - Qiita.
La semaine dernière, j'ai écrit un blog intitulé BigQuery x Perfume x tweet analysis sur le calendrier de l'Avent de mon entreprise. Là, j'ai essayé d'analyser les tweets sur Parfum collectés pendant une semaine du 12/12 (vendredi) au 12/18 (jeudi) en les donnant à BigQuery.
Cette fois, en tant que développement, je vais faire une analyse de tweet avec le traitement du langage naturel en utilisant Mecab et CaboCha m (_ _) m
C'est pourquoi je regarde les tweets de l'élection de la Chambre des représentants - Qiita https://github.com/mima3/stream_twitter
Plutôt que de faire référence, la plupart de ce que je fais est en vente par mima_ita ...
・ Mac OSX 10.9.5 ・ Python 2.7.8
Cette fois, j'ai utilisé un service appelé mention. En mention, les mots-clés définis sur l'écran de gestion peuvent facilement extraire des données de SNS. Exportez les données acquises ici vers csv à partir de l'écran de gestion, et vous êtes prêt à partir.
Les conditions spécifiées cette fois sont les suivantes.
Mot clé de recherche: Parfum|| prfm || perfume_um (prfm et perfume_um sont des balises de hachage utilisées dans les articles sur le parfum)
Mots clés à exclure: RT
SNS cible: Twitter Langue: japonais
Période: 12/12 (vendredi) -12/18 (jeudi)
Mecab:http://salinger.github.io/blog/2013/01/17/1/ Cabocha:http://qiita.com/ShingoOikawa/items/ef4ac2929ec19599a3cf
Si vous suivez cet article, il n'y a pas eu de problème (`・ ω ・ ´) ゞ
https://github.com/mima3/stream_twitter
Cependant, ici, nous utilisons l'API Streaming pour collecter des données Twitter et les stocker dans la base de données. Cette fois, contrairement à cela, il est nécessaire de stocker ce qui a été collecté par mention et craché par csv dans la base de données.
Alors, veuillez le stocker dans SQLite avec la source suivante.
create_database.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sqlite3
import csv
if __name__ == '__main__':
con = sqlite3.connect("twitter_stream.sqlite")
c = con.cursor()
# Create table
c.execute('''CREATE TABLE "twitte" ("id" INTEGER NOT NULL PRIMARY KEY, "createAt" DATETIME NOT NULL, "idStr" VARCHAR(255) NOT NULL, "contents" VARCHAR(255) NOT NULL);
''')
c.execute('''CREATE INDEX "twitte_createAt" ON "twitte" ("createAt");''')
c.execute('''CREATE INDEX "twitte_idStr" ON "twitte" ("idStr")''')
# Insert data
i = 0
data = []
reader = csv.reader(open("./perfume_tweet.csv"))
for row in reader:
id = i+1
createAt = row[4]
idStr = unicode(row[0],'utf-8')
contents = unicode(row[1],'utf-8')
t = (id,createAt,idStr,contents)
data.append(t)
i += 1
con.executemany(u"insert into twitte values(?,?,?,?)",data)
# Save (commit) the changes
con.commit()
# We can also close the cursor if we are done with it
con.close()
Vous avez créé avec succès twitter_stream.sqlite dans le répertoire actuel.
Ici, je vais reprendre le 17/12 (mercredi). Nous compterons le nombre de tweets par heure dans la journée.
python twitter_db_hist.py "2014/12/16 15:00" "2014/12/17 15:00" 3600
En regardant cela, ce qui suit peut être analysé.
・ Le fuseau horaire de 05h00 à 06h00 est le plus petit. Tout est bas de 02h00 à 06h00, donc tout le monde dort probablement en ce moment. ・ Les heures les plus fréquentes sont de 23h00 à minuit. Le nombre de tweets est généralement élevé de 18h00 à 24h00, mais le plus élevé est de 23h00 à 24h00 en fin de journée. Beaucoup de gens dorment depuis qu'ils ont tweeté sur Parfum?
C'est une idée approximative, mais vous pouvez la comprendre d'une manière ou d'une autre.
Ensuite, nous effectuerons une analyse morphologique à l'aide de Mecab. Ici, nous passerons au crible les tweets collectés pendant une semaine.
python twitter_db_mecab.py "2014/12/11 15:00" "2014/12/17 15:00" > mecab.txt
Vous trouverez ci-dessous une liste des 100 meilleurs.
word | count |
---|---|
Perfume | 10935 |
prfm | 2739 |
perfume | 2136 |
Suivre | 1553 |
~ | 1478 |
Chiru | 1462 |
Noru | 1448 |
Ordinaire | 1410 |
- | 1347 |
Comme | 1256 |
Vidéo | 1218 |
Chan | 1204 |
Parfum | 1056 |
Homme | 996 |
YouTube | 945 |
Mutuel | 889 |
Pendant ~ | 850 |
Résumé | 837 |
sougofollow | 775 |
vivre | 737 |
um | 726 |
Teru | 568 |
Apprivoiser | 555 |
www | 552 |
Dernières nouvelles | 552 |
Masculin | 551 |
Omoto | 544 |
Ayano | 544 |
Cercle | 543 |
mariage | 540 |
Fr | 537 |
perdre son sang froid | 535 |
Général | 534 |
♪ | 493 |
offre | 480 |
tempête | 433 |
Absent | 431 |
journée | 420 |
Ku | 419 |
Yahoo Ok | 413 |
Année | 408 |
tu | 401 |
Courant | 398 |
prix | 377 |
Temps | 374 |
Date et l'heure | 374 |
Chanson | 364 |
Vue | 356 |
Cling | 350 |
Un | 345 |
Noir | 342 |
Fin | 341 |
Œil | 341 |
Pafukura | 335 |
nombre | 332 |
Ecoutez | 331 |
of | 330 |
chose | 324 |
S'il vous plaît | 318 |
yauc | 308 |
DVD | 308 |
Limité | 307 |
Planche | 300 |
billet | 295 |
Je t'aime | 285 |
Feuille | 282 |
love | 276 |
Première fois | 271 |
Yuka | 270 |
Naturel | 263 |
Mois | 263 |
:-, | 262 |
Sa | 261 |
Action de poisson | 254 |
Donnez-moi | 250 |
!: | 250 |
Les pêches | 247 |
Espérer | 240 |
nowplaying | 240 |
Music | 239 |
FC | 237 |
Rang | 230 |
masque | 229 |
Chaudrée | 228 |
amour | 219 |
sol | 217 |
viens | 217 |
゜ | 217 |
Pomme | 214 |
Player | 213 |
Être | 210 |
Sekaowa | 209 |
Kashi | 207 |
mp | 206 |
la source | 205 |
Danse | 201 |
Son explosif | 201 |
alors | 201 |
Shiina | 200 |
1 | 200 |
Les principaux mots sont inclus dans le tweet du Bot, il ne s'agit donc pas de données significatives. En tant que valeur sensorielle, il semble que des mots significatifs apparaissent lors de l'analyse d'un total de 500 tweets ou moins.
Au cours de cette période de collecte de données, il y a eu de nombreux tweets sur l'événement "Masked Chauder ~ YAJIO CRAZY ~ Chau University University International Collagen High School" qui s'est tenu le samedi 20 décembre. était.
Nom de l'événement lié: "Masked" "Chauder" Informations sur les billets liées: «Offre» «Yafuoku» «Prix» «yauc» «Ticket» «Fiche» (Je n'étais pas familier avec yauc, mais cela semble être une balise de hachage de Yahoo!)
Après cela, j'ai pu analyser en gros ce qui suit.
Titre de la chanson du parfum lié: "Cling" (Cling Cling) "Natural" "Love" (In love with Natural) En relation avec le chanteur: "Arashi" "Momo" "Kuro" "Sakanaction" "Sekaowa" "Ringo" "Shiina" Lié au lecteur de musique de parfum: "Écouter" "Musique" "Lecteur" "mp"
Ensuite, utilisons CaboCha pour agréger les relations de dépendance des clauses. Encore une fois, nous analysons une semaine de tweets.
python twitter_db_cabocha.py "2014/12/11 15:00" "2014/12/17 15:00" > cabocha.txt
Regardons le top 100 de la même manière.
phrase1 | phrase2 | count |
---|---|---|
Perfume | Noru | 582 |
Pendant le live | Furieux www http://t | 535 |
Noru | Furieux www http://t | 535 |
●● | Furieux www http://t | 535 |
~Chan | Pendant le live | 535 |
Ayano Omoto General mâle | mariage | 532 |
Cette | Ayano Omoto General mâle | 532 |
PerfumeMusicPlayer | Ecoutez | 138 |
RT#M. Pafukura | Relier | 137 |
Absent | http://t | 131 |
Kuu | http://t | 127 |
M. Saito | http://t | 127 |
- | M. Saito | 127 |
Relier | #Pafukura http://t | 125 |
___VAMPS | ___Un ok | 97 |
Noir | ___Larque | 97 |
___glee | ___UVERworld | 97 |
___UVERworld | ___VAMPS | 97 |
___Les pêches | Noir | 97 |
___Bz | ___Un ok | 97 |
___Larque | ___Bz | 97 |
___Pomme Shiina___GLAY | ___glee | 93 |
『[Travail BGM]perfumemix』 | http://t | 91 |
Amour | Keru | 90 |
#Perfume#J'aime le parfum | Relier | 89 |
[Espoir de diffusion] ● Calendrier des événements explosifs ● Détails___http | ://t | 89 |
Nino | Beaucoup | 87 |
"secret | Arashi-chan | 86 |
Juste juste | Keru | 86 |
radio | Keru | 86 |
chose | Kariru | 86 |
"Mariage Dengeki~perfumeoflove~___Épisode 1" | http://t | 84 |
~Chan | Keru | 83 |
Ste | ___20131115』http://t | 77 |
___MUSIC | STATION | 77 |
STATION | Ste | 77 |
Vidéo FC2: | Keru | 75 |
___Perfume | ___Un ok | 74 |
Naturel | Tu me manques | 68 |
Hamaokamoto | (OKAMOTO'S) | 63 |
Comme | chose | 62 |
Une chanson | Voter | 60 |
cette année | Une chanson | 60 |
mot | 『Perfume』 | 58 |
- | -#prfm#perfume_um | 56 |
Ah | ~Chan | 55 |
Retour histoire Talk | http://t | 50 |
12/20(sol)Salle du château d'Osaka | billet | 50 |
2008-4-5 Sortie du jeu | Retour histoire Talk | 50 |
[3 princesses | Retour histoire Talk | 50 |
Agréable | Retour histoire Talk | 50 |
『PerfumeTalk | 2008-4-5 Sortie du jeu | 50 |
PerfumeMusicPlayer | Ecoutez | 48 |
Kashiyuka | Informer | 47 |
~Chan | Informer | 47 |
Perfume | ~Chan | 47 |
Comme | Homme | 45 |
Noru | Informer | 45 |
Naturel | je t'aime | 45 |
main | relier | 43 |
Sekaowa | Cuisse noire | 43 |
Ravi de vous rencontrer | S'il vous plaît | 43 |
chose | y a-t-il | 43 |
Comme | Un | 41 |
Perfume | Kashiyuka | 40 |
membre | Dessiner | 38 |
maintenant | Vérifiez http://t | 36 |
bientôt | Vérifiez http://t | 36 |
Perfume(Parfum) | billet | 36 |
En forme | Un | 36 |
co/ | 1IoZn9U583 | 35 |
Cuisse noire | Perfume | 35 |
Qi | Devenir | 34 |
Perfume | GLAY | 33 |
co/ | 7CRGN21Brf) | 33 |
Un | Suivez-moi | 33 |
hiver | Âge | 33 |
___http | ://t | 32 |
(#Perfume | Kuu | 32 |
Devine | Extreme Maiden | 32 |
H | ___GLAY\720 | 31 |
Noru | #prfm | 31 |
/ | J Soul Brothers de troisième génération | 31 |
Kariru | ___GLAY\720 | 31 |
J Soul Brothers de troisième génération | ___GLAY\720 | 31 |
(Auberge de Watts) | 2015 | 31 |
Deux personnes | Est | 31 |
2015 | Numéro de janvier[magazine]http://t | 31 |
___TEAM | H | 31 |
N'hésitez pas | Suivre | 30 |
cœur | Des sports | 29 |
12/20(sol)Détails de la salle du château d'Osaka | Ici | 29 |
tu | 28 | |
Perfume | membre | 28 |
mot | "Parfum Cosplay" | 28 |
Dessiner | ☆ Travail ultime ☆(> | 28 |
[Prix fixe ou moins] ★ Transfert ★ Kamen Chauder YAJIO CRAZY Université Chau University International Collagen High School | 12/20(sol)Salle du château d'Osaka | 28 |
En forme | Homme | 28 |
chose | Karu | 27 |
Comme | Artiste | 27 |
Encore une fois, un total de 500 dépendances ou plus sont des bots bruyants, alors passons en revue. À propos, le Bot est les deux tweets suivants.
Nocchi A-chan du parfum Pendant le live ●● et la rage www http://t.co/4Q0fmhel2l
Je ne sais pas comment regarder la table des dépendances, donc je grep avec les noms des trois membres. Parmi les expressions dépendantes, celles qui incluent "A-chan", "Kashiyuka" et "Nocchi" sont indiquées ci-dessous. (* Extraire uniquement ceux avec des phrases bien séparées)
phrase1 | phrase2 | count |
---|---|---|
Kashiyuka | doigt | 2 |
Kashiyuka | cheveux | 2 |
Kashiyuka | Secouer | 2 |
Kashiyuka | mignonne | 1 |
Kashiyuka | mignonne | 1 |
Kashiyuka | Tête | 1 |
Kashiyuka | jupe | 1 |
Divin | Kashiyuka | 1 |
Kashiyuka | main gauche | 1 |
Kashiyuka | voix | 1 |
Nocchi | Beau | 2 |
A-chan | ange | 2 |
A-chan | Col une pièce | 1 |
A-chan | Dumplings | 1 |
A-chan | Sourire | 1 |
Comme vous pouvez le voir, il y avait beaucoup de choses liées à Kayuka dans l'analyse des dépendances! En regardant cette dépendance, les caractéristiques de chacune des trois personnes se révèlent, ce qui est merveilleux ...
Comme mentionné ci-dessus, avec l'aide de mima_ita, nous avons analysé les tweets sur le parfum. Avec le recul, c'est dommage que nous ayons collecté une grande quantité de bottweets qui ne sont pas nécessaires pour l'analyse dans les conditions que nous avons effectuées cette fois ...
J'ai encore beaucoup de compétences en analyse de données et en Python, donc je vais acheter ce livre qui sortira la semaine prochaine et l'étudierai (`・ ω ・ ´) ゞ Introduction à la programmation en langage Python: manuel du MIT standard mondial
Recommended Posts