Spaces:
Sleeping
Sleeping
Upload folder using huggingface_hub
Browse files- data_generator/backup/theme_analysis_backup.json +0 -0
- data_generator/backup/theme_backup.json +0 -0
- data_generator/backup/theme_backup.txt +439 -0
- data_generator/data_generator.py +801 -0
- data_generator/theme.json +1502 -0
- data_generator/theme.txt +439 -0
- data_generator/theme_analysis.json +0 -0
- data_generator/theme_generator.py +349 -0
- data_generator/theme_new.json +0 -0
data_generator/backup/theme_analysis_backup.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
data_generator/backup/theme_backup.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
data_generator/backup/theme_backup.txt
ADDED
|
@@ -0,0 +1,439 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Political
|
| 2 |
+
1. Voter Turnout Percentages by Age Group (2000-2024)
|
| 3 |
+
2. Defense Budget Allocation by NATO Members
|
| 4 |
+
3. Women in Leadership Positions by Country
|
| 5 |
+
4. Presidential Campaign Spending by Source (2008-2024)
|
| 6 |
+
5. Public Confidence in Media Institutions (Survey Data)
|
| 7 |
+
6. Transparency International Rankings by Continent
|
| 8 |
+
7. Political Party Polarization in Legislative Votes
|
| 9 |
+
8. Swing State Margin Shifts Across Presidential Elections
|
| 10 |
+
9. Healthcare Industry Lobbying Expenditures by Year
|
| 11 |
+
10. G20 Climate Agreement Voting Alignment
|
| 12 |
+
11. Freedom House Democracy Scores by Region
|
| 13 |
+
12. Presidential Twitter Activity Impact on Approval Ratings
|
| 14 |
+
13. Immigration Policy Changes and Asylum Acceptance Rates
|
| 15 |
+
14. Campaign Advertisement Spending Per Electoral Vote
|
| 16 |
+
15. Youth Political Party Membership Demographics
|
| 17 |
+
16. Education vs. Healthcare Budget Allocation by Country
|
| 18 |
+
17. Climate Change Coverage in Major News Networks
|
| 19 |
+
18. Trade Tariff Impact on Bilateral Trade Volumes
|
| 20 |
+
19. Public Opinion Evolution on Same-Sex Marriage
|
| 21 |
+
20. Embassy Staff Size vs. Trade Volume Correlation
|
| 22 |
+
|
| 23 |
+
# Sports
|
| 24 |
+
1. Gold Medal Distribution at Summer Olympics (2000-2024)
|
| 25 |
+
2. NBA vs. Premier League Salary Comparison
|
| 26 |
+
3. Super Bowl vs. World Cup Final Viewership Metrics
|
| 27 |
+
4. Win Percentage Evolution of NBA Dynasties (2010-2025)
|
| 28 |
+
5. NFL vs. MLB Annual Revenue Breakdown
|
| 29 |
+
6. Three-Point Shooting Efficiency Across NBA Eras
|
| 30 |
+
7. Premier League Attendance Trends by Stadium Size
|
| 31 |
+
8. Concussion Rates in NFL vs. Rugby Positions
|
| 32 |
+
9. Sports Betting Market Expansion After Legalization
|
| 33 |
+
10. Nike vs. Adidas Sponsorship Investment by Sport
|
| 34 |
+
11. Record Transfer Fees in European Football by League
|
| 35 |
+
12. WNBA vs. NBA Salary Comparison (2015-2025)
|
| 36 |
+
13. March Madness vs. College Football Playoff Ratings
|
| 37 |
+
14. Tennis Racket Sales Correlation with Grand Slam Winners
|
| 38 |
+
15. Swimming vs. Soccer Youth Participation in Urban Areas
|
| 39 |
+
16. Professional Golfer Practice Hours vs. Tournament Earnings
|
| 40 |
+
17. NBA Finals Ticket Price Evolution (2000-2025)
|
| 41 |
+
18. LeBron James vs. Michael Jordan Endorsement Revenue
|
| 42 |
+
19. NFL Fan Demographics by Team Market Size
|
| 43 |
+
20. Sports Streaming Subscribers on ESPN+ vs. DAZN
|
| 44 |
+
|
| 45 |
+
# Environmental
|
| 46 |
+
1. CO2 Emissions of China vs. US vs. EU (1990-2025)
|
| 47 |
+
2. Amazon vs. Congo Basin Deforestation Annual Rates
|
| 48 |
+
3. Solar Energy Adoption in Germany vs. California
|
| 49 |
+
4. Pacific vs. Atlantic Ocean Microplastic Concentration
|
| 50 |
+
5. Insect vs. Mammal Extinction Rates Since 1900
|
| 51 |
+
6. Beijing vs. Los Angeles Air Quality Improvement Measures
|
| 52 |
+
7. Arctic vs. Antarctic Ice Sheet Reduction Patterns
|
| 53 |
+
8. Recycling Effectiveness in Japan vs. United States
|
| 54 |
+
9. Middle East vs. Sub-Saharan Africa Water Scarcity Indicators
|
| 55 |
+
10. Coral Reef Economic Value in Tourism vs. Fisheries
|
| 56 |
+
11. Climate Change Mitigation vs. Adaptation Funding
|
| 57 |
+
12. Wetland vs. Forest Habitat Loss Percentages
|
| 58 |
+
13. Agricultural vs. Transportation Carbon Footprints
|
| 59 |
+
14. EV Battery Technology Investment in Asia vs. Europe
|
| 60 |
+
15. Miami vs. Amsterdam Sea Level Rise Adaptation Strategies
|
| 61 |
+
16. Industrial vs. Residential Methane Emission Sources
|
| 62 |
+
17. Copenhagen vs. Singapore Sustainable City Metrics
|
| 63 |
+
18. Air Pollution Healthcare Costs in Developing vs. Developed Nations
|
| 64 |
+
19. National Park Biodiversity Index in Tropics vs. Temperate Zones
|
| 65 |
+
20. Manufacturing vs. Building Sector Energy Efficiency Gains
|
| 66 |
+
|
| 67 |
+
# Technology
|
| 68 |
+
1. Android vs. iOS Market Share by Region (2010-2025)
|
| 69 |
+
2. Healthcare vs. Financial Industry Data Breach Costs
|
| 70 |
+
3. VR Adoption Rates by Age Demographic
|
| 71 |
+
4. Apple vs. Microsoft R&D Spending Effectiveness
|
| 72 |
+
5. China vs. US AI Patent Applications (2010-2025)
|
| 73 |
+
6. Urban vs. Rural Broadband Speed Disparities
|
| 74 |
+
7. AWS vs. Azure vs. Google Cloud Market Growth
|
| 75 |
+
8. Healthcare vs. Financial AI Investment Returns
|
| 76 |
+
9. Taiwan vs. South Korea Semiconductor Production Capacity
|
| 77 |
+
10. In-House vs. Outsourced Software Development Costs
|
| 78 |
+
11. Data Science vs. Cybersecurity Job Growth Trajectory
|
| 79 |
+
12. Retail vs. Manufacturing Digital Transformation ROI
|
| 80 |
+
13. Fintech vs. Healthtech Venture Capital Funding
|
| 81 |
+
14. Smart Home Device Penetration by Country Income Level
|
| 82 |
+
15. Quantum Computing Performance: IBM vs. Google Benchmarks
|
| 83 |
+
16. Ransomware Defense Spending by Company Size
|
| 84 |
+
17. 5G Coverage in Urban vs. Rural Areas by Country
|
| 85 |
+
18. Unicorn Valuation Timeline: Uber vs. Airbnb vs. SpaceX
|
| 86 |
+
19. Internet Access Disparities: Africa vs. Europe
|
| 87 |
+
20. Automation Adoption: Automotive vs. Food Processing Industries
|
| 88 |
+
|
| 89 |
+
# Cuisine
|
| 90 |
+
1. Salt vs. Sugar Consumption by Country
|
| 91 |
+
2. Italian vs. Chinese Restaurant Revenue in Major Cities
|
| 92 |
+
3. Household Food Waste in Developed vs. Developing Nations
|
| 93 |
+
4. Avocado Price Fluctuations and Supply Chain Analysis
|
| 94 |
+
5. Mediterranean vs. Nordic Diet Nutritional Comparison
|
| 95 |
+
6. Farm-to-Table Distance for Common Vegetables by Season
|
| 96 |
+
7. Michelin-Star Restaurant Distribution by Country Population
|
| 97 |
+
8. Gas vs. Induction Cooking Energy Efficiency
|
| 98 |
+
9. UberEats vs. DoorDash Market Share by Urban Density
|
| 99 |
+
10. Per Capita Coffee Consumption: Nordics vs. Mediterranean
|
| 100 |
+
11. Organic vs. Conventional Produce Price Premiums by Item
|
| 101 |
+
12. Lactose Intolerance Prevalence: Asia vs. Europe
|
| 102 |
+
13. Fast-Casual vs. Fine Dining Restaurant Startup Costs
|
| 103 |
+
14. Daily Protein Intake: Western vs. Eastern Diets
|
| 104 |
+
15. Olive Oil Export Value: Spain vs. Italy vs. Greece
|
| 105 |
+
16. Culinary School Graduates per Restaurant: Paris vs. Tokyo
|
| 106 |
+
17. Food Festival Economic Impact: Small vs. Large Cities
|
| 107 |
+
18. McDonald's vs. Local Fast Food Chain Market Share by Country
|
| 108 |
+
19. Wine Production Volume: New World vs. Old World Regions
|
| 109 |
+
20. Sushi vs. Pizza Instagram Hashtag Popularity by Country
|
| 110 |
+
|
| 111 |
+
# Public Health
|
| 112 |
+
1. COVID-19 vs. Influenza Vaccination Rates by Age Group
|
| 113 |
+
2. US vs. European Healthcare Expenditure and Outcomes
|
| 114 |
+
3. Urban vs. Rural Life Expectancy in Developing Nations
|
| 115 |
+
4. Cardiovascular vs. Cancer Disease Burden by Country
|
| 116 |
+
5. Physician Density: Primary Care vs. Specialists by Region
|
| 117 |
+
6. Pfizer vs. Merck R&D Investment and Drug Approvals
|
| 118 |
+
7. Depression vs. Anxiety Prevalence By Country Income Level
|
| 119 |
+
8. Hospital Bed Availability: Pre vs. Post Pandemic Era
|
| 120 |
+
9. Public vs. Private Health Insurance Coverage by Income
|
| 121 |
+
10. Smoking vs. Obesity-Related Preventable Deaths
|
| 122 |
+
11. Health Literacy Correlation with Education Levels
|
| 123 |
+
12. Maternal Mortality: US vs. Comparable Economies
|
| 124 |
+
13. Child Obesity Rates: US vs. Japan vs. France
|
| 125 |
+
14. Healthcare Access: Urban vs. Rural Communities
|
| 126 |
+
15. South Korea vs. Italy COVID-19 Response Effectiveness
|
| 127 |
+
16. Preventive vs. Emergency Care Budget Allocation
|
| 128 |
+
17. Telemedicine Growth Rate: Pre vs. Post Pandemic
|
| 129 |
+
18. Antibiotic Resistance in Hospitals vs. Community Settings
|
| 130 |
+
19. Smoking Rate Decline: Public Education vs. Taxation Impact
|
| 131 |
+
20. Physician Burnout Rates by Specialty and Work Hours
|
| 132 |
+
|
| 133 |
+
# Space Exploration
|
| 134 |
+
1. NASA vs. SpaceX Budget Efficiency Comparison
|
| 135 |
+
2. US vs. China Annual Satellite Launch Volume
|
| 136 |
+
3. Kepler vs. TESS Exoplanet Discovery Efficiency
|
| 137 |
+
4. Low vs. High Earth Orbit Space Debris Accumulation
|
| 138 |
+
5. Mars Rover vs. Orbital Mission Cost-to-Data Ratio
|
| 139 |
+
6. ISS vs. Chinese Space Station Astronaut Days in Orbit
|
| 140 |
+
7. SpaceX vs. ULA Launch Success Rate by Vehicle
|
| 141 |
+
8. Virgin Galactic vs. Blue Origin Tourist Flight Investments
|
| 142 |
+
9. Hubble vs. James Webb Space Telescope Imaging Resolution
|
| 143 |
+
10. NASA vs. ESA vs. CNSA Annual Budget Allocation
|
| 144 |
+
11. Government vs. Commercial Space Investment Growth
|
| 145 |
+
12. Asteroid Mining Potential: Precious vs. Industrial Metals
|
| 146 |
+
13. Mars vs. Moon Mission Duration and Communication Lag
|
| 147 |
+
14. LEO vs. Deep Space Radiation Exposure Measurements
|
| 148 |
+
15. NASA vs. SpaceX Mission Control Staff Efficiency
|
| 149 |
+
16. Soyuz vs. Falcon vs. Starship Velocity Capabilities
|
| 150 |
+
17. Florida vs. Texas Spaceport Job Creation Impact
|
| 151 |
+
18. Starlink vs. OneWeb Satellite Bandwidth Capacity
|
| 152 |
+
19. ISS Module Cost: US vs. Russian Contributions
|
| 153 |
+
20. Apollo vs. Artemis Program Lunar Exploration Coverage
|
| 154 |
+
|
| 155 |
+
# Economic Trends
|
| 156 |
+
1. GDP Growth: Emerging vs. Developed Economies
|
| 157 |
+
2. US vs. Eurozone Inflation Rate Patterns (2000-2025)
|
| 158 |
+
3. Income Inequality: Scandinavian vs. Anglo-Saxon Economies
|
| 159 |
+
4. S&P 500 vs. FTSE 100 Performance (2010-2025)
|
| 160 |
+
5. USD/EUR Exchange Rate Volatility During Crisis Periods
|
| 161 |
+
6. Manufacturing vs. Service Sector Employment Evolution
|
| 162 |
+
7. Japan vs. US vs. Germany Debt-to-GDP Ratio Trends
|
| 163 |
+
8. Housing Affordability Index: Urban vs. Suburban Markets
|
| 164 |
+
9. Federal Funds Rate vs. Mortgage Rate Correlation
|
| 165 |
+
10. US-China Trade Balance Evolution (2000-2025)
|
| 166 |
+
11. FDI Flow: Developing Asia vs. Latin America
|
| 167 |
+
12. Essential vs. Discretionary Consumer Spending Patterns
|
| 168 |
+
13. Bitcoin vs. Ethereum vs. Traditional Market Capitalization
|
| 169 |
+
14. Tech vs. Energy Sector Profit Margins (2015-2025)
|
| 170 |
+
15. Economic Mobility: US vs. Canada vs. Denmark
|
| 171 |
+
16. Corporate vs. Individual Tax Compliance Efficiency
|
| 172 |
+
17. Amazon vs. Traditional Retail Market Share Growth
|
| 173 |
+
18. Retirement Savings Adequacy: Millennials vs. Baby Boomers
|
| 174 |
+
19. Freelance vs. Traditional Employment Growth by Industry
|
| 175 |
+
20. Hurricane vs. Earthquake Economic Recovery Patterns
|
| 176 |
+
|
| 177 |
+
# Art
|
| 178 |
+
1. Impressionist vs. Contemporary Art Auction Records
|
| 179 |
+
2. MoMA vs. Louvre Annual Visitor Demographics
|
| 180 |
+
3. New York vs. London vs. Hong Kong Art Market Volume
|
| 181 |
+
4. Top 1% vs. Average Artist Income Distribution
|
| 182 |
+
5. Chicago vs. Berlin Public Art Funding Per Capita
|
| 183 |
+
6. Commercial Gallery Space Growth: Online vs. Physical
|
| 184 |
+
7. K-12 vs. Higher Education Art Program Funding
|
| 185 |
+
8. Digital vs. Traditional Art Medium Popularity by Age Group
|
| 186 |
+
9. Blockbuster vs. Local Exhibition Return on Investment
|
| 187 |
+
10. Private vs. Institutional Art Collection Insurance Valuations
|
| 188 |
+
11. NFT Sales Volume: 2021 Peak vs. Current Market
|
| 189 |
+
12. Art Festival Tourism Impact: Miami Basel vs. Venice Biennale
|
| 190 |
+
13. Female vs. Male Artist Representation in Major Museums
|
| 191 |
+
14. Renaissance vs. Modern Art Restoration Cost Comparison
|
| 192 |
+
15. Art Book Publishing: Digital vs. Print Revenue Trends
|
| 193 |
+
16. Etsy vs. Saatchi Online Art Marketplace Growth Metrics
|
| 194 |
+
17. Color Palette Analysis: Baroque vs. Impressionist Paintings
|
| 195 |
+
18. Animation vs. Traditional Art Employment Opportunities
|
| 196 |
+
19. NEA Grants: Urban vs. Rural Distribution Analysis
|
| 197 |
+
20. Acquisition Budgets: American vs. European Museums
|
| 198 |
+
|
| 199 |
+
# Transportation
|
| 200 |
+
1. EV vs. ICE Vehicle Carbon Emissions Lifecycle Analysis
|
| 201 |
+
2. Tokyo vs. New York Subway Ridership Patterns
|
| 202 |
+
3. Vehicle Ownership: Urban vs. Rural Households by Country
|
| 203 |
+
4. Traffic Congestion: Economic Cost in Top 10 Global Cities
|
| 204 |
+
5. Delta vs. United vs. Southwest Passenger Volume by Route
|
| 205 |
+
6. Japanese vs. European High-Speed Rail Network Efficiency
|
| 206 |
+
7. Tesla vs. Traditional Automaker EV Adoption Rate
|
| 207 |
+
8. Shanghai vs. Rotterdam vs. Los Angeles Container Volume
|
| 208 |
+
9. Highway vs. Public Transit Infrastructure Investment by State
|
| 209 |
+
10. Hybrid vs. Full Electric Vehicle Fuel Cost Savings
|
| 210 |
+
11. Commute Times: Car vs. Public Transit in Major Cities
|
| 211 |
+
12. Uber vs. Lyft Market Penetration by City Population Density
|
| 212 |
+
13. Waymo vs. Tesla Autonomous Vehicle Testing Mileage
|
| 213 |
+
14. Bike Lane Investment vs. Cycling Commuter Increase
|
| 214 |
+
15. US vs. EU Traffic Fatalities per Vehicle Mile Traveled
|
| 215 |
+
16. Transportation Cost Percentage of Household Budget by Income Level
|
| 216 |
+
17. On-Time Performance: Budget vs. Premium Airlines
|
| 217 |
+
18. Toyota vs. Volkswagen Global Manufacturing Output
|
| 218 |
+
19. UPS vs. FedEx Delivery Efficiency Metrics
|
| 219 |
+
20. Pedestrian Zone Impact on Retail Revenue: Before vs. After
|
| 220 |
+
|
| 221 |
+
# Social Media
|
| 222 |
+
1. TikTok vs. Instagram User Engagement Metrics by Content Type
|
| 223 |
+
2. Gen Z vs. Millennial vs. Gen X Daily Social Media Usage
|
| 224 |
+
3. Top 10% vs. Average Content Creator Income Distribution
|
| 225 |
+
4. Facebook vs. YouTube Ad Revenue per User by Region
|
| 226 |
+
5. Instagram Algorithm Change Impact on Creator vs. Brand Reach
|
| 227 |
+
6. TikTok vs. Twitter User Growth in Emerging Markets
|
| 228 |
+
7. Social Media Job Creation: Content Creation vs. Platform Engineering
|
| 229 |
+
8. Election Misinformation Spread: Facebook vs. Twitter Analysis
|
| 230 |
+
9. LinkedIn vs. TikTok Demographic User Distribution
|
| 231 |
+
10. Positive vs. Negative Sentiment Analysis on Political Content
|
| 232 |
+
11. Instagram Shop vs. Facebook Marketplace Conversion Rates
|
| 233 |
+
12. Platform Migration Patterns: Facebook to Instagram to TikTok
|
| 234 |
+
13. Video vs. Image Engagement Rates on Instagram by Industry
|
| 235 |
+
14. Hashtag Effectiveness: Branded vs. Trend-Based Campaigns
|
| 236 |
+
15. Privacy Concern Evolution: Post-Cambridge Analytica Timeline
|
| 237 |
+
16. Social Media Marketing ROI: B2B vs. B2C Industries
|
| 238 |
+
17. Micro vs. Macro Influencer Engagement-to-Follower Ratios
|
| 239 |
+
18. Content Moderation Costs: AI vs. Human Review Methods
|
| 240 |
+
19. Social Platform Valuation: Monthly Active Users vs. Revenue
|
| 241 |
+
20. Social Media vs. Traditional News Consumption by Age Group
|
| 242 |
+
|
| 243 |
+
# Historical
|
| 244 |
+
1. European vs. Asian Population Growth (1500-2000)
|
| 245 |
+
2. World War I vs. World War II Casualty Distribution by Country
|
| 246 |
+
3. Roman vs. British Empire Economic Output Comparison
|
| 247 |
+
4. Literacy Rate Evolution: Western vs. Eastern Cultures
|
| 248 |
+
5. Bubonic Plague vs. Spanish Flu vs. COVID-19 Mortality Rates
|
| 249 |
+
6. Automobile vs. Smartphone Global Adoption Rate Comparison
|
| 250 |
+
7. Silk Road vs. Maritime Spice Route Trade Volume Analysis
|
| 251 |
+
8. Roman Empire vs. Tang Dynasty Longevity Factors
|
| 252 |
+
9. Latin vs. Mandarin Speaker Population Historical Trends
|
| 253 |
+
10. Gold vs. Silver Value Ratio Throughout Monetary History
|
| 254 |
+
11. Trans-Atlantic vs. Trans-Pacific Migration Patterns (1800-2000)
|
| 255 |
+
12. Gothic vs. Renaissance Architecture Distribution in Europe
|
| 256 |
+
13. Life Expectancy: Aristocracy vs. Common People Through History
|
| 257 |
+
14. Climate Impact on Mayan vs. Norse Civilization Decline
|
| 258 |
+
15. Bourbon vs. Habsburg Dynasty Wealth Accumulation
|
| 259 |
+
16. Papyrus vs. Parchment vs. Paper Document Preservation Cost
|
| 260 |
+
17. Egyptian vs. Mesoamerican Archaeological Discovery Timeline
|
| 261 |
+
18. Democracy vs. Monarchy Duration Across Civilizations
|
| 262 |
+
19. Christianity vs. Islam Adherent Population Growth (700-2000)
|
| 263 |
+
20. Egyptian vs. Greek vs. Roman Artifact Value Appreciation
|
| 264 |
+
|
| 265 |
+
# Educational Systems
|
| 266 |
+
1. Education Spending: Finland vs. US per Student Outcomes
|
| 267 |
+
2. Teacher-Student Ratio: Asian vs. Western Education Systems
|
| 268 |
+
3. PISA Score Trends: Singapore vs. Germany vs. Canada
|
| 269 |
+
4. University Enrollment: Public vs. Private Institutions by Income
|
| 270 |
+
5. Student Loan Burden: US vs. UK vs. Australia
|
| 271 |
+
6. High School Graduation Rates: Urban vs. Rural Districts
|
| 272 |
+
7. EdTech Investment: K-12 vs. Higher Education Platforms
|
| 273 |
+
8. Project-Based vs. Traditional Learning Outcome Comparison
|
| 274 |
+
9. School Infrastructure Quality: Wealthy vs. Low-Income Districts
|
| 275 |
+
10. Educational Attainment Gap: High vs. Low Income Families
|
| 276 |
+
11. Teacher Salary: US vs. OECD Country Comparison
|
| 277 |
+
12. MOOC vs. Traditional Course Completion Rate Comparison
|
| 278 |
+
13. Technical College vs. University Graduate Income Trajectory
|
| 279 |
+
14. Charter vs. Public School Performance in Urban Areas
|
| 280 |
+
15. STEM vs. Humanities Department Budget Allocation Trends
|
| 281 |
+
16. Female vs. Male STEM Graduate Percentage by Country
|
| 282 |
+
17. Literacy Rate Correlation with GDP Per Capita by Country
|
| 283 |
+
18. Textbook Cost Inflation vs. General Consumer Price Index
|
| 284 |
+
19. International Student Mobility: Pre vs. Post Pandemic
|
| 285 |
+
20. College Completion Rates by Racial and Economic Demographics
|
| 286 |
+
|
| 287 |
+
# Wildlife Conservation
|
| 288 |
+
1. Tiger vs. Rhino Population Recovery Programs
|
| 289 |
+
2. North American vs. African Conservation Funding Sources
|
| 290 |
+
3. Reforestation vs. Natural Regeneration Success Rates
|
| 291 |
+
4. Ivory vs. Exotic Pet Trafficking Volume Trends
|
| 292 |
+
5. Marine vs. Terrestrial Protected Area Percentage by Country
|
| 293 |
+
6. Ecotourism vs. Traditional Conservation Job Creation
|
| 294 |
+
7. California Condor vs. American Bison Recovery Program ROI
|
| 295 |
+
8. Coral Reef vs. Rainforest Biodiversity Metrics
|
| 296 |
+
9. Elephant Poaching Incidents: Before vs. After Ivory Ban
|
| 297 |
+
10. Safari Tourism Economic Impact: Kenya vs. Tanzania
|
| 298 |
+
11. Zoo vs. Wild Breeding Program Success Rate Comparison
|
| 299 |
+
12. Drone vs. Camera Trap Conservation Technology Investment
|
| 300 |
+
13. Livestock-Wildlife Conflict: Kenya vs. Montana
|
| 301 |
+
14. Wildlife Corridor Effectiveness: Yellowstone to Yukon Initiative
|
| 302 |
+
15. Polar Bear vs. Koala Climate Change Migration Patterns
|
| 303 |
+
16. Invasive Species Control: Prevention vs. Eradication Costs
|
| 304 |
+
17. WWF vs. Conservation International Funding Allocation
|
| 305 |
+
18. Corporate vs. Individual Volunteer Value in Conservation Projects
|
| 306 |
+
19. Wolf Population Density: Protected vs. Unprotected Regions
|
| 307 |
+
20. Anti-Poaching Patrol Effectiveness: Traditional vs. Technology-Enhanced
|
| 308 |
+
|
| 309 |
+
# Fashion Industry
|
| 310 |
+
1. H&M vs. Zara Environmental Impact Metrics
|
| 311 |
+
2. LVMH vs. Kering Annual Revenue Comparison
|
| 312 |
+
3. Sustainable vs. Conventional Fashion Market Growth Rate
|
| 313 |
+
4. US vs. EU Textile Waste Per Capita Measurement
|
| 314 |
+
5. New York vs. Paris vs. Milan Fashion Week ROI
|
| 315 |
+
6. Luxury vs. Mass-Market Clothing Price Evolution
|
| 316 |
+
7. In-Store vs. Online Fashion Conversion Rates by Category
|
| 317 |
+
8. Bangladesh vs. Vietnam Garment Worker Wage Comparison
|
| 318 |
+
9. Cotton vs. Polyester Carbon Footprint Across Production Stages
|
| 319 |
+
10. Vintage vs. New Clothing Market Growth by Generation
|
| 320 |
+
11. Instagram vs. TikTok Fashion Influencer Campaign Effectiveness
|
| 321 |
+
12. Supply Chain Transparency: Fast Fashion vs. Sustainable Brands
|
| 322 |
+
13. Fashion Industry Gender Pay Gap: Design vs. Manufacturing
|
| 323 |
+
14. Labor vs. Material Cost Percentage in Garment Pricing
|
| 324 |
+
15. Fashion Retail Space Efficiency: Mall vs. Street Location
|
| 325 |
+
16. Fast Fashion vs. Luxury Trend Cycle Duration Analysis
|
| 326 |
+
17. Direct-to-Consumer vs. Wholesale Fashion Brand Survival Rates
|
| 327 |
+
18. Spring/Summer vs. Fall/Winter Collection Revenue Distribution
|
| 328 |
+
19. Gen Z vs. Millennial Fashion Spending Patterns
|
| 329 |
+
20. Fashion Design vs. Business Graduate Employment Rate Comparison
|
| 330 |
+
|
| 331 |
+
# Urban Development
|
| 332 |
+
1. Manhattan vs. Tokyo Urban Density and Livability Metrics
|
| 333 |
+
2. Parks vs. Parking Space Allocation in European Cities
|
| 334 |
+
3. Housing Affordability: San Francisco vs. Singapore Approaches
|
| 335 |
+
4. Road vs. Public Transit Infrastructure Investment by City Size
|
| 336 |
+
5. Urban Tree Canopy: Singapore vs. Portland Coverage Benefits
|
| 337 |
+
6. Bicycle vs. Car Commute Time Evolution in Copenhagen
|
| 338 |
+
7. Urban Heat Island Effect: Concrete vs. Green Infrastructure Impact
|
| 339 |
+
8. Mixed-Use vs. Single-Use Development Property Value Impact
|
| 340 |
+
9. Urban Population Growth: Megacities vs. Secondary Cities
|
| 341 |
+
10. Barcelona vs. Seoul Smart City Implementation ROI
|
| 342 |
+
11. Pre vs. Post-Gentrification Demographic Changes in Brooklyn
|
| 343 |
+
12. Green vs. Traditional Infrastructure Water Management Efficiency
|
| 344 |
+
13. Pedestrian-Friendly Streets: Safety vs. Economic Benefits Analysis
|
| 345 |
+
14. CCTV vs. Street Lighting Crime Reduction Effectiveness
|
| 346 |
+
15. LEED vs. BREEAM Building Energy Performance Comparison
|
| 347 |
+
16. Food Desert Reduction Strategies: Urban Farms vs. Grocery Incentives
|
| 348 |
+
17. Bus vs. Light Rail Transit Accessibility in Medium-Sized Cities
|
| 349 |
+
18. Brownfield vs. Greenfield Development Investment Returns
|
| 350 |
+
19. Beijing vs. Los Angeles Air Quality Improvement Measures
|
| 351 |
+
20. Education vs. Infrastructure vs. Public Safety Budget Allocation
|
| 352 |
+
|
| 353 |
+
# Entertainment
|
| 354 |
+
1. Netflix vs. Disney+ Subscriber Growth in Global Markets
|
| 355 |
+
2. Superhero vs. Horror Film Box Office Trends (2010-2025)
|
| 356 |
+
3. PlayStation vs. Xbox vs. Switch Sales By Generation
|
| 357 |
+
4. Festival vs. Arena Concert Ticket Price Trends
|
| 358 |
+
5. Movie Budget vs. Box Office Return: Franchise vs. Original Films
|
| 359 |
+
6. TV vs. Social Media vs. Gaming Screen Time by Age Group
|
| 360 |
+
7. Nike vs. Adidas Athlete Endorsement Value Metrics
|
| 361 |
+
8. Marvel vs. Star Wars Franchise Total Revenue Impact
|
| 362 |
+
9. Spotify vs. Apple Music Artist Royalty Distribution Comparison
|
| 363 |
+
10. Disney World vs. Universal Studios Attendance Patterns
|
| 364 |
+
11. Acting vs. Production vs. Technical Entertainment Employment
|
| 365 |
+
12. Georgia vs. Canada Film Production Tax Incentive Benefits
|
| 366 |
+
13. Primary vs. Secondary Event Ticket Market Price Differences
|
| 367 |
+
14. Mobile vs. Console Gaming Revenue Stream Evolution
|
| 368 |
+
15. Streaming vs. Cable TV Consumption by Household Income
|
| 369 |
+
16. Netflix vs. Disney vs. Warner Bros. Discovery Stock Performance
|
| 370 |
+
17. Movie vs. TV Show Merchandise Sales Percentage
|
| 371 |
+
18. Academy Awards vs. Grammy Awards Viewership Decline Factors
|
| 372 |
+
19. Legal vs. Pirated Content Consumption by Region and Income
|
| 373 |
+
20. VR Gaming vs. VR Social Platform Adoption Metrics
|
| 374 |
+
|
| 375 |
+
# Agricultural
|
| 376 |
+
1. Organic vs. Conventional Corn Yield Comparison
|
| 377 |
+
2. Drip vs. Sprinkler Irrigation Water Efficiency
|
| 378 |
+
3. US vs. European Average Farm Size Evolution
|
| 379 |
+
4. Integrated vs. Chemical Pest Management Adoption Trends
|
| 380 |
+
5. Organic vs. Conventional Produce Price Premium by Category
|
| 381 |
+
6. US vs. EU Agricultural Subsidy Distribution by Farm Size
|
| 382 |
+
7. Regenerative vs. Conventional Soil Health Indicators
|
| 383 |
+
8. Tractor vs. Combine Harvester Investment Return Periods
|
| 384 |
+
9. Corn vs. Soybean vs. Wheat Export Value by Country
|
| 385 |
+
10. Harvest vs. Distribution Food Loss Percentage by Crop Type
|
| 386 |
+
11. US vs. Dutch Agricultural Output per Labor Hour
|
| 387 |
+
12. Greenhouse vs. Open Field Production Yield per Acre
|
| 388 |
+
13. Wheat Yield Variation: Climate Change Impact by Region
|
| 389 |
+
14. Grassland vs. Forest Carbon Sequestration Comparison
|
| 390 |
+
15. Beef vs. Dairy Cattle Production Efficiency Metrics
|
| 391 |
+
16. Vertical Farming vs. Greenhouse Space Efficiency by Crop
|
| 392 |
+
17. Precision vs. Traditional Agriculture Technology Adoption
|
| 393 |
+
18. GMO vs. Conventional Seed Yield Performance by Region
|
| 394 |
+
19. Agricultural Education Impact: Technical vs. University Training
|
| 395 |
+
20. Small vs. Large Farm Income Distribution by Region
|
| 396 |
+
|
| 397 |
+
# Cultural Traditions
|
| 398 |
+
1. Rio Carnival vs. Oktoberfest Economic Impact Analysis
|
| 399 |
+
2. Kyoto vs. Venice Cultural Tourism Visitor Patterns
|
| 400 |
+
3. Kimono vs. Carpet Weaving Artisan Age Demographics
|
| 401 |
+
4. Welsh vs. Hawaiian Language Preservation Investment Outcomes
|
| 402 |
+
5. Diwali vs. Christmas Celebration Participation Rate Trends
|
| 403 |
+
6. Oral vs. Written Cultural Knowledge Transmission Effectiveness
|
| 404 |
+
7. Government vs. Private Cultural Festival Funding Sources
|
| 405 |
+
8. Machu Picchu vs. Angkor Wat Visitor Environmental Impact
|
| 406 |
+
9. K-Pop vs. Traditional Korean Music Recording Sales
|
| 407 |
+
10. Religious vs. Secular Festival Adaptation Rate Analysis
|
| 408 |
+
11. Sushi vs. Pizza Cultural Diffusion Economic Value Chain
|
| 409 |
+
12. Indigenous vs. Colonial History Education Hours in Curricula
|
| 410 |
+
13. Hanbok vs. Kimono Production Economic Impact
|
| 411 |
+
14. Cultural Identity Preservation: Urban vs. Rural Youth Survey
|
| 412 |
+
15. Notre Dame vs. Forbidden City Restoration Cost Analysis
|
| 413 |
+
16. Fulbright vs. Confucius Institute Cultural Exchange Participation
|
| 414 |
+
17. Opera vs. Traditional Theater Attendance Demographics
|
| 415 |
+
18. Museum vs. Festival Cultural Funding Comparison by Country
|
| 416 |
+
19. Tangible vs. Intangible Heritage Digital Documentation Investment
|
| 417 |
+
20. Beach vs. Cultural Tourism Revenue Distribution in Thailand
|
| 418 |
+
|
| 419 |
+
# Energy
|
| 420 |
+
1. Solar PV vs. Wind Turbine Cost Decline Curves (2010-2025)
|
| 421 |
+
2. Coal vs. Renewable Power Generation Mix by Country
|
| 422 |
+
3. US vs. European vs. Japanese Energy Consumption per GDP
|
| 423 |
+
4. Nuclear vs. Solar Grid Reliability During Peak Demand
|
| 424 |
+
5. Natural Gas vs. Coal Carbon Intensity of Electricity
|
| 425 |
+
6. Lithium-Ion vs. Flow Battery Storage Capacity Growth
|
| 426 |
+
7. First vs. Latest Generation Solar Panel Efficiency Comparison
|
| 427 |
+
8. Fossil Fuel vs. Renewable Energy Subsidy Distribution
|
| 428 |
+
9. French vs. Finnish Nuclear Power Plant Construction Costs
|
| 429 |
+
10. Transmission vs. Generation Infrastructure Investment by Region
|
| 430 |
+
11. Residential vs. Commercial Building Energy Efficiency Improvements
|
| 431 |
+
12. Rural vs. Urban Smart Meter Implementation Cost-Benefit
|
| 432 |
+
13. Brent vs. WTI Crude Oil Price Volatility During Crises
|
| 433 |
+
14. Energy Poverty: Sub-Saharan Africa vs. South Asia Metrics
|
| 434 |
+
15. Solar vs. Wind vs. Nuclear Energy Job Creation per MWh
|
| 435 |
+
16. Coal vs. Natural Gas vs. Nuclear Plant Capacity Factors
|
| 436 |
+
17. AC vs. DC Transmission Loss Percentage Comparison
|
| 437 |
+
18. Battery vs. Hydrogen Storage Patent Filing Trends
|
| 438 |
+
19. Solar vs. Wind vs. Natural Gas Energy Return on Investment
|
| 439 |
+
20. Wholesale vs. Retail Electricity Price Fluctuation Patterns
|
data_generator/data_generator.py
ADDED
|
@@ -0,0 +1,801 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import json
|
| 2 |
+
import os
|
| 3 |
+
import sys
|
| 4 |
+
import random
|
| 5 |
+
import re
|
| 6 |
+
import concurrent.futures
|
| 7 |
+
from typing import List, Dict, Tuple
|
| 8 |
+
from datetime import datetime
|
| 9 |
+
import threading
|
| 10 |
+
from tqdm import tqdm
|
| 11 |
+
import requests
|
| 12 |
+
|
| 13 |
+
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
| 14 |
+
from config import api_key, base_url
|
| 15 |
+
|
| 16 |
+
# OpenAI API configuration
|
| 17 |
+
API_KEY = api_key
|
| 18 |
+
API_PROVIDER = base_url
|
| 19 |
+
|
| 20 |
+
# Column combinations
|
| 21 |
+
COLUMN_COMBINATIONS = [
|
| 22 |
+
"categorical + numerical",
|
| 23 |
+
"categorical + numerical + categorical",
|
| 24 |
+
"categorical + numerical + numerical",
|
| 25 |
+
"categorical + numerical + numerical + categorical",
|
| 26 |
+
"temporal + numerical",
|
| 27 |
+
"temporal + numerical + categorical",
|
| 28 |
+
"categorical + numerical + temporal"
|
| 29 |
+
]
|
| 30 |
+
|
| 31 |
+
# Thread-safe print function
|
| 32 |
+
print_lock = threading.Lock()
|
| 33 |
+
def thread_safe_print(*args, **kwargs):
|
| 34 |
+
with print_lock:
|
| 35 |
+
print(*args, **kwargs)
|
| 36 |
+
|
| 37 |
+
# LLM 响应时间统计
|
| 38 |
+
import time
|
| 39 |
+
llm_stats_lock = threading.Lock()
|
| 40 |
+
llm_response_times = []
|
| 41 |
+
llm_stats_running = True
|
| 42 |
+
|
| 43 |
+
def get_llm_stats():
|
| 44 |
+
"""获取 LLM 统计信息"""
|
| 45 |
+
with llm_stats_lock:
|
| 46 |
+
if not llm_response_times:
|
| 47 |
+
return None
|
| 48 |
+
total_calls = len(llm_response_times)
|
| 49 |
+
avg_time = sum(llm_response_times) / total_calls
|
| 50 |
+
min_time = min(llm_response_times)
|
| 51 |
+
max_time = max(llm_response_times)
|
| 52 |
+
# 最近 10 次调用的平均时间
|
| 53 |
+
recent_times = llm_response_times[-10:]
|
| 54 |
+
recent_avg = sum(recent_times) / len(recent_times)
|
| 55 |
+
return {
|
| 56 |
+
'total_calls': total_calls,
|
| 57 |
+
'avg_time': avg_time,
|
| 58 |
+
'min_time': min_time,
|
| 59 |
+
'max_time': max_time,
|
| 60 |
+
'recent_avg': recent_avg
|
| 61 |
+
}
|
| 62 |
+
|
| 63 |
+
def llm_stats_reporter():
|
| 64 |
+
"""每 30 秒报告一次 LLM 统计信息"""
|
| 65 |
+
global llm_stats_running
|
| 66 |
+
while llm_stats_running:
|
| 67 |
+
time.sleep(30)
|
| 68 |
+
if not llm_stats_running:
|
| 69 |
+
break
|
| 70 |
+
stats = get_llm_stats()
|
| 71 |
+
if stats:
|
| 72 |
+
thread_safe_print(f"\n📊 [LLM Stats] 总调用: {stats['total_calls']} | "
|
| 73 |
+
f"平均: {stats['avg_time']:.2f}s | "
|
| 74 |
+
f"最近10次: {stats['recent_avg']:.2f}s | "
|
| 75 |
+
f"最小: {stats['min_time']:.2f}s | "
|
| 76 |
+
f"最大: {stats['max_time']:.2f}s")
|
| 77 |
+
|
| 78 |
+
def query_llm(prompt: str) -> str:
|
| 79 |
+
"""
|
| 80 |
+
Query LLM API with a prompt
|
| 81 |
+
Args:
|
| 82 |
+
prompt: The prompt to send to LLM
|
| 83 |
+
Returns:
|
| 84 |
+
str: The response from LLM
|
| 85 |
+
"""
|
| 86 |
+
headers = {
|
| 87 |
+
'Authorization': f'Bearer {API_KEY}',
|
| 88 |
+
'Content-Type': 'application/json'
|
| 89 |
+
}
|
| 90 |
+
|
| 91 |
+
data = {
|
| 92 |
+
'model': 'deepseek-v3.2',
|
| 93 |
+
'messages': [
|
| 94 |
+
{
|
| 95 |
+
'role': 'system',
|
| 96 |
+
'content': 'You are a senior data analyst and visualization expert with deep knowledge of real-world statistics, industry benchmarks, and data patterns. Generate realistic, diverse data that reflects authentic patterns found in published reports and research. Always return valid JSON format only when requested.'
|
| 97 |
+
},
|
| 98 |
+
{
|
| 99 |
+
'role': 'user',
|
| 100 |
+
'content': prompt
|
| 101 |
+
}
|
| 102 |
+
],
|
| 103 |
+
'temperature': 0.85
|
| 104 |
+
}
|
| 105 |
+
|
| 106 |
+
start_time = time.time()
|
| 107 |
+
|
| 108 |
+
try:
|
| 109 |
+
response = requests.post(
|
| 110 |
+
f'{API_PROVIDER}/chat/completions',
|
| 111 |
+
headers=headers,
|
| 112 |
+
json=data,
|
| 113 |
+
timeout=120
|
| 114 |
+
)
|
| 115 |
+
response.raise_for_status()
|
| 116 |
+
|
| 117 |
+
result = response.json()
|
| 118 |
+
content = result['choices'][0]['message']['content'].strip()
|
| 119 |
+
|
| 120 |
+
# 记录响应时间
|
| 121 |
+
elapsed = time.time() - start_time
|
| 122 |
+
with llm_stats_lock:
|
| 123 |
+
llm_response_times.append(elapsed)
|
| 124 |
+
|
| 125 |
+
return content
|
| 126 |
+
|
| 127 |
+
except requests.exceptions.Timeout:
|
| 128 |
+
elapsed = time.time() - start_time
|
| 129 |
+
with llm_stats_lock:
|
| 130 |
+
llm_response_times.append(elapsed)
|
| 131 |
+
thread_safe_print("❌ LLM API 超时(120秒)")
|
| 132 |
+
return None
|
| 133 |
+
except requests.exceptions.HTTPError as e:
|
| 134 |
+
elapsed = time.time() - start_time
|
| 135 |
+
with llm_stats_lock:
|
| 136 |
+
llm_response_times.append(elapsed)
|
| 137 |
+
thread_safe_print(f"❌ LLM API HTTP 错误: {e}")
|
| 138 |
+
if hasattr(e.response, 'text'):
|
| 139 |
+
thread_safe_print(f" 响应: {e.response.text[:200]}")
|
| 140 |
+
return None
|
| 141 |
+
except requests.exceptions.RequestException as e:
|
| 142 |
+
thread_safe_print(f"❌ LLM API 请求错误: {e}")
|
| 143 |
+
return None
|
| 144 |
+
except KeyError as e:
|
| 145 |
+
thread_safe_print(f"❌ LLM API 响应格式错误: {e}")
|
| 146 |
+
return None
|
| 147 |
+
except Exception as e:
|
| 148 |
+
thread_safe_print(f"❌ 查询 LLM 时出错: {e}")
|
| 149 |
+
return None
|
| 150 |
+
|
| 151 |
+
# Data facts dictionary
|
| 152 |
+
datafacts = {
|
| 153 |
+
"trend": {
|
| 154 |
+
"increase": "Increasing trend",
|
| 155 |
+
"decrease": "Decreasing trend",
|
| 156 |
+
"stable": "Stable trend",
|
| 157 |
+
"increase_then_decrease": "Increase then decrease",
|
| 158 |
+
"decrease_then_increase": "Decrease then increase",
|
| 159 |
+
"fluctuation": "Fluctuating trend"
|
| 160 |
+
},
|
| 161 |
+
"proportion": {
|
| 162 |
+
"majority": "Majority",
|
| 163 |
+
"minority": "Minority"
|
| 164 |
+
},
|
| 165 |
+
"value": {
|
| 166 |
+
"total": "Total",
|
| 167 |
+
"average": "Average",
|
| 168 |
+
"maximum": "Maximum",
|
| 169 |
+
"minimum": "Minimum"
|
| 170 |
+
},
|
| 171 |
+
"comparison": {
|
| 172 |
+
"average_higher": "Higher average value compared to others",
|
| 173 |
+
"average_lower": "Lower average value compared to others",
|
| 174 |
+
"significant_difference": "Significant difference compared to other categories"
|
| 175 |
+
},
|
| 176 |
+
"change": {
|
| 177 |
+
"sudden_increase": "Significantly higher value compared to the previous value",
|
| 178 |
+
"sudden_decrease": "Significantly lower value compared to the previous value",
|
| 179 |
+
},
|
| 180 |
+
"correlation": {
|
| 181 |
+
"positive": "Positive correlation",
|
| 182 |
+
"negative": "Negative correlation"
|
| 183 |
+
},
|
| 184 |
+
"rank": {
|
| 185 |
+
"first": "First",
|
| 186 |
+
"second": "Second",
|
| 187 |
+
"third": "Third",
|
| 188 |
+
"last": "Last"
|
| 189 |
+
}
|
| 190 |
+
}
|
| 191 |
+
|
| 192 |
+
def load_themes(file_path: str) -> List[Dict]:
|
| 193 |
+
"""Load themes from JSON file"""
|
| 194 |
+
with open(file_path, 'r', encoding='utf-8') as f:
|
| 195 |
+
return json.load(f)
|
| 196 |
+
def generate_scenarios_for_theme(theme: Dict, num_scenarios: int = 5) -> List[str]:
|
| 197 |
+
"""Step 1: Generate specific scenarios for a given theme
|
| 198 |
+
|
| 199 |
+
Args:
|
| 200 |
+
theme: 主题字典
|
| 201 |
+
num_scenarios: 要生成的场景数量,默认为5个
|
| 202 |
+
"""
|
| 203 |
+
prompt = f"""As a senior data journalist creating infographics for major publications (Bloomberg, The Economist, NYT), generate {num_scenarios} compelling visualization scenarios for: "{theme['theme']}" ({theme['description']})
|
| 204 |
+
|
| 205 |
+
**SCENARIO DIVERSITY MATRIX** (each scenario should hit different cells):
|
| 206 |
+
|
| 207 |
+
| Dimension | Options to Vary |
|
| 208 |
+
|-----------|-----------------|
|
| 209 |
+
| Geographic Scope | Global comparison, Regional (EU/Asia/Americas), National, City-level, Local |
|
| 210 |
+
| Time Frame | Historical (10+ years), Recent trends (2-5 years), Current snapshot, Future projection |
|
| 211 |
+
| Subject Type | Countries, Companies, Industries, Demographics, Products, Behaviors |
|
| 212 |
+
| Analysis Angle | Ranking, Comparison, Distribution, Change over time, Correlation, Breakdown |
|
| 213 |
+
| Audience | Executives, Policymakers, Consumers, Researchers, General public |
|
| 214 |
+
| Data Source Type | Government stats, Industry reports, Surveys, Academic research, Financial data |
|
| 215 |
+
|
| 216 |
+
**SCENARIO QUALITY REQUIREMENTS:**
|
| 217 |
+
1. Each scenario must have a clear "story hook" - what makes this data interesting or surprising?
|
| 218 |
+
2. Specify concrete analysis subjects (e.g., "Fortune 500 companies" not just "companies")
|
| 219 |
+
3. Include realistic data sources or contexts (e.g., "based on WHO 2023 data")
|
| 220 |
+
4. Make scenarios timely - reference recent events, emerging trends, or evergreen insights
|
| 221 |
+
5. Each scenario should be 20-35 words with specific details
|
| 222 |
+
|
| 223 |
+
**AVOID:**
|
| 224 |
+
- Generic scenarios without specific subjects
|
| 225 |
+
- Repetitive geographic or temporal scopes
|
| 226 |
+
- Abstract or theoretical framings
|
| 227 |
+
- Scenarios that couldn't be backed by real data
|
| 228 |
+
|
| 229 |
+
**EXAMPLE GOOD SCENARIOS:**
|
| 230 |
+
- "Comparing semiconductor manufacturing capacity across Taiwan, South Korea, US, and China from 2018-2024, showing the impact of CHIPS Act investments"
|
| 231 |
+
- "How Gen Z vs Millennials allocate monthly entertainment budgets across streaming, gaming, concerts, and dining based on 2023 consumer spending surveys"
|
| 232 |
+
- "European cities ranked by cost of living vs quality of life index, highlighting affordable livable alternatives to London and Paris"
|
| 233 |
+
|
| 234 |
+
FORMAT: Return ONLY a numbered list (1-{num_scenarios}), one scenario per line. No explanations.
|
| 235 |
+
"""
|
| 236 |
+
|
| 237 |
+
response = query_llm(prompt)
|
| 238 |
+
if not response:
|
| 239 |
+
return []
|
| 240 |
+
|
| 241 |
+
scenarios = []
|
| 242 |
+
for line in response.split('\n'):
|
| 243 |
+
line = line.strip()
|
| 244 |
+
if line and (line[0].isdigit() or line.lower().startswith('- ')):
|
| 245 |
+
scenario = line.lstrip('0123456789.- ').strip()
|
| 246 |
+
if scenario:
|
| 247 |
+
scenarios.append(scenario)
|
| 248 |
+
|
| 249 |
+
return scenarios[:num_scenarios]
|
| 250 |
+
|
| 251 |
+
def select_relevant_datafacts(theme: Dict, scenario: str) -> List[Dict]:
|
| 252 |
+
"""Step 2: Select relevant datafacts for the theme and scenario"""
|
| 253 |
+
# Convert datafacts to a flat list for easier processing
|
| 254 |
+
flat_datafacts = []
|
| 255 |
+
for category, facts in datafacts.items():
|
| 256 |
+
for key, description in facts.items():
|
| 257 |
+
flat_datafacts.append({
|
| 258 |
+
"category": category,
|
| 259 |
+
"key": key,
|
| 260 |
+
"description": description
|
| 261 |
+
})
|
| 262 |
+
|
| 263 |
+
prompt = f"""As a data storytelling expert, select the 5 most compelling data facts to highlight in this visualization:
|
| 264 |
+
|
| 265 |
+
**CONTEXT:**
|
| 266 |
+
- THEME: {theme['theme']}
|
| 267 |
+
- SCENARIO: {scenario}
|
| 268 |
+
|
| 269 |
+
**TASK:**
|
| 270 |
+
Select exactly 5 data facts that would create the most impactful and insightful visualization. Consider:
|
| 271 |
+
|
| 272 |
+
1. **Story Arc**: Choose facts that together tell a coherent narrative
|
| 273 |
+
2. **Diversity**: Mix different types (trends, comparisons, values, rankings)
|
| 274 |
+
3. **Relevance**: Facts should directly support the scenario's key message
|
| 275 |
+
4. **Visual Impact**: Facts that translate well into compelling visuals
|
| 276 |
+
5. **Insight Value**: Prioritize facts that reveal non-obvious patterns
|
| 277 |
+
|
| 278 |
+
**SELECTION STRATEGY by Scenario Type:**
|
| 279 |
+
- Time-based analysis → Prioritize: trend, change, value facts
|
| 280 |
+
- Comparison analysis → Prioritize: comparison, rank, proportion facts
|
| 281 |
+
- Distribution analysis → Prioritize: proportion, value, comparison facts
|
| 282 |
+
- Correlation analysis → Prioritize: correlation, trend, change facts
|
| 283 |
+
|
| 284 |
+
**AVAILABLE FACTS:**
|
| 285 |
+
{json.dumps(flat_datafacts, indent=2)}
|
| 286 |
+
|
| 287 |
+
**FORMAT:**
|
| 288 |
+
Return ONLY a numbered list (1-5):
|
| 289 |
+
1. [Category]: [Description]
|
| 290 |
+
|
| 291 |
+
No explanations.
|
| 292 |
+
"""
|
| 293 |
+
|
| 294 |
+
response = query_llm(prompt)
|
| 295 |
+
if not response:
|
| 296 |
+
return []
|
| 297 |
+
|
| 298 |
+
selected_facts = []
|
| 299 |
+
for line in response.split('\n'):
|
| 300 |
+
line = line.strip()
|
| 301 |
+
if line:
|
| 302 |
+
for fact in flat_datafacts:
|
| 303 |
+
if fact['description'].lower() in line.lower():
|
| 304 |
+
selected_facts.append(fact)
|
| 305 |
+
break
|
| 306 |
+
|
| 307 |
+
return selected_facts[:3]
|
| 308 |
+
|
| 309 |
+
def extract_json_from_response(response: str) -> str:
|
| 310 |
+
"""Extract JSON from LLM response using regex"""
|
| 311 |
+
if not response:
|
| 312 |
+
return "{}"
|
| 313 |
+
|
| 314 |
+
# Try to find JSON content between triple backticks
|
| 315 |
+
json_match = re.search(r'```(?:json)?\s*([\s\S]*?)\s*```', response)
|
| 316 |
+
if json_match:
|
| 317 |
+
extracted = json_match.group(1).strip()
|
| 318 |
+
return json.loads(extracted)
|
| 319 |
+
|
| 320 |
+
# Try to find content that looks like a JSON object
|
| 321 |
+
json_match = re.search(r'(\{[\s\S]*\})', response)
|
| 322 |
+
if json_match:
|
| 323 |
+
extracted = json_match.group(1).strip()
|
| 324 |
+
return json.loads(extracted)
|
| 325 |
+
|
| 326 |
+
# Return the original response if no JSON pattern found
|
| 327 |
+
return response.strip()
|
| 328 |
+
|
| 329 |
+
def parse_json_safely(text: str) -> Dict:
|
| 330 |
+
"""Parse JSON from text safely with error handling"""
|
| 331 |
+
if not text:
|
| 332 |
+
thread_safe_print(f"Warning: Empty text to parse as JSON")
|
| 333 |
+
return {}
|
| 334 |
+
|
| 335 |
+
return extract_json_from_response(text)
|
| 336 |
+
|
| 337 |
+
def validate_generated_data(generated_data, column_recommendation):
|
| 338 |
+
"""验证生成的数据是否有效"""
|
| 339 |
+
validation = {
|
| 340 |
+
"is_valid": True,
|
| 341 |
+
"issues": []
|
| 342 |
+
}
|
| 343 |
+
|
| 344 |
+
# 检查数据是否为空
|
| 345 |
+
if not generated_data or "data" not in generated_data or not generated_data["data"]:
|
| 346 |
+
validation["is_valid"] = False
|
| 347 |
+
validation["issues"].append("Empty data array")
|
| 348 |
+
return validation
|
| 349 |
+
|
| 350 |
+
# 获取期望的列
|
| 351 |
+
expected_columns = [col["name"] for col in column_recommendation.get("columns", [])]
|
| 352 |
+
|
| 353 |
+
# 检查每行数据
|
| 354 |
+
for i, row in enumerate(generated_data["data"]):
|
| 355 |
+
# 检查是否包含所有列
|
| 356 |
+
for col in expected_columns:
|
| 357 |
+
if col not in row:
|
| 358 |
+
validation["is_valid"] = False
|
| 359 |
+
validation["issues"].append(f"Row {i} missing column '{col}'")
|
| 360 |
+
|
| 361 |
+
# 检查数值列的数据类型
|
| 362 |
+
for col in column_recommendation.get("columns", []):
|
| 363 |
+
if col["name"] in row and col["data_type"] == "numerical":
|
| 364 |
+
if not isinstance(row[col["name"]], (int, float)):
|
| 365 |
+
validation["is_valid"] = False
|
| 366 |
+
validation["issues"].append(f"Row {i}, column '{col['name']}' has non-numeric value: {row[col['name']]}")
|
| 367 |
+
|
| 368 |
+
return validation
|
| 369 |
+
|
| 370 |
+
def recommend_columns(theme: Dict, scenario: str, selected_fact: Dict) -> Dict:
|
| 371 |
+
"""Step 3: Recommend column structure based on theme, scenario and selected facts"""
|
| 372 |
+
facts_str = f"- {selected_fact['category']}: {selected_fact['description']}"
|
| 373 |
+
|
| 374 |
+
prompt = f"""As a data architect designing schemas for business intelligence dashboards, recommend the optimal column structure:
|
| 375 |
+
|
| 376 |
+
**CONTEXT:**
|
| 377 |
+
- THEME: {theme['theme']}
|
| 378 |
+
- SCENARIO: {scenario}
|
| 379 |
+
- KEY DATA FACT: {facts_str}
|
| 380 |
+
|
| 381 |
+
**COLUMN COMBINATION OPTIONS:**
|
| 382 |
+
| Combination | Best For | Example |
|
| 383 |
+
|-------------|----------|---------|
|
| 384 |
+
| categorical + numerical | Rankings, comparisons | Countries by GDP |
|
| 385 |
+
| categorical + numerical + numerical | Multi-metric comparisons | Companies: Revenue vs Profit |
|
| 386 |
+
| categorical + numerical + categorical | Grouped comparisons | Products by Revenue by Category |
|
| 387 |
+
| temporal + numerical | Time series, trends | Monthly sales 2020-2024 |
|
| 388 |
+
| temporal + numerical + categorical | Multi-series trends | Quarterly revenue by region |
|
| 389 |
+
| categorical + numerical + temporal | Snapshot comparisons | Country metrics across periods |
|
| 390 |
+
|
| 391 |
+
**DECISION LOGIC:**
|
| 392 |
+
1. Does the scenario involve change over TIME? → Use temporal column
|
| 393 |
+
2. Does it compare CATEGORIES at a single point? → categorical + numerical
|
| 394 |
+
3. Does it need MULTIPLE METRICS per item? → Add second numerical column
|
| 395 |
+
4. Does it need to SEGMENT by groups? → Add categorical column
|
| 396 |
+
5. PREFER SIMPLER combinations - only add columns if truly needed
|
| 397 |
+
|
| 398 |
+
**COLUMN NAMING RULES - KEEP IT SHORT:**
|
| 399 |
+
|
| 400 |
+
✓ GOOD column names (short, clear):
|
| 401 |
+
- "Country", "Company", "Region", "City", "Industry"
|
| 402 |
+
- "Revenue", "Growth Rate", "Market Share", "GDP", "Population"
|
| 403 |
+
- "Corruption Index", "Democracy Index", "Happiness Score"
|
| 404 |
+
- "Year", "Quarter", "Month"
|
| 405 |
+
|
| 406 |
+
✗ BAD column names (too long, avoid):
|
| 407 |
+
- "Corruption Perceptions Index 2023 (Transparency International, 0-100)" → Use "Corruption Index"
|
| 408 |
+
- "EIU Democracy Index 2023 (score 0-10)" → Use "Democracy Index"
|
| 409 |
+
- "Annual Revenue in USD Millions" → Use "Revenue"
|
| 410 |
+
|
| 411 |
+
**DESCRIPTION RULES - ONE SHORT SENTENCE:**
|
| 412 |
+
- Keep descriptions brief and informative (5-15 words max)
|
| 413 |
+
- Example: "Annual company revenue" not "Annual revenue figures for Fortune 500 companies based on fiscal year 2023 reports"
|
| 414 |
+
- Example: "Corruption perception score by country" not "Transparency International's Corruption Perceptions Index measuring public sector corruption levels"
|
| 415 |
+
|
| 416 |
+
**UNIT RULES - SYMBOL ONLY:**
|
| 417 |
+
- Use ONLY unit symbols: $, €, £, ¥, %, K, M, B, km, kg, °C, kWh, ms, etc.
|
| 418 |
+
- For dimensionless metrics (index, score, ratio): leave unit as empty string ""
|
| 419 |
+
- ✗ WRONG: "index", "score", "points", "0-100", "0-10", "USD millions"
|
| 420 |
+
- ✓ CORRECT: "", "%", "$", "M", "B"
|
| 421 |
+
|
| 422 |
+
**FORMAT:**
|
| 423 |
+
Return ONLY valid JSON (no markdown):
|
| 424 |
+
{{
|
| 425 |
+
"selected_combination": "combination_name",
|
| 426 |
+
"columns": [
|
| 427 |
+
{{
|
| 428 |
+
"name": "ShortName",
|
| 429 |
+
"description": "Brief one-sentence description",
|
| 430 |
+
"data_type": "categorical/numerical/temporal",
|
| 431 |
+
"unit": "$ or % or M or empty string"
|
| 432 |
+
}}
|
| 433 |
+
]
|
| 434 |
+
}}
|
| 435 |
+
|
| 436 |
+
**EXAMPLE OUTPUT:**
|
| 437 |
+
{{
|
| 438 |
+
"selected_combination": "categorical + numerical",
|
| 439 |
+
"columns": [
|
| 440 |
+
{{"name": "Country", "description": "G20 member countries", "data_type": "categorical", "unit": ""}},
|
| 441 |
+
{{"name": "GDP", "description": "Gross domestic product", "data_type": "numerical", "unit": "B"}}
|
| 442 |
+
]
|
| 443 |
+
}}
|
| 444 |
+
"""
|
| 445 |
+
|
| 446 |
+
response = query_llm(prompt)
|
| 447 |
+
if not response:
|
| 448 |
+
return {"selected_combination": COLUMN_COMBINATIONS[0], "columns": []}
|
| 449 |
+
|
| 450 |
+
result = parse_json_safely(response)
|
| 451 |
+
try:
|
| 452 |
+
# Validate the structure to ensure it has required keys
|
| 453 |
+
if "selected_combination" not in result:
|
| 454 |
+
result["selected_combination"] = COLUMN_COMBINATIONS[0]
|
| 455 |
+
if "columns" not in result:
|
| 456 |
+
result["columns"] = []
|
| 457 |
+
# Add unit field if missing
|
| 458 |
+
for col in result["columns"]:
|
| 459 |
+
if "unit" not in col and col["data_type"] == "numerical":
|
| 460 |
+
# Extract unit from description if possible
|
| 461 |
+
desc = col["description"]
|
| 462 |
+
if "%" in desc:
|
| 463 |
+
col["unit"] = "%"
|
| 464 |
+
elif "$" in desc:
|
| 465 |
+
col["unit"] = "$"
|
| 466 |
+
elif "£" in desc:
|
| 467 |
+
col["unit"] = "£"
|
| 468 |
+
elif "€" in desc:
|
| 469 |
+
col["unit"] = "€"
|
| 470 |
+
else:
|
| 471 |
+
col["unit"] = ""
|
| 472 |
+
elif "unit" not in col:
|
| 473 |
+
col["unit"] = ""
|
| 474 |
+
return result
|
| 475 |
+
except Exception as e:
|
| 476 |
+
thread_safe_print(f"Error parsing column recommendation: {e}")
|
| 477 |
+
print("response: ", result)
|
| 478 |
+
# Return a default structure
|
| 479 |
+
return {
|
| 480 |
+
"selected_combination": COLUMN_COMBINATIONS[0],
|
| 481 |
+
"columns": [
|
| 482 |
+
{
|
| 483 |
+
"name": "Category",
|
| 484 |
+
"description": "Main category for the data",
|
| 485 |
+
"data_type": "categorical",
|
| 486 |
+
"unit": ""
|
| 487 |
+
},
|
| 488 |
+
{
|
| 489 |
+
"name": "Value",
|
| 490 |
+
"description": "Numerical value",
|
| 491 |
+
"data_type": "numerical",
|
| 492 |
+
"unit": ""
|
| 493 |
+
}
|
| 494 |
+
]
|
| 495 |
+
}
|
| 496 |
+
|
| 497 |
+
def generate_data(theme: Dict, scenario: str, selected_facts: List[Dict], column_recommendation: Dict, times = 1) -> List[Dict]:
|
| 498 |
+
"""生成数据"""
|
| 499 |
+
results = []
|
| 500 |
+
for _ in range(times):
|
| 501 |
+
facts_str = "\n".join([f"- {fact['category']}: {fact['description']}" for fact in selected_facts])
|
| 502 |
+
columns_str = "\n".join([f"- {col['name']} ({col['data_type']}): {col['description']}" for col in column_recommendation['columns']])
|
| 503 |
+
|
| 504 |
+
# Determine data size constraints based on column combination using ranges
|
| 505 |
+
combination = column_recommendation['selected_combination']
|
| 506 |
+
constraints = []
|
| 507 |
+
|
| 508 |
+
# Generate range constraints for different combinations
|
| 509 |
+
if combination == "categorical + numerical" or combination == "categorical + numerical + numerical":
|
| 510 |
+
constraints.append("First categorical column should have between 8-20 unique values")
|
| 511 |
+
|
| 512 |
+
elif combination == "categorical + numerical + categorical" or combination == "categorical + numerical + numerical + categorical":
|
| 513 |
+
constraints.append("First categorical column should have between 8-20 unique values")
|
| 514 |
+
constraints.append("Second categorical column should have between 2-6 unique values")
|
| 515 |
+
constraints.append("Total unique combinations should not exceed 60")
|
| 516 |
+
|
| 517 |
+
elif combination == "temporal + numerical":
|
| 518 |
+
constraints.append("Number of time points should be between 8-20")
|
| 519 |
+
|
| 520 |
+
elif combination == "temporal + numerical + categorical":
|
| 521 |
+
constraints.append("Number of time points should be between 5-20")
|
| 522 |
+
constraints.append("Number of categories should be between 2-7")
|
| 523 |
+
|
| 524 |
+
elif combination == "categorical + numerical + temporal":
|
| 525 |
+
constraints.append("First categorical column should have between 5-20 unique values")
|
| 526 |
+
constraints.append("Number of time points should be between 2-4")
|
| 527 |
+
|
| 528 |
+
constraints_str = "\n".join([f"- {constraint}" for constraint in constraints])
|
| 529 |
+
|
| 530 |
+
# 在提示中强调组合完整性和真实性
|
| 531 |
+
prompt = f"""You are a statistician at a major research institution creating synthetic data that mirrors real-world patterns for this visualization:
|
| 532 |
+
|
| 533 |
+
**VISUALIZATION CONTEXT:**
|
| 534 |
+
- THEME: {theme['theme']}
|
| 535 |
+
- SCENARIO: {scenario}
|
| 536 |
+
- KEY DATA FACTS TO HIGHLIGHT: {facts_str}
|
| 537 |
+
|
| 538 |
+
**COLUMN STRUCTURE:**
|
| 539 |
+
{columns_str}
|
| 540 |
+
|
| 541 |
+
**DATA SIZE REQUIREMENTS:**
|
| 542 |
+
{constraints_str}
|
| 543 |
+
|
| 544 |
+
**REALISM REQUIREMENTS - CRITICAL:**
|
| 545 |
+
|
| 546 |
+
1. **Categorical Values - Use REAL names:**
|
| 547 |
+
- Countries: Use actual country names (USA, Germany, Japan, Brazil, etc.)
|
| 548 |
+
- Companies: Use real company names (Apple, Toyota, Samsung, Nestlé, etc.)
|
| 549 |
+
- Cities: Use real city names (Tokyo, New York, London, Shanghai, etc.)
|
| 550 |
+
- Industries: Use standard industry names (Healthcare, Technology, Finance, etc.)
|
| 551 |
+
- Products: Use realistic product categories or actual brands
|
| 552 |
+
- Demographics: Use realistic age groups, income brackets, education levels
|
| 553 |
+
|
| 554 |
+
2. **Numerical Values - Match real-world magnitudes:**
|
| 555 |
+
- GDP: Trillions for large countries, billions for smaller ones
|
| 556 |
+
- Population: Match actual country/city scales
|
| 557 |
+
- Percentages: Realistic ranges (market share 1-40%, growth rates -5% to 15%)
|
| 558 |
+
- Prices: Match real-world price points for the category
|
| 559 |
+
- Revenue: Match industry benchmarks (tech companies in billions, local businesses in millions)
|
| 560 |
+
- Include natural variance - avoid round numbers for most values (use 47.3 not 50)
|
| 561 |
+
|
| 562 |
+
3. **Temporal Values:**
|
| 563 |
+
- Use YYYY, YYYY-MM, or YYYY-MM-DD format strictly
|
| 564 |
+
- Choose appropriate time spans (economic trends: 2015-2024, recent events: 2022-2024)
|
| 565 |
+
- Ensure chronological consistency in trends
|
| 566 |
+
|
| 567 |
+
4. **Data Patterns - Reflect reality:**
|
| 568 |
+
- Include outliers naturally (one market leader, one laggard)
|
| 569 |
+
- Show regional/cultural patterns (Asian countries often cluster, Nordic countries cluster)
|
| 570 |
+
- Respect known facts (USA/China usually top GDP, Nordic countries top happiness indices)
|
| 571 |
+
- Add natural noise - real data isn't perfectly smooth
|
| 572 |
+
|
| 573 |
+
**COMBINATION REQUIREMENTS:**
|
| 574 |
+
- When both temporal and categorical columns exist, generate data for ALL combinations
|
| 575 |
+
- Example: Years=[2020,2021,2022] × Countries=[USA,China] = 6 data points
|
| 576 |
+
|
| 577 |
+
**TITLE REQUIREMENTS:**
|
| 578 |
+
- main_title: Compelling headline that could appear in The Economist or Bloomberg (8-15 words)
|
| 579 |
+
- sub_title: Contextual detail with time period, data source style, or key finding
|
| 580 |
+
|
| 581 |
+
**FORMAT:**
|
| 582 |
+
Return ONLY valid JSON (no markdown, no explanation):
|
| 583 |
+
{{
|
| 584 |
+
"data": [
|
| 585 |
+
{{"column_name1": "value1", "column_name2": value2, ...}}
|
| 586 |
+
],
|
| 587 |
+
"main_insight": "One clear sentence stating the single most important finding from this data",
|
| 588 |
+
"description": "A comprehensive paragraph (80-150 words) that tells the complete data story. Include: (1) What the data shows - the key patterns and findings, (2) Why it matters - the significance and implications, (3) Notable outliers or surprises in the data, (4) Context that helps interpret the numbers. Write as if explaining the visualization to someone who hasn't seen it. This should read like a data journalism paragraph that could accompany the chart in a publication.",
|
| 589 |
+
"titles": {{
|
| 590 |
+
"main_title": "Publication-quality headline",
|
| 591 |
+
"sub_title": "Contextual subtitle with specifics"
|
| 592 |
+
}}
|
| 593 |
+
}}
|
| 594 |
+
"""
|
| 595 |
+
|
| 596 |
+
response = query_llm(prompt)
|
| 597 |
+
if not response:
|
| 598 |
+
continue
|
| 599 |
+
|
| 600 |
+
try:
|
| 601 |
+
result = parse_json_safely(response)
|
| 602 |
+
results.append(result)
|
| 603 |
+
except Exception as e:
|
| 604 |
+
thread_safe_print(f"Error parsing response: {e}")
|
| 605 |
+
continue
|
| 606 |
+
return results
|
| 607 |
+
|
| 608 |
+
def process_theme(theme: Dict, syn_data_dir: str) -> Dict:
|
| 609 |
+
"""处理单个主题、生成场景并保存数据"""
|
| 610 |
+
thread_safe_print(f"Processing theme: '{theme['theme']}'")
|
| 611 |
+
|
| 612 |
+
# 步骤1:生成场景
|
| 613 |
+
scenarios = generate_scenarios_for_theme(theme)
|
| 614 |
+
|
| 615 |
+
result = {
|
| 616 |
+
'theme': theme['theme'],
|
| 617 |
+
'base_description': theme['description'],
|
| 618 |
+
'main_category': theme.get('main_category', ''), # 添加main_category
|
| 619 |
+
'scenarios': []
|
| 620 |
+
}
|
| 621 |
+
|
| 622 |
+
# 处理每个场景
|
| 623 |
+
for i, scenario in enumerate(scenarios):
|
| 624 |
+
scenario_num = i + 1
|
| 625 |
+
thread_safe_print(f" Scenario {scenario_num}/{len(scenarios)}: '{scenario[:50]}...'")
|
| 626 |
+
|
| 627 |
+
selected_facts = select_relevant_datafacts(theme, scenario)
|
| 628 |
+
for fact in selected_facts:
|
| 629 |
+
try:
|
| 630 |
+
column_recommendation = recommend_columns(theme, scenario, fact)
|
| 631 |
+
|
| 632 |
+
# 如果没有有效的列结构,跳过
|
| 633 |
+
if not column_recommendation or "columns" not in column_recommendation or not column_recommendation["columns"]:
|
| 634 |
+
thread_safe_print(f" No valid column structure, skipping")
|
| 635 |
+
continue
|
| 636 |
+
|
| 637 |
+
# 步骤4:生成数据
|
| 638 |
+
generated_datas = generate_data(theme, scenario, selected_facts, column_recommendation)
|
| 639 |
+
|
| 640 |
+
# 如果没有数据,跳过
|
| 641 |
+
for generated_data in generated_datas:
|
| 642 |
+
if not generated_data or "data" not in generated_data or not generated_data["data"]:
|
| 643 |
+
thread_safe_print(f" No data generated, skipping")
|
| 644 |
+
continue
|
| 645 |
+
|
| 646 |
+
# 准备场景结果
|
| 647 |
+
scenario_result = {
|
| 648 |
+
'description': generated_data.get('description', scenario),
|
| 649 |
+
'data': {
|
| 650 |
+
'data': generated_data.get('data', []),
|
| 651 |
+
'columns': column_recommendation.get('columns', []),
|
| 652 |
+
'type_combination': column_recommendation.get('selected_combination', '')
|
| 653 |
+
},
|
| 654 |
+
'metadata': {
|
| 655 |
+
'main_insight': generated_data.get('main_insight', ''),
|
| 656 |
+
'scenario': scenario,
|
| 657 |
+
'datafact': selected_facts
|
| 658 |
+
},
|
| 659 |
+
'titles': generated_data.get('titles', {'main_title': '', 'sub_title': ''})
|
| 660 |
+
}
|
| 661 |
+
|
| 662 |
+
save_individual_data(theme['theme'], scenario_result, scenario_num, syn_data_dir, theme.get('main_category', None))
|
| 663 |
+
|
| 664 |
+
thread_safe_print(f" ✓ Completed")
|
| 665 |
+
|
| 666 |
+
except Exception as e:
|
| 667 |
+
thread_safe_print(f" ✗ Error: {str(e)}")
|
| 668 |
+
continue
|
| 669 |
+
|
| 670 |
+
return result
|
| 671 |
+
|
| 672 |
+
def process_theme_wrapper(args):
|
| 673 |
+
"""Wrapper for process_theme to be used with ProcessPoolExecutor"""
|
| 674 |
+
theme, syn_data_dir, theme_idx, total_themes = args
|
| 675 |
+
thread_safe_print(f"\nProcessing theme {theme_idx+1}/{total_themes}: '{theme['theme']}'")
|
| 676 |
+
try:
|
| 677 |
+
theme_result = process_theme(theme, syn_data_dir)
|
| 678 |
+
thread_safe_print(f"✓ Completed processing for theme {theme_idx+1}/{total_themes}: '{theme['theme']}'")
|
| 679 |
+
return theme['theme'], theme_result
|
| 680 |
+
except Exception as e:
|
| 681 |
+
thread_safe_print(f"✗ Error processing theme '{theme['theme']}': {e}")
|
| 682 |
+
import traceback
|
| 683 |
+
thread_safe_print(f"Stack trace: {traceback.format_exc()}")
|
| 684 |
+
return theme['theme'], {
|
| 685 |
+
'theme': theme['theme'],
|
| 686 |
+
'base_description': theme['description'],
|
| 687 |
+
'main_category': theme.get('main_category', ''), # 添加main_category
|
| 688 |
+
'scenarios': []
|
| 689 |
+
}
|
| 690 |
+
|
| 691 |
+
def save_results(results: Dict, output_file: str):
|
| 692 |
+
"""Save generated results to a JSON file"""
|
| 693 |
+
with print_lock: # Use lock to prevent file corruption from multiple threads
|
| 694 |
+
with open(output_file, 'w', encoding='utf-8') as f:
|
| 695 |
+
json.dump(results, f, indent=2, ensure_ascii=False)
|
| 696 |
+
|
| 697 |
+
def save_individual_data(theme_name: str, scenario_data: Dict, index: int, syn_data_dir: str, main_category: str = None):
|
| 698 |
+
"""Save individual scenario data to separate JSON files in syn_data directory"""
|
| 699 |
+
# Create safe filename from main_category (if available) or theme
|
| 700 |
+
if main_category:
|
| 701 |
+
prefix = "".join(c for c in main_category if c.isalnum() or c in [' ', '_']).strip().replace(' ', '_')
|
| 702 |
+
else:
|
| 703 |
+
prefix = "".join(c for c in theme_name if c.isalnum() or c in [' ', '_']).strip().replace(' ', '_')
|
| 704 |
+
|
| 705 |
+
timestamp = datetime.now().strftime("%H%M%S")
|
| 706 |
+
filename = f"{prefix}_scenario_{index}_{timestamp}_{random.randint(10000, 99999)}.json"
|
| 707 |
+
filepath = os.path.join(syn_data_dir, filename)
|
| 708 |
+
|
| 709 |
+
try:
|
| 710 |
+
with print_lock: # Use lock to prevent file corruption from multiple threads
|
| 711 |
+
with open(filepath, 'w', encoding='utf-8') as f:
|
| 712 |
+
json.dump(scenario_data, f, indent=2, ensure_ascii=False)
|
| 713 |
+
return True
|
| 714 |
+
except Exception as e:
|
| 715 |
+
thread_safe_print(f"Error saving individual data file {filepath}: {e}")
|
| 716 |
+
return False
|
| 717 |
+
|
| 718 |
+
def main():
|
| 719 |
+
global llm_stats_running
|
| 720 |
+
|
| 721 |
+
# File paths
|
| 722 |
+
current_dir = os.path.dirname(os.path.abspath(__file__))
|
| 723 |
+
theme_file = os.path.join(current_dir, 'theme_new.json')
|
| 724 |
+
output_file = os.path.join(current_dir, 'theme_analysis.json')
|
| 725 |
+
|
| 726 |
+
thread_safe_print(f"Starting data generation process")
|
| 727 |
+
thread_safe_print(f"Theme file: {theme_file}")
|
| 728 |
+
thread_safe_print(f"Output file: {output_file}")
|
| 729 |
+
|
| 730 |
+
# 启动 LLM 统计报告线程
|
| 731 |
+
stats_thread = threading.Thread(target=llm_stats_reporter, daemon=True)
|
| 732 |
+
stats_thread.start()
|
| 733 |
+
thread_safe_print("📊 LLM 响应时间监控已启动(每30秒报告一次)")
|
| 734 |
+
|
| 735 |
+
# Create syn_data directory if it doesn't exist
|
| 736 |
+
syn_data_dir = os.path.join(current_dir, 'syn_data')
|
| 737 |
+
print('Creating syn_data directory...', syn_data_dir)
|
| 738 |
+
if not os.path.exists(syn_data_dir):
|
| 739 |
+
os.makedirs(syn_data_dir)
|
| 740 |
+
thread_safe_print(f"Created directory: {syn_data_dir}")
|
| 741 |
+
|
| 742 |
+
# Load themes
|
| 743 |
+
try:
|
| 744 |
+
thread_safe_print(f"Loading themes from {theme_file}...")
|
| 745 |
+
themes = load_themes(theme_file)
|
| 746 |
+
thread_safe_print(f"Loaded {len(themes)} themes")
|
| 747 |
+
except Exception as e:
|
| 748 |
+
thread_safe_print(f"Error loading themes: {e}")
|
| 749 |
+
return
|
| 750 |
+
|
| 751 |
+
# Prepare for parallel processing
|
| 752 |
+
results = {}
|
| 753 |
+
NUM_WORKERS = 20 # Number of concurrent threads
|
| 754 |
+
thread_safe_print(f"Using {NUM_WORKERS} concurrent workers for processing")
|
| 755 |
+
|
| 756 |
+
# Create arguments for each theme processing task
|
| 757 |
+
theme_args = [(theme, syn_data_dir, idx, len(themes)) for idx, theme in enumerate(themes)]
|
| 758 |
+
|
| 759 |
+
# Process themes in parallel
|
| 760 |
+
with concurrent.futures.ThreadPoolExecutor(max_workers=NUM_WORKERS) as executor:
|
| 761 |
+
# Submit all tasks and get futures
|
| 762 |
+
future_to_theme = {executor.submit(process_theme_wrapper, args): args[0]['theme'] for args in theme_args}
|
| 763 |
+
|
| 764 |
+
# Process results as they complete
|
| 765 |
+
for future in tqdm(concurrent.futures.as_completed(future_to_theme), total=len(themes), desc="Processing themes"):
|
| 766 |
+
theme_name = future_to_theme[future]
|
| 767 |
+
try:
|
| 768 |
+
theme_name, theme_result = future.result()
|
| 769 |
+
results[theme_name] = theme_result
|
| 770 |
+
|
| 771 |
+
# Save overall progress after each theme
|
| 772 |
+
save_results(results, output_file)
|
| 773 |
+
thread_safe_print(f"Updated overall progress file with theme '{theme_name}'")
|
| 774 |
+
|
| 775 |
+
except Exception as e:
|
| 776 |
+
thread_safe_print(f"Error processing theme '{theme_name}': {e}")
|
| 777 |
+
|
| 778 |
+
# 停止 LLM 统计报告线程
|
| 779 |
+
llm_stats_running = False
|
| 780 |
+
|
| 781 |
+
# 输出最终 LLM 统计
|
| 782 |
+
final_stats = get_llm_stats()
|
| 783 |
+
|
| 784 |
+
thread_safe_print(f"\n========== SUMMARY ==========")
|
| 785 |
+
thread_safe_print(f"Processed {len(results)} themes")
|
| 786 |
+
total_scenarios = sum(len(theme_data['scenarios']) for theme_data in results.values())
|
| 787 |
+
thread_safe_print(f"Generated {total_scenarios} scenarios in total")
|
| 788 |
+
thread_safe_print(f"Full analysis saved to: {output_file}")
|
| 789 |
+
thread_safe_print(f"Individual scenario data saved to: {syn_data_dir}")
|
| 790 |
+
|
| 791 |
+
if final_stats:
|
| 792 |
+
thread_safe_print(f"\n📊 LLM 调用统计:")
|
| 793 |
+
thread_safe_print(f" 总调用次数: {final_stats['total_calls']}")
|
| 794 |
+
thread_safe_print(f" 平均响应时间: {final_stats['avg_time']:.2f}s")
|
| 795 |
+
thread_safe_print(f" 最小响应时间: {final_stats['min_time']:.2f}s")
|
| 796 |
+
thread_safe_print(f" 最大响应时间: {final_stats['max_time']:.2f}s")
|
| 797 |
+
|
| 798 |
+
thread_safe_print(f"============================\n")
|
| 799 |
+
|
| 800 |
+
if __name__ == "__main__":
|
| 801 |
+
main()
|
data_generator/theme.json
ADDED
|
@@ -0,0 +1,1502 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"id": 1,
|
| 4 |
+
"theme": "Global Economic Comparisons",
|
| 5 |
+
"description": "Comparing economic indicators across countries"
|
| 6 |
+
},
|
| 7 |
+
{
|
| 8 |
+
"id": 2,
|
| 9 |
+
"theme": "Technology Adoption Trends",
|
| 10 |
+
"description": "Showing how new technologies are adopted over time"
|
| 11 |
+
},
|
| 12 |
+
{
|
| 13 |
+
"id": 3,
|
| 14 |
+
"theme": "Consumer Behavior Patterns",
|
| 15 |
+
"description": "Revealing purchasing habits across demographics"
|
| 16 |
+
},
|
| 17 |
+
{
|
| 18 |
+
"id": 4,
|
| 19 |
+
"theme": "Climate Change Indicators",
|
| 20 |
+
"description": "Tracking environmental metrics over time"
|
| 21 |
+
},
|
| 22 |
+
{
|
| 23 |
+
"id": 5,
|
| 24 |
+
"theme": "Political Landscape Analysis",
|
| 25 |
+
"description": "Examining political affiliations and voting patterns"
|
| 26 |
+
},
|
| 27 |
+
{
|
| 28 |
+
"id": 6,
|
| 29 |
+
"theme": "Healthcare Access Disparities",
|
| 30 |
+
"description": "Comparing healthcare availability across regions"
|
| 31 |
+
},
|
| 32 |
+
{
|
| 33 |
+
"id": 7,
|
| 34 |
+
"theme": "Education Performance Metrics",
|
| 35 |
+
"description": "Analyzing educational outcomes globally"
|
| 36 |
+
},
|
| 37 |
+
{
|
| 38 |
+
"id": 8,
|
| 39 |
+
"theme": "Income Inequality Visualization",
|
| 40 |
+
"description": "Showing wealth distribution patterns"
|
| 41 |
+
},
|
| 42 |
+
{
|
| 43 |
+
"id": 9,
|
| 44 |
+
"theme": "Media Consumption Habits",
|
| 45 |
+
"description": "Revealing how people consume different media forms"
|
| 46 |
+
},
|
| 47 |
+
{
|
| 48 |
+
"id": 10,
|
| 49 |
+
"theme": "Urban Development Patterns",
|
| 50 |
+
"description": "Tracking city growth and infrastructure changes"
|
| 51 |
+
},
|
| 52 |
+
{
|
| 53 |
+
"id": 11,
|
| 54 |
+
"theme": "Digital Transformation Impact",
|
| 55 |
+
"description": "Measuring effects of digitalization on industries"
|
| 56 |
+
},
|
| 57 |
+
{
|
| 58 |
+
"id": 12,
|
| 59 |
+
"theme": "Demographic Shifts",
|
| 60 |
+
"description": "Illustrating changes in population composition"
|
| 61 |
+
},
|
| 62 |
+
{
|
| 63 |
+
"id": 13,
|
| 64 |
+
"theme": "Energy Usage Patterns",
|
| 65 |
+
"description": "Showing consumption of different energy sources"
|
| 66 |
+
},
|
| 67 |
+
{
|
| 68 |
+
"id": 14,
|
| 69 |
+
"theme": "Sports Performance Analysis",
|
| 70 |
+
"description": "Comparing athletic achievements across teams"
|
| 71 |
+
},
|
| 72 |
+
{
|
| 73 |
+
"id": 15,
|
| 74 |
+
"theme": "Corporate Financial Trends",
|
| 75 |
+
"description": "Displaying business financial metrics over time"
|
| 76 |
+
},
|
| 77 |
+
{
|
| 78 |
+
"id": 16,
|
| 79 |
+
"theme": "Social Media Influence",
|
| 80 |
+
"description": "Tracking platform usage and engagement metrics"
|
| 81 |
+
},
|
| 82 |
+
{
|
| 83 |
+
"id": 17,
|
| 84 |
+
"theme": "Food Consumption Patterns",
|
| 85 |
+
"description": "Analyzing dietary preferences across regions"
|
| 86 |
+
},
|
| 87 |
+
{
|
| 88 |
+
"id": 18,
|
| 89 |
+
"theme": "Transportation Mode Shifts",
|
| 90 |
+
"description": "Showing changes in how people travel"
|
| 91 |
+
},
|
| 92 |
+
{
|
| 93 |
+
"id": 19,
|
| 94 |
+
"theme": "Market Share Evolution",
|
| 95 |
+
"description": "Tracking how companies compete within industries"
|
| 96 |
+
},
|
| 97 |
+
{
|
| 98 |
+
"id": 20,
|
| 99 |
+
"theme": "Public Health Indicators",
|
| 100 |
+
"description": "Displaying health statistics across populations"
|
| 101 |
+
},
|
| 102 |
+
{
|
| 103 |
+
"id": 21,
|
| 104 |
+
"theme": "Religious Participation Trends",
|
| 105 |
+
"description": "Showing changes in religious activities"
|
| 106 |
+
},
|
| 107 |
+
{
|
| 108 |
+
"id": 22,
|
| 109 |
+
"theme": "Military Strength Comparisons",
|
| 110 |
+
"description": "Comparing defense capabilities between nations"
|
| 111 |
+
},
|
| 112 |
+
{
|
| 113 |
+
"id": 23,
|
| 114 |
+
"theme": "Tourism Patterns",
|
| 115 |
+
"description": "Analyzing travel destinations and tourist behaviors"
|
| 116 |
+
},
|
| 117 |
+
{
|
| 118 |
+
"id": 24,
|
| 119 |
+
"theme": "Housing Market Dynamics",
|
| 120 |
+
"description": "Tracking real estate prices and affordability"
|
| 121 |
+
},
|
| 122 |
+
{
|
| 123 |
+
"id": 25,
|
| 124 |
+
"theme": "Employment Sector Changes",
|
| 125 |
+
"description": "Showing shifts in job markets and industries"
|
| 126 |
+
},
|
| 127 |
+
{
|
| 128 |
+
"id": 26,
|
| 129 |
+
"theme": "Water Resource Management",
|
| 130 |
+
"description": "Analyzing water usage and availability"
|
| 131 |
+
},
|
| 132 |
+
{
|
| 133 |
+
"id": 27,
|
| 134 |
+
"theme": "Generational Attitude Differences",
|
| 135 |
+
"description": "Comparing perspectives across age groups"
|
| 136 |
+
},
|
| 137 |
+
{
|
| 138 |
+
"id": 28,
|
| 139 |
+
"theme": "Gender Gap Analysis",
|
| 140 |
+
"description": "Tracking disparities between genders"
|
| 141 |
+
},
|
| 142 |
+
{
|
| 143 |
+
"id": 29,
|
| 144 |
+
"theme": "Brand Loyalty Indicators",
|
| 145 |
+
"description": "Measuring consumer attachment to brands"
|
| 146 |
+
},
|
| 147 |
+
{
|
| 148 |
+
"id": 30,
|
| 149 |
+
"theme": "Public Opinion Fluctuations",
|
| 150 |
+
"description": "Showing how attitudes change over time"
|
| 151 |
+
},
|
| 152 |
+
{
|
| 153 |
+
"id": 31,
|
| 154 |
+
"theme": "Innovation Metrics",
|
| 155 |
+
"description": "Tracking patent filings and R&D investments"
|
| 156 |
+
},
|
| 157 |
+
{
|
| 158 |
+
"id": 32,
|
| 159 |
+
"theme": "Linguistic Diversity Patterns",
|
| 160 |
+
"description": "Showing language usage and preservation"
|
| 161 |
+
},
|
| 162 |
+
{
|
| 163 |
+
"id": 33,
|
| 164 |
+
"theme": "Air Travel Trends",
|
| 165 |
+
"description": "Analyzing flight patterns and passenger behaviors"
|
| 166 |
+
},
|
| 167 |
+
{
|
| 168 |
+
"id": 34,
|
| 169 |
+
"theme": "Manufacturing Output Comparison",
|
| 170 |
+
"description": "Tracking production across countries"
|
| 171 |
+
},
|
| 172 |
+
{
|
| 173 |
+
"id": 35,
|
| 174 |
+
"theme": "Agricultural Production Patterns",
|
| 175 |
+
"description": "Showing crop yields and farming methods"
|
| 176 |
+
},
|
| 177 |
+
{
|
| 178 |
+
"id": 36,
|
| 179 |
+
"theme": "Cultural Product Consumption",
|
| 180 |
+
"description": "Tracking books, music, and film consumption"
|
| 181 |
+
},
|
| 182 |
+
{
|
| 183 |
+
"id": 37,
|
| 184 |
+
"theme": "Waste Generation and Recycling",
|
| 185 |
+
"description": "Analyzing trash production and management"
|
| 186 |
+
},
|
| 187 |
+
{
|
| 188 |
+
"id": 38,
|
| 189 |
+
"theme": "Public Transport Efficiency",
|
| 190 |
+
"description": "Comparing transit systems across cities"
|
| 191 |
+
},
|
| 192 |
+
{
|
| 193 |
+
"id": 39,
|
| 194 |
+
"theme": "Digital Divide Visualization",
|
| 195 |
+
"description": "Showing technology access disparities"
|
| 196 |
+
},
|
| 197 |
+
{
|
| 198 |
+
"id": 40,
|
| 199 |
+
"theme": "Mental Health Awareness",
|
| 200 |
+
"description": "Tracking attitudes and treatment access"
|
| 201 |
+
},
|
| 202 |
+
{
|
| 203 |
+
"id": 41,
|
| 204 |
+
"theme": "Renewable Energy Adoption",
|
| 205 |
+
"description": "Showing implementation of sustainable energy"
|
| 206 |
+
},
|
| 207 |
+
{
|
| 208 |
+
"id": 42,
|
| 209 |
+
"theme": "Cryptocurrency Trading Patterns",
|
| 210 |
+
"description": "Analyzing digital currency markets"
|
| 211 |
+
},
|
| 212 |
+
{
|
| 213 |
+
"id": 43,
|
| 214 |
+
"theme": "Aging Population Challenges",
|
| 215 |
+
"description": "Showing demographic shifts toward older populations"
|
| 216 |
+
},
|
| 217 |
+
{
|
| 218 |
+
"id": 44,
|
| 219 |
+
"theme": "Work-Life Balance Metrics",
|
| 220 |
+
"description": "Comparing time allocation across countries"
|
| 221 |
+
},
|
| 222 |
+
{
|
| 223 |
+
"id": 45,
|
| 224 |
+
"theme": "Urbanization Acceleration",
|
| 225 |
+
"description": "Tracking movement from rural to urban areas"
|
| 226 |
+
},
|
| 227 |
+
{
|
| 228 |
+
"id": 46,
|
| 229 |
+
"theme": "Corporate Diversity Progress",
|
| 230 |
+
"description": "Measuring workplace representation"
|
| 231 |
+
},
|
| 232 |
+
{
|
| 233 |
+
"id": 47,
|
| 234 |
+
"theme": "Wildlife Conservation Status",
|
| 235 |
+
"description": "Tracking endangered species populations"
|
| 236 |
+
},
|
| 237 |
+
{
|
| 238 |
+
"id": 48,
|
| 239 |
+
"theme": "Cybersecurity Threat Landscape",
|
| 240 |
+
"description": "Analyzing digital security incidents"
|
| 241 |
+
},
|
| 242 |
+
{
|
| 243 |
+
"id": 49,
|
| 244 |
+
"theme": "International Aid Distribution",
|
| 245 |
+
"description": "Showing humanitarian assistance flows"
|
| 246 |
+
},
|
| 247 |
+
{
|
| 248 |
+
"id": 50,
|
| 249 |
+
"theme": "Entertainment Industry Revenue",
|
| 250 |
+
"description": "Tracking earnings across media formats"
|
| 251 |
+
},
|
| 252 |
+
{
|
| 253 |
+
"id": 51,
|
| 254 |
+
"theme": "Mobile Device Usage Patterns",
|
| 255 |
+
"description": "Analyzing how people use smartphones and tablets"
|
| 256 |
+
},
|
| 257 |
+
{
|
| 258 |
+
"id": 52,
|
| 259 |
+
"theme": "Public Space Utilization",
|
| 260 |
+
"description": "Showing how urban spaces are used"
|
| 261 |
+
},
|
| 262 |
+
{
|
| 263 |
+
"id": 53,
|
| 264 |
+
"theme": "Remote Work Adoption",
|
| 265 |
+
"description": "Tracking changes in workplace location"
|
| 266 |
+
},
|
| 267 |
+
{
|
| 268 |
+
"id": 54,
|
| 269 |
+
"theme": "Luxury Market Trends",
|
| 270 |
+
"description": "Analyzing high-end consumer spending"
|
| 271 |
+
},
|
| 272 |
+
{
|
| 273 |
+
"id": 55,
|
| 274 |
+
"theme": "Natural Disaster Frequency",
|
| 275 |
+
"description": "Tracking catastrophic events over time"
|
| 276 |
+
},
|
| 277 |
+
{
|
| 278 |
+
"id": 56,
|
| 279 |
+
"theme": "Inflation Rate Comparisons",
|
| 280 |
+
"description": "Showing price increases across economies"
|
| 281 |
+
},
|
| 282 |
+
{
|
| 283 |
+
"id": 57,
|
| 284 |
+
"theme": "Corporate Tax Contribution",
|
| 285 |
+
"description": "Analyzing business tax payments"
|
| 286 |
+
},
|
| 287 |
+
{
|
| 288 |
+
"id": 58,
|
| 289 |
+
"theme": "Public Trust in Institutions",
|
| 290 |
+
"description": "Measuring confidence in government and organizations"
|
| 291 |
+
},
|
| 292 |
+
{
|
| 293 |
+
"id": 59,
|
| 294 |
+
"theme": "Commuting Pattern Changes",
|
| 295 |
+
"description": "Tracking how people travel to work"
|
| 296 |
+
},
|
| 297 |
+
{
|
| 298 |
+
"id": 60,
|
| 299 |
+
"theme": "Life Expectancy Variations",
|
| 300 |
+
"description": "Comparing longevity across populations"
|
| 301 |
+
},
|
| 302 |
+
{
|
| 303 |
+
"id": 61,
|
| 304 |
+
"theme": "Financial Inclusion Metrics",
|
| 305 |
+
"description": "Showing access to banking and financial services"
|
| 306 |
+
},
|
| 307 |
+
{
|
| 308 |
+
"id": 62,
|
| 309 |
+
"theme": "E-commerce Market Growth",
|
| 310 |
+
"description": "Tracking online shopping adoption"
|
| 311 |
+
},
|
| 312 |
+
{
|
| 313 |
+
"id": 63,
|
| 314 |
+
"theme": "Biodiversity Loss Indicators",
|
| 315 |
+
"description": "Measuring reduction in species variety"
|
| 316 |
+
},
|
| 317 |
+
{
|
| 318 |
+
"id": 64,
|
| 319 |
+
"theme": "Pharmaceutical Industry Performance",
|
| 320 |
+
"description": "Tracking drug development and sales"
|
| 321 |
+
},
|
| 322 |
+
{
|
| 323 |
+
"id": 65,
|
| 324 |
+
"theme": "Educational Technology Implementation",
|
| 325 |
+
"description": "Showing digital tools in learning"
|
| 326 |
+
},
|
| 327 |
+
{
|
| 328 |
+
"id": 66,
|
| 329 |
+
"theme": "International Migration Flows",
|
| 330 |
+
"description": "Tracking population movement between countries"
|
| 331 |
+
},
|
| 332 |
+
{
|
| 333 |
+
"id": 67,
|
| 334 |
+
"theme": "Fashion Industry Evolution",
|
| 335 |
+
"description": "Analyzing clothing trends and consumption"
|
| 336 |
+
},
|
| 337 |
+
{
|
| 338 |
+
"id": 68,
|
| 339 |
+
"theme": "Air Quality Trends",
|
| 340 |
+
"description": "Showing pollution levels over time"
|
| 341 |
+
},
|
| 342 |
+
{
|
| 343 |
+
"id": 69,
|
| 344 |
+
"theme": "Artificial Intelligence Applications",
|
| 345 |
+
"description": "Tracking AI implementation"
|
| 346 |
+
},
|
| 347 |
+
{
|
| 348 |
+
"id": 70,
|
| 349 |
+
"theme": "Food Waste Patterns",
|
| 350 |
+
"description": "Analyzing inefficiencies in food supply chains"
|
| 351 |
+
},
|
| 352 |
+
{
|
| 353 |
+
"id": 71,
|
| 354 |
+
"theme": "Social Mobility Indicators",
|
| 355 |
+
"description": "Showing opportunity across socioeconomic classes"
|
| 356 |
+
},
|
| 357 |
+
{
|
| 358 |
+
"id": 72,
|
| 359 |
+
"theme": "Digital Content Creation",
|
| 360 |
+
"description": "Tracking online media production"
|
| 361 |
+
},
|
| 362 |
+
{
|
| 363 |
+
"id": 73,
|
| 364 |
+
"theme": "Space Exploration Milestones",
|
| 365 |
+
"description": "Charting achievements in space programs"
|
| 366 |
+
},
|
| 367 |
+
{
|
| 368 |
+
"id": 74,
|
| 369 |
+
"theme": "Alcohol Consumption Trends",
|
| 370 |
+
"description": "Comparing drinking habits across cultures"
|
| 371 |
+
},
|
| 372 |
+
{
|
| 373 |
+
"id": 75,
|
| 374 |
+
"theme": "Genetic Research Advancement",
|
| 375 |
+
"description": "Tracking progress in genomic science"
|
| 376 |
+
},
|
| 377 |
+
{
|
| 378 |
+
"id": 76,
|
| 379 |
+
"theme": "Professional Sports Economics",
|
| 380 |
+
"description": "Analyzing the business of athletics"
|
| 381 |
+
},
|
| 382 |
+
{
|
| 383 |
+
"id": 77,
|
| 384 |
+
"theme": "Ocean Health Indicators",
|
| 385 |
+
"description": "Measuring marine ecosystem stability"
|
| 386 |
+
},
|
| 387 |
+
{
|
| 388 |
+
"id": 78,
|
| 389 |
+
"theme": "Personal Savings Behaviors",
|
| 390 |
+
"description": "Comparing financial habits across demographics"
|
| 391 |
+
},
|
| 392 |
+
{
|
| 393 |
+
"id": 79,
|
| 394 |
+
"theme": "Charitable Giving Patterns",
|
| 395 |
+
"description": "Showing donation trends and causes"
|
| 396 |
+
},
|
| 397 |
+
{
|
| 398 |
+
"id": 80,
|
| 399 |
+
"theme": "Cloud Computing Adoption",
|
| 400 |
+
"description": "Tracking business migration to cloud services"
|
| 401 |
+
},
|
| 402 |
+
{
|
| 403 |
+
"id": 81,
|
| 404 |
+
"theme": "Public Health Campaign Effectiveness",
|
| 405 |
+
"description": "Measuring impact of health initiatives"
|
| 406 |
+
},
|
| 407 |
+
{
|
| 408 |
+
"id": 82,
|
| 409 |
+
"theme": "Quality of Life Indicators",
|
| 410 |
+
"description": "Comparing well-being across regions"
|
| 411 |
+
},
|
| 412 |
+
{
|
| 413 |
+
"id": 83,
|
| 414 |
+
"theme": "Supply Chain Resilience",
|
| 415 |
+
"description": "Analyzing disruption responses"
|
| 416 |
+
},
|
| 417 |
+
{
|
| 418 |
+
"id": 84,
|
| 419 |
+
"theme": "Streaming Content Preferences",
|
| 420 |
+
"description": "Tracking what people watch online"
|
| 421 |
+
},
|
| 422 |
+
{
|
| 423 |
+
"id": 85,
|
| 424 |
+
"theme": "Working Hours Comparison",
|
| 425 |
+
"description": "Showing work time across countries"
|
| 426 |
+
},
|
| 427 |
+
{
|
| 428 |
+
"id": 86,
|
| 429 |
+
"theme": "Child Development Metrics",
|
| 430 |
+
"description": "Tracking youth health and education"
|
| 431 |
+
},
|
| 432 |
+
{
|
| 433 |
+
"id": 87,
|
| 434 |
+
"theme": "Venture Capital Investment Flows",
|
| 435 |
+
"description": "Showing funding for new businesses"
|
| 436 |
+
},
|
| 437 |
+
{
|
| 438 |
+
"id": 88,
|
| 439 |
+
"theme": "Plastic Pollution Measurements",
|
| 440 |
+
"description": "Tracking plastic waste globally"
|
| 441 |
+
},
|
| 442 |
+
{
|
| 443 |
+
"id": 89,
|
| 444 |
+
"theme": "Traffic Congestion Patterns",
|
| 445 |
+
"description": "Analyzing urban transit bottlenecks"
|
| 446 |
+
},
|
| 447 |
+
{
|
| 448 |
+
"id": 90,
|
| 449 |
+
"theme": "Voting Behavior Analysis",
|
| 450 |
+
"description": "Showing electoral participation"
|
| 451 |
+
},
|
| 452 |
+
{
|
| 453 |
+
"id": 91,
|
| 454 |
+
"theme": "Drug Use Prevalence",
|
| 455 |
+
"description": "Tracking substance use across populations"
|
| 456 |
+
},
|
| 457 |
+
{
|
| 458 |
+
"id": 92,
|
| 459 |
+
"theme": "Tourism Economic Impact",
|
| 460 |
+
"description": "Measuring travel's contribution to economies"
|
| 461 |
+
},
|
| 462 |
+
{
|
| 463 |
+
"id": 93,
|
| 464 |
+
"theme": "Algorithmic Decision-Making",
|
| 465 |
+
"description": "Analyzing automated system outcomes"
|
| 466 |
+
},
|
| 467 |
+
{
|
| 468 |
+
"id": 94,
|
| 469 |
+
"theme": "Cultural Heritage Preservation",
|
| 470 |
+
"description": "Tracking historical site protection"
|
| 471 |
+
},
|
| 472 |
+
{
|
| 473 |
+
"id": 95,
|
| 474 |
+
"theme": "Gaming Industry Evolution",
|
| 475 |
+
"description": "Showing changes in video game consumption"
|
| 476 |
+
},
|
| 477 |
+
{
|
| 478 |
+
"id": 96,
|
| 479 |
+
"theme": "Extreme Weather Frequency",
|
| 480 |
+
"description": "Tracking severe climate events"
|
| 481 |
+
},
|
| 482 |
+
{
|
| 483 |
+
"id": 97,
|
| 484 |
+
"theme": "Corporate Lobbying Influence",
|
| 485 |
+
"description": "Measuring political spending by businesses"
|
| 486 |
+
},
|
| 487 |
+
{
|
| 488 |
+
"id": 98,
|
| 489 |
+
"theme": "Family Structure Changes",
|
| 490 |
+
"description": "Showing household composition shifts"
|
| 491 |
+
},
|
| 492 |
+
{
|
| 493 |
+
"id": 99,
|
| 494 |
+
"theme": "Antibiotic Resistance Spread",
|
| 495 |
+
"description": "Tracking treatment-resistant infections"
|
| 496 |
+
},
|
| 497 |
+
{
|
| 498 |
+
"id": 100,
|
| 499 |
+
"theme": "Digital Payment Adoption",
|
| 500 |
+
"description": "Showing cashless transaction growth"
|
| 501 |
+
},
|
| 502 |
+
{
|
| 503 |
+
"id": 101,
|
| 504 |
+
"theme": "Public Transportation Ridership",
|
| 505 |
+
"description": "Tracking mass transit usage"
|
| 506 |
+
},
|
| 507 |
+
{
|
| 508 |
+
"id": 102,
|
| 509 |
+
"theme": "Deforestation Rates",
|
| 510 |
+
"description": "Measuring forest loss over time"
|
| 511 |
+
},
|
| 512 |
+
{
|
| 513 |
+
"id": 103,
|
| 514 |
+
"theme": "Workplace Automation Impact",
|
| 515 |
+
"description": "Showing how robots affect employment"
|
| 516 |
+
},
|
| 517 |
+
{
|
| 518 |
+
"id": 104,
|
| 519 |
+
"theme": "National Debt Comparisons",
|
| 520 |
+
"description": "Tracking government borrowing"
|
| 521 |
+
},
|
| 522 |
+
{
|
| 523 |
+
"id": 105,
|
| 524 |
+
"theme": "Fast Fashion Environmental Impact",
|
| 525 |
+
"description": "Measuring clothing industry effects"
|
| 526 |
+
},
|
| 527 |
+
{
|
| 528 |
+
"id": 106,
|
| 529 |
+
"theme": "Social Network Platform Shifts",
|
| 530 |
+
"description": "Tracking user migration between services"
|
| 531 |
+
},
|
| 532 |
+
{
|
| 533 |
+
"id": 107,
|
| 534 |
+
"theme": "Housing Affordability Crisis",
|
| 535 |
+
"description": "Showing home ownership challenges"
|
| 536 |
+
},
|
| 537 |
+
{
|
| 538 |
+
"id": 108,
|
| 539 |
+
"theme": "Disaster Recovery Efficiency",
|
| 540 |
+
"description": "Measuring response to catastrophes"
|
| 541 |
+
},
|
| 542 |
+
{
|
| 543 |
+
"id": 109,
|
| 544 |
+
"theme": "Sleep Pattern Changes",
|
| 545 |
+
"description": "Analyzing rest habits across populations"
|
| 546 |
+
},
|
| 547 |
+
{
|
| 548 |
+
"id": 110,
|
| 549 |
+
"theme": "Student Loan Burden",
|
| 550 |
+
"description": "Tracking educational debt impacts"
|
| 551 |
+
},
|
| 552 |
+
{
|
| 553 |
+
"id": 111,
|
| 554 |
+
"theme": "Electric Vehicle Adoption",
|
| 555 |
+
"description": "Showing transition from combustion engines"
|
| 556 |
+
},
|
| 557 |
+
{
|
| 558 |
+
"id": 112,
|
| 559 |
+
"theme": "Refugee Population Displacement",
|
| 560 |
+
"description": "Tracking forced migration"
|
| 561 |
+
},
|
| 562 |
+
{
|
| 563 |
+
"id": 113,
|
| 564 |
+
"theme": "Subscription Service Growth",
|
| 565 |
+
"description": "Measuring recurring revenue models"
|
| 566 |
+
},
|
| 567 |
+
{
|
| 568 |
+
"id": 114,
|
| 569 |
+
"theme": "Preventable Disease Outbreaks",
|
| 570 |
+
"description": "Tracking avoidable health crises"
|
| 571 |
+
},
|
| 572 |
+
{
|
| 573 |
+
"id": 115,
|
| 574 |
+
"theme": "Urban Green Space Access",
|
| 575 |
+
"description": "Showing nature availability in cities"
|
| 576 |
+
},
|
| 577 |
+
{
|
| 578 |
+
"id": 116,
|
| 579 |
+
"theme": "International Trade Barriers",
|
| 580 |
+
"description": "Measuring tariffs and restrictions"
|
| 581 |
+
},
|
| 582 |
+
{
|
| 583 |
+
"id": 117,
|
| 584 |
+
"theme": "Personal Data Valuation",
|
| 585 |
+
"description": "Tracking how data is monetized"
|
| 586 |
+
},
|
| 587 |
+
{
|
| 588 |
+
"id": 118,
|
| 589 |
+
"theme": "Seafood Consumption Sustainability",
|
| 590 |
+
"description": "Analyzing fishing practices"
|
| 591 |
+
},
|
| 592 |
+
{
|
| 593 |
+
"id": 119,
|
| 594 |
+
"theme": "Gig Economy Proliferation",
|
| 595 |
+
"description": "Tracking independent contractor work"
|
| 596 |
+
},
|
| 597 |
+
{
|
| 598 |
+
"id": 120,
|
| 599 |
+
"theme": "Cultural Sensitivity Evolution",
|
| 600 |
+
"description": "Measuring changing social norms"
|
| 601 |
+
},
|
| 602 |
+
{
|
| 603 |
+
"id": 121,
|
| 604 |
+
"theme": "Educational Attainment Gaps",
|
| 605 |
+
"description": "Showing disparities in learning outcomes"
|
| 606 |
+
},
|
| 607 |
+
{
|
| 608 |
+
"id": 122,
|
| 609 |
+
"theme": "Artificial Meat Alternatives",
|
| 610 |
+
"description": "Tracking plant-based food adoption"
|
| 611 |
+
},
|
| 612 |
+
{
|
| 613 |
+
"id": 123,
|
| 614 |
+
"theme": "Carbon Footprint Comparisons",
|
| 615 |
+
"description": "Measuring emissions across activities"
|
| 616 |
+
},
|
| 617 |
+
{
|
| 618 |
+
"id": 124,
|
| 619 |
+
"theme": "Crypto Mining Energy Usage",
|
| 620 |
+
"description": "Analyzing blockchain energy consumption"
|
| 621 |
+
},
|
| 622 |
+
{
|
| 623 |
+
"id": 125,
|
| 624 |
+
"theme": "Medical Tourism Patterns",
|
| 625 |
+
"description": "Tracking cross-border healthcare seeking"
|
| 626 |
+
},
|
| 627 |
+
{
|
| 628 |
+
"id": 126,
|
| 629 |
+
"theme": "Virtual Reality Implementation",
|
| 630 |
+
"description": "Showing VR adoption across sectors"
|
| 631 |
+
},
|
| 632 |
+
{
|
| 633 |
+
"id": 127,
|
| 634 |
+
"theme": "Counterfeit Product Detection",
|
| 635 |
+
"description": "Measuring fake goods in markets"
|
| 636 |
+
},
|
| 637 |
+
{
|
| 638 |
+
"id": 128,
|
| 639 |
+
"theme": "Obesity Rate Variations",
|
| 640 |
+
"description": "Tracking weight trends across populations"
|
| 641 |
+
},
|
| 642 |
+
{
|
| 643 |
+
"id": 129,
|
| 644 |
+
"theme": "Infrastructure Investment Gaps",
|
| 645 |
+
"description": "Showing maintenance backlogs"
|
| 646 |
+
},
|
| 647 |
+
{
|
| 648 |
+
"id": 130,
|
| 649 |
+
"theme": "Digital Advertising Effectiveness",
|
| 650 |
+
"description": "Measuring online marketing impact"
|
| 651 |
+
},
|
| 652 |
+
{
|
| 653 |
+
"id": 131,
|
| 654 |
+
"theme": "Home Appliance Efficiency",
|
| 655 |
+
"description": "Tracking energy use in households"
|
| 656 |
+
},
|
| 657 |
+
{
|
| 658 |
+
"id": 132,
|
| 659 |
+
"theme": "Language Learning Trends",
|
| 660 |
+
"description": "Showing which languages people study"
|
| 661 |
+
},
|
| 662 |
+
{
|
| 663 |
+
"id": 133,
|
| 664 |
+
"theme": "Pet Ownership Patterns",
|
| 665 |
+
"description": "Analyzing animal companionship trends"
|
| 666 |
+
},
|
| 667 |
+
{
|
| 668 |
+
"id": 134,
|
| 669 |
+
"theme": "Corporate Headquarters Relocation",
|
| 670 |
+
"description": "Tracking business migration"
|
| 671 |
+
},
|
| 672 |
+
{
|
| 673 |
+
"id": 135,
|
| 674 |
+
"theme": "Noise Pollution Levels",
|
| 675 |
+
"description": "Measuring urban sound environments"
|
| 676 |
+
},
|
| 677 |
+
{
|
| 678 |
+
"id": 136,
|
| 679 |
+
"theme": "Democracy Index Fluctuations",
|
| 680 |
+
"description": "Tracking political freedom globally"
|
| 681 |
+
},
|
| 682 |
+
{
|
| 683 |
+
"id": 137,
|
| 684 |
+
"theme": "Facial Recognition Deployment",
|
| 685 |
+
"description": "Showing surveillance technology spread"
|
| 686 |
+
},
|
| 687 |
+
{
|
| 688 |
+
"id": 138,
|
| 689 |
+
"theme": "Real Wage Growth Comparison",
|
| 690 |
+
"description": "Tracking inflation-adjusted income"
|
| 691 |
+
},
|
| 692 |
+
{
|
| 693 |
+
"id": 139,
|
| 694 |
+
"theme": "Vaccine Hesitancy Patterns",
|
| 695 |
+
"description": "Analyzing immunization resistance"
|
| 696 |
+
},
|
| 697 |
+
{
|
| 698 |
+
"id": 140,
|
| 699 |
+
"theme": "Autonomous Vehicle Testing",
|
| 700 |
+
"description": "Tracking self-driving car development"
|
| 701 |
+
},
|
| 702 |
+
{
|
| 703 |
+
"id": 141,
|
| 704 |
+
"theme": "Coastal Erosion Measurements",
|
| 705 |
+
"description": "Showing shoreline changes"
|
| 706 |
+
},
|
| 707 |
+
{
|
| 708 |
+
"id": 142,
|
| 709 |
+
"theme": "Workplace Wellness Programs",
|
| 710 |
+
"description": "Tracking employee health initiatives"
|
| 711 |
+
},
|
| 712 |
+
{
|
| 713 |
+
"id": 143,
|
| 714 |
+
"theme": "Textile Waste Generation",
|
| 715 |
+
"description": "Measuring discarded clothing volume"
|
| 716 |
+
},
|
| 717 |
+
{
|
| 718 |
+
"id": 144,
|
| 719 |
+
"theme": "Luxury Brand Resilience",
|
| 720 |
+
"description": "Tracking high-end market performance"
|
| 721 |
+
},
|
| 722 |
+
{
|
| 723 |
+
"id": 145,
|
| 724 |
+
"theme": "Children's Screen Time",
|
| 725 |
+
"description": "Analyzing youth media consumption"
|
| 726 |
+
},
|
| 727 |
+
{
|
| 728 |
+
"id": 146,
|
| 729 |
+
"theme": "Fossil Fuel Subsidy Comparison",
|
| 730 |
+
"description": "Tracking government energy support"
|
| 731 |
+
},
|
| 732 |
+
{
|
| 733 |
+
"id": 147,
|
| 734 |
+
"theme": "Global Shipping Route Density",
|
| 735 |
+
"description": "Showing maritime trade patterns"
|
| 736 |
+
},
|
| 737 |
+
{
|
| 738 |
+
"id": 148,
|
| 739 |
+
"theme": "Historical Event Perception",
|
| 740 |
+
"description": "Tracking how different regions view history"
|
| 741 |
+
},
|
| 742 |
+
{
|
| 743 |
+
"id": 149,
|
| 744 |
+
"theme": "Artificial Light Pollution",
|
| 745 |
+
"description": "Measuring nighttime brightness levels"
|
| 746 |
+
},
|
| 747 |
+
{
|
| 748 |
+
"id": 150,
|
| 749 |
+
"theme": "Professional Certification Trends",
|
| 750 |
+
"description": "Tracking career credential pursuit"
|
| 751 |
+
},
|
| 752 |
+
{
|
| 753 |
+
"id": 151,
|
| 754 |
+
"theme": "Music Genre Popularity Trends",
|
| 755 |
+
"description": "Tracking the rise and fall of music genres over decades"
|
| 756 |
+
},
|
| 757 |
+
{
|
| 758 |
+
"id": 152,
|
| 759 |
+
"theme": "Album Sales Comparison",
|
| 760 |
+
"description": "Comparing album sales across artists and time periods"
|
| 761 |
+
},
|
| 762 |
+
{
|
| 763 |
+
"id": 153,
|
| 764 |
+
"theme": "Concert Attendance Patterns",
|
| 765 |
+
"description": "Analyzing attendance at music venues and festivals"
|
| 766 |
+
},
|
| 767 |
+
{
|
| 768 |
+
"id": 154,
|
| 769 |
+
"theme": "Streaming Platform Preferences",
|
| 770 |
+
"description": "Showing music streaming service usage by demographic"
|
| 771 |
+
},
|
| 772 |
+
{
|
| 773 |
+
"id": 155,
|
| 774 |
+
"theme": "Musical Instrument Adoption",
|
| 775 |
+
"description": "Tracking which instruments people learn across cultures"
|
| 776 |
+
},
|
| 777 |
+
{
|
| 778 |
+
"id": 156,
|
| 779 |
+
"theme": "Sports Team Performance",
|
| 780 |
+
"description": "Visualizing win-loss records across seasons"
|
| 781 |
+
},
|
| 782 |
+
{
|
| 783 |
+
"id": 157,
|
| 784 |
+
"theme": "Athletic Record Progression",
|
| 785 |
+
"description": "Showing how world records have changed over time"
|
| 786 |
+
},
|
| 787 |
+
{
|
| 788 |
+
"id": 158,
|
| 789 |
+
"theme": "Stadium Attendance Fluctuations",
|
| 790 |
+
"description": "Tracking audience numbers at sporting events"
|
| 791 |
+
},
|
| 792 |
+
{
|
| 793 |
+
"id": 159,
|
| 794 |
+
"theme": "Player Salary Evolution",
|
| 795 |
+
"description": "Comparing athlete compensation across sports and eras"
|
| 796 |
+
},
|
| 797 |
+
{
|
| 798 |
+
"id": 160,
|
| 799 |
+
"theme": "Olympic Medal Distribution",
|
| 800 |
+
"description": "Analyzing medal counts by country and sport"
|
| 801 |
+
},
|
| 802 |
+
{
|
| 803 |
+
"id": 161,
|
| 804 |
+
"theme": "Film Box Office Analysis",
|
| 805 |
+
"description": "Comparing movie financial performance by genre and studio"
|
| 806 |
+
},
|
| 807 |
+
{
|
| 808 |
+
"id": 162,
|
| 809 |
+
"theme": "TV Viewing Habits",
|
| 810 |
+
"description": "Tracking changes in television consumption patterns"
|
| 811 |
+
},
|
| 812 |
+
{
|
| 813 |
+
"id": 163,
|
| 814 |
+
"theme": "Celebrity Social Media Influence",
|
| 815 |
+
"description": "Measuring follower engagement across platforms"
|
| 816 |
+
},
|
| 817 |
+
{
|
| 818 |
+
"id": 164,
|
| 819 |
+
"theme": "Award Show Voting Patterns",
|
| 820 |
+
"description": "Analyzing nomination and winner trends over time"
|
| 821 |
+
},
|
| 822 |
+
{
|
| 823 |
+
"id": 165,
|
| 824 |
+
"theme": "Streaming Service Content Analysis",
|
| 825 |
+
"description": "Comparing original programming across platforms"
|
| 826 |
+
},
|
| 827 |
+
{
|
| 828 |
+
"id": 166,
|
| 829 |
+
"theme": "Culinary Trend Evolution",
|
| 830 |
+
"description": "Tracking popularity of food styles and ingredients"
|
| 831 |
+
},
|
| 832 |
+
{
|
| 833 |
+
"id": 167,
|
| 834 |
+
"theme": "Restaurant Industry Statistics",
|
| 835 |
+
"description": "Analyzing dining establishment success factors"
|
| 836 |
+
},
|
| 837 |
+
{
|
| 838 |
+
"id": 168,
|
| 839 |
+
"theme": "Cooking Method Preferences",
|
| 840 |
+
"description": "Showing how food preparation styles vary by region"
|
| 841 |
+
},
|
| 842 |
+
{
|
| 843 |
+
"id": 169,
|
| 844 |
+
"theme": "Dietary Restriction Prevalence",
|
| 845 |
+
"description": "Tracking vegetarian, vegan, and other dietary choices"
|
| 846 |
+
},
|
| 847 |
+
{
|
| 848 |
+
"id": 170,
|
| 849 |
+
"theme": "Food Delivery Market Growth",
|
| 850 |
+
"description": "Analyzing the expansion of meal delivery services"
|
| 851 |
+
},
|
| 852 |
+
{
|
| 853 |
+
"id": 171,
|
| 854 |
+
"theme": "Fashion Trend Cycles",
|
| 855 |
+
"description": "Visualizing the recurrence of style elements over time"
|
| 856 |
+
},
|
| 857 |
+
{
|
| 858 |
+
"id": 172,
|
| 859 |
+
"theme": "Clothing Consumption Rates",
|
| 860 |
+
"description": "Comparing purchasing habits across demographics"
|
| 861 |
+
},
|
| 862 |
+
{
|
| 863 |
+
"id": 173,
|
| 864 |
+
"theme": "Textile Source Comparisons",
|
| 865 |
+
"description": "Showing origin and sustainability of fabric materials"
|
| 866 |
+
},
|
| 867 |
+
{
|
| 868 |
+
"id": 174,
|
| 869 |
+
"theme": "Footwear Innovation Timeline",
|
| 870 |
+
"description": "Tracking technological advances in shoe design"
|
| 871 |
+
},
|
| 872 |
+
{
|
| 873 |
+
"id": 175,
|
| 874 |
+
"theme": "Accessory Popularity Waves",
|
| 875 |
+
"description": "Measuring cyclical trends in fashion accessories"
|
| 876 |
+
},
|
| 877 |
+
{
|
| 878 |
+
"id": 176,
|
| 879 |
+
"theme": "Scientific Publication Output",
|
| 880 |
+
"description": "Comparing research volume across disciplines and institutions"
|
| 881 |
+
},
|
| 882 |
+
{
|
| 883 |
+
"id": 177,
|
| 884 |
+
"theme": "Laboratory Equipment Evolution",
|
| 885 |
+
"description": "Tracking changes in scientific instruments over time"
|
| 886 |
+
},
|
| 887 |
+
{
|
| 888 |
+
"id": 178,
|
| 889 |
+
"theme": "Research Funding Distribution",
|
| 890 |
+
"description": "Showing how science money is allocated by field"
|
| 891 |
+
},
|
| 892 |
+
{
|
| 893 |
+
"id": 179,
|
| 894 |
+
"theme": "Scientific Breakthrough Timeline",
|
| 895 |
+
"description": "Visualizing major discoveries chronologically"
|
| 896 |
+
},
|
| 897 |
+
{
|
| 898 |
+
"id": 180,
|
| 899 |
+
"theme": "Academic Citation Patterns",
|
| 900 |
+
"description": "Analyzing how research papers reference each other"
|
| 901 |
+
},
|
| 902 |
+
{
|
| 903 |
+
"id": 181,
|
| 904 |
+
"theme": "Personal Device Evolution",
|
| 905 |
+
"description": "Tracking changes in consumer electronics over time"
|
| 906 |
+
},
|
| 907 |
+
{
|
| 908 |
+
"id": 182,
|
| 909 |
+
"theme": "Software Development Methodologies",
|
| 910 |
+
"description": "Comparing programming approaches across companies"
|
| 911 |
+
},
|
| 912 |
+
{
|
| 913 |
+
"id": 183,
|
| 914 |
+
"theme": "Computer Processing Power Growth",
|
| 915 |
+
"description": "Visualizing Moore's Law across processor generations"
|
| 916 |
+
},
|
| 917 |
+
{
|
| 918 |
+
"id": 184,
|
| 919 |
+
"theme": "Internet Speed Progression",
|
| 920 |
+
"description": "Showing bandwidth increases globally over time"
|
| 921 |
+
},
|
| 922 |
+
{
|
| 923 |
+
"id": 185,
|
| 924 |
+
"theme": "Technology Obsolescence Rates",
|
| 925 |
+
"description": "Tracking how quickly devices become outdated"
|
| 926 |
+
},
|
| 927 |
+
{
|
| 928 |
+
"id": 186,
|
| 929 |
+
"theme": "Hobby Participation Rates",
|
| 930 |
+
"description": "Comparing popularity of leisure activities"
|
| 931 |
+
},
|
| 932 |
+
{
|
| 933 |
+
"id": 187,
|
| 934 |
+
"theme": "Craft Supply Sales Trends",
|
| 935 |
+
"description": "Tracking materials purchased for DIY projects"
|
| 936 |
+
},
|
| 937 |
+
{
|
| 938 |
+
"id": 188,
|
| 939 |
+
"theme": "Gardening Practice Comparison",
|
| 940 |
+
"description": "Analyzing plant cultivation approaches by region"
|
| 941 |
+
},
|
| 942 |
+
{
|
| 943 |
+
"id": 189,
|
| 944 |
+
"theme": "Collecting Behavior Patterns",
|
| 945 |
+
"description": "Showing what items people accumulate by demographic"
|
| 946 |
+
},
|
| 947 |
+
{
|
| 948 |
+
"id": 190,
|
| 949 |
+
"theme": "Home Improvement Project Frequency",
|
| 950 |
+
"description": "Tracking DIY renovation trends over time"
|
| 951 |
+
},
|
| 952 |
+
{
|
| 953 |
+
"id": 191,
|
| 954 |
+
"theme": "Video Game Genre Popularity",
|
| 955 |
+
"description": "Comparing sales and player counts across game types"
|
| 956 |
+
},
|
| 957 |
+
{
|
| 958 |
+
"id": 192,
|
| 959 |
+
"theme": "Gaming Platform Evolution",
|
| 960 |
+
"description": "Showing shifts between console, PC, and mobile gaming"
|
| 961 |
+
},
|
| 962 |
+
{
|
| 963 |
+
"id": 193,
|
| 964 |
+
"theme": "Esports Viewership Growth",
|
| 965 |
+
"description": "Tracking audience numbers for competitive gaming"
|
| 966 |
+
},
|
| 967 |
+
{
|
| 968 |
+
"id": 194,
|
| 969 |
+
"theme": "Game Developer Success Factors",
|
| 970 |
+
"description": "Analyzing what makes studios profitable"
|
| 971 |
+
},
|
| 972 |
+
{
|
| 973 |
+
"id": 195,
|
| 974 |
+
"theme": "Player Behavior Analysis",
|
| 975 |
+
"description": "Showing how people interact with game mechanics"
|
| 976 |
+
},
|
| 977 |
+
{
|
| 978 |
+
"id": 196,
|
| 979 |
+
"theme": "Book Publishing Trends",
|
| 980 |
+
"description": "Tracking genre popularity and sales channels"
|
| 981 |
+
},
|
| 982 |
+
{
|
| 983 |
+
"id": 197,
|
| 984 |
+
"theme": "Reading Format Preferences",
|
| 985 |
+
"description": "Comparing print, ebook, and audiobook consumption"
|
| 986 |
+
},
|
| 987 |
+
{
|
| 988 |
+
"id": 198,
|
| 989 |
+
"theme": "Library Usage Patterns",
|
| 990 |
+
"description": "Analyzing how people interact with public libraries"
|
| 991 |
+
},
|
| 992 |
+
{
|
| 993 |
+
"id": 199,
|
| 994 |
+
"theme": "Literary Award Impact",
|
| 995 |
+
"description": "Measuring sales effects of prestigious prizes"
|
| 996 |
+
},
|
| 997 |
+
{
|
| 998 |
+
"id": 200,
|
| 999 |
+
"theme": "Author Career Trajectories",
|
| 1000 |
+
"description": "Visualizing writing productivity and success over time"
|
| 1001 |
+
},
|
| 1002 |
+
{
|
| 1003 |
+
"id": 201,
|
| 1004 |
+
"theme": "Coffee Consumption Habits",
|
| 1005 |
+
"description": "Comparing brewing methods and preferences globally"
|
| 1006 |
+
},
|
| 1007 |
+
{
|
| 1008 |
+
"id": 202,
|
| 1009 |
+
"theme": "Tea Variety Popularity",
|
| 1010 |
+
"description": "Tracking types of tea consumed by region"
|
| 1011 |
+
},
|
| 1012 |
+
{
|
| 1013 |
+
"id": 203,
|
| 1014 |
+
"theme": "Beer Style Evolution",
|
| 1015 |
+
"description": "Showing shifting preferences in beer varieties"
|
| 1016 |
+
},
|
| 1017 |
+
{
|
| 1018 |
+
"id": 204,
|
| 1019 |
+
"theme": "Wine Production Comparison",
|
| 1020 |
+
"description": "Analyzing vineyard output across regions and years"
|
| 1021 |
+
},
|
| 1022 |
+
{
|
| 1023 |
+
"id": 205,
|
| 1024 |
+
"theme": "Non-Alcoholic Beverage Trends",
|
| 1025 |
+
"description": "Tracking consumption of soft drinks and alternatives"
|
| 1026 |
+
},
|
| 1027 |
+
{
|
| 1028 |
+
"id": 206,
|
| 1029 |
+
"theme": "Pet Breed Popularity",
|
| 1030 |
+
"description": "Showing changing preferences in animal companions"
|
| 1031 |
+
},
|
| 1032 |
+
{
|
| 1033 |
+
"id": 207,
|
| 1034 |
+
"theme": "Pet Product Spending",
|
| 1035 |
+
"description": "Analyzing how much people invest in animal care"
|
| 1036 |
+
},
|
| 1037 |
+
{
|
| 1038 |
+
"id": 208,
|
| 1039 |
+
"theme": "Veterinary Treatment Advances",
|
| 1040 |
+
"description": "Tracking development of animal healthcare options"
|
| 1041 |
+
},
|
| 1042 |
+
{
|
| 1043 |
+
"id": 209,
|
| 1044 |
+
"theme": "Pet Adoption Source Comparison",
|
| 1045 |
+
"description": "Showing where people acquire companion animals"
|
| 1046 |
+
},
|
| 1047 |
+
{
|
| 1048 |
+
"id": 210,
|
| 1049 |
+
"theme": "Animal Lifespan Variations",
|
| 1050 |
+
"description": "Comparing longevity of different species and breeds"
|
| 1051 |
+
},
|
| 1052 |
+
{
|
| 1053 |
+
"id": 211,
|
| 1054 |
+
"theme": "Art Market Valuation",
|
| 1055 |
+
"description": "Tracking prices for fine art across mediums and periods"
|
| 1056 |
+
},
|
| 1057 |
+
{
|
| 1058 |
+
"id": 212,
|
| 1059 |
+
"theme": "Museum Attendance Patterns",
|
| 1060 |
+
"description": "Analyzing visitor demographics and popular exhibits"
|
| 1061 |
+
},
|
| 1062 |
+
{
|
| 1063 |
+
"id": 213,
|
| 1064 |
+
"theme": "Public Art Installation Impact",
|
| 1065 |
+
"description": "Measuring community effects of art displays"
|
| 1066 |
+
},
|
| 1067 |
+
{
|
| 1068 |
+
"id": 214,
|
| 1069 |
+
"theme": "Artist Career Progression",
|
| 1070 |
+
"description": "Showing creative output and recognition over time"
|
| 1071 |
+
},
|
| 1072 |
+
{
|
| 1073 |
+
"id": 215,
|
| 1074 |
+
"theme": "Art Collection Composition",
|
| 1075 |
+
"description": "Analyzing institutional acquisition patterns"
|
| 1076 |
+
},
|
| 1077 |
+
{
|
| 1078 |
+
"id": 216,
|
| 1079 |
+
"theme": "Weather Pattern Changes",
|
| 1080 |
+
"description": "Visualizing temperature and precipitation shifts"
|
| 1081 |
+
},
|
| 1082 |
+
{
|
| 1083 |
+
"id": 217,
|
| 1084 |
+
"theme": "Natural Disaster Response Comparison",
|
| 1085 |
+
"description": "Analyzing emergency management across events"
|
| 1086 |
+
},
|
| 1087 |
+
{
|
| 1088 |
+
"id": 218,
|
| 1089 |
+
"theme": "Seasonal Activity Variations",
|
| 1090 |
+
"description": "Showing how behavior changes with weather"
|
| 1091 |
+
},
|
| 1092 |
+
{
|
| 1093 |
+
"id": 219,
|
| 1094 |
+
"theme": "Climate Adaptation Strategies",
|
| 1095 |
+
"description": "Comparing approaches to environmental changes"
|
| 1096 |
+
},
|
| 1097 |
+
{
|
| 1098 |
+
"id": 220,
|
| 1099 |
+
"theme": "Storm Frequency Analysis",
|
| 1100 |
+
"description": "Tracking severe weather events over time"
|
| 1101 |
+
},
|
| 1102 |
+
{
|
| 1103 |
+
"id": 221,
|
| 1104 |
+
"theme": "Photography Equipment Trends",
|
| 1105 |
+
"description": "Comparing camera technology adoption over time"
|
| 1106 |
+
},
|
| 1107 |
+
{
|
| 1108 |
+
"id": 222,
|
| 1109 |
+
"theme": "Photo Sharing Behavior",
|
| 1110 |
+
"description": "Analyzing how images are distributed online"
|
| 1111 |
+
},
|
| 1112 |
+
{
|
| 1113 |
+
"id": 223,
|
| 1114 |
+
"theme": "Photographic Subject Preferences",
|
| 1115 |
+
"description": "Showing what people choose to capture in images"
|
| 1116 |
+
},
|
| 1117 |
+
{
|
| 1118 |
+
"id": 224,
|
| 1119 |
+
"theme": "Image Editing Technique Usage",
|
| 1120 |
+
"description": "Tracking photo manipulation approaches"
|
| 1121 |
+
},
|
| 1122 |
+
{
|
| 1123 |
+
"id": 225,
|
| 1124 |
+
"theme": "Drone Photography Growth",
|
| 1125 |
+
"description": "Measuring aerial image capture adoption"
|
| 1126 |
+
},
|
| 1127 |
+
{
|
| 1128 |
+
"id": 226,
|
| 1129 |
+
"theme": "Hotel Booking Patterns",
|
| 1130 |
+
"description": "Analyzing accommodation preferences by season"
|
| 1131 |
+
},
|
| 1132 |
+
{
|
| 1133 |
+
"id": 227,
|
| 1134 |
+
"theme": "Vacation Destination Trends",
|
| 1135 |
+
"description": "Tracking popular travel locations over time"
|
| 1136 |
+
},
|
| 1137 |
+
{
|
| 1138 |
+
"id": 228,
|
| 1139 |
+
"theme": "Transportation Method Comparison",
|
| 1140 |
+
"description": "Showing how travelers get to destinations"
|
| 1141 |
+
},
|
| 1142 |
+
{
|
| 1143 |
+
"id": 229,
|
| 1144 |
+
"theme": "Travel Duration Analysis",
|
| 1145 |
+
"description": "Comparing length of trips by purpose and demographic"
|
| 1146 |
+
},
|
| 1147 |
+
{
|
| 1148 |
+
"id": 230,
|
| 1149 |
+
"theme": "Tourism Spending Distribution",
|
| 1150 |
+
"description": "Visualizing how visitors allocate travel budgets"
|
| 1151 |
+
},
|
| 1152 |
+
{
|
| 1153 |
+
"id": 231,
|
| 1154 |
+
"theme": "Vehicle Ownership Patterns",
|
| 1155 |
+
"description": "Comparing car possession across regions and time"
|
| 1156 |
+
},
|
| 1157 |
+
{
|
| 1158 |
+
"id": 232,
|
| 1159 |
+
"theme": "Car Model Popularity",
|
| 1160 |
+
"description": "Tracking bestselling vehicles by segment"
|
| 1161 |
+
},
|
| 1162 |
+
{
|
| 1163 |
+
"id": 233,
|
| 1164 |
+
"theme": "Automotive Technology Adoption",
|
| 1165 |
+
"description": "Showing implementation of new vehicle features"
|
| 1166 |
+
},
|
| 1167 |
+
{
|
| 1168 |
+
"id": 234,
|
| 1169 |
+
"theme": "Driving Behavior Analysis",
|
| 1170 |
+
"description": "Measuring speed, distance, and habits by region"
|
| 1171 |
+
},
|
| 1172 |
+
{
|
| 1173 |
+
"id": 235,
|
| 1174 |
+
"theme": "Vehicle Maintenance Frequency",
|
| 1175 |
+
"description": "Comparing repair and service patterns"
|
| 1176 |
+
},
|
| 1177 |
+
{
|
| 1178 |
+
"id": 236,
|
| 1179 |
+
"theme": "Podcast Listening Habits",
|
| 1180 |
+
"description": "Analyzing audio content consumption patterns"
|
| 1181 |
+
},
|
| 1182 |
+
{
|
| 1183 |
+
"id": 237,
|
| 1184 |
+
"theme": "Radio Format Popularity",
|
| 1185 |
+
"description": "Tracking broadcast programming preferences"
|
| 1186 |
+
},
|
| 1187 |
+
{
|
| 1188 |
+
"id": 238,
|
| 1189 |
+
"theme": "Audio Quality Preferences",
|
| 1190 |
+
"description": "Comparing listener equipment and format choices"
|
| 1191 |
+
},
|
| 1192 |
+
{
|
| 1193 |
+
"id": 239,
|
| 1194 |
+
"theme": "Voice Assistant Usage",
|
| 1195 |
+
"description": "Measuring adoption of audio interface technology"
|
| 1196 |
+
},
|
| 1197 |
+
{
|
| 1198 |
+
"id": 240,
|
| 1199 |
+
"theme": "Sound Environment Analysis",
|
| 1200 |
+
"description": "Visualizing noise levels in different settings"
|
| 1201 |
+
},
|
| 1202 |
+
{
|
| 1203 |
+
"id": 241,
|
| 1204 |
+
"theme": "Home Design Trends",
|
| 1205 |
+
"description": "Tracking architectural and interior style preferences"
|
| 1206 |
+
},
|
| 1207 |
+
{
|
| 1208 |
+
"id": 242,
|
| 1209 |
+
"theme": "Furniture Purchase Patterns",
|
| 1210 |
+
"description": "Analyzing home furnishing consumer behavior"
|
| 1211 |
+
},
|
| 1212 |
+
{
|
| 1213 |
+
"id": 243,
|
| 1214 |
+
"theme": "Decorative Item Popularity",
|
| 1215 |
+
"description": "Showing trends in home accessory choices"
|
| 1216 |
+
},
|
| 1217 |
+
{
|
| 1218 |
+
"id": 244,
|
| 1219 |
+
"theme": "Residential Space Utilization",
|
| 1220 |
+
"description": "Comparing how living areas are configured"
|
| 1221 |
+
},
|
| 1222 |
+
{
|
| 1223 |
+
"id": 245,
|
| 1224 |
+
"theme": "Housing Material Preferences",
|
| 1225 |
+
"description": "Tracking construction element choices"
|
| 1226 |
+
},
|
| 1227 |
+
{
|
| 1228 |
+
"id": 246,
|
| 1229 |
+
"theme": "Social Event Attendance",
|
| 1230 |
+
"description": "Analyzing participation in gatherings by type"
|
| 1231 |
+
},
|
| 1232 |
+
{
|
| 1233 |
+
"id": 247,
|
| 1234 |
+
"theme": "Gift-Giving Behaviors",
|
| 1235 |
+
"description": "Comparing present selection across occasions"
|
| 1236 |
+
},
|
| 1237 |
+
{
|
| 1238 |
+
"id": 248,
|
| 1239 |
+
"theme": "Celebration Expenditure",
|
| 1240 |
+
"description": "Tracking spending on holidays and special events"
|
| 1241 |
+
},
|
| 1242 |
+
{
|
| 1243 |
+
"id": 249,
|
| 1244 |
+
"theme": "Party Planning Priorities",
|
| 1245 |
+
"description": "Showing what aspects of events matter most"
|
| 1246 |
+
},
|
| 1247 |
+
{
|
| 1248 |
+
"id": 250,
|
| 1249 |
+
"theme": "Holiday Tradition Evolution",
|
| 1250 |
+
"description": "Measuring changes in celebratory customs"
|
| 1251 |
+
},
|
| 1252 |
+
{
|
| 1253 |
+
"id": 251,
|
| 1254 |
+
"theme": "Dance Style Popularity",
|
| 1255 |
+
"description": "Tracking participation in different dance forms"
|
| 1256 |
+
},
|
| 1257 |
+
{
|
| 1258 |
+
"id": 252,
|
| 1259 |
+
"theme": "Performance Attendance Patterns",
|
| 1260 |
+
"description": "Analyzing audience for live dance events"
|
| 1261 |
+
},
|
| 1262 |
+
{
|
| 1263 |
+
"id": 253,
|
| 1264 |
+
"theme": "Choreography Trend Analysis",
|
| 1265 |
+
"description": "Showing evolution of movement styles"
|
| 1266 |
+
},
|
| 1267 |
+
{
|
| 1268 |
+
"id": 254,
|
| 1269 |
+
"theme": "Dance Education Methods",
|
| 1270 |
+
"description": "Comparing teaching approaches across styles"
|
| 1271 |
+
},
|
| 1272 |
+
{
|
| 1273 |
+
"id": 255,
|
| 1274 |
+
"theme": "Movement Therapy Applications",
|
| 1275 |
+
"description": "Tracking use of dance for health purposes"
|
| 1276 |
+
},
|
| 1277 |
+
{
|
| 1278 |
+
"id": 256,
|
| 1279 |
+
"theme": "Theater Attendance Demographics",
|
| 1280 |
+
"description": "Analyzing who attends live performances"
|
| 1281 |
+
},
|
| 1282 |
+
{
|
| 1283 |
+
"id": 257,
|
| 1284 |
+
"theme": "Play Genre Popularity",
|
| 1285 |
+
"description": "Tracking which theatrical styles draw audiences"
|
| 1286 |
+
},
|
| 1287 |
+
{
|
| 1288 |
+
"id": 258,
|
| 1289 |
+
"theme": "Performance Venue Comparison",
|
| 1290 |
+
"description": "Showing differences between theater spaces"
|
| 1291 |
+
},
|
| 1292 |
+
{
|
| 1293 |
+
"id": 259,
|
| 1294 |
+
"theme": "Actor Career Trajectory",
|
| 1295 |
+
"description": "Visualizing performer roles over time"
|
| 1296 |
+
},
|
| 1297 |
+
{
|
| 1298 |
+
"id": 260,
|
| 1299 |
+
"theme": "Theatrical Production Costs",
|
| 1300 |
+
"description": "Analyzing financial aspects of staging shows"
|
| 1301 |
+
},
|
| 1302 |
+
{
|
| 1303 |
+
"id": 261,
|
| 1304 |
+
"theme": "Comedy Style Evolution",
|
| 1305 |
+
"description": "Tracking changes in humor approaches over time"
|
| 1306 |
+
},
|
| 1307 |
+
{
|
| 1308 |
+
"id": 262,
|
| 1309 |
+
"theme": "Joke Topic Analysis",
|
| 1310 |
+
"description": "Showing what subjects are used in comedy"
|
| 1311 |
+
},
|
| 1312 |
+
{
|
| 1313 |
+
"id": 263,
|
| 1314 |
+
"theme": "Comedian Tour Patterns",
|
| 1315 |
+
"description": "Analyzing performance locations and attendance"
|
| 1316 |
+
},
|
| 1317 |
+
{
|
| 1318 |
+
"id": 264,
|
| 1319 |
+
"theme": "Stand-up Special Viewership",
|
| 1320 |
+
"description": "Tracking comedy consumption on streaming platforms"
|
| 1321 |
+
},
|
| 1322 |
+
{
|
| 1323 |
+
"id": 265,
|
| 1324 |
+
"theme": "Comedy Club Attendance",
|
| 1325 |
+
"description": "Measuring live audience demographics"
|
| 1326 |
+
},
|
| 1327 |
+
{
|
| 1328 |
+
"id": 266,
|
| 1329 |
+
"theme": "Fitness Activity Popularity",
|
| 1330 |
+
"description": "Comparing exercise types by participation"
|
| 1331 |
+
},
|
| 1332 |
+
{
|
| 1333 |
+
"id": 267,
|
| 1334 |
+
"theme": "Workout Duration Patterns",
|
| 1335 |
+
"description": "Analyzing how long people exercise by demographic"
|
| 1336 |
+
},
|
| 1337 |
+
{
|
| 1338 |
+
"id": 268,
|
| 1339 |
+
"theme": "Gym Membership Trends",
|
| 1340 |
+
"description": "Tracking fitness facility enrollment over time"
|
| 1341 |
+
},
|
| 1342 |
+
{
|
| 1343 |
+
"id": 269,
|
| 1344 |
+
"theme": "Exercise Equipment Sales",
|
| 1345 |
+
"description": "Showing home fitness gear purchasing patterns"
|
| 1346 |
+
},
|
| 1347 |
+
{
|
| 1348 |
+
"id": 270,
|
| 1349 |
+
"theme": "Physical Activity Frequency",
|
| 1350 |
+
"description": "Measuring how often people exercise by region"
|
| 1351 |
+
},
|
| 1352 |
+
{
|
| 1353 |
+
"id": 271,
|
| 1354 |
+
"theme": "Children's Toy Preferences",
|
| 1355 |
+
"description": "Tracking popular playthings by age group"
|
| 1356 |
+
},
|
| 1357 |
+
{
|
| 1358 |
+
"id": 272,
|
| 1359 |
+
"theme": "Playground Equipment Usage",
|
| 1360 |
+
"description": "Analyzing which play structures attract children"
|
| 1361 |
+
},
|
| 1362 |
+
{
|
| 1363 |
+
"id": 273,
|
| 1364 |
+
"theme": "Educational Toy Benefits",
|
| 1365 |
+
"description": "Measuring developmental impact of different toys"
|
| 1366 |
+
},
|
| 1367 |
+
{
|
| 1368 |
+
"id": 274,
|
| 1369 |
+
"theme": "Play Pattern Evolution",
|
| 1370 |
+
"description": "Showing how children's activities change over time"
|
| 1371 |
+
},
|
| 1372 |
+
{
|
| 1373 |
+
"id": 275,
|
| 1374 |
+
"theme": "Screen-Based Play Comparison",
|
| 1375 |
+
"description": "Analyzing digital vs. physical toy usage"
|
| 1376 |
+
},
|
| 1377 |
+
{
|
| 1378 |
+
"id": 276,
|
| 1379 |
+
"theme": "Jewelry Style Trends",
|
| 1380 |
+
"description": "Tracking preferences in personal adornment"
|
| 1381 |
+
},
|
| 1382 |
+
{
|
| 1383 |
+
"id": 277,
|
| 1384 |
+
"theme": "Precious Metal Price Fluctuations",
|
| 1385 |
+
"description": "Showing value changes in gold, silver, and platinum"
|
| 1386 |
+
},
|
| 1387 |
+
{
|
| 1388 |
+
"id": 278,
|
| 1389 |
+
"theme": "Gemstone Popularity Cycles",
|
| 1390 |
+
"description": "Analyzing preference shifts for different stones"
|
| 1391 |
+
},
|
| 1392 |
+
{
|
| 1393 |
+
"id": 279,
|
| 1394 |
+
"theme": "Accessory Wearing Habits",
|
| 1395 |
+
"description": "Comparing how adornments are used by demographic"
|
| 1396 |
+
},
|
| 1397 |
+
{
|
| 1398 |
+
"id": 280,
|
| 1399 |
+
"theme": "Jewelry Crafting Techniques",
|
| 1400 |
+
"description": "Tracking methods used in creating ornaments"
|
| 1401 |
+
},
|
| 1402 |
+
{
|
| 1403 |
+
"id": 281,
|
| 1404 |
+
"theme": "Comic Book Character Popularity",
|
| 1405 |
+
"description": "Measuring audience interest in fictional figures"
|
| 1406 |
+
},
|
| 1407 |
+
{
|
| 1408 |
+
"id": 282,
|
| 1409 |
+
"theme": "Graphic Novel Sales Trends",
|
| 1410 |
+
"description": "Tracking purchasing patterns for illustrated books"
|
| 1411 |
+
},
|
| 1412 |
+
{
|
| 1413 |
+
"id": 283,
|
| 1414 |
+
"theme": "Superhero Media Adaptation",
|
| 1415 |
+
"description": "Comparing comic characters' success across formats"
|
| 1416 |
+
},
|
| 1417 |
+
{
|
| 1418 |
+
"id": 284,
|
| 1419 |
+
"theme": "Comic Convention Attendance",
|
| 1420 |
+
"description": "Analyzing fan event participation by region"
|
| 1421 |
+
},
|
| 1422 |
+
{
|
| 1423 |
+
"id": 285,
|
| 1424 |
+
"theme": "Collector Issue Valuation",
|
| 1425 |
+
"description": "Showing price trends for rare comic editions"
|
| 1426 |
+
},
|
| 1427 |
+
{
|
| 1428 |
+
"id": 286,
|
| 1429 |
+
"theme": "Tabletop Game Popularity",
|
| 1430 |
+
"description": "Tracking board and card game sales by type"
|
| 1431 |
+
},
|
| 1432 |
+
{
|
| 1433 |
+
"id": 287,
|
| 1434 |
+
"theme": "Role-Playing Game Participation",
|
| 1435 |
+
"description": "Measuring who plays character-based games"
|
| 1436 |
+
},
|
| 1437 |
+
{
|
| 1438 |
+
"id": 288,
|
| 1439 |
+
"theme": "Game Complexity Preferences",
|
| 1440 |
+
"description": "Analyzing rule depth in popular games"
|
| 1441 |
+
},
|
| 1442 |
+
{
|
| 1443 |
+
"id": 289,
|
| 1444 |
+
"theme": "Gaming Session Duration",
|
| 1445 |
+
"description": "Comparing how long different games are played"
|
| 1446 |
+
},
|
| 1447 |
+
{
|
| 1448 |
+
"id": 290,
|
| 1449 |
+
"theme": "Strategic Game Competition",
|
| 1450 |
+
"description": "Tracking tournament participation across games"
|
| 1451 |
+
},
|
| 1452 |
+
{
|
| 1453 |
+
"id": 291,
|
| 1454 |
+
"theme": "Online Dating Platform Usage",
|
| 1455 |
+
"description": "Comparing app and site preferences by demographic"
|
| 1456 |
+
},
|
| 1457 |
+
{
|
| 1458 |
+
"id": 292,
|
| 1459 |
+
"theme": "Relationship Formation Channels",
|
| 1460 |
+
"description": "Tracking how couples meet over time"
|
| 1461 |
+
},
|
| 1462 |
+
{
|
| 1463 |
+
"id": 293,
|
| 1464 |
+
"theme": "Dating Expense Analysis",
|
| 1465 |
+
"description": "Measuring financial aspects of courtship"
|
| 1466 |
+
},
|
| 1467 |
+
{
|
| 1468 |
+
"id": 294,
|
| 1469 |
+
"theme": "Romantic Gesture Preferences",
|
| 1470 |
+
"description": "Showing what actions are valued in relationships"
|
| 1471 |
+
},
|
| 1472 |
+
{
|
| 1473 |
+
"id": 295,
|
| 1474 |
+
"theme": "Courtship Duration Patterns",
|
| 1475 |
+
"description": "Analyzing time between meeting and commitment"
|
| 1476 |
+
},
|
| 1477 |
+
{
|
| 1478 |
+
"id": 296,
|
| 1479 |
+
"theme": "Fantasy Literature Themes",
|
| 1480 |
+
"description": "Tracking narrative elements in speculative fiction"
|
| 1481 |
+
},
|
| 1482 |
+
{
|
| 1483 |
+
"id": 297,
|
| 1484 |
+
"theme": "Science Fiction Technology Prediction",
|
| 1485 |
+
"description": "Comparing fictional innovations with reality"
|
| 1486 |
+
},
|
| 1487 |
+
{
|
| 1488 |
+
"id": 298,
|
| 1489 |
+
"theme": "Mystery Novel Plot Devices",
|
| 1490 |
+
"description": "Analyzing storytelling techniques in crime fiction"
|
| 1491 |
+
},
|
| 1492 |
+
{
|
| 1493 |
+
"id": 299,
|
| 1494 |
+
"theme": "Literary Adaptation Frequency",
|
| 1495 |
+
"description": "Tracking which books become films or shows"
|
| 1496 |
+
},
|
| 1497 |
+
{
|
| 1498 |
+
"id": 300,
|
| 1499 |
+
"theme": "Fiction Reading Demographics",
|
| 1500 |
+
"description": "Showing who reads different story genres"
|
| 1501 |
+
}
|
| 1502 |
+
]
|
data_generator/theme.txt
ADDED
|
@@ -0,0 +1,439 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Political
|
| 2 |
+
1. The Generation Gap: Voter Turnout Disparities Between Gen Z and Boomers (2000-2024)
|
| 3 |
+
2. Burden Sharing: Which NATO Members Actually Meet the 2% Defense Spending Target?
|
| 4 |
+
3. Breaking the Glass Ceiling: Growth Rate of Female Heads of State vs. Corporate CEOs
|
| 5 |
+
4. The Cost of Victory: Average Spend Per Vote in Winning Presidential Campaigns (2008-2024)
|
| 6 |
+
5. Trust in Decline: Public Faith in Mainstream Media vs. Independent Journalism Platforms
|
| 7 |
+
6. Corruption Perception Index: The Correlation Between Democracy Scores and GDP Per Capita
|
| 8 |
+
7. The Great Divide: Partisan Polarization in Senate Voting Records Over 50 Years
|
| 9 |
+
8. Red, Blue, and Purple: How Demographics Shifted Swing State Margins (2016 vs. 2024)
|
| 10 |
+
9. Big Pharma’s Influence: Lobbying Spend vs. Drug Pricing Legislation Outcomes
|
| 11 |
+
10. Words vs. Action: G20 Nations' Carbon Pledges vs. Actual Policy Implementation
|
| 12 |
+
11. The Retreat of Liberty: Countries with the Sharpest Decline in Democracy Scores (2010-2025)
|
| 13 |
+
12. The Tweet Effect: Correlation Between Presidential Social Media Activity and Daily Polling
|
| 14 |
+
13. Border Control: Asylum Application Backlogs vs. Processing Capacity by Country
|
| 15 |
+
14. Swing State Economics: Ad Spend Saturation in Pennsylvania vs. Safe State Neglect
|
| 16 |
+
15. Youth Radicalization? Political Party Affiliation Shifts Among Under-30 Voters
|
| 17 |
+
16. Guns vs. Butter: Trends in Defense vs. Education Budget Prioritization Globally
|
| 18 |
+
17. Media Bias or Reality? Climate Crisis Mention Frequency in Conservative vs. Liberal News
|
| 19 |
+
18. Trade War Fallout: Impact of Tariffs on Consumer Prices vs. Domestic Manufacturing Jobs
|
| 20 |
+
19. Social Tides: The Speed of Public Opinion Reversal on LGBTQ+ Rights by Region
|
| 21 |
+
20. Soft Power: The Relationship Between Embassy Staff Counts and Bilateral Trade Deals
|
| 22 |
+
|
| 23 |
+
# Sports
|
| 24 |
+
1. Olympic Dominance: The Shifting Gold Medal Balance Between USA, China, and EU Nations
|
| 25 |
+
2. Salary Cap vs. Fair Play: Wage Inequality in the NBA vs. The Premier League
|
| 26 |
+
3. The Global Stage: Super Bowl Commercial Revenue vs. World Cup Sponsorship Totals
|
| 27 |
+
4. Dynasties in Decline: Win Probability of Defending Champions in Major US Sports
|
| 28 |
+
5. The Cord-Cutting Effect: Live Sports Broadcast Rights Value vs. Cable Subscription Rates
|
| 29 |
+
6. The Analytics Revolution: The Explosion of 3-Point Attempts vs. Mid-Range Shots in the NBA
|
| 30 |
+
7. Empty Seats: Post-Pandemic Attendance Recovery in Baseball vs. Soccer Leagues
|
| 31 |
+
8. Player Safety Crisis: Reported Concussion Trends in Contact Sports Since New Protocols
|
| 32 |
+
9. The House Always Wins: Sports Betting Revenue Growth vs. Problem Gambling Hotline Calls
|
| 33 |
+
10. The Jersey War: Nike vs. Adidas Market Share in Global Football Kit Sponsorships
|
| 34 |
+
11. Inflation on the Pitch: Player Transfer Fees vs. Club Revenue Growth (2000-2025)
|
| 35 |
+
12. Closing the Gap: WNBA Viewership Surges vs. Player Salary Progression
|
| 36 |
+
13. Madness vs. Bowls: Ad Revenue Comparison of NCAA Basketball vs. Football Postseasons
|
| 37 |
+
14. The "Federer Effect": Tennis Equipment Sales Spikes Following Grand Slam Finals
|
| 38 |
+
15. Pay-to-Play: The Decline of Youth Sports Participation in Low-Income Urban Areas
|
| 39 |
+
16. ROI on the Green: Practice Hours vs. Career Earnings for Top 50 PGA Golfers
|
| 40 |
+
17. Pricing Out the Fans: Average Ticket Prices vs. Median Household Income (NBA Finals)
|
| 41 |
+
18. The Billionaire Athlete: Career Salary vs. Endorsement Income for Icons (LeBron, Messi, Ronaldo)
|
| 42 |
+
19. The Tribal Map: NFL Fandom Density by County Based on Merchandise Sales
|
| 43 |
+
20. Streaming Wars: Subscriber Growth of Niche Sports Platforms vs. General Bundles
|
| 44 |
+
|
| 45 |
+
# Environmental
|
| 46 |
+
1. The Decarbonization Race: China's Peak vs. US Decline vs. EU Stagnation in CO2 Emissions
|
| 47 |
+
2. Lungs of the Earth: Deforestation Rates in the Amazon vs. Reforestation Efforts in Asia
|
| 48 |
+
3. Grid Transition: Solar Energy Production Peaks in Rainy Germany vs. Sunny California
|
| 49 |
+
4. The Plastic Ocean: Microplastic Density Trends in the Great Pacific Garbage Patch
|
| 50 |
+
5. The Sixth Extinction: Acceleration of Species Loss in Rainforests vs. Coral Reefs
|
| 51 |
+
6. Clearing the Smog: Impact of Policy Interventions on Air Quality in Megacities (2010-2025)
|
| 52 |
+
7. Melting Poles: Rate of Ice Shelf Collapse in Antarctica vs. Arctic Sea Ice Recession
|
| 53 |
+
8. The Myth of Recycling: Actual Material Recovery Rates in Japan vs. Single-Stream US Systems
|
| 54 |
+
9. Water Wars: Aquifer Depletion Rates in Agricultural Zones of the Middle East vs. Midwest US
|
| 55 |
+
10. Blue Economy: The Dollar Value of Coral Reefs for Tourism vs. Fishing Industries
|
| 56 |
+
11. Financing Survival: Global Funds Allocated to Climate Adaptation vs. Mitigation Projects
|
| 57 |
+
12. Vanishing Habitats: The Ratio of Urban Sprawl to Wetland Destruction by Decade
|
| 58 |
+
13. Farm to Fork: Carbon Footprint Breakdown of Beef vs. Plant-Based Proteins vs. Lab-Grown Meat
|
| 59 |
+
14. The Battery Arms Race: Gigafactory Production Capacity Plans in China vs. The West
|
| 60 |
+
15. Sinking Cities: Flood Defense Spending Per Capita in Miami, Jakarta, and Rotterdam
|
| 61 |
+
16. The Methane Leak: Satellite-Detected Emissions from Oil Fields vs. Agriculture
|
| 62 |
+
17. The Green Commute: Bike Lane Kilometers vs. Car Usage Reduction in European Capitals
|
| 63 |
+
18. The Cost of Pollution: Healthcare Expenditure Attributed to Respiratory Diseases by Country
|
| 64 |
+
19. Protected Lands: Biodiversity Index Scores Inside vs. Outside National Parks
|
| 65 |
+
20. Retrofitting the World: Energy Efficiency Gains in New Builds vs. Renovated Historic Structures
|
| 66 |
+
|
| 67 |
+
# Technology
|
| 68 |
+
1. The Ecosystem Wall: User Switching Rates Between iOS and Android (2015-2025)
|
| 69 |
+
2. The Price of Insecurity: Average Cost of Data Breaches in Healthcare vs. Banking
|
| 70 |
+
3. Into the Metaverse? VR Headset Daily Usage Time by Age Demographic
|
| 71 |
+
4. Innovation Efficiency: R&D Spend per Patent Granted (Apple vs. Google vs. Microsoft)
|
| 72 |
+
5. The AI Supremacy: Growth of AI Research Papers Published by China vs. The US
|
| 73 |
+
6. The Digital Divide: Gigabit Internet Availability in Urban vs. Rural Households
|
| 74 |
+
7. Cloud Wars: Market Share Trends of AWS vs. Azure vs. Google Cloud in Enterprise
|
| 75 |
+
8. AI in Practice: Adoption Rates of Generative AI in Creative vs. Technical Workforces
|
| 76 |
+
9. Chip Crunch: Semiconductor Manufacturing Output by Node Size (Taiwan vs. US vs. Korea)
|
| 77 |
+
10. Build vs. Buy: Cost Comparison of Custom Software Dev vs. SaaS Subscriptions
|
| 78 |
+
11. Tech Talent Demand: Salary Growth of Data Scientists vs. Full-Stack Engineers
|
| 79 |
+
12. Automating the Floor: Robot Density per 10,000 Employees in Manufacturing vs. Logistics
|
| 80 |
+
13. Unicorn Drought: Venture Capital Funding Volume for Fintech vs. Biotech Startups
|
| 81 |
+
14. Smart Home Saturation: Penetration of Voice Assistants in High vs. Low Income Households
|
| 82 |
+
15. Quantum Leap: Qubit Stability and Error Rates in Top Commercial Quantum Computers
|
| 83 |
+
16. Cyber Ransom: Percentage of Companies Paying Ransomware Demands vs. Data Recovery Success
|
| 84 |
+
17. The 5G Promise: Promised vs. Actual Download Speeds in Major Global Cities
|
| 85 |
+
18. Disruption Velocity: Time to Reach 100 Million Users (Telephone vs. Instagram vs. ChatGPT)
|
| 86 |
+
19. Offline World: Percentage of Population with Zero Internet Access by Continent
|
| 87 |
+
20. Robots in the Kitchen: Automation Penetration in Fast Food vs. Fine Dining Prep
|
| 88 |
+
|
| 89 |
+
# Cuisine
|
| 90 |
+
1. The Flavor Trap: Sodium and Sugar Content in Processed Foods vs. Home-Cooked Meals
|
| 91 |
+
2. Curry vs. Pasta: The Rise of Asian Cuisine Market Share in Western Capitals
|
| 92 |
+
3. Plate to Trash: Edible Food Waste Per Capita in Households vs. Restaurants
|
| 93 |
+
4. The Avocado Index: Price Volatility Correlation with Cartel Activity and Droughts
|
| 94 |
+
5. Diet Wars: Omega-3 vs. Saturated Fat Intake in Mediterranean vs. Standard American Diets
|
| 95 |
+
6. Food Miles: Average Distance Traveled by Supermarket Produce vs. Farmers Market Goods
|
| 96 |
+
7. Culinary Prestige: Density of Michelin Stars Per Capita in Tokyo vs. Paris vs. San Sebastian
|
| 97 |
+
8. Kitchen Tech: Energy Consumption of Induction vs. Gas vs. Electric Coil Stoves
|
| 98 |
+
9. Delivery Dominance: Market Share of UberEats vs. DoorDash vs. Local Apps in Key Cities
|
| 99 |
+
10. Caffeine Culture: Espresso vs. Drip Coffee Consumption Patterns by Region
|
| 100 |
+
11. The Organic Premium: Price Difference Between Organic and Conventional Staples Over Time
|
| 101 |
+
12. Dairy Decline: Growth of Plant-Based Milk Sales vs. Cow Milk in Europe and US
|
| 102 |
+
13. Menu Economics: Profit Margins on Alcohol vs. Food in Casual Dining Restaurants
|
| 103 |
+
14. The Protein Shift: Meat Consumption vs. Legume/Alternative Protein Trends (2010-2025)
|
| 104 |
+
15. Liquid Gold: Olive Oil Production Drops in Southern Europe due to Climate Stress
|
| 105 |
+
16. Chef Shortage: Culinary School Enrollment Numbers vs. Restaurant Job Openings
|
| 106 |
+
17. Festival Economy: Economic Impact of Local Food Events vs. Music Festivals
|
| 107 |
+
18. The Burger Index: Cost of a Big Mac Relative to Minimum Wage in 50 Countries
|
| 108 |
+
19. Vintage Value: Investment Returns on Fine Wine vs. Whiskey vs. Stock Market
|
| 109 |
+
20. Viral Food: Correlation Between TikTok Food Trends and Grocery Ingredient Sales
|
| 110 |
+
|
| 111 |
+
# Public Health
|
| 112 |
+
1. Vaccine Fatigue: Flu Shot Uptake Rates Pre-COVID vs. Post-COVID
|
| 113 |
+
2. Value for Money: Healthcare Spending Per Capita vs. Average Life Expectancy (US vs. OECD)
|
| 114 |
+
3. The Zip Code Effect: Life Expectancy Disparities Between Adjacent Neighborhoods
|
| 115 |
+
4. The Silent Killers: Mortality Rates of Heart Disease vs. Cancer Over 20 Years
|
| 116 |
+
5. Medical Deserts: Distance to Nearest Emergency Room in Rural vs. Urban Areas
|
| 117 |
+
6. Drug Pipeline: R&D Dollars Spent on Lifestyle Drugs vs. Antibiotics/Neglected Diseases
|
| 118 |
+
7. Mental Health Crisis: Reported Anxiety Rates in Teens Correlation with Screen Time
|
| 119 |
+
8. Surge Capacity: ICU Bed Availability Per 1,000 People (Pre-Pandemic vs. Now)
|
| 120 |
+
9. The Insurance Gap: Out-of-Pocket Medical Costs as a Percentage of Household Income
|
| 121 |
+
10. Lifestyle Legacies: Decline in Smoking Rates vs. Rise in Obesity Rates
|
| 122 |
+
11. Informed Patients: Health Literacy Scores vs. Hospital Readmission Rates
|
| 123 |
+
12. Birth Crisis: Maternal Mortality Trends in the US Compared to Other Developed Nations
|
| 124 |
+
13. Growing Pains: Childhood Obesity Rates in School Lunches vs. Packed Lunch Demographics
|
| 125 |
+
14. Telehealth Revolution: Video Consultations as a Percentage of Total Primary Care Visits
|
| 126 |
+
15. Pandemic Lessons: Excess Death Rates in Countries with Strict vs. Loose Lockdown Policies
|
| 127 |
+
16. Prevention Paradox: Budget Allocation for Preventative Care vs. Emergency Treatment
|
| 128 |
+
17. Antibiotic Apocalypse: Rates of Drug-Resistant Infection Outbreaks in Hospitals
|
| 129 |
+
18. Vaping vs. Smoking: Teen Nicotine Usage Trends and Method Switching
|
| 130 |
+
19. Burnout Ward: Physician and Nurse Resignation Rates by Specialty Since 2020
|
| 131 |
+
20. The Loneliness Epidemic: Self-Reported Isolation Rates by Age Group and Living Situation
|
| 132 |
+
|
| 133 |
+
# Space Exploration
|
| 134 |
+
1. Bang for the Buck: Cost Per Kilogram to LEO (Space Shuttle vs. Falcon 9 vs. Starship)
|
| 135 |
+
2. The New Space Race: Annual Orbital Launches by China vs. USA vs. Private Sector
|
| 136 |
+
3. Finding Earth 2.0: Rate of Exoplanet Discoveries Before and After the James Webb Telescope
|
| 137 |
+
4. The Junk Belt: Number of Tracked Debris Objects vs. Active Satellites in Low Earth Orbit
|
| 138 |
+
5. Robotic Explorers: Distance Driven on Mars by Opportunity, Curiosity, and Perseverance
|
| 139 |
+
6. Permanent Presence: Total Human Days Spent on the ISS vs. Tiangong Space Station
|
| 140 |
+
7. Reliability Record: Launch Success Streaks of Major Rocket Families (Soyuz, Atlas, Falcon)
|
| 141 |
+
8. Space Tourism: Ticket Price Evolution for Suborbital vs. Orbital Commercial Flights
|
| 142 |
+
9. Deep Sight: Image Resolution Comparison of Hubble vs. JWST on the Same Targets
|
| 143 |
+
10. Funding the Final Frontier: NASA Budget as % of Federal Budget (1960s vs. 2020s)
|
| 144 |
+
11. Private Money: Venture Capital Investment in Space Startups (Launch vs. Satellites vs. Mining)
|
| 145 |
+
12. Cosmic Riches: Estimated Value of Metals in Near-Earth Asteroids vs. Mining Costs
|
| 146 |
+
13. The Lag: Communication Delay Times for Missions to Moon vs. Mars vs. Jupiter
|
| 147 |
+
14. Radiation Risk: Astronaut Exposure Levels on ISS Missions vs. Lunar Transits
|
| 148 |
+
15. Mission Control: Staffing Numbers Required for Apollo Missions vs. SpaceX Dragon Flights
|
| 149 |
+
16. Heavy Lifters: Payload Capacity Comparison of Saturn V, SLS, and Starship
|
| 150 |
+
17. Launch Economy: Economic Impact of Spaceports on Local Communities (Boca Chica vs. Cape Canaveral)
|
| 151 |
+
18. Internet from Above: Bandwidth Capacity of Starlink Constellation vs. Fiber Optic Cables
|
| 152 |
+
19. Modular Costs: Price Tag of ISS Modules Contributed by US, Russia, Europe, and Japan
|
| 153 |
+
20. Moon Rush: Number of Planned Lunar Missions by Country/Company (2025-2035)
|
| 154 |
+
|
| 155 |
+
# Economic Trends
|
| 156 |
+
1. The Rebound: GDP Recovery Curves of G7 Nations Post-2008 vs. Post-2020
|
| 157 |
+
2. Purchasing Power: Inflation-Adjusted Wage Growth vs. Cost of Living (1980-2025)
|
| 158 |
+
3. Wealth Gap: Share of Total Wealth Held by Top 1% vs. Bottom 50% Over Time
|
| 159 |
+
4. Market vs. Reality: S&P 500 Performance vs. Real GDP Growth Correlation
|
| 160 |
+
5. Currency Wars: Purchasing Power Parity of USD vs. EUR vs. CNY
|
| 161 |
+
6. The Gig Economy: Percentage of Workforce in Freelance/Contract Roles vs. Full-Time
|
| 162 |
+
7. Debt Mountain: National Debt-to-GDP Ratios of Advanced Economies
|
| 163 |
+
8. Housing Crisis: Median Home Price to Median Income Ratio in Major Metros
|
| 164 |
+
9. Rate Hikes: Impact of Federal Interest Rates on Mortgage Applications and Defaults
|
| 165 |
+
10. Trade Balance: Value of Goods vs. Services Exported Between US and China
|
| 166 |
+
11. Investment Flow: Foreign Direct Investment (FDI) Shifts from China to India/Vietnam
|
| 167 |
+
12. Wallet Share: Percentage of Household Budget Spent on Housing/Food vs. Leisure
|
| 168 |
+
13. Crypto Volatility: Bitcoin Price Fluctuations Compared to Gold and S&P 500
|
| 169 |
+
14. Profit Engines: Net Profit Margins of Tech Giants vs. Energy Majors (2015-2025)
|
| 170 |
+
15. Upward Mobility: Probability of Moving from Bottom Income Quintile to Top by Country
|
| 171 |
+
16. Tax Burden: Effective Corporate Tax Rates Paid by Multinationals vs. Small Businesses
|
| 172 |
+
17. Retail Apocalypse: E-commerce Market Share Growth vs. Department Store Closures
|
| 173 |
+
18. Retirement Readiness: Average Savings Balance by Age Group vs. Recommended Targets
|
| 174 |
+
19. Labor Shortage: Job Openings vs. Unemployed Workers Ratio by Industry
|
| 175 |
+
20. Disaster Economics: Cost of Natural Disasters vs. GDP Growth in Affected Regions
|
| 176 |
+
|
| 177 |
+
# Art
|
| 178 |
+
1. The Investment Asset: Annual Returns of Blue-Chip Art vs. Traditional Stock Indices
|
| 179 |
+
2. Museum Fatigue? Visitor Numbers at the Louvre and MoMA: Pre vs. Post Pandemic
|
| 180 |
+
3. Global Hubs: Total Art Auction Turnover in New York vs. London vs. Hong Kong
|
| 181 |
+
4. Starving Artists? Income Distribution: The Top 1% of Artists vs. The Rest
|
| 182 |
+
5. Public vs. Private: Government Arts Funding Per Capita (Germany vs. USA vs. UK)
|
| 183 |
+
6. The Digital Canvas: Growth of Online Art Sales vs. Physical Gallery Sales
|
| 184 |
+
7. Fading Curricula: Decline in Arts Education Funding in Public Schools
|
| 185 |
+
8. Medium Shift: Popularity of Digital Art/NFTs vs. Oil/Canvas Among Collectors Under 40
|
| 186 |
+
9. Blockbuster Economics: Revenue from Ticket Sales vs. Merchandise at Major Exhibitions
|
| 187 |
+
10. Valuation Bubbles: Insurance Appraisals vs. Actual Auction Prices for Modern Art
|
| 188 |
+
11. The NFT Crash: Trading Volume and Average Price of NFTs (2021 Peak vs. Today)
|
| 189 |
+
12. The Biennale Effect: Hotel Price Surges During Art Fairs in Venice, Miami, and Basel
|
| 190 |
+
13. Representation Matters: Gender Ratio of Artists in Permanent Collections of Major Museums
|
| 191 |
+
14. Restoration ROI: Cost of Restoring Masterpieces vs. Subsequent Visitor Revenue
|
| 192 |
+
15. Coffee Table Economics: Revenue of Art Book Publishing vs. Digital Art Catalogues
|
| 193 |
+
16. Platform Power: Sales Volume on Etsy/Saatchi Art vs. Traditional Auction Houses
|
| 194 |
+
17. Color Theory: Dominant Color Palettes in Top-Selling Paintings by Decade
|
| 195 |
+
18. Creative Careers: Employment Growth in UX/UI Design vs. Fine Arts
|
| 196 |
+
19. Grant Geography: Distribution of National Arts Grants to Urban vs. Rural Zip Codes
|
| 197 |
+
20. Acquisition Wars: Budget Comparison of Western Museums vs. Emerging Gulf Museums
|
| 198 |
+
|
| 199 |
+
# Transportation
|
| 200 |
+
1. The Green Breakeven: Mileage Required for an EV to Offset Battery Manufacturing Emissions
|
| 201 |
+
2. Underground Arteries: Daily Ridership Recovery in NYC Subway vs. Tokyo Metro vs. London Tube
|
| 202 |
+
3. Car Dependency: Vehicles Per Household in US Suburbs vs. European Cities
|
| 203 |
+
4. Gridlock Costs: Economic Value of Lost Time Due to Traffic in LA, Mumbai, and Bogota
|
| 204 |
+
5. Skies Clearing? Airline Passenger Volumes vs. Business Travel Recovery Rates
|
| 205 |
+
6. Speed vs. Cost: High-Speed Rail Ticket Prices vs. Budget Flights on Comparable Routes
|
| 206 |
+
7. The EV Curve: Electric Vehicle Market Share Tipping Points by Country
|
| 207 |
+
8. Port Traffic: TEU Container Throughput in Shanghai vs. Rotterdam vs. Long Beach
|
| 208 |
+
9. Infrastructure Gap: Spending on Highways vs. Public Transit by Government
|
| 209 |
+
10. Fueling the Wallet: Cost Per Mile of Driving Gas vs. Hybrid vs. Electric Vehicles
|
| 210 |
+
11. The Last Mile: Average Commute Time Increase in Major Metros (2010-2025)
|
| 211 |
+
12. Ride-Hailing Wars: Uber/Lyft Market Share vs. Taxi Industry in Key Cities
|
| 212 |
+
13. Robotaxis: Total Autonomous Miles Driven Without Human Intervention (Waymo vs. Cruise)
|
| 213 |
+
14. Pedal Power: Growth in Bike Commuting Correlated with Protected Lane Investments
|
| 214 |
+
15. Road Safety: Traffic Fatalities Per 100,000 People (US vs. Western Europe)
|
| 215 |
+
16. Transport Poverty: Percentage of Income Spent on Commuting by Low-Wage Workers
|
| 216 |
+
17. On-Time or Bust: Flight Delay and Cancellation Rates of Major Airlines
|
| 217 |
+
18. Manufacturing Giants: Vehicles Produced Per Year by Toyota vs. VW vs. Tesla
|
| 218 |
+
19. Delivery Wars: Parcel Volume Growth of Amazon Logistics vs. FedEx vs. UPS
|
| 219 |
+
20. Walkability Premium: Real Estate Price Appreciation in Pedestrian-Friendly vs. Car-Centric Areas
|
| 220 |
+
|
| 221 |
+
# Social Media
|
| 222 |
+
1. Attention Economy: Average Session Duration on TikTok vs. Instagram Reels vs. YouTube Shorts
|
| 223 |
+
2. Generational Scroll: Daily Time Spent on Social Media (Gen Z vs. Boomers)
|
| 224 |
+
3. Creator Inequality: Percentage of Revenue Earned by Top 1% of Creators vs. The Rest
|
| 225 |
+
4. Ad Dollars: Revenue Per User (ARPU) on Facebook (North America vs. Asia)
|
| 226 |
+
5. Algorithm Impact: Organic Reach Decline for Brands on Instagram Over 5 Years
|
| 227 |
+
6. The Next Billion: User Growth Rates of Social Apps in Africa and India vs. The West
|
| 228 |
+
7. Job Market: Demand for "Content Creators" vs. "Social Media Managers"
|
| 229 |
+
8. Viral Lies: Velocity of Misinformation Spread vs. Fact-Checks on X (Twitter) and Facebook
|
| 230 |
+
9. Professional vs. Personal: User Engagement Patterns on LinkedIn vs. TikTok
|
| 231 |
+
10. Sentiment Divide: Percentage of Negative vs. Positive Comments on Political Content
|
| 232 |
+
11. Social Commerce: Conversion Rates of In-App Checkout vs. Click-Through Links
|
| 233 |
+
12. The Exodus: User Migration Flows (e.g., Twitter to Threads/Bluesky)
|
| 234 |
+
13. Format Wars: Engagement Rates of Video vs. Static Image Posts by Industry
|
| 235 |
+
14. Hashtag Fatigue: Effectiveness of Branded Hashtags in Campaigns Over Time
|
| 236 |
+
15. Trust Issues: User Trust Levels in Social Platforms Before and After Major Data Scandals
|
| 237 |
+
16. ROI Reality: Cost Per Acquisition (CPA) for Ads on LinkedIn vs. Facebook vs. TikTok
|
| 238 |
+
17. Influence Inflation: Average Engagement Rate Decline for Mega-Influencers
|
| 239 |
+
18. Moderation Scale: Number of Human Moderators vs. AI Takedowns by Platform
|
| 240 |
+
19. Valuation Metrics: Market Cap Per Monthly Active User (Snapchat vs. Meta vs. Pinterest)
|
| 241 |
+
20. News Source: Percentage of Users Getting News Primarily from Social Media by Age
|
| 242 |
+
|
| 243 |
+
# Historical
|
| 244 |
+
1. The Great Divergence: GDP Share of China/India vs. Western Europe (1500-2000)
|
| 245 |
+
2. The Human Cost: Military vs. Civilian Casualty Ratios in WWI vs. WWII
|
| 246 |
+
3. Empire Economies: Estimated GDP of the Roman Empire vs. Han Dynasty at Peak
|
| 247 |
+
4. Knowledge Spread: Literacy Rate Growth Following the Printing Press vs. The Internet
|
| 248 |
+
5. Pandemic Tolls: Mortality Rates of the Black Death vs. Spanish Flu vs. COVID-19
|
| 249 |
+
6. Tech Adoption: Years to Reach 50% Household Adoption (Electricity vs. Internet)
|
| 250 |
+
7. Ancient Trade: Volume of Goods Moved on the Silk Road vs. Roman Mediterranean Shipping
|
| 251 |
+
8. Dynastic Cycles: Average Duration of Chinese Dynasties vs. European Monarchies
|
| 252 |
+
9. Lingua Franca: Number of Latin Speakers (Historical) vs. English Speakers (Modern)
|
| 253 |
+
10. Hard Money: The Fluctuating Value of Gold vs. Silver from Rome to the 19th Century
|
| 254 |
+
11. Moving Masses: Migration Flows to the Americas (19th Century vs. 21st Century)
|
| 255 |
+
12. Stone vs. Glass: Height of Gothic Cathedrals vs. Modern Skyscrapers Timeline
|
| 256 |
+
13. Life and Death: Average Life Expectancy of Aristocrats vs. Peasants in Medieval Europe
|
| 257 |
+
14. Collapse: Correlation Between Climate Shifts and the Fall of Mayan/Norse Civilizations
|
| 258 |
+
15. Old Money: Wealth Accumulation of the Medicis vs. The Rockefellers (Inflation Adjusted)
|
| 259 |
+
16. Information Storage: Cost and Durability of Papyrus vs. Parchment vs. Paper
|
| 260 |
+
17. Unearthing History: Rate of Major Archaeological Discoveries (19th vs. 20th vs. 21st Century)
|
| 261 |
+
18. Ruling Systems: Percentage of World Population Living Under Democracies vs. Autocracies Over Time
|
| 262 |
+
19. Faith Growth: Expansion Rates of Christianity vs. Islam (First 500 Years of Each)
|
| 263 |
+
20. Artifact Value: Appreciation of Egyptian Antiquities vs. Renaissance Art in the Last Century
|
| 264 |
+
|
| 265 |
+
# Educational Systems
|
| 266 |
+
1. Bang for the Buck: PISA Test Scores vs. Education Spending Per Student by Country
|
| 267 |
+
2. Class Size Matters? Student-Teacher Ratios vs. Standardized Test Results
|
| 268 |
+
3. The Global Classroom: International Student Enrollment Numbers in US/UK vs. Canada/Australia
|
| 269 |
+
4. Access Denied: University Enrollment Rates by Family Income Quintile
|
| 270 |
+
5. The Debt Trap: Average Student Loan Balance vs. Entry-Level Salary (2000-2025)
|
| 271 |
+
6. Graduation Gaps: High School Completion Rates in Urban vs. Suburban Districts
|
| 272 |
+
7. EdTech Boom: Venture Capital Investment in K-12 Learning Apps vs. University Platforms
|
| 273 |
+
8. Hands-On vs. Lecture: Retention Rates of Project-Based Learning vs. Traditional Instruction
|
| 274 |
+
9. Crumbling Schools: Capital Spending on Facilities in Low vs. High Income Areas
|
| 275 |
+
10. The Achievement Gap: Reading Proficiency Differences by Race and Income Level Over Time
|
| 276 |
+
11. Teacher Pay Penalty: Teacher Salaries vs. Comparable College-Educated Professionals
|
| 277 |
+
12. Dropout Rates: MOOC Completion Percentages vs. Traditional University Courses
|
| 278 |
+
13. Vocational Value: Lifetime Earnings of Trade School Grads vs. Liberal Arts Majors
|
| 279 |
+
14. School Choice: Test Score Comparisons of Charter Schools vs. Public Schools in the Same Zip Codes
|
| 280 |
+
15. Major Shifts: Enrollment Trends in STEM vs. Humanities Departments (2010-2025)
|
| 281 |
+
16. Gender in STEM: Percentage of Female Graduates in Engineering by Country
|
| 282 |
+
17. Economic Engines: Correlation Between National Literacy Rates and GDP Per Capita
|
| 283 |
+
18. Sticker Shock: Textbook Price Inflation vs. Consumer Price Index (CPI)
|
| 284 |
+
19. Brain Drain: Percentage of International PhD Grads Staying in Host Country
|
| 285 |
+
20. Equity in Access: College Completion Rates for First-Generation Students vs. Legacy Students
|
| 286 |
+
|
| 287 |
+
# Wildlife Conservation
|
| 288 |
+
1. Poaching Economics: Black Market Price of Rhino Horn vs. Anti-Poaching Spending
|
| 289 |
+
2. Funding Sources: Government vs. Philanthropic Contributions to Conservation in Africa
|
| 290 |
+
3. Nature Returns: Forest Cover Increase in Europe vs. Deforestation in the Tropics
|
| 291 |
+
4. The Pet Trade: Volume of Illegal Reptile/Bird Trafficking vs. Legal Exports
|
| 292 |
+
5. Protecting the Ocean: Percentage of EEZ Designated as Marine Protected Areas by Country
|
| 293 |
+
6. Tourism vs. Extraction: Revenue from Ecotourism vs. Logging in Biodiversity Hotspots
|
| 294 |
+
7. Back from the Brink: Population Recovery Curves of Bald Eagles, Pandas, and Bison
|
| 295 |
+
8. Reef Health: Percentage of Live Coral Cover in Protected vs. Unprotected Zones
|
| 296 |
+
9. The Ivory Ban: Elephant Poaching Incidents Before and After International Bans
|
| 297 |
+
10. Safari Dollars: Percentage of Tourism Revenue Reaching Local Communities in Kenya vs. Tanzania
|
| 298 |
+
11. Captive Hope: Success Rates of Reintroducing Zoo-Bred Species into the Wild
|
| 299 |
+
12. Tech in the Wild: Growth in Usage of Drones and AI Cameras for Monitoring
|
| 300 |
+
13. Human-Wildlife Conflict: Livestock Loss Compensation Payments vs. Predator Population Growth
|
| 301 |
+
14. Connected Landscapes: Animal Migration Success in Wildlife Corridors vs. Fragmented Areas
|
| 302 |
+
15. Climate Migrants: Shift in Habitat Range for Polar Bears and Alpine Species
|
| 303 |
+
16. Invasive Cost: Economic Damage Caused by Invasive Species vs. Eradication Budgets
|
| 304 |
+
17. NGO Efficiency: Percentage of Donations Going to Fieldwork vs. Administration (WWF, etc.)
|
| 305 |
+
18. Volunteer Power: Economic Value of Volunteer Labor in Conservation Projects
|
| 306 |
+
19. Wolf Politics: Elk Population Trends in Areas with vs. Without Wolf Packs
|
| 307 |
+
20. Guardians: Effectiveness of Indigenous-Led Conservation Areas vs. State-Run Parks
|
| 308 |
+
|
| 309 |
+
# Fashion Industry
|
| 310 |
+
1. The Cost of Cheap: Water Usage in Fast Fashion vs. Sustainable Denim Production
|
| 311 |
+
2. Luxury Resilience: Revenue Growth of Hermes/LVMH vs. Mass Market Retailers During Recessions
|
| 312 |
+
3. The Resale Boom: Market Growth of Second-Hand Platforms (Depop/RealReal) vs. Fast Fashion
|
| 313 |
+
4. Textile Waste: Tons of Clothing Sent to Landfill vs. Recycled Per Year
|
| 314 |
+
5. Fashion Week Economics: City Revenue Generated by NYFW vs. Paris Fashion Week
|
| 315 |
+
6. Sticker Shock: Price Inflation of Luxury Handbags vs. Inflation Rate
|
| 316 |
+
7. Clicks vs. Bricks: Conversion Rates in Physical Stores vs. E-commerce Fashion Apps
|
| 317 |
+
8. Labor Reality: Monthly Minimum Wage for Garment Workers in Bangladesh vs. Living Wage
|
| 318 |
+
9. Material World: Market Share of Polyester vs. Cotton vs. Recycled Fibers
|
| 319 |
+
10. Vintage Revival: Gen Z Spending on Thrifting vs. New Clothing
|
| 320 |
+
11. Influencer ROI: Sales Impact of Micro-Influencers vs. Celebrity Ambassadors
|
| 321 |
+
12. Transparency Index: Percentage of Brands Publishing Tier 1 vs. Tier 2 Supplier Lists
|
| 322 |
+
13. The Pink Pay Gap: Gender Wage Disparity in Fashion Design vs. Executive Boards
|
| 323 |
+
14. Cost Breakdown: Fabric vs. Labor vs. Markup in a $20 T-Shirt vs. a $200 T-Shirt
|
| 324 |
+
15. Mall Death: Vacancy Rates in Shopping Malls vs. High Street Retail Growth
|
| 325 |
+
16. Speed to Market: Design-to-Store Time for Zara/Shein vs. Traditional Retailers
|
| 326 |
+
17. Brand Mortality: Survival Rate of Direct-to-Consumer (DTC) Fashion Startups
|
| 327 |
+
18. Seasonal Shifts: Revenue Share of Winter Coats vs. Summer Swimwear (Impact of Climate)
|
| 328 |
+
19. Wallet Share: Percentage of Disposable Income Spent on Apparel by Generation
|
| 329 |
+
20. Employment Trends: Job Growth in Fashion Tech vs. Traditional Retail Sales
|
| 330 |
+
|
| 331 |
+
# Urban Development
|
| 332 |
+
1. Density vs. Livability: Quality of Life Scores in Tokyo vs. Manhattan vs. Houston
|
| 333 |
+
2. Space for Cars vs. People: Percentage of Land Area Dedicated to Roads/Parking in Cities
|
| 334 |
+
3. Affordability Crisis: Price-to-Income Ratios for Housing in Global Tech Hubs
|
| 335 |
+
4. Transit Investment: Capital Spending on Public Transport per Capita by City Size
|
| 336 |
+
5. Cooling Cities: Temperature Difference in Neighborhoods with High vs. Low Tree Canopy
|
| 337 |
+
6. Two Wheels vs. Four: Commute Mode Share Changes in Paris and London
|
| 338 |
+
7. The Heat Island: Impact of Green Roofs and Parks on Urban Temperatures
|
| 339 |
+
8. Value of the Mix: Property Values in Mixed-Use vs. Single-Family Zoning Districts
|
| 340 |
+
9. Megacity Growth: Population Influx to Capitals vs. Secondary "Tier 2" Cities
|
| 341 |
+
10. Smart City ROI: Cost Savings from Intelligent Street Lighting and Waste Management
|
| 342 |
+
11. Gentrification Waves: Demographic Shifts and Rent Increases in Brooklyn (2000-2020)
|
| 343 |
+
12. Managing Rain: Runoff Reduction from Permeable Pavement vs. Traditional Asphalt
|
| 344 |
+
13. Walkable Wealth: Retail Revenue Growth in Pedestrianized Zones vs. Car Streets
|
| 345 |
+
14. Eyes on the Street: Crime Rates in Areas with Improved Lighting vs. CCTV Surveillance
|
| 346 |
+
15. Green Building: Energy Savings of LEED Platinum Buildings vs. Code-Minimum Structures
|
| 347 |
+
16. Food Deserts: Distance to Nearest Grocery Store in Low vs. High Income Neighborhoods
|
| 348 |
+
17. Transit Reach: Percentage of Jobs Accessible Within 60 Minutes by Public Transit
|
| 349 |
+
18. Reuse vs. New: Construction Costs of Adaptive Reuse Projects vs. Ground-Up Builds
|
| 350 |
+
19. Breathing Room: Air Pollution Levels in Cities with Congestion Pricing vs. Without
|
| 351 |
+
20. Budget Priorities: City Spending on Police vs. Housing vs. Parks per Resident
|
| 352 |
+
|
| 353 |
+
# Entertainment
|
| 354 |
+
1. The Streaming Plateau: Subscriber Churn Rates for Netflix, Disney+, and Max
|
| 355 |
+
2. Box Office Shift: Ticket Sales for Superhero Franchises vs. Horror/Indie Films
|
| 356 |
+
3. Console Wars: Total Units Sold of PS5 vs. Xbox Series X vs. Nintendo Switch
|
| 357 |
+
4. Live Nation Economy: Average Concert Ticket Prices vs. Inflation (2010-2025)
|
| 358 |
+
5. Blockbuster Risk: Production Budget vs. Global Box Office ROI for Tentpole Movies
|
| 359 |
+
6. Screen Time: Daily Hours Spent on Gaming vs. Social Media vs. TV by Gen Alpha
|
| 360 |
+
7. The Jordan Standard: Annual Revenue from Air Jordan Brand vs. Yeezy (Peak) vs. Curry
|
| 361 |
+
8. Franchise Power: Cumulative Box Office of Marvel Cinematic Universe vs. Star Wars
|
| 362 |
+
9. Artist Pay: Per-Stream Payout Rates of Spotify vs. Apple Music vs. Tidal
|
| 363 |
+
10. Theme Park Recovery: Attendance Numbers at Disney World vs. Universal Studios
|
| 364 |
+
11. Hollywood Labor: Employment Numbers in Visual Effects vs. Traditional Set Production
|
| 365 |
+
12. Filming Incentives: Tax Credits Claimed by Productions in Georgia vs. California
|
| 366 |
+
13. Scalper's Premium: Face Value vs. Resale Price of Taylor Swift/Beyoncé Tickets
|
| 367 |
+
14. Mobile Dominance: Global Revenue of Mobile Games vs. PC/Console Games
|
| 368 |
+
15. Cord Cutting: Cable TV Penetration Rates by Age Group
|
| 369 |
+
16. Media Stocks: Share Price Performance of Legacy Media vs. Tech Streamers
|
| 370 |
+
17. Merch Money: Revenue from Movie Ticket Sales vs. Licensed Merchandise
|
| 371 |
+
18. Award Show Decline: TV Viewership Trends for the Oscars and Grammys
|
| 372 |
+
19. Piracy Returns: Traffic to Illegal Streaming Sites vs. Subscription Price Hikes
|
| 373 |
+
20. Virtual Reality: Monthly Active Users on VR Social Platforms vs. Gaming Consoles
|
| 374 |
+
|
| 375 |
+
# Agricultural
|
| 376 |
+
1. Yield vs. Price: Profit Per Acre for Organic vs. Conventional Corn Farming
|
| 377 |
+
2. Water Wise: Water Usage Per Calorie Produced (Drip Irrigation vs. Flood)
|
| 378 |
+
3. Farm Consolidation: Decline in Number of Small Farms vs. Growth in Average Acreage
|
| 379 |
+
4. Chemical Dependency: Pesticide Usage Trends in US vs. EU Agriculture
|
| 380 |
+
5. The Organic Premium: Consumer Price Differences for Organic Eggs/Milk/Produce
|
| 381 |
+
6. Subsidy Flow: Percentage of Government Farm Payments Going to Top 10% vs. Bottom 50%
|
| 382 |
+
7. Soil Wealth: Organic Matter Content in Regenerative vs. Tilled Fields
|
| 383 |
+
8. Machine ROI: Payback Period for Autonomous Tractors vs. Traditional Machinery
|
| 384 |
+
9. Export Kings: Value of Agricultural Exports (US Corn vs. Brazil Soy vs. Russian Wheat)
|
| 385 |
+
10. Waste Not: Food Loss Percentage at Harvest Level vs. Retail Level
|
| 386 |
+
11. Efficiency Gap: Agricultural Output Per Worker in Netherlands vs. Global Average
|
| 387 |
+
12. Controlled Environment: Yield Per Square Foot in Vertical Farms vs. Open Fields
|
| 388 |
+
13. Climate Stress: Wheat Yield Fluctuations in Drought-Prone Regions
|
| 389 |
+
14. Carbon Farming: Sequestration Rates of Pasture Land vs. Row Crops
|
| 390 |
+
15. Meat Math: Feed Conversion Ratios for Beef vs. Pork vs. Chicken
|
| 391 |
+
16. Urban Harvest: Volume of Greens Produced in Urban Greenhouses vs. Imported
|
| 392 |
+
17. Tech Adoption: Percentage of Farms Using GPS/Precision Ag Technology
|
| 393 |
+
18. Seed Wars: Market Share of GMO vs. Non-GMO Seeds in Key Crops
|
| 394 |
+
19. Aging Fields: Average Age of Farmers in US, Japan, and Europe
|
| 395 |
+
20. Income Stability: Farm Household Income from Farming vs. Off-Farm Jobs
|
| 396 |
+
|
| 397 |
+
# Cultural Traditions
|
| 398 |
+
1. Party Profits: Economic Impact of Rio Carnival vs. Munich Oktoberfest on Local GDP
|
| 399 |
+
2. Overtourism: Visitor Density in Venice and Kyoto vs. Resident Population
|
| 400 |
+
3. Dying Arts: Average Age of Artisans in Traditional Kimono vs. Carpet Industries
|
| 401 |
+
4. Language Revival: Growth in Speakers of Welsh and Hawaiian Following State Support
|
| 402 |
+
5. Festival Fusion: Participation Rates in Diwali vs. Christmas in Multicultural Cities
|
| 403 |
+
6. Lost Stories: Rate of Language Extinction vs. Documentation Efforts
|
| 404 |
+
7. Funding Culture: Public Grants for Traditional Arts vs. Corporate Sponsorships
|
| 405 |
+
8. Heritage at Risk: Erosion Rates at Machu Picchu vs. Visitor Footfall Limits
|
| 406 |
+
9. Pop vs. Trad: Domestic Sales of K-Pop vs. Traditional Korean Music
|
| 407 |
+
10. Secular Holidays: Commercial Revenue of Halloween vs. Valentine's Day Globally
|
| 408 |
+
11. Food Diplomacy: The Global Spread of Sushi Restaurants vs. Italian Pizzerias
|
| 409 |
+
12. Decolonizing History: Percentage of Curriculum Dedicated to Indigenous History
|
| 410 |
+
13. Costume Economy: Rental Revenue of Hanbok (Korea) vs. Kimono (Japan) Tourism
|
| 411 |
+
14. Identity Crisis: Survey Data on Cultural Identification Among Immigrant Youth
|
| 412 |
+
15. Rebuilding History: Restoration Costs of Notre Dame vs. Maintenance of the Great Wall
|
| 413 |
+
16. Soft Power Exchange: Number of Fulbright Scholars vs. Confucius Institutes
|
| 414 |
+
17. High Art Demographics: Average Age of Opera Audiences vs. Musical Theater
|
| 415 |
+
18. Museum Models: Reliance on Ticket Sales vs. Government Funding (US vs. UK)
|
| 416 |
+
19. Digital Heritage: Budget for 3D Scanning Historical Sites vs. Physical Conservation
|
| 417 |
+
20. Sun vs. Culture: Tourist Spending in Beach Resorts vs. Cultural Heritage Sites
|
| 418 |
+
|
| 419 |
+
# Energy
|
| 420 |
+
1. The Price Plunge: Cost Per MWh of Solar PV vs. Coal (2010-2025)
|
| 421 |
+
2. Grid Mix: Percentage of Electricity Generated by Renewables by Country
|
| 422 |
+
3. Energy Intensity: Energy Used Per Dollar of GDP (US vs. EU vs. China)
|
| 423 |
+
4. Peak Demand: Reliability of Nuclear vs. Solar During Heatwaves
|
| 424 |
+
5. Dirty Power: Carbon Intensity of Electricity Grids in Coal-Heavy vs. Hydro-Heavy Regions
|
| 425 |
+
6. Storage Boom: Global Battery Storage Capacity Installations Year-Over-Year
|
| 426 |
+
7. Efficiency Gains: Solar Panel Efficiency Records (Lab vs. Commercial Average)
|
| 427 |
+
8. Subsidy Wars: Global Fossil Fuel Subsidies vs. Renewable Energy Support
|
| 428 |
+
9. Nuclear Timelines: Construction Duration and Cost Overruns of Recent Nuclear Plants
|
| 429 |
+
10. Infrastructure Spend: Investment in Grid Transmission vs. Power Generation
|
| 430 |
+
11. Smart Savings: Energy Consumption Reduction in Smart Meter vs. Standard Homes
|
| 431 |
+
12. The Cost of Clean: Residential Electricity Prices in Green-Leading vs. Laggard Nations
|
| 432 |
+
13. Oil Volatility: Brent Crude Price Swings During Geopolitical Crises
|
| 433 |
+
14. Energy Access: Electrification Rates in Sub-Saharan Africa vs. South Asia
|
| 434 |
+
15. Green Jobs: Employment Per Unit of Energy Produced (Solar vs. Coal vs. Gas)
|
| 435 |
+
16. Always On? Capacity Factors of Nuclear vs. Wind vs. Solar Plants
|
| 436 |
+
17. Transmission Loss: Energy Lost in Long-Distance HVDC vs. AC Lines
|
| 437 |
+
18. Tech Race: Patent Filings for Solid-State Batteries vs. Hydrogen Fuel Cells
|
| 438 |
+
19. EROI: Energy Return on Investment for Oil Sands vs. Wind Turbines
|
| 439 |
+
20. Price Shock: Wholesale Electricity Price Spikes During Extreme Weather Events
|
data_generator/theme_analysis.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
data_generator/theme_generator.py
ADDED
|
@@ -0,0 +1,349 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
# -*- coding: utf-8 -*-
|
| 3 |
+
|
| 4 |
+
import os
|
| 5 |
+
import sys
|
| 6 |
+
import re
|
| 7 |
+
import json
|
| 8 |
+
import requests
|
| 9 |
+
import threading
|
| 10 |
+
from concurrent.futures import ThreadPoolExecutor
|
| 11 |
+
from typing import List, Dict, Tuple
|
| 12 |
+
|
| 13 |
+
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
| 14 |
+
from config import api_key, base_url
|
| 15 |
+
|
| 16 |
+
# API configuration
|
| 17 |
+
API_KEY = api_key
|
| 18 |
+
API_PROVIDER = base_url
|
| 19 |
+
|
| 20 |
+
# Thread-safe print function
|
| 21 |
+
print_lock = threading.Lock()
|
| 22 |
+
def thread_safe_print(*args, **kwargs):
|
| 23 |
+
with print_lock:
|
| 24 |
+
print(*args, **kwargs)
|
| 25 |
+
|
| 26 |
+
def query_llm(prompt: str) -> str:
|
| 27 |
+
"""
|
| 28 |
+
Query LLM API with a prompt
|
| 29 |
+
Args:
|
| 30 |
+
prompt: The prompt to send to LLM
|
| 31 |
+
Returns:
|
| 32 |
+
str: The response from LLM
|
| 33 |
+
"""
|
| 34 |
+
headers = {
|
| 35 |
+
'Authorization': f'Bearer {API_KEY}',
|
| 36 |
+
'Content-Type': 'application/json'
|
| 37 |
+
}
|
| 38 |
+
|
| 39 |
+
data = {
|
| 40 |
+
'model': 'gpt-5-mini',
|
| 41 |
+
'messages': [
|
| 42 |
+
{
|
| 43 |
+
'role': 'system',
|
| 44 |
+
'content': 'You are a senior data journalist and infographic designer specialized in creating compelling data stories. Always return valid JSON format only, without any markdown formatting or extra text.'
|
| 45 |
+
},
|
| 46 |
+
{
|
| 47 |
+
'role': 'user',
|
| 48 |
+
'content': prompt
|
| 49 |
+
}
|
| 50 |
+
],
|
| 51 |
+
'temperature': 0.7
|
| 52 |
+
}
|
| 53 |
+
|
| 54 |
+
try:
|
| 55 |
+
response = requests.post(
|
| 56 |
+
f'{API_PROVIDER}/chat/completions',
|
| 57 |
+
headers=headers,
|
| 58 |
+
json=data,
|
| 59 |
+
timeout=120
|
| 60 |
+
)
|
| 61 |
+
response.raise_for_status()
|
| 62 |
+
|
| 63 |
+
result = response.json()
|
| 64 |
+
return result['choices'][0]['message']['content'].strip()
|
| 65 |
+
|
| 66 |
+
except requests.exceptions.Timeout:
|
| 67 |
+
thread_safe_print("❌ LLM API 超时(60秒)")
|
| 68 |
+
return None
|
| 69 |
+
except requests.exceptions.HTTPError as e:
|
| 70 |
+
thread_safe_print(f"❌ LLM API HTTP 错误: {e}")
|
| 71 |
+
if hasattr(e.response, 'text'):
|
| 72 |
+
thread_safe_print(f" 响应: {e.response.text[:200]}")
|
| 73 |
+
return None
|
| 74 |
+
except requests.exceptions.RequestException as e:
|
| 75 |
+
thread_safe_print(f"❌ LLM API 请求错误: {e}")
|
| 76 |
+
return None
|
| 77 |
+
except KeyError as e:
|
| 78 |
+
thread_safe_print(f"❌ LLM API 响应格式错误: {e}")
|
| 79 |
+
return None
|
| 80 |
+
except Exception as e:
|
| 81 |
+
thread_safe_print(f"❌ 查询 LLM 时出错: {e}")
|
| 82 |
+
return None
|
| 83 |
+
|
| 84 |
+
def read_theme_file(file_path: str) -> Dict[str, List[Dict[str, str]]]:
|
| 85 |
+
"""
|
| 86 |
+
Read the theme file and parse it into a dictionary with detailed themes
|
| 87 |
+
Args:
|
| 88 |
+
file_path: Path to the theme file
|
| 89 |
+
Returns:
|
| 90 |
+
Dict[str, List[Dict]]: Dictionary where keys are main theme names and values are lists of
|
| 91 |
+
dictionaries containing specific themes with their number and text
|
| 92 |
+
"""
|
| 93 |
+
themes = {}
|
| 94 |
+
current_main_theme = None
|
| 95 |
+
|
| 96 |
+
with open(file_path, 'r', encoding='utf-8') as f:
|
| 97 |
+
for line in f:
|
| 98 |
+
line = line.strip()
|
| 99 |
+
if not line:
|
| 100 |
+
continue
|
| 101 |
+
|
| 102 |
+
if line.startswith('#'):
|
| 103 |
+
current_main_theme = line[1:].strip()
|
| 104 |
+
themes[current_main_theme] = []
|
| 105 |
+
elif current_main_theme and re.match(r'^\d+\.', line):
|
| 106 |
+
# Extract the number and the specific theme content
|
| 107 |
+
match = re.match(r'^(\d+)\.\s*(.*)', line)
|
| 108 |
+
if match:
|
| 109 |
+
number = int(match.group(1))
|
| 110 |
+
specific_theme = match.group(2)
|
| 111 |
+
themes[current_main_theme].append({
|
| 112 |
+
"number": number,
|
| 113 |
+
"theme": specific_theme
|
| 114 |
+
})
|
| 115 |
+
|
| 116 |
+
return themes
|
| 117 |
+
|
| 118 |
+
def generate_similar_themes(main_theme: str, specific_theme: str, count: int = 15) -> List[Dict]:
|
| 119 |
+
"""
|
| 120 |
+
Generate similar themes to a specific theme and return in JSON format
|
| 121 |
+
Args:
|
| 122 |
+
main_theme: The main theme category
|
| 123 |
+
specific_theme: The specific theme to generate similar themes for
|
| 124 |
+
count: Number of similar themes to generate
|
| 125 |
+
Returns:
|
| 126 |
+
List[Dict]: List of new theme dictionaries with id, theme, and description
|
| 127 |
+
"""
|
| 128 |
+
prompt = f"""
|
| 129 |
+
You are a senior data journalist and infographic designer. Generate {count} compelling, diverse data story themes inspired by this reference:
|
| 130 |
+
|
| 131 |
+
Main Category: {main_theme}
|
| 132 |
+
Reference Theme: {specific_theme}
|
| 133 |
+
|
| 134 |
+
Create themes that would make excellent real-world infographics with these characteristics:
|
| 135 |
+
|
| 136 |
+
**DIVERSITY REQUIREMENTS:**
|
| 137 |
+
- Mix different angles: comparisons, trends over time, geographic distributions, rankings, cause-effect relationships, surprising statistics, myth-busting facts
|
| 138 |
+
- Vary the scope: global, regional, national, city-level, industry-specific, demographic-specific
|
| 139 |
+
- Include different time frames: historical analysis, current snapshots, future projections
|
| 140 |
+
- Cover various data types: percentages, absolute numbers, ratios, growth rates, correlations
|
| 141 |
+
|
| 142 |
+
**QUALITY CRITERIA:**
|
| 143 |
+
1. Each theme should tell a compelling data story that surprises, educates, or reveals hidden patterns
|
| 144 |
+
2. Must be based on realistic, obtainable data (surveys, government statistics, research studies, industry reports)
|
| 145 |
+
3. Should have a clear "hook" - why would someone stop scrolling to look at this infographic?
|
| 146 |
+
4. Include specific, concrete angles (e.g., "How coffee consumption varies by profession" instead of generic "Coffee consumption trends")
|
| 147 |
+
5. Themes should evoke curiosity or challenge common assumptions
|
| 148 |
+
6. Consider timely topics, emerging trends, or evergreen insights
|
| 149 |
+
|
| 150 |
+
**THEME STYLES TO INCLUDE:**
|
| 151 |
+
- "Did you know..." style surprising statistics
|
| 152 |
+
- "The real cost of..." economic breakdowns
|
| 153 |
+
- "A day/year in the life of..." behavioral patterns
|
| 154 |
+
- "X vs Y: The ultimate comparison" head-to-head analysis
|
| 155 |
+
- "The rise and fall of..." historical trends
|
| 156 |
+
- "What [demographic] really thinks about..." opinion data
|
| 157 |
+
- "Behind the numbers of..." deep-dive analysis
|
| 158 |
+
- "The geography of..." spatial distributions
|
| 159 |
+
- "Before and after..." transformation stories
|
| 160 |
+
|
| 161 |
+
Return ONLY valid JSON in this exact format:
|
| 162 |
+
[
|
| 163 |
+
{{
|
| 164 |
+
"id": 1,
|
| 165 |
+
"theme": "[Specific, engaging theme title that could be an infographic headline]",
|
| 166 |
+
"description": "[One-sentence description of the data story and why it's interesting]"
|
| 167 |
+
}},
|
| 168 |
+
...
|
| 169 |
+
]
|
| 170 |
+
|
| 171 |
+
Generate {count} DIVERSE themes - avoid repetitive patterns or similar angles. Each theme should feel fresh and distinct.
|
| 172 |
+
"""
|
| 173 |
+
|
| 174 |
+
response = query_llm(prompt)
|
| 175 |
+
if not response:
|
| 176 |
+
return []
|
| 177 |
+
|
| 178 |
+
# Parse the JSON response with robust cleaning
|
| 179 |
+
try:
|
| 180 |
+
# 清理可能的 markdown 代码块
|
| 181 |
+
cleaned_response = response.strip()
|
| 182 |
+
|
| 183 |
+
# 如果响应被包裹在代码块中
|
| 184 |
+
if cleaned_response.startswith('```'):
|
| 185 |
+
lines = cleaned_response.split('\n')
|
| 186 |
+
# 移除第一行和最后一行的```
|
| 187 |
+
if lines[-1].strip() == '```' or lines[-1].strip().startswith('```'):
|
| 188 |
+
cleaned_response = '\n'.join(lines[1:-1])
|
| 189 |
+
else:
|
| 190 |
+
cleaned_response = '\n'.join(lines[1:])
|
| 191 |
+
# 进一步清理
|
| 192 |
+
cleaned_response = cleaned_response.replace('```json', '').replace('```', '').strip()
|
| 193 |
+
|
| 194 |
+
# 尝试提取JSON数组
|
| 195 |
+
json_match = re.search(r'(\[[\s\S]*\])', cleaned_response)
|
| 196 |
+
if json_match:
|
| 197 |
+
json_content = json_match.group(1)
|
| 198 |
+
else:
|
| 199 |
+
json_content = cleaned_response
|
| 200 |
+
|
| 201 |
+
# 解析JSON
|
| 202 |
+
themes_data = json.loads(json_content)
|
| 203 |
+
|
| 204 |
+
# 验证返回的数据结构
|
| 205 |
+
if isinstance(themes_data, list) and len(themes_data) > 0:
|
| 206 |
+
# 验证每个主题是否有必需的字段
|
| 207 |
+
valid_themes = []
|
| 208 |
+
for theme in themes_data:
|
| 209 |
+
if isinstance(theme, dict) and 'theme' in theme and 'description' in theme:
|
| 210 |
+
valid_themes.append(theme)
|
| 211 |
+
|
| 212 |
+
if valid_themes:
|
| 213 |
+
return valid_themes
|
| 214 |
+
else:
|
| 215 |
+
thread_safe_print(f"⚠️ 主题 '{specific_theme}' 的响应缺少必需字段")
|
| 216 |
+
return []
|
| 217 |
+
else:
|
| 218 |
+
thread_safe_print(f"⚠️ 主题 '{specific_theme}' 的响应不是有效的列表")
|
| 219 |
+
return []
|
| 220 |
+
|
| 221 |
+
except json.JSONDecodeError as e:
|
| 222 |
+
thread_safe_print(f"❌ 解析 JSON 失败,主题 '{specific_theme}': {e}")
|
| 223 |
+
thread_safe_print(f" 响应内容(前500字符): {response[:500]}")
|
| 224 |
+
return []
|
| 225 |
+
except Exception as e:
|
| 226 |
+
thread_safe_print(f"❌ 处理响应时出错,主题 '{specific_theme}': {e}")
|
| 227 |
+
return []
|
| 228 |
+
|
| 229 |
+
def process_specific_theme(main_theme: str, specific_theme_data: Dict, all_results: List[Dict]) -> None:
|
| 230 |
+
"""
|
| 231 |
+
Process a specific theme and add generated similar themes to the results
|
| 232 |
+
Args:
|
| 233 |
+
main_theme: The main theme category
|
| 234 |
+
specific_theme_data: Dictionary with number and theme content
|
| 235 |
+
all_results: List to store all results
|
| 236 |
+
"""
|
| 237 |
+
specific_theme = specific_theme_data["theme"]
|
| 238 |
+
original_number = specific_theme_data["number"]
|
| 239 |
+
|
| 240 |
+
thread_safe_print(f"\n{'='*80}")
|
| 241 |
+
thread_safe_print(f"🔄 正在处理主题")
|
| 242 |
+
thread_safe_print(f" 分类: {main_theme}")
|
| 243 |
+
thread_safe_print(f" 主题: {specific_theme}")
|
| 244 |
+
thread_safe_print(f" 编号: {original_number}")
|
| 245 |
+
|
| 246 |
+
# First add the original theme as the first entry
|
| 247 |
+
with print_lock:
|
| 248 |
+
original_theme_entry = {
|
| 249 |
+
"id": len(all_results) + 1,
|
| 250 |
+
"theme": specific_theme,
|
| 251 |
+
"description": f"Original theme {original_number} from {main_theme} category",
|
| 252 |
+
"main_category": main_theme,
|
| 253 |
+
"is_original": True,
|
| 254 |
+
"original_number": original_number
|
| 255 |
+
}
|
| 256 |
+
all_results.append(original_theme_entry)
|
| 257 |
+
|
| 258 |
+
thread_safe_print(f"🤖 调用 LLM 生成相似主题...")
|
| 259 |
+
|
| 260 |
+
# Generate similar themes
|
| 261 |
+
similar_themes = generate_similar_themes(main_theme, specific_theme)
|
| 262 |
+
|
| 263 |
+
if similar_themes:
|
| 264 |
+
# Add main category and reference to original theme
|
| 265 |
+
for theme in similar_themes:
|
| 266 |
+
theme["main_category"] = main_theme
|
| 267 |
+
theme["is_original"] = False
|
| 268 |
+
theme["related_to_original"] = original_number
|
| 269 |
+
|
| 270 |
+
with print_lock:
|
| 271 |
+
all_results.extend(similar_themes)
|
| 272 |
+
|
| 273 |
+
thread_safe_print(f"✅ 成功生成 {len(similar_themes)} 个相似主题")
|
| 274 |
+
thread_safe_print(f" 总进度: {len(all_results)} 个主题已生成")
|
| 275 |
+
else:
|
| 276 |
+
thread_safe_print(f"❌ 生成主题失败: '{specific_theme}'")
|
| 277 |
+
|
| 278 |
+
def main():
|
| 279 |
+
import time
|
| 280 |
+
|
| 281 |
+
theme_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), "theme.txt")
|
| 282 |
+
output_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), "theme_new.json")
|
| 283 |
+
|
| 284 |
+
print("="*80)
|
| 285 |
+
print("🚀 开始主题生成流程")
|
| 286 |
+
print("="*80)
|
| 287 |
+
print(f"📖 读取主题文件: {theme_file}")
|
| 288 |
+
print(f"💾 输出文件: {output_file}")
|
| 289 |
+
|
| 290 |
+
# Read the original theme file
|
| 291 |
+
themes = read_theme_file(theme_file)
|
| 292 |
+
|
| 293 |
+
total_specific_themes = sum(len(specific_themes) for specific_themes in themes.values())
|
| 294 |
+
print(f"✅ 成功读取 {len(themes)} 个主分类,共 {total_specific_themes} 个具体主题")
|
| 295 |
+
print(f"🔧 并行线程数: 4")
|
| 296 |
+
print("="*80)
|
| 297 |
+
|
| 298 |
+
# Initialize results list for all themes
|
| 299 |
+
all_results = []
|
| 300 |
+
|
| 301 |
+
start_time = time.time()
|
| 302 |
+
|
| 303 |
+
# Use a thread pool to process specific themes in parallel
|
| 304 |
+
with ThreadPoolExecutor(max_workers=8) as executor:
|
| 305 |
+
futures = []
|
| 306 |
+
|
| 307 |
+
for main_theme, specific_themes in themes.items():
|
| 308 |
+
for specific_theme_data in specific_themes:
|
| 309 |
+
future = executor.submit(
|
| 310 |
+
process_specific_theme,
|
| 311 |
+
main_theme,
|
| 312 |
+
specific_theme_data,
|
| 313 |
+
all_results
|
| 314 |
+
)
|
| 315 |
+
futures.append(future)
|
| 316 |
+
|
| 317 |
+
# Wait for all tasks to complete
|
| 318 |
+
for future in futures:
|
| 319 |
+
future.result()
|
| 320 |
+
|
| 321 |
+
elapsed_time = time.time() - start_time
|
| 322 |
+
|
| 323 |
+
print("\n" + "="*80)
|
| 324 |
+
print("📊 重新分配主题 ID...")
|
| 325 |
+
|
| 326 |
+
# Reassign IDs to ensure they are sequential across all themes
|
| 327 |
+
for i, theme in enumerate(all_results, 1):
|
| 328 |
+
theme["id"] = i
|
| 329 |
+
|
| 330 |
+
print(f"💾 保存主题到文件: {output_file}")
|
| 331 |
+
|
| 332 |
+
# Save all themes to the output file
|
| 333 |
+
with open(output_file, 'w', encoding='utf-8') as f:
|
| 334 |
+
json.dump(all_results, f, indent=2, ensure_ascii=False)
|
| 335 |
+
|
| 336 |
+
print("\n" + "="*80)
|
| 337 |
+
print("✅ 所有主题处理完成!")
|
| 338 |
+
print("="*80)
|
| 339 |
+
print(f"📈 统计信息:")
|
| 340 |
+
print(f" 总主题数: {len(all_results)}")
|
| 341 |
+
print(f" 原始主题: {total_specific_themes}")
|
| 342 |
+
print(f" 生成主题: {len(all_results) - total_specific_themes}")
|
| 343 |
+
print(f" 扩展比例: {len(all_results) / total_specific_themes:.1f}x")
|
| 344 |
+
print(f"⏱️ 总耗时: {elapsed_time:.1f} 秒")
|
| 345 |
+
print(f"💾 保存路径: {output_file}")
|
| 346 |
+
print("="*80)
|
| 347 |
+
|
| 348 |
+
if __name__ == "__main__":
|
| 349 |
+
main()
|
data_generator/theme_new.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|