From a00eaaefa5d67bb1a0bb58905a63fe59456c3932 Mon Sep 17 00:00:00 2001 From: Ivan Pavlovich <ivan.pavlovic@hes-so.ch> Date: Fri, 14 Mar 2025 02:11:40 +0100 Subject: [PATCH] Calculated number of published pubmed articles for ncds with keywords --- dataSources/PubMed/data_num_locale.py | 295 +++++--- .../PubMed/doc/locale_articles_count.json | 632 ++++++++++++++++++ 2 files changed, 847 insertions(+), 80 deletions(-) create mode 100644 dataSources/PubMed/doc/locale_articles_count.json diff --git a/dataSources/PubMed/data_num_locale.py b/dataSources/PubMed/data_num_locale.py index 618b4d196..35aad2e52 100644 --- a/dataSources/PubMed/data_num_locale.py +++ b/dataSources/PubMed/data_num_locale.py @@ -8,10 +8,34 @@ sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "../../" from variables.pubmed import NCDS_MESH_TERM, KEYWORDS_MESH_TERM, KEYWORDS_MESH_SUBHEADING, KEYWORDS_MESH_SITE_PROPOSITION, KEYWORDS_MESH_PROPOSITION +CATEGORIES = [ + "KEYWORDS", + "SUBHEADINGS", + "SITE PROPOSITION", + "PROPOSITION" +] + +INTERVALS = [ + "day", + "week", + "month" +] + DATA_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "./data")) file_path = f"{DATA_DIR}/save_3_years.json" +def lower_keywords(mesh_terms): + res = [] + + for _, mesh_term in mesh_terms.items(): + if isinstance(mesh_term, list): + res.append([part.lower() for part in mesh_term]) + else: + res.append(mesh_term.lower()) + + return res + def get_date_indices(date, start_date): delta_days = (date - start_date).days day_index = delta_days @@ -37,26 +61,149 @@ def match_mesh_terms(article_mesh_terms, ncd, keyword): else: return False +def init_index(category, counts, ncd, article_date): + start_date = datetime(2022, 1, 1) + day_index, week_index, month_index = get_date_indices(article_date, start_date) + + if day_index not in counts[ncd][category]["day"]: + counts[ncd][category]["day"][day_index] = [] + + if week_index not in counts[ncd][category]["week"]: + counts[ncd][category]["week"][week_index] = [] + + if month_index not in counts[ncd][category]["month"]: + counts[ncd][category]["month"][month_index] = [] + +def add_article(article, category, counts, ncd, article_date): + start_date = datetime(2022, 1, 1) + day_index, week_index, month_index = get_date_indices(article_date, start_date) + + if article["PMID"] not in counts[ncd][category]["day"][day_index]: + counts[ncd][category]["day"][day_index].append(article["PMID"]) + + if article["PMID"] not in counts[ncd][category]["week"][week_index]: + counts[ncd][category]["week"][week_index].append(article["PMID"]) + + if article["PMID"] not in counts[ncd][category]["month"][month_index]: + counts[ncd][category]["month"][month_index].append(article["PMID"]) + + with open(file_path, "r", encoding="utf-8") as file: data = json.load(file) print(len(data)) ncds_mesh_terms = [mesh_term.lower() for ncd, mesh_term in NCDS_MESH_TERM.items()] -keywords_mesh_terms = [mesh_term.lower() for keyword, mesh_term in KEYWORDS_MESH_TERM.items()] -keywords_subheading_mesh_terms = keywords_mesh_terms + [mesh_term.lower() for mesh_term in KEYWORDS_MESH_SUBHEADING] -keywords_site_proposition_mesh_terms = keywords_subheading_mesh_terms + [mesh_term.lower() for mesh_term in KEYWORDS_MESH_SITE_PROPOSITION] -keywords_proposition_mesh_terms = keywords_site_proposition_mesh_terms + [mesh_term.lower() for mesh_term in KEYWORDS_MESH_PROPOSITION] +keywords_mesh_terms = lower_keywords(KEYWORDS_MESH_TERM) +keywords_subheading_mesh_terms = lower_keywords(KEYWORDS_MESH_SUBHEADING) +keywords_site_proposition_mesh_terms = lower_keywords(KEYWORDS_MESH_SITE_PROPOSITION) +keywords_proposition_mesh_terms = lower_keywords(KEYWORDS_MESH_PROPOSITION) counts = {} + +for ncd in ncds_mesh_terms: + counts[ncd] = { + "KEYWORDS" : { + "day": {}, + "week": {}, + "month": {} + }, + "SUBHEADINGS" : { + "day": {}, + "week": {}, + "month": {} + }, + "SITE PROPOSITION" : { + "day": {}, + "week": {}, + "month": {} + }, + "PROPOSITION" : { + "day": {}, + "week": {}, + "month": {} + }, + } + + start_date = datetime(2022, 1, 1) + end_date = datetime(2024, 12, 31) + current_date = start_date + + while(current_date < end_date): + day_index, week_index, month_index = get_date_indices(current_date, start_date) + + for category in CATEGORIES: + counts[ncd][category]["day"][day_index] = [] + counts[ncd][category]["week"][week_index] = [] + counts[ncd][category]["month"][month_index] = [] + + current_date += timedelta(days=1) + +counts["ALL"] = { + "KEYWORDS" : { + "day": {}, + "week": {}, + "month": {} + }, + "SUBHEADINGS" : { + "day": {}, + "week": {}, + "month": {} + }, + "SITE PROPOSITION" : { + "day": {}, + "week": {}, + "month": {} + }, + "PROPOSITION" : { + "day": {}, + "week": {}, + "month": {} + }, +} + start_date = datetime(2022, 1, 1) +end_date = datetime(2024, 12, 31) +current_date = start_date + +while(current_date < end_date): + day_index, week_index, month_index = get_date_indices(current_date, start_date) + + for category in CATEGORIES: + counts["ALL"][category]["day"][day_index] = [] + counts["ALL"][category]["week"][week_index] = [] + counts["ALL"][category]["month"][month_index] = [] + + current_date += timedelta(days=1) for article in data: mesh_terms = [mesh_term.lower() for mesh_term in article["MeshTerms"]] + article_date = datetime(int(article["Date"]["Year"]), int(article["Date"]["Month"]), int(article["Date"]["Day"])) if "ALL" not in counts: - counts["ALL"] = {} + counts["ALL"] = { + "KEYWORDS" : { + "day": {}, + "week": {}, + "month": {} + }, + "SUBHEADINGS" : { + "day": {}, + "week": {}, + "month": {} + }, + "SITE PROPOSITION" : { + "day": {}, + "week": {}, + "month": {} + }, + "PROPOSITION" : { + "day": {}, + "week": {}, + "month": {} + }, + } for ncd in ncds_mesh_terms: if ncd not in counts: @@ -85,104 +232,92 @@ for article in data: for keyword in keywords_mesh_terms: - if match_mesh_terms(mesh_terms, ncd, mesh_terms): + if match_mesh_terms(mesh_terms, ncd, keyword): + init_index("KEYWORDS", counts, ncd, article_date) + init_index("SUBHEADINGS", counts, ncd, article_date) + init_index("SITE PROPOSITION", counts, ncd, article_date) + init_index("PROPOSITION", counts, ncd, article_date) - article_date = datetime(int(article["Date"]["Year"]), int(article["Date"]["Month"]), int(article["Date"]["Day"])) + add_article(article, "KEYWORDS", counts, ncd, article_date) + add_article(article, "SUBHEADINGS", counts, ncd, article_date) + add_article(article, "SITE PROPOSITION", counts, ncd, article_date) + add_article(article, "PROPOSITION", counts, ncd, article_date) - day_index, week_index, month_index = get_date_indices(article_date, start_date) + init_index("KEYWORDS", counts, "ALL", article_date) + init_index("SUBHEADINGS", counts, "ALL", article_date) + init_index("SITE PROPOSITION", counts, "ALL", article_date) + init_index("PROPOSITION", counts, "ALL", article_date) - if day_index not in counts[ncd]["KEYWORDS"]["day"]: - counts[ncd]["KEYWORDS"]["day"][day_index] = [] - - if week_index not in counts[ncd]["KEYWORDS"]["week"]: - counts[ncd]["KEYWORDS"]["week"][week_index] = [] - - if month_index not in counts[ncd]["KEYWORDS"]["month"]: - counts[ncd]["KEYWORDS"]["month"][month_index] = [] - - if article["PMID"] not in counts[ncd]["KEYWORDS"]["day"][day_index]: - counts[ncd]["KEYWORDS"]["day"][day_index].append(article["PMID"]) - - if article["PMID"] not in counts[ncd]["KEYWORDS"]["week"][week_index]: - counts[ncd]["KEYWORDS"]["week"][week_index].append(article["PMID"]) - - if article["PMID"] not in counts[ncd]["KEYWORDS"]["month"][month_index]: - counts[ncd]["KEYWORDS"]["month"][month_index].append(article["PMID"]) + add_article(article, "KEYWORDS", counts, "ALL", article_date) + add_article(article, "SUBHEADINGS", counts, "ALL", article_date) + add_article(article, "SITE PROPOSITION", counts, "ALL", article_date) + add_article(article, "PROPOSITION", counts, "ALL", article_date) for keyword in keywords_subheading_mesh_terms: - if match_mesh_terms(mesh_terms, ncd, mesh_terms): - - article_date = datetime(int(article["Date"]["Year"]), int(article["Date"]["Month"]), int(article["Date"]["Day"])) - - day_index, week_index, month_index = get_date_indices(article_date, start_date) - - if day_index not in counts[ncd]["SUBHEADINGS"]["day"]: - counts[ncd]["SUBHEADINGS"]["day"][day_index] = [] - - if week_index not in counts[ncd]["SUBHEADINGS"]["week"]: - counts[ncd]["SUBHEADINGS"]["week"][week_index] = [] + if match_mesh_terms(mesh_terms, ncd, keyword): + init_index("SUBHEADINGS", counts, ncd, article_date) + init_index("SITE PROPOSITION", counts, ncd, article_date) + init_index("PROPOSITION", counts, ncd, article_date) - if month_index not in counts[ncd]["SUBHEADINGS"]["month"]: - counts[ncd]["SUBHEADINGS"]["month"][month_index] = [] + add_article(article, "SUBHEADINGS", counts, ncd, article_date) + add_article(article, "SITE PROPOSITION", counts, ncd, article_date) + add_article(article, "PROPOSITION", counts, ncd, article_date) - if article["PMID"] not in counts[ncd]["SUBHEADINGS"]["day"][day_index]: - counts[ncd]["SUBHEADINGS"]["day"][day_index].append(article["PMID"]) + init_index("SUBHEADINGS", counts, "ALL", article_date) + init_index("SITE PROPOSITION", counts, "ALL", article_date) + init_index("PROPOSITION", counts, "ALL", article_date) - if article["PMID"] not in counts[ncd]["SUBHEADINGS"]["week"][week_index]: - counts[ncd]["SUBHEADINGS"]["week"][week_index].append(article["PMID"]) - - if article["PMID"] not in counts[ncd]["SUBHEADINGS"]["month"][month_index]: - counts[ncd]["SUBHEADINGS"]["month"][month_index].append(article["PMID"]) + add_article(article, "SUBHEADINGS", counts, "ALL", article_date) + add_article(article, "SITE PROPOSITION", counts, "ALL", article_date) + add_article(article, "PROPOSITION", counts, "ALL", article_date) for keyword in keywords_site_proposition_mesh_terms: - if match_mesh_terms(mesh_terms, ncd, mesh_terms): - - article_date = datetime(int(article["Date"]["Year"]), int(article["Date"]["Month"]), int(article["Date"]["Day"])) - - day_index, week_index, month_index = get_date_indices(article_date, start_date) - - if day_index not in counts[ncd]["SITE PROPOSITION"]["day"]: - counts[ncd]["SITE PROPOSITION"]["day"][day_index] = [] + if match_mesh_terms(mesh_terms, ncd, keyword): + init_index("SITE PROPOSITION", counts, ncd, article_date) + init_index("PROPOSITION", counts, ncd, article_date) - if week_index not in counts[ncd]["SITE PROPOSITION"]["week"]: - counts[ncd]["SITE PROPOSITION"]["week"][week_index] = [] + add_article(article, "SITE PROPOSITION", counts, ncd, article_date) + add_article(article, "PROPOSITION", counts, ncd, article_date) - if month_index not in counts[ncd]["SITE PROPOSITION"]["month"]: - counts[ncd]["SITE PROPOSITION"]["month"][month_index] = [] + init_index("SITE PROPOSITION", counts, "ALL", article_date) + init_index("PROPOSITION", counts, "ALL", article_date) - if article["PMID"] not in counts[ncd]["SITE PROPOSITION"]["day"][day_index]: - counts[ncd]["SITE PROPOSITION"]["day"][day_index].append(article["PMID"]) - - if article["PMID"] not in counts[ncd]["SITE PROPOSITION"]["week"][week_index]: - counts[ncd]["SITE PROPOSITION"]["week"][week_index].append(article["PMID"]) - - if article["PMID"] not in counts[ncd]["SITE PROPOSITION"]["month"][month_index]: - counts[ncd]["SITE PROPOSITION"]["month"][month_index].append(article["PMID"]) + add_article(article, "SITE PROPOSITION", counts, "ALL", article_date) + add_article(article, "PROPOSITION", counts, "ALL", article_date) for keyword in keywords_proposition_mesh_terms: - if match_mesh_terms(mesh_terms, ncd, mesh_terms): + if match_mesh_terms(mesh_terms, ncd, keyword): + init_index("PROPOSITION", counts, ncd, article_date) - article_date = datetime(int(article["Date"]["Year"]), int(article["Date"]["Month"]), int(article["Date"]["Day"])) + add_article(article, "PROPOSITION", counts, ncd, article_date) - day_index, week_index, month_index = get_date_indices(article_date, start_date) + init_index("PROPOSITION", counts, "ALL", article_date) - if day_index not in counts[ncd]["PROPOSITION"]["day"]: - counts[ncd]["PROPOSITION"]["day"][day_index] = [] + add_article(article, "PROPOSITION", counts, "ALL", article_date) - if week_index not in counts[ncd]["PROPOSITION"]["week"]: - counts[ncd]["PROPOSITION"]["week"][week_index] = [] +for ncd in ncds_mesh_terms: + for category in CATEGORIES: + for interval in INTERVALS: + counts[ncd][category][interval] = [len(tmp) for key, tmp in counts[ncd][category][interval].items()] - if month_index not in counts[ncd]["PROPOSITION"]["month"]: - counts[ncd]["PROPOSITION"]["month"][month_index] = [] + counts[ncd][category][interval] = { + "min": min(counts[ncd][category][interval]), + "max": max(counts[ncd][category][interval]), + "mean": statistics.mean(counts[ncd][category][interval]) + } - if article["PMID"] not in counts[ncd]["PROPOSITION"]["day"][day_index]: - counts[ncd]["PROPOSITION"]["day"][day_index].append(article["PMID"]) +for category in CATEGORIES: + for interval in INTERVALS: + counts["ALL"][category][interval] = [len(tmp) for key, tmp in counts["ALL"][category][interval].items()] - if article["PMID"] not in counts[ncd]["PROPOSITION"]["week"][week_index]: - counts[ncd]["PROPOSITION"]["week"][week_index].append(article["PMID"]) + counts["ALL"][category][interval] = { + "min": min(counts["ALL"][category][interval]), + "max": max(counts["ALL"][category][interval]), + "mean": statistics.mean(counts["ALL"][category][interval]) + } - if article["PMID"] not in counts[ncd]["PROPOSITION"]["month"][month_index]: - counts[ncd]["PROPOSITION"]["month"][month_index].append(article["PMID"]) +with open(f"{DATA_DIR}/locale_articles_count.json", "w") as json_file: + json.dump(counts, json_file, indent=4) \ No newline at end of file diff --git a/dataSources/PubMed/doc/locale_articles_count.json b/dataSources/PubMed/doc/locale_articles_count.json new file mode 100644 index 000000000..cb2b3056f --- /dev/null +++ b/dataSources/PubMed/doc/locale_articles_count.json @@ -0,0 +1,632 @@ +{ + "noncommunicable diseases": { + "KEYWORDS": { + "day": { + "min": 0, + "max": 3, + "mean": 0.20639269406392693 + }, + "week": { + "min": 0, + "max": 6, + "mean": 1.4394904458598725 + }, + "month": { + "min": 2, + "max": 12, + "mean": 6.277777777777778 + } + }, + "SUBHEADINGS": { + "day": { + "min": 0, + "max": 3, + "mean": 0.20639269406392693 + }, + "week": { + "min": 0, + "max": 6, + "mean": 1.4394904458598725 + }, + "month": { + "min": 2, + "max": 12, + "mean": 6.277777777777778 + } + }, + "SITE PROPOSITION": { + "day": { + "min": 0, + "max": 3, + "mean": 0.2328767123287671 + }, + "week": { + "min": 0, + "max": 6, + "mean": 1.624203821656051 + }, + "month": { + "min": 2, + "max": 14, + "mean": 7.083333333333333 + } + }, + "PROPOSITION": { + "day": { + "min": 0, + "max": 4, + "mean": 0.34885844748858447 + }, + "week": { + "min": 0, + "max": 8, + "mean": 2.43312101910828 + }, + "month": { + "min": 4, + "max": 17, + "mean": 10.61111111111111 + } + } + }, + "diabetes mellitus": { + "KEYWORDS": { + "day": { + "min": 0, + "max": 5, + "mean": 0.7497725204731575 + }, + "week": { + "min": 1, + "max": 11, + "mean": 5.248407643312102 + }, + "month": { + "min": 3, + "max": 31, + "mean": 22.27027027027027 + } + }, + "SUBHEADINGS": { + "day": { + "min": 0, + "max": 5, + "mean": 0.7497725204731575 + }, + "week": { + "min": 1, + "max": 11, + "mean": 5.248407643312102 + }, + "month": { + "min": 3, + "max": 31, + "mean": 22.27027027027027 + } + }, + "SITE PROPOSITION": { + "day": { + "min": 0, + "max": 8, + "mean": 1.0454959053685169 + }, + "week": { + "min": 2, + "max": 15, + "mean": 7.318471337579618 + }, + "month": { + "min": 3, + "max": 44, + "mean": 31.054054054054053 + } + }, + "PROPOSITION": { + "day": { + "min": 0, + "max": 10, + "mean": 1.4249317561419472 + }, + "week": { + "min": 3, + "max": 20, + "mean": 9.97452229299363 + }, + "month": { + "min": 5, + "max": 57, + "mean": 42.32432432432432 + } + } + }, + "neoplasms": { + "KEYWORDS": { + "day": { + "min": 0, + "max": 16, + "mean": 2.692447679708826 + }, + "week": { + "min": 2, + "max": 33, + "mean": 18.727848101265824 + }, + "month": { + "min": 14, + "max": 101, + "mean": 79.97297297297297 + } + }, + "SUBHEADINGS": { + "day": { + "min": 0, + "max": 16, + "mean": 2.692447679708826 + }, + "week": { + "min": 2, + "max": 33, + "mean": 18.727848101265824 + }, + "month": { + "min": 14, + "max": 101, + "mean": 79.97297297297297 + } + }, + "SITE PROPOSITION": { + "day": { + "min": 0, + "max": 16, + "mean": 2.735213830755232 + }, + "week": { + "min": 2, + "max": 33, + "mean": 19.025316455696203 + }, + "month": { + "min": 14, + "max": 101, + "mean": 81.24324324324324 + } + }, + "PROPOSITION": { + "day": { + "min": 0, + "max": 21, + "mean": 3.5281818181818183 + }, + "week": { + "min": 2, + "max": 43, + "mean": 24.563291139240505 + }, + "month": { + "min": 17, + "max": 127, + "mean": 104.89189189189189 + } + } + }, + "respiratory tract diseases": { + "KEYWORDS": { + "day": { + "min": 0, + "max": 1, + "mean": 0.02281021897810219 + }, + "week": { + "min": 0, + "max": 2, + "mean": 0.15822784810126583 + }, + "month": { + "min": 0, + "max": 3, + "mean": 0.6756756756756757 + } + }, + "SUBHEADINGS": { + "day": { + "min": 0, + "max": 1, + "mean": 0.02281021897810219 + }, + "week": { + "min": 0, + "max": 2, + "mean": 0.15822784810126583 + }, + "month": { + "min": 0, + "max": 3, + "mean": 0.6756756756756757 + } + }, + "SITE PROPOSITION": { + "day": { + "min": 0, + "max": 1, + "mean": 0.02281021897810219 + }, + "week": { + "min": 0, + "max": 2, + "mean": 0.15822784810126583 + }, + "month": { + "min": 0, + "max": 3, + "mean": 0.6756756756756757 + } + }, + "PROPOSITION": { + "day": { + "min": 0, + "max": 1, + "mean": 0.0364963503649635 + }, + "week": { + "min": 0, + "max": 2, + "mean": 0.25316455696202533 + }, + "month": { + "min": 0, + "max": 3, + "mean": 1.0810810810810811 + } + } + }, + "cardiovascular diseases": { + "KEYWORDS": { + "day": { + "min": 0, + "max": 5, + "mean": 0.6584699453551912 + }, + "week": { + "min": 0, + "max": 13, + "mean": 4.575949367088608 + }, + "month": { + "min": 3, + "max": 40, + "mean": 19.54054054054054 + } + }, + "SUBHEADINGS": { + "day": { + "min": 0, + "max": 5, + "mean": 0.6584699453551912 + }, + "week": { + "min": 0, + "max": 13, + "mean": 4.575949367088608 + }, + "month": { + "min": 3, + "max": 40, + "mean": 19.54054054054054 + } + }, + "SITE PROPOSITION": { + "day": { + "min": 0, + "max": 5, + "mean": 0.6930783242258652 + }, + "week": { + "min": 0, + "max": 13, + "mean": 4.8164556962025316 + }, + "month": { + "min": 3, + "max": 42, + "mean": 20.56756756756757 + } + }, + "PROPOSITION": { + "day": { + "min": 0, + "max": 8, + "mean": 1.1474067333939946 + }, + "week": { + "min": 1, + "max": 24, + "mean": 7.981012658227848 + }, + "month": { + "min": 5, + "max": 58, + "mean": 34.08108108108108 + } + } + }, + "mental health": { + "KEYWORDS": { + "day": { + "min": 0, + "max": 8, + "mean": 1.1856232939035487 + }, + "week": { + "min": 1, + "max": 21, + "mean": 8.246835443037975 + }, + "month": { + "min": 4, + "max": 52, + "mean": 35.21621621621622 + } + }, + "SUBHEADINGS": { + "day": { + "min": 0, + "max": 8, + "mean": 1.1856232939035487 + }, + "week": { + "min": 1, + "max": 21, + "mean": 8.246835443037975 + }, + "month": { + "min": 4, + "max": 52, + "mean": 35.21621621621622 + } + }, + "SITE PROPOSITION": { + "day": { + "min": 0, + "max": 8, + "mean": 1.2438580527752503 + }, + "week": { + "min": 1, + "max": 22, + "mean": 8.651898734177216 + }, + "month": { + "min": 4, + "max": 55, + "mean": 36.945945945945944 + } + }, + "PROPOSITION": { + "day": { + "min": 0, + "max": 11, + "mean": 2.1618181818181816 + }, + "week": { + "min": 1, + "max": 32, + "mean": 15.050632911392405 + }, + "month": { + "min": 8, + "max": 84, + "mean": 64.27027027027027 + } + } + }, + "diabetes mellitus, type 1": { + "KEYWORDS": { + "day": { + "min": 0, + "max": 3, + "mean": 0.3072014585232452 + }, + "week": { + "min": 0, + "max": 8, + "mean": 2.132911392405063 + }, + "month": { + "min": 3, + "max": 19, + "mean": 9.108108108108109 + } + }, + "SUBHEADINGS": { + "day": { + "min": 0, + "max": 3, + "mean": 0.3072014585232452 + }, + "week": { + "min": 0, + "max": 8, + "mean": 2.132911392405063 + }, + "month": { + "min": 3, + "max": 19, + "mean": 9.108108108108109 + } + }, + "SITE PROPOSITION": { + "day": { + "min": 0, + "max": 13, + "mean": 1.5141037306642402 + }, + "week": { + "min": 3, + "max": 30, + "mean": 10.531645569620252 + }, + "month": { + "min": 5, + "max": 66, + "mean": 44.972972972972975 + } + }, + "PROPOSITION": { + "day": { + "min": 0, + "max": 13, + "mean": 1.5941765241128298 + }, + "week": { + "min": 3, + "max": 30, + "mean": 11.08860759493671 + }, + "month": { + "min": 5, + "max": 68, + "mean": 47.351351351351354 + } + } + }, + "diabetes mellitus, type 2": { + "KEYWORDS": { + "day": { + "min": 0, + "max": 7, + "mean": 0.9763421292083713 + }, + "week": { + "min": 0, + "max": 14, + "mean": 6.791139240506329 + }, + "month": { + "min": 6, + "max": 45, + "mean": 29 + } + }, + "SUBHEADINGS": { + "day": { + "min": 0, + "max": 7, + "mean": 0.9763421292083713 + }, + "week": { + "min": 0, + "max": 14, + "mean": 6.791139240506329 + }, + "month": { + "min": 6, + "max": 45, + "mean": 29 + } + }, + "SITE PROPOSITION": { + "day": { + "min": 0, + "max": 10, + "mean": 1.520909090909091 + }, + "week": { + "min": 1, + "max": 23, + "mean": 10.58860759493671 + }, + "month": { + "min": 8, + "max": 61, + "mean": 45.21621621621622 + } + }, + "PROPOSITION": { + "day": { + "min": 0, + "max": 14, + "mean": 2.099090909090909 + }, + "week": { + "min": 2, + "max": 28, + "mean": 14.613924050632912 + }, + "month": { + "min": 10, + "max": 84, + "mean": 62.4054054054054 + } + } + }, + "ALL": { + "KEYWORDS": { + "day": { + "min": 0, + "max": 39, + "mean": 6.54 + }, + "week": { + "min": 8, + "max": 69, + "mean": 45.53164556962025 + }, + "month": { + "min": 31, + "max": 262, + "mean": 194.43243243243242 + } + }, + "SUBHEADINGS": { + "day": { + "min": 0, + "max": 39, + "mean": 6.54 + }, + "week": { + "min": 8, + "max": 69, + "mean": 45.53164556962025 + }, + "month": { + "min": 31, + "max": 262, + "mean": 194.43243243243242 + } + }, + "SITE PROPOSITION": { + "day": { + "min": 0, + "max": 47, + "mean": 8.478181818181818 + }, + "week": { + "min": 8, + "max": 93, + "mean": 59.0253164556962 + }, + "month": { + "min": 34, + "max": 310, + "mean": 252.05405405405406 + } + }, + "PROPOSITION": { + "day": { + "min": 0, + "max": 67, + "mean": 11.658181818181818 + }, + "week": { + "min": 9, + "max": 124, + "mean": 81.16455696202532 + }, + "month": { + "min": 46, + "max": 431, + "mean": 346.5945945945946 + } + } + } +} \ No newline at end of file -- GitLab