Udemyの我妻先生の「みんなのKaggle講座」 を受講させていただきました。
大変わかりやすかったので、Kaggleに取り組んでみたいと思われているみなさんにおすすめです。この記事を見て、少しでも気になった方はぜひ購入してみてください。
自分は元iOSエンジニアということもあり、Pythonの書き方がなれていなかったので、
Pythonはこのように書くのかと、特に学びになったことをまとめさせていただきます。
誰かの学びになれば幸いです。
学びになったこと
- 論理演算子の書き方
- リスト
- タプル
- for文
- クラスのself
- ファイルの保存と読み込み
- __init__メソッド
- __call__メソッド
論理演算子の書き方
Pythonでは、論理演算子を 「and」 「or」 「not」 と直接、文字で記載します。
&&とかでは記載しません。
a = 3
b = 4
c = 5
d = a < b and b < c # 両者があっていればTrue
print(d)
e = a < b or b > c # 片方でもあっていればTrue
print(e)
f = not a < b # TrueやFalseを反転させる
print(f)
出力
True
True
False
リスト
pythonのリストは、複数の値をまとめたいときに使用します。
全体を[]で囲みます。
a = [2011,2012,2013,2014,2015]
print(a[0])
print(a[1])
print(a[2])
出力
2011
2012
2013
データ型がばらばらでも問題ない
b = 2016
c = [b, 2017, 20.1, "Hello", "Hi"]
print(c[1:4])
# c[1:4]は1から4未満(1,2,3)を表している
出力
2017
20.1
'Hello'
リストの中にリストを格納できる
d = [[2012,2013,2014], [2015, 2016, 2017]]
print(d[0])
出力
[2012, 2013, 2014]
リストは作成後に要素を追加したり、変更することができる
e = ["Py", 543.21, 79, "thon", [2018, 2019, 2020]]
print(e)
e[2] = 99
print(e)
e.append(2021)
print(e)
出力
['Py', 543.21, 79, 'thon', [2018, 2019, 2020]]
['Py', 543.21, 99, 'thon', [2018, 2019, 2020]]
['Py', 543.21, 99, 'thon', [2018, 2019, 2020], 2021]
タプル
タプルとは、リストと同じく複数の値をまとめて扱いたときに利用します。
ただ、リストと違って、要素の追加や削除、入れ替えを行うことはできません。
タプルは全体を()で囲み、各要素を, で区切ります。
要素を変更する予定がない場合は、リストよりもタプルを使用するほうが良いです。
# 練習用
a = [2012, 2013, 2014]
b = (2012, 2013, 2014)
print(a)
print(b)
# 出力
# [2012, 2013, 2014]
# (2012, 2013, 2014)
print(a[1])
print(b[1])
# 出力
# 2013
# 2013
a[1] = 2016
print(a)
# 出力
# [2012, 2016, 2014]
b[1] = 2016
print(b)
# 出力
# エラー
a.append(2015)
print(a)
# 出力
# [2012, 2016, 2014, 2015]
b.append(2015)
print(b)
# 出力
# エラー
for文
for文でループするときに、連番の整数を使う場合は、range関数を使用する。
以下では、iに0から5までの整数が入る場合
for i in range(0,6): # rangeで0以上6未満の整数が入る
print(i * 2)
出力
0
2
4
6
8
10
クラスのself
関数とは異なり、クラスの中で定義するメソッドの最初の引数にはselfと書く必要があります。
このselfを用いて、インスタンスは値を保持することができます。
インスタンス内で値を保持する変数を、インスタンス変数といいます。
class Box:
def set_number(self, n1, n2):
self.num1 = n1
self.num2 = n2
# num1, num2がインスタンス変数
bx = Box()
bx.set_number(123,456)
print(bx.num1)
print(bx.num2)
bx.num1 = 999
print(bx.num1)
出力
123
456
999
インスタンス変数は、インスタンスごとに異なる値を設定することができる
class Dog:
def set_dog(self, n, a):
self.name = n
self.age = a
dog1 = Dog()
dog1.set_dog("Pochi", 5)
dog2 = Dog()
dog2.set_dog("Hachi", 12)
dogs = [dog1, dog2]
for d in dogs:
print(d.name, d.age)
出力
Pochi 5
Hachi 12
ファイルの保存と読み込み
with構文を用いて、ファイルの読み込みや保存を簡単に記述できます。
greetings = "Good morning! Good night!"
with open("greetings.txt", "w") as f:
f.write(greetings)
# wはファイルへの書き込み(write)を表す
上記で保存されたファイルを読み込んで、表示もできます
with open("greetings.txt", "r") as f:
print(f.read())
# rはファイルの読み込み(read)を表す
__init__メソッド
__init__メソッドは、イニシャライザ、もしくはコンストラクタと呼ばれています。
このメソッドは、インスタンスの生成時にインスタンスの初期設定を行うことができます。
class Calc:
def __init__(self, a):
self.a = a
def add(self, b):
print(self.a + b)
def multiply(self, b):
print(self.a * b)
以下で、引数3を渡したインスタンスを生成しています。
cl = Calc(3)
cl.add(4)
cl.multiply(4)
出力
7
12
__call__メソッド
__call__メソッドは、インスタンス名を使って呼び出すことができます。
class Calc:
def __init__(self, a):
self.a = a
def __call__(self, c):
print(self.a * c + c)
def add(self, b):
print(self.a + b)
def multiply(self, b):
print(self.a * b)
インスタンスを使って、__call__メソッドを呼び出せます
cl = Calc(3) # インスタンスを生成。__init__メソッドの引数aに3を渡している。
cl(5) # __call__メソッドの引数cに5を渡している
出力
20
このように、__call__メソッドを使えば、メソッド名を記述する必要がなくなります。
頻繁に用いる処理は__call__メソッドで記述しておくことで、コードの記述量が少なくすむようになります。
まとめ
Pythonに慣れていない人は、上記のことさえ覚えればだいぶ読みやすくなると思います。
Kaggleでメダルを取得するために、まずはkaggleのPythonのnotebookを読めるようになるようになるのが大事だと思います。
上記に共感している方は、Udemyの我妻先生の「みんなのKaggle講座」 は大変参考になると思うのでおすすめです。
最後まで読んでいただき、ありがとうございました!