AWS EC2 접속 (with pem & ppk file)

멀티캠퍼스 AWS 서버 관련 정리

실습용 서버 실행

Untitled

  • 실습용 서버 사용자 정보 참조하여 로그인 (강의 때 공유)

  • 비밀번호 변경

    • 본인 비밀번호는 반드시 기억한다. (강사비번 : ****)
    • Slack 강사 DM으로 남겨주세요.

Untitled

EC2 실행

  • 우측 상단 리전 정보를 ‘오사카’로 변경 후 서비스 검색창에서 EC2 검색

Untitled

  • 변경된 상태에서 EC2 검색

Untitled

Untitled

Google Apps Script 기본문법 - 2

조건문

  • if 조건문 코드는 아래와 같음
  • 여러개의 조건문은 && 연산자 또는 || 연산자를 사용한다.
function myFunction_01() {
  let number=9;
  if(number > 10) {
    console.log("큰 수입니다!")
  } else {
    console.log("작은 수입니다.")
  }
}

Untitled

function myFunction_02() {
  var currentTemperature = 25; 
  var isWeekend = true; 
  var thresholdTemperature = 35; 

  if (currentTemperature > thresholdTemperature && !isWeekend) {
    console.log("집에 계세요!")
  } else if (currentTemperature > thresholdTemperature || isWeekend) {
    console.log("외출하세요!")
  } else {
    console.log("판단을 보류합니다!")
  }
}

Untitled

반복문

  • 반복문을 활용하여 구구단을 작성한다.
function myFunction_03() {
  var numRows = 9; // Number of rows in the table
  var numColumns = 9; // Number of columns in the table

  for (var i = 2; i <= numRows; i++) {
    var row = '';
    for (var j = 1; j <= numColumns; j++) {
      var result = i * j;
      row += result + '\t'; // Use '\t' to separate columns
    }
    Logger.log(row); // Log the row to the Apps Script log
  }
}

Untitled

Google Apps Script 기본문법 - 1

개요

  • Google Apps Script의 기본문법을 배우도록 한다.
  • 변수와 상수, 배열, 객체등을 테스트 한다.

자바스크립트 기초

  • 기초 문법을 배우도록 한다.
  • 아래와 같이 코드 생성 후 실행을 한다.
function myFunction() {
  Logger.log("Hello World");
}

Untitled

  • 여러 함수를 만들고 선택적으로 실행이 가능하다.
  • 주석 처리는 크게 // /* */ 으로 할 수 있다.
function myFunction01_1() {
  Logger.log("Hello World");
}

function myFunction01_2() {
  console.log("Hello GAS!")

  // 주석 입력
  /*
  여러 행에 걸쳐 주석을 입력한다. 
  */
}

Untitled

M1 환경설정 XGBoost & LightGBM with Streamlit in Python

개요

  • M1에서 Python 환경설정을 해본다.
  • XGBoost & LightGBM 및 Streamlit 설치를 진행한다.

아나콘다 설치

  • m1 버전의 아나콘다를 설치한다.

fig01.png

Screenshot 2023-09-02 at 12.06.58 AM.png

깃헙 레포 생성

  • 먼저 github repo를 생성한다.

Screenshot 2023-09-02 at 12.14.00 AM.png

Conda 가상환경 설정

  • git clone 명령어를 통해 repo를 로컬로 다운로드 한다.
evan$ git clone https://github.com/yourname/m1_streamlit.git
Cloning into 'm1_streamlit'...
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (4/4), done.
  • conda 명령어를 통해 가상환경을 설치한다.
  • 그 후에 가상환경에 접속 후, Python 설치 및 주요 라이브러리를 설치한다.
  • 설치 중간에 메시지가 나오면 Y를 입력 후 계속 설치 한다.
evan$ cd m1_streamlit
m1_streamlit evan$ conda create -n mulcamp python=3.10.3
m1_streamlit evan$ conda activate mulcamp
(mulcamp) m1_streamlit evan$ conda install numpy scipy scikit-learn pandas

Screenshot 2023-09-02 at 12.21.46 AM.png

Kaggle - Colab API 연동

개요

  • API 토큰을 내려받은 후, 구글 코랩에서 데이터를 다운로드 받도록 한다.

API 토큰 발급

  • Kaggle Profile - Settings - API를 순차적으로 클릭 후, Create New Token 버튼을 클릭한다.

Untitled

  • 아래 화면처럼 다운로드를 받을 수 있다.

Untitled

Google Colab API 코드 업로드

  • 이제 해당 파일을 바탕화면 등 적당한 곳에 위치시킨 후 아래 코드를 실행한다.
# kaggle.json 파일을 업로드하세요.
from google.colab import files
files.upload()

Untitled

Untitled

  • 마지막으로 ~/.kaggle 폴더를 만들고 키 파일을 복사한 후, 보안을 위해 현재 사용자만 이 파일을 읽을 수 있도록 하는 명령어(chmod 600)를 실행한다.
