pandasを使いたおす

辻 真吾 (@tsjshg)

自己紹介

辻 真吾(1975年8月生まれ)

今は、東京大学先端科学技術研究センターで働いています

「がん」と「ゲノム」の研究室ですが、やっていることとはデータ解析

でも、来年以降の仕事を探しています(失業保険か?)

今日の話題

Pythonにおけるデータ解析(PyData)の基本ツールになりつつあるpandasを紹介

ただ…

「使いたおす」と言ったものの、今回資料作成のために、pandasの機能を見渡すと、そのあまりの膨大さに、自分がいかに未熟か実感。

pandasについて

データのまとまり(時系列やテーブル型)をうまく扱うためのすごいライブラリ

利用するためには

pip pandasでもいいですが、他にもいろいろあると便利なので

CONITUUM社のanacondaがおすすめ

ipython notebookでの利用を想定します

In [147]:
# 準備
%matplotlib inline
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
# この2行は import pylabで代用することも可

データの読み込み

たとえば都道府県の人口と面積

In [113]:
# 区切りはタブ、最初の列がindex
data1 = pd.read_csv('data_1.csv',sep='\t', index_col=0)
data1.head(5)
Out[113]:
人口総数(人) 人口総数(男)(人) 人口総数(女)(人) 総面積(北方地域及び竹島を除く)(ha) 可住地面積(ha) 主要湖沼面積(ha) 林野面積(ha) 森林面積(ha) 森林以外の草生地面積(ha) 自然環境保全地域面積(ha)
北海道 5,431,000 2,561,000 2,870,000 7,842,134 2,220,772 68,583 5,552,779 5,336,167 216,612 9,561.83
青森県 1,335,000 627,000 708,000 964,474 323,352 13,464 627,658 615,064 12,594 1,230.17
岩手県 1,295,000 619,000 676,000 1,527,889 369,392 0 1,158,497 1,147,152 11,345 4,956.45
宮城県 2,328,000 1,133,000 1,194,000 728,580 314,510 1,722 412,348 408,510 3,838 8,574.17
秋田県 1,050,000 493,000 558,000 1,163,632 319,413 7,892 836,327 820,640 15,687 818.59
In [24]:
# DataFrameというデータ型
type(data1)
Out[24]:
pandas.core.frame.DataFrame
In [27]:
# データの概要を示すメソッドがある
data1.describe()
# あれ??データが数値として認識されてない
Out[27]:
人口総数(人) 人口総数(男)(人) 人口総数(女)(人) 総面積(北方地域及び竹島を除く)(ha) 可住地面積(ha) 主要湖沼面積(ha) 林野面積(ha) 森林面積(ha) 森林以外の草生地面積(ha) 自然環境保全地域面積(ha)
count 47 47 47 47 47 47 47 47 47 47
unique 47 47 45 47 47 22 47 47 47 46
top 1,405,000 557,000 999,000 227,672 230,109 0 842,091 218,902 1,971 0
freq 1 1 2 1 1 26 1 1 1 2
In [28]:
# カンマの入った文字列を数字にする
import locale
locale.setlocale(locale.LC_NUMERIC,'ja_JP')
locale.atof('123,456')
Out[28]:
123456.0
In [114]:
# すべての要素にこの関数を適用する
data1 = data1.applymap(locale.atof)
data1.tail(5)
Out[114]:
人口総数(人) 人口総数(男)(人) 人口総数(女)(人) 総面積(北方地域及び竹島を除く)(ha) 可住地面積(ha) 主要湖沼面積(ha) 林野面積(ha) 森林面積(ha) 森林以外の草生地面積(ha) 自然環境保全地域面積(ha)
熊本県 1801000 847000 955000 740489 273212 0 467277 453565 13712 332.01
大分県 1178000 557000 621000 633982 174590 0 459392 453179 6213 16.16
宮崎県 1120000 526000 594000 773608 184580 0 589028 587343 1685 183.97
鹿児島県 1680000 785000 894000 918899 327060 1211 590628 587111 3517 1825.00
沖縄県 1415000 694000 721000 227672 116810 0 110862 105027 5835 1078.79
In [30]:
# もう一度概要を計算
data1.describe()
Out[30]:
人口総数(人) 人口総数(男)(人) 人口総数(女)(人) 総面積(北方地域及び竹島を除く)(ha) 可住地面積(ha) 主要湖沼面積(ha) 林野面積(ha) 森林面積(ha) 森林以外の草生地面積(ha) 自然環境保全地域面積(ha)
count 47.000000 47.000000 47.000000 47.000000 47.000000 47.000000 47.000000 47.000000 47.000000 47.000000
mean 2708446.808511 1317212.765957 1391212.765957 793458.255319 259911.170213 4923.638298 528623.446809 520460.234043 8163.212766 1927.220426
std 2701073.480710 1335905.684255 1365942.196501 1099611.790722 308460.102339 14247.078263 792722.071080 762462.628872 31372.864926 2787.046593
min 578000.000000 275000.000000 302000.000000 187658.000000 85143.000000 0.000000 58094.000000 57910.000000 0.000000 0.000000
25% 1130500.000000 537000.000000 593500.000000 416651.000000 130853.000000 0.000000 229929.500000 229657.000000 511.500000 202.920000
50% 1680000.000000 785000.000000 894000.000000 609584.000000 204418.000000 0.000000 373317.000000 373045.000000 1685.000000 645.210000
75% 2728500.000000 1312000.000000 1416500.000000 808853.500000 297846.000000 1578.500000 589828.000000 587227.000000 6024.000000 2031.270000
max 13300000.000000 6566000.000000 6733000.000000 7842134.000000 2220772.000000 68583.000000 5552779.000000 5336167.000000 216612.000000 11236.400000
In [56]:
# []で列にアクセス
data1['人口総数(人)']
Out[56]:
北海道      5431000
青森県      1335000
岩手県      1295000
宮城県      2328000
秋田県      1050000
山形県      1141000
福島県      1946000
茨城県      2931000
栃木県      1986000
群馬県      1984000
埼玉県      7222000
千葉県      6192000
東京都     13300000
神奈川県     9079000
新潟県      2330000
富山県      1076000
石川県      1159000
福井県       795000
山梨県       847000
長野県      2122000
岐阜県      2051000
静岡県      3723000
愛知県      7443000
三重県      1833000
滋賀県      1416000
京都府      2617000
大阪府      8849000
兵庫県      5558000
奈良県      1383000
和歌山県      979000
鳥取県       578000
島根県       702000
岡山県      1930000
広島県      2840000
山口県      1420000
徳島県       770000
香川県       985000
愛媛県      1405000
高知県       745000
福岡県      5090000
佐賀県       840000
長崎県      1397000
熊本県      1801000
大分県      1178000
宮崎県      1120000
鹿児島県     1680000
沖縄県      1415000
Name: 人口総数(人), dtype: float64
In [57]:
# これはSeriesデータ型
type(data1['人口総数(人)'])
Out[57]:
pandas.core.series.Series
In [58]:
# DataFrameからSeriesを切り出して、その1つの要素にアクセス
s = data1['人口総数(人)']
s['東京都']
Out[58]:
13300000.0

