筋肉で解決しないために。

日々出会うモノに対する考察をしたり、主に以下のテーマに関して書いています。 データサイエンス/人工知能/AI/機械学習/DeepLearning/Python//数学/統計学/統計処理

pandas入門2_「dataframeについて」

pandas入門2_「dataframeについて」

さっと見て、「あぁそうだったそうだった」と確認できるハンドブックのような存在を目指して。

pandas入門第2回目、「dataframeについて」です。

dataframeとは

Dataframeには二次元のデータを収納することができ、行や列にそれぞれ名前が付けることもできます。

今回学ぶこと

今回では、以下の関数を使えるようになることが目標です。

pd.read_clipboard( )(クリップボードを読みこむ)
dataframe.columns(列(カラム)の名前を表示する)
dataframe['columns'](列(カラム)を引数にして、要素を表示する)
DataFrame(dataframe,columns=['index1','index2',])(任意のカラム名で新しいDataFrameを作る)
dataframe.head(n)(先頭からn行だけを表示)
dataframe.tail(n)(最後からn行だけを表示)
dataframe.loc[n](行を引数にして、要素を表示する)
dataframe['columns']="columns_name" (列(カラム)全体に値を代入)
del dataframe['columns'](列(columns)を消す)
 dataframe.drop('columns_name',axis=1)(列(columns)を消す)

おまじない

import numpy as np
from pandas import Series, DataFrame
import pandas as pd

dataframeをつくる

#一般的にはこのように作成します
#df = DataFrame(要素,columns=['カラム名'],index=['インデックス名'])

#今回はNFLのデータからdataframeを作ります
#NFLのデータ(http://en.wikipedia.org/wiki/NFL_win-loss_records)の上位Rank5を参考にdataframeをつくる

nfl_frame = pd.read_clipboard()#クリップボードから読み込むことが可能です。
nfl_frame


>>>
Rank Team Won Lost Tied Pct. First NFL Season Total Games Division
0 1 Dallas Cowboys 502 374 6 0.573 1960 882 NFC East
1 2 Green Bay Packers 737 562 37 0.565 1921 1,336 NFC North
2 3 Chicago Bears 749 579 42 0.562 1920 1,370 NFC North
3 4 Miami Dolphins 445 351 4 0.559 1966 800 AFC East
4 5 New England Patriots[b] 489 386 9 0.558 1960 884 AFC East

dataframe.columns(列(カラム)の名前を表示する)

nfl_frame.columns

>>>
Index(['Rank', 'Team', 'Won', 'Lost', 'Tied', 'Pct.', 'First NFL Season',
       'Total Games', 'Division'],
      dtype='object')

dataframe['columns'](列(カラム)を引数にして、要素を表示する)

nfl_frame['First NFL Season']

>>>
0    1960
1    1921
2    1920
3    1966
4    1960
Name: First NFL Season, dtype: int64
#この書き方でも同様の操作ができる
nfl_frame.Team

>>>
0             Dallas Cowboys
1          Green Bay Packers
2              Chicago Bears
3             Miami Dolphins
4    New England Patriots[b]
Name: Team, dtype: object

DataFrame(dataframe,columns=['index1','index2',])(任意のカラム名で新しいDataFrameを作る)

DataFrame(nfl_frame,columns=['Team','First NFL Season','Total Games'])

>>>
Team First NFL Season Total Games
0 Dallas Cowboys 1960 882
1 Green Bay Packers 1921 1,336
2 Chicago Bears 1920 1,370
3 Miami Dolphins 1966 800
4 New England Patriots[b] 1960 884

dataframe.head(n)(先頭からn行だけを表示)

nfl_frame.head(3)
#ちなみに、引数を与えないと5行になります

 >>>
Rank Team Won Lost Tied Pct. First NFL Season Total Games Division
0 1 Dallas Cowboys 502 374 6 0.573 1960 882 NFC East
1 2 Green Bay Packers 737 562 37 0.565 1921 1,336 NFC North
2 3 Chicago Bears 749 579 42 0.562 1920 1,370 NFC North

dataframe.tail(n)(最後からn行だけを表示)

nfl_frame.tail(3)

