제너레이터는 iterator를 생성하는 함수인데 메모리 절약을 하거나 임시적으로 데이터 저장을 할 때 씁니다. 예를 들면, 게임을 할 때 잠시 일시정지를 하면 게임이 멈추는데 게임의 상황이 변하지 말아야 합니다. 그래서 게임이 다시 재개가 되면 기존에 했던 상태를 이어서 할 수 있게 됩니다. 이럴 때 필요한 것이 제너레이터 입니다. 제너레이터는 iterator를 생성하는 함수인데 yield를 쓰는 경우를 얘기합니다. 제너레이터로 설정을 하면 iterator가 순서대로 나오되 순서의 다음값은 필요에 따라 계산됩니다. 즉, 호출을 안 하면 멈춰서 대기하는 상태를 유지합니다. 보통 무한한 루프를 생성할 때 리스트나 딕셔너리는 메모리에 임시저장되어 불러오지만 제너레이터는 소비하는 형태로 되어 있어서 메모리 부담..
앞서 포스팅한 패킹과 언패킹의 연장선입니다. 언패킹을 할때 나머지 변수는 *rest 로 묶을 수 있었는데요. 제가 변수로 정하고 싶지 않은 건 큰 관심이 없어서 변수지정을 안 주는데 갯수가 정해지지 않습니다. 갯수가 안 정해지지만 묶을 수 있는것과 마찬가지로 함수의 파라미터에서 갯수를 정할 수 없는 경우가 있습니다. 이런 맥락으로 파라미터의 갯수를 정할 수 없는 경우 *args, **kwargs로 표시할 수 있습니다. 별 기호(*)가 중요한것이지 args는 바꿀 수 있습니다. 관용상 이렇게 쓰면 모두가 알 수 있기 때문에 쓰는 것뿐입니다. *args args는 arguments의 줄임말로 인수들이라는 뜻입니다. 단어의 뜻처럼 인수들을 넣으면 되는 것입니다. 예제로 패킹과 언패킹에서 보인 정가 구하는 함수..
Tkinter의 기본 위젯입니다. 기본 위젯으로는 Entry, Spinbox, Combobox, Checkbutton,Radiobutton, Text widget, Button, LabelFrame으로 8개입니다. IntVar,DoubleVar,StringVar,BooleanVar 위젯 소개 전에 var의 정수,소수,문자열,부울를 어떻게 표현하는지만 설명하고 넘어가겠습니다. tkinter에서 타입 설정을 하려면 IntVar,DoubleVar,StringVar,BooleanVar로 설정합니다. IntVar는 정수, DoubleVar는 소수, StringVar는 문자열, BooleanVar는 부울개체입니다. GUI를 만들때 Var 설정을 해주고 연결지어서 객체를 만들게 됩니다. Entry Entry는 빈칸 ..
파이썬에서의 패킹 언패킹을 설명하겠습니다. 일상생활에서 패킹을 포장한다는 의미로 많이 쓰고 있습니다. 포장은 내용물을 보호하고자 내용물을 싸는 행위입니다. 즉, 패킹은 내용물을 보호하려는 목적을 가지고 있습니다. 그래서 파일 보호를 위해 복호화하여 파일분석을 어렵게 하는 경우를 패킹이라고 불리기도 합니다. 그런데 파이썬에서는 싸는 행위에 더 초점을 맞춘 듯합니다. 파일 보호의 역할보다는 감싸는 역할로써 사용하고 있습니다. 패킹 파이썬에서의 패킹이란 여러 개의 값을 한 변수에 묶어 대입하는 것을 뜻합니다. 예를 들어 1,2,3,4,5 를 하나의 변수로 묶는다면 다음과 같이 할 수 있습니다. num = 1,2,3,4,5 print를 해보면 튜플로 출력을 합니다. print(num) 언패킹 반대로 언패킹은 묶..
Tkinter를 이용해 GUI를 만들어봅시다. 화면상에 'Hello World' 를 띄어보겠습니다. import tkinter as tk from tkinter import ttk root = tk.Tk() label= ttk.Label(root,text='Hello World') label.pack() root.mainloop() 코드 설명 root = Tk() : 기본 오브젝트로 창을 하나 만듭니다. 메인 창으로 나타납니다. label = ttk.Label(root, text='Hello World') : Tkinter에서는 텍스트 오브젝트를 Label이라고 합니다. 텍스트는 ttk 모듈에서 만들 수 있어서 ttk.Label(대상, text='원하는텍스트')으로 ttk 안에서 메쏘드 실행을 합니다. ..
데이터프레임의 로우와 컬럼을 바꾸는 방법입니다. 넘파이에서 transpose 하는 방법과 동일합니다. T 를 이용합니다. df를 다음과 같이 만들었습니다. df 로우와 컬럼을 바꿔보겠습니다. df.T 인덱스가 설정되어 있으면 인덱스의 내용이 위로 올라가게 됩니다. df2= df2.set_index('Name') df2.T 멀티인덱스로 해도 똑같이 적용됩니다. 인덱스에 들어가는 내용이 컬럼으로 됩니다. df2= df2.set_index(['Name','Gender']) df2.T 컬럼을 확인해보면 다음과 같이 멀티인덱스로써 이루어져 있는 걸 볼 수 있습니다. df2_T = df2.T df2_T.columns 관련 포스팅 [Python/Pandas] - [Pandas] 데이터프레임 멀티인덱스 다루기(loc,..
크롤링을 하거나 데이터를 받았는데 문자열과 기호가 섞여 있는 경우가 있습니다. 판다스에는 따로 그런걸 할 수 있는 메쏘드는 없고 기본 지식을 이용해 컬럼을 쪼개봅시다. 예를 들어 중간고사 점수 데이터를 받았는데 다음과 같이 한 덩어리로 주었다고 합시다. import pandas as pd df = pd.DataFrame({'Mid-term': ['Anne:M:100:A', 'Peter:F:50:C', 'Max:M:90:B']}) df 황당무계한 데이터를 보기 좋게 컬럼을 자르려고 하는 겁니다. 판다스의 메쏘드가 없으니 만들어 합시다. 문자열을 ':'로 나누고 데이터프레임도 나눠진 문자열만큼 컬럼을 만들어 냅니다. 먼저 문자열을 나눠야 하니 split() 이용합니다. 그리고 컬럼에 넣어야 하니 리스트로 반..
네이버 증권에서 재무제표를 가져오는 방법입니다. 삼성전자를 예로 하겠습니다.네이버증권에서 삼성전자 검색해서 들어가면 사이트 이름이 다음과 같이 나옵니다. 여기서 '005930' 이 종목코드입니다.이 코드에 따라서 웹페이지가 바뀌는 걸 알 수 있습니다.이를 이용해 해당 페이지에서 기업실적분석을 가져오려고 합니다. 크롤링다음과 같이 입력해 크롤링을 합니다.단순하게 URL에서 html 가져와서 표는 판다스로 가져올 수 있으니 판다스로 넘겨서 표로 나오게 합니다. import pandas as pdimport requestscode = '005930'URL = f"https://finance.naver.com/item/main.nhn?code={code}"r = requests.get(URL)df = pd..
판다스에서 멀티인덱서 다루는 방법입니다. 제가 이전에 groupby에 대해 써놓은 게 있는데 그 상황에서 멀티인덱서를 다뤄보겠습니다. 두가지 방법으로 loc,xs가 있긴 하지만 사실상 실제적으로 많이 쓰는 건 xs입니다. loc인 경우 싱글인덱스일때 쓰는 방식인데 그걸 멀티인덱스에 그대로 적용하면 한계가 있습니다. 하나씩 살펴보겟습니다. 먼저 데이터를 불러오겠습니다. df 일단 Quarter와 Month odd_even 을 멀티인덱스로 잡으면 다음과 같이 나옵니다. groups_two = df.groupby(['Quarter','Month odd_even']) multi_index = groups_two.first() multi_index 인덱스를 봐도 멀티인덱스로 되어있습니다. multi_index.i..
리스트가 튜플로 구성되어 있는 경우 정렬하는 방법입니다. 이전 포스팅에서 딕셔너리 정렬하는 방법을 설명했었는데요. 그 방법과 유사합니다. 기본 골자는 인덱스를 이용하는 방법입니다. 메쏘드의 차이만 있을뿐입니다. sorted() 이용 sorted 메쏘드를 이용하는 방법입니다. 다른 리스트로 재정의해야 할때 주로 씁니다. tuple_list = [('A','1','20210717'),('B','2','20210706')] sort_list = sorted(tuple_list, key=lambda x:x[2]) sort_list x[i] 에서 i에 정렬기준이 되는 인덱스 번호를 넣어서 만듭니다. sort() 이용 리스트 재정의 없이 단번에 정렬하는 방법입니다. tuple_list = [('A','1','202..
작업 스케쥴러에 작업을 추가시키면 이름 변경이 불가합니다. 아래 그림처럼 이름 부분이 하얀색이 아닙니다. 그럼에도 이름을 바꾸는 방법입니다. 1. 이름을 바꾸고자 하는 작업을 선택하고 마우스 오른쪽 클릭을 해서 내보내기를 선택합니다. 또는 오른쪽 옵션 창에서 내보내기... 을 선택합니다. 2. 내보내기를 누르면 저장하는 창이 나오는데 자신이 원하는 경로에 저장합니다. 3. 작업 가져오기..를 선택합니다. 4. 저장했던 파일을 가져오면 새 작업 만들기.. 창이 뜹니다. 이제 이름을 바꾸시면 됩니다. 가져왔던 작업이기 때문에 트리거나 동작 설정은 기존의 작업과 동일하게 설정되어 있어서 이름만 바꾸려 한다면 변경할 건 없고 이름을 바꾼후 확인을 누릅니다. 5. 기존에 있던 작업을 지웁니다. 관련 포스팅 [Py..
GUI는 graphical user interface의 약자로 그래픽 사용자 인터페이스라고 합니다. 입출력을 사용하기 편하게 하기 위해서 어떤 창이나 아이콘으로 표시하는것인데 코딩으로만 하면 일일히 파이참이나 cmd나 쥬피터를 가서 실행을 했는데 GUI를 만들어 놓으면 창을 띄어서 간단하게 버튼 하나로 코딩 실행을 할 수 있거나 원하는 데이터를 한눈에 볼 수 있게끔 만들 수 있습니다. GUI를 만드는 툴은 pyqt, wxpython, pysimplegui, kivy 등 많이 있는데 그 중에서 파이썬에 내장되어 있어서 따로 설치가 필요없는 tkinter를 소개할까 합니다. 각 툴마다 장단점이 있어서 고급진 인터페이스를 만들게 되면 여러 툴을 쓰게 되긴 합니다만 개인적으로는 tkinter가 코드구성이 간단해..
cmd에서 pip 패키지 설치와 버전 업그레이드 방법입니다. cmd를 관리자 모드로 실행시켜서 수행합니다. 설치 설치는 cmd에서 다음을 입력합니다. pip install "패키지이름" 버전을 지정하고 싶다면 == "패키지버전" 을 추가합니다. pip install "패키지이름"=="패키지버전" 제거 pip uninstall "패키지이름" 업그레이드 하나씩 지정해서 업그레이드를 합니다. pip install "패키지이름" --upgrade pip 자체 업그레이드 pip도 업그레이드가 필요한데 cmd를 관리자 모드로 하지 않고 실행하면 일부 설치를 안한 상태로 설치를 완료합니다. 그러면 업그레이드도 안되고 install을 다시해도 안 먹히게 되어서 pip 을 제거한 후 다시 설치를 해야합니다. 관리자로 c..
작업스케쥴러를 이용해 .py를 실행시키면 cmd창이 바로 꺼져서 오류확인을 못하는데 이거를 확인하려고 코딩에다 input()나 pause를 걸어놓아도 .py파일 자체의 오류 때문에 훅 꺼집니다. 희한하게도 파이참이나 cmd에서는 실행하면 되는데 작업 스케쥴러에서 실행시키면 안 되는 경우가 있는데 이런 경우에 작업스케쥴러에 배치파일로 적용해 오류를 확인하는 방법입니다. 말 그대로 오류확인용입니다. 작업스케쥴러에서 프로그램/스크립트에 실행파일을 pythonw.exe로 실행시키면 cmd 창이 나오지 않고 실행이 되어서 편합니다. 배치파일을 이용하면 cmd창은 무조건 나오는 거라서 약간 불편하기는 합니다. 아무튼 저는 배치파일를 오류날때만 오류확인용으로 쓰지만 배치파일로 만드셔서 실행시키는 분도 있을테니 이 방..
Comprehension는 iterable한 오브젝트를 생성하는 방법으로 list, dict, set 같은 오브젝트에 원소를 담을 때 주로 사용합니다. for문을 안에 넣어서 수행하기 때문에 짧은 코딩으로 만들 수 있습니다. List comprehension 리스트를 생성하기 위한 comprehension 입니다. 간단하게 구성하면 아래와 같이 할 수 있습니다. sqaure = [x**2 for x in range(10)] sqaure 조건문도 넣을 수 있습니다. sqaure = [x**2 for x in range(10) if x%2==0] sqaure Set comprehension set은 리스트와 다르게 동일원소가 안 나오는 경우입니다. 그것 말고는 List comprehension과 동일합니다...