[PYTHON] Analyse des données basée sur les résultats des élections du gouverneur de Tokyo (2020)

L'élection du gouverneur de Tokyo a eu lieu. Quel que soit le résultat, quand je regardais le résultat de l'ouverture du vote, le sang des amateurs de données me faisait mal et j'ai fait une simple analyse de données avec élan!

Je pense que c'est aussi un résumé du flux de l'acquisition de données sur le net au traitement avec des pandas et à une simple analyse des données.

** * Ce qui suit est simplement dans le cadre de l'intérêt personnel et a été fait comme une pratique d'analyse de données, il n'y a donc aucune intention ou acte politique. De plus, nous ne garantissons pas l'exactitude ou la signification des données utilisées et des résultats d'analyse. ** **

0. Résumé de l'analyse

Hypothèse que vous souhaitez tester

** => "Le résultat de l'élection est-il en corrélation avec la formation universitaire?" ** Je suis désolé, je suis assez ouvert d'esprit ... (Je me souviens que l'enquête sur la corrélation entre le revenu annuel des parents et la capacité scolaire des enfants a déjà été évoquée.)

Données utilisées

Flux d'analyse

Il a été traité selon le flux suivant.

  1. Lisez les données avec les pandas et combinez-les en un seul DataFrame
  2. Trouvez le pourcentage de diplômés universitaires et le pourcentage de votes pour la population par ville, quartier, ville et village
  3. Regroupement à partir des données sur le taux de vote par la ** méthode des k-moyennes **
  4. Créez un ** modèle de régression linéaire ** qui prédit le taux de vote de chaque candidat en utilisant le taux de diplomation universitaire comme variable explicative.
  5. Visualisation

Jetons un œil à eux dans l'ordre ~ Le traitement suivant est effectué sur Google Colab Notebook.

1. Lire les données

Données sur le nombre de votes

election.py


import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

#Données sur le nombre de votes (auto-fabriquées)
path = "~~~/xxxx.xlsx" #Nom du chemin dans Drive
df = pd.read_excel(path)

