[PYTHON] Ich habe versucht, die Wetterkarte einer Clusteranalyse zu unterziehen

Einführung

Haben Sie jemals von Wörtern wie West-Hoch-Ost-Tief und Winter-Druckverteilung gehört? In der Nähe von Japan gibt es verschiedene Muster der Druckverteilung, und die winterliche Druckverteilung namens West High East Low ist wahrscheinlich die bekannteste (siehe Abbildung unten). Es gibt verschiedene andere Arten, wie beispielsweise eine sommerliche Druckverteilung, die vom pazifischen Hochdruck abgedeckt wird. In diesem Artikel werde ich versuchen, dieses Muster durch unbeaufsichtigtes Lernen zu klassifizieren. img.png (Aus Wetternachrichten)

Diesmal habe ich die folgenden drei Dinge getan.

Aufnahme von Satellitenbildern

Das Satellitenbild wurde von der Website des Enamiyama Meteorological Museum aufgenommen. Das liegt daran, dass diese Site zum Herunterladen von Zeilendaten schwer war und gut aussah, um mit gut verarbeiteten Daten zu kratzen. Ursprünglich erscheint es angemessen, bei HP des Meteorological Business Support Center zu kaufen, daher ist dieser Bereich ein Selbsturteil Vielen Dank. Der Quellcode wird hier nicht angezeigt, ist jedoch in github aufgeführt.

Das Bild, das ich verwendet habe, ist ein Bild von 12:00 (JST) in der Nähe von Japan und das folgende Bild (854 x 480 Pixel). 20190721.jpg

Vorverarbeitung


import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from PIL import Image
import glob
from tqdm import tqdm
from os import makedirs

from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score, silhouette_samples

x=np.empty((0,240*427))

paths=glob.glob("pictures/*.jpg ")
for path in tqdm(paths):
    img=Image.open(path)
    img = img.convert('L')
    img=img.resize((int(img.width/2), int(img.height/2)))
    x=np.append(x,np.array(img).reshape(1,-1),axis=0)


distortions = [] #
for k in tqdm(range(1, 20)):
    kmeans = KMeans(n_clusters=k, n_init=10, max_iter=100)
    kmeans.fit(x)
    distortions.append(kmeans.inertia_)
fig = plt.figure(figsize=(12, 8))
plt.xticks(range(1, 20))
plt.plot(range(1, 20), distortions)
plt.savefig("elbow.jpg ")
plt.close()

elbow.jpg


k_means = KMeans(n_clusters=4).fit(x)
y_pred = k_means.predict(x)
print(k_means.labels_)
print(pd.Series(k_means.labels_, name='cluster_number').value_counts(sort=False))

out=pd.DataFrame()
out["picture"]=paths
out["classnumber"]=y_pred
out["date"]=pd.to_datetime(out["picture"].str.split("\\",expand=True).iloc[:,1].str.split(".",expand=True).iloc[:,0])
out.to_csv("out.csv")

Ellbogenmethode Ellbogenmethode (Ermittlung der optimalen Anzahl von Clustern) Die optimale Anzahl von Clustern wurde nach der Ellbogenmethode berechnet. Es hat ungefähr 10 Minuten gedauert, um es mit 20 zu machen, also denke ich, dass ungefähr 10 genug sind. Das Ergebnis ist in der folgenden Abbildung dargestellt. Ich wusste nicht genau, wie viele gut sein würden, aber diesmal entschied ich mich, es mit 4 zu machen. Clusteranalyse Die Anzahl der Elemente pro Cluster betrug 139,61,68,98. Es war in gute Gefühle unterteilt, also kann ich es erwarten.


#Nach Klasse speichern
for i in range(4):
    makedirs(str(i)+"_pictures", exist_ok=True)
for i in out.itertuples():
    img=Image.open(i.picture)
    img.save(str(i.classnumber)+"_"+i.picture)

for i in range(4):
    out["month"]=out["date"].dt.month
    sns.countplot("month",data=out[out["classnumber"]==i])
    plt.title(i)
    plt.savefig("Monatliche Verteilung"+str(i))
    plt.close()

Speichern wir jede Klasse separat und sehen uns die monatliche Verteilung und die konkreten Bilder jeder Klasse an.

Cluster Nr. 0

月分布0.png Es fühlt sich an, als gäbe es im Winter viele und im Sommer nur wenige. Ist es eine winterliche Druckverteilung? Es scheint seltsam, dass dies auch im Sommer zu sehen ist, obwohl die Anzahl gering ist.

