Die Wahl des Gouverneurs von Tokio fand statt. Unabhängig vom Ergebnis schmerzte das Blut der Datenliebhaber, als ich mir das Ergebnis der Stimmeneröffnung ansah, und ich führte eine einfache Datenanalyse mit Schwung durch!
Ich denke, dass es auch eine Zusammenfassung des Flusses von der Datenerfassung im Netz bis zur Verarbeitung mit Pandas und einfacher Datenanalyse ist.
** * Das Folgende liegt einfach im Rahmen des persönlichen Interesses und wurde als Praxis der Datenanalyse durchgeführt, sodass keine politische Absicht oder Handlung vorliegt. Darüber hinaus übernehmen wir keine Garantie für die Richtigkeit oder Signifikanz der verwendeten Daten und der Analyseergebnisse. ** **.
** => "Korreliert das Wahlergebnis mit dem akademischen Hintergrund?" ** Es tut mir leid, dass ich ziemlich aufgeschlossen bin ... (Ich erinnere mich, dass die Erforschung des Zusammenhangs zwischen dem Jahreseinkommen der Eltern und den akademischen Fähigkeiten der Kinder zuvor ein Thema war.)
Es wurde gemäß dem folgenden Fluss verarbeitet.
Schauen wir sie uns in der Reihenfolge ~ an Die folgende Verarbeitung erfolgt vollständig in Google Colab Notebook.
election.py
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#Anzahl der Stimmen Daten (selbst gemacht)
path = "~~~/xxxx.xlsx" #Pfadname in Laufwerk
df = pd.read_excel(path)
Etwas wie das. Ich habe es überprüft, aber da ich es selbst gemacht habe, verzeihen Sie mir bitte, auch wenn die Anzahl der Stimmen fehlerhaft ist ... (* Übrigens, wenn die Abstimmungsdaten für die vorherige Wahl die vorherige waren, wurden sie in offene Daten umgewandelt, daher denke ich, dass die Ergebnisse dieser Zeit nach einer Weile leicht verfügbar sein werden.)
election.py
path = "~~~/xxxx.csv" #Pfadname in Laufwerk
edu = pd.read_csv(path,encoding='cp932') #Die Codierung ist für japanische Eingaben vorgesehen
#Extrahieren Sie unter der Zeile des Spaltennamens
edu.columns=edu.iloc[7]
edu = edu[8:]
#Nehmen Sie nur den gesamten Teil der Gemeinde heraus
edu = edu[edu["Stadtcode"].isnull()]
#Index zurückgesetzt
edu.reset_index(inplace=True)
election.py
#Kombinieren Sie die Anzahl der Absolventen (Bevölkerung nicht eingeschrieben) und die Anzahl der Hochschulabsolventen (einschließlich der Graduiertenschule).
df2 = pd.concat([df,edu["Absolventen"],edu["Universität / Graduiertenschule 2)"]],axis=1)
#Die Spaltennamen für Männer und Frauen waren identisch, daher wurden doppelte Spalten gelöscht.
#=>Lassen Sie nur die Gesamtzahl der Männer und Frauen in df2
df2 = df2.loc[:,~df2.columns.duplicated()]
Übrigens ist die Anordnung von Städten, Gemeinden, Städten und Dörfern in Tokio in allen Materialien einheitlich, sodass Sie Achse = 1 setzen können, ohne sich um die Kombination kümmern zu müssen.
election.py
path = "https://www.toukei.metro.tokyo.lg.jp/kurasi/2020/csv/ku20rv0440.csv"
population = pd.read_csv(path,encoding='cp932')
#Extrahieren Sie die Bevölkerung nach Stadt, Gemeinde, Stadt und Dorf
population = population[8:]["Unnamed: 4"].reset_index()
#Beitreten
df3 = pd.concat([df2,population],axis=1)
election.py
#Spaltennamen ändern
df3.rename(columns={"Unnamed: 0":"Gemeinde",
'Absolventen': 'graduates',
'Universität / Graduiertenschule 2)': 'university graduation',
"Unnamed: 4":"population"},
inplace=True)
#Löschen Sie unnötige Indexspalten
df3.drop("index",axis=1,inplace=True)
#Aus irgendeinem Grund war es str-Typ, also in int-Typ konvertiert
df3["population"] = df3["population"].astype(int)
df3["graduates"] = df3["graduates"].astype(int)
df3["university graduation"] = df3["university graduation"].astype(int)
Infolgedessen sieht df3 folgendermaßen aus:
election.py
data = df3.copy()
#Ersetzen Sie durch Teilen der Anzahl der Stimmen, die die Bevölkerung erhalten hat
data.iloc[:,1:6] = df3.iloc[:,1:6].values / df3["population"].values.reshape(62,1)
#Spalte für Abschlussquote hinzugefügt (Abschlussquote = Anzahl der Hochschulabsolventen)/Anzahl der Abschlüsse)
data["university graduation rate"] = data["university graduation"] / data["graduates"]
Ich habe alle notwendigen Daten.
Es ist endlich Zeit für maschinelles Lernen.
Verwenden Sie sklearn.
election.py
from sklearn.cluster import KMeans
kmeans = KMeans(init='random', n_clusters=3,random_state=1)
X = data.iloc[:,1:6].values #Form des Abstimmungsverhältnisses=(62,5)
kmeans.fit(X)
y = kmeans.predict(X) #Clusternummer
#Kombinieren Sie die Ergebnisse der Clusterbildung zu Daten
data = pd.concat([data,pd.DataFrame(y,columns=["cluster"])],axis=1)
Nachdem es nun in drei Cluster unterteilt ist, werfen wir einen Blick auf seine Funktionen. (Übrigens habe ich versucht, die Anzahl der Cluster (n_clusters) zu ändern, aber ich dachte, dass ungefähr 3 gut wäre, also habe ich sie auf 3 gesetzt.)
Schauen wir uns den Durchschnitt aller Daten an, wenn jeder Cluster die Achse ist.
election.py
data.groupby("cluster").mean()
Es ist nur ein Durchschnitt, aber Sie können sehen, dass es in Gruppen mit unterschiedlichen Merkmalen unterteilt wurde. Ich habe versucht, die Städte, Gemeinden, Städte und Dörfer, die zum Cluster gehören, auf der Karte zu malen.
** 0. Yamate Line Bereich und seine Umgebung
Es war ein Zusammenbruch. Ich war überrascht, dass wir eine solche Klassifizierung (die im gesunden Menschenverstand möglich zu sein scheint) allein anhand der Stimmenzahl vornehmen konnten.
Die lineare Regressionsanalyse wird mit der erklärenden Variablen X als Prozentsatz der Hochschulabsolventen und der Zielvariablen Y als Prozentsatz der Stimmen für jeden Kandidaten durchgeführt. Im Folgenden werden eine Reihe von Funktionen bis zur Visualisierung definiert.
election.py
from sklearn.linear_model import LinearRegression
colors=["blue","green","red"] #Zur Farbcodierung von Clustern
def graph_show(Jpname,name,sp=False,cluster=True,line=True):
#Jpname:Kanji-Notation des Kandidaten
#name:Römische Notation des Kandidaten (für Grafik)
X = data["university graduation rate"].values.reshape(-1,1)
Y = data[Jpname].values.reshape(-1,1)
model = LinearRegression()
model.fit(X,Y)
print("Entscheidungskoeffizient(Korrelationskoeffizient):{}".format(model.score(X,Y)))
plt.scatter(X,Y)
#Betonen Sie bestimmte Gemeinden in der Grafik (Standard ist Falsch).
if sp:
markup = data[data["Gemeinde"]==sp]
plt.scatter(markup["university graduation rate"],markup[Jpname],color="red")
#k-Farbcodierung für jeden mittels erhaltenen Cluster
if cluster:
for i in range(3):
data_ = data[data["cluster"]==i]
X_ = data_["university graduation rate"].values.reshape(-1,1)
Y_ = data_[Jpname].values.reshape(-1,1)
plt.scatter(X_,Y_,color=colors[i])
#Regressionslinie anzeigen
if line:
plt.plot(X, model.predict(X), color = 'orange')
plt.title(name)
plt.xlabel('university graduation rate')
plt.ylabel('vote')
plt.show()
Zeigen Sie das Diagramm jedes Kandidaten mit dem zuvor definierten show_graph an. (Entschuldigen Sie die Titelabkürzung unten)
Die Datenanalyse begann mit der offenen Frage: "Bezieht sich das Wahlergebnis auf den akademischen Hintergrund?". Ich möchte jedoch mit einer abschließenden Schlussfolgerung schließen.
Lassen Sie uns vorher den unangemessenen (potenziellen) Teil dieser Datenanalyse überprüfen.
Aus diesem Grund kann ich, wie ich zu Beginn schrieb, nicht garantieren, dass diese Datenanalyse aussagekräftig ist. In diesem Sinne möchte ich die Schlussfolgerungen zusammenfassen, die zumindest aus dieser Datenanalyse nicht bestritten werden.
(* Korrelation und Kausalzusammenhang stimmen nicht immer überein) Was für ein Ort wie. Nun, ich persönlich denke, dass die Schlussfolgerung nicht schwer vorstellbar ist.
Es gibt viele Dinge, die wir über einzelne Kandidaten verstehen können, aber ich werde sie hier weglassen.
Wie oben erwähnt, habe ich, da ich Datenanalyse studiere, eine einfache Datenanalyse mit frischen Daten versucht. Wenn Sie jedoch andere Daten als die diesmal verwendeten Daten kombinieren, gibt es andere Dinge Es scheint etwas zu verstehen zu geben.
Als persönlicher Eindruck war es schwierig, die Abstimmungsdaten einzugeben, so dass ich keine Verwaltung sein musste. Ich dachte, es wäre schön, wenn zumindest die von der Presse zusammengestellten Daten in csv veröffentlicht werden könnten. (Ich verstehe, dass es verschiedene Einschränkungen gibt)
Recommended Posts