> 図書館情報技術論 > 3 Python を用いた貸出統計の作成

1. リスト

サンプルファイル「py301.ipynb」

# -*- coding: utf-8 -*-

bungakusho=["芥川龍之介","直木三十五","太宰治","三島由紀夫","江戸川乱歩"]
print(bungakusho)
print(bungakusho[0])
['芥川龍之介', '直木三十五', '太宰治', '三島由紀夫', '江戸川乱歩']
芥川龍之介
IndexError                                Traceback (most recent call last)
~\***\***\***/***/***.py in 
      3 bungakusho=["芥川龍之介","直木三十五","太宰治","三島由紀夫","江戸川乱歩"]
      4 print(bungakusho)
----> 5 print(bungakusho[5])

IndexError: list index out of range
['芥川龍之介', '直木三十五', '太宰治', '三島由紀夫', '江戸川乱歩']
太宰治
変数[インデックス] = 新しいデータ
bungakusho=["芥川龍之介","直木三十五","太宰治","三島由紀夫","江戸川乱歩"]
bungakusho[2]="川端康成"
print(bungakusho)
print(bungakusho[2])
['芥川龍之介', '直木三十五', '川端康成', '三島由紀夫', '江戸川乱歩']
川端康成

2. 辞書

サンプルファイル「py302.ipynb」

# -*- coding: utf-8 -*-

kenji={"shimei":"宮沢賢治","yomi":"ミヤザワ・ケンジ","seinen":1896,"botsunen":1993}
print(kenji)
print(kenji["shimei"])
{'shimei': '宮沢賢治', 'yomi': 'ミヤザワ・ケンジ', 'seinen': 1896, 'botsunen': 1993}
宮沢賢治
KeyError                                  Traceback (most recent call last)
~\***\***\***/***/***.py in 
      3 kenji={"shimei":"宮沢賢治","yomi":"ミヤザワ・ケンジ","seinen":1896,"botsunen":1993}
      4 print(kenji)
----> 5 print(kenji["aaaa"])

KeyError: 'aaaa'
変数[キー] = 新しいデータ
kenji={"shimei":"宮沢賢治","yomi":"ミヤザワ・ケンジ","seinen":1896,"botsunen":1993}
kenji["botsunen"]=1933
print(kenji)
print(kenji["botsunen"])
{'shimei': '宮沢賢治', 'yomi': 'ミヤザワ・ケンジ', 'seinen': 1896, 'botsunen': 1933}
1933

3. 条件分岐

サンプルファイル「py303.ipynb」

# -*- coding: utf-8 -*-

tokuten = 100

print("合格判定プログラム開始")
print("今回の得点",tokuten)

if tokuten >= 80:
    print("合格")
else:
    print("不合格")

print("合格判定プログラム終了")
合格判定プログラム開始
今回の得点 100
合格
合格判定プログラム終了
「if」で始まる行に、満たすべき条件が記載されている。
「if」の行の最後には、コロンを付ける。コロンまでが条件とみなされる。
ここでの条件は「tokuten >= 80」である。
これは、「数値が80以上」を意味している。
合格判定プログラム開始
今回の得点 79
不合格
合格判定プログラム終了

4. 繰り返し

for 「1回ごとの値が入る変数」 in 「対象となるリストや range()」 :

サンプルファイル「py304.ipynb」

# -*- coding: utf-8 -*-

a = [1,2,3,4]

print("リスト a による表示開始")

for i in a:
    print("変数 i の値",i)

print("リスト a による表示終了")
print("------------------------")

b = ['芥川龍之介', '直木三十五', '太宰治', '三島由紀夫', '江戸川乱歩']

print("リスト b による表示開始")

for j in b:
    print("変数 j の値",j)

print("リスト b による表示終了")
print("------------------------")

print("range()による表示開始")

for k in range(4):
    print("変数 k の値",k)

print("range()による表示終了")
リスト a による表示開始
変数 i の値 1
変数 i の値 2
変数 i の値 3
変数 i の値 4
リスト a による表示終了
------------------------
リスト b による表示開始
変数 j の値 芥川龍之介
変数 j の値 直木三十五
変数 j の値 太宰治
変数 j の値 三島由紀夫
変数 j の値 江戸川乱歩
リスト b による表示終了
------------------------
range()による表示開始
変数 k の値 0
変数 k の値 1
変数 k の値 2
変数 k の値 3
range()による表示終了

