AI E資格

ラビットチャレンジでE資格に挑戦 53日目

今日もPandas!
NumpyとPandasで超AI入門でならった計算が
比較的簡単にできるということが分かった。
作った人すごい。

■AIを学ぶ為の本格Python講座
PY17_Pandas_データの選択

 

今日学んだこと

Pandasでのデータの取り扱い

データの取り出し方

Seriesの場合

>>> nenrei
futarou 40
satoshi 20
mitsuyo 50
youko 55
dtype: int64
>>>

nenreiの中にあるかどうかを判断

あればTrue
>>> 'futarou' in nenrei
True
>>>

なければFalse
>>> 'futarou999' in nenrei
False
>>>

各インデックスを表示
>>> nenrei.keys()
Index(['futarou', 'satoshi', 'mitsuyo', 'youko'], dtype='object')
>>>

インデックスと値をまとめた配列で取得
ループ処理等で使える。
>>> list(nenrei.items())
[('futarou', 40), ('satoshi', 20), ('mitsuyo', 50), ('youko', 55)]
>>>

値を追加できる。
>>> nenrei
futarou 40
satoshi 20
mitsuyo 50
youko 55
dtype: int64
>>>

>>> nenrei['takashi']=45
>>>

>>> nenrei
futarou 40
satoshi 20
mitsuyo 50

youko 55
takashi 45
dtype: int64
>>>

インデックスによるスライス
satoshiからyoukoを取得(youkoを含む)
>>> nenrei['satoshi':'youko']
satoshi 20
mitsuyo 50
youko 55
dtype: int64

自動的割当てのインデックスによるスライス(4は含まれない)
自動割当の場合は、4が含まれないので注意!
>>> nenrei[1:4]
satoshi 20
mitsuyo 50
youko 55
dtype: int64
>>>

条件を指定してマスクする

>>> nenrei[(nenrei>=50)&(nenrei<60)] mitsuyo 50 youko 55 dtype: int64 >>>

DataFrameの場合

>>> nenrei
futarou 40
satoshi 20
mitsuyo 50
youko 55
takashi 45
dtype: int64
>>>
>>> shinchou
futarou 190
satoshi 167
mitsuyo 155
youko 148
dtype: int64

>>> status=pd.DataFrame({
... 'nenrei':nenrei,
... 'shinchou':shinchou
... })

>>> status
nenrei shinchou
futarou 40 190
satoshi 20 167
mitsuyo 50 155
youko 55 148
>>>

インデックス

>>> status.index
Index(['futarou', 'satoshi', 'mitsuyo', 'youko'], dtype='object')
>>>


>>> status.columns
Index(['nenrei', 'shinchou'], dtype='object')
>>>

1列をseriesとして取得

>>> status['nenrei']
futarou 40
satoshi 20
mitsuyo 50
youko 55
Name: nenrei, dtype: int64
>>>

別の取り出し方

>>> status.nenrei
futarou 40
satoshi 20
mitsuyo 50
youko 55
Name: nenrei, dtype: int64
>>>

列の追加

>>> taijyu
futarou 100
satoshi 50
mitusyo 45
youko 58
mitsuyo 45
dtype: int64
>>>

配列のように追加できる。
>>> status['taijyu']=taijyu
>>>
>>> status
nenrei shinchou taijyu
futarou 40 190 100
satoshi 20 167 50
mitsuyo 50 155 45
youko 55 148 58
>>>

計算結果を列に追加もできる。
>>> status['BMI']=status['taijyu']/((status['shinchou']/100)**2)
>>>
>>> status
nenrei shinchou taijyu BMI
futarou 40 190 100 27.700831
satoshi 20 167 50 17.928215
mitsuyo 50 155 45 18.730489
youko 55 148 58 26.479182

結果をnumpy配列で取り出す

>>> status.values
array([[ 40. , 190. , 100. , 27.70083102],
[ 20. , 167. , 50. , 17.92821543],
[ 50. , 155. , 45. , 18.73048907],
[ 55. , 148. , 58. , 26.47918188]])
>>>

