目次
研究データ解析の自動化
スクリプト
# coding: utf-8
import matplotlib.pyplot as plt
import seaborn as sns
filename = "GEN0712.csv"
import pandas as pd
df= pd.read_csv(filename, encoding= 'unicode_escape')
start_index = 0
end_index = 0
num_samples = 0
for i in range(df.shape[0]-1):
if df.iloc[i][0] == "Temp. [¡C]":
start_index = i
if type(df.iloc[i+1][0]) == float and type(df.iloc[i][0]) == str:
end_index = i+1
char_i = f"{df.iloc[start_index+1][0][0]}"
data = {}
for i in range(start_index+1,end_index):
data[df.iloc[i][0][0]] = []
for i in range(start_index+1,end_index):
data[df.iloc[i][0][0]].append({df.iloc[i][0]:[float(i) for i in df.iloc[i][1:-1]]})
print({df.iloc[i][0]:[float(i) for i in df.iloc[i][1:-1]]})
x = [i*180/3600 for i in range(len(df.iloc[start_index-2])-2)]
print(x)
import time
for graph in range(len(list(data.keys()))):
if True:
time.sleep(0.1)
fig = plt.figure(figsize=[5,5])
sns.set()
plt.rcParams['font.family'] ='sans-serif'
plt.rcParams['xtick.direction'] = 'in'
plt.rcParams['ytick.direction'] = 'in'
plt.rcParams['xtick.major.width'] = 1.0
plt.rcParams['ytick.major.width'] = 1.0
plt.rcParams['font.size'] = 9
plt.rcParams['axes.linewidth'] = 1.0
plt.gca().yaxis.set_major_formatter(plt.FormatStrFormatter('%.2f'))
plt.xlabel("time (h)")
plt.ylabel("OD600 (-)")
n = 0
labels = [f"0.{i+2}" for i in range(8)] + ["1.0"]
for i in data[list(data.keys())[graph]][1:][::-1]:
key = [j for j in i.keys()][0]
print(i[key])
plt.scatter(x,i[key],label = f"{labels[n]}",s = 6)
n+= 1
plt.legend(title="Conc. (µg/ml)")
fig.savefig(f"fig_{graph}.png",dpi = 500)
パスワード無限生成
import random
import time
class Seq:
def __init__(self) -> None:
self.nucleotides = [str(chr(i)) for i in range(50,160)]
self.chance_of_mutation = 0.1
self.seq_length = 300
def set_seq(self):
seq = ''
for i in range(self.seq_length):
seq += random.choice(self.nucleotides)
return seq
def mutate(self,seq):
new_seq = ''
for i in range(self.seq_length):
if random.random()<self.chance_of_mutation:
new_seq += random.choice(self.nucleotides)
else:
new_seq += seq[i]
return new_seq
def get_score(target,seq):
score = 0
for i in range(len(target)):
if target[i] == seq[i]:
score +=1
return score
target = Seq().set_seq()
seq = Seq().set_seq()
score, n= 0 ,0
while score != len(target):
n+=1
mutation_succeeded = False
for i in range(100):
mutant = Seq().mutate(seq)
print(mutant)
time.sleep(0.03)
if get_score(target,mutant)>score:
seq = mutant
score = get_score(target,mutant)
mutation_succeeded = True
if mutation_succeeded:
print('Gen{}:Score{}'.format(n,score/len(target)))