Die Bilder, die zu diesem Cluster gehören, sind beispielsweise wie folgt.

2020/1/13 2020/1/19
20200113.jpg 20200119.jpg

Dies war eine Wetterkarte mit einer typischen West-Hoch-Ost-Niederdruckverteilung und einem kalten Wind aus Nordwesten, der Wolken über dem japanischen Archipel verursachte.

Darüber hinaus sind die Zahlen zu diesem Cluster, die nicht im Winter sind, wie in der folgenden Abbildung dargestellt.

2020/6/26 2019/10/26
20200626.jpg 20191026.jpg

Die Atmosphäre ist, dass es Wolken über dem Kontinent und über Japan gibt und es keine Wolken über dem Pazifik gibt. Obwohl die Wolkentypen unterschiedlich sind, habe ich das Gefühl, dass die Atmosphäre des Wolkenstandorts sicherlich ähnlich ist.

Cluster Nr.1

月分布1.png Sie nimmt im April und November zu. Ich konnte nicht herausfinden, was sie allein mit dieser Grafik gemeinsam hatten.

Die Bilder, die zu diesem Cluster gehören, sind beispielsweise wie folgt.

2019/11/2 2020/4/29
20191102.jpg 20200429.jpg

Es schien keine klare Druckverteilungsfunktion zu haben. Als Merkmal des Bildes war das Gebiet um Japan sonnig, und es gab viele Bilder mit diagonalen Wolken in südöstlicher Richtung Japans. Einige dieser Wolken haben sich je nach Jahreszeit am Rande des pazifischen Hochdrucks gebildet, aber ich habe das Gefühl, dass ähnliche Wolken zufällig gebildet werden. Wenn überhaupt, hatte dieser Cluster einen starken Eindruck wie der Rest anderer Cluster.

Cluster Nr.2

月分布2.png Dies ist häufig während der Regenzeit der Fall. Ist es die Druckverteilung, wenn es eine Regenzeitfront gibt? Außerdem scheint im Februar, August und September niemand gesehen worden zu sein.

2020/6/28 2020/7/4
20200628.jpg 20200704.jpg

Wie erwartet zeigten viele dieser Cluster die Regenzeitfront. Es ist eine Regenzeit, die nicht in den vier Kategorien Frühling, Sommer, Herbst und Winter vorkommt, aber ich denke, es hat sich gezeigt, dass ihre meteorologischen Eigenschaften klar sind.

Die Bilder anderer Jahreszeiten, die zu diesem Cluster gehören, waren wie folgt.

2019/10/20 2020/3/19
20191020.jpg 20200319.jpg

Wolken mit einer ähnlichen Form wie die Frontlinie breiteten sich über den japanischen Archipel aus, und es ist verständlich, dass sie in diesen Cluster eingeteilt wurden.

Cluster Nr.3

月分布3.png Es zeigt einen überwältigenden Sommer. Es scheint die sommerliche Druckverteilung darzustellen, die über den pazifischen Hochdruck hinausragt.

Wenn man sich die Bilder ansieht, die tatsächlich in diesen Cluster eingeteilt wurden, war es ein Bild voller sommerlicher Gefühle wie folgt.

2019/7/29 2019/8/21
20190729.jpg 20190821.jpg

Darüber hinaus hatten viele Bilder anderer Jahreszeiten breitere Sonnentage.

2019/10/14 2019/11/1
20191014.jpg 20191101.jpg

Zusammenfassung

Aus den obigen Analyseergebnissen war es möglich, die allgemeine Tendenz der Druckverteilung durch Clusteranalyse zu klassifizieren und diejenigen zu interpretieren, die davon abweichen. Da das Satellitenbild den Druck jedoch nicht direkt darstellt, ist es nicht möglich, die Druckverteilung direkt zu klassifizieren, und die Cluster werden entsprechend der Wolkenverteilung unterteilt. Wenn also die Formen der Wolken ähnlich sind, ist dies falsch. Es wird klassifiziert. Um die Druckverteilung zu klassifizieren, gibt es Raum zu überlegen, wie nicht nur Wolken, sondern auch Druck erfasst werden können. Diesmal ausgeführter Code (Github)

Verweise

Recommended Posts

