2018/10/07

2020/04/14

Python入門

Python

ライター:

Pythonの入門者向けのページです。

Pythonの特徴

Pythonはインタプリタ型のプログラミング言語の一種です。インタプリタ型とは機械が実行するコードと人間が書くコードが同じでコンパイラが不要な言語で、コンパイラ型言語に比べて演算が遅い代わりに簡潔で読みやすいコードを書くことができます。

またPythonはライブラリが豊富で、特に数値計算系のライブラリが充実しており、構文解析や機械学習、進化最適化といった自分で書くのが難しい処理もライブラリをインポートすることで簡単にコーディングすることができます。ライブラリの処理は高速です。

jupyter notebook

Pythonを書いて実行する方法の一つにjupyter notebookと

いうオープンソースのWebアプリケーションがあります。多くのPython使用者が利用しており

  • 一般の文章とプログラムを分けて書くことが可能
  • 圧倒的にインターフェースが使いやすい
  • データの前処理からビジネスレポートまでこれ一つで作成可能
  • ファイルの共有も簡単

といった特徴があります。

プログラムの実行方法

jupyter notebookを起動する

最初にjupyter notebookを起動します。

Macの場合はターミナルを開いてjupyter notebookと入力します。

Windowsの場合は「スタートメニュー」から「すべてのアプリ」→「Anaconda3(64-bit)」→「jupyter notebook」を選択します。

jupyter notebookが起動したら右上の「New」タブからPython3を選択して新規notebookを作成します。

 

文字列を出力するプログラム

まず文字列を出力するプログラムを書いて見ましょう。

# Hello Zenjinrui
print("Hello Zenjinrui")

Python3で文字列を出力するには上記のようにカッコの中にクオーテーションまたはダブルクォーテーションで主力したい文字列を囲んで記述します。出力は自動的に改行されます。

# Hello Zenjinrui
print("Hello", "Zenjinrui")

カンマで区切ると出力はスペース区切りになります。

プログラムの実行の仕方(2種類)

文字列を出力するプログラムが書けたら出力してみましょう。jupyter notebookでプログラムを実行するには上の▶︎|Runマークをクリックするかconrolキーを押しながらEnterキーを押します。

Pythonのシンプルな構造

PythonとJavaの”Hello Zenjirou”という文字列を出力するコードを比較してみましょう。

Javaはより複雑化し4行必要になりますがPythonは1行で書くことができます。

 

[Pythonの場合]

print("Hello Zenjinrui")

[Javaの場合]

public class HelloWorld{

   public static void main(String[] args){

     System.out.println("Hello Zenjinrui");

  }

}

このようにPythonはシンプルなコードで簡単に動作させることができます。

変数の扱い方

次にPythonでの変数の扱い方について説明します。

PythonではCやJavaと異なり代入によって変数を生成します。

C言語の場合は下のように変数名の前に型を書いて変数を宣言します。

int x = 5;

str y = "Apple";

一方Pythonでは下のように変数の値を代入することによって自動的に変数の型が決まります。

x = 5

y = "Apple"

Pythonでの代表的な変数の型は以下のようになります

表: 代表的な変数の型
int型1, 150, -43, 45
float型2.43, -5.4, 0.5
str型(文字列型)"", "Hello!", "50"
リスト型[1, 2, 3, 4, 5], ["A", "B", "C"]
辞書型{"数学": 84, "国語": 60}
# int型

x = 3

# float型

y = 4.5

# 文字列型

z = "hello"

また、簡単な表記で変数の演算を行うことができます。変数の演算は以下のようにprintなどの関数内でも行うことができます。

# 出力結果:7.5
print(x + y)

# -1.5
print(x - y)

# 13.5
print(x * y)

# 0.6666666666666666
print(x / y)

# 1
print(10 % 3)

# HelloWorld
print("Hello" + "World")

#helloWorld
print(z + "World")

リスト型・辞書型

Pythonにはリスト型と辞書型という変数を入れておくためのデータ型があります。辞書型とリスト型は使用頻度も高く便利なので覚えておくと良いでしょう。

リスト型

リスト型は要素を複数格納することができるデータ型です。

[]の中に要素を[要素1, 要素2, 要素3,…., 要素n]と表記することで作成することができ変数名[要素番号]で取り出すことができます。Pythonのリストは構成する各要素の型が違っていても成り立ちます。また、要素を入れずに空のリストを作っておくこともでき、その場合は[]と表記します。

listA = [1, 2, 3, 4, "hello", "apple"]

print(listA) # 全要素のプリント

print(listA[2]) # 2つ目の要素を出力

print(listA[4]) # 4つ目の要素を出力

例えば上のlistAの中身は下図のようになっています。

また、リスト型にはいくつかのメソッドがあります。

