bash 문 실행할 파일이름을 start.sh 로 해서 생성해주기

import os
class TrainCallback(tf.keras.callbacks.Callback):
    def on_train_begin(self, logs=None):
        os.system("./start.sh &")
    def on_train_end(self, logs=None):
        os.system("mv start.txt " + file_name )
        os.system("pkill dcgmi") # start.sh 명령어 안에 dcgmi 가 있어서 dcgmi 포함하는것 강제종료..

파이썬에서 model.fit( 블라블라 )  이부분에서 아래 한줄 추가해주면 끝

callbacks = TrainCallback())

 

 

 

 

 

 

 

참조 :

https://www.tensorflow.org/api_docs/python/tf/keras/callbacks/Callback#on_train_begin

https://stackoverflow.com/questions/5789642/how-to-send-controlc-from-a-bash-script

초기세팅

import pandas as pd
import glob
import pickle
import matplotlib.pyplot as plt

pd.set_option('display.max_columns', None) # dataframe 잘림없이 출력
pd.set_option('display.max_rows', None)
pd.set_option('display.max_seq_items', None) # 리스트 잘림없이 출력
pd.options.display.float_format = '{:.5f}'.format  # e, 지수없이 출력
pd.set_option('display.max_colwidth', -1) #pd로 볼때 ...없이 출력
import warnings # warning 무시
warnings.filterwarnings('ignore')
pd.set_option('mode.chained_assignment',  None) # SettingWithCopyWarning 경고끄기

 

< 행열 이름바꾸기 >

더보기

# 행이름/열이름 변경 (index,columns 통으로 변경)

# 행 인덱스, 열 이름 변경하기
df.index=['학생1', '학생2']
df.columns=['연령','남녀','소속']

 

# 행이름/열이름 원래있는걸 다른이름으로 바꿔주기 (index,columns 이미있는걸 변경)

# 열 이름을 변경한다
df.rename(columns={'연령':'나이', '남녀':'성별', '소속':'학교'}, inplace=True)
# 행 인덱스를 변경한다
df.rename(index={'학생1':'준서', '학생2':'예은'}, inplace=True)

<행열 삭제>

더보기

열삭제 

del df['A']

df.drop(["B", "C"], axis=1)
df.drop(columns=["B", "C"],inplace=True)
df.pop("A") # A열만 반환해준다음,df확인해보면 A 빠져있을것

 

행삭제

df = df.drop(index=0, axis=0)
df = df.drop(index=[0, 1, 2], axis=0)
new_iris = iris.drop([1,2])
df.drop(["B", "C"], axis=0)

# 특정문자(save_fig2리스트에저장) 가 포함된 열 삭제
for i in save_fig2:
    print(i)
    df2 = df2[df2.columns.drop(list(df2.filter(regex=i)))]

<행열 타입 바꾸기>

더보기
df = df.astype({'시가':'int'}) # 특정열만 바꿔주기

<판다스 오름차순>

더보기
df['a'].sort_values()   # 작은수부터
df['a'].sort_values(ascending=False)   # 큰수부터

# 이건 해당 열에 맞춰서 모든 dataframe순서바꿈 / 큰수부터
per_model = per_model.sort_values(by=["noclust"], ascending=[False])

<데이터프레임 저장/불러오기>

더보기
# 저장
df.to_csv('./df.csv')
# 불러오기
df = pd.read_csv('./Data.csv')

<데이터프레임 잘리는거없이 전부 출력>

더보기
import warnings #dataframe 전체다출력
warnings.filterwarnings('ignore')
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)

<리스트 잘리는거없이 모두 출력 - dataframe columns너무많을때 잘림>

더보기
pd.set_option('display.max_seq_items', None)  # 리스트 잘리는거없이 전부 출력
df.columns

<데이터프레임 생성(컬럼,인덱스 지정)>

더보기
Data_T = pd.DataFrame(index = list(index_list),columns = list(columns_list))

<아래 행추가>

더보기
Total_latency.loc[len(Total_latency)] = [column1_value, column2_value]

< untilied:0 없이 / 저장한 포맷그대로 열기>

더보기
epoch_latency = pd.read_csv('epoch_latency.csv',index_col = 0)

