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

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

pandas入門5_「データの並び替え」

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

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

pandas入門第5回目、「データの並び替え」です。

今回の学習内容

今回は、Seriesの要素をindexの順や、要素小さい順に並び替えたり、その順位を見る方法について学んでいきます。

今回学ぶ関数

今回は、以下の関数について学びます。

ser.sort_index()(indexで並び替える)
ser.order()(値で並び替える)
ser.rank()(何番目に小さいかを表す)

おまじない

import numpy as np
from pandas import Series,DataFrame
import pandas as pd
from numpy.random import randn

ser.sort_index()(indexで並び替える)

#まずはseriesをつくります
ser = Series(range(3),index=['C','A','B']) 
ser

>>>
C    0
A    1
B    2
dtype: int64
#indexで並び替えます
ser1.sort_index()

#A,B,Cの順になったことがわかります
>>>
A    1
B    2
C    0
dtype: int64

ser.order()(値で並び替える)

ser.order()

>>>
C    0
A    1
B    2
dtype: int64

ser.rank()(何番目に小さいかを表す)

#ランダムな要素を持ったseriesをつくります
ser2 = Series(randn(10))
ser2

>>>
0   -1.188607
1   -0.821823
2   -1.003925
3    1.316921
4   -1.273743
5   -1.005138
6   -0.977085
7   -0.328831
8   -0.558445
9    1.552390
dtype: float64
#何番目に小さいかの順位をみてみます

ser2.rank()

>>>
0     2.0
1     6.0
2     4.0
3     9.0
4     1.0
5     3.0
6     5.0
7     8.0
8     7.0
9    10.0
dtype: float64

今回は、Seriesの要素をindexの順や、要素小さい順に並び替えたり、その順位を見る方法について学びました。

お疲れ様でした!

それじゃー、また。

pandas入門4_「データ同士の計算」

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

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

pandas入門第4回目、「データ同士の計算」です。

今回の学習内容

今回では、新しい関数について学ぶのではなく、SeriesやDataframe同士を足し算や引き算をした場合にどういった挙動をするのかについて学んでいきます。

おまじない

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

Seriesをつくる

#Seriesを2つ、つくります
#1つめ
ser1 = Series([0,1,2],index=['A','B','C'])
ser1

>>>
A    0
B    1
C    2
dtype: int64
#2つめ
ser2 = Series([3,4,5,6],index=['A','B','C','D'])
ser2 

>>>
A    3
B    4
C    5
D    6
dtype: int64

Seriesの足し算

ser1 + ser2

#同じindexの要素が足し算されていることがわかります
#片方にしかindexが存在しない場合には、NaNが自動的に追加されています

>>>
A     3
B     5
C     7
D   NaN
dtype: float64

DataFrameをつくる

dframe1 = DataFrame(np.arange(4).reshape(2,2),columns=list('AB'),index=['NYC','LA'])
dframe1

>>>
    A   B
NYC 0   1
LA  2   3
dframe2 = DataFrame(np.arange(9).reshape(3,3),columns=list('ADC'),index=['NYC','SF','LA'])
dframe2

>>>
    A   D   C
NYC 0   1   2
SF  3   4   5
LA  6   7   8

DataFrameの足し算

dframe1 + dframe2
#片方にしかindexとcolumnsが存在しない場合には、NaNが自動的に追加されています

>>>
    A   B   C   D
LA  8.0 NaN NaN NaN
NYC 0.0 NaN NaN NaN
SF  NaN NaN NaN NaN

addメソッドによる足し算

#addに引数(fill_value=0)を使うと、NaNを置き換えられます。
dframe1.add(dframe2,fill_value=0)

# SF-Bはどちらにも存在しないので、NaNになります。
>>>
    A   B   C   D
LA  8   3   8   7
NYC 0   1    2   1
SF  3   NaN 5   4

DataFrameとSeriesの計算

#Dataframeの確認
dframe2

>>>
    A   D   C
NYC 0   1   2
SF  3   4   5
LA  6   7   8

dataframe.locとdataframe.iloc(Dataframeから、Seriesをつくる)

#locの時は、行ラベル名・ 列ラベル名で指定ができます。
#ilocの時は、行の番号(0 ~ )、列の番号(0 ~ )で指定ができます。

ser3 = dframe2.iloc[0]#dframe2のindex = 0(1行目)を指定しています
ser3

