辻 真吾(1975年8月生まれ)
今は、東京大学先端科学技術研究センターで働いています
「がん」と「ゲノム」の研究室ですが、やっていることとはデータ解析
でも、来年以降の仕事を探しています(失業保険か?)
Pythonにおけるデータ解析(PyData)の基本ツールになりつつあるpandasを紹介
「使いたおす」と言ったものの、今回資料作成のために、pandasの機能を見渡すと、そのあまりの膨大さに、自分がいかに未熟か実感。
データのまとまり(時系列やテーブル型)をうまく扱うためのすごいライブラリ
# 準備
%matplotlib inline
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
# この2行は import pylabで代用することも可
たとえば都道府県の人口と面積
# 区切りはタブ、最初の列がindex
data1 = pd.read_csv('data_1.csv',sep='\t', index_col=0)
data1.head(5)
人口総数(人) | 人口総数(男)(人) | 人口総数(女)(人) | 総面積(北方地域及び竹島を除く)(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 |
# DataFrameというデータ型
type(data1)
pandas.core.frame.DataFrame
# データの概要を示すメソッドがある
data1.describe()
# あれ??データが数値として認識されてない
人口総数(人) | 人口総数(男)(人) | 人口総数(女)(人) | 総面積(北方地域及び竹島を除く)(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 |
# カンマの入った文字列を数字にする
import locale
locale.setlocale(locale.LC_NUMERIC,'ja_JP')
locale.atof('123,456')
123456.0
# すべての要素にこの関数を適用する
data1 = data1.applymap(locale.atof)
data1.tail(5)
人口総数(人) | 人口総数(男)(人) | 人口総数(女)(人) | 総面積(北方地域及び竹島を除く)(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 |
# もう一度概要を計算
data1.describe()
人口総数(人) | 人口総数(男)(人) | 人口総数(女)(人) | 総面積(北方地域及び竹島を除く)(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 |
# []で列にアクセス
data1['人口総数(人)']
北海道 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
# これはSeriesデータ型
type(data1['人口総数(人)'])
pandas.core.series.Series
# DataFrameからSeriesを切り出して、その1つの要素にアクセス
s = data1['人口総数(人)']
s['東京都']
13300000.0
DataFrame[列名] -> Series
Series[ラベル] -> 数値データ
# こうすると表の1つのデータにアクセスできる
data1['人口総数(人)']['東京都']
13300000.0
# 同じことがこれでもできる
data1.loc['東京都','人口総数(人)']
13300000.0
# さらに数字でもいける(東京は13行目)
data1.iloc[12,0]
13300000.0
# pandasの機能ではないですが、データと言えばまずヒストグラム
plt.hist(data1['人口総数(人)'])
(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>)
# 対数をとるといい感じになることが多い(対数正規性)
_ = plt.hist(data1['人口総数(人)'].apply(np.log10))
# 不自然に人口が密集している地域があることがわかる
# データの並べ替え
data1.sort('人口総数(人)')
人口総数(人) | 人口総数(男)(人) | 人口総数(女)(人) | 総面積(北方地域及び竹島を除く)(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 |
# 鳥取とか言われても・・・(ヘルプの表示)
? data1.sort
# 順番を逆にする
data1.sort('人口総数(人)', ascending=False)
人口総数(人) | 人口総数(男)(人) | 人口総数(女)(人) | 総面積(北方地域及び竹島を除く)(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 |
# sortの引き数にリストを指定できるので、複数列でソート出来る
data1.sort(['主要湖沼面積(ha)','可住地面積(ha)'],ascending=[True, False])
人口総数(人) | 人口総数(男)(人) | 人口総数(女)(人) | 総面積(北方地域及び竹島を除く)(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 |
# 人口密度を計算して、新しい列として追加する
data1['人口密度(人/ha)'] = data1['人口総数(人)']/data1['総面積(北方地域及び竹島を除く)(ha)']
data1['人口密度(人/ha)']
北海道 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
_ = plt.hist(data1['人口密度(人/ha)'])
# 条件を判定する
data1['人口密度(人/ha)'] >= 30
北海道 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
# 条件に合う行だけを取り出す
dense = data1[data1['人口密度(人/ha)'] >=30]
dense
人口総数(人) | 人口総数(男)(人) | 人口総数(女)(人) | 総面積(北方地域及び竹島を除く)(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 |
# 複数の条件でandやorをとる
data1[(data1['人口密度(人/ha)'] >=30) & (data1['主要湖沼面積(ha)'] ==0)]
人口総数(人) | 人口総数(男)(人) | 人口総数(女)(人) | 総面積(北方地域及び竹島を除く)(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 |
# あんまり人がいないのは
sparse = data1[data1['人口密度(人/ha)'] <=1]
sparse
人口総数(人) | 人口総数(男)(人) | 人口総数(女)(人) | 総面積(北方地域及び竹島を除く)(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 |
# indexが重なっていなければ、appendでデータを連結できる
mini_japan = sparse.append(dense)
mini_japan
人口総数(人) | 人口総数(男)(人) | 人口総数(女)(人) | 総面積(北方地域及び竹島を除く)(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 |
# 列をリストで絞り込む
people = mini_japan[['人口総数(男)(人)','人口総数(女)(人)']]
people
人口総数(男)(人) | 人口総数(女)(人) | |
---|---|---|
北海道 | 2561000 | 2870000 |
岩手県 | 619000 | 676000 |
秋田県 | 493000 | 558000 |
東京都 | 6566000 | 6733000 |
神奈川県 | 4544000 | 4535000 |
大阪府 | 4267000 | 4582000 |
# 列をリストで絞り込む
forest = mini_japan[['自然環境保全地域面積(ha)', '森林面積(ha)']]
forest
自然環境保全地域面積(ha) | 森林面積(ha) | |
---|---|---|
北海道 | 9561.83 | 5336167 |
岩手県 | 4956.45 | 1147152 |
秋田県 | 818.59 | 820640 |
東京都 | 772.30 | 78729 |
神奈川県 | 11236.40 | 94103 |
大阪府 | 38.33 | 57910 |
# indexをキーに2つのDataFrameを連結する
people.join(forest)
人口総数(男)(人) | 人口総数(女)(人) | 自然環境保全地域面積(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 |
# 簡単な統計の計算
# describeで全部出るけど・・・
data1['人口密度(人/ha)'].describe()
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
# Seriesのメソッドとして呼べる
data1['人口密度(人/ha)'].mean()
6.544540154588434
# 各列の都道府県ごとの平均
# 行方向に計算(デフォルト)
data1.mean(axis=0)
人口総数(人) 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
# 数値としては意味ないけど、
# 列方向に計算
data1.mean(axis=1)
北海道 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
# これはmatplotlibの機能
plt.plot(data1['人口総数(人)'], data1['自然環境保全地域面積(ha)'],'go')
[<matplotlib.lines.Line2D at 0x109e8a780>]
data1.plot(kind='scatter', x = '人口総数(人)', y ='自然環境保全地域面積(ha)')
<matplotlib.axes._subplots.AxesSubplot at 0x109b29be0>
# ちょっとややこしいんですが・・・
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 #ついでに文字を少し大きく
data1.plot(kind='scatter', x = '人口総数(人)', y ='自然環境保全地域面積(ha)')
<matplotlib.axes._subplots.AxesSubplot at 0x108b569b0>
# こんなことも可能。(matplotlibと連携)
data1.plot(kind='scatter', x = '人口総数(人)', y ='自然環境保全地域面積(ha)', figsize=(10,6))
for i in data1.index:
plt.annotate(i, data1.loc[i,['人口総数(人)', '自然環境保全地域面積(ha)']])
# 再び登場
mini_japan
人口総数(人) | 人口総数(男)(人) | 人口総数(女)(人) | 総面積(北方地域及び竹島を除く)(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 |
# Excelファイルに書き出す
mini_japan.to_excel('mini_japan.xlsx')
# もちろんCSVにも。ヘッダとindexの出力をコントロールできる
mini_japan.to_csv('mini_japan.csv', sep=',', header=False, index=False)
!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
# 実験用のDataFrameをつくる
d = pd.DataFrame({'a':[1,2,3], 'b':[5,6,7]}, index=['aa','bb','cc'])
d
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/