동생이 과제로 파이썬을 한다고 하길래 뭔가 하고 봤더니 그래프를 그리는 과제였다.

파이썬으로 그래프 그리는 건 개발 맨~~ 처음에 배울 때 잠깐 발에 물 닿을 정도로만 해 본 적이 있어서 내가 도움을 줄 수 있을 것 같았다.

 

Matplot은 txt 파일의 데이터를 간단하게 그래프로 나타낼 수 있다.

엄청 짧게 코드를 짤 것 같아서 colab을 사용했다.

 

from google.colab import drive
drive.mount('/content/drive')

txt 파일을 굳이 로컬에 저장 안해도 구글드라이브에 마운트 하면 다 갖다 쓸 수 있음 ㅋ

 

import matplotlib.pyplot as plt
import numpy as np

ecg = np.loadtxt("/content/drive/MyDrive/ecg.txt",delimiter=" ",unpack = False)
print(ecg.shape)

# x축
time = ecg[:, 0]
# y축
amplitude = ecg[:, 1]

# plot 세팅
plt.figure(num=1, dpi=100, facecolor='white')
plt.plot(time, amplitude, color="blue", linewidth=0.5)

plt.title('ecg')
plt.xlabel('time(sec)')
plt.ylabel('amplitude')
plt.xlim( 0, 3)
plt.ylim(-1, 1)

plt.show()

numpy로 txt파일을 가져오고, 구분자는 띄어쓰기로 해서 데이터를 구분했다.

데이터들이 이런 식으로 정렬이 되어 있었기 때무네 ㅋ

첫째 행이 x축(time)에 와야 할 값, 둘째 행이 y축(amplitude)에 와야 할 값이므로 0부터 시작해서 끊어주었다.

 

그 다음 나타낼 그래프를 Matplot으로 세팅하는데 사실 대충 구글링 해서 색 같은거 붙여 넣음.

x축, y축 최소값, 최대값 정도만 설정해 주었고

코드를 실행하면 다음과 같다.

이게 바로 심전도 그래프라고 한다 ㅋ

아주아주 간단하게 그래프가 만들어졌다.

 

wikidocs.net/92071

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

위 링크를 참조하면 Matplot에 대한 자세한 설명을 볼 수 있다.

 

과제 끝.

https://docs.djangoproject.com/en/3.1/howto/custom-management-commands/

 

Writing custom django-admin commands | Django documentation | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com

python에서 manage.py 뒤에 입력할 명령어를 직접 만들 있다.

cumstom command 만들면

python manage.py 명령어

이렇게 터미널에 입력하면 촤촤촤 동작하는 거임.

 

문서에 나와 있듯이 명령어를 만들고자 하는 경로의 순서와 이름을 위와 같이 해야 한다.

문서에서는 장고 내의 경로에 만들라고 했는데, 나는 특정 내에서 만들려고 했던 아니라서 공통 파일들을 담고 있는 common 생성하였다.

__init__.py 파일은 그냥 최하단에 하나 만들어 줬더니 상위 경로에도 갑자기 생겼다. ㅎㅎ... 모듈화 그런건가?

명령어의 네이밍은 문서에서도 딱히 어떤 명명규칙을 따른 같지 않아서 나도 그냥 .

 

여튼 이렇게만 하면 작동을 하지 않아서 common settings.py 내의 INSTALLED_APPS 추가해 주었다.

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    ...
    'common'
]

이제 renewdata.py 다음과 같이 작성한다.

from django.core.management.base import BaseCommand, CommandError
from studydata.models import Flower, FlowerGarden, Leaf
from user.models import User

import datetime

class Command(BaseCommand):
    help = 'Renew data at midnight everyday'

    def handle(self, *args, **options):
        # User 조희
        users = User.objects.filter(nickname='박범희')

        for user in users:
            # 해당 user에 대한 Flower 조회
            flowers = Flower.objects.filter(st_id=user.st_id)
            # user의 flower가 없는 경우 에러 메시지
            if flowers.count() == 0:
                self.stdout.write(self.style.ERROR('No flower of the user: ' + user.st_id))
            else:
                # 정상
                for flower in flowers:
                    self.stdout.write(self.style.SUCCESS(flower.st_id))

문서를 읽어보고 따라해야 .

클래스 이름은 대문자 C 시작하는 Command여야 하고, django의 BaseCommand를 상속해야 한다. handle 함수도 작성해야 한다.

다른 사람은 input 대한 함수도 작성했는데 나는 딱히 필요 없었음.

 

간단하게 출력 메시지를 확인하기 위해서 대충 저렇게 데이터 조회를 했다.

잘됨!!

별로 중요하진 않은데 출력 메시지에 관한 내용은 다음에 있음.

https://docs.djangoproject.com/en/3.1/ref/django-admin/#syntax-coloring

 

django-admin and manage.py | Django documentation | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com

 

package test;
	
public class Car {
	String color;
	String gearType;
	int door;

	Car() {this("black","dd",1);}
    
    Car(String color, String gearType, int door) {
    	this.color = color;
		this.gearType = gearType;
		this.door = door;
	}
	        
	Car(Car c) {
		color = c.color;
		gearType = c.gearType;
		door = c.door;
	}
	        
	public static void main(String[] args) {
	// TODO Auto-generated method stub
		Car car1 = new Car();
	                
		Car car2 = new Car("red","dd",1);
	                
		Car car3 = new Car(car1);
	}
	
}

Car() 생성자는 밑에 있는 Car(String color, String gearType, int door) 생성자를 참조한다.

생성자는 메소드가 아니기 때문에 Heap 영역에 인스턴스가 생성되고, 딱히 코드가 쓰인 순서에 영향을 받지는 않음.

아.. 어차피 스택은 호출하는 순서의 문제긴 하니까 순서가 상관 없구나

'JAVA' 카테고리의 다른 글

이클립스 완전삭제 후 재설치하기  (7) 2020.03.07
  • IT 관점의 Communication과 Layer

- 협업하는 객체 간의 커뮤니케이션

- protocol은 규약

- layer를 통해 객체 간 독립성 / 결합성, 복잡성

 

 

  • OOP

- OOP란 programming의 패러다임

OOP는 이전 시대(시대라고 해봤자 몇 십년 단위)를 아우르던 프로그래밍 경향에서 불편함을 보완하기 위해 등장

OOP 이전에는 procedural programming, structured programming 등이 있음

 

- concept가 선행되어 feature이 나옴

으레 OOP의 특징은 상속, 다형성, 캡슐화, 추상화라고 하지만, 이것들에 대한 요구(의도)가 있었기 때문에 그 특징이 나온 것임

그래서 OOP의 특징이 아닌 컨셉이라고 보아야 함

(위 얘기의 출처는 랩장님인데 이게 100퍼센트 맞다 아니다라고 보기 보다는, OOP의 등장배경과 보다 본질적으로 접근하자면 이러하다 라고 이해하면 될듯)


- Inheritance:

상속(extend의 개념)

수직적/ 수평적 확장

재사용

 

- Polymorphism:

동형이상, 환경에 의해 영향을 받음


- Encapsulation:

내부의 변화가 외부에 영향을 끼치지 않음(흔히 말하는 정보 은닉)

접근제어자로 정보 은닉의 권한을 조절


- Abstraction:

현실의 객체를 소프트웨어적 관점으로 재구성(object-class-instance)

설계 시 가장 중시됨

분해-재조립

 

 

  • 접근제어자

- public(+), package(~), protected(#), private(-)
- 앞의 두 개는 공통결합이 생길 가능성이 높아 지양

프로토타입(prototype)

  • javascript 프로토타입 기반 언어
  • 어떠한 함수 내에 prototype 사용하면 Object 어딘가에 존재하고, 함수를 사용하는 객체는 별도로 명시하지 않아도 prototype으로 생성된 Object 들어 있는 값을 갖다 있는
  • 기본적으로 Object javascript에서 기본적으로 제공하는 함수이기 때문에 Object 안에는 constructor __proto__ 존재
  • __proto__ 객체가 생성될 조상인 Object 함수를 가리킴

medium.com/@bluesh55/javascript-prototype-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-f8e67c286b67

 

[Javascript ] 프로토타입 이해하기

자바스크립트는 프로토타입 기반 언어라고 불립니다. 자바스크립트 개발을 하면 빠질 수 없는 것이 프로토타입인데요. 프로토타입이 거의 자바스크립트 그 자체이기때문에 이해하는 것이 어렵

medium.com

도식화가 아주 잘 되어 있어서 참조하기 좋음

'JavaScript' 카테고리의 다른 글

내부 클릭 이벤트 설정  (0) 2020.10.19

메인 페이지에서 특정 배너를 클릭 시의 로그를 추출하기 위해서 사용한다.

모바일의 경우에는

 

onMouseDown를 ontouchstart로 변경해서 사용

ex) <A onMouseDown="eval('try{ _trk_clickTrace( \'EVT\', \'나의이벤트\' )

→ <A ontouchstart="eval('try{ _trk_clickTrace( \'EVT\', \'나의이벤트\' )

 

 

logger.co.kr/manual_FR/help.tsp?node=229

'JavaScript' 카테고리의 다른 글

JavaScript의 prototype 이해하기  (0) 2020.10.23

+ Recent posts