>>>
Rank Team Won Lost Tied Pct. First NFL Season Total Games Division
2 3 Chicago Bears 749 579 42 0.562 1920 1,370 NFC North
3 4 Miami Dolphins 445 351 4 0.559 1966 800 AFC East
4 5 New England Patriots[b] 489 386 9 0.558 1960 884 AFC East

dataframe.loc[n](行を引数にして、要素を表示する)

nfl_frame.loc[3]

>>>
Rank                             4
Team                Miami Dolphins
Won                            445
Lost                           351
Tied                             4
Pct.                         0.559
First NFL Season              1966
Total Games                    800
Division                  AFC East
Name: 3, dtype: object

dataframe['columns']="columns_name" (列(カラム)全体に値を代入)

nfl_frame['Stadium']="Levi's Stadium" #'Stadium'という列に、"Levi's Stadium"を代入しています
nfl_frame

>>>
Rank Team Won Lost Tied Pct. First NFL Season Total Games Division Stadium
0 1 Dallas Cowboys 502 374 6 0.573 1960 882 NFC East Levi's Stadium
1 2 Green Bay Packers 737 562 37 0.565 1921 1,336 NFC North Levi's Stadium
2 3 Chicago Bears 749 579 42 0.562 1920 1,370 NFC North Levi's Stadium
3 4 Miami Dolphins 445 351 4 0.559 1966 800 AFC East Levi's Stadium
4 5 New England Patriots[b] 489 386 9 0.558 1960 884 AFC East Levi's Stadium

SeriesをDataFrameに追加する

#まずは、Seriesをつくる
stadiums = Series(["Levi's Stadium","AT&T Stadium"],index=[4,0])
stadiums

>>>
4    Levi's Stadium
0    AT&T Stadium
dtype: object
Dataframeに追加する
nfl_frame['Stadium']=stadiums
nfl_frame

>>>
Rank Team Won Lost Tied Pct. First NFL Season Total Games Division Stadium
0 1 Dallas Cowboys 502 374 6 0.573 1960 882 NFC East AT&T Stadium
1 2 Green Bay Packers 737 562 37 0.565 1921 1,336 NFC North NaN
2 3 Chicago Bears 749 579 42 0.562 1920 1,370 NFC North NaN
3 4 Miami Dolphins 445 351 4 0.559 1966 800 AFC East NaN
4 5 New England Patriots[b] 489 386 9 0.558 1960 884 AFC East Levi's Stadium

del dataframe['columns'](列(columns)を消す)

del nfl_frame['Stadium']
nfl_frame

>>>
#Stadium列がなくなったことがわかります
Rank Team Won Lost Tied Pct. First NFL Season Total Games Division
0 1 Dallas Cowboys 502 374 6 0.573 1960 882 NFC East
1 2 Green Bay Packers 737 562 37 0.565 1921 1,336 NFC North
2 3 Chicago Bears 749 579 42 0.562 1920 1,370 NFC North
3 4 Miami Dolphins 445 351 4 0.559 1966 800 AFC East
4 5 New England Patriots[b] 489 386 9 0.558 1960 884 AFC East

dataframe.drop('columns_name',axis=1)(列(columns)を消す)

#また、nfl_frame.drop('Stadium',axis=1)でも同じ操作ができます
#axis=1は列(columns)を表します

#行の場合は、nfl_frame.drop(n)でも消すことができます
#nはindex番号

標準python、numpy、pandasのあれこれ

さて、pythonにはlist、array、series、detaframeなど様々な配列があり、実際のデータ解析では、それらを行ったり来たりしたいことが多々あると思います。

そんな時に、以下のページが参考になりますので、記載しておきます。 https://qiita.com/richi40/items/6b3af6f4b00d62dbe8e1

また、DataFrameの機能の全体は、以下のリンクからWebで確認できます。 http://pandas.pydata.org/pandas-docs/dev/generated/pandas.DataFrame.html

少し長くなってしまいましたが、今回は以上です。

お疲れ様でした!

次回は、こちら。

watarumon.hatenablog.com

それじゃー、また。

pandas入門1_「seriesについて」

こんにちは、ワタルです。

さっと見て、「あぁそうだったそうだった」と確認できるハンドブックのような存在を目指して。

pandas入門第1回目、「seriesについて」です。

pandasとは

pandasとは、データをSeriesやDataframeという型を扱うことができるモジュールのことです。

Seriesは一次元、Dataframeは二次元のデータを収納することができます。

