File size: 4,863 Bytes
a0589da |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
import json
import os
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.decomposition import PCA
# Function to load JSON data
def load_json_data(json_file):
with open(json_file, 'r') as file:
return json.load(file)
# Directory containing the JSON files
data_dir = '.\\Documents\\big_bang_simulation_data\\'
# List all JSON files in the directory
data_files = [os.path.join(data_dir, f) for f in os.listdir(data_dir) if f.endswith('.json')]
# Load multiple JSON files into a DataFrame
data_list = [load_json_data(f) for f in data_files]
# Extract relevant data into a DataFrame
df = pd.DataFrame([
{
'tunneling_probability': data['tunneling_probability'],
'particle_mass_up': data['particle_masses_evolution'][0][-1],
'particle_mass_down': data['particle_masses_evolution'][1][-1],
'particle_mass_charm': data['particle_masses_evolution'][2][-1],
'particle_mass_strange': data['particle_masses_evolution'][3][-1],
'particle_mass_top': data['particle_masses_evolution'][4][-1],
'particle_mass_bottom': data['particle_masses_evolution'][5][-1],
'particle_mass_electron': data['particle_masses_evolution'][6][-1],
'particle_mass_muon': data['particle_masses_evolution'][7][-1],
'particle_mass_tau': data['particle_masses_evolution'][8][-1],
'particle_mass_photon': data['particle_masses_evolution'][9][-1],
'particle_speed': data['particle_speeds'][0][-1],
'particle_temperature': data['particle_temperatures'][0][-1],
}
for data in data_list
])
# Scatter Plot: Tunneling Probability vs Up Quark Mass
plt.figure(figsize=(8, 6))
sns.scatterplot(x='tunneling_probability', y='particle_mass_up', data=df)
plt.title('Tunneling Probability vs Up Quark Mass')
plt.xlabel('Tunneling Probability')
plt.ylabel('Up Quark Mass (GeV)')
plt.show()
# Scatter Plot: Particle Temperature vs Speed
plt.figure(figsize=(8, 6))
sns.scatterplot(x='particle_temperature', y='particle_speed', data=df)
plt.title('Particle Temperature vs Speed')
plt.xlabel('Temperature (K)')
plt.ylabel('Speed (m/s)')
plt.show()
# Line Graph: Evolution of Up Quark Mass Over Time
time_steps = range(len(data_list[0]['particle_masses_evolution'][0]))
plt.figure(figsize=(10, 6))
for data in data_list:
plt.plot(time_steps, data['particle_masses_evolution'][0], label=f"Tunneling Probability: {data['tunneling_probability']:.2f}")
plt.title('Evolution of Up Quark Mass Over Time')
plt.xlabel('Time Steps')
plt.ylabel('Up Quark Mass (GeV)')
plt.legend()
plt.show()
# Dimensionality Reduction: PCA
features = ['particle_mass_up', 'particle_mass_down', 'particle_mass_charm', 'particle_mass_strange', 'particle_mass_top', 'particle_mass_bottom', 'particle_mass_electron', 'particle_mass_muon', 'particle_mass_tau', 'particle_mass_photon', 'particle_speed', 'particle_temperature']
X = df[features]
pca = PCA(n_components=2)
principal_components = pca.fit_transform(X)
pca_df = pd.DataFrame(data=principal_components, columns=['PC1', 'PC2'])
# PCA Plot
plt.figure(figsize=(8, 6))
sns.scatterplot(x='PC1', y='PC2', data=pca_df, hue=df['tunneling_probability'], palette='viridis')
plt.title('PCA of Particle Properties')
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.show()
# Investigate correlations in detail
correlation_matrix = df.corr()
plt.figure(figsize=(12, 10))
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm')
plt.title('Detailed Correlation Matrix')
plt.show()
# Identify highly correlated pairs
correlated_pairs = correlation_matrix.unstack().sort_values(kind="quicksort")
highly_correlated_pairs = correlated_pairs[(abs(correlated_pairs) > 0.8) & (abs(correlated_pairs) < 1)]
# Print highly correlated pairs
print("Highly Correlated Pairs:")
print(highly_correlated_pairs)
# Considering additional variables if available
df['particle_momentum'] = [...] # Add momentum data if available
df['particle_energy'] = [...] # Add energy data if available
# Re-run PCA with additional variables
features = ['particle_mass_up', 'particle_mass_down', 'particle_mass_charm', 'particle_mass_strange', 'particle_mass_top', 'particle_mass_bottom', 'particle_mass_electron', 'particle_mass_muon', 'particle_mass_tau', 'particle_mass_photon', 'particle_speed', 'particle_temperature', 'particle_momentum', 'particle_energy']
X = df[features]
pca = PCA(n_components=2)
principal_components = pca.fit_transform(X)
pca_df = pd.DataFrame(data=principal_components, columns=['PC1', 'PC2'])
# Plot updated PCA results
plt.figure(figsize=(8, 6))
sns.scatterplot(x='PC1', y='PC2', data=pca_df, hue=df['tunneling_probability'], palette='viridis')
plt.title('PCA of Particle Properties with Additional Variables')
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.show()
|