>>>
A    0
D    1
C    2
Name: NYC, dtype: int64

DataFrameとSeriesの引き算

dframe2-ser3

#ser3は1×3の配列であり、行ごとに引き算されているのがわかります。
>>>
    A   D   C
NYC 0   0   0
SF  3   3   3
LA  6   6   6

今回は、DataframeやSeries同士の計算を学びました。

お疲れ様でした!

次回もよろしくね。

それじゃー、また。

pandas入門3_「indexのあれこれ」

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

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

pandas入門第3回目、「indexのあれこれ」です。

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

ser2 = ser1.reindex(['index1','index2','index3'])(indexを変える)
#reindexの引数(fill_value=)(新しいindexの値を指定して埋める)
#reindexの引数(method='ffill')(次の値が存在するまで、その値で埋める)

おまじない

import numpy as np
from pandas import Series, DataFrame
import pandas as pd
from numpy.random import randn

ser2 = ser1.reindex(['index1','index2','index3'])(indexを変える)

#まずは、Seriesをつくります
ser1 = Series([1,2,3,4],index=['A','B','C','D'])
ser1

>>>
A    1
B    2
C    3
D    4
dtype: int64
#reindexを使って、indexを変えます。
ser2 = ser1.reindex(['A','B','C','D','E','F'])
ser2

>>>
#要素が存在しない場所には、nullが入ります。
A     1
B     2
C     3
D     4
E   NaN
F   NaN
dtype: float64

reindexの引数(fill_value=)(新しいindexの値を指定して埋める)

#新しいindexの値を埋めることもできます。
ser2.reindex(['A','B','C','D','E','F','G'],fill_value=0)

>>>
#新しいindexのGに0が入ったことがわかります
A     1
B     2
C     3
D     4
E   NaN
F   NaN
G     0
dtype: float64

reindexの引数(method='ffill')(次の値が存在するまで、その値で埋める)

#新しいSeriesをつくります
ser3 = Series(['USA','Mexico','Canada'],index=[0,5,10])
ser3

>>>
0        USA
5     Mexico
10    Canada
dtype: object
ser3.reindex(range(15),method='ffill')#ffillは、forward fillの略です。

>>>
#次の値が存在するまで、その値が入力されていることがわかります
0        USA
1        USA
2        USA
3        USA
4        USA
5     Mexico
6     Mexico
7     Mexico
8     Mexico
9     Mexico
10    Canada
11    Canada
12    Canada
13    Canada
14    Canada
dtype: object

DataframeのReindex

#まずは、5×5のDataFrameをつくります
dframe = DataFrame(randn(25).reshape((5,5)),index=['A','B','D','E','F'],columns=['col1','col2','col3','col4','col5'])
dframe

>>>
col1 col2 col3 col4 col5
A -0.833892 0.096806 -0.546194 0.284642 0.938754
B -0.040001 -0.779153 1.248989 -1.088699 0.087533
D -0.767749 0.577453 -1.241944 1.814318 -0.374022
E -1.579335 -1.407157 2.671767 -1.120105 1.161817
F -1.458378 1.330623 -1.773946 0.626151 1.362205
#新しいindexと新しいcolumnsのlistをつくります
new_index = ['A','B','C','D','E','F']
new_columns = ['col1','col2','col3','col4','col5','col6']

#new_indexとnew_columnsを同時に追加します

dframe.reindex(index = new_index,columns = new_columns)

>>>
#indexがC行の行と、columnsがcol6の列が追加されていることがわかります
col1 col2 col3 col4 col5 col6
A -0.833892 0.096806 -0.546194 0.284642 0.938754 NaN
B -0.040001 -0.779153 1.248989 -1.088699 0.087533 NaN
C NaN NaN NaN NaN NaN NaN
D -0.767749 0.577453 -1.241944 1.814318 -0.374022 NaN
E -1.579335 -1.407157 2.671767 -1.120105 1.161817 NaN
F -1.458378 1.330623 -1.773946 0.626151 1.362205 NaN

今回では、SeriesやDataframeのindexやcolumnsを追加したり、変更したりする方法について学びました。 お疲れ様でした!

次回は、2018/6/18を予定しています。

それじゃー、また。

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をつくる

#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

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

お疲れ様でした!

次回は、2018/6/15を予定しています。

それじゃー、また。

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 高磁力タイプとドアジムも紹介したいのですが、それはまた別の機会に。。。

以上です。

それじゃー、また。