トランプ大統領の支持率分析

ゆうき( @BASEBALLY15 )です^^

よくニュースで,トランプ大統領が取り上げられることが多いけれども, 実際にどれくらい国民に支持されているの ・・・?

Pythonを使って,実際に分析してみましょうか^^

そうですね^^

(Udemy 『実践Pythonデータサイエンス』を参考,Jupiternotebookを使用)

トランプ大統領とは?

第45代目のアメリカ合衆国の大統領で,不動産会社の会長兼社長も務めている.

トランプ大統領の政党は共和党です.

トランプ大統領とは?(ウィキペディア参照)

分析で用いたデータ

アメリカの政治関連のデータを紹介している『HuffPost Pollster』というサイトのデータを使います.以下に,csvファイルを添付しておきます.

今回の分析で用いるcsvファイル

https://elections.huffingtonpost.com/pollster/trump-job-approval.csv

それでは,分析を行っていきましょう^^

学習内容

今回は,以下の3点に絞って,学習を行っていこうと思います.

  1. csvファイルを読み込む
  2. DataFrame化する
  3. 賛成派と反対派の誤差棒を表示する

ライブラリ

import pandas as pd

from pandas import Series, DataFrame

import numpy as np

import matplotlib.pyplot as plt

import seaborn as sns

import matplotlib.pyplot as plt

import seaborn as sns

sns.set_style("whitegrid")

%matplotlib inline

そして,今回は,サイトからcsvファイルを読み込みたいので,以下のライブラリを追加します.

#Webページからurlのデータを持ってくる
import requests 

また,csvファイルの文字列をファイルの様に扱いたいので,以下のライブラリも追加しておきます.

#文字列をファイルの様に扱える
from io import StringIO

それでは,コードを見ていきましょう^^

コード

まず,サイトから,csvファイルを読み込むための準備をします.

1.csvファイルを読み込む

url = "https://elections.huffingtonpost.com/pollster/trump-job-approval.csv"

そして,以下のコードを記述し,urlを読み込みます.

#urlをテキスト形式で読み込む
source_trump = requests.get(url).text 

読み込んだurlのデータをStringIO()でファイル形式に変換したいと思います.

StringIO()を使うことで,引数にファイルパスしか受け付けないコード(例えば,pandas.read_csv)でも使うことが出来ます^^

以下に,StringIOに関して分かり易いサイトのurlを添付しておきます

StringIOとは?

それでは,以下のコードを記述し,urlのデータをファイル形式に変換したいと思います.

trumpjob_data = StringIO(source_trump)

2.DataFrame化する

次に,データフレーム化し,表として表示したいと思います.

#データフレーム化
trumpjob_df = pd.read_csv(trumpjob_data)

#実行
trumpjob_df.head()

すると,以下の表が表示されます.

PollsterStart DateEnd DateEntry Date/Time (ET)Number of ObservationsPopulationModeApproveDisapproveUndecidedPollster URLSource URLPartisanAffiliationQuestion TextQuestion Iteration
0Rasmussen2018-12-032018-12-052018-12-06T16:52:35Z1500.0Likely VotersIVR/Online49.050.0NaNhttps://elections.huffingtonpost.com/pollster/p…https://www.rasmussenreports.com/public_content…NonpartisanNoneNaN1
1YouGov/Economist2018-12-022018-12-042018-12-05T22:03:21Z1500.0AdultsInternet43.048.08.0https://elections.huffingtonpost.com/pollster/p…https://d25d2506sfb94s.cloudfront.net/cumulus_…NonpartisanNoneDo you approve or disapprove of the way Donald…1
2YouGov/Economist2018-12-022018-12-042018-12-05T22:03:21Z535.0Adults – DemocratInternet8.088.04.0https://elections.huffingtonpost.com/pollster/p…https://d25d2506sfb94s.cloudfront.net/cumulus_…NonpartisanNoneDo you approve or disapprove of the way Donald…1
3YouGov/Economist2018-12-022018-12-042018-12-05T22:03:21Z376.0Adults – RepublicanInternet86.010.04.0https://elections.huffingtonpost.com/pollster/p…https://d25d2506sfb94s.cloudfront.net/cumulus_…NonpartisanNoneDo you approve or disapprove of the way Donald…1
4YouGov/Economist2018-12-022018-12-042018-12-05T22:03:21Z589.0Adults – independentInternet41.046.013.0https://elections.huffingtonpost.com/pollster/p…https://d25d2506sfb94s.cloudfront.net/cumulus_…NonpartisanNoneDo you approve or disapprove of the way Donald…1

この表を使って,誤差棒をグラフに表示したいと思います.

3.賛成派と反対派の誤差棒を表示する

誤差棒とは.真の値からどれくらい誤差が生じているかを示したグラフです.

今回は,真の値を『平均』,誤差は『標準偏差』を使います.

誤差棒とは?(ウィキペディア参照)

まずは,トランプ大統領に賛成している人と反対している人の平均を求めます.

#平均を求める
trump_avg = pd.DataFrame(trumpjob_df.mean())

#実行
trump_avg
0
Number of Observations1930.959406
Approve42.799543
Disapprove52.360899
Undecided5.220476
Question Iteration1.000000

このデータの NUMBER OF OBSERVATIONS の部分はグラフには表示しないので,消去したいと思います.

以下のコードで,指定したところを消去できます.

#Number of Observationsを取り除く
trump_avg.drop("Number of Observations", axis=0, inplace=True)

#実行
trump_avg
0
Approve42.799543
Disapprove52.360899
Undecided5.220476
Question Iteration1.000000

取り除くことができました^^

ちなみに,inplace=Trueは,表を完全に書き換えることを意味しています.

次に,同じように標準偏差も求めたいと思います.

#標準偏差を求め,Number of Observationsを取り除く
trump_std = DataFrame(trumpjob_df.std())

#"Number of Observations"の列を取り除く
trump_std.drop("Number of Observations", axis=0, inplace=True)

#実行
trump_std
0
Approve24.173715
Disapprove24.053737
Undecided4.433635
Question Iteration0.000000

それでは,誤差棒を表示させたいと思います.

#誤差棒(err)を表示する→測定値からそれくらい離れているか
trump_avg.plot(yerr=trump_std, kind="bar", legend=False)

yerr=trump_std→誤差棒

kind=”bar”→誤差棒を線で表示

legend=False→凡例を表示しない

すると,以下のグラフが表示されます.

誤差棒(エラーバー)

このグラフから,賛成派,反対派ともに,平均からの離れ具合が大きいことが分かります.

これは,おそらく共和党と民主党の有権者にも世論調査をしているため,

党ごとに支持率が違うからだと思います.

トランプ大統領は,共和党なので共和党の有権者は賛成し,民主党は反対しますよね^^

終わりに

今回は,トランプ大統領の支持率のデータを使って,簡単なデータ分析をしました.

次からは,少し発展的な内容を学習していきます^^

それでは・・・

Q &A

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA