[PYTHON] Jupyter Notebook: 4 trucs et astuces banals

Aujourd'hui, le 23 décembre, c'est "Tenchobushi" pour célébrer l'anniversaire de l'empereur Imagami. Au fait, on dit que c'est l'année de l'ère impériale 2676 (nombre primaire? Non, 2 $ ^ 2 \ fois 3 \ fois 223 $). Soudainement après midi, sous le Namba surélevé, les vibrations de définition du train Nankai et de l'IPA étaient coincées dans la main gauche, et c'est un messager commun Jupyter Notebook. J'essaierai de le connecter.

Mec ordinaire

Éditeur de formule

Depuis environ un an, je fais de la théorie de groupe sur mon professeur avec la formation d'Alafor. Comme j'ai accumulé beaucoup de notes manuscrites, je souhaite en garder une copie propre et la conserver dans le référentiel. J'utilise LaTeX pour marquer le texte principal de la formule, mais la formule essentielle Comme prévu, le mode cellule est défini sur «Markdown».

$ Notation LaTeX $

Si tel est le cas, MathJax fera le reste.

Pendant ce temps, bien défini était un exemple de problème, j'ai donc décidé d'ajouter le numérateur et le dénominateur de la fraction. Si vous le sortez comme ça, vous devrez faire une note car le moment de sourire momentané et le bien défini de l'ajout de fractions ont été montrés par la mise à mort instantanée (seuls les points principaux sont extraits).

$\begin{eqnarray*}
    \dfrac{a}{b} = \dfrac{a^{'}}{b^{'}} \nonumber \\
    \dfrac{c}{d} = \dfrac{c^{'}}{d^{'}} \nonumber
\end{eqnarray*}$

Puis,

$\begin{eqnarray*}
    {a}{b^{'}} - {a^{'}}{b} = 0 \nonumber \\
    {c}{d^{'}} - {c^{'}}{d} = 0 \nonumber 
\end{eqnarray*}$

$\begin{eqnarray*}
    \dfrac{ad+bc}{bd} = \dfrac{a^{'}d^{'}+b^{'}c^{'}}{b^{'}d^{'}} \nonumber
\end{eqnarray*}$

$\begin{eqnarray*}
    (ad + bc)b^{'}d^{'} - bd(a^{'}d^{'} + b^{'}c^{'}) & = &  adb^{'}d^{'} + bcb^{'}d^{'} - bda^{'}d^{'} - bdb^{'}c^{'} \nonumber \\
                                                      & = &  dd^{'}(ab^{'} - a^{'}b) + bb^{'}(cd^{'} - c^{'}d)  \nonumber \\
                                                      & = & 0 \nonumber 
\end{eqnarray*}$

github le montre également assez bien, mais nbviewer Il est préférable de [reproduire] fidèlement l'expression disponible via /) (https://nbviewer.jupyter.org/github/azukiwasher/math-lessons/blob/master/algebra/well-defined.ipynb).

Dessin graphique

À partir de ce moment, j'ai commencé à sentir que quelque chose qui réduisait considérablement le nombre de mots était violemment sécrété dans le corps, alors j'ai essayé de le dessiner avec + IPA et la courbe de remniskate.

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

alpha = 1
t = np.linspace(0, 2*np.pi, num=1000)
x = [alpha * np.sqrt(2)*np.cos(i) / (np.sin(i)**2+1) for i in t]
y = [alpha * np.sqrt(2)*np.cos(i)*np.sin(i) / (np.sin(i)**2+1) for i in t]
plt.plot(x, y)

lemniscate.png

Un peu comme ça a été terminé. L'explication de ici sur la courbe de patinage Remni est merveilleuse.

Traitement d'image

Un exemple d'utilisation de opencv pour reconnaître le visage dit "humain" sur une image. Tout d'abord, vérifiez ce qui se passe lorsque vous l'essayez avec un certain caractère lâche (peut-être pas si lâche). Tirez la bibliothèque nécessaire et les images de caractères en vrac. Tout est fait avec une opération à guichet unique sur le bloc-notes Jupyter.

import cv2
from skimage import io
import matplotlib.pyplot as plt
%matplotlib inline

url = "https://qiita-image-store.s3.amazonaws.com/0/151745/8f4e7214-6c1c-c782-4986-5929a33f5a1b.jpeg "
img = io.imread(url)
plt.imshow(img)

image

Des données statiques (fichier de filtre en cascade) dans lesquelles les caractéristiques d'un visage humain sont apprises à l'avance sont préparées.

PATH_TO_CASCADE = "/Users/azki/anaconda3/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml"
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cascade = cv2.CascadeClassifier(PATH_TO_CASCADE)
faces = cascade.detectMultiScale(img_gray, scaleFactor=1.1, minNeighbors=1, minSize=(1, 1))
new_img = img
for x,y,w,h in faces:
  cv2.rectangle(new_img, (x,y), (x+w, y+h), (0, 0, 255), thickness=2)

plt.imshow(new_img)

