Я написал следующий модуль, он работает. Но я верю, что это можно улучшить.
Сначала я импортирую файл JSON в labelled_data и dictionary_revised. Затем я go вычисляю и вычисляю оценку сходства слов и сохраняю этот процент в labelled_data ['SimilarityScore']. Затем я использую модуль ниже для дальнейшего сужения labelled_data в меньший набор данных, который затем добавляю к dictionary_revised и сохраняю.
Однако, когда я смотрю на следующий модуль, он просто не выглядит лучшим использование данных. Любые предложения по улучшению?
Кроме того, лучше использовать «лямбду» или использовать метод «для индекса, ...»? Для меня лямбда-путь означает, что я перебираю фрейм данных несколько раз, чтобы вычислить разные проценты.
Спасибо за помощь.
#95%
series95Obj = s1.apply(lambda x: True if x['SimilarityScore'] >= 0.95 else False, axis=1)
numOf95Rows = len(series95Obj[series95Obj == True].index)
#85%
series85Obj = s1.apply(lambda x: True if (x['SimilarityScore'] >= 0.85 and x['SimilarityScore'] < 0.95) else False, axis=1)
numOf85Rows = len(series85Obj[series85Obj == True].index)
#75%
series75Obj = s1.apply(lambda x: True if (x['SimilarityScore'] >= 0.75 and x['SimilarityScore'] < 0.85) else False, axis=1)
numOf75Rows = len(series75Obj[series75Obj == True].index)
#below 75%
numOfLess75Rows = intTotalEvaluated - (numOf95Rows + numOf85Rows + numOf75Rows)
Количество по строкам:
for index, row in labelled_data.iterrows():
if 0.95 <= row['SimilarityScore'] < 1.00:
numOf95Rows += 1
elif 0.85 <= row['SimilarityScore'] < 0.95:
numOf85Rows += 1
elif 0.75 <= row['SimilarityScore'] < 0.85:
numOf75Rows += 1
elif row['SimilarityScore'] < 0.75:
numOfLess75Rows += 1
else:
pass
Полный модуль:
#Export source labelled data and export as JSON
def update_dictionary(labelled_data, dictionary_revised, evaluationScore = 0.75, updateDictionaryScore = 0.75):
now = datetime.datetime.now()
currentDate = now.strftime('%m-%d-%Y')
dFile = 'Dictionary_' + currentDate + '.json'
aFile = 'Analysis_Output_' + currentDate + '.xlsx'
#set min similarity score for output
score = labelled_data['SimilarityScore'] > evaluationScore
#dataframe used for calculating overall percentages
s1 = labelled_data[score]
#dataframe used for final dictionary update
scoreFinal = s1['SimilarityScore'] >= updateDictionaryScore
s2 = s1[scoreFinal]
#total evaluated
intTotalEvaluated = labelled_data.shape[0]
#95%
series95Obj = s1.apply(lambda x: True if x['SimilarityScore'] >= 0.95 else False, axis=1)
numOf95Rows = len(series95Obj[series95Obj == True].index)
#85%
series85Obj = s1.apply(lambda x: True if (x['SimilarityScore'] >= 0.85 and x['SimilarityScore'] < 0.95) else False, axis=1)
numOf85Rows = len(series85Obj[series85Obj == True].index)
#75%
series75Obj = s1.apply(lambda x: True if (x['SimilarityScore'] >= 0.75 and x['SimilarityScore'] < 0.85) else False, axis=1)
numOf75Rows = len(series75Obj[series75Obj == True].index)
#below 75%
numOfLess75Rows = intTotalEvaluated - (numOf95Rows + numOf85Rows + numOf75Rows)
#drop columns
del s2['QueryText']
del s2['DateAdded']
#rename and rearrange columns
s2.rename(columns={'SimilarText': 'QueryText'}, inplace=True)
s2.rename(columns={'Subjectmatter': 'Category'}, inplace=True)
s3 = s2.reindex(columns=['QueryText', 'Category','SimilarityScore'])
s3['DateAdded'] = currentDate
#calculate the number of net new rows being added to the dictionary
intNetNewAdded = s3.shape[0]
#append results
results = dictionary_revised.append(s3, ignore_index=True)
#save to JSON file
results.to_json(dFile, orient='records')
return 1,currentDate, dFile, aFile, intTotalEvaluated, numOf95Rows, numOf85Rows, numOf75Rows, numOfLess75Rows, intNetNewAdded
Вот небольшой пример исходного словаря:
[
{
"QueryText": "store",
"Subjectmatter": "Shopping"
},
{
"QueryText": "travel",
"Subjectmatter": "Travel & Vacation"
},
{
"QueryText": "paycheck",
"Subjectmatter": "HR"
},
{
"QueryText": "holidays",
"Subjectmatter": "Travel & Vacation"
},
{
"QueryText": "benefits",
"Subjectmatter": "HR & Benefits"
},
{
"QueryText": "library",
"Subjectmatter": "Information"
}
{
"QueryText": "store",
"Subjectmatter": "Shopping"
},
{
"QueryText": "expense",
"Subjectmatter": "Finance"
},
{
"QueryText": "jobs",
"Subjectmatter": "Career & Jobs"
}
]