###前提・実現したいこと
学校のプロジェクトで、生徒の専攻一覧が書いてるテキストファイルから出現回数をカウントし、簡易的な表にして返すというコードを書いています。
テキストファイル(majors_cis210f17.txt)の内容は以下の通りです。
CIS CAS
EC CAS
PS CAS
GSS CAS
PBA BUS
SDSC CAS
CIS CAS
CIS CAS
MATH CAS
CIS CAS
CIS CAS
PSY CAS
CIS CAS
GSS CAS
PDS CAS
CIS CAS
CIS CAS
PS CAS
CIS CAS
CIS CAS
PHYS CAS
CIS CAS
UNDL N/A
ATCH AAA
CIS CAS
PHYS CAS
UNDL N/A
CIS CAS
CIS CAS
EC CAS
PBA BUS
EC CAS
CIS CAS
PEN CAS
CIS CAS
MATH CAS
CEP N/A
CIS CAS
CIS CAS
BI CAS
CIS CAS
MACS CAS
GEOG CAS
MATH CAS
UNDL N/A
CIS CAS
PEN CAS
UNDL N/A
CIS CAS
UNDL N/A
CIS CAS
MUS MUS
UNDL N/A
MACS CAS
CIS CAS
CIS CAS
CH CAS
CIS CAS
CIS CAS
CIS CAS
CH CAS
CIS CAS
CIS CAS
CIS CAS
CIS CAS
UNDL N/A
GEOG CAS
CIS CAS
CIS CAS
CIS CAS
CIS CAS
MATH CAS
MATH CAS
PEN CAS
PBA BUS
ATCH AAA
CIS CAS
CIS CAS
PHYS CAS
MACS CAS
UNDL N/A
CIS CAS
CIS CAS
UNDL N/A
MATH CAS
CIS CAS
CIS CAS
UNDL N/A
PBA BUS
CIS CAS
MACS CAS
CIS CAS
J JOURN
CIS CAS
BI CAS
MATH CAS
UNDL N/A
EC CAS
CIS CAS
BI CAS
EC CAS
MATH CAS
CIS CAS
MATH CAS
MATH CAS
CIS CAS
CIS CAS
UNDL N/A
MATH CAS
CIS CAS
MUS MUS
PBA BUS
PS CAS
CIS CAS
CIS CAS
CIS CAS
UNDL N/A
CIS CAS
PBA BUS
HPHY CAS
UNDL N/A
ACTG BUS
CEP N/A
CIS CAS
CIS CAS
CIS CAS
CIS CAS
PHYS CAS
CIS CAS
CIS CAS
MATH CAS
MACS CAS
UNDL N/A
CIS CAS
CIS CAS
CIS CAS
UNDL N/A
CIS CAS
ERTH CAS
CIS CAS
CIS CAS
CIS CAS
CIS CAS
MATH CAS
CIS CAS
PBA BUS
UNDL N/A
UNDL N/A
CIS CAS
PHYS CAS
BI CAS
CIS CAS
UNDL N/A
CH CAS
CIS CAS
EC CAS
CIS CAS
MATH CAS
UNDL CAS
CIS CAS
GS CAS
UNDL N/A
UNDL N/A
UNDL N/A
MATH CAS
PSY CAS
UNDL N/A
CIS CAS
CIS CAS
UNDL N/A
CIS CAS
CIS CAS
UNDL N/A
CIS CAS
majors_readfでデータの読み込みをし、最初の部分のみをリストにして返します。
majors_analysisで他のファイルからのdefを使いリストのなかでどの専攻が一番多かったを返します。
majors_reportでは一番多かった専攻の結果を表示するのと、簡易的な表(専攻とその出現回数)を表示します。
###発生している問題・エラーメッセージ
majors_reportの結果にデータにない専攻が表示されてしまいます。
Most represented major(s) ['CIS'] ITEM : FREQUENCY {'ACTG': 78, 'ATCH': 6, 'BI': 3, 'CEP': 2, 'CH': 7, 'CIS': 1, 'EC': 15, 'ERTH': 2, 'GEOG': 1, 'GS': 5, 'GSS': 26, 'HPHY': 2, 'J': 3, 'MACS': 2, 'MATH': 4, 'MUS': 5, 'PBA': 2, 'PDS': 2, 'PEN': 3, 'PHYS': 1, 'PS': 1, 'PSY': 1, 'SDSC': 1, 'UNDL': 1} None
###該当のソースコード
import pprint import os from p62_data_analysis import mode,genFrequencyTable,frequencyTable def majors_readf(fname): with open(fname,'r') as data: major_list = [major.split()[0] for major in data] return major_list def majors_analysis(majorsli): frequent_value = mode(majorsli) return frequent_value def majors_report(majors_mode, majorsli): most_represented = majors_analysis(majorsli) print('Most represented major(s)',most_represented) table = frequencyTable(majorsli) print(table) return None def main(): fname = 'majors_cis210f17.txt' majorsli = majors_readf(fname) majors_mode = majors_analysis(majorsli) return majors_mode
他ファイルからのdefは以下になります。
def mode(alist): countdict = {} for item in alist: if item in countdict: countdict[item] = countdict[item] + 1 else: countdict[item] = 1 countlist = countdict.values() maxcount = max(countlist) modelist = [] for item in countdict: if countdict[item] == maxcount: modelist.append(item) return modelist def genFrequencyTable(alist): countdict = {} for item in alist: if item in countdict: countdict[item] = countdict[item] + 1 else: countdict[item] = 1 itemlist = list(countdict.keys()) itemlist.sort() dictionary = dict(zip(itemlist,countdict.values())) return dictionary def frequencyTable(alist): print("ITEM",":","FREQUENCY") pprint.pprint(genFrequencyTable(alist), width = 1)
###補足情報(言語/FW/ツール等のバージョンなど)
main()は最後に書くつもりなので、最終的なものではありません。ご指摘よろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー