Wrap Analysis part1 (préparation des données)

Objectif

En analysant les paroles du rappeur actuel, il n'y a pas de but ultime particulier à essayer de trouver quelque chose. Je vais me concentrer sur le type de séquence de voyelles du texte, ce que j'ai fait dans "Je veux gérer la rime". Les données préparées concernent 8 chansons (environ 90 chansons) d'un groupe avec deux rappeurs contrastés. Les deux ont la différence entre un flot bizarre (bon pour mettre le son?!) Et une rime dure (difficile à expliquer), mais j'espère découvrir comment marcher sur la rime, le nombre d'apparitions et les voyelles que vous aimez. .. ~~ "123" est lu comme "Hi-Fumi" ou "Andu Troyes", j'ai donc préparé les données à la main dans cet esprit ~~

__ Texte des données vers DataFrame __

from pykakasi import kakasi
import re
import pandas as pd
import itertools

with open("./data/yoshi.txt","r", encoding="utf-8") as f:
    data = f.read()

#Liste de mots. Un mot de 2 à 4 caractères qui peut être créé en utilisant uniquement des voyelles. 775 types
word_list2 = [i[0]+i[1] for i in itertools.product("aiueo", repeat=2)]
word_list3 = [i[0]+i[1]+i[2] for i in itertools.product("aiueo", repeat=3)]
word_list4 = [i[0]+i[1]+i[2]+i[3] for i in itertools.product("aiueo", repeat=4)]
word_list = word_list2 + word_list3 + word_list4
#Divisé en chansons une par une.{nombre:Liste des paroles séparées par des espaces pleine largeur et des sauts de ligne}
text_data = data.split("!")
text_data_dic = {k:re.split("\u3000|\n", v) for k,v in enumerate(text_data)}

kakasi = kakasi()
kakasi.setMode('J', 'a')
kakasi.setMode('H', 'a')
kakasi.setMode('K', 'a')
conv = kakasi.getConverter()

#{nombre:Liste convertie en voyelles}
vowel_text_dic = {}
for k,v in text_data_dic.items(): 
    vowel_text_dic[k] = [conv.do(d) for d in v]
for k,v in vowel_text_dic.items():
    vowel_text_dic[k] = [re.sub(r"[^aeiou]+","",d) for d in v]

#Nom de colonne"aa"Etc., la valeur est le nombre d'apparitions. Compter l'expression pour une chanson
count_dic = {}
temp1 = []
temp2 = 0
for word in word_list:
    for k,v in vowel_text_dic.items():
        for vowel in v:
            temp2 += vowel.count(word)
        temp1.append(temp2)
        temp2 = 0
        vowel_text_len = 0
    count_dic[word] = temp1
    temp1 = []
    
df = pd.DataFrame(count_dic)
df["label"] = 0
df.to_csv("./data/yoshi.csv", index=False)
aa ai au ooou oooe oooo label
0 4 9 7 1 1 0 0
1 21 18 7 1 1 2 0
2 8 18 18 1 0 0 0
3 19 26 23 0 0 0 0
88 12 14 2 0 0 0 0
89 17 17 10 1 0 1 0

Il existe deux fichiers texte préparés pour chaque wrapper. Dans le texte, "!" Indique la partie où la chanson change, et dans les paroles, il y a "espace pleine largeur, saut de ligne" selon la carte des paroles. J'essaie de ne pas faire en sorte que les voyelles continuent à travers. L'autre fichier texte a été enregistré sous le nom df ["label"] = 1 pour une identification facile.

__ Regardez le contenu des données __

import pandas as pd

df1 = pd.read_csv("./data/pochomkin.csv")
df2 = pd.read_csv("./data/yoshi.csv")

#Focus sur la valeur moyenne de la partie à deux caractères
df1_2vowel = df1.describe().iloc[:, :25]
df1_2vowel = df1_2vowel.loc["mean", :]
print(df1_2vowel.sort_values(ascending=False))
df2_2vowel = df2.describe().iloc[:, :25]
df2_2vowel = df2_2vowel.loc["mean", :]
print(df2_2vowel.sort_values(ascending=False))

Il y a 776 colonnes, alors regardons-les séparément. J'ai vérifié ce qui était arrivé à celui avec la valeur moyenne la plus élevée pour chaque nombre de caractères de la colonne (iloc [:, 25: 150] pour 3 caractères, 125 types de 5 × 5 × 5 et iloc [:, 150: 775] pour 4 caractères. ]). Dans le cas de 2 caractères, les 4 premiers de df1 et df2 correspondaient à "ai, ia, ou, aa", et dans le cas de 3 caractères, les 2 premiers "aia, aai" correspondaient. Dans tous les cas, la valeur moyenne de df2 était plus élevée.