< 얕은 복사>

더보기
import copy
b = copy.copy(a)

< index 재정렬 >

더보기
  df = df.reset_index(drop=True)

<특정열 제외하고 보기>

더보기
DATA[DATA.columns.difference(['Target_Instance', 'Target_latency'])].head()

< 특정행 제거>

더보기
gojung2 = gojung.drop(['CLOUD','GPU TYPE'])

 

<데이터프레임 type 바꾸기>

더보기
df.astype('float')

< 데이터프레임 오른쪽에 붙이기>

더보기
new = pd.concat([a, b],axis=1)

< 데이터프레임 아래에 붙이기>

더보기
pd.concat([df1, df2], axis = 0)

< replace >

더보기
df.replace(0, 5)  # 0을 5로 바꿔주기

 

 

< 원핫인코딩 >

더보기
pd.get_dummies(data['Embarked'])

 

< 쥬피터 동시에 여러개 실행 >

더보기
from multiprocessing import Pool
if __name__ == '__main__':
    with Pool(len(devide_3000)+1) as p:
        p.map(MADE_HN, devide_3000)
def MADE_HN(N):
	블라블라

< 리스트 차집합, 뺼셈 >

더보기
complement = list(set(lst1) - set(lst2))

< 얕은 복사 >

더보기
CROSS_column_DATA_scaled = CROSS_column_DATA.copy()

< 리눅스 파일복사>

더보기
cp -r /tf/Yoonseo/Github/DCGMI/dcgm/a100 /tf/Yoonseo/Github/DCGMI2/DATA/
# cp -r 복사할파일 복사해줄위치

< 상관관계 3가지 >

더보기
corr_kendall_DATA_NEW = DATA_NEW.corr(method="kendall")  # kendall pearson spearman
spearman_DATA_NEW = DATA_NEW.corr(method="spearman")  # kendall pearson spearman
pearson_DATA_NEW = DATA_NEW.corr(method="pearson")  # kendall pearson spearman

< 보기편하게 모아서 보기 >

더보기
show_data.groupby(['train','instance']).first()

< 피클파일 열기 >

더보기
with open('../DATA/raw-data/exp09/g5.xlarge/times-EC2-128-InceptionV3.pickle', 'rb') as f: df = pickle.load(f)

< 교집합 >

더보기
intersection = list(set(lst1) & set(lst2))

< 특정문자 포함 파일 지우기>

더보기
sudo rm -f *.csv

<여러개파일 zip>

더보기

 

zip zipfile.zip 파일1 파일2 파일3

< 행값 합 구하기 >

더보기
df.sum(axis=1)

< time >

더보기
start = time.time()
math.factorial(100000)
end = time.time()

print(f"{end - start:.5f} sec")

< Lambda 예제 >

더보기
# lambda 매개변수 : 표현식
# map(함수, 리스트)
# reduce(함수, 시퀀스)
# filter(함수, 리스트)

##################################################
>>> (lambda x,y: x + y)(10, 20)
30
>>> plus_ten = lambda x: x + 10
>>> plus_ten(1)
11
##################################################
>>> list(map(lambda x: x ** 2, range(5)))    
[0, 1, 4, 9, 16]
##################################################
>>> from functools import reduce   
>>> reduce(lambda x, y: x + y, [0, 1, 2, 3, 4])
10
>>> reduce(lambda x, y: y + x, 'abcde')
'edcba'
##################################################
>>> list(filter(lambda x: x < 5, range(10))) 
[0, 1, 2, 3, 4]
>>> list(filter(lambda x: x % 2, range(10)))  
[1, 3, 5, 7, 9]
# 4을 2로 나눈 나머지는 0, 0은 '거짓'이니까 버려짐.
##################################################
>>> test = 'A, B, C, D'
>>> result = test.split(',')
>>> result
['A', ' B', ' C', ' D']
##################################################
>>> test = 'A, B, C, D'
>>> result = list(map(lambda x : x.strip(), test.split(',')))
>>> result
['A', 'B', 'C', 'D']

< 특정문자열 포함 파일찾기 >

더보기
grep -r [문자열] [찾으려는위치]
# ex) grep -r 112 ./*

< plt.plot 폰트 >

더보기
import matplotlib.pyplot as plt 
plt.figure(figsize=(16, 5))    # figure가로세로크기
plt.rc('font', size=20)        # 기본 폰트 크기
plt.rc('axes', labelsize=20)   # x,y축 label 폰트 크기
plt.rc('xtick', labelsize=50)  # x축 눈금 폰트 크기 
plt.rc('ytick', labelsize=20)  # y축 눈금 폰트 크기
plt.rc('legend', fontsize=20)  # 범례 폰트 크기
plt.rc('figure', titlesize=50) # figure title 폰트 크기

plt.rcParams['legend.fontsize'] = 16
plt.rcParams['figure.titlesize'] = 18
plt.rcParams['axes.titlesize'] = 18
plt.rcParams['lines.linewidth'] = 2.0
plt.rcParams['axes.labelsize'] = 18
plt.rcParams['xtick.labelsize'] = 16
plt.rcParams['ytick.labelsize'] = 16

< ipynb -> py >

더보기
# 확장자가 ipynb인 Jupyter Notebook 파일을 아래 명령어를 이용하여 python 파일로 변환. 아래 명령은 xgboost-wine-quality.ipynb 파일을 step0-xgboost-wine-quality.py 로 변환하는 예시.
jupyter nbconvert xgboost-wine-quality.ipynb --to script --output step0-xgboost-wine-qual

< 행추가 > 

더보기
latency_all.loc['best_gpu'] =  [0 for i in range(len(latency_all.columns))]

<>

+++

<특정문자가 문자열안에 포함되어있는지>

더보기
    check_models = ['MNIST_CNN','AlexNet','CIFAR10','InceptionV3',
                     'VGG19','ResNet50','InceptionResNetV2','LeNet5',
                   'ResNetSmall']
    for i in (check_models):
        if i in save_name:
            model = i

 

참조 : https://stackoverflow.com/questions/11328958/save-multiple-plots-in-a-single-pdf-file

 

Save multiple plots in a single PDF file

plotting module def plotGraph(X,Y): fignum = random.randint(0,sys.maxint) plt.figure(fignum) ### Plotting arrangements ### return fignum main module import matplotlib.pyplot as plt...

stackoverflow.com

 

with PdfPages('multipage_pdf.pdf') as pdf:
  # 그래프1 
  plt.figure(figsize=(3, 3))
  plt.plot(range(7), [0,1,2,3,4,5,6], 'r-o')
  plt.title('graph one')
  pdf.savefig()  # saves the current figure into a pdf page

  # 그래프2
  plt.figure(figsize=(3, 3))
  plt.plot(range(7), [0,1,2,3,4,5,6], 'r-o')
  plt.title('graph two')
  pdf.savefig()  # saves the current figure into a pdf page
  # plt.close() 그래프 출력안할거면 사용

<그래프 두개로 그리기>

- 안 붙은 그래프

바그래프 가로길이 0.36 반띵하면0.18

i 를 x축 중심 이라고 하면 바1은 -0.18 ,바2는 +0.18 해서 두 그래프가 딱붙어서 출력

x= [ i-0.20 for i in range(7)]
x2= [ i+0.20 for i in range(7)]
x_middle= [ i for i in range(7)]

plt.bar(x, original,color='darkgray',width=0.36,label='label1', edgecolor='black')
plt.bar(x2, (a+b+c+d)/4 ,color='white',width=0.36,label='lable2',edgecolor='black',hatch='/')

- 붙은 그래프

바그래프 가로길이 0.36 반띵하면 .018

i 를 x축 중심 이라고 하면 바1은 -0.20 ,바2는 +0.20 해서 두 그래프두개 0.4 띄워서  출력

x= [ i-0.18 for i in range(7)]
x2= [ i+0.18 for i in range(7)]
x_middle= [ i for i in range(7)]

plt.bar(x, original,color='darkgray',width=0.36,label='label1', edgecolor='black')
plt.bar(x2, (a+b+c+d)/4 ,color='white',width=0.36,label='lable2',edgecolor='black',hatch='/')

 

<화살표 그리기>

- 바가 7개면 7번 for 문돌려주고

