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)を消す)
- dataframeとは
- 今回学ぶこと
- おまじない
- dataframeをつくる
- 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" (列(カラム)全体に値を代入)
- SeriesをDataFrameに追加する
- del dataframe['columns'](列(columns)を消す)
- 標準python、numpy、pandasのあれこれ
おまじない
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
少し長くなってしまいましたが、今回は以上です。
お疲れ様でした!
次回は、こちら。
それじゃー、また。
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
お疲れ様でした!
次回は、こちら。
それじゃー、また。
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_とにかく気持ちいい。
- メリット2_あったか機能がついていること。
- メリット3_翌朝の肩が軽い
- メリット4_もみ返しが来ない
- メリット5_手軽。自宅だから!
- メリット6_全身にも使える
- メリット7_安い。
- スペックまとめ
- おまけ、お守りのバンテリン
- 終わりに
メリット1_とにかく気持ちいい。
手もみマッサージにもたくさん通ったが、もはや手もみマッサージと同等かそれ以上だと断言できる。
しかも終了時間がない。飽きるまでやっていい。
そしてこのマッサージクッションには、逆回転機能がついている。
逆回転機能とは、1分間隔で、マッサージボールの回転する方向が変わる機能だ。
この機能によって、「もういいや」とならないのだ。気持ち良さが延々と繰り返されるのだ。
体験したからこそわかったことだが、当てている位置を変えていないのに、右回転と左回転で、微妙に気持ち良いポイントが違うのである。
これによって、いわゆる「あーそこそこ!」が何度も繰り返される。
まずは気持ち良さというメリットについて書いた。
メリット2_あったか機能がついていること。
このマッサージクッションには、マッサージボール自体が発熱する機能がついている。
筋肉とか 血流とか、体内の仕組みはよくわからないが、冷たい肩より温まった肩の方が良いに決まっているではないか。
間違いない。
もちろん、発熱しないモードもあるので、熱くなってきたらポチッと止めたら良いのである。
メリット3_翌朝の肩が軽い
ここまでは、使用中の気持ちよさを挙げてきたが、もちろん使用時に気持ち良いだけでなく、翌日にもその効果は持続される。
定量的に説明できないのが、非常に申し訳ないが、言葉で表現して見ると、
「起床時の肩のパリパリ感、パキパキ感がない」のである。
始めて使った翌朝の感想を思い出して見るとこんな感じである。
「あれ...?肩が軽い...?Naipoマッサージクッションか!!!!」
電気の力はすごい。Naipo研究員には感謝しかない。
メリット4_もみ返しが来ない
みなさんも経験したことがあるだろう。マッサージの翌日に、最低な気分にさせられる"もみ返し"を。
私の使用法は、床にマッサージクッションを置き、そこに肩が当たるように、仰向けで寝るスタイルで、マッサージクッションにゴリゴリ肩を押し付けて毎日1時間弱使用しているのだが、これまでに1度ももみ返しになったことがない。
もみ返しの原因をググって見ると、「強すぎるマッサージなどによる、筋肉の炎症や損傷」とある。
医学的な知見は全くないので、単なる考察になるが、マッサージによる身体へ加わる力Fが指圧マッサージとマッサージクッションが同じだと仮定して、面積を用いると、局所的な圧力は、により、面積が狭い方が大きくなる。
指圧とマッサージボールでは、明らかに指の方が鋭いので、局所に大きな力が掛かってしまうことになる。
つまり、マッサージボールを指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 |
電池使用 | いいえ |
電池付属 | いいえ |
また、こちらも簡易になるが、商品概要を転載する。
おまけ、お守りのバンテリン
蛇足気味で恐縮だが、肩こりに悩む方々には、同時にこれも紹介したい。
【第2類医薬品】バンテリンコーワ液EX 90g ※セルフメディケーション税制対象商品
- 出版社/メーカー: 興和新薬
- 発売日: 2015/07/01
- メディア: ヘルスケア&ケア用品
- この商品を含むブログを見る
どんなに、肩こり対策をしようとも、夕方には肩がパリパリと硬く、痛んでくる時も十分ある。
そんな時に使って欲しい。
要は、麻酔の様なモノである。一時的な効果ではあるが、スースーして、スッと肩こりが和らぐのである。
有名なアンメルツヨコヨコと比べると確かに少し高めだが、私が色々試した中では、最も効果が高かった。
私は、常時バッグに入れて持ち歩いている。
肩こりに悩む方は、これをお守りとして持つことをぜひお勧めしたい。
終わりに
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)#配列の中に任意の要素が存在するか判定する
それでは、よろしくお願い致します。
- おまじない
- グリッドを作る
- カラープロットする
- 条件に合った要素を探す(where関数)
- 様々な統計処理
- anyとall
- sort(arrayを並び替える)
- unique(重複を取り除く)
- in1d(配列の中に任意の要素が存在するか判定する)
おまじない
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)")# タイトルを付ける >>>
[補足] 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回はこちら。
それじゃー、また。
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)
よろしくお願い致します。
- おまじない
- 平方根を計算する
- 自然対数の底eの累乗
- 正規分布に従う乱数を作る
- arrayの足し算
- arrayの引き算
- arrayの掛け算
- arrayの割り算
- 大きさを比較して各要素の大きいほうを返す
- その他の演算子
おまじない
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回はこちら。
それじゃー、また。
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回はこちら
それじゃー、また。