!mkdir ~/.kaggle
!cp kaggle.json ~/.kaggle/
!chmod 600 ~/.kaggle/kaggle.json

캐글 데이터 다운로드

  • 이제 사용할 데이터를 내려받는다.
!kaggle competitions download -c dogs-vs-cats
  • 만약 403 Forbidden 에러 발생 시, 이는 데이터셋에 연관된 규칙에 미동의한 상태로 동의를 진행해야 한다. https://www.kaggle.com/c/dogs-vs-cats/rules 페이지로 이동 후, I Understand and Accept 버튼을 누른다.

Untitled

Google Colab Plotly Graph 안 보일 때

현상

  • plotly 라이브러리를 활용하여 Google Colab에서 시각화를 할 때 그래프가 보이지 않는 현상이 존재함
  • 여러 방법론이 등장하지만, 공식문서에 따라서 어떻게 활용하는지 확인하도록 함

Google Colab

  • 먼저 구글 코랩에서 간단한 시각화 코드를 작성하고 코드를 실행한다.
import plotly 
plotly.__version__
# 5.13.1
  • 샘플 코드는 아래와 같음
import plotly.graph_objects as go
import pandas as pd 

temp = pd.DataFrame({
  "Fruit": ["Apples", "Oranges", "Bananas", "Apples", "Oranges", "Bananas"],
  "Contestant": ["Alex", "Alex", "Alex", "Jordan", "Jordan", "Jordan"],
  "Number Eaten": [2, 1, 3, 1, 3, 2],
})

fig = go.Figure()
fig.add_trace(go.Bar(name = "Alex", x = temp['Fruit'], y = temp[temp['Contestant'] == 'Alex']['Number Eaten'].values))
fig.add_trace(go.Bar(name = "Jordan", x = temp['Fruit'], y = temp[temp['Contestant'] == 'Jordan']['Number Eaten'].values))
fig.update_layout(barmode='group')
print(type(fig))
fig.show()

시각화가 나타나지 않을 경우

  • 만약 시각화가 나타나지 않는다면 설정이 제대로 되어 있지 않았을 가능성이 있다.
  • 공식문서를 참조하면 다음과 같다.
  • 공식 문서에서의 설명을 보면 다음과 같다.

Untitled

Scrapy Tutorial - 다중페이지 크롤링

개요

  • 이번에는 Scrapy를 통해서 다중 페이지를 크롤링 하도록 한다.

Target 페이지

Untitled

프로젝트 시작

  • 프로젝트 시작은 다음과 같이 할 수 있다.
$ scrapy startproject multiCam_tutorial
New Scrapy project 'multiCam_tutorial', using template directory 'C:\Users\j2hoo\OneDrive\Desktop\your_project_folder\venv\Lib\site-packages\scrapy\templates\project', created in:
    C:\Users\j2hoo\OneDrive\Desktop\your_path\multiCam_tutorial

You can start your first spider with:
    cd multiCam_tutorial
    scrapy genspider example example.com
  • 해당 multiCam_tutorial 경로에서 다음 명령어를 실행하여 타겟 사이트를 설정한다.
$ scrapy genspider audible www.audible.com/search
Created spider 'audible' using template 'basic' in module:
  multiCam_tutorial.spiders.audible
  • audible.py 파일을 찾아 코드를 확인한다.

Scrapy Tutorial - 기본편

개요

  • Scrapy Tutorial 설치 과정 및 기본 크롤링 과정을 살펴본다.

라이브러리 설치

  • 라이브러리 설치는 다음과 같다.
pip install scrapy

프로젝트 시작

  • Django와 비슷하게 터미널 명령어는 startproject라고 입력한다.
$ scrapy startproject multiCam_tutorial
New Scrapy project 'multiCam_tutorial', using template directory 'C:\Users\j2hoo\OneDrive\Desktop\your_project_folder\venv\Lib\site-packages\scrapy\templates\project', created in:
    C:\Users\j2hoo\OneDrive\Desktop\your_path\multiCam_tutorial

You can start your first spider with:
    cd multiCam_tutorial
    scrapy genspider example example.com
  • 파일 구조는 아래와 같이 여러개의 파일로 구성되었다.

Untitled

$ scrapy genspider worldometer www.worldometers.info/world-population/population-by-country
Created spider 'worldometer' using template 'basic' in module:
  multiCam_tutorial.spiders.worldometer

Untitled

Django - ExcelCalCulator_7

개요

  • Django 한 그릇 뚝딱 교재의 내용에서 멀티캠퍼스 강의에 맞게 일부 수정함
  • 2019년 버전이고 현재는 2023년이기 때문에 소스코드 변경 사항이 필요할 거 같아서 글을 남김

교재 홍보

Untitled

Step 01 - 이전 글

Step 02 - 프로젝트 완성하기

  • 지금까지 구현한 기능과 미완료된 기능을 확인한다.