image

Il semble qu'il soit reconnu comme un visage humain à deux endroits (carré bleu. La statue de bronze à la Ryoma est complètement traversée), mais j'ai décidé de ne pas la voir et d'essayer une autre image.

img2 = cv2.imread('gymnasium.jpg', cv2.IMREAD_COLOR)
plt.imshow(img2)

image

Appliquez le même filtre que le précédent Yuru Chara.

img2_gray = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
cascade = cv2.CascadeClassifier(PATH_TO_CASCADE)
faces = cascade.detectMultiScale(img2_gray, scaleFactor=1.1, minNeighbors=1, minSize=(1, 1))
new_img2 = img2
for x,y,w,h in faces:
  cv2.rectangle(new_img2, (x,y), (x+w, y+h), (0, 0, 255), 2)

plt.imshow(new_img2)

image

Il semble que des explosions accidentelles se soient produites, mais le résultat n'est pas mauvais. Puisque j'ai pu trancher le visage d'une personne de cette manière, je devrais être capable d'en appliquer une mosaïque et d'analyser les émotions et les situations de manière mécanique et à grande échelle.

Traitement du langage naturel

Quand Yoshiko voit le bureau de son mari tous les matins, il est toujours plus de dix heures, mais elle devient finalement son propre corps....

À partir d'un passage,

Je l'ai omis du manuscrit, mais je voudrais lui donner le titre "Human Chair".
Alors, ne soyez pas impoli, demandez simplement. 匆.

Puis, "[Human Chair] de Ranpo Edogawa (http://www.aozora.gr.jp/cards/001779/files/56648_58207.html)".

Se cachant dans une chaise qu'il a conçue, se faufilant dans la maison de quelqu'un d'autre au lieu d'être impoli, aiguisant ses sens comme s'il était devenu une sorte de capteur, s'intégrant au plus grand protocole de messagerie de l'époque, le bureau de poste, appelé une lettre qui n'est pas un journal. Envoyez des "sentiments" asynchrones et extrêmement unilatéraux. Le destinataire curieux et dans l'impasse a été terrifié par la réalité improbable et a demandé à son mari, qui était rentré du travail, "Eh bien, comment dois-je disposer de cette chaise dégoûtante?"

Je ne veux pas savoir comment cette "chaise humaine" a finalement été éliminée, et je ne veux pas savoir en premier lieu, mais "[] de Yumeno Hisaku, qui consiste en une excellente composition d'un mélange parfait de lettres et de textes locaux. Bottling Hell] est un Ranobe de l'ère Taisho, et ce travail est une donnée constituée d'une liste de mots word2vec Analysons-le.

Le texte préalablement nettoyé pour le bruit tel que rubis, en-tête et pied de page est analysé morphologiquement avec MeCab et tokenisé. En utilisant une liste de ces jetons comme entrée, le vocabulaire qui compose la "chaise humaine" est exprimé dans l'espace vectoriel avec word2vec. Plus la distance (valeur cos) dans l'espace est proche, plus elle est considérée comme sémantiquement similaire. De plus, il est possible d'effectuer des calculs (ajustement) entre les mots. Référence.

Quoi qu'il en soit, j'ai obtenu le texte de Aozora Bunko.

!curl -O http://www.aozora.gr.jp/cards/001779/files/56648_ruby_58198.zip
!unzip 56648_ruby_58198.zip

file = codecs.open('ningen-isu.txt', 'w', 'utf-8')
for line in codecs.open('ningen_isu.txt', 'r', 'shift_jis'):
  file.write(line)
file.close

#Nettoyez maintenant le texte avec un éditeur approprié.

Analyse morphologique. Choisissez un mot dont la partie est "nom".

import MeCab

tagger = MeCab.Tagger ('-F"%f[6] " -U"%m " -E"\n" -b 50000 -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd')
tagger.parseToNode('')

text = open('ningen-isu.txt')
tokens = []
for line in text:
  node = tagger.parseToNode(line)
  while node:
    word = node.surface
    pos = node.feature.split(',')[0]
    if 'nom' in pos:
      tokens.append(word)
    node = node.next
        
with open('ningen-isu-wakati.txt', 'w') as file:
  file.write(" ".join(tokens))

text.close
file.close

Exprimez des mots dans l'espace vectoriel. Aussi, jusqu'à ce qu'une partie de celui-ci soit visualisée.

#Importer les bibliothèques requises
import sys
import codecs
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager
from matplotlib.font_manager import FontProperties
from sklearn.manifold import TSNE
from gensim.models import word2vec
%matplotlib inline

#Génération de vecteur de mot
#Généré"ningen-isu-w2v"Supprimez la première ligne du fichier ligne par ligne.
data = word2vec.LineSentence('ningen-isu-wakati.txt')
model = word2vec.Word2Vec(data, size=200, min_count=1)
model.save_word2vec_format("ningen-isu-w2v",  binary=False)

