Python

2020/11/22

ゆるふわPandasチートシートのリンク

Pandasを色々触っている時に、Pandasのチートシートを見つけたのでメモ。

ゆるふわPandasチートシート - Qiita

pandasのDataFrameのデータ操作をよくわすれるので、よく使用する操作を自分のためにまとめた - Qiita

やっぱり初めてのライブラリを触っている時はAPIを知らないので、そこを一つずつ覚えて使いこなすのが割と面倒。
こういうチートシートがあれば、触りながら感覚を身に付けられる。

経験者になれば、こういうチートシートは全て頭に入っているだろうが、初心者から駆け上がる時にとても役立つ。
ちょうど、英会話で中学生の初歩から英単語を覚えているのと同じ感覚に似てる。

Pandasを使いながら、SQLを代用できないか、R言語だとどれくらい違うのか、色々遊んでみたい。


| | コメント (0)

2020/08/14

NumPyを図解で理解する

NumPyを図解で理解する記事がわかりやすかったのでメモ。
ラフなメモ書き。

【参考】
【初心者向け】図解でわかるNumPyとデータ表現|Saya|note

線形代数とは、そもそも何なのか?
考え方は2つある。

一つは複数個の連立方程式を1個の数式で表す手段。
解は、逆行列で計算することになる。

もう一つは、座標変換を計算するための手段。
複数回、回転させた場合は、固有値を使って計算する。

行列やベクトルの計算が必要になるのは、電磁気学や量子力学のように、場(field)で複数個の微分方程式を一つの方程式でまとめて表現するために必要だから。

分かれば当たり前だが、高校生の頃は何のために行列計算するのか分かっていなかった。
そういう意味では、日本の高校の物理や数学は中途半端。
微分方程式で物理を習得しないので、小学生の鶴亀算みたいに、大量の物理の公式を覚えて解くだけになってしまう。

PythonのNumpyに初めて触れて、実際に色々触ってみて良かったのは、ループ処理せずとも一つの処理で簡単に計算できることだ。
ベクトル内で足し込む処理だけでなく、全項目が正値か判定する処理すら1行で書ける。
これにより、シグモイド関数に当てはめることが出きる、とか。

この記事の後半では、Word2Vecの簡単な解説もある。

高校数学をPythonで計算して理解する、という方法も今の時代ではありえる。
手計算も大事だが、プログラミングできれば、いくらでも応用できるメリットもある。

| | コメント (0)

2020/05/27

Python と R の違いのリンク

PythonとR言語の違いについて興味を持ったのでメモ。

【参考1】
Python と R の違い・関数の対応表 ? Python でデータサイエンス

基本ライブラリやデータ分析に関する処理の違いをコードベースで書いてくれているので読みやすい。

Python と R の違い (データフレーム編)
Python と R の違い (数学関数・データ整形加工編)
Python と R の違い (日付・時間の処理)
Python と R の違い (データ可視化・グラフ作成編)
Python と R の違い (決定木分析)
Python と R の違い (サポートベクターマシン)
Python と R の違い (ナイーブベイズ分類器)
Python と R の違い (ランダムフォレスト法)
Python と R の違い (線形回帰による予測)
Python と R の違い (k-NN 法による分類器)

PythonとR言語のコードを比較しながら読んでいると、まるで、ロゼッタストーンを発見した時に、古代エジプト語とアルファベットを比較したような感覚に似ているのかな、と空想したりする。
つまり、同じ内容を表現する時に、全く違う言語で表現したら、見た目が全く違う、みたいな感じ。

【参考2】
PythonとRのコマンド比較表 - Qiita

データフレーム、プロット、リスト、計算、処理などの観点でコード比較している。
Numpy、Pandas、Matplotlibに相当するRのライブラリは自分でも整理してみる。

【参考3】
R vs Python:データ解析を比較 | POSTD

実際にデータ分析したいことについて、PythonとRで比較している。
Pythonは、scikit-learnみたいにライブラリを使いまくるイメージかな。

一方、Rの方がPythonよりも行数を短く書ける場合もあるみたい。
この辺りは、自分で書いてみて理解する。

Haruhiko OkumuraさんはTwitterを使っています 「https://t.co/fxE6ETowKd Rで書けば5行だ df = read.csv('...') plot(df$costs, df$profit) r = lm(profit ~ costs, data=df) summary(r) abline(r)」 / Twitter

【参考4】
「データ分析をやるならRとPythonのどちらを使うべき?」への個人的な回答 - 渋谷駅前で働くデータサイエンティストのブログ

このブログを読むと、試行錯誤しながらデータ分析するならR言語、機械学習や深層学習ならPython、という使い分けなのかな。

ちょっとずつ書いてみると違いが分かり始めて面白い。


| | コメント (0)

2020/05/10

PythonとRubyの違い

PythonとRubyの違いの記事が参考になったのでメモ。

【参考1】
PythonとRubyの違い | Qrunch(クランチ)

記事の内容は同意する。
個人的感想では、Pythonの方がより実用的な気はする。

実際、Javaはelse if、Rubyはelsifだが、Pythonはelsifと一番短い。
Pythonは予約語も一番少ない。
from モジュール import 関数で書くと、モジュールやオブジェクトは意識しなくていいので、関数っぽく書ける。

【参考2】
【Ruby】PythonプログラマーがRubyを触って感じたこと - 歩いたら休め

Pythonプログラマから見ると
「Rubyはオブジェクト指向にこだわりすぎている」
「変な記号がいっぱいある」
「ブロック(ラムダ式)が強力すぎる」
であるらしい。
確かに、変な記号は多すぎるので最初は慣れるのに時間はかかる。

下記のアドバイスも参考になった。

(引用開始)
逆に、RubyのプログラマーがPythonを勉強したいなら、以下の3点を押さえておけば、ちゃんとしたプログラムが書けると思います。

リスト内包表記
ジェネレーター(遅延評価)
ふつうに定義した関数がオブジェクトであること
(引用終了)

【参考3】
Rubyのリファクタリングでイケてないコードを美しいオブジェクト指向設計のコードへ改良するための方法 - Qiita

Python のリファクタリングでイケてないコードを別に美しいオブジェクト指向設計ではない普通のコードにする方法 - Qiita

個人的感想では、Rubyのリファクタリング例はとても綺麗で参考になる。
Rubyの威力を見せつけられる感じ。

一方、Pythonの例はもう少し意義が感じにくかった。
もっといい例があるのかも知れない。

| | コメント (0)

乱立したPythonのオライリー本のリスト

Python本が読みたいと思っていたら、オライリーの本が大量に出版されていたので、下記の記事をメモ。

オライリーのPython & 機械学習本が渋滞気味なので整理してみた - Deutschina's Tech Diary

自分が読みたい本をリストアップしておく。

NumPy、Pandas、MatPlotLibを一通り勉強する時の本。

DeepLearningの構造を最初から理解する。

「scikit-learnとTensorFlowによる実践機械学習」は今読んでるけど、機械学習が今までのアルゴリズムと何が違うのか、網羅的に書かれていてとても役立つ。

これもいつか読みたい。


| | コメント (0)

2020/04/30

PyCharmやVSCodeでjupyter notebookを使用する方法

Pythonの開発環境では、Pycharmが使いやすい。
デバッグやリファクタリング、色やキー操作の細かな設定が優れている。

しかし、PycharmのCommunity版では、ipynbファイルは素のJsonファイルで表示されてしまって使いにくい。
調べてみたら、下記のやり方で、Pycharmからjupyter notebookを起動してブラウザ上で表示できるようになる。

PyCharmでjupyter notebookを使用する方法(Windows10) - Qiita

一方、VSCodeでjupyter notebookを使用するには、Pythonエクステンションを入れるだけ。
ブラウザ上のでjupyter notebookではなく、VSCode上でipynbファイルが自動変換されて表示されるので便利。

VS Code でPython,Jupyter を動かす - Qiita

jupyter notebookを使いたい場合、PycharmCommunityよりもVSCodeが手に馴染んでいい感じ。

| | コメント (0)

2020/04/25

Pythonのリスト内包表記のメモ

Pythonのリスト内包表記についてメモ。
Python初心者なので間違っていたら後で直す。

【参考】
pythonの内包表記を少し詳しく - Qiita

リスト内包表記の活用と悪用 - Qiita

Pythonリスト内包表記の使い方 | note.nkmk.me

Pythonのリスト内包表記はチューリング完全だから純LISPだって実装できる - Qiita

Pythonの習得を始めたところ、Rubyと微妙に異なる点でいくつかハマった。
個人的には過去の記事が参考になった。

【Ruby】PythonプログラマーがRubyを触って感じたこと - 歩いたら休め

(引用開始)
逆に、RubyのプログラマーがPythonを勉強したいなら、以下の3点を押さえておけば、ちゃんとしたプログラムが書けると思います。

リスト内包表記
ジェネレーター(遅延評価)
ふつうに定義した関数がオブジェクトであること
(引用終了)

確かに、リスト内包表記が一番難しく感じた。
個人的には、
[str(i) for i in [1, 2, 3]]
と書くよりも
list(map(str, [1, 2, 3]))
の方が読みやすいし理解しやすい。

[i for i in [1, 2, 3] if i % 2]
よりも
list(filter(lambda x: x % 2, [1, 2, 3]))
の方がカッコよく感じていた。

しかし、mapやfilterよりもリスト内包表記の方が高速らしいので、リスト内包表記を使うべきなのだろう。

実際、Pythonのリスト内包表記は奥が深い。
Pythonのリスト内包表記はチューリング完全だから純LISPだって実装できる - Qiita記事が面白かった。

(引用開始)
Pythonにはリスト内包表記というとても便利なものがあります。
どれくらい便利かというと、チューリング完全です。
(引用終了)

最初の印象は、for文を使いまくって手続きっぽいな、Rubyのブロックみたいに書ければ綺麗なのに、と思っていたが、Pythonはリスト内包表記があるから関数型言語の側面もあるのだ、と感じた。

Pythonで色々書いてみた気づきは色々ある。
Pythonのmap, filter, reduceは、Rubyのmap(collect), select(find_all), reduce(inject)と同じだが、文字・リスト・ハッシュ(辞書)のメソッド名が微妙に異なっている。
例えば、PythonはList.remove(要素)、RubyはArray.delete(要素)。
例えば、PythonはList.extend(要素)、RubyはArray.push(要素)。

Rubyのクロージャはブロックで簡単に書ける一方、Pythonのクロージャは、関数内関数を使う。
その時、関数内関数の外側の変数は参照できるが、更新したい時は、nonlocal宣言が必要。
その点は、何となくPerlに似ている。

Rubyではインスタンスメソッド、クラスメソッド(特異メソッド)が単純に書けるが、Pythonでは、インスタンスメソッドの第1引数にselfを明示したり、クラスメソッドにはアノテーションを付けて第1引数にclsを明示する。
その点は、Pythonは機械語により近い感じがする。

Pythonは多重継承をサポートしている部分は驚いた。
JavaもRubyも、ほとんどのプログラミング言語も多重継承はないから。
Rubyなら継承チェーンは必ずツリー構造なので、メソッド探索は単純だが、Pythonで多重継承ができるとなると、いわゆる菱形継承が問題になってくる。
どうやって解決しているのか、調べてみる。

| | コメント (0)