enhance metrics

This commit is contained in:
MuslemRahimi 2024-10-20 23:28:53 +02:00
parent cea17acfd5
commit 78984cb11e

View File

@ -149,7 +149,7 @@ def compute_q4_results(dataset):
def generate_revenue_dataset(dataset, custom_order): def generate_revenue_dataset(dataset):
name_replacements = { name_replacements = {
"datacenter": "Data Center", "datacenter": "Data Center",
"professionalvisualization": "Visualization", "professionalvisualization": "Visualization",
@ -166,55 +166,57 @@ def generate_revenue_dataset(dataset, custom_order):
"collectibles": "Collectibles", "collectibles": "Collectibles",
} }
dataset = [revenue for revenue in dataset if revenue['name'] not in ['Compute', 'Networking']] # Filter out unwanted categories
excluded_names = {'compute', 'networking', 'cloudserviceagreements', 'digital', 'allother', 'preownedvideogameproducts'}
dataset = [revenue for revenue in dataset if revenue['name'].lower() not in excluded_names]
# Process and clean the dataset
for item in dataset: for item in dataset:
#item['date'] = closest_quarter_end(item['date'])
name = item.get('name').lower() name = item.get('name').lower()
value = int(float(item.get('value'))) value = int(float(item.get('value')))
if name in name_replacements: if name in name_replacements:
item['name'] = name_replacements[name] item['name'] = name_replacements[name]
item['value'] = int(value) item['value'] = value
# Group by name and calculate total value
dataset = sorted( name_totals = defaultdict(int)
dataset, for item in dataset:
key=lambda item: (datetime.strptime(item['date'], '%Y-%m-%d'), custom_order.get(item['name'], 4)), name_totals[item['name']] += item['value']
reverse = True
) # Sort names by total value and get top 5, ensuring excluded names are not considered
top_names = sorted(
#dataset = compute_q4_results(dataset) [(name, total) for name, total in name_totals.items() if name.lower() not in excluded_names],
unique_names = sorted( key=lambda x: x[1],
list(set(item['name'] for item in dataset if item['name'] not in {'CloudServiceAgreements','Digital','AllOther','PreOwnedVideoGameProducts'})), reverse=True
key=lambda item: custom_order.get(item, 4), # Use 4 as default for items not in custom_order )[:5]
reverse=True) top_names = [name for name, _ in top_names]
result = {} # Filter dataset to include only top 5 names
dataset = [item for item in dataset if item['name'] in top_names]
# Iterate through the original data
# Sort the dataset
dataset.sort(key=lambda item: (datetime.strptime(item['date'], '%Y-%m-%d'), item['value']), reverse=True)
# Process the data into the required format
result = {}
for item in dataset: for item in dataset:
# Get the date and value
date = item['date'] date = item['date']
value = item['value'] value = item['value']
# Initialize the dictionary for the date if not already done
if date not in result: if date not in result:
result[date] = {'date': date, 'value': []} result[date] = {'date': date, 'value': []}
# Append the value to the list
result[date]['value'].append(value) result[date]['value'].append(value)
# Convert the result dictionary to a list # Convert the result dictionary to a list
res_list = list(result.values()) res_list = list(result.values())
# Print the final result # Add value growth (assuming add_value_growth function exists)
res_list = add_value_growth(res_list) res_list = add_value_growth(res_list)
final_result = {'names': unique_names, 'history': res_list} final_result = {'names': top_names, 'history': res_list}
return final_result return final_result
def generate_geography_dataset(dataset): def generate_geography_dataset(dataset):
country_replacements = { country_replacements = {
@ -301,7 +303,7 @@ def generate_geography_dataset(dataset):
return final_result return final_result
def run(symbol, custom_order): def run(symbol):
revenue_sources = [] revenue_sources = []
geography_sources = [] geography_sources = []
@ -346,7 +348,7 @@ def run(symbol, custom_order):
except Exception as e: except Exception as e:
print(e) print(e)
revenue_dataset = generate_revenue_dataset(revenue_sources, custom_order) revenue_dataset = generate_revenue_dataset(revenue_sources)
geographic_dataset = generate_geography_dataset(geography_sources) geographic_dataset = generate_geography_dataset(geography_sources)
final_dataset = {'revenue': revenue_dataset, 'geographic': geographic_dataset} final_dataset = {'revenue': revenue_dataset, 'geographic': geographic_dataset}
with open(f"json/business-metrics/{symbol}.json", "w") as file: with open(f"json/business-metrics/{symbol}.json", "w") as file:
@ -363,26 +365,5 @@ if __name__ == "__main__":
''' '''
for symbol in ['NVDA','AAPL','GME']: for symbol in ['NVDA','AAPL','GME']:
if symbol == 'NVDA': run(symbol)
custom_order = {
'Data Center': 4,
'Gaming': 3,
'Visualization': 2,
'Automotive': 1,
'OEM & Other': 0
}
elif symbol == 'AAPL':
custom_order = {
'Iphone': 4,
'Mac': 3,
'IPad': 2,
'Wearables': 1,
}
elif symbol == 'GME':
custom_order = {
'HardwareAndAccessories': 4,
'Software': 3,
'Collectibles': 2,
}
run(symbol, custom_order)