それぞれ、行や列にそれぞれ名前が付けることができたり、多くのメソッドが存在するため、 pythonでデータ分析するときには、pandasを用いることが一般的です。

今回では、以下の関数を使えるようになることが目標です。

Series([ ])(Seriesをつくる)
ser.values(値のみを返す)
ser.index(indexのみを返す)
'index' in Series(Seriesの中に'index'が存在するか判定する)
pd.isnull(null要素の存在を確認する)
pd.notnull(nullじゃない要素の存在を確認する)
ser + ser2 (Seriesの和)
ser.name(Seriesに名前を付ける)
ser.index.name(indexに名前を付ける)

おまじない

import numpy as np
import pandas as pd
from pandas import Series,DataFrame
#pandasからSeriesとDataFrameをインポートしておきます。

Series([ ])(Seriesをつくる)

#Seriesをつくります。numpy.arrayとの違いは、要素にindexがあること
ser = Series([3,6,9,12])
ser

>>>
0     3
1     6
2     9
3    12
dtype: int64

ser.values(値のみを返す)

ser.values#値のみを返す

>>>
array([ 3,  6,  9, 12])

ser.index(indexのみを返す)

ser.index#indexのみを返す

>>>
Int64Index([0, 1, 2, 3], dtype='int64')

indexを指定して、Seriesをつくる

ww2_cas = Series([8700000,4300000,3000000,2100000,400000],index=['USSR','Germany','China','Japan','USA'])
#indexを指定して、Seriesをつくる
#第二次世界大戦の死傷者

ww2_cas

>>>
USSR       8700000
Germany    4300000
China      3000000
Japan      2100000
USA         400000
dtype: int64

indexで要素にアクセスする

ww2_cas['USA']

>>>
400000

条件式を用いて、要素にアクセスする

ww2_cas[ww2_cas>4000000]#400万人以上の死傷者を出したのは国のみ返す

>>>
USSR       8700000
Germany    4300000
dtype: int64

indexを用いて、要素が存在するか確認する

'USSR' in ww2_cas

>>>
True

pd.isnull(null要素の存在を確認する)

#別のSeriesを、先とは違うindexの指定方法でつくってみます

countries = ['China','Germany','Japan','USA','USSR','Argentina']

ser2 = Series(ww2_dict,index=countries)#先のww2_casと比べて、'Argentina'というindexが余分に追加されています。

ser2

>>>
China        3000000
Germany      4300000
Japan        2100000
USA           400000
USSR         8700000
Argentina        NaN
dtype: float64
#null要素の存在を確認します
pd.isnull(obj2)

>>>
China        False
Germany      False
Japan        False
USA          False
USSR         False
Argentina     True
dtype: bool

pd.notnull(nullじゃない要素の存在を確認する)

pd.notnull(obj2)

>>>
China         True
Germany       True
Japan         True
USA           True
USSR          True
Argentina    False
dtype: bool

Seriesの和

#Seriesの中身を確認しておきます
WW2_Series

>>>
China      3000000
Germany    4300000
Japan      2100000
USA         400000
USSR       8700000
dtype: int64
ser2

>>>
China        3000000
Germany      4300000
Japan        2100000
USA           400000
USSR         8700000
Argentina        NaN
dtype: float64
#Seriesを足すと、同じindexの要素が足し算されます
WW2_Series + obj2

>>>
Argentina         NaN
China         6000000
Germany       8600000
Japan         4200000
USA            800000
USSR         17400000
dtype: float64

ser.name(Seriesに名前を付ける)

ser2.name = '第二次世界大戦の死傷者'
ser2

>>>
China        3000000
Germany      4300000
Japan        2100000
USA           400000
USSR         8700000
Argentina        NaN
Name: 第二次世界大戦の死傷者, dtype: float64

ser2.index.name(indexに名前を付ける)

ser2.index.name = 'Countries'
ser2

>>>
Countries
China        3000000
Germany      4300000
Japan        2100000
USA           400000
USSR         8700000
Argentina        NaN
Name: 第二次世界大戦の死傷者, dtype: float64

お疲れ様でした!

次回は、こちら。

watarumon.hatenablog.com

それじゃー、また。

numpy入門7_「arrayの入出力」(最終回)

こんにちは、ワタルです。