Numpy配列で0番目を取ると、行方向に取り出される。(Pandasと反対)
>>> status.values[0]
array([ 40. , 190. , 100. , 27.70083102])
>>>

DataFrameで名前を指定すると、列を取得できる

>>> status['nenrei']
futarou 40
satoshi 20
mitsuyo 50
youko 55
Name: nenrei, dtype: int64
>>>

ilocを使用するとnumpyスタイルで行列を取得できる。

>>> status
nenrei shinchou taijyu BMI
futarou 40 190 100 27.700831
satoshi 20 167 50 17.928215
mitsuyo 50 155 45 18.730489
youko 55 148 58 26.479182
>>>

行2つ分、列3つ分を取り出している。
>>> status.iloc[:2,:3]
nenrei shinchou taijyu
futarou 40 190 100
satoshi 20 167 50
>>>

locを使うとpd.DataFrameのインデックス形式で取得できる。

>>> status
nenrei shinchou taijyu BMI
futarou 40 190 100 27.700831
satoshi 20 167 50 17.928215
mitsuyo 50 155 45 18.730489
youko 55 148 58 26.479182
>>>

行はmitsuyoまで、列はnenreiまでを取得

>>> status.loc[:'mitsuyo',:'nenrei']
nenrei
futarou 40
satoshi 20
mitsuyo 50
>>>

条件でフィルタ

>>> status.loc[status['taijyu']>60]
nenrei shinchou taijyu BMI
futarou 40 190 100 27.700831
>>>

取り出したい列を指定できる。
>>> status.loc[status['taijyu']>60,['nenrei','shinchou']]
nenrei shinchou
futarou 40 190
>>>

値の書き換え

>>> status.iloc[1,1]
167
>>> status.iloc[1,1]=170
>>>
>>> status.iloc[1,1]
170

>>> status
nenrei shinchou taijyu BMI
futarou 40 190 100 27.700831
satoshi 20 170 50 17.928215
mitsuyo 50 155 45 18.730489
youko 55 148 58 26.479182
>>>

行列を入れ替えることができる(転置)
>>> status.T
futarou satoshi mitsuyo youko
nenrei 40.000000 20.000000 50.000000 55.000000
shinchou 190.000000 170.000000 155.000000 148.000000
taijyu 100.000000 50.000000 45.000000 58.000000
BMI 27.700831 17.928215 18.730489 26.479182
>>>

Pandasの計算

>>> data=pd.DataFrame(
... np.random.randint(0,10,(3,4)),
... columns=['A','B','C','D']
... )
>>>
>>> data
A B C D
0 2 9 3 2
1 7 4 3 2
2 8 7 6 2
>>>

numpy関数をそのまま適用できる。
Pandasの形式のまま結果が出る。

>>> np.exp(data)
A B C D
0 7.389056 8103.083928 20.085537 7.389056
1 1096.633158 54.598150 20.085537 7.389056
2 2980.957987 1096.633158 403.428793 7.389056
>

>>> np.sin(data*np.pi/4)
A B C D
0 1.000000e+00 7.071068e-01 0.707107 1.0
1 -7.071068e-01 1.224647e-16 0.707107 1.0
2 -2.449294e-16 -7.071068e-01 -1.000000 1.0
>>>>>

計算結果をそのまま列の追加に使える
>>> data['sinA']=np.sin(data['A'])
>>> data
A B C D sinA
0 2 9 3 2 0.909297
1 7 4 3 2 0.656987
2 8 7 6 2 0.989358
>>>

 

 

勉強時間

今日: 0.5時間

総勉強時間: 33.5時間

 

お得キャンペーンの紹介

ラビットチャレンジの
Amazonギフト券「5,000円」プレゼントキャンペーンのお知らせ

申込時に、以下コードを使えば、入会金が5000円引かれるようです。
また、紹介した僕にも5000円のAmazonギフト券が送られるようです。
お得なので、よかったら申込時お使いください。

紹介コード:friend0019697

※本キャンペーンの期間は、 2021年9月15日~10月31日 です。

「お友達紹介キャンペーン」特設ページ:
https://ai99

-AI, E資格