こちらのウェビナーで説明した内容の抜粋です。最初のセクションの「Pythonの基礎」とエディタの便利機能をカバーしています。
全体構成は以下の通りです。
- 今さら聞けないPython - Pythonの基礎
- 今さら聞けないPython - pandasを用いたデータ分析
- 今さら聞けないPython - scikit-learnを用いた機械学習
- 今さら聞けないPython - Sparkのご紹介
ウェビナーで使用したノートブックはこちらにあります。
スライドはこちら。
本記事でカバーしているノートブックはこちらです。
Pythonの基礎
Pythonの歴史や背景は置いておいて早速実践に行きましょう。実行環境はDatabricksレイクハウスプラットフォームを使います。
個人的な感想
- 言語構造自体は他の言語(R/Perl/PHPなど)と大差ないと思います。
- インデントによるブロック記述が可視性を高めてくれて助かります。
- pandasのデータフレームを知ったら配列を用いた複雑なコーディングには戻れません。
- 何よりも豊富なライブラリが魅力的。
- 数値 & 文字列
- 変数
- Print関数
- リスト
- Forループ
- 関数
- 条件文
- 型と型チェック
1) 数値: Pythonを計算機として使ってみましょう!
1+1
Out[1]: 2
2) 文字列
'アイスクリーム'
Out[2]: 'アイスクリーム'
+
で文字列を結合できます。
'アイスクリーム' + 'は楽園です'
Out[3]: 'アイスクリームは楽園です'
3) 変数
シェイクスピアは言いました: 「バラはどんな名前で呼ばれても、同じように甘く香るのに」と。Pythonにおける変数はシンプルに値を保持します。(合理性のある範囲で)好きな名前で呼び出すことができます!
best_food = 'アイスクリーム'
best_food
Out[5]: 'アイスクリーム'
4) Print関数
DatabricksやJupyterノートブックでは、評価したセルの最後の行が自動でプリントアウトされます。
しかし、print
関数を用いることで他のコンポーネントのプリントアウトを強制することができます。
print("やあ、一番好きな食べ物を教えてくれる?")
print(best_food)
やあ、一番好きな食べ物を教えてくれる?
アイスクリーム
また、プリントする内容をより明示的なものにすることができます。print関数の中に変数を追加することができます。また、同様に任意の文字列の中に変数を埋め込むこともできます。
print(f"{best_food}が地球で一番の食べ物です。")
アイスクリームが地球で一番の食べ物です。
5) リスト
皆さんが今朝食べた朝食のリストを作成してみましょう。
breakfast_list = ["パンケーキ", "卵", "ワッフル"]
リストに牛乳
を追加して、リストを表示します。
breakfast_list.append("牛乳")
breakfast_list
Out[9]: ['パンケーキ', '卵', 'ワッフル', '牛乳']
リストの最初にある朝食の要素を取り出しましょう。
注意: Pythonでは全てが0ベースのインデックスとなりますので、最初の要素は0の場所に存在します。
breakfast_list[0]
Out[10]: 'パンケーキ'
リストから最後の朝食アイテムを取り出しましょう。いわゆるシンタックスシュガーで、-1
の添え字で最後の要素にアクセスすることができます。
breakfast_list[-1]
Out[11]: '牛乳'
2つ目以降のアイテムが必要な場合にはどうすればいいのでしょうか?最初の添え字の後に:
のみを記述します。:
の後に添え字を記述すれば範囲指定となります。
breakfast_list[1:]
Out[12]: ['卵', 'ワッフル', '牛乳']
6) 条件文
時には、すべてのコードではなく、特定の条件に基づいて特定の行のみを実行したいと言うケースがあります。if
、elif
、else
文を用いてこのような制御を行うことができます。
ここでは食べ物の複数形を表示したいものとします(best_food
を他のものに変えてみてください)! これを実現するは、単語の末尾に 's' がない場合にのみ、文字列の末尾に 's' を追加する必要があります。
best_food = "chocolate"
if best_food.endswith("s"):
print(best_food)
else:
print(best_food + "s")
chocolateの末尾には's'が無いので、's'が追加された状態で表示されます。
chocolates
以下のセルの best_food
を変更して、3つの異なるアウトプットを確認してみてください。値に応じて表示される内容が変化します。
best_food = "アイスクリーム"
#best_food = ""
#best_food = "大福"
ice_cream_count = 1000
if best_food == "アイスクリーム":
print(f"アイスクリームが {ice_cream_count} 個欲しいです。")
elif best_food == "":
print("好きな食べ物を教えてください")
else:
print("本当ですか?アイスクリームは好きではありませんか?")
アイスクリームが 1000 個欲しいです。
変数が等しいかどうかは ==
(等しい) あるいは !=
(異なる) でチェックすることができます。
best_food == "アイスクリーム"
Out[15]: True
7) Forループ
今朝食べた朝食をすべてプリントしたい場合はどうしたらいいのでしょうか?
ループは順序に沿って、コードブロックを繰り返す手段です。("for-loop")
for food in breakfast_list:
print(food)
パンケーキ
卵
ワッフル
牛乳
それぞれの単語に何文字含まれているのかをカウントしたい場合にはどうしたらいいのでしょうか?
for food in breakfast_list:
print(f"{food} は {len(food)} 文字です。")
パンケーキ は 5 文字です。
卵 は 1 文字です。
ワッフル は 4 文字です。
牛乳 は 2 文字です。
8) 関数
上のコードはbreakfast_list
に対してのみ動作しますが、関数を作成することで別のリストに対応するように一般化することができます!関数
はdef
キーワードの後に関数名、括弧無いに任意のパラメーター、そしてコロンを記述することで作成することができます。
# 一般的な構文
# def function_name(parameter_name):
# 関数が呼び出されるたびに実行されるコードブロック
# 関数の定義
def print_length(breakfast_list):
for food in breakfast_list:
print(f"{food} は {len(food)} 文字です。")
# print_lengthにリストを引き渡すことで関数を実行します
print_length(breakfast_list)
パンケーキ は 5 文字です。
卵 は 1 文字です。
ワッフル は 4 文字です。
牛乳 は 2 文字です。
9) 複数の引数を持つ関数
2つの値を加算する関数を定義してみましょう。
ice_cream_count = 1000
chocolate_count = 500
def count_fav_food(ice_cream, chocolate):
return ice_cream + chocolate
count_fav_food(ice_cream_count, chocolate_count)
Out[19]: 1500
常にchocolate
が500になることを知っている場合はどうでしょうか?デフォルト値を設定することができます!
def count_fav_food(ice_cream, chocolate=500):
return ice_cream + chocolate
count_fav_food(ice_cream_count)
Out[20]: 1500
どのくらいチョコレートが好きなのかを定量化するために、チョコレートのパーセンテージを計算したいとしたらどうでしょうか?
def chocolate_percentage(ice_cream, chocolate):
percentage = chocolate / (ice_cream + chocolate) * 100
return round(percentage, 2)
percent = chocolate_percentage(ice_cream_count, chocolate_count)
print(f"私は {percent}% の確率でチョコレートが好きです。")
私は 33.33% の確率でチョコレートが好きです。
関数のパラメーターを忘れた場合には、help()
を呼び出すことができます。
help(count_fav_food)
Help on function count_fav_food in module __main__:
count_fav_food(ice_cream, chocolate=500)
10) 型と型チェック
ここまでで数多くの変数を定義してきました。変数の型を忘れてしまった場合にはどうすればいいでしょうか?心配しないでください。いつでもチェックすることができます!
定義した変数は以下の通りです:
percent
best_food
breakfast_list
type(percent)
Out[23]: float
type(best_food)
Out[24]: str
type(breakfast_list)
Out[25]: list
型のまとめです:
-
int
はPythonにおける数値の型です。整数値であり、小数を含まない数値全体となります。 -
float
はPythonにおける数値の型です。基本的に小数を持つ値となります。 -
String
は、食べ物の"チョコレート"
のように文字のシーケンスとなります。単語に限らず任意の文字列のシーケンスとなります。"Hello123"
や"123"
も文字列となります。これらは引用符で囲まれます。 -
Boolean
は Ture か False の値を取ります。
そして、Databricksでは変数エクスプローラ(Variable explorer)を用いることで、よりクイックに変数の型を確認することができます。
DatabricksでPythonの開発を行う際の便利機能
Databricksのノートブックエディタでは、VSCodeで使用されているMonacoがサポートされており、オートコンプリートやPythonのフォーマッティング、マルチカーソルなどの便利機能を活用することができます。以下のノートブックでウォークスルーしています。
今さら聞けないPython - pandasを用いたデータ分析に続きます。