さっと見て、「あぁそうだったそうだった」と確認できるハンドブックのような存在を目指して。

第7回目、「arrayの入出力」です。numpy入門最終回です!

今回では、以下の関数を使えるようになることが目標です。

np.save#バイナリデータとして保存
np.load#ファイルを読み込む
np.savez#zip形式で保存
np.savetxt#txt形式で保存
np.loadtxt#txt形式を読み込む

それではスタート。

おまじない

import numpy as np

np.save(バイナリデータとして保存)

arr = np.arange(5)#arrayをつくる

np.save('my_array',arr)#バイナリデータとして保存 (拡張子は.npy)
#my_arrayというバイナリデータにarrが保存されました。

np.load(保存したnpyを読み込む)

#np.loadでmy_arrayを読み込むことができます
arr1 = np.load('my_array.npy')
arr1

>>>
array([0, 1, 2, 3, 4])

np.savez(複数のarrayをzip形式で保存)

arr2 = np.arange(10)#arr2というarrayをつくります

np.savez('ziparrays.npz',x=arr1,y=arr2)
#ziparrays.npzというファイルに、xというindexでarr1を、yというindexでarr2を保存しました

np.load(保存したzipを読み込む)

archive_array = np.load('ziparrays.npz')

#xを呼び出してみます
archive_array['x']

>>>
array([0, 1, 2, 3, 4])

np.savetxt(テキスト形式で保存)

arr = np.array([[1,2,3],[4,5,6]])#2×3のarrをつくる

#my_test_textという名前で、arrを、" , "区切りで保存する
np.savetxt('my_test_text.txt',arr,delimiter=',')

np.loadtxt(保存したtextを読み込む)

arr = np.loadtxt('my_test_text.txt',delimiter = ',')
arr

>>>
array([[ 1.,  2.,  3.],
       [ 4.,  5.,  6.]])

お疲れ様でした!

全ての回をまとめた記事を今後作成しようと思っています。

次回からは、pandas入門を予定しています。(開始時期は未定)

それじゃー、また。

Naipoマッサージクッションを試さずに肩こりに悩み続けるのはどうかやめて欲しい。



こんにちは、ワタルです。


今日は、長年肩こりに悩んでいた私の熱い思いを知ってもらいたく記事を書きます。

はじめに(本記事の目的)

散々肩こりに悩んだ僕だからこそ、肩こりに悩む人にどうしてもこれだけは勧めたいモノがある。

本記事ではそれを伝えたいと思う。

まずはしっかりと本記事の目的を明文化しておこう。

「肩こりに悩む人よ、これを試さずに肩こりに悩み続けるのはどうかやめて欲しい。」

さて、結論から入ろう。

そのグッズとは、これである。



さあ、メリットを熱く語りたい。メリットは7つある。



メリット1_とにかく気持ちいい。



手もみマッサージにもたくさん通ったが、もはや手もみマッサージと同等かそれ以上だと断言できる。

しかも終了時間がない。飽きるまでやっていい。

そしてこのマッサージクッションには、逆回転機能がついている。

逆回転機能とは、1分間隔で、マッサージボールの回転する方向が変わる機能だ。

この機能によって、「もういいや」とならないのだ。気持ち良さが延々と繰り返されるのだ。

体験したからこそわかったことだが、当てている位置を変えていないのに、右回転と左回転で、微妙に気持ち良いポイントが違うのである。

これによって、いわゆる「あーそこそこ!」が何度も繰り返される。

まずは気持ち良さというメリットについて書いた。

メリット2_あったか機能がついていること。



このマッサージクッションには、マッサージボール自体が発熱する機能がついている。

筋肉とか 血流とか、体内の仕組みはよくわからないが、冷たい肩より温まった肩の方が良いに決まっているではないか。

間違いない。

もちろん、発熱しないモードもあるので、熱くなってきたらポチッと止めたら良いのである。

メリット3_翌朝の肩が軽い



ここまでは、使用中の気持ちよさを挙げてきたが、もちろん使用時に気持ち良いだけでなく、翌日にもその効果は持続される。

定量的に説明できないのが、非常に申し訳ないが、言葉で表現して見ると、

「起床時の肩のパリパリ感、パキパキ感がない」のである。

始めて使った翌朝の感想を思い出して見るとこんな感じである。

