[PYTHON] Datenanalyse basierend auf den Wahlergebnissen der Gouverneurswahl von Tokio (2020)

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. ** **.

0. Zusammenfassung der Analyse

Hypothese, die Sie testen möchten

** => "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.)

Verwendete Daten

Analysefluss

Es wurde gemäß dem folgenden Fluss verarbeitet.

  1. Lesen Sie die Daten mit Pandas und kombinieren Sie sie zu einem DataFrame
  2. Ermitteln Sie den Prozentsatz der Hochschulabsolventen und den Prozentsatz der Stimmen für die Bevölkerung nach Stadt, Gemeinde, Stadt und Dorf
  3. Clustering aus Abstimmungsdaten nach der ** k-means-Methode **
  4. Erstellen Sie ein ** lineares Regressionsmodell **, das die Stimmenquote jedes Kandidaten anhand der Abschlussquote der Universität als erklärende Variable vorhersagt.
  5. Visualisierung

Schauen wir sie uns in der Reihenfolge ~ an Die folgende Verarbeitung erfolgt vollständig in Google Colab Notebook.

1. Daten lesen

Anzahl der Stimmen Daten

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.) スクリーンショット 2020-07-06 21.21.03.png

Abschließende akademische Hintergrunddaten (2010)

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.

Bevölkerungsdaten (2020)

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)

Feinabstimmung der Daten

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: スクリーンショット 2020-07-06 21.57.42.png

2. Datenverarbeitung

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"]
スクリーンショット 2020-07-06 22.04.10.png Ich habe alle notwendigen Daten. Es ist endlich Zeit für maschinelles Lernen.

3. Clustering nach der k-means-Methode

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()
スクリーンショット 2020-07-06 22.15.53.png

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

  1. Bezirk Ward und Tama aus der Präfektur Chiba, einige Inseln (Dorf Mikurajima, Dorf Ogasawara)
  2. Berge und Inseln **

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.

4. Lineare Regressionsanalyse

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()

5. Visualisierung

Zeigen Sie das Diagramm jedes Kandidaten mit dem zuvor definierten show_graph an. (Entschuldigen Sie die Titelabkürzung unten)

Yuriko Koike

スクリーンショット 2020-07-07 0.07.28.png Der Entscheidungsfaktor ist nicht hoch, aber Sie können sehen, dass das Clustering sehr gut funktioniert. #### Kenji Utsunomiya スクリーンショット 2020-07-07 0.07.35.png Es ist eine anständige Korrelation. #### Taro Yamamoto スクリーンショット 2020-07-07 0.07.41.png #### Taisuke Ono スクリーンショット 2020-07-07 0.07.47.png Dies scheint eine positive Korrelation zu haben. .. .. #### Makoto Sakurai スクリーンショット 2020-07-07 0.07.55.png

Zusammenfassung

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

Datenanalyse basierend auf den Wahlergebnissen der Gouverneurswahl von Tokio (2020)
Unterschied in den Ergebnissen abhängig vom Argument von multiprocess.Process
Versuchen Sie, COVID-19 Tokyo-Daten mit Python zu kratzen
Verwendung vergangener Wetterdaten 4 (Wettergefühle während der Olympischen Spiele in Tokio)
Lassen Sie uns die Analyse der sinkenden Daten der Titanic so durchführen
[Python] Hinweise zur Datenanalyse
Verwenden Sie die Clustering-Ergebnisse erneut
Ich habe versucht, PDF-Daten der medizinischen Online-Versorgung zu verwenden, die auf der Ausbreitung einer neuen Coronavirus-Infektion basieren
Linienprofil der fluoreszierenden Röntgenaufnahme von Metallelementen basierend auf der Wirkung von Metall
Speichern Sie das Ergebnis des Crawls mit Scrapy im Google Data Store
Praxis der Datenanalyse durch Python und Pandas (Tokyo COVID-19 Data Edition)
[GWAS] Zeichnen Sie die Ergebnisse der Hauptkomponentenanalyse (PCA) von PLINK auf
Starten Sie Data Science in der Cloud
Empfehlung zur Datenanalyse mit MessagePack
Zeitreihenanalyse 3 Vorverarbeitung von Zeitreihendaten
Illustration der Ergebnisse des Rucksackproblems
Datenverarbeitung 2 Analyse verschiedener Datenformate
Ich habe einen Korpusleser geschrieben, der die Ergebnisse der MeCab-Analyse liest
Version 2019: Trendanalyse für nicht autorisierten Zugriff (Beispiel eines Allzweckservers in der Cloud)
Folding @ Home unter Linux Mint soll zur Analyse des neuen Corona-Virus beitragen
Erläutern Sie den Mechanismus der PEP557-Datenklasse
Untersuchen Sie die Auswirkung von Ausreißern auf die Korrelation
Holen Sie sich die Spaltenliste und Datenliste von CASTable
Veröffentlichen Sie das Thema Google Mail auf Twitter
Zeigen Sie das Diagramm von tensorBoard auf jupyter an
Löschen Sie die Daten auf der Festplatte vollständig
Studie über die Miete in Tokio mit Python (3-1 von 3)
Ändern Sie die Reihenfolge von PostgreSQL in Heroku
Datenanalyseumgebung mit Schwerpunkt auf Datalab (+ GCP)
Visualisieren Sie die Exportdaten des Piyo-Protokolls
Versuchen Sie, die Umweltkonzentration organischer Fluorverbindungen mit offenen Daten auf einer Karte darzustellen
Die Niederschlagsdaten der Meteorologischen Agentur kratzen und auf M5Stack anzeigen
Einführung in die statistische Modellierung für die Datenanalyse Erweiterung des Anwendungsbereichs von GLM
Organisieren Sie Python-Tools, um die anfängliche Bewegung von Datenanalyse-Wettbewerben zu beschleunigen
Ich habe versucht, die Daten des Laptops durch Booten unter Ubuntu zu retten
Eine Einführung in die Datenanalyse mit Python - Um die Anzahl der Videoansichten zu erhöhen -