DataFrame[列名] -> Series

Series[ラベル] -> 数値データ

In [62]:
# こうすると表の1つのデータにアクセスできる
data1['人口総数(人)']['東京都']
Out[62]:
13300000.0
In [63]:
# 同じことがこれでもできる
data1.loc['東京都','人口総数(人)']
Out[63]:
13300000.0
In [67]:
# さらに数字でもいける(東京は13行目)
data1.iloc[12,0]
Out[67]:
13300000.0
In [68]:
# pandasの機能ではないですが、データと言えばまずヒストグラム
plt.hist(data1['人口総数(人)'])
Out[68]:
(array([ 26.,  11.,   1.,   3.,   1.,   2.,   2.,   0.,   0.,   1.]),
 array([   578000.,   1850200.,   3122400.,   4394600.,   5666800.,
          6939000.,   8211200.,   9483400.,  10755600.,  12027800.,
         13300000.]),
 <a list of 10 Patch objects>)
In [70]:
# 対数をとるといい感じになることが多い(対数正規性)
_ = plt.hist(data1['人口総数(人)'].apply(np.log10))
# 不自然に人口が密集している地域があることがわかる
In [71]:
# データの並べ替え
data1.sort('人口総数(人)')
Out[71]:
人口総数(人) 人口総数(男)(人) 人口総数(女)(人) 総面積(北方地域及び竹島を除く)(ha) 可住地面積(ha) 主要湖沼面積(ha) 林野面積(ha) 森林面積(ha) 森林以外の草生地面積(ha) 自然環境保全地域面積(ha)
鳥取県 578000 275000 302000 350731 91077 1848 257806 256491 1315 153.70
島根県 702000 336000 366000 670777 128819 15894 526064 519717 6347 178.74
高知県 745000 350000 395000 710520 116057 0 594463 592206 2257 508.70
徳島県 770000 366000 404000 414681 102423 0 312258 310615 1643 39.00
福井県 795000 385000 410000 418989 107408 1125 310456 309978 478 273.12
佐賀県 840000 396000 444000 243967 133299 0 110668 110554 114 243.93
山梨県 847000 414000 433000 446537 95235 1930 349372 347401 1971 2144.33
和歌山県 979000 461000 519000 472632 109592 0 363040 363014 26 329.39
香川県 985000 475000 510000 187658 100295 0 87363 87226 137 88.02
秋田県 1050000 493000 558000 1163632 319413 7892 836327 820640 15687 818.59
富山県 1076000 519000 557000 424762 185257 0 239505 239505 0 623.78
宮崎県 1120000 526000 594000 773608 184580 0 589028 587343 1685 183.97
山形県 1141000 548000 593000 932346 285527 0 646819 643395 3424 5105.96
石川県 1159000 561000 598000 418621 138896 702 279023 277573 1450 1050.50
大分県 1178000 557000 621000 633982 174590 0 459392 453179 6213 16.16
岩手県 1295000 619000 676000 1527889 369392 0 1158497 1147152 11345 4956.45
青森県 1335000 627000 708000 964474 323352 13464 627658 615064 12594 1230.17
奈良県 1383000 653000 730000 369109 85143 0 283966 283900 66 92.10
長崎県 1397000 652000 745000 410588 163444 0 247144 242791 4353 733.12
愛媛県 1405000 661000 744000 567851 166734 0 401117 399772 1345 1947.37
沖縄県 1415000 694000 721000 227672 116810 0 110862 105027 5835 1078.79
滋賀県 1416000 700000 716000 401736 129658 67420 204658 203760 898 0.00
山口県 1420000 670000 750000 611414 171619 0 439795 436737 3058 0.00
鹿児島県 1680000 785000 894000 918899 327060 1211 590628 587111 3517 1825.00
熊本県 1801000 847000 955000 740489 273212 0 467277 453565 13712 332.01
三重県 1833000 893000 940000 577735 204418 0 373317 373045 272 463.40
岡山県 1930000 926000 1004000 711324 222738 0 488586 483659 4927 101.33
福島県 1946000 948000 999000 1378276 422858 12902 942516 936128 6388 4867.41
群馬県 1984000 976000 1008000 636233 230109 225 405899 403752 2147 7645.21
栃木県 1986000 986000 999000 640828 298151 1177 341500 340775 725 5271.19
岐阜県 2051000 993000 1059000 1062117 220026 0 842091 839690 2401 2956.87
長野県 2122000 1031000 1090000 1356223 331375 2071 1022777 1014580 8197 790.42
宮城県 2328000 1133000 1194000 728580 314510 1722 412348 408510 3838 8574.17
新潟県 2330000 1127000 1203000 1258384 450380 627 807377 790928 16449 2008.42
京都府 2617000 1254000 1363000 461326 117735 1205 342386 342043 343 221.87
広島県 2840000 1370000 1470000 847981 229069 0 618912 610631 8281 2054.12
茨城県 2931000 1461000 1470000 609584 398185 22138 189261 188278 983 645.21
静岡県 3723000 1833000 1890000 778060 275350 7154 495556 486723 8833 6301.47
福岡県 5090000 2402000 2688000 497942 277588 0 220354 219809 545 134.11
北海道 5431000 2561000 2870000 7842134 2220772 68583 5552779 5336167 216612 9561.83
兵庫県 5558000 2655000 2903000 839647 277547 0 562100 561052 1048 398.30
千葉県 6192000 3080000 3112000 515662 353175 1435 161052 160369 683 1773.75
埼玉県 7222000 3615000 3608000 379808 257407 0 122401 122132 269 518.24
愛知県 7443000 3718000 3724000 516516 297541 0 218975 218902 73 292.11
大阪府 8849000 4267000 4582000 190142 132048 0 58094 57910 184 38.33
神奈川県 9079000 4544000 4535000 241605 146737 686 94182 94103 79 11236.40
東京都 13300000 6566000 6733000 218867 139214 0 79653 78729 924 772.30
In [73]:
# 鳥取とか言われても・・・(ヘルプの表示)
? data1.sort
In [74]:
# 順番を逆にする
data1.sort('人口総数(人)', ascending=False)
Out[74]:
人口総数(人) 人口総数(男)(人) 人口総数(女)(人) 総面積(北方地域及び竹島を除く)(ha) 可住地面積(ha) 主要湖沼面積(ha) 林野面積(ha) 森林面積(ha) 森林以外の草生地面積(ha) 自然環境保全地域面積(ha)
東京都 13300000 6566000 6733000 218867 139214 0 79653 78729 924 772.30
神奈川県 9079000 4544000 4535000 241605 146737 686 94182 94103 79 11236.40
大阪府 8849000 4267000 4582000 190142 132048 0 58094 57910 184 38.33
愛知県 7443000 3718000 3724000 516516 297541 0 218975 218902 73 292.11
埼玉県 7222000 3615000 3608000 379808 257407 0 122401 122132 269 518.24
千葉県 6192000 3080000 3112000 515662 353175 1435 161052 160369 683 1773.75
兵庫県 5558000 2655000 2903000 839647 277547 0 562100 561052 1048 398.30
北海道 5431000 2561000 2870000 7842134 2220772 68583 5552779 5336167 216612 9561.83
福岡県 5090000 2402000 2688000 497942 277588 0 220354 219809 545 134.11
静岡県 3723000 1833000 1890000 778060 275350 7154 495556 486723 8833 6301.47
茨城県 2931000 1461000 1470000 609584 398185 22138 189261 188278 983 645.21
広島県 2840000 1370000 1470000 847981 229069 0 618912 610631 8281 2054.12
京都府 2617000 1254000 1363000 461326 117735 1205 342386 342043 343 221.87
新潟県 2330000 1127000 1203000 1258384 450380 627 807377 790928 16449 2008.42
宮城県 2328000 1133000 1194000 728580 314510 1722 412348 408510 3838 8574.17
長野県 2122000 1031000 1090000 1356223 331375 2071 1022777 1014580 8197 790.42
岐阜県 2051000 993000 1059000 1062117 220026 0 842091 839690 2401 2956.87
栃木県 1986000 986000 999000 640828 298151 1177 341500 340775 725 5271.19
群馬県 1984000 976000 1008000 636233 230109 225 405899 403752 2147 7645.21
福島県 1946000 948000 999000 1378276 422858 12902 942516 936128 6388 4867.41
岡山県 1930000 926000 1004000 711324 222738 0 488586 483659 4927 101.33
三重県 1833000 893000 940000 577735 204418 0 373317 373045 272 463.40
熊本県 1801000 847000 955000 740489 273212 0 467277 453565 13712 332.01
鹿児島県 1680000 785000 894000 918899 327060 1211 590628 587111 3517 1825.00
山口県 1420000 670000 750000 611414 171619 0 439795 436737 3058 0.00
滋賀県 1416000 700000 716000 401736 129658 67420 204658 203760 898 0.00
沖縄県 1415000 694000 721000 227672 116810 0 110862 105027 5835 1078.79
愛媛県 1405000 661000 744000 567851 166734 0 401117 399772 1345 1947.37
長崎県 1397000 652000 745000 410588 163444 0 247144 242791 4353 733.12
奈良県 1383000 653000 730000 369109 85143 0 283966 283900 66 92.10
青森県 1335000 627000 708000 964474 323352 13464 627658 615064 12594 1230.17
岩手県 1295000 619000 676000 1527889 369392 0 1158497 1147152 11345 4956.45
大分県 1178000 557000 621000 633982 174590 0 459392 453179 6213 16.16
石川県 1159000 561000 598000 418621 138896 702 279023 277573 1450 1050.50
山形県 1141000 548000 593000 932346 285527 0 646819 643395 3424 5105.96
宮崎県 1120000 526000 594000 773608 184580 0 589028 587343 1685 183.97
富山県 1076000 519000 557000 424762 185257 0 239505 239505 0 623.78
秋田県 1050000 493000 558000 1163632 319413 7892 836327 820640 15687 818.59
香川県 985000 475000 510000 187658 100295 0 87363 87226 137 88.02
和歌山県 979000 461000 519000 472632 109592 0 363040 363014 26 329.39
山梨県 847000 414000 433000 446537 95235 1930 349372 347401 1971 2144.33
佐賀県 840000 396000 444000 243967 133299 0 110668 110554 114 243.93
福井県 795000 385000 410000 418989 107408 1125 310456 309978 478 273.12
徳島県 770000 366000 404000 414681 102423 0 312258 310615 1643 39.00
高知県 745000 350000 395000 710520 116057 0 594463 592206 2257 508.70
島根県 702000 336000 366000 670777 128819 15894 526064 519717 6347 178.74
鳥取県 578000 275000 302000 350731 91077 1848 257806 256491 1315 153.70
In [82]:
# sortの引き数にリストを指定できるので、複数列でソート出来る
data1.sort(['主要湖沼面積(ha)','可住地面積(ha)'],ascending=[True, False])
Out[82]:
人口総数(人) 人口総数(男)(人) 人口総数(女)(人) 総面積(北方地域及び竹島を除く)(ha) 可住地面積(ha) 主要湖沼面積(ha) 林野面積(ha) 森林面積(ha) 森林以外の草生地面積(ha) 自然環境保全地域面積(ha)
岩手県 1295000 619000 676000 1527889 369392 0 1158497 1147152 11345 4956.45
愛知県 7443000 3718000 3724000 516516 297541 0 218975 218902 73 292.11
山形県 1141000 548000 593000 932346 285527 0 646819 643395 3424 5105.96
福岡県 5090000 2402000 2688000 497942 277588 0 220354 219809 545 134.11
兵庫県 5558000 2655000 2903000 839647 277547 0 562100 561052 1048 398.30
熊本県 1801000 847000 955000 740489 273212 0 467277 453565 13712 332.01
埼玉県 7222000 3615000 3608000 379808 257407 0 122401 122132 269 518.24
広島県 2840000 1370000 1470000 847981 229069 0 618912 610631 8281 2054.12
岡山県 1930000 926000 1004000 711324 222738 0 488586 483659 4927 101.33
岐阜県 2051000 993000 1059000 1062117 220026 0 842091 839690 2401 2956.87
三重県 1833000 893000 940000 577735 204418 0 373317 373045 272 463.40
富山県 1076000 519000 557000 424762 185257 0 239505 239505 0 623.78
宮崎県 1120000 526000 594000 773608 184580 0 589028 587343 1685 183.97
大分県 1178000 557000 621000 633982 174590 0 459392 453179 6213 16.16
山口県 1420000 670000 750000 611414 171619 0 439795 436737 3058 0.00
愛媛県 1405000 661000 744000 567851 166734 0 401117 399772 1345 1947.37
長崎県 1397000 652000 745000 410588 163444 0 247144 242791 4353 733.12
東京都 13300000 6566000 6733000 218867 139214 0 79653 78729 924 772.30
佐賀県 840000 396000 444000 243967 133299 0 110668 110554 114 243.93
大阪府 8849000 4267000 4582000 190142 132048 0 58094 57910 184 38.33
沖縄県 1415000 694000 721000 227672 116810 0 110862 105027 5835 1078.79
高知県 745000 350000 395000 710520 116057 0 594463 592206 2257 508.70
和歌山県 979000 461000 519000 472632 109592 0 363040 363014 26 329.39
徳島県 770000 366000 404000 414681 102423 0 312258 310615 1643 39.00
香川県 985000 475000 510000 187658 100295 0 87363 87226 137 88.02
奈良県 1383000 653000 730000 369109 85143 0 283966 283900 66 92.10
群馬県 1984000 976000 1008000 636233 230109 225 405899 403752 2147 7645.21
新潟県 2330000 1127000 1203000 1258384 450380 627 807377 790928 16449 2008.42
神奈川県 9079000 4544000 4535000 241605 146737 686 94182 94103 79 11236.40
石川県 1159000 561000 598000 418621 138896 702 279023 277573 1450 1050.50
福井県 795000 385000 410000 418989 107408 1125 310456 309978 478 273.12
栃木県 1986000 986000 999000 640828 298151 1177 341500 340775 725 5271.19
京都府 2617000 1254000 1363000 461326 117735 1205 342386 342043 343 221.87
鹿児島県 1680000 785000 894000 918899 327060 1211 590628 587111 3517 1825.00
千葉県 6192000 3080000 3112000 515662 353175 1435 161052 160369 683 1773.75
宮城県 2328000 1133000 1194000 728580 314510 1722 412348 408510 3838 8574.17
鳥取県 578000 275000 302000 350731 91077 1848 257806 256491 1315 153.70
山梨県 847000 414000 433000 446537 95235 1930 349372 347401 1971 2144.33
長野県 2122000 1031000 1090000 1356223 331375 2071 1022777 1014580 8197 790.42
静岡県 3723000 1833000 1890000 778060 275350 7154 495556 486723 8833 6301.47
秋田県 1050000 493000 558000 1163632 319413 7892 836327 820640 15687 818.59
福島県 1946000 948000 999000 1378276 422858 12902 942516 936128 6388 4867.41
青森県 1335000 627000 708000 964474 323352 13464 627658 615064 12594 1230.17
島根県 702000 336000 366000 670777 128819 15894 526064 519717 6347 178.74
茨城県 2931000 1461000 1470000 609584 398185 22138 189261 188278 983 645.21
滋賀県 1416000 700000 716000 401736 129658 67420 204658 203760 898 0.00
北海道 5431000 2561000 2870000 7842134 2220772 68583 5552779 5336167 216612 9561.83
In [118]:
# 人口密度を計算して、新しい列として追加する
data1['人口密度(人/ha)'] = data1['人口総数(人)']/data1['総面積(北方地域及び竹島を除く)(ha)']
data1['人口密度(人/ha)']
Out[118]:
北海道      0.692541
青森県      1.384174
岩手県      0.847575
宮城県      3.195257
秋田県      0.902347
山形県      1.223795
福島県      1.411909
茨城県      4.808197
栃木県      3.099116
群馬県      3.118354
埼玉県     19.014871
千葉県     12.007866
東京都     60.767498
神奈川県    37.577865
新潟県      1.851581
富山県      2.533183
石川県      2.768614
福井県      1.897425
山梨県      1.896819
長野県      1.564639
岐阜県      1.931049
静岡県      4.784978
愛知県     14.410009
三重県      3.172735
滋賀県      3.524703
京都府      5.672778
大阪府     46.538903
兵庫県      6.619448
奈良県      3.746861
和歌山県     2.071379
鳥取県      1.647987
島根県      1.046548
岡山県      2.713250
広島県      3.349132
山口県      2.322485
徳島県      1.856849
香川県      5.248910
愛媛県      2.474241
高知県      1.048528
福岡県     10.222074
佐賀県      3.443089
長崎県      3.402437
熊本県      2.432177
大分県      1.858097
宮崎県      1.447762
鹿児島県     1.828275
沖縄県      6.215081
Name: 人口密度(人/ha), dtype: float64
In [90]:
_ = plt.hist(data1['人口密度(人/ha)'])
In [91]:
# 条件を判定する
data1['人口密度(人/ha)'] >= 30
Out[91]:
北海道     False
青森県     False
岩手県     False
宮城県     False
秋田県     False
山形県     False
福島県     False
茨城県     False
栃木県     False
群馬県     False
埼玉県     False
千葉県     False
東京都      True
神奈川県     True
新潟県     False
富山県     False
石川県     False
福井県     False
山梨県     False
長野県     False
岐阜県     False
静岡県     False
愛知県     False
三重県     False
滋賀県     False
京都府     False
大阪府      True
兵庫県     False
奈良県     False
和歌山県    False
鳥取県     False
島根県     False
岡山県     False
広島県     False
山口県     False
徳島県     False
香川県     False
愛媛県     False
高知県     False
福岡県     False
佐賀県     False
長崎県     False
熊本県     False
大分県     False
宮崎県     False
鹿児島県    False
沖縄県     False
Name: 人口密度(人/ha), dtype: bool
In [98]:
# 条件に合う行だけを取り出す
dense = data1[data1['人口密度(人/ha)'] >=30]
dense
Out[98]:
人口総数(人) 人口総数(男)(人) 人口総数(女)(人) 総面積(北方地域及び竹島を除く)(ha) 可住地面積(ha) 主要湖沼面積(ha) 林野面積(ha) 森林面積(ha) 森林以外の草生地面積(ha) 自然環境保全地域面積(ha) 人口密度(人/ha)
東京都 13300000 6566000 6733000 218867 139214 0 79653 78729 924 772.30 60.767498
神奈川県 9079000 4544000 4535000 241605 146737 686 94182 94103 79 11236.40 37.577865
大阪府 8849000 4267000 4582000 190142 132048 0 58094 57910 184 38.33 46.538903
In [93]:
# 複数の条件でandやorをとる
data1[(data1['人口密度(人/ha)'] >=30) & (data1['主要湖沼面積(ha)'] ==0)]
Out[93]:
人口総数(人) 人口総数(男)(人) 人口総数(女)(人) 総面積(北方地域及び竹島を除く)(ha) 可住地面積(ha) 主要湖沼面積(ha) 林野面積(ha) 森林面積(ha) 森林以外の草生地面積(ha) 自然環境保全地域面積(ha) 人口密度(人/ha)
東京都 13300000 6566000 6733000 218867 139214 0 79653 78729 924 772.30 60.767498
大阪府 8849000 4267000 4582000 190142 132048 0 58094 57910 184 38.33 46.538903
In [97]:
# あんまり人がいないのは
sparse = data1[data1['人口密度(人/ha)'] <=1]
sparse
Out[97]:
人口総数(人) 人口総数(男)(人) 人口総数(女)(人) 総面積(北方地域及び竹島を除く)(ha) 可住地面積(ha) 主要湖沼面積(ha) 林野面積(ha) 森林面積(ha) 森林以外の草生地面積(ha) 自然環境保全地域面積(ha) 人口密度(人/ha)
北海道 5431000 2561000 2870000 7842134 2220772 68583 5552779 5336167 216612 9561.83 0.692541
岩手県 1295000 619000 676000 1527889 369392 0 1158497 1147152 11345 4956.45 0.847575
秋田県 1050000 493000 558000 1163632 319413 7892 836327 820640 15687 818.59 0.902347
In [103]:
# indexが重なっていなければ、appendでデータを連結できる
mini_japan = sparse.append(dense)
mini_japan
Out[103]:
人口総数(人) 人口総数(男)(人) 人口総数(女)(人) 総面積(北方地域及び竹島を除く)(ha) 可住地面積(ha) 主要湖沼面積(ha) 林野面積(ha) 森林面積(ha) 森林以外の草生地面積(ha) 自然環境保全地域面積(ha) 人口密度(人/ha)
北海道 5431000 2561000 2870000 7842134 2220772 68583 5552779 5336167 216612 9561.83 0.692541
岩手県 1295000 619000 676000 1527889 369392 0 1158497 1147152 11345 4956.45 0.847575
秋田県 1050000 493000 558000 1163632 319413 7892 836327 820640 15687 818.59 0.902347
東京都 13300000 6566000 6733000 218867 139214 0 79653 78729 924 772.30 60.767498
神奈川県 9079000 4544000 4535000 241605 146737 686 94182 94103 79 11236.40 37.577865
大阪府 8849000 4267000 4582000 190142 132048 0 58094 57910 184 38.33 46.538903
In [108]:
# 列をリストで絞り込む
people = mini_japan[['人口総数(男)(人)','人口総数(女)(人)']]
people
Out[108]:
人口総数(男)(人) 人口総数(女)(人)
北海道 2561000 2870000
岩手県 619000 676000
秋田県 493000 558000
東京都 6566000 6733000
神奈川県 4544000 4535000
大阪府 4267000 4582000
In [109]:
# 列をリストで絞り込む
forest = mini_japan[['自然環境保全地域面積(ha)', '森林面積(ha)']]
forest
Out[109]:
自然環境保全地域面積(ha) 森林面積(ha)
北海道 9561.83 5336167
岩手県 4956.45 1147152
秋田県 818.59 820640
東京都 772.30 78729
神奈川県 11236.40 94103
大阪府 38.33 57910
In [112]:
# indexをキーに2つのDataFrameを連結する
people.join(forest)
Out[112]:
人口総数(男)(人) 人口総数(女)(人) 自然環境保全地域面積(ha) 森林面積(ha)
北海道 2561000 2870000 9561.83 5336167
岩手県 619000 676000 4956.45 1147152
秋田県 493000 558000 818.59 820640
東京都 6566000 6733000 772.30 78729
神奈川県 4544000 4535000 11236.40 94103
大阪府 4267000 4582000 38.33 57910
In [119]:
# 簡単な統計の計算
# describeで全部出るけど・・・
data1['人口密度(人/ha)'].describe()
Out[119]:
count    47.000000
mean      6.544540
std      11.840456
min       0.692541
25%       1.839928
50%       2.713250
75%       4.796588
max      60.767498
Name: 人口密度(人/ha), dtype: float64
In [121]:
# Seriesのメソッドとして呼べる
data1['人口密度(人/ha)'].mean()
Out[121]:
6.544540154588434
In [126]:
# 各列の都道府県ごとの平均
# 行方向に計算(デフォルト)
data1.mean(axis=0)
Out[126]:
人口総数(人)                 2708446.808511
人口総数(男)(人)              1317212.765957
人口総数(女)(人)              1391212.765957
総面積(北方地域及び竹島を除く)(ha)     793458.255319
可住地面積(ha)                259911.170213
主要湖沼面積(ha)                 4923.638298
林野面積(ha)                 528623.446809
森林面積(ha)                 520460.234043
森林以外の草生地面積(ha)             8163.212766
自然環境保全地域面積(ha)             1927.220426
人口密度(人/ha)                    6.544540
dtype: float64
In [124]:
# 数値としては意味ないけど、
# 列方向に計算
data1.mean(axis=1)
Out[124]:
北海道     2918964.502049
青森県      475257.959470
岩手県      619021.117961
宮城県      593916.851387
秋田県      478673.681122
山形県      436238.016709
福島県      690630.620174
茨城県      661007.183472
栃木県      509039.117192
群馬県      514001.211669
埼玉県     1393414.023170
千葉県     1234378.341624
東京都     2465201.824318
神奈川県    1704242.361624
新潟県      726014.115598
富山県      294695.937562
石川県      312301.660783
福井県      248973.547039
山梨県      267144.747893
長野県      725364.998604
岐阜県      642934.891004
静岡県      863998.386816
愛知県     1467028.501819
三重県      472295.779340
滋賀県      349103.047700
京都府      590842.322071
大阪府     1648769.351718
兵庫県     1214345.356313
奈良県      344389.076987
和歌山県     297057.769216
鳥取県      192220.304362
島根県      297436.162413
岡山県      524667.094841
広島県      726993.769921
山口県      409329.574771
徳島県      243787.350623
香川県      221161.115355
愛媛県      395342.622204
高知県      318728.431684
福岡県     1036034.757461
佐賀県      207168.124826
長崎県      351186.956585
熊本県      504689.949289
大分県      371215.819827
宮崎県      397857.219797
鹿児島県     526295.711661
沖縄県      308844.636826
dtype: float64
In [142]:
# これはmatplotlibの機能
plt.plot(data1['人口総数(人)'], data1['自然環境保全地域面積(ha)'],'go')
Out[142]:
[<matplotlib.lines.Line2D at 0x109e8a780>]
In [144]:
data1.plot(kind='scatter', x = '人口総数(人)', y ='自然環境保全地域面積(ha)')
Out[144]:
<matplotlib.axes._subplots.AxesSubplot at 0x109b29be0>
In [177]:
# ちょっとややこしいんですが・・・
import matplotlib.font_manager as font_manager
path = '/Library/Fonts/ヒラギノ丸ゴ Pro W4.otf'
prop = font_manager.FontProperties(fname=path)
matplotlib.rcParams['font.family'] =  prop.get_name()
matplotlib.rcParams['font.size'] =  12 #ついでに文字を少し大きく
In [176]:
data1.plot(kind='scatter', x = '人口総数(人)', y ='自然環境保全地域面積(ha)')
Out[176]:
<matplotlib.axes._subplots.AxesSubplot at 0x108b569b0>
In [189]:
# こんなことも可能。(matplotlibと連携)
data1.plot(kind='scatter', x = '人口総数(人)', y ='自然環境保全地域面積(ha)', figsize=(10,6))
for i in data1.index:
    plt.annotate(i, data1.loc[i,['人口総数(人)', '自然環境保全地域面積(ha)']])
