Python 無料で独習 022 外部ライブラリ(Pandas) 

Python
この記事は約16分で読めます。

今日の講義は前回のNumpyと同様に
外部ライブラリのPandasについてです。
今西先生いわく、このPandasは超便利らしく
Pythonの学習を進めていくうえで、とても重要な機能らしいです。
とくに表形式のデータを整理したり、くっつけたり、平均とったり
できるらしいです。
話だけきいてるとExcelのようなものなのかな?

とにかくコードを書きながら学んでいきたいと思います。
Numpy同様に外部ライブラリなので、本来であればインストール処理
をしなければいけないみたいですが、Google Colaboratoryには
標準で入っているみたいなのでimpor で呼び出します。

これも慣習みたいで、pandas は pd として省略して扱うみたいです。

import pandas as pd

このpandasには大きくわけて二つの型があるみたいです。
・Series

・DataFrame

まずは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 をつなげる必要があります。
詳しいやり方は以前の講義で学習した

Python 無料で独習 020 ファイルの読み書き

をご参照ください。

マウントした上で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の基礎っぽいので
なんとかくらいついて勉強を続けていきたいです。
今西先生、有難うございました。

コメント

タイトルとURLをコピーしました