今日の講義は前回のNumpyと同様に
外部ライブラリのPandasについてです。
今西先生いわく、このPandasは超便利らしく
Pythonの学習を進めていくうえで、とても重要な機能らしいです。
とくに表形式のデータを整理したり、くっつけたり、平均とったり
できるらしいです。
話だけきいてるとExcelのようなものなのかな?
とにかくコードを書きながら学んでいきたいと思います。
Numpy同様に外部ライブラリなので、本来であればインストール処理
をしなければいけないみたいですが、Google Colaboratoryには
標準で入っているみたいなのでimpor で呼び出します。
これも慣習みたいで、pandas は pd として省略して扱うみたいです。
このpandasには大きくわけて二つの型があるみたいです。
・Series
まずはseriesです。
Pandas Series 型
import pandas as pd
sr = pd.Series([1,2,3])
sr
0 1
1 2
2 3
dtype: int64
type(sr)
pandas.core.series.Series
このように一次元のデータを扱うのがSeries型だそうです。
Python DataFrame 型
次はDataFrame型です。
Pythonで記述するときはDとFは大文字です。
注意しないといけません。
df = pd.DataFrame([
[1,2,3],
[4,5,6],
[7,8,9]
])
df
0 1 2
0 1 2 3
1 4 5 6
2 7 8 9
DateFrame と Series は同じ Pandas の中の機能ですが、
それぞれ個別のメソッドを持っています。
Pandas にはデータの読み込みの機能があるらしく
今度は表形式のデータを読み込みす。
読み込むにあたって予めGoogle Driveの中にサンプルデータが
ありますので、そちらを活用します。
Google Drive内のデータを扱うためにはマウントして
Google Colaboratory と Google Drive をつなげる必要があります。
詳しいやり方は以前の講義で学習した
をご参照ください。
マウントした上でpathをしていて読み込みます。
df = pd.read_csv('/content/sample_data/california_housing_test.csv')
df
longitude latitude housing_median_age total_rooms total_bedrooms population households median_income median_house_value
0 -122.05 37.37 27.0 3885.0 661.0 1537.0 606.0 6.6085 344700.0
1 -118.30 34.26 43.0 1510.0 310.0 809.0 277.0 3.5990 176500.0
2 -117.81 33.78 27.0 3589.0 507.0 1484.0 495.0 5.7934 270500.0
3 -118.36 33.82 28.0 67.0 15.0 49.0 11.0 6.1359 330000.0
4 -119.67 36.33 19.0 1241.0 244.0 850.0 237.0 2.9375 81700.0
... ... ... ... ... ... ... ... ... ...
2995 -119.86 34.42 23.0 1450.0 642.0 1258.0 607.0 1.1790 225000.0
2996 -118.14 34.06 27.0 5257.0 1082.0 3496.0 1036.0 3.3906 237200.0
2997 -119.70 36.30 10.0 956.0 201.0 693.0 220.0 2.2895 62000.0
2998 -117.12 34.10 40.0 96.0 14.0 46.0 14.0 3.2708 162500.0
2999 -119.63 34.42 42.0 1765.0 263.0 753.0 260.0 8.5608 500001.0
3000 rows × 9 columns
pd で表示させると
3000 rows × 9 columns
9列 3,000行 のデータがずらっと出ます。
ここから、
df.head()
とすれば先頭の5行を表示させることができます。
()ないに数字をいれると見たい行を指定できます。
df.head()
longitude latitude housing_median_age total_rooms total_bedrooms population households median_income median_house_value
0 -122.05 37.37 27.0 3885.0 661.0 1537.0 606.0 6.6085 344700.0
1 -118.30 34.26 43.0 1510.0 310.0 809.0 277.0 3.5990 176500.0
2 -117.81 33.78 27.0 3589.0 507.0 1484.0 495.0 5.7934 270500.0
3 -118.36 33.82 28.0 67.0 15.0 49.0 11.0 6.1359 330000.0
4 -119.67 36.33 19.0 1241.0 244.0 850.0 237.0 2.9375 81700.0
df.tail()
とすると後ろ五行を表示させることができます。
こちらも行数をしてする事が可能です。
df.tail()
longitude latitude housing_median_age total_rooms total_bedrooms population households median_income median_house_value
2995 -119.86 34.42 23.0 1450.0 642.0 1258.0 607.0 1.1790 225000.0
2996 -118.14 34.06 27.0 5257.0 1082.0 3496.0 1036.0 3.3906 237200.0
2997 -119.70 36.30 10.0 956.0 201.0 693.0 220.0 2.2895 62000.0
2998 -117.12 34.10 40.0 96.0 14.0 46.0 14.0 3.2708 162500.0
2999 -119.63 34.42 42.0 1765.0 263.0 753.0 260.0 8.5608 500001.0
#部分抽出
#左から3列目までを表示させる
df[['longitude', 'latitude', 'housing_median_age']].head()
longitude latitude housing_median_age
0 -122.05 37.37 27.0
1 -118.30 34.26 43.0
2 -117.81 33.78 27.0
3 -118.36 33.82 28.0
4 -119.67 36.33 19.0
#数字で抽出
#df.iloc[行,列]で指定する。要素で全てを指定する場合は:で表記する
#要素で0:3と表記すると0から3列目の一つ手前までを取り出せる
df.iloc[:,0:3]
longitude latitude housing_median_age
0 -122.05 37.37 27.0
1 -118.30 34.26 43.0
2 -117.81 33.78 27.0
3 -118.36 33.82 28.0
4 -119.67 36.33 19.0
... ... ... ...
2995 -119.86 34.42 23.0
2996 -118.14 34.06 27.0
2997 -119.70 36.30 10.0
2998 -117.12 34.10 40.0
2999 -119.63 34.42 42.0
3000 rows × 3 columns
#一番後ろの列のその前までのデータを表示
#要素の始まりが0の場合は省略できます。
df.iloc[:,:-1]
longitude latitude housing_median_age total_rooms total_bedrooms population households median_income
0 -122.05 37.37 27.0 3885.0 661.0 1537.0 606.0 6.6085
1 -118.30 34.26 43.0 1510.0 310.0 809.0 277.0 3.5990
2 -117.81 33.78 27.0 3589.0 507.0 1484.0 495.0 5.7934
3 -118.36 33.82 28.0 67.0 15.0 49.0 11.0 6.1359
4 -119.67 36.33 19.0 1241.0 244.0 850.0 237.0 2.9375
... ... ... ... ... ... ... ... ...
2995 -119.86 34.42 23.0 1450.0 642.0 1258.0 607.0 1.1790
2996 -118.14 34.06 27.0 5257.0 1082.0 3496.0 1036.0 3.3906
2997 -119.70 36.30 10.0 956.0 201.0 693.0 220.0 2.2895
2998 -117.12 34.10 40.0 96.0 14.0 46.0 14.0 3.2708
2999 -119.63 34.42 42.0 1765.0 263.0 753.0 260.0 8.5608
3000 rows × 8 columns
#ちゃんと 8 columnsとなっています。
#条件抽出
#housing_median_ageの値が30以上の行を False or True で表示
df['housing_median_age']>30
0 False
1 True
2 False
3 False
4 False
...
2995 False
2996 False
2997 False
2998 True
2999 True
Name: housing_median_age, Length: 3000, dtype: bool
#その条件をそのまま[]の中に入れる
df[df['housing_median_age']>30]
longitude latitude housing_median_age total_rooms total_bedrooms population households median_income median_house_value
1 -118.30 34.26 43.0 1510.0 310.0 809.0 277.0 3.5990 176500.0
5 -119.56 36.51 37.0 1018.0 213.0 663.0 204.0 1.6635 67000.0
6 -121.43 38.63 43.0 1009.0 225.0 604.0 218.0 1.6641 67000.0
9 -118.02 34.08 31.0 2402.0 632.0 2830.0 603.0 2.3333 164200.0
10 -118.24 33.98 45.0 972.0 249.0 1288.0 261.0 2.2054 125000.0
... ... ... ... ... ... ... ... ... ...
2992 -122.33 37.39 52.0 573.0 102.0 232.0 92.0 6.2263 500001.0
2993 -117.91 33.60 37.0 2088.0 510.0 673.0 390.0 5.1048 500001.0
2994 -117.93 33.86 35.0 931.0 181.0 516.0 174.0 5.5867 182500.0
2998 -117.12 34.10 40.0 96.0 14.0 46.0 14.0 3.2708 162500.0
2999 -119.63 34.42 42.0 1765.0 263.0 753.0 260.0 8.5608 500001.0
1401 rows × 9 columns
#するとhousing_median_ageが30より大きい値の行が抽出されます。
#データのソート
#total_bedroomsの数でソートします
df.sort_values(by='total_bedrooms')
longitude latitude housing_median_age total_rooms total_bedrooms population households median_income median_house_value
1115 -116.95 33.86 1.0 6.0 2.0 8.0 2.0 1.6250 55000.0
2640 -114.62 33.62 26.0 18.0 3.0 5.0 3.0 0.5360 275000.0
740 -117.12 32.66 52.0 16.0 4.0 8.0 3.0 1.1250 60000.0
1355 -117.11 32.66 52.0 25.0 5.0 14.0 9.0 1.6250 118800.0
2690 -118.06 34.03 36.0 21.0 7.0 21.0 9.0 2.3750 175000.0
... ... ... ... ... ... ... ... ... ...
292 -116.36 33.78 6.0 24121.0 4522.0 4176.0 2221.0 3.3799 239300.0
2014 -117.22 32.86 4.0 16289.0 4585.0 7604.0 4176.0 3.6287 280800.0
978 -121.53 38.48 5.0 27870.0 5027.0 11935.0 4855.0 4.8811 212200.0
2429 -117.20 33.58 2.0 30450.0 5033.0 9419.0 3197.0 4.5936 174300.0
1563 -118.44 33.98 21.0 18132.0 5419.0 7431.0 4930.0 5.3359 500001.0
3000 rows × 9 columns
#mead で各列ごとの平均を確認できます。
df.mean()
longitude -119.589200
latitude 35.635390
housing_median_age 28.845333
total_rooms 2599.578667
total_bedrooms 529.950667
population 1402.798667
households 489.912000
median_income 3.807272
median_house_value 205846.275000
dtype: float64
#std で各列ごとの標準偏差を確認できます。
df.std()
longitude 1.994936
latitude 2.129670
housing_median_age 12.555396
total_rooms 2155.593332
total_bedrooms 415.654368
population 1030.543012
households 365.422710
median_income 1.854512
median_house_value 113119.687470
dtype: float64
#describeを使うと 平均、標準偏差、最大値、最小値など様々なデータを一度に確認できます。
df.describe()
longitude latitude housing_median_age total_rooms total_bedrooms population households median_income median_house_value
count 3000.000000 3000.00000 3000.000000 3000.000000 3000.000000 3000.000000 3000.00000 3000.000000 3000.00000
mean -119.589200 35.63539 28.845333 2599.578667 529.950667 1402.798667 489.91200 3.807272 205846.27500
std 1.994936 2.12967 12.555396 2155.593332 415.654368 1030.543012 365.42271 1.854512 113119.68747
min -124.180000 32.56000 1.000000 6.000000 2.000000 5.000000 2.00000 0.499900 22500.00000
25% -121.810000 33.93000 18.000000 1401.000000 291.000000 780.000000 273.00000 2.544000 121200.00000
50% -118.485000 34.27000 29.000000 2106.000000 437.000000 1155.000000 409.50000 3.487150 177650.00000
75% -118.020000 37.69000 37.000000 3129.000000 636.000000 1742.750000 597.25000 4.656475 263975.00000
max -114.490000 41.92000 52.000000 30450.000000 5419.000000 11935.000000 4930.00000 15.000100 500001.00000
# values を使うことで Pandasの型からNumpyの型に変換することができます。
df.values
array([[-1.22050e+02, 3.73700e+01, 2.70000e+01, ..., 6.06000e+02,
6.60850e+00, 3.44700e+05],
[-1.18300e+02, 3.42600e+01, 4.30000e+01, ..., 2.77000e+02,
3.59900e+00, 1.76500e+05],
[-1.17810e+02, 3.37800e+01, 2.70000e+01, ..., 4.95000e+02,
5.79340e+00, 2.70500e+05],
...,
[-1.19700e+02, 3.63000e+01, 1.00000e+01, ..., 2.20000e+02,
2.28950e+00, 6.20000e+04],
[-1.17120e+02, 3.41000e+01, 4.00000e+01, ..., 1.40000e+01,
3.27080e+00, 1.62500e+05],
[-1.19630e+02, 3.44200e+01, 4.20000e+01, ..., 2.60000e+02,
8.56080e+00, 5.00001e+05]])
今回の講義は以上でした。
いや~
だんだん難しくなってきますね~
でも今のところの講義はPythonの基礎っぽいので
なんとかくらいついて勉強を続けていきたいです。
今西先生、有難うございました。
コメント