264 lines
22 KiB
Python
264 lines
22 KiB
Python
from datetime import datetime
|
|
from collections import defaultdict
|
|
|
|
|
|
def add_value_growth(data):
|
|
"""
|
|
Adds a new key 'valueGrowth' to each entry in the data list.
|
|
|
|
Parameters:
|
|
- data (list): A list of dictionaries containing date and value lists.
|
|
|
|
Returns:
|
|
- list: A new list with the 'valueGrowth' key added to each dictionary.
|
|
"""
|
|
# Initialize a new list for the output data
|
|
updated_data = []
|
|
|
|
# Loop through the data from the latest to the oldest
|
|
for i in range(len(data)):
|
|
try:
|
|
current_entry = data[i].copy() # Create a copy of the current entry
|
|
current_values = current_entry['value']
|
|
|
|
# Initialize the growth percentages list
|
|
if i < len(data) - 1: # Only compute growth if there is a next entry
|
|
next_values = data[i + 1]['value']
|
|
growth_percentages = []
|
|
|
|
for j in range(len(current_values)):
|
|
# Convert values to integers if they are strings
|
|
next_value = int(next_values[j]) if isinstance(next_values[j], (int, str)) else 0
|
|
current_value = int(current_values[j]) if isinstance(current_values[j], (int, str)) else 0
|
|
|
|
# Calculate growth percentage if next_value is not zero
|
|
if next_value != 0:
|
|
growth = round(((current_value - next_value) / next_value) * 100,2)
|
|
else:
|
|
growth = None # Cannot calculate growth if next value is zero
|
|
|
|
growth_percentages.append(growth)
|
|
|
|
current_entry['valueGrowth'] = growth_percentages # Add the growth percentages
|
|
else:
|
|
current_entry['valueGrowth'] = [None] * len(current_values) # No growth for the last entry
|
|
|
|
updated_data.append(current_entry) # Append the updated entry to the output list
|
|
except:
|
|
pass
|
|
|
|
return updated_data
|
|
|
|
def sort_by_latest_date_and_highest_value(data):
|
|
# Define a key function to convert the date string to a datetime object
|
|
# and use the negative of the integer value for descending order
|
|
def sort_key(item):
|
|
date = datetime.strptime(item['date'], '%Y-%m-%d')
|
|
value = -int(item['value']) # Negative for descending order
|
|
return (date, value)
|
|
|
|
# Sort the list
|
|
sorted_data = sorted(data, key=sort_key, reverse=True)
|
|
|
|
return sorted_data
|
|
|
|
def aggregate_other_values(data):
|
|
aggregated = defaultdict(int)
|
|
result = []
|
|
|
|
# First pass: aggregate 'Other' values and keep non-'Other' items
|
|
for item in data:
|
|
date = item['date']
|
|
value = int(item['value'])
|
|
if item['name'] == 'Other':
|
|
aggregated[date] += value
|
|
else:
|
|
result.append(item)
|
|
|
|
# Second pass: add aggregated 'Other' values
|
|
for date, value in aggregated.items():
|
|
result.append({'name': 'Other', 'value': int(value), 'date': date})
|
|
|
|
return sorted(result, key=lambda x: (x['date'], x['name']))
|
|
|
|
# Define quarter-end dates for a given year
|
|
def closest_quarter_end(date_str):
|
|
date = datetime.strptime(date_str, "%Y-%m-%d")
|
|
year = date.year
|
|
|
|
# Define quarter end dates for the current year
|
|
q1 = datetime(year, 3, 31)
|
|
q2 = datetime(year, 6, 30)
|
|
q3 = datetime(year, 9, 30)
|
|
q4 = datetime(year, 12, 31)
|
|
|
|
# If the date is in January, return the last day of Q4 of the previous year
|
|
if date.month == 1:
|
|
closest = datetime(year - 1, 12, 31) # Last quarter of the previous year
|
|
else:
|
|
# Adjust to next year's Q4 if the date is in the last quarter of the current year
|
|
if date >= q4:
|
|
closest = q4.replace(year=year + 1) # Next year's last quarter
|
|
else:
|
|
# Find the closest quarter date
|
|
closest = min([q1, q2, q3, q4], key=lambda d: abs(d - date))
|
|
|
|
# Return the closest quarter date in 'YYYY-MM-DD' format
|
|
return closest.strftime("%Y-%m-%d")
|
|
|
|
|
|
def compute_q4_results(dataset):
|
|
# Group data by year and name
|
|
yearly_data = defaultdict(lambda: defaultdict(dict))
|
|
for item in dataset:
|
|
date = datetime.strptime(item['date'], '%Y-%m-%d')
|
|
year = date.year
|
|
quarter = (date.month - 1) // 3 + 1
|
|
yearly_data[year][item['name']][quarter] = item['value']
|
|
|
|
# Calculate Q4 results and update dataset
|
|
for year in sorted(yearly_data.keys(), reverse=True):
|
|
for name, quarters in yearly_data[year].items():
|
|
if 4 in quarters: # This is the year-end total
|
|
total = quarters[4]
|
|
q1 = quarters.get(1, 0)
|
|
q2 = quarters.get(2, 0)
|
|
q3 = quarters.get(3, 0)
|
|
q4_value = total - (q1 + q2 + q3)
|
|
|
|
# Update the original dataset
|
|
for item in dataset:
|
|
if item['name'] == name and item['date'] == f'{year}-12-31':
|
|
item['value'] = q4_value
|
|
break
|
|
|
|
return dataset
|
|
|
|
revenue_sources = [{'name': 'DataCenter', 'value': '26272000000', 'date': '2024-07-28'}, {'name': 'Compute', 'value': '22604000000', 'date': '2024-07-28'}, {'name': 'Networking', 'value': '3668000000', 'date': '2024-07-28'}, {'name': 'Gaming', 'value': '2880000000', 'date': '2024-07-28'}, {'name': 'ProfessionalVisualization', 'value': '454000000', 'date': '2024-07-28'}, {'name': 'Automotive', 'value': '346000000', 'date': '2024-07-28'}, {'name': 'OEMAndOther', 'value': '88000000', 'date': '2024-07-28'}, {'name': 'DataCenter', 'value': '22563000000', 'date': '2024-04-28'}, {'name': 'Compute', 'value': '19392000000', 'date': '2024-04-28'}, {'name': 'Networking', 'value': '3171000000', 'date': '2024-04-28'}, {'name': 'Gaming', 'value': '2647000000', 'date': '2024-04-28'}, {'name': 'ProfessionalVisualization', 'value': '427000000', 'date': '2024-04-28'}, {'name': 'Automotive', 'value': '329000000', 'date': '2024-04-28'}, {'name': 'OEMAndOther', 'value': '78000000', 'date': '2024-04-28'}, {'name': 'DataCenter', 'value': '47525000000', 'date': '2024-01-28'}, {'name': 'Gaming', 'value': '10447000000', 'date': '2024-01-28'}, {'name': 'ProfessionalVisualization', 'value': '1553000000', 'date': '2024-01-28'}, {'name': 'Automotive', 'value': '1091000000', 'date': '2024-01-28'}, {'name': 'OEMAndOther', 'value': '306000000', 'date': '2024-01-28'}, {'name': 'DataCenter', 'value': '14514000000', 'date': '2023-10-29'}, {'name': 'Gaming', 'value': '2856000000', 'date': '2023-10-29'}, {'name': 'ProfessionalVisualization', 'value': '416000000', 'date': '2023-10-29'}, {'name': 'Automotive', 'value': '261000000', 'date': '2023-10-29'}, {'name': 'OEMAndOther', 'value': '73000000', 'date': '2023-10-29'}, {'name': 'DataCenter', 'value': '10323000000', 'date': '2023-07-30'}, {'name': 'Gaming', 'value': '2486000000', 'date': '2023-07-30'}, {'name': 'ProfessionalVisualization', 'value': '379000000', 'date': '2023-07-30'}, {'name': 'Automotive', 'value': '253000000', 'date': '2023-07-30'}, {'name': 'OEMAndOther', 'value': '66000000', 'date': '2023-07-30'}, {'name': 'CloudServiceAgreements', 'value': '2430000000', 'date': '2023-04-30'}, {'name': 'DataCenter', 'value': '4284000000', 'date': '2023-04-30'}, {'name': 'Gaming', 'value': '2240000000', 'date': '2023-04-30'}, {'name': 'ProfessionalVisualization', 'value': '295000000', 'date': '2023-04-30'}, {'name': 'Automotive', 'value': '296000000', 'date': '2023-04-30'}, {'name': 'OEMAndOther', 'value': '77000000', 'date': '2023-04-30'}, {'name': 'DataCenter', 'value': '15005000000', 'date': '2023-01-29'}, {'name': 'Gaming', 'value': '9067000000', 'date': '2023-01-29'}, {'name': 'ProfessionalVisualization', 'value': '1544000000', 'date': '2023-01-29'}, {'name': 'Automotive', 'value': '903000000', 'date': '2023-01-29'}, {'name': 'OEMAndOther', 'value': '455000000', 'date': '2023-01-29'}, {'name': 'DataCenter', 'value': '3833000000', 'date': '2022-10-30'}, {'name': 'Gaming', 'value': '1574000000', 'date': '2022-10-30'}, {'name': 'ProfessionalVisualization', 'value': '200000000', 'date': '2022-10-30'}, {'name': 'Automotive', 'value': '251000000', 'date': '2022-10-30'}, {'name': 'OEMAndOther', 'value': '73000000', 'date': '2022-10-30'}, {'name': 'Gaming', 'value': '2042000000', 'date': '2022-07-31'}, {'name': 'DataCenter', 'value': '3806000000', 'date': '2022-07-31'}, {'name': 'ProfessionalVisualization', 'value': '496000000', 'date': '2022-07-31'}, {'name': 'Automotive', 'value': '220000000', 'date': '2022-07-31'}, {'name': 'OEMAndOther', 'value': '140000000', 'date': '2022-07-31'}, {'name': 'Gaming', 'value': '3620000000', 'date': '2022-05-01'}, {'name': 'DataCenter', 'value': '3750000000', 'date': '2022-05-01'}, {'name': 'ProfessionalVisualization', 'value': '622000000', 'date': '2022-05-01'}, {'name': 'Automotive', 'value': '138000000', 'date': '2022-05-01'}, {'name': 'OEMAndOther', 'value': '158000000', 'date': '2022-05-01'}, {'name': 'Gaming', 'value': '12462000000', 'date': '2022-01-30'}, {'name': 'DataCenter', 'value': '10613000000', 'date': '2022-01-30'}, {'name': 'ProfessionalVisualization', 'value': '2111000000', 'date': '2022-01-30'}, {'name': 'Automotive', 'value': '566000000', 'date': '2022-01-30'}, {'name': 'OEMAndOther', 'value': '1162000000', 'date': '2022-01-30'}, {'name': 'Gaming', 'value': '3221000000', 'date': '2021-10-31'}, {'name': 'DataCenter', 'value': '2936000000', 'date': '2021-10-31'}, {'name': 'ProfessionalVisualization', 'value': '577000000', 'date': '2021-10-31'}, {'name': 'Automotive', 'value': '135000000', 'date': '2021-10-31'}, {'name': 'OEMAndOther', 'value': '234000000', 'date': '2021-10-31'}, {'name': 'Gaming', 'value': '3061000000', 'date': '2021-08-01'}, {'name': 'DataCenter', 'value': '2366000000', 'date': '2021-08-01'}, {'name': 'ProfessionalVisualization', 'value': '519000000', 'date': '2021-08-01'}, {'name': 'Automotive', 'value': '152000000', 'date': '2021-08-01'}, {'name': 'OEMAndOther', 'value': '409000000', 'date': '2021-08-01'}, {'name': 'Gaming', 'value': '2760000000', 'date': '2021-05-02'}, {'name': 'DataCenter', 'value': '2048000000', 'date': '2021-05-02'}, {'name': 'ProfessionalVisualization', 'value': '372000000', 'date': '2021-05-02'}, {'name': 'Automotive', 'value': '154000000', 'date': '2021-05-02'}, {'name': 'OEMAndOther', 'value': '327000000', 'date': '2021-05-02'}, {'name': 'Gaming', 'value': '7759000000', 'date': '2021-01-31'}, {'name': 'ProfessionalVisualization', 'value': '1053000000', 'date': '2021-01-31'}, {'name': 'DataCenter', 'value': '6696000000', 'date': '2021-01-31'}, {'name': 'Automotive', 'value': '536000000', 'date': '2021-01-31'}, {'name': 'OEMAndOther', 'value': '631000000', 'date': '2021-01-31'}, {'name': 'Gaming', 'value': '2271000000', 'date': '2020-10-25'}, {'name': 'ProfessionalVisualization', 'value': '236000000', 'date': '2020-10-25'}, {'name': 'DataCenter', 'value': '1900000000', 'date': '2020-10-25'}, {'name': 'Automotive', 'value': '125000000', 'date': '2020-10-25'}, {'name': 'OEMAndOther', 'value': '194000000', 'date': '2020-10-25'}, {'name': 'Gaming', 'value': '1654000000', 'date': '2020-07-26'}, {'name': 'ProfessionalVisualization', 'value': '203000000', 'date': '2020-07-26'}, {'name': 'DataCenter', 'value': '1752000000', 'date': '2020-07-26'}, {'name': 'Automotive', 'value': '111000000', 'date': '2020-07-26'}, {'name': 'OEMAndOther', 'value': '146000000', 'date': '2020-07-26'}]
|
|
geographic_sources = [{'name': 'country:US', 'value': '13022000000', 'date': '2024-07-28'}, {'name': 'country:TW', 'value': '5740000000', 'date': '2024-07-28'}, {'name': 'country:SG', 'value': '5622000000', 'date': '2024-07-28'}, {'name': 'ChinaIncludingHongKong', 'value': '3667000000', 'date': '2024-07-28'}, {'name': 'AllOtherCountriesNotSeparatelyDisclosed', 'value': '1989000000', 'date': '2024-07-28'}, {'name': 'country:US', 'value': '13496000000', 'date': '2024-04-28'}, {'name': 'country:TW', 'value': '4373000000', 'date': '2024-04-28'}, {'name': 'country:SG', 'value': '4037000000', 'date': '2024-04-28'}, {'name': 'ChinaIncludingHongKong', 'value': '2491000000', 'date': '2024-04-28'}, {'name': 'AllOtherCountriesNotSeparatelyDisclosed', 'value': '1647000000', 'date': '2024-04-28'}, {'name': 'country:IL', 'value': '1100000000', 'date': '2024-01-28'}, {'name': 'country:GB', 'value': '250000000', 'date': '2024-01-28'}, {'name': 'country:US', 'value': '26966000000', 'date': '2024-01-28'}, {'name': 'country:TW', 'value': '13405000000', 'date': '2024-01-28'}, {'name': 'ChinaIncludingHongKong', 'value': '10306000000', 'date': '2024-01-28'}, {'name': 'OtherCountries', 'value': '10245000000', 'date': '2024-01-28'}, {'name': 'country:IL', 'value': '325000000', 'date': '2024-01-28'}, {'name': 'country:US', 'value': '6302000000', 'date': '2023-10-29'}, {'name': 'country:TW', 'value': '4333000000', 'date': '2023-10-29'}, {'name': 'ChinaIncludingHongKong', 'value': '4030000000', 'date': '2023-10-29'}, {'name': 'country:SG', 'value': '2702000000', 'date': '2023-10-29'}, {'name': 'AllOtherCountriesNotSeparatelyDisclosed', 'value': '753000000', 'date': '2023-10-29'}, {'name': 'country:US', 'value': '6043000000', 'date': '2023-07-30'}, {'name': 'country:TW', 'value': '2839000000', 'date': '2023-07-30'}, {'name': 'ChinaIncludingHongKong', 'value': '2740000000', 'date': '2023-07-30'}, {'name': 'AllOtherCountriesNotSeparatelyDisclosed', 'value': '1885000000', 'date': '2023-07-30'}, {'name': 'country:US', 'value': '2385000000', 'date': '2023-04-30'}, {'name': 'country:TW', 'value': '1796000000', 'date': '2023-04-30'}, {'name': 'ChinaIncludingHongKong', 'value': '1590000000', 'date': '2023-04-30'}, {'name': 'country:SG', 'value': '762000000', 'date': '2023-04-30'}, {'name': 'AllOtherCountriesNotSeparatelyDisclosed', 'value': '659000000', 'date': '2023-04-30'}, {'name': 'country:IL', 'value': '1050000000.00', 'date': '2023-01-29'}, {'name': 'country:GB', 'value': '245000000', 'date': '2023-01-29'}, {'name': 'country:US', 'value': '8292000000', 'date': '2023-01-29'}, {'name': 'country:TW', 'value': '6986000000', 'date': '2023-01-29'}, {'name': 'ChinaIncludingHongKong', 'value': '5785000000', 'date': '2023-01-29'}, {'name': 'OtherCountries', 'value': '5911000000', 'date': '2023-01-29'}, {'name': 'country:IL', 'value': '283000000', 'date': '2023-01-29'}, {'name': 'country:US', 'value': '2148000000', 'date': '2022-10-30'}, {'name': 'country:TW', 'value': '1153000000', 'date': '2022-10-30'}, {'name': 'ChinaIncludingHongKong', 'value': '1148000000', 'date': '2022-10-30'}, {'name': 'AllOtherCountriesNotSeparatelyDisclosed', 'value': '1482000000', 'date': '2022-10-30'}, {'name': 'country:US', 'value': '1988000000', 'date': '2022-07-31'}, {'name': 'ChinaIncludingHongKong', 'value': '1602000000', 'date': '2022-07-31'}, {'name': 'country:TW', 'value': '1204000000', 'date': '2022-07-31'}, {'name': 'AllOtherCountriesNotSeparatelyDisclosed', 'value': '1910000000', 'date': '2022-07-31'}, {'name': 'country:TW', 'value': '2777000000', 'date': '2022-05-01'}, {'name': 'ChinaIncludingHongKong', 'value': '2081000000', 'date': '2022-05-01'}, {'name': 'country:US', 'value': '1932000000', 'date': '2022-05-01'}, {'name': 'AllOtherCountriesNotSeparatelyDisclosed', 'value': '1498000000', 'date': '2022-05-01'}, {'name': 'country:IL', 'value': '1050000000.00', 'date': '2022-01-30'}, {'name': 'country:GB', 'value': '232000000', 'date': '2022-01-30'}, {'name': 'country:TW', 'value': '8544000000', 'date': '2022-01-30'}, {'name': 'country:CN', 'value': '7111000000', 'date': '2022-01-30'}, {'name': 'country:US', 'value': '4349000000', 'date': '2022-01-30'}, {'name': 'OtherCountries', 'value': '6910000000', 'date': '2022-01-30'}, {'name': 'country:IL', 'value': '185000000', 'date': '2022-01-30'}, {'name': 'country:IL', 'value': '1700000000', 'date': '2021-10-31'}, {'name': 'country:GB', 'value': '231000000', 'date': '2021-10-31'}, {'name': 'country:TW', 'value': '2187000000', 'date': '2021-10-31'}, {'name': 'ChinaIncludingHongKong', 'value': '2017000000', 'date': '2021-10-31'}, {'name': 'OtherAsiaPacific', 'value': '1067000000', 'date': '2021-10-31'}, {'name': 'country:US', 'value': '1126000000', 'date': '2021-10-31'}, {'name': 'AllOtherCountriesNotSeparatelyDisclosed', 'value': '366000000', 'date': '2021-10-31'}, {'name': 'country:IL', 'value': '1600000000', 'date': '2021-08-01'}, {'name': 'country:GB', 'value': '231000000', 'date': '2021-08-01'}, {'name': 'country:TW', 'value': '1961000000', 'date': '2021-08-01'}, {'name': 'ChinaIncludingHongKong', 'value': '1720000000', 'date': '2021-08-01'}, {'name': 'OtherAsiaPacific', 'value': '1047000000', 'date': '2021-08-01'}, {'name': 'country:US', 'value': '996000000', 'date': '2021-08-01'}, {'name': 'AllOtherCountriesNotSeparatelyDisclosed', 'value': '354000000', 'date': '2021-08-01'}, {'name': 'country:TW', 'value': '1784000000', 'date': '2021-05-02'}, {'name': 'ChinaIncludingHongKong', 'value': '1391000000', 'date': '2021-05-02'}, {'name': 'OtherAsiaPacific', 'value': '1001000000', 'date': '2021-05-02'}, {'name': 'country:US', 'value': '768000000', 'date': '2021-05-02'}, {'name': 'AllOtherCountriesNotSeparatelyDisclosed', 'value': '336000000', 'date': '2021-05-02'}, {'name': 'country:TW', 'value': '4531000000', 'date': '2021-01-31'}, {'name': 'country:CN', 'value': '3886000000', 'date': '2021-01-31'}, {'name': 'country:US', 'value': '3214000000', 'date': '2021-01-31'}, {'name': 'OtherAsiaPacific', 'value': '3093000000', 'date': '2021-01-31'}, {'name': 'OtherCountries', 'value': '833000000', 'date': '2021-01-31'}, {'name': 'country:IL', 'value': '147000000', 'date': '2021-01-31'}, {'name': 'country:IN', 'value': '64000000', 'date': '2021-01-31'}, {'name': 'country:TW', 'value': '1296000000', 'date': '2020-10-25'}, {'name': 'ChinaIncludingHongKong', 'value': '1113000000', 'date': '2020-10-25'}, {'name': 'OtherAsiaPacific', 'value': '955000000', 'date': '2020-10-25'}, {'name': 'country:US', 'value': '890000000', 'date': '2020-10-25'}, {'name': 'AllOtherCountriesNotSeparatelyDisclosed', 'value': '225000000', 'date': '2020-10-25'}, {'name': 'country:TW', 'value': '954000000', 'date': '2020-07-26'}, {'name': 'country:US', 'value': '944000000', 'date': '2020-07-26'}, {'name': 'ChinaIncludingHongKong', 'value': '855000000', 'date': '2020-07-26'}, {'name': 'OtherAsiaPacific', 'value': '698000000', 'date': '2020-07-26'}, {'name': 'AllOtherCountriesNotSeparatelyDisclosed', 'value': '175000000', 'date': '2020-07-26'}]
|
|
|
|
|
|
|
|
def generate_revenue_dataset(dataset):
|
|
name_replacements = {
|
|
"datacenter": "Data Center",
|
|
"professionalvisualization": "Professional Visualization",
|
|
"oemandother": "OEM and Other",
|
|
"automotive": "Automotive and Robotics",
|
|
"oemip": "OEM and Other",
|
|
"gaming": "Gaming"
|
|
}
|
|
dataset = [revenue for revenue in dataset if revenue['name'] not in ['Compute', 'Networking']]
|
|
|
|
|
|
for item in dataset:
|
|
item['date'] = closest_quarter_end(item['date'])
|
|
|
|
name = item.get('name').lower()
|
|
value = int(item.get('value'))
|
|
if name in name_replacements:
|
|
item['name'] = name_replacements[name]
|
|
item['value'] = int(value)
|
|
|
|
# Custom order for specific countries
|
|
custom_order = {
|
|
'Data Center': 4,
|
|
'Gaming': 3,
|
|
'Professional Visualization': 2,
|
|
'Automotive and Robotics': 1,
|
|
'OEM and Other': 0
|
|
}
|
|
|
|
dataset = sorted(
|
|
dataset,
|
|
key=lambda item: (datetime.strptime(item['date'], '%Y-%m-%d'), custom_order.get(item['name'], 4)),
|
|
reverse = True
|
|
)
|
|
|
|
dataset = compute_q4_results(dataset)
|
|
|
|
result = {}
|
|
|
|
# Iterate through the original data
|
|
for item in dataset:
|
|
# Get the date and value
|
|
date = item['date']
|
|
value = item['value']
|
|
|
|
# Initialize the dictionary for the date if not already done
|
|
if date not in result:
|
|
result[date] = {'date': date, 'value': []}
|
|
|
|
# Append the value to the list
|
|
result[date]['value'].append(value)
|
|
|
|
# Convert the result dictionary to a list
|
|
final_result = list(result.values())
|
|
|
|
# Print the final result
|
|
final_result = add_value_growth(final_result)
|
|
print(final_result)
|
|
|
|
|
|
def generate_geography_dataset(dataset):
|
|
|
|
country_replacements = {
|
|
"country:us": "United States",
|
|
"country:cn": "China",
|
|
"chinaincludinghongkong": "China"
|
|
}
|
|
|
|
# Custom order for specific countries
|
|
custom_order = {
|
|
'United States': 2,
|
|
'China': 1,
|
|
'Other': 0
|
|
}
|
|
|
|
for item in dataset:
|
|
item['date'] = closest_quarter_end(item['date'])
|
|
name = item.get('name').lower()
|
|
value = int(float(item.get('value')))
|
|
if name in country_replacements:
|
|
item['name'] = country_replacements[name]
|
|
item['value'] = value
|
|
else:
|
|
item['name'] = 'Other'
|
|
item['value'] = value
|
|
|
|
dataset = aggregate_other_values(dataset)
|
|
dataset = sorted(
|
|
dataset,
|
|
key=lambda item: (datetime.strptime(item['date'], '%Y-%m-%d'), custom_order.get(item['name'], 3)),
|
|
reverse = True
|
|
)
|
|
|
|
dataset = compute_q4_results(dataset)
|
|
result = {}
|
|
|
|
# Iterate through the original data
|
|
for item in dataset:
|
|
# Get the date and value
|
|
date = item['date']
|
|
value = item['value']
|
|
|
|
# Initialize the dictionary for the date if not already done
|
|
if date not in result:
|
|
result[date] = {'date': date, 'value': []}
|
|
|
|
# Append the value to the list
|
|
result[date]['value'].append(value)
|
|
|
|
# Convert the result dictionary to a list
|
|
# Convert the result dictionary to a list
|
|
final_result = list(result.values())
|
|
|
|
# Print the final result
|
|
final_result = add_value_growth(final_result)
|
|
print(final_result)
|
|
|
|
|
|
#generate_revenue_dataset(revenue_sources)
|
|
generate_geography_dataset(geographic_sources)
|
|
|