[PYTHON] Jupyter Notebook: 4 banale Tipps und Tricks

Heute, am 23. Dezember, ist "Tenchobushi", um den Geburtstag von Kaiser Imagami zu feiern. Übrigens wird gesagt, dass es das Jahr der Kaiserzeit 2676 ist (Primärzahl? Nein, $ 2 ^ 2 \ mal 3 \ mal 223 $). Plötzlich nach Mittag, unter der erhöhten Namba, steckten die Def-Schwingungen des Nankai-Zuges und der IPA in der linken Hand, und es ist eine übliche Gewohnheit von Jupyter Notebook. Ich werde versuchen, ihn anzumelden.

Gemeiner Kerl

--Formula-Editor

Formeleditor

Seit ungefähr einem Jahr mache ich Gruppentheorie über meinen Lehrer mit Alafors Ausbildung. Da ich viele handschriftliche Notizen gesammelt habe, möchte ich eine saubere Kopie behalten und im Repository aufbewahren. Ich verwende LaTeX, um den Haupttext der Formel, aber die wesentliche Formel zu notieren Wie erwartet ist der Zellenmodus auf "Markdown" eingestellt.

$ LaTeX Notation $

In diesem Fall erledigt MathJax den Rest.

Während dieser Zeit war gut definiert ein Beispiel für ein Problem, daher habe ich beschlossen, den Zähler und den Nenner des Bruchs hinzuzufügen. Wenn Sie es so ausdrücken, müssen Sie sich eine Notiz machen, da der momentane grinsende Moment und die genau definierte Addition von Brüchen durch sofortiges Töten angezeigt wurden (nur die Hauptpunkte sind Auszüge).

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

Dann,

$\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 zeigt es auch ziemlich gut, aber nbviewer Es ist besser, den vorliegenden Ausdruck originalgetreu durch /) zu reproduzieren (https://nbviewer.jupyter.org/github/azukiwasher/math-lessons/blob/master/algebra/well-defined.ipynb).

Diagrammzeichnung

Von diesem Zeitpunkt an hatte ich das Gefühl, dass etwas, das die Anzahl der Wörter drastisch reduzierte, gewaltsam in den Körper abgesondert wurde, und versuchte, es mit + IPA und der Remni-Skating-Kurve zu zeichnen.

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

Ein etwas ähnliches wurde abgeschlossen. Die Erklärung von hier über die Remni-Skating-Kurve ist wunderbar.

Bildverarbeitung

Ein Beispiel für die Verwendung von opencv, um das sogenannte "menschliche" Gesicht auf einem Bild zu erkennen. Überprüfen Sie zunächst, was passiert, wenn Sie es mit einem bestimmten losen Charakter versuchen (möglicherweise nicht so locker). Ziehen Sie die erforderliche Bibliothek und lose Zeichenbilder. Mit dem Jupyter Notebook wird alles aus einer Hand erledigt.

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

Es werden statische Daten (Kaskadenfilterdatei) erstellt, in denen die Eigenschaften eines menschlichen Gesichts im Voraus gelernt werden.

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

Es scheint, dass es an zwei Stellen als menschliches Gesicht erkannt wird (blaues Quadrat. Die Ryoma-ähnliche Bronzestatue ist vollständig durch), aber ich habe beschlossen, es nicht zu sehen und ein anderes Bild zu versuchen.

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

image

Wenden Sie den gleichen Filter wie beim vorherigen Yuru Chara an.

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

Es scheint, dass einige versehentliche Explosionen aufgetreten sind, aber das Ergebnis ist nicht schlecht. Da ich in der Lage war, das Gesicht einer Person auf diese Weise zu schneiden, sollte ich in der Lage sein, ein Mosaik daraus anzubringen und Emotionen und Situationen mechanisch und in großem Maßstab zu analysieren.

Verarbeitung natürlicher Sprache

Wenn Yoshiko jeden Morgen das Büro ihres Mannes verlässt, ist es immer nach zehn Uhr, aber sie wird schließlich zu ihrem eigenen Körper....

Ausgehend von einer Passage,

Ich habe es aus dem Manuskript weggelassen, möchte ihm aber den Titel "Human Chair" geben.
Dann sei nicht unhöflich, frag einfach. 匆.

Dann Ranpo Edogawas "Human Chair".

Er versteckte sich auf einem Stuhl, den er entworfen hatte, schlich sich in das Haus eines anderen, anstatt unhöflich zu sein, schärfte seine Sinne, als wäre es eine Art Sensor geworden, und integrierte sich in das größte Nachrichtenprotokoll der Zeit, die Post, einen Brief, der kein Protokoll ist. Senden Sie asynchrone und extrem einseitige "Gefühle". Der neugierige und totgesperrte Empfänger war erschrocken über die unwahrscheinliche Realität und fragte seinen Mann, der von der Arbeit nach Hause zurückgekehrt war: "Nun, wie soll ich diesen ekelhaften Stuhl entsorgen?"

Ich möchte nicht wissen, wie dieser "menschliche Stuhl" endgültig entsorgt wurde, und ich möchte es überhaupt nicht wissen, aber Yumeno Hisakus "[ Bottling Hell] ist ein Ranobe aus der Taisho-Ära, und diese Arbeit besteht aus einer Liste von Wörtern [word2vec] ](Https://code.google.com/archive/p/word2vec/) Lassen Sie es uns analysieren.

Text, der im Voraus auf Rauschen wie Rubin, Kopf- und Fußzeile bereinigt wurde, wird mit MeCab morphologisch analysiert und mit einem Token versehen. Unter Verwendung einer Liste dieser Token als Eingabe wird das Vokabular, aus dem der "menschliche Stuhl" besteht, mit word2vec im Vektorraum ausgedrückt. Je näher der Abstand (cos-Wert) im Raum ist, desto semantischer wird er betrachtet. Zusätzlich ist es möglich, Berechnungen (Anpassungen) zwischen Wörtern durchzuführen. Referenz.

Wie auch immer, ich habe den Text von Aozora Bunko erhalten.

!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

#Reinigen Sie nun den Text mit einem geeigneten Editor.

Morphologische Analyse. Wählen Sie ein Wort, dessen Teil "Substantiv" ist.

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 'Substantiv' 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

Drücken Sie Wörter im Vektorraum aus. Auch bis ein Teil davon visualisiert wird.

#Importieren Sie die erforderlichen Bibliotheken
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

#Wortvektorgenerierung
#Generiert"ningen-isu-w2v"Löschen Sie die erste Zeile der Datei zeilenweise.
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)