「あれ...?肩が軽い...?Naipoマッサージクッションか!!!!」

電気の力はすごい。Naipo研究員には感謝しかない。

メリット4_もみ返しが来ない



みなさんも経験したことがあるだろう。マッサージの翌日に、最低な気分にさせられる"もみ返し"を。

私の使用法は、床にマッサージクッションを置き、そこに肩が当たるように、仰向けで寝るスタイルで、マッサージクッションにゴリゴリ肩を押し付けて毎日1時間弱使用しているのだが、これまでに1度ももみ返しになったことがない。

もみ返しの原因をググって見ると、「強すぎるマッサージなどによる、筋肉の炎症や損傷」とある。

医学的な知見は全くないので、単なる考察になるが、マッサージによる身体へ加わる力Fが指圧マッサージとマッサージクッションが同じだと仮定して、面積Sを用いると、局所的な圧力Pは、P = F/Sにより、面積が狭い方が大きくなる。

指圧とマッサージボールでは、明らかに指の方が鋭いので、局所に大きな力が掛かってしまうことになる。

つまり、マッサージボールを指5本分の大きさと仮定すると、指圧の5倍もみ返しが起こりにくいと考えることができる。

まあ、色々述べたが、私はもみ返しになったことがないということが、メリット4で伝えたかったことである。

メリット5_手軽。自宅だから!



このメリットを忘れてはいけない。

マッサージと違って、予約も移動も着替えも、そしてお金も何も必要ない。自宅だから!

しかも手もみマッサージと違って、本も読めるし、SNSできるし、映画だって見れる。自宅だから!

雨でも雪でも、暑くても寒くても問題ない。自宅だから!

以上です。

メリット6_全身にも使える



もちろん、このマッサージクッションは肩以外に当てても気持ちが良い。

首、腕、背中、太もも、ふくらはぎ。こんな部位にも有効である。

これらの部位に対しても、何より気持ちが良い。それだけでいいではないか。

認知している人は少ないかもしれないが、デスクワーク等座った時間が長い人は、お尻が非常に凝っていると言われている。

下半身のむくみ解消も期待できるだろう。

メリット7_安い。



最近では、60分2980円なんてお店も増えてきたが、60分のマッサージに5000円程度が平均的だろう。

これは、4880円。マッサージ1回か2回分である。 施術時間は無限である。

愛用者である私からすれば破格と言わざるを得ない。絶対に買うべきと言い切れる。

とはいえ、購入に悩んだからこそこのページを読んでいるという方もいるかもしれない。

私を信じて任せてくれ、必ず後悔はしないと断言しよう。

私の2018年best buyを決めるとしたら、まだ本執筆日は2018年6月だが、必ずこれである。

今年、これ以上良い買い物をできる自信がまるでない。

それほどに、これは良い商品であり、良い買い物であった。

スペックまとめ

Amazon商品ページからの引用だが、簡易に記載しておく。

メーカー Naipo
商品重量 1.2 Kg
梱包サイズ 33.2 x 21.4 x 11.6 cm
サイズ 幅32.5cm 奥行:20cm 高さ:10cm
梱包重量 1.64 Kg
電池使用 いいえ
電池付属 いいえ



また、こちらも簡易になるが、商品概要を転載する。

f:id:watarumon:20180611185312j:plain

f:id:watarumon:20180611185336j:plain

f:id:watarumon:20180611185349j:plain

f:id:watarumon:20180611185403j:plain



おまけ、お守りのバンテリン



蛇足気味で恐縮だが、肩こりに悩む方々には、同時にこれも紹介したい。



どんなに、肩こり対策をしようとも、夕方には肩がパリパリと硬く、痛んでくる時も十分ある。

そんな時に使って欲しい。

要は、麻酔の様なモノである。一時的な効果ではあるが、スースーして、スッと肩こりが和らぐのである。

有名なアンメルツヨコヨコと比べると確かに少し高めだが、私が色々試した中では、最も効果が高かった。

私は、常時バッグに入れて持ち歩いている。

肩こりに悩む方は、これをお守りとして持つことをぜひお勧めしたい。

終わりに



naipoマッサージクッションの利用者が増え、肩こりに悩む方々に少しでも貢献できたら幸いである。

