Gapminder Data
https://www.gapminder.org/data/
上記サイトのMean years in school (women 25 years and older)というデータです。
Mean years in school (women 25 years and older)
https://docs.google.com/spreadsheets/d/1kmnYQzXLGVF9RbKB3Y-WuUsJFumnE4s2UWdmlskv6r4/pub
googleスプレッドシート形式で保存されています。なぜかcsv形式でのダウンロードができなかったので、この表をpythonで取得してみます。pandasを使うと簡単でした。
参考にしたのはこちら↓
Python, pandasでwebページの表(htmlのtable)をスクレイピング
https://note.nkmk.me/python-pandas-web-html-table-scraping/
HTML の表(table タグ) をスクレイピングする時も pandas が超便利
http://www.python.ambitious-engineer.com/archives/1174
まずはpandasをpdとしてimport。
import pandas as pd
そのほか、lxml, html5lib, BeautifulSoup4のパッケージも必要のようなので、インストールされていなければpipでインストールしてください。(anacondaでは元々入っていました)
urlを指定してread_htmlで表をリストに取得。
df_tmp = pd.read_html("https://docs.google.com/spreadsheets/d/1kmnYQzXLGVF9RbKB3Y-WuUsJFumnE4s2UWdmlskv6r4/pub",header=0)
read_htmlではhtmlからtableタグを見つけて、表をデータフレーム形式で取得します。一つのページに複数の表がある場合は、それぞれ違うデータフレームとしてリストに格納します。オプションの「header=0」で、1行目を列名として利用しています。
取得した表の数の確認
len(df_tmp)
6
lenでリストに格納された要素数を数えます。6なので、6個の表があったようです。
データ確認
df_tmp[0].head()
| 1 | Row Labels | 1970 | 1971 | 1972 | 1973 | 1974 | 1975 | 1976 | 1977 | ... | 2000 | 2001 | 2002 | 2003 | 2004 | 2005 | 2006 | 2007 | 2008 | 2009 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 2 | Afghanistan | 0.0 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | ... | 0.2 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.4 |
| 1 | 3 | Albania | 3.9 | 4.0 | 4.1 | 4.2 | 4.3 | 4.5 | 4.6 | 4.7 | ... | 8.0 | 8.2 | 8.3 | 8.5 | 8.6 | 8.8 | 8.9 | 9.1 | 9.2 | 9.4 |
| 2 | 4 | Algeria | 0.6 | 0.6 | 0.6 | 0.7 | 0.7 | 0.8 | 0.8 | 0.9 | ... | 3.0 | 3.1 | 3.2 | 3.4 | 3.5 | 3.6 | 3.8 | 3.9 | 4.0 | 4.2 |
| 3 | 5 | Angola | 0.5 | 0.5 | 0.5 | 0.5 | 0.6 | 0.6 | 0.6 | 0.7 | ... | 1.9 | 2.0 | 2.1 | 2.2 | 2.3 | 2.4 | 2.5 | 2.6 | 2.7 | 2.8 |
| 4 | 6 | Antigua and Barbuda | 7.0 | 7.1 | 7.2 | 7.4 | 7.5 | 7.7 | 7.8 | 8.0 | ... | 11.2 | 11.4 | 11.5 | 11.6 | 11.7 | 11.8 | 11.9 | 12.0 | 12.1 | 12.2 |
5 rows × 42 columns
df_tmpに格納された最初の表[0]を見てみます。ここに目的の表が最初にあったようです。ちなみにリスト内[1]から[5]までは違う表が入っています。
表の一番左はindexでpandasが付けた行番号。その左に元からあったとみられる行番号がありますが、これは不要なので削除します。
列削除
df=df_tmp[0]
df=df.drop("1",axis=1)
df.head()
| Row Labels | 1970 | 1971 | 1972 | 1973 | 1974 | 1975 | 1976 | 1977 | 1978 | ... | 2000 | 2001 | 2002 | 2003 | 2004 | 2005 | 2006 | 2007 | 2008 | 2009 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Afghanistan | 0.0 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | ... | 0.2 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.3 | 0.4 |
| 1 | Albania | 3.9 | 4.0 | 4.1 | 4.2 | 4.3 | 4.5 | 4.6 | 4.7 | 4.8 | ... | 8.0 | 8.2 | 8.3 | 8.5 | 8.6 | 8.8 | 8.9 | 9.1 | 9.2 | 9.4 |
| 2 | Algeria | 0.6 | 0.6 | 0.6 | 0.7 | 0.7 | 0.8 | 0.8 | 0.9 | 0.9 | ... | 3.0 | 3.1 | 3.2 | 3.4 | 3.5 | 3.6 | 3.8 | 3.9 | 4.0 | 4.2 |
| 3 | Angola | 0.5 | 0.5 | 0.5 | 0.5 | 0.6 | 0.6 | 0.6 | 0.7 | 0.7 | ... | 1.9 | 2.0 | 2.1 | 2.2 | 2.3 | 2.4 | 2.5 | 2.6 | 2.7 | 2.8 |
| 4 | Antigua and Barbuda | 7.0 | 7.1 | 7.2 | 7.4 | 7.5 | 7.7 | 7.8 | 8.0 | 8.1 | ... | 11.2 | 11.4 | 11.5 | 11.6 | 11.7 | 11.8 | 11.9 | 12.0 | 12.1 | 12.2 |
5 rows × 41 columns
列名"1"を削除しました。df.dropで列名、axis=1で列方向と指定しています。ちなみに、列番号を指定して削除する場合は df.drop(df.columns[0],axis=1) とします。この方法がなかなか分からず、苦労しました。
csv保存
df.to_csv("school_women.csv", sep=",",index=False)
念のためcsvに保存。sepで区切り文字(,)を指定。index=Falseで列番号を付けずに保存します。こんな感じで、pandasを使うとweb上の表を簡単に取得できました。
参考:
Python, pandasでwebページの表(htmlのtable)をスクレイピング
https://note.nkmk.me/python-pandas-web-html-table-scraping/
HTML の表(table タグ) をスクレイピングする時も pandas が超便利
http://www.python.ambitious-engineer.com/archives/1174
edx UC Berkeley Foundations of Data Science(UCバークレー データサイエンス基礎講座)
ttps://www.edx.org/professional-certificate/berkeleyx-foundations-of-data-science
Computational Thinking with Python(pythonによるプログラミング的思考)
https://www.edx.org/course/foundations-data-science-computational-uc-berkeleyx-data8-1x
プログラミング学習:edx UCバークレー データサイエンス基礎講座の紹介(python)
https://eneprog.blogspot.com/2018/04/edx-uc-python.html