#Configuration des polices japonaises pour la visualisation
font_path = '/Library/Fonts/Osaka.ttf'
font_prop = matplotlib.font_manager.FontProperties(fname=font_path)
matplotlib.rcParams['font.family'] = font_prop.get_name()
matplotlib.rcParams['font.size'] = 10.0

#Une fonction qui traite un fichier au format word2vec en données de visualisation.
def load_embeddings(file_name):
  with codecs.open(file_name, 'r', 'utf-8') as f_in:
    vocabulary, wv = zip(*[line.strip().split(' ', 1) for line in f_in])
    wv = np.loadtxt(wv, delimiter=' ', dtype=float)
  return wv, vocabulary

#Génération de graphes
embeddings_file = "ningen-isu-w2v"
wv, vocabulary = load_embeddings(embeddings_file)
tsne = TSNE(n_components=2, random_state=0)
np.set_printoptions(suppress=True)
Y = tsne.fit_transform(wv[:200,:]) #Limité à quelques mots

plt.figure(figsize=(20,20))
plt.scatter(Y[:, 0], Y[:, 1])
for label, x, y in zip(vocabulary, Y[:, 0], Y[:, 1]):
  plt.annotate(label, xy=(x, y), xytext=(0, 0), textcoords='offset points')

#plt.show()
plt.savefig('ningen-isu.png', bbox_inches='tight')
plt.close()

image

Vous pouvez voir que des mots tels que «je», «chaise» et «sentir» sont proches les uns des autres, oui.

Échantillons des distances (valeurs cos) de mots spécifiques.

image

HM. Alors que se passe-t-il lorsque vous tirez une «chaise» de «je»?

image

"subtil".

En ces jours où il est bruyant avec l'IoT et la Blockchain, quel genre de «chaise humaine» aurait été nouvellement lancé si Ranpo était en vie, et des impressions subjectives qui ont peu à voir avec les résultats de l'analyse. C'est tout pour la conclusion.

fin.

POSTSCRIPT

#Génération de graphes
embeddings_file = "ningen-isu-w2v"
wv, vocabulary = load_embeddings(embeddings_file)
tsne = TSNE(n_components=2, random_state=0)
np.set_printoptions(suppress=True)
Y = tsne.fit_transform(wv[:200,:]) #Limité à quelques mots

Dans la fonction ci-dessus, Y = tsne.fit_transform (wv [: 200,:]), ce problème a été reproduit dans l'environnement local. https://github.com/scikit-learn/scikit-learn/issues/6665 Comme vous pouvez le voir dans le commentaire sur le problème, j'ai pu le résoudre avec pip install --pre scikit-learn -U même dans mon environnement.

Recommended Posts

Jupyter Notebook: 4 trucs et astuces banals
3 astuces du notebook Jupyter (Python)
Le tour de Jupyter 4
Astuce de Jupyter 5
Le tour de Jupyter 2
L'astuce de Jupyter
Utiliser Jupyter Lab et Jupyter Notebook avec EC2
Opérations de base et touches de raccourci de Jupyter Notebook
Lier Python et JavaScript avec le notebook Jupyter
Mémo Jupyter Notebook
Présentation de Jupyter Notebook
Puissant ordinateur portable Jupyter
Mot de passe du notebook Jupyter
Mémo Jupyter Notebook
Installer matplotlib et afficher le graphique dans Jupyter Notebook
Conversion mutuelle entre l'article Qiita et le notebook Jupyter
(En bas) Coopération entre Jupyter Notebook et l'exécution d'Excel
Astuces Python et Numpy
Démarrer Jupyter Notebook
installation de jupyter et pandas
Enregistrez automatiquement les fichiers .py et .html dans le bloc-notes Jupyter.
[Windows] [Python3] Installer python3 et Jupyter Notebook (anciennement ipython notebook) sous Windows
Personnalisez Jupyter Notebook: modifiez l'arrière-plan et les icônes
[Cloud103] # 3 Jupyter Notebook à nouveau
Touche de raccourci pour le bloc-notes Jupyter
Introduction de Jupyter Notebook dans CentOS7
Utilisation de Graphviz avec Jupyter Notebook
Afficher le HTML dans le notebook Jupyter
Utiliser pip avec Jupyter Notebook
Erreur de multitraitement dans Jupyter Notebook
Essayez d'utiliser Jupyter Notebook de manière dynamique
[Super Basics] À propos de Jupyter Notebook
Afficher le PDF sur Jupyter Notebook
homebrew, pyenv, anaconda, Jupyter Notebook
Jouer avec Jupyter Notebook (IPython Notebook)
[Édition complète] Raccourci vers le bloc-notes Jupyter
Exécutez Jupyter Notebook sous Windows
Introduction et astuces de mlflow.
Comment utiliser Jupyter Notebook
notebook jupyter dans l'environnement venv python3.8
Utilisez Jupyter Notebook comme outil de test unitaire ou de création manuelle
Installez Anaconda sur votre Mac et téléchargez votre notebook Jupyter (IPython) sur Anaconda Cloud