肩こり対策として、ピップ マグネループ EX 高磁力タイプとドアジムも紹介したいのですが、それはまた別の機会に。。。

以上です。

それじゃー、また。

numpy入門6_「arrayを使ったデータ処理」

こんにちは、ワタルです。

さっと見て、「あぁそうだったそうだった」と確認できるハンドブックのような存在を目指して。

第6回目、「arrayを使ったデータ処理」です。

今回では、以下の関数を使えるようになることが目標です。

dx,dy=np.meshgrid(points,points)#グリッドをつくる
plt.imshow(z,cmap="bwr")#カラープロットする
plt.colorbar()#カラーバーを示す
plt.title("z = sin(x)+sin(y)")#図にタイトルをつける
np.where(arr < 0,0,arr)#条件に合った要素を探す
arr.sum()#合計
arr.mean()#平均
arr.std()#標準偏差
arr.var()#分散
bool_arr.any()#1つでもTrueがあるか判定する
bool_arr.all()# 全部Trueかを判定する
arr_s = np.sort(arr)#小さい順に並び替える
np.unique(countries)#重複を取り除く
np.in1d([x,y,z],countries)#配列の中に任意の要素が存在するか判定する

それでは、よろしくお願い致します。

おまじない

import numpy as np
from numpy.random import randn
import matplotlib.pyplot as plt
%matplotlib inline

グリッドを作る

points = np.arange(-5,5,0.01)#arrayをつくる
dx,dy=np.meshgrid(points,points)
dx

>>>
array([[-5.  , -4.99, -4.98, ...,  4.97,  4.98,  4.99],
       [-5.  , -4.99, -4.98, ...,  4.97,  4.98,  4.99],
       [-5.  , -4.99, -4.98, ...,  4.97,  4.98,  4.99],
       ..., 
       [-5.  , -4.99, -4.98, ...,  4.97,  4.98,  4.99],
       [-5.  , -4.99, -4.98, ...,  4.97,  4.98,  4.99],
       [-5.  , -4.99, -4.98, ...,  4.97,  4.98,  4.99]])
dy

>>>
array([[-5.  , -5.  , -5.  , ..., -5.  , -5.  , -5.  ],
       [-4.99, -4.99, -4.99, ..., -4.99, -4.99, -4.99],
       [-4.98, -4.98, -4.98, ..., -4.98, -4.98, -4.98],
       ...,
       [ 4.97,  4.97,  4.97, ...,  4.97,  4.97,  4.97],
       [ 4.98,  4.98,  4.98, ...,  4.98,  4.98,  4.98],
       [ 4.99,  4.99,  4.99, ...,  4.99,  4.99,  4.99]])

np.meshgridの解説

簡単な配列でmeshgrid関数を見てみます。

x3 = np.arange(3)
y4 = np.arange(4)
x3

>>>
array([0, 1, 2])
y4

>>>
array([0, 1, 2, 3])

ここでmeshgridしてみます。

dx3,dy4=np.meshgrid(x3,y4)
dx3

>>>
array([[0, 1, 2],
       [0, 1, 2],
       [0, 1, 2],
       [0, 1, 2]])
#dx3はx3という配列が、y4の要素数だけ、行方向に増えたことがわかります
dy4

>>>
array([[0, 0, 0],
       [1, 1, 1],
       [2, 2, 2],
       [3, 3, 3]])
#dy4はy4という配列が、x3の要素数だけ、列方向に増えたことがわかります

カラープロットする

先で計算した、dx,dyをsin関数で少しいじってカラープロットしてみます。

z = (np.sin(dx) + np.sin(dy))# sin関数で少し計算

plt.imshow(z,cmap="bwr")#カラープロットする

plt.colorbar()#カラーバーを出す

plt.title("z = sin(x)+sin(y)")# タイトルを付ける

>>>

f:id:watarumon:20180611121507p:plain

[補足] plt.imshowの引数に「cmap="bwr"」を指定していますが、これはカラープロットの色の指定を意味します。 様々な種類がありますので、詳細はこちらを参照願います。 https://matplotlib.org/examples/color/colormaps_reference.html

条件に合った要素を探す(where関数)

1次元配列に対して

#arrayをつくる
A = np.array([1,2,3,4])
B = np.array([100,200,300,400])
TrFa = np.array([True,True,False,False])