- plt.arrow ( 시작하는점x, 시작하는점 y , 시작점에서 x축방향으로 이동할만큼, 시작점에서 y축방향으로 이동할만큼  )

- head_width (화살표머리 가로) , head_length(화살표머리 세로) 

- fc, ec : 화살표머리랑 화살표대 색깔 

- width : 화살표대 넓이 (설정안하면 실선)

for i in range(7):
    plt.arrow(i+0.20, original[i], 0, -((original-(a+b+c+d)/4))[i]+0.8, head_width = 0.18, 
             head_length = 0.8,fc="k", ec="k",width=.06)
plt.show

<라벨달기>

- 바그래프안에 label = 'label1' 이런식으로 라벨달아주고

plt.bar(x, original,color='darkgray',width=0.36,label='label1', edgecolor='black')
plt.bar(x2, (a+b+c+d)/4 ,color='white',width=0.36,label='lable2',edgecolor='black',hatch='/',yerr=[(0,0,0,0,0,0,0),(original-(a+b+c+d)/4)] ,error_kw=dict(lw=2, capsize=0, capthick=2))

- 바그래프에 달아준 라벨을 표시해준다.

loc ( 그래프안에서 x , 그래프안에서 y )

plt.legend(fontsize=62,loc=(0.005,0.86))

 

<바그래프 칠하기,선긋기,테두리선>           

- edgecolor :바 테두리선 색 (안해주면 색없음)

- inewidth : 바 테두리선 두께

-  hatch : 빗금  ('/' , '//', '\\' 'x' ...)

- color : 바안에 칠하기 (검색ㄱ)

plt.bar(x, original,color='darkgray',width=0.36,label='label1', edgecolor='black',linewidth=0.5)
plt.bar(x2, (a+b+c+d)/4 ,color='white',width=0.36,label='lable2',edgecolor='black',linewidth=0.5,hatch='/',yerr=[(0,0,0,0,0,0,0),(original-(a+b+c+d)/4)] )

 

<x 축 돌리기>

- rotation = 95 (수직으로)

- rotation=0 (안돌림)

plt.xticks(x_middle,['a','b','c','d','e','f','g'])
plt.xticks(rotation=90,fontsize=80,ha="right")
# ha는 오른쪽을 기준으로 맞추라는뜻

 

<바그래프 위에 텍스트 표시>

o= ['%','%','%','%','%','%','%']
for i, v in enumerate(x2):
    plt.text(v, original[i], str (round(((original-(a+b+c+d)/4)/original*100)[i],1))+o[i] ,                 
             fontsize = 60, 
             color='black',
             #weight="bold",
             horizontalalignment='center',
             verticalalignment='bottom')

 

<바그래프 사이에 간격 표시하기>

- yerr=[(0,0,0,0,0,0,0), 간격 ] ,error_kw=dict(lw=2, capsize=3, capthick=2))

- capsize : 가로축 길이 (0으로 하면 걍 실선으로 표시됨)

- capthick : 가로축 두께

plt.bar(x, original,color='darkgray',width=0.36,label='label1', edgecolor='black')
plt.bar(x2, (a+b+c+d)/4 ,color='white',width=0.36,label='lable2',edgecolor='black',hatch='/',yerr=[(0,0,0,0,0,0,0),(original-(a+b+c+d)/4)] ,error_kw=dict(lw=2, capsize=0, capthick=2))

- yerr=[1,1,1,1,1,1,1] 로 바꾸면

<바그래프 x 축 rotation 위치 조정하기>

https://stackoverflow.com/questions/43152502/how-can-i-rotate-xticklabels-in-matplotlib-so-that-the-spacing-between-each-xtic  참조

 

fisrt_column
[A] B / C

위에 표를 아래처럼 바꾸려면

a b c
A B C

 

test['adelete'] = test.fisrt_column.str.split(']').str[0]  # ]기준으로 0(왼)1(오)이라는뜻
test['a'] = test.adelete.str.split('[').str[1]

test['change2'] = test.fisrt_column.str.split(']').str[1]

test['b'] = test.change2.str.split('/').str[0]
test['c'] = test.change2.str.split('/').str[1]

이렇게 나눠주고나서 

 

test['a'].str.strip()
test['b'].str.strip()
test['c'].str.strip()

