PyLadies Tokyo Meetup #27 に参加してきました

少し前にあった3周年記念のLTのイベントが楽しかったので、
今回は勉強会に参加させていただきました。



pyladies-tokyo.connpass.com



jupyterの正しい使い方がよくわかっていなかったので、
こういったハンズオンの勉強会をしてくださるのはとても嬉しかったです。

概要としてはJupyter Notebook入門と数学入門の2部に分かれていて、
どちらも資料にそってjupyterを使って進めていくというものでした。






1. Jupyter Notebook入門 hands-on



基本的な操作と、数値計算ライブラリを使った操作を行いました。






ショートカットキー



ほとんどの操作にショートカットキーが割り当てられていたので、とても操作が楽になりました。




  • esc+A:セルを上に挿入する


  • esc+B:セルを下に挿入する


  • sc+DD:セルを削除する


  • shift + Enter : セルを実行する








input関数



キーボードに入力したデータを受け付けるための関数です。
実行すると入力フィールドがあらわれて、入力をすると読み込んでくれます。

下記の例では、受け付けた数値がnum_strに入り、
配列dogsのindex番号がnum_strと同じになる値を返却します。



def main():
num_str = input('好きな数字を入力してね:')
num = int(num_str)
dog_series(num)

def dog_series(num):
dogs = ['チワワ', 'ダックス', 'トイプードル', 'コーギー', '柴犬', 'マルチーズ']
idx = int(num) % len(dogs)
print('あなたが好きなのは')
print(dogs[idx])

if __name__ == '__main__':
main()






Pandas



csvjsonなどのデータ処理を行う場合によく使います。
pandasのread_csv()csvを整形してくれます。



from pandas import Series, DataFrame
import pandas as pd

titanic_df = pd.read_csv('titanic.csv')
titanic_df





これを実行すると下記のように出力されます。



f:id:mtomitomi:20171210210252p:plain





データが大量の場合を想定して、最初の5行だけ出力する場合は下記のようにします。



titanic_df.head(5)





統計情報を出力する場合はdescribeを使います。



titanic_df.Age.describe()





pandasを表示するときの基本設定は下記になります。



# 常に全ての列(カラム)を表示
pd.options.display.max_columns = None

# 常に全ての列(カラム)を表示
pd.set_option('display.max_columns', None)

# 常に10行だけ表示
pd.options.display.max_rows = 10

# 表示用の有効桁数を2にする
pd.options.display.precision = 2

# データフレームをHTMLで綺麗に表示
pd.options.display.notebook_repr_html = True






Numpy



多次元の配列を扱うためのライブラリです。
配列に対してfor文を使わなくても一括で処理ができます。



import numpy as np

# データを読み込み
reactions_in_ms = np.loadtxt('/Users/m-tominaga/Python/python-math-nyumon/reactions.txt')
print(reactions_in_ms[:10])
[ 664. 481. 511. 612. 526. 498. 441. 447. 685. 477.]

# reactions_in_msを1000で割ると、for文を使わないでも全てに対して処理される
reactions_in_sec = reactions_in_ms / 1000
print(reactions_in_sec[:10])
[ 0.664 0.481 0.511 0.612 0.526 0.498 0.441 0.447 0.685 0.477]






Matplotlib



グラフ描画のためのライブラリです。
Matplotlibのpyplotというパッケージでグラフ描画を行います。



## グラフのスタイルを指定
plt.style.use(style='ggplot')

## グラフのサイズを指定
plt.rcParams['figure.figsize'] = (10, 6)

# pandasで歪度をだす
print("Skew is :", home_df.SalePrice.skew())

# ヒストグラムを描画する
plt.hist(home_df.SalePrice, color='blue')



f:id:mtomitomi:20171210215145p:plain





ただ通常はnumpyのlogを使って良い感じにしてから分析を始めるのだそうです。
このlogが何をしているのかよくわからなかったです。



target = np.log(home_df.SalePrice)
print("Skew is :", target.skew())
plt.hist(target, color='blue')



f:id:mtomitomi:20171210220201p:plain






2. 数学入門 hands-on



数学は好きな教科ではありましたが、数式を全然覚えていなかったので後半はあまり理解できませんでした。
ただ、コードで入力しただけで数式やグラフが描画されるのは感激しました。



f:id:mtomitomi:20171210221719p:plain





ちなみに手順の途中で、私だけsympyがインストールできていないエラーになりました。
��ターミナル上ではできているのですが…)

ただ、そのエラーのおかげで良い技を教えてもらうことができました。
このようにビックリマークを付けて実行すると、jupyterからターミナルへ直接アクセスできるそうです。
このコマンドを実行して無事にsympyをインストールすることができました。



!python3
!python -V
!pip freeze
!pip install sympy






やってみた感想



実践的にデータを整形したりグラフを描画したりするのは初めてだったので、
使い方がわかってとても勉強になりましたし楽しかったです。
いろいろな関数やライブラリが出てきたので、実践的に使うには使い分けれるようもっと勉強する必要がありそうです。



ちなみに、私は今までjavaでコードを書くことが多くエディタのコード補完を活用しているのですが、
jupyterだとコードの補完ができないのでタイピングが大変でした。(よくタイポをしてエラーになりました...)



グラフなどで可視化されると楽しいです。うまく活用して業務の改善などに役立てていきたいと思っています。
参加してた方ともお話ができる時間がありましたし、有意義な時間を過ごすことができました。
運営に関わったみなさま、ありがとうございました。
また参加させていただきたいと思っていますので、よろしくお願いいたします。



今日のハンズオンで自分が書いたコードをgithubにあげておきました。
ハンズオンで教えてもらった通り、jupyterから File → Download as → 拡張子を.ipynbで保存すると、
githubからjupyterの画面が見れるのに感激しました。便利です。



GitHub - tominagamaya/jupyter_math_study