#numpy.whereを使う
answer = np.where(TrFa,A,B)
answer

>>>
array([  1,   2, 300, 400])
#AとBに対して、TrueならA、FalseならBの配列を返していることがわかります

2次元配列に対して

arr = randn(5,5)#5×5の配列をつくる
arr

>>>
array([[ 1.82071799, -1.03664279,  0.50066637,  1.93569289,  0.38661873],
       [-1.42820125, -0.1864199 , -1.57738425, -0.38882376,  0.21758193],
       [ 0.80581171, -0.12401239, -1.38564015,  1.06400648, -0.86345109],
       [-0.61646801,  3.29358592, -0.5654698 ,  1.77814005,  0.19415474],
       [-0.31093902,  0.53917403,  0.85159456, -0.63927471,  0.94545253]])
np.where(arr < 0,0,arr)
#条件式に合致すれば0を、それ以外は元の値を返していることがわかります

>>>
array([[1.82071799, 0.        , 0.50066637, 1.93569289, 0.38661873],
       [0.        , 0.        , 0.        , 0.        , 0.21758193],
       [0.80581171, 0.        , 0.        , 1.06400648, 0.        ],
       [0.        , 3.29358592, 0.        , 1.77814005, 0.19415474],
       [0.        , 0.53917403, 0.85159456, 0.        , 0.94545253]])

様々な統計処理

arr = np.array([[1,2,3],[4,5,6],[7,8,9]])#arrayをつくる
arr

>>>
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

sum(合計)

arr.sum()

>>>
45
arr.sum(0)#合計する列を指定出来る

>>>
array([12, 15, 18])

mean(平均)

arr.mean()

>>>
5.0

std(標準偏差)

arr.std()

>>>
2.5819888974716112

var(分散)

arr.var()

>>>
6.666666666666667

anyとall

bool_arr = np.array([True,False,True]) #arrayをつくる
bool_arr.any()#1つでもTrueがあるか判定する

>>>
True
bool_arr.all()# 全部Trueかを判定する

>>>
False

sort(arrayを並び替える)

arr = randn(5)#ランダムなarrayをつくる
arr

>>>
array([ 0.75681233,  1.41480162,  0.03750724, -0.18838668,  0.16019609])
arr_s = np.sort(arr)#小さい順に並び替える
arr_s

>>>
array([-0.18838668,  0.03750724,  0.16019609,  0.75681233,  1.41480162])
arr_r = np.sort(arr)[::-1]#大きい順に並び替える
arr_r

>>>
array([ 1.41480162,  0.75681233,  0.16019609,  0.03750724, -0.18838668])

unique(重複を取り除く)

countries = np.array(['France', 'Japan', 'USA', 'Russia','USA','Mexico','Japan'])#arrayをつくる
np.unique(countries)

>>>
array(['France', 'Japan', 'Mexico', 'Russia', 'USA'], dtype='<U6')

in1d(配列の中に任意の要素が存在するか判定する)

np.in1d(['France','USA','Sweden'],countries)

>>>
array([ True,  True, False], dtype=bool)
#np.in1d(x,y)では、xの各要素がyに存在するかを判定できていることがわかります

第7回はこちら。

watarumon.hatenablog.com

それじゃー、また。

numpy入門5_「arrayと計算のための関数」

さっと見て、「あぁそうだったそうだった」と確認できるハンドブックのような存在を目指して。

第5回目、「arrayと計算のための関数」です。 今回では、以下の関数を使えるようになることが目標です。

np.sqrt(arr)
np.exp(arr)
np.random.randn(n)
np.add(arr,arr2)
np.subtract(arr,arr2)
np.multiply(arr,arr2)
np.divide(arr,arr2)
np.maximum(arr,arr2)
np.minimum(arr,arr2)

よろしくお願い致します。

おまじない

import numpy as np
arr = np.arange(11)#arrayを作る
arr

>>>
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10])

平方根を計算する

np.sqrt(arr)

>>>
array([ 0.        ,  1.        ,  1.41421356,  1.73205081,  2.        ,
        2.23606798,  2.44948974,  2.64575131,  2.82842712,  3.        ,
        3.16227766])

自然対数の底eの累乗

np.exp(arr)

