Split analyze_keywords.py into multiple scripts

This commit is contained in:
henriquenakashima 2020-11-29 15:33:42 -05:00
parent 32f8c20b2e
commit 5cec2e8e24
5 changed files with 88 additions and 81 deletions

View file

@ -0,0 +1,19 @@
"""Find keyword count in each set.
"""
import keyword_stats
if __name__ == '__main__':
f = open('set_codes.txt')
codes = [line.strip() for line in f.readlines()]
output_file = open('set_keyword_frequency.csv', 'w+')
output_file.write('Set,Keywords\n')
for code in codes:
if code == 'CON':
code = 'CON_'
filename = f'scryfall/sets/{code}.json'
k_dict = keyword_stats.keyword_count(filename)
print(f'{code}: {len(k_dict)}')
output_file.write(f'{code},{len(k_dict)}\n')
output_file.close()
f.close()

11
analyze_cube_keywords.py Normal file
View file

@ -0,0 +1,11 @@
"""Print a keyword report for a cards.json file
"""
import cube_json
import keyword_stats
if __name__ == '__main__':
cube_list = cube_json.load_cube_from_csv('cube_csvs/TheElegantCube_2020-11-17_5.0.4.csv', {'core'})
cube_json_filename = cube_json.create_cube_json(cube_list, 'cubes/TheElegantCube_2020-11-17_5.0.4.json')
keyword_dict = keyword_stats.keyword_count(cube_json_filename)
keyword_stats.keyword_report(keyword_dict)

View file

@ -1,81 +0,0 @@
import json
import os
import cube_json
import word_count
def get_keywords(card):
if 'keywords' in card.keys():
return card['keywords']
elif 'card_faces' in card:
keywords = []
for face in card['card_faces']:
if 'keywords' in face:
keywords += face['keywords']
return keywords
else:
return []
def keyword_count(filename):
# json file must contain a list of Scryfall card objects
f = open(filename, encoding='utf8')
d = json.load(f)
keywords = []
for card in d:
keywords += get_keywords(card)
f.close()
k_unique = set(keywords)
k_dict = {}
for keyword in k_unique:
k_dict[keyword] = keywords.count(keyword)
return k_dict
def keyword_report(k_dict):
k_lists = []
for keyword in k_dict:
k_lists += [[k_dict[keyword], keyword]]
k_lists = sorted(k_lists, reverse=True)
for n, keyword in k_lists:
print(keyword, n)
print(f'\nTotal unique keywords: {len(k_dict)}')
if __name__ == '__main__':
### Example use: print a keyword report for a cards.json file ###
# cube_list = cube_json.load_cube_from_csv('cube_csvs/TheElegantCube_2020-11-17_5.0.4.csv', {'core'})
# cube_json_filename = cube_json.create_cube_json(cube_list, 'cubes/TheElegantCube_2020-11-17_5.0.4.json')
# keyword_dict = keyword_count(cube_json_filename)
# keyword_report(keyword_dict)
# ### Example use: count keywords in a list of cube.json files ###
# output = open('cube_keyword_frequency.csv', 'w+')
# all_cube_files = os.listdir('cubes')
# output_file = open('cube_keyword_frequency.csv', 'w+')
# output_file.write('Cube,Keywords\n')
# for filename in all_cube_files:
# if filename.endswith('json'):
# k_dict = keyword_count('cubes/' + filename)
# output_file.write(f"{filename.strip('json')},{len(k_dict)}\n")
# print(filename, len(k_dict))
# output_file.close()
# ### Example use: find keyword count in each set ###
# f = open('set_codes.txt')
# codes = [line.strip() for line in f.readlines()]
# output_file = open('set_keyword_frequency.csv', 'w+')
# output_file.write('Set,Keywords\n')
# for code in codes:
# if code == 'CON':
# code = 'CON_'
# filename = f'scryfall/sets/{code}.json'
# k_dict = keyword_count(filename)
# print(f'{code}: {len(k_dict)}')
# output_file.write(f'{code},{len(k_dict)}\n')
# output_file.close()
# f.close()
pass

View file

@ -0,0 +1,20 @@
"""Count keywords in a list of cube.json files.
"""
import json
import os
import keyword_stats
if __name__ == '__main__':
output = open('cube_keyword_frequency.csv', 'w+')
all_cube_files = os.listdir('cubes')
output_file = open('cube_keyword_frequency.csv', 'w+')
output_file.write('Cube,Keywords\n')
for filename in all_cube_files:
if filename.endswith('json'):
k_dict = keyword_stats.keyword_count('cubes/' + filename)
output_file.write(f"{filename.strip('json')},{len(k_dict)}\n")
print(filename, len(k_dict))
output_file.close()

38
keyword_stats.py Normal file
View file

@ -0,0 +1,38 @@
import json
def get_keywords(card):
if 'keywords' in card.keys():
return card['keywords']
elif 'card_faces' in card:
keywords = []
for face in card['card_faces']:
if 'keywords' in face:
keywords += face['keywords']
return keywords
else:
return []
def keyword_count(filename):
# json file must contain a list of Scryfall card objects
f = open(filename, encoding='utf8')
d = json.load(f)
keywords = []
for card in d:
keywords += get_keywords(card)
f.close()
k_unique = set(keywords)
k_dict = {}
for keyword in k_unique:
k_dict[keyword] = keywords.count(keyword)
return k_dict
def keyword_report(k_dict):
k_lists = []
for keyword in k_dict:
k_lists += [[k_dict[keyword], keyword]]
k_lists = sorted(k_lists, reverse=True)
for n, keyword in k_lists:
print(keyword, n)
print(f'\nTotal unique keywords: {len(k_dict)}')