Pythonを無料で独学できるKaggleのCourses|Loops and List Comprehensions_Exercise

スポンサーリンク
Kaggle
【Python初心者でも分かる】データサイエンティスト協会の100本ノック|ダウンロードから読み込みまで
「データサイエンティスト協会の100本ノック」はビジネス現場で使えるデータ分析の学習に最適です。その「データサイエンティスト協会の100本ノック」のデータとPythonコードがGitHubで公開されています。 今回は、...
素人がデータサイエンティストになるための近道|社内データサイエンティスト
データサイエンティストとは、データを使って問題を解決する人のことです。 データサイエンティストって、なんかかっこいいですよね。パソコンの前で、難しそうなデータを扱って、表とかグラフにまとめて、経営陣にプレゼンする。最近...

Pythonを学びたいと思っている方に非常におすすめな学習方法があります。それは、KaggleのCoursesです。特徴としては、以下のものがあります。

  • 無料
  • 面倒な環境設定なく
  • 解説付きで
  • 体系的に学習できる

これは、活用しないわけにはいかないですよね。ただ、このKaggleのCoursesは、英語で書かれています。なので、英語が苦手な初学者にはハードルが高いと感じるかもしれません。なので、日本語でコードの解説をしていきます

まずは、以下の記事を参考に、KaggleのCoursesで独学する方法を解説しています。

Kaggle Courses|Pythonを無料で独学できる超簡単な方法

今回は、KaggleのCoursesの各論として、Python編の「Loops and List Comprehensions」の「exercise」を解説していきます。

Loops and List Comprehensions(exercise)

これで、もっと面白いプログラムが書けるようになります。以下の問題が解けるかどうか試してみてください。

いつものように、問題に取り組む前に以下のセットアップコードを実行してください。

1.

バグの修正には運も必要だと感じたことはありませんか?

次のプログラムにはバグがあります。そのバグを特定して修正してみてください。

これのどこにバグがあるのでしょうか?分からなければ、適当なリストを作ってコードを実行してみるのが手っ取り早いです。

たしかに、すべてのリストで判別指定のではなく、リストの最初の数値のみしか判別していないことが分かります。

では、バグを特定して、下のセルに修正してみてください。

これで、リストの数値をすべて判別するコードが書けました。

解説が出力されますので、確認してみましょう。

別の方法として、1行で書けるコードも提示してくれました。

2.

下のPythonの式を見てください。この式を実行すると、何が得られると思いますか?予測ができたら、コードをアンコメントしてセルを実行し、自分が正しかったかどうか確認してください。

数値と数値、リストとリストなら、比べられますが、リストと数値は比べられません。

RやPythonでは、(numpyやpandasのような)いくつかのライブラリが、リストの各要素を2と比較して(つまり「要素ごと」の比較をして)、[False, False, True, True]のようなブーリアンのリストを返します。

この動作を再現する関数を実装し、対応する要素がnより大きいかどうかに対応するブーリアンのリストを返してください。

問題の関数を見てみましょう。

リスト内の数値に指定した数値(ここでは2)より大きいか、そうでないか、をTrue、Falseで、リストにある数値の数だけ、返すようにしましょう。

正解を確認してみます。

二通りのコードがあります。

1つ目は理解しやすいコード

2つ目は簡素なコード

3.

以下の関数の内容を、そのdocstring(”””  ”””)に従って完成させます。

では、作りたい関数のルールを見てみましょう。

では、正解を確認してみましょう。

range(len(meals))を使えば、mealsのすべてのインデックスを得ることができます。もしこの範囲を使っていたら、ループの最後の繰り返しは、最後の要素とその次の要素を比較することになり、それは…。IndexError! range(len(meals)-1)では、最後の要素のインデックスを除くすべてのインデックスが得られます。

しかし、食事が空であるかどうかをチェックする必要はないのでしょうか?range(0) == range(-1)となり、どちらも空であることがわかりました。つまり、mealsの長さが0か1であれば、forループの繰り返しはしないということです。

また、適当な例を作って、関数の振る舞いを見てみます。

こいつ、どんだけ肉好きやねん!

というわけで、食事のリストに同じ食事があっても、連続でなければ「False」を返します。

リストにある食事が連続であれば、「True」を返していることが分かります。

4. 🌶️

ブラックジャックテーブルの隣には、Python Challenge Casinoにはスロットマシンがあります。play_slot_machine()を呼び出すことで、スロットマシンの結果を得ることができます。返される数字はドルでの賞金です。通常は0が返されますが、たまに運が良ければ大金を手にすることができます。以下のように実行してみてください。

コードを実行すると、ほとんどが「0」を返しますが、たまに0以外を返します。これは、スロットマシンを模しています。たまに、当たりがあります。その当たりの数値はさまざまです。

ところで、1回のプレイが1ドルだということをお伝えしましたか?後で請求書をお送りしますので、ご安心ください。

マシンをプレイするたびに、平均してどのくらいのお金が得られる(または失う)のでしょうか?カジノでは秘密にされていますが、モンテカルロ法という手法を使えば、1回の引きの平均値を推定することができます。平均的な結果を推定するには、シナリオを何度もシミュレーションして、その平均的な結果を返します。

次の関数を完成させて、スロットマシンの1回のプレイの平均値を計算してください。

スピンあたりの期待値がわかったら、以下のコードセルを実行して解答を表示し、質問に答えたことにします。

スロットマシンの1回の引きで得られる正確な期待値は0.025、つまり2セント強です。ほらね。Python Challenge Casinoのすべてのゲームがプレイヤーに対して不正に操作されているわけではないのです。

この答えを得るためには、estimate_average_slot_payout(n_runs)関数を実装して、スロットマシンをn_runs回引くことをシミュレートする必要があります。この関数は、そのn_runs回の平均値を返します。

この関数が定義されていれば、スロットの平均ペイアウトを推定するためには、その関数を呼び出すだけでよいことになります。

結果の分散が大きいので(平均に大きく影響する非常に稀な高配当の結果があります)、真の期待値に近い安定した答えを得るためには、非常に高い値のn_runsで関数を実行する必要があるかもしれません。例えば、n_runsの値を1000000とすることができます。

以下に、この関数の例を示します。

www.DeepL.com/Translator(無料版)で翻訳しました。

では、試しに正解コードを実行して、実際の答えが「0.025」に近いかどうかを確認してみましょう。

以上で、「Loops and List Comprehensions_Exercise」を終わります。

Python初心者がデータサイエンティストになるために必要な書籍
データサイエンティストに必須のプログラミング言語であるPythonですが、初心者にとってはハードルが高いです。 初心者がPyhtonを勉強するためには、書籍が手っ取り早いです。しかし、書店やECサイトには多くのPyth...

【Python初心者でも分かる】データサイエンティスト協会の100本ノック|ダウンロードから読み込みまで

KaggleのCourses|Hello, Python_解説編

KaggleのCourses|Functions and Getting Help_解説編

KaggleのCourses|Booleans and Conditionals_解説編

KaggleのCourses|Lists_解説編

KaggleのCourses|Loops and List Comprehensions_解説編



コメント

タイトルとURLをコピーしました