Ich habe versucht, die Wetterkarte einer Clusteranalyse zu unterziehen
Ich habe versucht, den allgemeinen Kommentar des verdammten Spiels des Jahres morphologisch zu analysieren
Ich habe den asynchronen Server von Django 3.0 ausprobiert
Ich habe die Pivot-Table-Funktion von Pandas ausprobiert
Ich habe zuerst die SARS-Analyse vor dem Corona-Virus versucht
Ich habe versucht, die Trapezform des Bildes zu korrigieren
Ich habe versucht, morphologische Analyse und Wortvektorisierung
Ich habe versucht, eine Clusteranalyse von Kunden anhand von Kaufdaten durchzuführen
Ich habe versucht, den Bildfilter von OpenCV zu verwenden
Ich habe versucht, die Texte von Hinatazaka 46 zu vektorisieren!
Ich habe versucht, den Grad der Koronavirusinfektion auf der Seekarten-Wärmekarte anzuzeigen
Ich habe versucht, die Grundform von GPLVM zusammenzufassen
Ich habe das MNIST-Tutorial von tensorflow für Anfänger ausprobiert.
Ich habe versucht, das Spiel in der J League vorherzusagen (Datenanalyse)
[OpenCV / Python] Ich habe versucht, Bilder mit OpenCV zu analysieren
Ich habe versucht, die API von Sakenowa Data Project zu verwenden
Ich habe versucht, die Spacha-Informationen von VTuber zu visualisieren
Ich habe versucht, den negativen Teil von Meros zu löschen
Ich habe versucht, die Werbung für die Raubkopien-Website zu kratzen
Ich habe die einfachste Methode zur Klassifizierung von Dokumenten mit mehreren Etiketten ausprobiert
Ich habe versucht, die Stimmen der Sprecher zu klassifizieren
Ich habe versucht, den Beispielcode des Ansible-Moduls auszuführen
Ich habe versucht, die String-Operationen von Python zusammenzufassen
Ich habe die Changefinder-Bibliothek ausprobiert!
Ich habe versucht, die Entropie des Bildes mit Python zu finden
[Pferderennen] Ich habe versucht, die Stärke des Rennpferdes zu quantifizieren
Ich habe versucht, die Standortinformationen des Odakyu-Busses zu erhalten
Ich habe versucht, mit TensorFlow den Durchschnitt mehrerer Spalten zu ermitteln
Ich habe versucht, das CNN-Modell von TensorFlow mit TF-Slim umzugestalten
Ich habe versucht, das Lachproblem mit Keras zu erkennen.
Ich habe versucht, die Uhrzeit und das heutige Wetter anzuzeigen
[Python] Ich habe versucht, die folgende Beziehung von Twitter zu visualisieren
Ich habe ein wenig versucht, das Verhalten der Zip-Funktion
[Maschinelles Lernen] Ich habe versucht, die Theorie von Adaboost zusammenzufassen
[Python] Ich habe versucht, Daten mit der API von Wikipedia zu sammeln
Ich habe versucht, das lokale Minimum der Goldstein-Preis-Funktion zu bekämpfen
Ich habe versucht, den Ipython-Cluster unter AWS auf das Minimum zu starten
Ich habe den Chat von YouTube Live angezeigt und versucht zu spielen
Ich habe das TensorFlow-Tutorial als erstes ausprobiert
Ich habe die Naro-Roman-API 2 ausprobiert
Ich habe den Mechanismus der Flaschenanmeldung untersucht!
Ich habe versucht, GrabCut von OpenCV zu verwenden
Ich habe das 2. TensorFlow-Tutorial ausprobiert
Ich habe die neuartige API von Naruro ausprobiert
Ich habe versucht, den Ball zu bewegen
Ich habe versucht, die checkio-API zu verwenden
Ich habe versucht, den Abschnitt zu schätzen.
Ich habe versucht, das Ranking des Qiita-Adventskalenders mit Python zu kratzen
[Linux] Ich habe versucht, die Ressourcenbestätigungsbefehle zusammenzufassen
Ich habe versucht, den Index der Liste mithilfe der Aufzählungsfunktion abzurufen
Ich habe versucht, die Bewässerung des Pflanzgefäßes mit Raspberry Pi zu automatisieren
[Python] Ich habe die Route des Taifuns mit Folium auf die Karte geschrieben
Ich habe versucht, das SD-Boot-Image von LicheePi Nano zu erstellen
Ich habe mir die Metainformationen von BigQuery angesehen und versucht, sie zu verwenden
Ich habe versucht, in 3 Jahren 5 Muster der Analysebasis zu erstellen
Ich habe versucht, die Größe des logischen Volumes mit LVM zu erweitern
Ich habe versucht, den DNN-Teil von OpenPose mit Chainer-CPU auszuführen
Ich habe versucht, die häufig verwendete Implementierungsmethode von pytest-mock zusammenzufassen