simplify the function to create particles
goal is to leave lots of room for student improvements in class. also, introduce missingness in the data
This commit is contained in:
@@ -1,47 +1,46 @@
|
|||||||
import random
|
import random
|
||||||
|
import sys
|
||||||
|
|
||||||
from particlecloud.stuff import Particle
|
import numpy as np
|
||||||
|
|
||||||
|
|
||||||
PARTICLE_FILE_COLUMN_NAMES = [
|
FILE_COLUMN_NAMES = [
|
||||||
"number", "mass", "vx", "vy", "vz", "px", "py", "pz",
|
"n", "m", "v1", "v2", "v3", "p1", "p2", "p3",
|
||||||
]
|
]
|
||||||
|
|
||||||
def make_particles(n=10):
|
|
||||||
particles = []
|
def write_data_file(filename, n=20, missing_values=False):
|
||||||
for i in range(n):
|
"""Write a csv file with data
|
||||||
particles.append(
|
"""
|
||||||
Particle(
|
|
||||||
mass=random.gauss(mu=3., sigma=0.5),
|
with open(filename, "w") as fp:
|
||||||
velocity=(
|
fp.write(", ".join(FILE_COLUMN_NAMES) + ",\n")
|
||||||
random.gauss(mu=0., sigma=1.5),
|
for i in range(n):
|
||||||
random.gauss(mu=0., sigma=1.5),
|
vals = []
|
||||||
random.gauss(mu=0., sigma=1.5),
|
vals.append(random.gauss(3., 0.5))
|
||||||
),
|
vals.extend(
|
||||||
position=(
|
(
|
||||||
random.gauss(mu=0., sigma=25),
|
random.gauss(0., 25),
|
||||||
random.gauss(mu=0., sigma=25),
|
random.gauss(0., 25),
|
||||||
random.gauss(mu=0., sigma=25),
|
random.gauss(0., 25),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
vals.extend(
|
||||||
return particles
|
(
|
||||||
|
random.gauss(0., 1.5),
|
||||||
|
random.gauss(0., 1.5),
|
||||||
def write_particles_file(filename, n=10):
|
random.gauss(0., 1.5),
|
||||||
"""Write a csv file with particle data
|
)
|
||||||
"""
|
)
|
||||||
particles = make_particles(n=n)
|
if missing_values:
|
||||||
with open(filename, "w") as fp:
|
if random.randint(0,10) < 1:
|
||||||
fp.write(", ".join(PARTICLE_FILE_COLUMN_NAMES) + ",\n")
|
idx = random.randint(1, len(vals))
|
||||||
for i, p in enumerate(particles):
|
vals[idx] = np.nan
|
||||||
vals = []
|
|
||||||
vals.append(p.mass)
|
|
||||||
vals.extend(p.velocity)
|
|
||||||
vals.extend(p.position)
|
|
||||||
line = f"{i}, " + ", ".join(f"{v:7.5f}" for v in vals) + ",\n"
|
line = f"{i}, " + ", ".join(f"{v:7.5f}" for v in vals) + ",\n"
|
||||||
fp.write(line)
|
fp.write(line)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
write_particles_file("sample_data.csv")
|
missing_values = sys.argv[-1] == '-m'
|
||||||
|
|
||||||
|
write_data_file("sample_data.csv", n=20, missing_values=True)
|
||||||
|
|||||||
Reference in New Issue
Block a user