「python」の基礎についてまとめてみました。実際に就活していた時や研究でpythonさんにはお世話になりました。転職等でも有効だということもよく聞きます。機械学習パッケージや論文実装が多く、コード自体も比較的簡単です。ですが1から学ぶって大変だった記憶があるので、その時の記憶も踏まえ基礎の基礎や学び方を紹介できればと思います。
まず本当の基礎の基礎だけはこの記事で書き、その後はロードマップ的な感じで本を紹介します。
はじめに
pythonを学ぶ流れは以下のような感じです。
- pythonの基礎の基礎を学ぶ
- pythonでよく使うライブラリを学ぶ
- pythonで統計・基礎分析等を学ぶ
- pythonでよく使う機械学習ライブラリを使ってみる
- pythonで学びたいことを学ぶ
この記事も自分が最初に学んだ頃のコード等を掘り起こして作成したものです。変数名等がいろいろ他のサイトと被っているかもしれません…。
python 基礎
環境構築
環境構築に関しては今回は省略しますが、以下のようなサイトにたくさんあります。
※2023/9/23更新・・・
環境構築手順をまとめました!是非ご覧ください!
入れるだけ・クリック作業ですので、頑張りましょう!
※今回はバージョン管理に関してはいりませんが、本来であればバージョン管理は大事です。ですが、まずはpythonの基礎の基礎であれば関係ありません。まずは、手を動かし続けることを意識しましょう。
Jupyter Notebook環境を作ると学習が大変楽になります。お勧めします。
python基礎の基礎
学ぶ際にはJupyter環境を構築してからコピペして実行しながら学ぶことをお勧めします。
表示 print「Hello, world!」
プログラミング言語入門でおなじみの「Hello, world!」の出力もこれだけのコードで足ります。
print("Hello, world!")
Hello, world!
コメントアウト(表示しないようにする)
ブロックコメントor最初の#以降はすべてコメントアウトをする。これをすることでプログラムにメモを書き込むことができる。
#はコメントアウト
複数行コメントは
''' コメントアウトされている行 '''
数値計算シリーズ(軽く)
本当に軽くしかしていません…。
# 出力例
print(1 + 1)
print(2 * 5)
print(10 ** 3) # 10の3乗, 〜乗は**を使う
2
10
1000
足し算:+
引き算:-
掛け算:*
割り算:/
余り:%
この5つは確実に覚えてください…。
「型」について
変数を扱うときに整数なのか文字なのか「型」を設定する必要はpythonにはないが、頭の片隅に入れておく必要はあります。
↓
pythonでは(その他に関しても)違う型同士の演算はできない!!!
変数
変数に数値を割り当てる。
int_test = 1
print(int_test)
# 上の数字に10を足す
int_test = int_test+ 10
print(int_test)
1
11
変数に文字列を割り当てる場合は以下のように
# 文字列
str_test = "test"
print(str_test)
test
文字列、リスト等の場所の指定=スライス
プログラミング全般は、場所等を指定する際には0から始まる。「スライス」という言葉だけでも持ち帰ってください!
# 文字列
str_test = "test"
print(str_test)
test
# 文字の抜き出しも可能。=スライス
str_test[0]
't'
# 2番目の文字は1を指定
str_test[1]
'e'
# 2番目以降を表示
str_test[1:]
'est'
# 2つとばしで表示
str_test[::2]
'ts'
[始まり:終わり:何個飛ばし?]という構造になっている。※[::]の様に空でも大丈夫です。
エラーに関して
実装してプログラムを実行したあとにエラーに遭遇することは多々、多々あります。
↓
エラーメッセージが出てくる。このエラーのメッセージが大事!!
↓
エラーが起きた場合は、まずはエラーメッセージを見て、検索などしてみると解決できる、、、ことが大半である。同じエラーや悩みを持った人がネット上に情報を上げていることが多いです!ニッチすぎなければ…。
予約語
変数を作る際に関する注意点として、プログラミング言語には、予約語といわれる、あらかじめ用意してある変数や組み込み変数(while, if, sumなど)がありますので、それらを変数名として使わないように注意です!!
使ってしまうとエラーや機能が使えなったりとしてしまいます。
# 予約語一覧をみるやつ
__import__('keyword').kwlist
['False',
'None',
'True',
'and',
'as',
'assert',
'async',
'await',
'break',
'class',
'continue',
'def',
'del',
'elif',
'else',
'except',
'finally',
'for',
'from',
'global',
'if',
'import',
'in',
'is',
'lambda',
'nonlocal',
'not',
'or',
'pass',
'raise',
'return',
'try',
'while',
'with',
'yield']
for、whlie、if文
よく使う構文です。必ず覚えましょう。できれば手を動かしながら…。
for文
指定された回数やリストの分だけループします。よく使います!
for i in range(5):
print(i)
0
1
2
3
4
if文(条件文)
条件を指定して、それに応じた行動をする構文です。(True or False で返す)
for i in range(10):
print(i)
if i%2==0:
print("2で割れる")
elif i%3==0:
print("3で割れる")
if (i%2==0)and(i%3==0):
print("2でも3でも割れる:andの検証")
if (i%5==0) or (i%3==0):
print("5か3で割れる:orの検証")
0
2で割れる
2でも3でも割れる:andの検証
5か3で割れる:orの検証
1
2
2で割れる
3
3で割れる
5か3で割れる:orの検証
4
2で割れる
5
5か3で割れる:orの検証
6
2で割れる
2でも3でも割れる:andの検証
5か3で割れる:orの検証
7
8
2で割れる
9
3で割れる
5か3で割れる:orの検証
while文
While書き方は以下の通りです。条件がくるまで無限にループします。そのため、if文や条件を直接書き込み、無限ループにならないように気をつけてください。
# while 文
int_test =1
while int_test<= 10:
int_test = int_test+ 1#or int_test+=1
print(int_test)
11
ちなみに
While True:
# コード
の時に動きますので、心のどこかでとどめておくと使うときTure、Falseで制御するときに分かりやすいと思います。
リスト
簡単に言うと、使いやすいくデータを一直線にまとめたもの、です。よく使います!
リスト基礎
# list
list_test = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(list_test )
# typeで変数のタイプがわかる。よく使う
print("変数のタイプ:", type(list_test ))
# 1つの要素(インデックス)を指定。
print("1番目の数:", list_test [0])
# lenで要素の数を出力。
print("要素の数:", len(list_test ))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
変数のタイプ: <class 'list'>
2番目の数: 2
要素数: 10
下の様にリストに数値をかけるとリスト自体が数値倍されます。
list_test * 3
[1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10]
基本的な操作のまとめ
- スライス
- .append():リストの末尾に要素を追加
- .insert(インデックス,値):インデックスの位置に要素を追加
- del リスト[インデックス]:インデックスの位置の要素を削除
- .pop(インデックス):インデックスの位置の要素を取得し、削除(指定がなければ末尾)
- .remove():値を指定し、削除
- .extend(リスト):リストの結合
- .clear():リストの初期化
リスト+for文
良く組み合わせて使います。
# 初期値
total_number = 0
# for 文
for num in [0 ,1, 2, 3]:
print("num:", num)
# 取り出した数を足し合わせる
total_number = total_number+ num#or total_number+=1
if num==2:
print("ifの検証用")
# 最後に合計を表示
print("合計:", total_number)
num: 0
num: 1
num: 2
ifの検証
num: 3
合計: 6
リスト+for文+append(末尾に追加)
# 空のリストを作成+append
list_test = []
for i in range(2,21,2):
list_test.append(i)
print(list_test)
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
リスト内表記
プログラムがすっきりし、見やすくなるなどのメリットもあります。
# リスト内包表記、sample_data_listから1つ1つ要素を取り出し、2倍した数字を新たな要素とするリストを作成
list_test = [i * 2 for i in list_test]
print(list_test)
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
リスト内表記内にif文を入れられたりします。調べてみてください。
辞書型
私自身は苦手であまり使いませんが、様々な個所で使われています。使いやすい場面では本当にお世話になります。
基礎の基礎だけでも押さえておきましょう。
辞書型基礎
keyとvaluesの組み合わせ、鍵と値の対応でできています。
# dict
dic_test = {'apple': 1, 'banana': 1, 'orange': 3, 'mango': 4, 'melon': 5}
print(dic_test['orange']+dic_test['apple'])
4
辞書型+for文
for dic_key in dic_test:
print(dic_key, dic_test[dic_key])
apple 1
banana 1
orange 3
mango 4
melon 5
# key, valueが取り出せる
for key, value in dic_test.items():
print(key, value)
apple 1
banana 1
orange 3
mango 4
melon 5
辞書型keys,values
list(sample_dic_data.keys())
['apple', 'banana', 'orange', 'mango', 'melon']
list(sample_dic_data.values())
[1, 1, 3, 4, 5]
自作関数 def()
よく使います。return=返り値ということさえ軽く覚えておいてください。
よく使うプログラム・アルゴリズムを先に定義しておいて、あとで何回も使えるようにしておく、などの時に使います。
def my_func(x):
#print(x)
return x*2
例えば
aaa = my_func(3)
print(aaa)
などとすると、3*2=6なので6が返り値としてプリントされます。どんどん使って慣れましょう!!!
クラスとインスタンス
イメージとしてはdef:定義の上位互換?な感じです。※個人的な意見ですが
クラスは「オブジェクトのひな型」である。
- オブジェクト指向:ソフトウェアの保守や再利用をしやすくすることを目的とした技術で、特徴は「部品の独立性を高める」らしいです
- インスタンス:クラスからできあがる実体、インスタンスには属性を追加可能
init とは
- コンストラクタと呼ばれる初期化のための関数(メソッド)
- インスタンス化を行う時に必ず最初に呼び出される特殊な関数(メソッド)
- オブジェクト生成(インスタンスを生成)のついでにデータの初期化を行うもの
クラスの作成
- testClassクラスの作成
- print_meメソッド(関数)
- some_function1~4のメソッド(関数)
class testClass:
def __init__(self,x2=None,y2=None,start_num=2000):
self.x2=x2
self.y2=y2
self.start_num = start_num
def print_me(self):
print(self.x, self.y)
def some_function1(self):#メソッド1
print(self.x)
def some_function2(self):#メソッド2
return self.y
def some_functio3(self):#メソッド3
return self.x2+self.y2
def some_function4(self,x,y):#メソッド4
return x+y
インスタンス
クラスを使うために、実体を作成します。
# インスタンスの作成、生成
p1 = testClass()
# 属性の値を割り当て
p1.x = 10
p1.y = 100
p1.z = 1000
#initに元々入っている属性の値
p1.start_num
2000
メソッドの呼び出し
# メソッドの呼び出し
p1.print_me()
# メソッドの呼び出し
p1.print_me()
10 100
# メソッドの呼び出し
p1.some_function1()
10
# メソッドの呼び出し
p1.some_function2()
100
p2 = testClass()
p2 = testClass()
#p1では割り当てたが、p2は割り当てていないためエラー→つまり別物として扱っていることが分かる。
p2.z
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Input In [10], in <cell line: 2>()
1 #p1では割り当てたが、p2は割り当てていないためエラー→つまり別物として扱っている
----> 2 p2.z
AttributeError: 'testClass' object has no attribute 'z'
#x2,y2に代入してからインスタンスの作成
p3 = testClass(4,5)
p3.x2,p3.y2
(4, 5)
#クラス内の変数を用いて計算しているメソッド(クラスの中で記述される関数)
p3.some_functio3()
9
#クラス外の変数を用いて計算しているメソッド
p3.some_function4(6,7)
13
練習として、上のクラス等を変更してみるなどするだけでも定着率は変わります。手を動かしましょう!
まとめ
参考本
本で勉強するなら以下の本がおすすめです。自分も最初は本で勉強して感覚をつかんだのちに、ネットなどの情報を参考にして勉強しました。プログラミングを一回も触ったことのない方であれば本を1周してみるのがおすすめです。
オンライン学習サイト
今は多くのオンライン学習サイトがあり、無料でできるものも多いです。何十万と払っての講座とかもありますが、無料(本1冊なら3000円以内)で何とかなります。
まとめのまとめ
頑張ってpythonを身につけましょう!なるべく手を動かした方が身に付きます。コードをコピペしてもいいので動かしましょう!
軽く触っておくだけでも、後に役立つと気が来るかも…?
もし、この記事を読んで参考になった・他の記事も読んでみたいと思った方、twitterのフォローボタンを押していただけるとモチベーション向上につながるので、よろしくお願いいたします。
コメント