#Einrichten japanischer Schriftarten zur Visualisierung
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

#Eine Funktion, die eine Datei im word2vec-Format in Visualisierungsdaten verarbeitet.
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

#Graphgenerierung
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,:]) #Beschränkt auf einige Wörter

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

Sie können sehen, dass Wörter wie "Ich", "Stuhl" und "Gefühl" nahe beieinander liegen, ja.

Lassen Sie uns einige Abstände (cos-Werte) bestimmter Wörter abtasten.

image

HM. Was passiert also, wenn Sie einen "Stuhl" von "Ich" ziehen?

image

"subtil".

In diesen Tagen, in denen es mit IoT und Blockchain laut ist, welche Art von "menschlichem Stuhl" wäre neu auf den Markt gekommen, wenn Ranpo am Leben gewesen wäre, und subjektive Eindrücke, die wenig mit den Analyseergebnissen zu tun haben. Das ist alles für den Abschluss.

Ende.

POSTSCRIPT

#Graphgenerierung
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,:]) #Beschränkt auf einige Wörter

In der obigen Funktion "Y = tsne.fit_transform (wv [: 200 ,:])" wurde dieses Problem in der lokalen Umgebung reproduziert. https://github.com/scikit-learn/scikit-learn/issues/6665 Wie Sie im Problemkommentar sehen können, konnte ich es sogar in meiner Umgebung mit "pip install --pre scikit-learn -U" beheben.

Recommended Posts

Jupyter Notebook: 4 banale Tipps und Tricks
3 Jupyter Notebook (Python) Tricks
Jupyters Trick 4
Jupyters Trick 5
Jupyters Trick 2
Jupyters Trick
Verwenden Sie Jupyter Lab und Jupyter Notebook mit EC2
Jupyter Notebook Grundfunktionen und Tastenkombinationen
Verknüpfung von Python und JavaScript mit dem Jupiter-Notizbuch
Jupyter Notizbuch Memo
Einführung in Jupyter Notebook
Leistungsstarkes Jupyter-Notizbuch
Jupyter Notebook Passwort
Jupyter Notizbuch Memo
Installieren Sie matplotlib und zeigen Sie das Diagramm in Jupyter Notebook an
Gegenseitige Konvertierung zwischen Qiita-Artikel und Jupyter-Notizbuch
(Unten) Zusammenarbeit zwischen Jupyter Notebook und Excel
Python- und Numpy-Tipps
Starten Sie Jupyter Notebook
Installation von Jupyter und Pandas
Speichern Sie .py- und .html-Dateien automatisch im Jupyter-Notizbuch.
[Windows] [Python3] Installieren Sie Python3 und Jupyter Notebook (ehemals Ipython Notebook) unter Windows
Machen Sie Jupyter Notebook zu Ihrem eigenen: Ändern Sie Hintergrund und Symbole
[Cloud103] # 3 Jupyter Notebook wieder
Tastenkombination für Jupyter-Notebook
Einführung des Jupyter Notebook in CentOS7
Verwenden von Graphviz mit Jupyter Notebook
HTML in Jupyter-Notizbuch anzeigen
Verwenden Sie pip mit Jupyter Notebook
Mehrfachverarbeitungsfehler in Jupyter Notebook
Versuchen Sie, Jupyter Notebook dynamisch zu verwenden
[Super Basics] Über jupyter Notebook
PDF auf Jupyter Notebook anzeigen
Homebrew, Pyenv, Anaconda, Jupyter Notebook
Spielen Sie mit Jupyter Notebook (IPython Notebook)
[Komplette Ausgabe] Jupyter Notebook Shortcut
Führen Sie Jupyter Notebook unter Windows aus
Einführung und Tipps von mlflow.Tracking
So verwenden Sie Jupyter Notebook
jupyter notebook in python3.8 venv umgebung
Verwenden Sie Jupyter Notebook als Komponententest oder manuelles Erstellungswerkzeug
Installieren Sie Anaconda auf Ihrem Mac und laden Sie Ihr Jupyter (IPython) -Notebook in die Anaconda Cloud hoch