開発環境
- macOS Sierra - Apple (OS)
- Emacs (Text Editor)
- Python 3.6 (プログラミング言語)
行列プログラマー(Philip N. Klein (著)、 松田 晃一 (翻訳)、 弓林 司 (翻訳)、 脇本 佑紀 (翻訳)、 中田 洋 (翻訳)、 齋藤 大吾 (翻訳)、オライリージャパン)の2章(ベクトル)、2.12(ラボ: ドット積を用いた投票記録の比較)、2.12.4(ポリシーの比較)、課題 2.12.2、2.12.3、2.12.4、2.12.5 を取り組んでみる。
課題 2.12.2、2.12.3、2.12.4、2.12.5
コード(Emacs)
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import random def create_voting_dict(strlist): return {s.split()[0]: [int(n) for n in s.split()[3:]] for s in strlist} def policy_compare(sen_a, sen_b, voting_dict): l2 = voting_dict[sen_b] return sum([x * y for x, y in zip(voting_dict[sen_a], voting_dict[sen_b])]) def most_similar(sen, voting_dict): l = voting_dict[sen] names = list(voting_dict.keys()) names.remove(sen) result = names[0] a = policy_compare(sen, result, voting_dict) for name in names[1:]: t = policy_compare(sen, name, voting_dict) if t > a: a = t result = name return result def least_similar(sen, voting_dict): l = voting_dict[sen] names = list(voting_dict.keys()) names.remove(sen) result = names[0] a = policy_compare(sen, result, voting_dict) for name in names[1:]: t = policy_compare(sen, name, voting_dict) if t < a: a = t result = name return result filename = 'voting_record_dump109.txt' with open(filename) as f: mylist = list(f) if __name__ == '__main__': print('2.12.2') voting_dict = create_voting_dict(mylist) names = list(voting_dict.keys()) for _ in range(10): sen_a = random.choice(names) sen_b = random.choice(names) print('{0}, {1}: {2}'.format(sen_a, sen_b, policy_compare(sen_a, sen_b, voting_dict))) print('2.12.3') sen = random.choice(names) name = most_similar(sen, voting_dict) for n in [sen, name]: print('{0:10}: {1}'.format(n, voting_dict[n])) print('2.12.4') name = least_similar(sen, voting_dict) for n in [sen, name]: print('{0:10}: {1}'.format(n, voting_dict[n])) print('2.12.5') print(most_similar('Lincoln', voting_dict)) print(least_similar('Santorum', voting_dict))
入出力結果(Terminal, IPython)
$ ./sample12_2.py 2.12.2 Schumer, Stevens: 24 Chafee, Hutchison: 25 Baucus, Lincoln: 34 Obama, Specter: 29 Dodd, Lincoln: 33 Ensign, Salazar: 29 Pryor, Obama: 26 Jeffords, Dorgan: 25 Isakson, Kyl: 40 Thomas, Dodd: 17 2.12.3 Crapo : [1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, -1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] Burns : [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 2.12.4 Crapo : [1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, -1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] Feingold : [-1, -1, 1, -1, 1, -1, -1, -1, 1, 1, -1, 1, -1, 1, -1, 1, 1, 1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, -1, 1, 1, -1] 2.12.5 Carper Feingold $
0 コメント:
コメントを投稿