In [128]:
# 再び登場
mini_japan
Out[128]:
人口総数(人) 人口総数(男)(人) 人口総数(女)(人) 総面積(北方地域及び竹島を除く)(ha) 可住地面積(ha) 主要湖沼面積(ha) 林野面積(ha) 森林面積(ha) 森林以外の草生地面積(ha) 自然環境保全地域面積(ha) 人口密度(人/ha)
北海道 5431000 2561000 2870000 7842134 2220772 68583 5552779 5336167 216612 9561.83 0.692541
岩手県 1295000 619000 676000 1527889 369392 0 1158497 1147152 11345 4956.45 0.847575
秋田県 1050000 493000 558000 1163632 319413 7892 836327 820640 15687 818.59 0.902347
東京都 13300000 6566000 6733000 218867 139214 0 79653 78729 924 772.30 60.767498
神奈川県 9079000 4544000 4535000 241605 146737 686 94182 94103 79 11236.40 37.577865
大阪府 8849000 4267000 4582000 190142 132048 0 58094 57910 184 38.33 46.538903
In [130]:
# Excelファイルに書き出す
mini_japan.to_excel('mini_japan.xlsx')

In [133]:
# もちろんCSVにも。ヘッダとindexの出力をコントロールできる
mini_japan.to_csv('mini_japan.csv', sep=',', header=False, index=False)
In [134]:
!cat mini_japan.csv
5431000.0,2561000.0,2870000.0,7842134.0,2220772.0,68583.0,5552779.0,5336167.0,216612.0,9561.83,0.692541086393066
1295000.0,619000.0,676000.0,1527889.0,369392.0,0.0,1158497.0,1147152.0,11345.0,4956.45,0.847574660201101
1050000.0,493000.0,558000.0,1163632.0,319413.0,7892.0,836327.0,820640.0,15687.0,818.59,0.9023471338017518
13300000.0,6566000.0,6733000.0,218867.0,139214.0,0.0,79653.0,78729.0,924.0,772.3,60.76749806960392
9079000.0,4544000.0,4535000.0,241605.0,146737.0,686.0,94182.0,94103.0,79.0,11236.4,37.57786469650876
8849000.0,4267000.0,4582000.0,190142.0,132048.0,0.0,58094.0,57910.0,184.0,38.33,46.538902504444046
In [191]:
# 実験用のDataFrameをつくる
d = pd.DataFrame({'a':[1,2,3], 'b':[5,6,7]}, index=['aa','bb','cc'])
d
Out[191]:
a b
aa 1 5
bb 2 6
cc 3 7

使いたおせていないような気がしますが、今日はこのへんで。

(参考資料)サンプルデータの集まっているところ

http://archive.ics.uci.edu/ml/

scikit−learnの中 http://scikit-learn.org/stable/datasets/

http://mldata.org/