5. メソッドとスライス記法について

メソッド

データ.メソッド名(引数)
"2012/04/01,A,007".split(",")
↓
"2012/04/01"
"A"
"007"
.keys()
.sort()

スライス記法

文字列 [ 取り出し開始文字の位置 : 取り出し終了文字の位置 ]
"2012/04/01,A,007"[0:4]

サンプルファイル「py305.ipynb」

# -*- coding: utf-8 -*-

print("2012/04/01,A,007")

print("2012/04/01,A,007".split(","))

print("2012/04/01,A,007"[0:4])

print("2012/04/01,A,007"[:-1])
2012/04/01,A,007
['2012/04/01', 'A', '007']
2012
2012/04/01,A,00

6. 貸出統計の計算例

2012/04/01,C,330
2012/04/01,C,835
2012/04/01,B,319

月別の計算例

サンプルファイル「py306.ipynb」

# -*- coding: utf-8 -*-

# 月ごとの貸出冊数を集計する
mfreq = {}
f = open('bjournal.txt', encoding="utf-8")
for line in f:
    d = line[:-1].split(",")
    k = d[0][0:7]
    # 集計用辞書にキーがなければ,初期値の0を入れておく
    if k not in mfreq:
           mfreq[k] = 0
    # ひとつずつ集計
    mfreq[k] += 1
# レポート表示
ks = list(mfreq.keys())
ks.sort()
for k in ks:
    print("%s の貸し出し冊数: %d" % (k, mfreq[k]))
2012/04 の貸し出し冊数: 484
2012/05 の貸し出し冊数: 462
2012/06 の貸し出し冊数: 290
2012/07 の貸し出し冊数: 311
2012/08 の貸し出し冊数: 415
2012/09 の貸し出し冊数: 295
2012/10 の貸し出し冊数: 299
2012/11 の貸し出し冊数: 319
2012/12 の貸し出し冊数: 286
2013/01 の貸し出し冊数: 290
2013/02 の貸し出し冊数: 191
2013/03 の貸し出し冊数: 449

分類別の計算例

サンプルファイル「py307.ipynb」

# -*- coding: utf-8 -*-

# 分類ごとの貸出冊数を集計する
cfreq = {}
f = open('bjournal.txt', encoding="utf-8")
for line in f:
    d = line[:-1].split(",")
    # 分類の類目だけを取り出す
    k = d[2][:1]
    # 集計用辞書にキーがなければ,初期値の0を入れておく
    if k not in cfreq:
           cfreq[k] = 0
    # ひとつずつ集計
    cfreq[k] += 1
# レポート表示
ks = list(cfreq.keys())
ks.sort()
for k in ks:
    print("分類 %s の貸し出し冊数: %d" % (k, cfreq[k]))
分類 0 の貸し出し冊数: 195
分類 1 の貸し出し冊数: 295
分類 2 の貸し出し冊数: 568
分類 3 の貸し出し冊数: 777
分類 4 の貸し出し冊数: 187
分類 5 の貸し出し冊数: 252
分類 6 の貸し出し冊数: 120
分類 7 の貸し出し冊数: 186
分類 8 の貸し出し冊数: 312
分類 9 の貸し出し冊数: 546
分類 A の貸し出し冊数: 106
分類 S の貸し出し冊数: 315
分類 X の貸し出し冊数: 232

クイズ

195 は、分類 0 の貸し出し冊数です。
295 は、分類 1 の貸し出し冊数です。
568 は、分類 2 の貸し出し冊数です。
777 は、分類 3 の貸し出し冊数です。
187 は、分類 4 の貸し出し冊数です。
252 は、分類 5 の貸し出し冊数です。
120 は、分類 6 の貸し出し冊数です。
186 は、分類 7 の貸し出し冊数です。
312 は、分類 8 の貸し出し冊数です。
546 は、分類 9 の貸し出し冊数です。
106 は、分類 A の貸し出し冊数です。
315 は、分類 S の貸し出し冊数です。
232 は、分類 X の貸し出し冊数です。

今回のサンプルファイルについて