Untitled

Step 03 - 로그인 실패 시 보이는 화면을 구현

  • 우선 사용자가 로그인 실패 시, 보이는 화면으로 구현한다.

Django - ExcelCalCulator_6

개요

  • Django 한 그릇 뚝딱 교재의 내용에서 멀티캠퍼스 강의에 맞게 일부 수정함
  • 2019년 버전이고 현재는 2023년이기 때문에 소스코드 변경 사항이 필요할 거 같아서 글을 남김

교재 홍보

Untitled

Step 01 - 이전 글

Step 02 - 프로젝트 완성하기

  • 지금까지 구현한 기능과 미완료된 기능을 확인한다.

Untitled

Step 03 - 엑셀 결과 화면 출력 위한 세션값 저장

  • 우선 calculate 함수의 마지막에 엑셀 결과 화면으로 데이터와 함께 url을 이동시켜본다.
  • views.py에 코드를 추가한다.
  • 파일 경로 : ExcelCalculate > calculate > views.py
from django.shortcuts import render, redirect
from django.http import HttpResponse
import pandas as pd

# Create your views here.
def calculate(request):
    file = request.FILES['fileInput']
    print("# 사용자가 등록한 파일의 이름: ", file)
    df = pd.read_excel(file, sheet_name="Sheet1", header=0)
    print(df.head())
    # grade별 value 리스트 만들기
    grade_dic = {}
    total_row_num = len(df.index)
    for i in range(total_row_num):
        data = df.loc[i, :]
        if not data.grade in grade_dic.keys():
            grade_dic[data.grade] = [data.value]
        else:
            grade_dic[data.grade].append(data.value)

    # print(grade_dic)
    # grade별 최솟값 최댓값 평균값 구하기
    grade_calculate_dic = {}
    for key in grade_dic.keys():
        grade_calculate_dic[key] = {}
        grade_calculate_dic[key]['min'] = min(grade_dic[key])
        grade_calculate_dic[key]['max'] = max(grade_dic[key])
        grade_calculate_dic[key]['avg'] = float(sum(grade_dic[key])) / len(grade_dic[key])

    # 결과 출력
    grade_list = list(grade_calculate_dic.keys())
    grade_list.sort()
    for key in grade_list:
        print("# grade: ", key)
        print("min:", grade_calculate_dic[key]['min'], end="")
        print("/ max:", grade_calculate_dic[key]['max'], end="")
        print("/ avg:", grade_calculate_dic[key]['avg'], end="\n\n")

    # 아래 코드와 동일
    result = df.groupby('grade')['value'].agg(["min", "max", "mean"])
    print(result)

    # 이메일 주소 도메인별 인원 구하기
    email_domain_dic = {}
    for i in range(total_row_num):
        data = df.loc[i, :]
        email_domain = data['email'].split("@")[1]
        if not email_domain in email_domain_dic.keys():
            email_domain_dic[email_domain] = 1
        else:
            email_domain_dic[email_domain] += 1
    print("## EMAIL 도메인별 사용 인원")
    for key in email_domain_dic.keys():
        print("#", key, ": ", email_domain_dic[key], "명")

    df['domain'] = df['email'].apply(lambda x : x.split("@")[1])
    result2 = df.groupby('domain')['value'].agg("count").sort_values(ascending=False)
    print(result2)

    # 세션 추가
    grade_calculate_dic_to_session = {}
    for key in grade_list:
        grade_calculate_dic_to_session[int(key)] = {}
        grade_calculate_dic_to_session[int(key)]['max'] = float(grade_calculate_dic[key]['max'])
        grade_calculate_dic_to_session[int(key)]['avg'] = float(grade_calculate_dic[key]['avg'])
        grade_calculate_dic_to_session[int(key)]['min'] = float(grade_calculate_dic[key]['min'])
     request.session['grade_calculate_dic'] = grade_calculate_dic_to_session
      request.session['email_domain_dic'] = email_domain_dic

    # return HttpResponse("calculate, calculate function!")
    return redirect('/result')
  • 세션 추가 이하의 코드를 살펴보면 다음과 같다.
    • pandas의 기본 자료형은 numpy 기반인데, 장고에서는 numpy 기반의 자료형이 아닌 파이썬 기본 자료형으로 변환해주어야 한다.
    • 따라서, 정수형 숫자로 된 것으로 int형으로 유리수 형태의 숫자를 float형으로 자료를 변환한다.
    • 형 변환을 하고 나서 해당 값들을 결과 화면에서 사용하려고 세션에 저장해준다.
    • 마지막으로 redirect(”/result”) 로 처리하였다.
      • 결과 화면을 관리하는 함수는 main app에 있는 result 함수이다. 따라서, 해당 url로 갈 수 있도록 처리한 것이다.

Step 04 - result 함수 수정

  • 파일 경로 : ExcelCalculate > main > views.py