変数名.append(要素)でそのリストに要素を追加することができます。

appendでは新しい要素は末尾に追加されます。

#リストに新しい要素を追加

listA.append("banana")

listA.append(1000)

変数名.extend(リスト)ではリストを追加することができます。

listA.extend([2, 3, 4])

辞書型

辞書型は1組の値(keyとvalue)を複数格納することができるデータ型です。辞書型を作成するルールとして同じ辞書内に同じKeyは使えない順序は考慮されないというものがあります。

例えば下の表のようなデータを格納する辞書型を作るコードは次のようになります。

keyvalue
数学85
国語60
# 辞書型

scores = {"数学": 85, "国語": 60}

# 出力結果: {'数学': 85, '国語': 60}

print(scores)

# キー指定で値を取り出す

# 85

print(scores["数学"])

# 60

print(scores["国語"])

指定のキーの値を取り出すには変数名[Key]とします。

また、変数名[Key] = 値 で新しい項目を作成することができます。

scores["理科"] = 50

# {'数学': 85, '国語': 60, '理科': 50}

print(scores)

辞書型、リスト型の中に辞書型を作る

辞書型やリスト型は入れ子構造にすることが可能です。

次のコードは辞書の中にもう一つ辞書を作っています。

info = {"taro":{"数学": 85, "国語": 64}, "hanako": {"数学": 69, "国語": 90}}

#  {"taro":{"数学": 85, "国語": 64}, "hanako": {"数学": 69, "国語": 90}}

print(info)

# taroさんのデータを取りだす: {"数学": 85, "国語": 64}

print(info["taro"])

# taroさんの国語の点数を取り出す: 64

print(info["taro"["国語"]])

また、次のコードはリスト型の中に辞書型を作っています。

