サムネがコーヒーの記事は書きかけです。

TKC用スクリプト共有ページ

研究データ解析の自動化

スクリプト

# 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)))

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です