#Additionnez chaque direction de colonne et obtenez la valeur.(Comptez le nombre dans environ 90 chansons)
value_count_1 = df1.sum(axis=0).values
value_count_2 = df2.sum(axis=0).values
#Une valeur booléenne qui compte moins de 10 fois. Moins de 10 est vrai
bool_1 = value_count_1 < 10
bool_2 = value_count_2 < 10
#Imprimez une séquence de voyelles comptant moins de 10 fois sur les deux
print(df1.columns[bool_1 * bool_2])

En examinant la séquence des voyelles peu fréquentes dans les deux données, 37 étaient applicables, dont la plupart étaient des voyelles à 4 caractères, y compris "ee".

__ Résumé et politique future __

Le résultat de trouver une correspondance au sommet peut être qu'il existe de nombreuses séquences de voyelles en japonais, ou que le rappeur l'aime. De plus, en raison du nom de groupe "Ai Ranger", il peut apparaître fréquemment dans les données préparées. Je m'attendais à ce que "aa" apparaisse le plus fréquemment parce qu'il y a beaucoup de mots de "aaaa" tels que "bâclé, différents corps" dans l'ordre de "aa", mais des résultats différents sont obtenus. C'est intéressant. Cependant, peu importe à quel point les paroles du rappeur sont utilisées comme données, toutes les voyelles ne sont pas liées à la rime, donc je ne peux rien dire. Une autre chose à laquelle je m'attendais était que "chaque rappeur ait une séquence de voyelles préférée", mais la différence de caractéristiques n'est pas aussi remarquable que je m'y attendais, alors pourquoi ne pas me concentrer là-dessus? C'est comme ça. Ce que je peux dire cette fois, c'est que le wrapper du côté df2 (rime dure) semble avoir la même séquence de voyelles plus fréquemment que le wrapper du df1. C'est comme prévu. C'est aussi une nouvelle découverte que la fréquence de «ee» est faible. Il peut y avoir une raison pour que le wrapper l'évite, comme une difficulté à capter le son. Si vous divisez les données en deux, vous pourrez peut-être les classer. C'était un sentiment, mais il semble que ce n'est pas si facile. J'examinerai les données un peu plus à l'avenir pour voir s'il y a une différence entre les deux.

Recommended Posts

Wrap Analysis part1 (préparation des données)
Bibliothèque d'analyse de données multidimensionnelle xarray Partie 2
Analyse des données Titanic 2
Analyse des données Titanic 1
Analyse des données Titanic 3
Préparation à l'examen d'analyse de données certifié Python 3 Engineer
Traitement et jugement de la collecte du plan d'analyse des données (partie 1)
Traitement et jugement de la collecte du plan d'analyse des données (partie 2)
Analyse de données avec python 2
Kaggle ~ Analyse du logement ③ ~ Part1
Présentation de l'analyse de données python
Modèle d'analyse de données Python
Analyse de données avec Python
Mon conteneur d'analyse de données python
Xarray de bibliothèque d'analyse de données multidimensionnelle
Python pour l'analyse des données Chapitre 4
[Python] Notes sur l'analyse des données
Analyse des séries chronologiques partie 4 VAR
Analyse de séries chronologiques Partie 3 Prévisions
Python pour l'analyse des données Chapitre 2
Analyse de séries chronologiques Partie 1 Autocorrélation
Analyse de données à l'aide de pandas python
Conseils et précautions lors de l'analyse des données
Python pour l'analyse des données Chapitre 3
Analyse des données Twitter | Analyse des tendances
Première analyse de données satellitaires par Tellus
Application de Python: Nettoyage des données Partie 1: Notation Python
Python: analyse des séries chronologiques: prétraitement des données des séries chronologiques
Application Python: Traitement des données # 3: Format des données
Modèle de prétraitement pour l'analyse des données (Python)
Expérience de réussite du test d'analyse des données de la version de novembre 2020
Analyse de données pour améliorer POG 3 ~ Analyse de régression ~
Traitement de l'analyse japonaise à l'aide de Janome part1
Recommandation d'analyse des données à l'aide de MessagePack
Analyse des séries chronologiques 3 Prétraitement des données des séries chronologiques
Application Python: visualisation de données partie 1: basique
Analyse de données à partir de python (visualisation de données 1)
Analyse de données à partir de python (visualisation de données 2)
Traitement des données 2 Analyse de divers formats de données