info2 = [{"数学: 84, "国語": 64}, {"数学": 69, "国語": 90}]

# 1人目のデータ: {"数学: 84, "国語": 64}

print(info2[0])

# 1人目の国語の点数: 64

print(info2[0]["国語"])

このように、あるデータ型の中に異なるデータ型を入れることが可能です。

 


演習問題

info ={"taro": {''数学": 85, "国語": 64}, "hanako": {"数学": 64, "国語": 90}}

上のように辞書型になっているtaroさんとhanakoさんの点数データに対して次の値を計算して出力してみましょう。

  1. taroさんの数学と国語の合計点
  2. 二人の数学の平均点
  3. 二人の国語の平均点

ただし、具体的な値を用いたプログラムではなく、辞書へアクセスして値を取り出してみましょう。そうすることで、得点が変わっても同じプログラムで計算が可能になります。

for文

for文とはある処理を繰り返し行いたい場合に用いる文法です。同じ文を何度も書く代わりにfor文の中に処理を書くことでその処理を決められた回数繰り返すことができます。

for文は次のように書きます。

for 変数 in リスト:

   処理1

処理2

for文はリストの長さ分だけ繰り返しが発生し、変数には1繰り返しごとにリストの要素が順番に代入されます。上のコードでは、処理1はfor文の中、処理2はfor文の外なので(インデントで判断)処理1が繰り返された後に処理2は1回だけ実行されます。

Pythonではforやこの後解説するifなどのまとまった処理を記述する際は同じインデント(字下げ)でブロックを作って区別します。

複数行に渡る処理をfor文の中に記述したい場合には次のようにfor文の中に入れたいところまで次のようにインデントを下げて書きます。

for 変数 in リスト:

   for文の中に入れたい処理1
   for文の中に入れたい処理2
   for文の中に入れたい処理3

for文の外の処理2

いくつかfor文の例を見てみましょう。

"""
出力結果:
1
2
3
"""
for i in [1, 2, 3]: 
    print(i)

このプログラムではリストの中の整数1, 2, 3をprintを繰り返すことで順番に出力しています。

for i in listA: 
  print(i)

次に、このプログラムでは変数iにlistAの要素が一つずつ代入され、print文が実行されます。

range関数で連続した整数を楽に生成する

一定回数for文を実行したい場合はrange関数を使うと便利です。

range関数とは組み込み関数の一つです。

組み込み関数とは、使用頻度の高さからPython本体に直接組み込まれている関数のことを指します。

range関数は次のように使います。

書き方意味
range(num)0以上num未満の整数
range(num1, num2)num1以上num2未満の整数
range(num1, num2, num3)num1以上num2未満で増加量num3の整数

range関数を使ったfor文の例を見てみましょう。

for i in range(10):
   print(i)

上のコードはfor文を使って、0から9まで出力するプログラムです。

変数iが0~9まで変動します。range(10)の中身の数を変えることで、変動範囲を変更することができます。

for文を使ったリストの内包表現

さらに、for文を使うと指定範囲の整数の入ったリストを簡単に作ることができます。

# 出力結果: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
newList = [i for i in range(10)]
print(newList)

# 1~10のリスト
# 出力結果: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
newList2 = [i+1 for i in range(10)]
print(newList2)

上のプログラムのようにリストの中にfor文を入れ、range関数で範囲を指定することで指定の範囲の整数が連続で入ったリストを作成することができます。

if文

if文とは

次にif文について解説します。

if文とは、ある条件が満たされるかによって処理を変えたいときに条件分岐をするために使います。

ifの後ろに条件文を記述し、条件が満たされるなら条件文はTrueを返しif文の中の処理が実行されます。

条件が満たされないとき条件文はFalseを返しif文の中の処理は実行されません。

if文は次のように書きます。

if 条件1:
   処理1
elif 条件2:
   処理2
else:
   処理3

elifとはifの条件に該当しなかった場合に、追加でチェックする条件を記述したい時に使います。

elseとはif、elifのどちらの条件にも該当しなかった場合の処理をしたいときに使います。

上の例ではまず条件1をチェックし該当していれば処理1が実行されます。

条件1に該当しておらず条件2には該当している場合には処理2が実行されます。

条件1にも条件2にも該当していなかった場合のみ処理3が実行されます。

elifとelseは必要でない場合には必ずしも書く必要はありません。

具体的なif文の例を見てみましょう。

#if文, 100より大きいかの判定
num = 98
if num > 100:
    print(num, "は100より大きい")
elif num < 100:
    print(num, "は100より小さい")
else:
    print(num, "は100です")

#出力結果: 98は100より小さい

このプログラムでは変数numが100より大きいか小さいか、または等しいかの判定をしています。今、numは98で100より小さいのでelifの処理が実行され「98は100より小さい」と出力されます。

条件文の書き方

色々な条件文の書き方は以下の通りです。

表: 条件文の書き方 演算子
演算子真となる条件
!ERROR! unexpected operator '='a == baがbと等しい
!=a != baがbと異なる
>a > baがbより大きい
>=a >= baがbより大きいか等しい
<a < baがbより小さい
<=a <= baがbより小さいか等しい
表: 条件文の書き方 複数条件を使う
演算子真となる条件
and条件a and 条件b条件aもbも真
or条件a or 条件b条件aかbが真
notnot 条件a条件aが偽

for文とif文の組み合わせ

if文の基本がわかったところでfor分やif文を使ったより複雑な処理を見てみましょう。

次のプログラムはリストから偶数だけを抽出して新しいリストを作ります。

# 出力結果:[6, 8, 4, 10, 14, 16, 86, 54]
numList1 = [3, 5, 6, 8, 4, 10, 11, 14,16, 13, 5, 86, 9, 54]
numList2 =[]
for i in numList1:
    if i % 2 == 0: # iが偶数なら実行
       numList2.append(i)
print(numList2)

numList1からfor文で順番に整数を取り出し、if文で偶数かどうかを判定します。

偶数だった場合のみ”numList2.append(i)”が実行されnumList2に追加される仕組みです。

下のプログラムはfor文とif文を組み合わせた内包表現の例です。

より範囲を指定した整数のリストが作成できることがわかります。

# 偶数だけのリストを作成
# 出力結果: [0, 2, 4, 6, 8]
newList1 = [i for i in range(10) if i % 2 == 0]
print(newList1)

# 0~5, 10~14の整数リストを作成
# [0, 1, 2, 3, 4, 5, 10, 11, 12, 13, 14]
newList2 = [i for i in range(15) if i &amp;amp;amp;amp;amp;lt;= 5 or i &amp;amp;amp;amp;amp;gt;= 10]
print(newList2)

範囲をrange関数で指定し、さらにif文で条件を追加しています。

最後に、内包表現の応用で最初の、リストから偶数だけを取り出すプログラムをより簡潔に書く方法を見てみましょう。先ほどのnumList1から偶数だけのnumList2を作成するプログラムは下のように書くことができます。

それぞれの数が偶数かどうかを内包表現で書いてリストを作成しています。

# [6, 8, 4, 10, 14, 16, 86, 54]
newList3 = [num for num in numList1 if num % 2 == 0]
print(newList3)

演習問題(for文、if文)

下のリストの要素番号とその要素を並べて出力せよ。

a = [1, 3, 5, 7, 9, 11]

#求める出力結果
0 1
1 3
2 5
3 7
4 9
5 11

下のリストから7で割り切れない数値のみ縦に出力せよ。

nums = [4, 11, 14, 18, 25, 28, 70, 97, 105] 
# 求める出力結果 
4 
11 
18 
25 
97

演習問題(内包表現)

要素数が50ですべての要素が0のリストを内包表現を用いて作成せよ。

40以上、80未満の7の倍数を要素とするリストを内包表現を用いて作成せよ。

 

関数

関数とは

関数とは何らかの入力を受け取ったら処理を行ってその結果を出力します。

メソッドという言い方をすることもあります。

関数への入力を引数、関数から出力される値のことを返り値と言います。

まず現実のようにお味噌汁を作る過程を考えてみましょう。

下の図のように材料みそ、お湯を用意し(実際には材料が少なすぎますが)味噌汁を作るマシンに材料を入れると味噌汁ができます。

これを関数に置き換えると、みそとお湯は引数(材料)で味噌汁を作るマシンが処理(調理)を行う関数、味噌汁が返り値(完成品)です。

今度はよりプログラミング的に考えてみましょう。

足し算をしたいとします。

下の図のように、変数a1(引数1)と変数a2(引数2)があります。これが足し算マシン(関数)の引数になります。足し算マシン(関数)は足し算を行ってその結果(返り値)を返します。

関数の作り方、使い方

Pythonの関数は以下のように書きます。

def 関数名(引数):
   処理を書く
   return 戻り値

関数の処理からreturnまではインデントを下げてブロックを作って書き、

新しい関数を書くことを関数を定義すると言います。

定義した関数は以下のように呼び出して使います。

上のcalcという関数は二つの数を受け取って足し算を行いその結果を返します。

関数を使うときは”calc(10, 43)”というように、関数名を書き括弧内に関数に渡す引数を書いて関数を呼び出します。

関数の例

下にいくつか関数の例を上げておきます。

先ほど作成した偶数だけを残すプログラムも関数化してみましょう。

# リストを与えると、偶数だけのリストを返す関数
def createList(numList):
   numList2 = []
   for i in numList:
      if i % 2 == 0:
         numList2.append(i)
   return numList2

# 奇数が落とされて、偶数だけが残る
# 出力結果:[6, 8, 4, 10, 14, 16, 86, 54]
numList = createList([3, 5, 6, 8, 4, 10, 11, 14, 16, 13, 5, 86, 9, 54])
print(numList)

このように、何度も繰り返し使いたい処理を関数化しておくと、その関数を任意の引数に対して呼び出すだけで使うことができます。

ライブラリ導入

ライブラリとは

ライブラリとはあらかじめ複数の関数などをセットととして用意されたもので必要に応じて使うことができます。例えば、難しい数値計算や自然言語処理、進化最適化など自分で書くのは難しい処理でもライブラリを導入することでより簡単にコーディングすることができます。

Pythonには最初から基本的なライブラリは付属していますが、

追加でライブラリを使いたい場合はライブラリのインストールを行う必要があります。

既に入っているライブラリやインストール済みのライブラリを使う場合はインポートするだけで使うことができます。

ライブラリのインストール(インストール済みの場合は不要)

コマンドプロンプトやターミナル、anaconda-promptで

pip install ライブラリ名

を実行するとライブラリをインストールすることができます。

(Python3コマンドでPython3が立ち上がる方はpipをpip3に変えて実行してください。)

下に例を書いておきます。

pip install pandas
pip3 install numpy
pip3 install matplotlib
pip install sklearn

プログラムファイルへのライブラリのインポート

各プログラムファイルで指定のライブラリを使いたい場合には

import ライブラリ名

を実行、あるいはファイル内に書くことでライブラリをインポートできます。

通常、ライブラリはファイルの一番上に書きます。

import pandas

import numpy

また、ライブラリ名の後ろにasと書いてから任意の名前を書くことで、

そのファイル内で自分で書いた名前をライブラリ名として使うことができます。

例えば下の例ではpandasをpdとして使うことができます。

import pandas as pd

ライブラリ導入の例 – Pandasでcsvファイルを扱う

ライブラリ導入の例としてPandasでcsvファイルを扱うコードを見てみましょう。pandasとは表形式のデータ処理に便利なライブラリです。

例えば、コードは以下のようになります。
(注: train.csvというcsvファイルが必要です。)

# ライブラリのインポート
import pandas as pd # pandasというライブラリをpdという名前で読み込む

df = pd.read_csv("train.csv") # データをデータフレーム型で読み込み

# データの最初の5行を表示
df.head()

このコードをjupyter notebookで実行すると、以下のようにcsvファイルの中身を表として出力することができます。

このように、ライブラリを使うとファイルの処理なども簡単に行うことができます。

 

 

(totalcount 310 回, dailycount 17回 , overallcount 1,323,213 回)

ライター:

Python

COMMENT

コメントを残す

メールアドレスが公開されることはありません。
*は必須項目です。




CAPTCHA