Quelque chose comme ça. Je l'ai vérifié, mais comme il a été fait par moi-même, soyez patient même s'il y a une erreur dans le nombre de votes ... (* À propos, si les données de vote pour l'élection précédente étaient les précédentes, elles ont été converties en données ouvertes, donc je pense que les résultats de cette période seront facilement disponibles après un certain temps.) スクリーンショット 2020-07-06 21.21.03.png

Données académiques finales (2010)

election.py


path = "~~~/xxxx.csv" #Nom du chemin dans Drive
edu = pd.read_csv(path,encoding='cp932') #l'encodage est pour l'entrée japonaise
#Extraire sous la ligne du nom de la colonne
edu.columns=edu.iloc[7] 
edu = edu[8:]
#Ne retirez que la partie totale de la commune
edu = edu[edu["Code de la ville"].isnull()]
#Réinitialisation de l'index
edu.reset_index(inplace=True)

election.py


#Combinez le nombre de diplômés (population non inscrite) et le nombre de diplômés universitaires (y compris les études supérieures)

df2 = pd.concat([df,edu["Diplômés"],edu["Université / École supérieure 2)"]],axis=1)
#Les noms de colonne pour les hommes et les femmes étaient les mêmes, les colonnes en double ont donc été supprimées.
#=>Ne laissez que le nombre total d'hommes et de femmes en df2
df2 = df2.loc[:,~df2.columns.duplicated()]

À propos, la disposition des villes, quartiers, villes et villages de Tokyo est unifiée dans tous les matériaux, vous pouvez donc définir axis = 1 sans vous soucier de la combinaison.

Données démographiques (2020)

election.py


path = "https://www.toukei.metro.tokyo.lg.jp/kurasi/2020/csv/ku20rv0440.csv"
population = pd.read_csv(path,encoding='cp932')
#Extraire la population par ville, quartier, ville et village
population = population[8:]["Unnamed: 4"].reset_index()
#Joindre
df3 = pd.concat([df2,population],axis=1)

Affiner les données

election.py


#Changer le nom de la colonne
df3.rename(columns={"Unnamed: 0":"Municipalité",
        'Diplômés': 'graduates', 
        'Université / École supérieure 2)': 'university graduation',
        "Unnamed: 4":"population"},
    inplace=True)
#Effacer les colonnes d'index inutiles
df3.drop("index",axis=1,inplace=True)
#Pour une raison quelconque, il était de type str, donc converti en type int
df3["population"] = df3["population"].astype(int)
df3["graduates"] = df3["graduates"].astype(int)
df3["university graduation"] = df3["university graduation"].astype(int)

En conséquence, df3 ressemble à ceci: スクリーンショット 2020-07-06 21.57.42.png

2. Traitement des données

election.py


data = df3.copy()
#Remplacer en divisant le nombre de votes obtenus par la population
data.iloc[:,1:6] = df3.iloc[:,1:6].values / df3["population"].values.reshape(62,1)
#Ajout d'une colonne pour le taux de diplomation universitaire (taux de diplomation universitaire = nombre de diplômés universitaires)/Nombre de graduations)
data["university graduation rate"] = data["university graduation"] / data["graduates"]
スクリーンショット 2020-07-06 22.04.10.png J'ai toutes les données nécessaires. Il est enfin temps pour l'apprentissage automatique.

3. Clustering par la méthode k-means

Utilisez sklearn.

election.py


from sklearn.cluster import KMeans

kmeans = KMeans(init='random', n_clusters=3,random_state=1)

X = data.iloc[:,1:6].values #Forme du ratio de vote=(62,5)
kmeans.fit(X)
y = kmeans.predict(X)  #Numéro de cluster

#Combinez les résultats du clustering en données
data = pd.concat([data,pd.DataFrame(y,columns=["cluster"])],axis=1)

Maintenant qu'il est divisé en 3 clusters, jetons un coup d'œil à ses fonctionnalités. (Au fait, j'ai essayé de changer le nombre de clusters (n_clusters), mais je pensais qu'environ 3 serait bien, alors je l'ai mis à 3.)

Regardons la moyenne de chaque donnée lorsque chaque cluster est l'axe.

election.py


data.groupby("cluster").mean()
スクリーンショット 2020-07-06 22.15.53.png

C'est juste une moyenne, mais vous pouvez voir qu'elle a été divisée en groupes avec des caractéristiques différentes. J'ai essayé de peindre les villes, les quartiers, les villes et les villages qui appartiennent au groupe sur la carte,

** 0. Zone de Yamate Line et ses environs

  1. Ward et Tama district de la préfecture de Chiba, certaines îles (village de Mikurajima, village d'Ogasawara)
  2. Montagnes et îles **

C'était une panne. J'ai été surpris que nous ayons pu faire une telle classification (ce qui semble possible dans le bon sens) sur la seule base du taux de vote.

4. Analyse de régression linéaire

L'analyse de régression linéaire est effectuée avec la variable explicative X comme pourcentage de diplômés collégiaux et la variable objective Y comme pourcentage de votes pour chaque candidat. Ce qui suit définit un ensemble de fonctions jusqu'à la visualisation.

election.py


from sklearn.linear_model import LinearRegression

colors=["blue","green","red"] #Pour le codage couleur des clusters

def graph_show(Jpname,name,sp=False,cluster=True,line=True):
  #Jpname:Notation kanji du candidat
  #name:Notation romaine du candidat (pour le graphique)

  X = data["university graduation rate"].values.reshape(-1,1)
  Y = data[Jpname].values.reshape(-1,1) 

  model = LinearRegression()
  model.fit(X,Y)

  print("Coefficient de décision(Coefficient de corrélation):{}".format(model.score(X,Y)))
  plt.scatter(X,Y)

  #Mettre en évidence des municipalités spécifiques dans le graphique (la valeur par défaut est False)
  if sp:
    markup = data[data["Municipalité"]==sp]
    plt.scatter(markup["university graduation rate"],markup[Jpname],color="red")

  #k-Code couleur pour chaque cluster obtenu au moyen
  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])
      
  #Afficher la ligne de régression
  if line:
    plt.plot(X, model.predict(X), color = 'orange')

  plt.title(name)
  plt.xlabel('university graduation rate')
  plt.ylabel('vote')  
  plt.show()

5. Visualisation

Affichez le graphique de chaque candidat en utilisant le show_graph défini précédemment. (Excusez-moi pour l'abréviation du titre ci-dessous)

Yuriko Koike

スクリーンショット 2020-07-07 0.07.28.png Le facteur de décision n'est pas élevé, mais vous pouvez voir que le clustering fonctionne très bien. #### Kenji Utsunomiya スクリーンショット 2020-07-07 0.07.35.png C'est une corrélation décente. #### Taro Yamamoto スクリーンショット 2020-07-07 0.07.41.png #### Taisuke Ono スクリーンショット 2020-07-07 0.07.47.png Cela semble avoir une corrélation positive. .. .. #### Makoto Sakurai スクリーンショット 2020-07-07 0.07.55.png

Résumé

L'analyse des données a commencé par la question ouverte «Le résultat de l'élection est-il lié à la formation universitaire?», Mais je voudrais conclure par une conclusion finale.

Avant cela, vérifions la partie inappropriée (potentielle) de cette analyse de données.

Pour cette raison, comme je l'ai écrit au début, je ne peux pas garantir que cette analyse des données sera significative. Dans cet esprit, je voudrais résumer les conclusions qui ne seraient pas démenties du moins de cette analyse des données.

(* La corrélation et la relation causale ne correspondent pas toujours) Quel endroit, comme. Eh bien, je pense personnellement que la conclusion n'est pas difficile à imaginer.

Il y a beaucoup de choses que nous pouvons comprendre sur les candidats individuels, mais je les omettrai ici.


Comme mentionné ci-dessus, puisque j'étudie l'analyse de données, j'ai essayé une analyse de données simple en utilisant des données fraîches, mais si vous combinez diverses données autres que les données utilisées cette fois, il y a d'autres choses Il semble y avoir quelque chose à comprendre.

Comme impression personnelle, il était difficile de saisir les données de vote, donc je n'avais pas besoin d'être une administration, alors j'ai pensé que ce serait bien si au moins les données compilées par la presse pouvaient être publiées en csv. (Je comprends qu'il existe diverses restrictions)

Recommended Posts

Analyse des données basée sur les résultats des élections du gouverneur de Tokyo (2020)
Différence de résultats en fonction de l'argument du multiprocessus.
Essayez de gratter les données COVID-19 Tokyo avec Python
Utilisation des données météorologiques passées 4 (sensations de la météo pendant les Jeux olympiques de Tokyo)
Faisons l'analyse des données de naufrage du Titanic comme ça
[Python] Notes sur l'analyse des données
Réutiliser les résultats du clustering
J'ai essayé d'utiliser des données PDF de soins médicaux en ligne basés sur la propagation d'une nouvelle infection à coronavirus
Profil de ligne de rayons X fluorescents d'élément métallique basé sur l'effet du métal
Enregistrez le résultat de l'exploration avec Scrapy dans Google Data Store
Pratique de l'analyse de données par Python et pandas (Tokyo COVID-19 data edition)
[GWAS] Tracez les résultats de l'analyse en composantes principales (ACP) par PLINK
Démarrez la science des données dans le cloud
Recommandation d'analyse des données à l'aide de MessagePack
Analyse des séries chronologiques 3 Prétraitement des données des séries chronologiques
Illustration des résultats du problème du sac à dos
Traitement des données 2 Analyse de divers formats de données
J'ai écrit un lecteur de corpus qui lit les résultats de l'analyse MeCab
Version 2019: analyse des tendances des accès non autorisés (exemple de serveur polyvalent sur le cloud)
Folding @ Home sur Linux Mint pour contribuer à l'analyse du nouveau virus corona
Expliquer le mécanisme de la classe de données PEP557
Étudiez l'effet des valeurs aberrantes sur la corrélation
Obtenez la liste des colonnes et la liste des données de CASTable
Publier le sujet de Gmail sur Twitter
Afficher le graphique de tensorBoard sur Jupyter
Effacez complètement les données du disque dur
Étude sur Tokyo Rent en utilisant Python (3-1 sur 3)
Changer l'ordre de PostgreSQL dans Heroku
Environnement d'analyse de données centré sur Datalab (+ GCP)
Visualisez les données d'exportation du journal Piyo
Essayez de tracer la concentration environnementale des composés organiques du fluor sur une carte à l'aide de données ouvertes
Gratter les données pluviométriques de l'Agence météorologique et les afficher sur M5Stack
Introduction à la modélisation statistique pour l'analyse des données Élargissement de la gamme d'applications de GLM
Organiser les outils Python pour accélérer le mouvement initial des compétitions d'analyse de données
J'ai essayé de récupérer les données de l'ordinateur portable en le démarrant sur Ubuntu
Une introduction à l'analyse de données à l'aide de Python - Pour augmenter le nombre de vues vidéo -