왼쪽 오른쪽 빈칸을 없애준다.

 

test=test.replace(r'^\s*$', np.NAN, regex=True)
test = test.fillna(value='nul')

그리고 빈칸은 NAN(결측치값)으로 만들어준다음 nul값으로 채워준다.

 

 

'<문법> > 파이썬' 카테고리의 다른 글

[python] Saving multiple graphs as one pdf  (0) 2021.12.27
Matplotlib 바그래프 문법정리  (0) 2021.07.22
Pandas 열 한개 여러개로 쪼개기  (0) 2021.01.13
json 인코딩/디코딩 초간단정리  (0) 2021.01.13
Python 문법  (0) 2021.01.13

python -> json문자열 (json인코딩)

 

1. dumps    #dumps 파일을 쓰는게아니라 파일고대로 json->string으로 변환함 

jsonString = json.dumps(json.dumps(student_data, indent=4, sort_keys=True)

#intent=4는 들여쓰기 스페이스
#sort_keys=True 키를 기준으로 정렬해서 직렬화함

2. dump  #dump는 파일을 불러와서 그 파일안에 쓰기를함 (W)

import json
with open("student_file.json", "w") as json_file:

    json.dump(student_data, json_file)
    
# w 파일 쓰겠다/ dump로 직렬화!!!!
# student_file.json을 열어둔채로 dump로 직렬화하고 내보내고자하는 객체 student_data를 json_file에 써줌

 

 

json문자열 -> python (json 디코딩)

dict = json.loads(jsonString)

json파일을 dict로 변환~

ctrl + f 로 찾기

 

subprocess : 파이썬에서  명령을 실행할  있게 해주는 라이브러리

단순 서브프로세스 실행을 바란다면 call 함수 사용한다

>>> import subprocess
>>> subprocess.call(["ls", "-al"])

ls-al ls-a이랑 ls-l 동시에 사용하기위한 명령어

ls -a  숨김파일도 보여주는 -a

ls -l http://www.incodom.kr/Linux/%EA%B8%B0%EB%B3%B8%EB%AA%85%EB%A0%B9%EC%96%B4/ls 참조

drwx------  2 sbx_user1051  991 4.0K Oct  2 12:10 .
dr-xr-xr-x 21 root         root 4.0K Aug 31 10:28 ..
-rw-rw-r--  1 sbx_user1051  991 1.0M Oct  2 12:11 file

 

 

결과값을 문자열 데이터로 사용하고 싶을떄에는 check_output함수를 사용 , 결과값을 문자열데이터로 리턴해줌

>>> out = subprocess.check_output (['ls', '-al'] )
>>> out 
b'total 8\ndrwxr-xr-x. 2 root root 4096 10\xec\x9b\x94  8 17:58 .\ndrwxr-xr-x. 6 root root 4096 10\xec\x9b\x94  8 17:58 ..\n'

 

 

 

Popen

popen 생성자 : 프로세스를 시작

communicate 메서드: 자식 프로레스들이 일을 마치고 종료하기를 기다림.

 

 

Pipe ??

-r 명령어를 실행하면 명령어가 표준출력으로 출력한 문자열을 읽기위한 용도로 pipe open

w  명령어를 실행하고 키보드로 데이터를 입력해야하는 명령어에 사용함.  커맨드의 표준입력으로 데이터를 전송하기위한 pipe open

 

 

 

import asyncio

-> 비동기 프로그래밍을 위하 모듈이며 CPU작업과 I/O  병렬로 처리하게 해줌

****동기(Synchronout)처리는 특정 작업이 끝나면 다음 작업을 처리하는 순차처리 방식이고, 비동기처리는 여러작업을 처리하도록 예약한뒤 작업이 끝나면 결과를 받는 방식

import asyncio 
async def hello():    # async def로 네이티브 코루틴을 만듦    
	print('Hello, world!') loop = asyncio.get_event_loop()     # 이벤트 루프를 얻음
loop.run_until_complete(hello())    # hello가 끝날 때까지 기다림
loop.close()      #이벤트 루트를 닫음
#추가추가

loop = asyncio.get_event_loop()     # 이벤트 루프를 얻음
loop.run_until_complete(hello())    # hello가 끝날 때까지 기다림

os.urandom이라는 함수가 있다

- 이 함수는 원하는길이(byte) unsigned수치값을 만들어준다.

- 이것 암호화 알고리즘 키를 생성할떄 유용하다.

 

 

<파일 입출력>

https://wikidocs.net/16077

https://wikidocs.net/14130 

f = open('hello.txt', 'w')
f.write('안녕하세요\n')
f.close()

위처럼 일일히 close하기 귀찮으면 아래처럼 써서 자동으로 닫게하면 됨 

with open('hello.txt', 'w') as f:
    f.write('안녕하세요\n')

 

 

open(file, 'wb', buffering=byte_size)

wb 의미는? file대신 open 사용한다. 파이썬 2에서만 사용된다.

- wb 데이터를 저장하라는것 /rb 데이터를 읽으라는뜻

- buffering = 버퍼링끄기는 0(바이너리모드에서 버퍼링 미수행), 라인모드는1(텍스트모드에서 개행문자(\n)만날때까지 버퍼링), 고정크기로 보내려면 임의의 바이트수를 1보다 큰양의 수로 입력

-errors=None 텍스트모드시 에러처리

 

 

1) read() 파일전체의 내용을 하나의 문자열로 읽어온다.