>>>
array([  1.00000000e+00,   2.71828183e+00,   7.38905610e+00,
         2.00855369e+01,   5.45981500e+01,   1.48413159e+02,
         4.03428793e+02,   1.09663316e+03,   2.98095799e+03,
         8.10308393e+03,   2.20264658e+04])

正規分布に従う乱数を作る

A = np.random.randn(10)
A

>>>
array([ -3.11107882e-01,  -2.39068257e-01,  -5.28049925e-01,
        -5.47855008e-01,  -1.22663428e+00,  -1.48924670e+00,
        -5.73344030e-01,  -8.21385630e-01,   7.93016177e-01,
         4.13389788e-04])

arrayの足し算

arr = np.arange(11)#arrayを2つ作る
arr2 = np.arange(11)
np.add(arr,arr2)

>>>
array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18, 20])

arrayの引き算

np.subtract(arr,arr2)

>>>
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])

arrayの掛け算

np.multiply(arr,arr2)

>>>
array([  0,   1,   4,   9,  16,  25,  36,  49,  64,  81, 100])

arrayの割り算

np.divide(arr,arr2)

>>>
array([nan,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.])
#0での割り算が起こっているので要注意

大きさを比較して各要素の大きいほうを返す

np.maximum(A,B)
#小さいほうならnp.minimum(A,B)

>>>
array([ -3.11107882e-01,   1.47650544e-01,  -5.28049925e-01,
         1.39597633e+00,  -3.13646087e-01,   1.42949959e+00,
         1.56775535e+00,  -3.70853362e-01,   7.93016177e-01,
         4.13389788e-04])

その他の演算子

numpyには、非常に数多くの演算子があり、ここでは記述しきれませんので、 詳しくは、numpyのドキュメントをご参照願います。

第6回はこちら。

watarumon.hatenablog.com

それじゃー、また。

numpy入門4_「行列の入れ替えと基本行列計算」

こんにちは、ワタルです。

さっと見て、「あぁそうだったそうだった」と確認できるハンドブックのような存在を目指して。

第4回目、「行列の入れ替えと基本行列計算」です。

よろしくお願い致します。

おまじない

import numpy as np

転置行列を作る(行と列の入れ替え)

arr = np.arange(9).reshape((3,3))#arrayを作る
arr

>>>
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
arr.T #行列の転置

>>>
array([[0, 3, 6],
       [1, 4, 7],
       [2, 5, 8]])
arr.transpose()#transposeメソッドでも" .T "と同じく、行列の転置ができる

>>>
array([[0, 3, 6],
       [1, 4, 7],
       [2, 5, 8]])

引き数をとって、行列を入れ替える。

2次元配列の場合(0は行、1は列)

arr.transpose((0,1))

>>>
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
#行と列が入れ替わる
arr.transpose((1,0))

>>>
array([[0, 3, 6],
       [1, 4, 7],
       [2, 5, 8]])
#swapaxesでも行列を入れ替えができる。
#transposeと使い方は一緒。
arr.swapaxes(1,0)

>>>
array([[0, 3, 6],
       [1, 4, 7],
       [2, 5, 8]])

3次元配列の場合。

arr2 = np.arange(24).reshape(4,3,2) # 4×3×2の3次元配列。
arr2

>>>
array([[[ 0,  1],
        [ 2,  3],
        [ 4,  5]],

       [[ 6,  7],
        [ 8,  9],
        [10, 11]],

       [[12, 13],
        [14, 15],
        [16, 17]],

       [[18, 19],
        [20, 21],
        [22, 23]]])
arr2.transpose(2,1,0)# 2×3×4の3次元配列へ。

>>
array([[[ 0,  6, 12, 18],
        [ 2,  8, 14, 20],
        [ 4, 10, 16, 22]],

       [[ 1,  7, 13, 19],
        [ 3,  9, 15, 21],
        [ 5, 11, 17, 23]]])

行列の積(dot)

np.dot(arr.T, arr)

>>>
array([[45, 54, 63],
       [54, 66, 78],
       [63, 78, 93]])
#ちなみにdotは要素の掛け算ではありません。
#掛け算を試してみると。
arr.T * arr

>>>
array([[ 0,  3, 12],
       [ 3, 16, 35],
       [12, 35, 64]])
#np.dot(arr.T, arr)とは違うことがわかります

第5回はこちら

watarumon.hatenablog.com

それじゃー、また。