Skip to content
Snippets Groups Projects
average_precision.py 1.41 KiB
Newer Older
William Bell's avatar
William Bell committed
import analysis_functions
import analysis_plots
import data_model

"""
A program to demonstrate average precision at a specific rank
and for all ranks.
"""

# Load the CSV data.
query_results = data_model.load_query_results()

# Find the precision.
precision_vs_rank = analysis_functions.precision(query_results[1])
rank = list(range(1, len(precision_vs_rank)+1))

# Find the average precision.
average_precision_vs_rank = analysis_functions.average_precision(query_results[1],
                                                                 precision_vs_rank)

# Plot the average precision.
analysis_plots.line_plot("average_precision.png",
William Bell's avatar
William Bell committed
                         rank,
                         average_precision_vs_rank,
                         labels={
William Bell's avatar
William Bell committed
                            "title": "Average precision vs rank for query 1",
                            "xlabel": "Rank",
                            "ylabel": "Average precision"
William Bell's avatar
William Bell committed
                         })
William Bell's avatar
William Bell committed

# The average precision at the highest rank.
print(f"Average precision, after all ranks = {average_precision_vs_rank[-1]}")


# Calculating the average precision using recall.
recall_vs_rank = analysis_functions.recall(query_results[1])
avp = 0
n = len(recall_vs_rank)
previous_recall = 0
for i in range(n):
    avp += (recall_vs_rank[i] - previous_recall) * precision_vs_rank[i]
    previous_recall = recall_vs_rank[i]
print(f"Average precision, for all ranks =   {avp}")