2) readline() 한라인씩 읽음 (대용량파일을 읽어올경우 굉장히유용)

3) 바이너리 파일을 1바이트씩 읽어오는 방법은?

with open("myfile", "rb") as f:
    byte = f.read(1)
    while byte != "":
        # byte처리
        byte = f.read(1)

 

 

 

f.flush() -> 실제 파일이 기록되지만 파일을 닫지는않는다.

 

f.seek(0,2) ->파일끝에서 0바이트이동(파일 끝까지이동하라는뜻)\

f.seek(i) ->파일 시작에서 i바이트로 이동

ex)f.seek(0) =첫줄로 이동하라

f.seek(-(i+1),2) -> 파일끝에서 (i+1) 바이트 이전으로

 

randrange ->  import random이랑 같이씀 파이썬 랜덤함수중하나임

randrange(a,b) randrange(a) 두가지버전이있다.

randrange(b) 0<=x<b  범위내에서 랜덤한 정수 int 반환한다.

 

fsync -> 동기식 입출력함수

fd 지정된 파일과 관련된 모든 변경자료(데이터+메타데이터) 디스크와 동기화한다.

디스크 I/O 연산은 커널안의 버퍼캐시나 페이지 캐시를 거친다. 따라서 프로세스가 파일에 데이터를 기록하면 커널은  데이터를 커널의 버퍼들  ㅇ하나에 복사해서 내부적인 대기열에 등록해두고, 적당한 시점이 되면 디스크에 기록한다. 이렇게 대이터가 버퍼에만 있고 디스크에는 아직 기록되지않은 상태가   있다 이때 문제점은

1. 디스크에 순서대로 기록해야만하는경우 -> 커널 대기열에서는 성능개션에 적합하게 요청순서를 변경해서 문제가 발생

2. 시스템이 비정상적으로 종료될경우

이때 syn, fsync, fdatasync 함수를 이용한다.

 

for _ in range ():

a = [0 for _ in range(10)]
a = [0]*10
#두개가 같음

gzip

파이썬에서 압축된 파일내용을 바로 읽을 수있게 해주는 모듈

#압축하기
import gzip
path = './data/fruit.txt'
with open(path,'rb') as f_in:

    with gzip.open(path+'.gz','wb') as f_out:
        f_out.writelines(f_in)  # ./data/fruit.txt.gz 압축 파일 생성

https://wikidocs.net/8934

 

unittest

madplay.github.io/post/python-main-function

wikidocs.net/16107 참조

 

<리눅스 명령어>

rm-rf  삭제 리눅스 명령어

**sudo rm-rf / 포맷수준 삭제

 

<일치하는 string 찾기>

find , rfind 일치하는것찾기

- 일치하는것 앞에서 찾기 x.find

- 일치하는것 뒤에서 찾기 x.rfind

e.g result = json.loads(x[x.find('{'): x.find('}')+1])

+ Recent posts