ssung_데이터 엔지니어링 64

Django 활용하기(4)

User 추가하기 # polls/models.py class Question(models.Model): question_text = models.CharField(max_length=200, verbose_name='질문') pub_date = models.DateTimeField(auto_now_add=True, verbose_name='생성일') # admin이 아닌 일반 user 추가 owner = models.ForeignKey('auth.User', related_name='questions', on_delete=models.CASCADE, null=True) @admin.display(boolean=True, description='최근생성(하루기준)') def was_published_rec..

Django 활용하기(3)

Serialize (직렬화) 모델 인스턴스나 QuerySet과 같은 데이터를 JSON 형식의 파일로 변환하는 작업 프로젝트에서 만든 모델로부터 뽑은 queryset, 즉 모델 인스턴스를 JSON으로 변환 Deserialize JSON 형식의 데이터를 정의된 포맷에 맞추어 다시 모델 인스턴스로 변환하는 작업 serialize 만들기 serialize는 생성 시 유효성 검사를 통과한 data를 기반으로 저장(validated_data) # polls_api/serializers.py from rest_framework import serializers # Question 모델 불러오기 from polls.models import Question class QuestionSerializer(serializer..

Django 활용하기(2)

뷰 (views) 와 템플릿 (templates) order_by() 쿼리셋을 정렬하기 위한 메서드로 특정한 필드를 기준으로 오름차순 or 내림차순의 형태로 정렬가능 order_by() 뒤에 슬라이싱 [:]을 통해 범위 지정 가능 render() HTTP 요청을 받아 원하는 템플릿 파일을 렌더링하여 응답 인자로써는 request, 템플릿 파일 경로, Context 순으로 변수를 받음 # polls/views.py def index(request): # Question 목록에서 order_by를 통해 5개의 목록을 가지고 옴 latest_question_list = Question.objects.order_by('-pub_date')[:5] context = {'first_question': latest_..

Django 활용하기(1)

Django 쉽고 빠르게 웹사이트를 개발할 수 있도록 돕는 구성요소로 이루어진 웹 프레임워크 Django 가상환경 설정 서로 다른 유형과 목적의 프로젝트를 한 공간에 넣어 관리하면, 매번 하나의 프로젝트를 실행할 때마다 환경을 체크고 변경해주어야 함 심한 경우네는 프로젝트 간의 충돌이 발생할 수도 있음 이와 같은 문제 방지를 위해 Python 프로젝트를 가상환경에 만들어 사용 명령어 (cmd 사용) # 가상환경 생성 py -m venv project_name # 생성한 가상환경 활성화 project_name\scripts\activate.bat Django 설치 # Django 설치하기 py -m pip install Django Project 생성 # mysite 라는 프로젝트 생성 django-adm..

Seaborn - 스크래핑 결과 시각화

Seaborn 수집한 뎅터를 시각화하는 라이브러리 # 터미널 코드로 실행하기 %pip install seaborn 라이브러리 import import seaborb as sns 꺾은선 그래프 (Line Plot) # 꺾은선 그래프 예제 sns.lineplot(x=[1, 3, 2, 4], y=[4, 3, 2, 1]) 막대 그래프 (Bar Plot) # 막대 그래프 예제 sns.barplot(x=[1, 3, 2, 4], y=[4, 3, 2, 1]) 그래프에 제목 추가하기 # matplorlib.pyplot 추가 import marplotlib.pyplot as plt sns.barplot(x = [1, 2, 3, 4], y = [0.7, 0.2, 0.1, 0.05]) plt.title("Bar Plot") ..

Selenium 설치 및 사용법

Selenium python을 사용해 웹 브라우저 조작을 자동화 할 수 있는 프레임워크 크롬 (구글), 파이어폭스, 사파리, 엣지( MS) 등이 가능 셀레니움은 실제 사람과 비슷하게 동작하여 많은 정보들을 수집 가능 Selenium 설치 pip install selenium Web Driver 설치 웹 브라우저를 제어할 수 있는 자동화 프레임 워크 pip install Webdriver-manager Selenium 시작 # webdriver 모듈 불러오기 from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManage..

HTML Parser, BeautifulSoup

HTML Parser, BeautifulSoup 웹 스크랩핑을 할 때, 원하는 요소만 가져올 수 있게 해주는 패키지 BeautifulSoup을 사용하기 위한 라이브러리 불러오기 # 라이브러리 불러오기 import requests from bs4 import BeautifulSoup BeautifulSoup 객체 생성 # 객체 생성하기 res = requests.get("원하는 사이트의 URL") soup = BeautifulSoup(res.text, "html.parser") 태그에 해당하는 요소 찾아보기 # 태그 요소 찾기 Ex_h3 = soup.find("h3") # 태그 요소 모두 찾기 all_h3 = soup.find_all("h3") # 그 중 첫번째 요소 all_h3[0] id 하나의 고유 태..

웹 스크래핑과 웹 크롤링

웹 스크래핑 특정한 목적으로 특정 웹 페이지에서 데이터를 추출하는 것 -> 데이터 추출 Ex_) 날씨 데이터 가져오기, 주식 데이터 가져오기 웹 크롤링 URL을 타고 다니며 반복적으로 데이터를 가져오는 과정 -> 데이터 색인 (indexing) Ex_) 검색 엔진의 웹 크롤러 로봇 배제 프로토콜 (REP) 로봇이 모든 사이트에 대해 모든 정보를 취득하는 것을 막기 위함 1994년, REP (Robot Exclusion Protocol) 탄생 설정을 통해 접근 권한 # 모든 user-agent에 대해서 접근 거부 User-agent: * Disallow: / # 모든 user-agent에 대해서 접근 허가 User-agent: * allow: / # 특정 user-agent에 대해서 접근 불허 User-a..

HTML (Hypertext Markup Language)

HTML (Hypertext Markup Language) 웹 브라우저가 이해할 수 있는 "언어" # 문서 버전 # HTML 문서 시작 선언 및 기본 언어 설정 # 실제 사용자가 눈으로 볼 수 있는 문서의 내용이 입력되는 곳 안녕하세요~ # 주석처리 Body - 실제로 사용가자 눈으로 보는 내용 입력 block - 레고처럼 차곡차곡 쌓이고 화면 너비가 꽉 차는 요소 블록의 크기를 조정 가능하고, 페이지의 구조적 요소를 나타냄 인라인 요소를 포함할 수 있으나, 인라인 요소에 포함될 수 없음 , , 등이 있음 inline - 블록 요소 내에 포함되는 요소 문장, 단어 같은 작은 부분에 사용, 한 줄에 나열 좌/우에 여백을 넣는 것만 허용 , , 등이 있음 inline-block - 글자처럼 취급되나, blo..

DFS/BFS (Depth-First Search / Breadth-Frist Search)

DFS (Depth - First Search) 깊이 우선 탐색으로, 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘 스택 (Stack) 을 사용하여 표현 동작과정 탐색 시작 노드를 스택에 push하고 방문 처리 스택의 최상단 노드에 방문하지 않은 인접 노드가 있다면 그 인접 노드를 스택에 넣고 방문 처리 - 방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼냄 위의 과정을 더 이상 수행할 수 없을 때까지 반복 코드 구현 graph = { 1: [2, 5, 9], 2: [3], 3: [4], 4: [], 5: [6, 8], 6: [7], 7: [], 8: [], 9: [10], 10: [] } def recursive_dfs(v, visited = []): visited.append(v) #..

728x90