※ 학습 노트


이런 강의가 있다.


---


Data science from MIT 

 

Computer Science의 탑 1위 대학인 MIT 공대의 "Introduction to Computational Thinking and Data Science" 수업 영상 및 강의 자료를 한국어로 번역하여 여러분께 제공합니다.

해당 강좌에서는 데이터 과학이라는 분야를 시작하기 위한 알고리즘과 통계학 그리고 기계학습의 내용을 조금씩 나눠서 다루고 있으며, 프로그래밍 실습보다는 문제 해결방법 대해서 집중적으로 공부합니다. 본격적인 데이터 과학 분야에 진입하기에 앞서, 해당 분야를 배우기 위해서는 어떤 것을 더 학습해야 하는지 체험할 수 있는 강의입니다.


---


Edwith에서 수강할 예정이지만, MIT 강의라고 하니 글로벌 플랫폼에 업로드 되어있을 것 같아 찾아보았다.

>>edX와 Youtube에 있는 듯.

(Coursera에서 the most popular 과정 중 하나인 'Python for everybody(모두를 위한 파이썬)' 도 Edwith에 한글화된 버전으로 볼 수 있다.)





* 해당 분야를 배우기 위해서 어떤 것을 더 학습해야 하는지 체험할 수 있는 강의


학습해야할 새로운 영역들은 계속해서 생겨나는데, 

범위가 처음부터 정해져있지도 않거니와 계속해서 확장하고, 변화한다.

고등학교 때처럼 정해진 교과, 정해진 범위 내에서 체계적으로 공부하기가 어렵다.

(그때가 좋은 거였...다고 말하면 안되겠지..! ㅋ 그때는 그때만의 고통과 괴로움이 있었으니까-)


올해는 수행해야할 과제가 있어서 이것 저것 닥치는 대로 찾아보았다.

지금도 아주 초초초초보지만, 그래도 아주 처음보다는 들은 것, 본 것들이 생겼다.

학습 분야의 용어에 익숙해지는 것도 중요한 것 같다.


계속해서 업데이트하고 수정해야겠지만, 학습자만의 체계와 체크리스트를 만들어가는 것도 학습의 방법 중에 하나일 것 같아서,

조금씩 정리해보기로 했는데....



* 선수조건


1. 모두를 위한 프로그래밍: 파이썬

2. 모두를 위한 프로그래밍: 파이썬 자료구조

3. 모두를 위한 프로그래밍: 파이썬을 이용한 데이터베이스 처리

4. CS50 x edwith

5. Introduction to Computer Science and Programming in Python



그런데, 당황스럽게도 선수조건이 왜이렇게 많지...! ㅋㅋㅋ 해당 분야를 배우기 위해 어떤 것을 더 학습해야하는지 체험할 수 있는 강의라고 하여 아주아주 생초보자를 위한 것인줄 알았건만.!


다행히, 모두를 위한 프로그래밍을 학습한 후이긴하지만,

불행히, 이미 시간이 지나기도 했고, 학습을 기록해놓지를 않았기에, 

선수 조건인 과정부터 점검해보기로 하였다.


그런데 맙소사 ㅠ 내가 이미 들은 줄 알았던 과정도 '모두를 위한 프로그래밍: 파이썬' 만이다. 

갈길이 멀군



[모두를 위한 프로그래밍: 파이썬 자료구조] 부터 시작한다.

(Chapter 6~8)


*** 알아야할 것 : 타입 변환, 인덱싱, len 함수, for 루프


* len 함수 : 문자의 길이 >>>리스트가 몇 개의 항목을 가지고 있는지 확인 가능

* print(s[0:4]) - 4번째 인덱스는 읽지 않음!

  print(s[:2]) - 첫 번째나 마지막 인덱스 생략할 경우, 시작 또는 마지막까지 가정하고 반환

* strings는 object이고 object는 method라는 것을 가지고 있음

* replace (문자바꾸기)

* lstrip (왼쪽 공백 없애기), rstrip (오른쪽 공백 없애기), strip (양쪽 공백 없애기)

* startwith (시작 문자열 찾기)

* 파이썬3에서부터는 모든 내부 문자열이 유니코드 (한국어가 예시로 나온다!)

  유니코드 연산이어도 문자열로 인식. (파이썬3에서는 문자열이지만 유니코드 상수가 별개로 있었고 다른 자료형으로 인식함)

* open() 파일을 여는 것

\n >>> 다음 줄로

* read()

통상 프로그래밍은 알고리즘과 자료구조로 나눌 수 있음

   - 알고리즘: 특정 문제를 해결 하기 위한 규칙 또는 단계

   - 자료구조: 컴퓨터 내에서 자료를 구조화 하는 특별한 방식


* list(리스트)

  1. 리스트의 각 항목들은 '[]'로 둘러싸임
  2. 리스트 내의 항목들에 대한 구분은 ,(콤마)로 구분
  3. 리스트 내에 또 다른 리스트를 내포할 수 있음
  4. 비어 있는 리스트를 만들 수 있음
  5. 리스트의 항목들에 인덱스 값으로 접근 가능.
  6. 리스트의 항목들은 바뀔 수 있음


* range() >>> 인자로 전달되는 값에 따라서 숫자로 이루어진 리스트를 반환


* .list() >>> 리스트 만들기

* .append('book') >>리스트에 추가

* .sort() >>> 정렬

* .split() >>> 공백을 찾아 조각을 반환

  .split(';') >>> 세미콜론 기준으로 Split해주지 않으므로 별도 정의


* 컬렉션(collection)리스트나 딕셔너리 같은 변수를 가지는 상황. 하나의 정보보다는 여러 개의 정보를 저장할 때 사용

* 리스트(list): 순서대로 정렬한 컬렉션. 데이터를 추가하면 항상 리스트의 끝에 추가되고 0부터 n-1번 위치까지 순서대로 n개의 원소가 저장됨

딕셔너리(dictionary)

- 순서 없음. 대신 키(Key) 존재

-ooo={} 또는 dict()라는 생성자를 통해 생성

- {중괄호} 안에 Key:Value 형태로 저장


* get 함수 : 

counts.get(name,0)


>>>딕셔너리에 name이라는 키가 존재할 경우 값을 불러오고,

그렇지 않을 경우에는 딕셔너리의 name이라는 키에 0이라는 값을 갖는 데이터를 추가하라는 의미

if name in counts:

   x = counts[name]

else :

   x = 0 

 x = counts.get(name,0) 


* items 메소드

keys, values 메소드로는 딕셔너리의 키와 값의 쌍을 얻음 >>> items 메소드를 사용하면 됨

items 메소드를 실행하면 '튜플(tuple)'이라는 자료 구조 안에 키와 값이 쌍을 이루어 저장된 리스트가 반환됨


* Tuples(튜플) 리스트와 거의 비슷하지만 변경불가능(immutable), 즉 값 변경 (정렬, 값 추가, 순서 변경) 불가하다는 특성에서 차이가 있음

그러나 리스트보다 훨씬 효율적으로 작동함 (용량 적게 차지, 근 빠름)

* 내장된 함수 차이

l = list()

 dir(l)

# ['append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

  t = tuple()

 dir(t)

# ['count', 'index']


* sorted 함수 :  딕셔너리는 키 기준으로 정렬된 값이 나옴

반응형

※복습 노트


* 파이썬 공식 스타일 가이드 


  - https://www.python.org/dev/peps/pep-0008/


  - https://docs.python.org/ko/3/tutorial/controlflow.html#intermezzo-coding-style



* List와 Dictionary


a_list = [ ] #비어있는 리스트 만들기

a_list.append() #리스트에 값을 넣는다


a_dict = { }



* 파이썬 명령어

def 함수이름 (필요한 변수들) :

   내릴 명령어들을 순차적으로 작성

#사용하기

함수이름(필요한 변수들  



* 파이썬 조건문

 def is_even(num): # is_even는 num을 변수로 받는 함수 이름 

      if num % 2 == 0: # num을 2로 나눈 나머지가 0이면 

           return True # True (참)을 반환한다. 

      else: # 아니면, 

           return False # False (거짓)을 반환한다.

 #html 조건문

 function is_even(num){

    if (num % 2 == 0) {

       return true; 

    } else {

       return false; 

    }

 } 



* 파이썬 반복문


 fruits = ['사과', '배', '참외'] 

 for fruit in fruits# fruit는 임의로 지은 이름 

      print (fruit)

 #html 반복문

 let fruits = ['사과','배','참외']

 for (let i=0; i<fruits.length; i++) {

      console.log(fruits[i])

 }



* 파이썬 조건문 & 반복문으로 숫자 세기


 fruits = ['사과', '배', '배', '감', '수박', '귤', '딸기', '사과', '배', '수박'] 

 def count_fruits(name): 

 count = 0 

 for fruit in fruits:

 if fruit == name: 

      count += 1 

 return count 


 subak_count = count_fruits('수박') 

 print(subak_count) # 수박의 갯수 출력

 #html 조건문 & 반복문으로 숫자 세기

 let fruits = ['사과', '배', '배', '감', '수박', '귤', '딸기', '사과', '배', '수박'] 

 

 let count =0;

 for (let i=0; i<fruits.length; i++) {

    let fruit == fruits[i];

    if (fruit =='수박'){

       count +=1;

    }

 }

 



* 웹스크래핑

  - 패키지 설치 : beautifulsoup4 HTML 코드를 쉽게 스크래핑 해오기 위한 도구

  - 태그 안의 텍스트를 찍고 싶을 땐 → 태그.text

    태그 안의 속성을 찍고 싶을 땐 → 태그['속성']



import requests
from bs4 import BeautifulSoup

headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get('https://sports.news.naver.com/kbaseball/record/index.nhn?category=kbo', headers=headers)

# HTML BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
# soup이라는 변수에 "파싱 용이해진 html"이 담긴 상태가 됨
# 이제 코딩을 통해 필요한 부분을 추출하면 된다.


soup = BeautifulSoup(data.text, 'html.parser') 


*크롤링한 내용에서 공백 없애기 .text.strip()


반응형



※복습 노트

* 조건문

function 어쩌구( ) {

     if (판별식) {

         판별식 조건에 부합할 때의 결과 

      } else {

         나머지 경우의 결과

     } 


반복문

for (시작조건, 반복조건, 반복 후 할 일) {

반복마다 실행될 명령어



&& >> and 

|| >> or 

i++ >> 실행 후 i를 +1한다. (i = i+1)

리스트이름.length >> 리스트의 길이



*jQuery

- 공식 사이트 https://jquery.com/

- jQuery Import

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

- id 값을 통해 특정 버튼, 박스 등을 가르킴 

 $('#id').hide(); 

 $('#id').show(); 

 $('#id').css('display'); >> hide일 때 출력 값  none, show일 때 출력 값 block


 $('#id').val(); >> value 가져오기

 $('#id').text();  >> text 바꾸기

 $('#id').empty();

 $('#id').append(); >> 추가

 $(document).ready(function () {

            $('#id').empty();

        }); >> 웹 페이지 새로고침할 때마다 괄호 안 명령어 실행



JSON

-데이터 표현 방식

- Key:Value로 이루어져있음



{Dictionary 형 Value}

   [List 형 Value]



Client는 Server의 API에 Request하여 Data(HTML, CSS, JS 등)를 Response 받음

  - Request 방식 

  - Get > 데이터 조회(Read)를 요청할 때

  - ? : 여기서부터 전달할 데이터가 작성된다

    & : 전달할 데이터가 더 있다


Ajax

- 비동기 서버 통신 방식

- 비동기 = 동작이 일어날 때 전체 페이지가 아닌 일부분만 업데이트 가능

- 서버 통신 = 요청-응답

>>  Ajax 작업 1) 웹페이지 새로고침 없이 서버에 요청, 2) 서버로부터 데이터를 받고 작업 수행


무료 API 모음

https://github.com/public-apis/public-apis



※과제 기록


1) Alert 만들기

- <script></script> 사이

- input 항목의 id 찾아오기 $('#id')

- value 불러오기 .val();

- 빈칸 (' ') 일 때 alert('어쩌구') 넣기

 function order() {

    let newName = $('#order-name').val();
let newCount = $('#order-count').val();
let newAddress = $('#order-address').val();
let newPhone = $('#order-phone').val();
if (newName == '') {
alert('이름을 입력해주세요');
};
if (newCount == '') {
alert('주문수량을 입력해주세요');
};
if (newAddress == '') {
alert('주소를 입력해주세요');
};
if (newPhone == '') {
alert('연락처를 입력해주세요');
};
}


2) 환율 정보 넣기

<script></script> 사이

let ready = $(document).ready(function() {

    $('#exchange-info').empty();
$.ajax({
type: "GET",
url: "https://api.manana.kr/exchange/rate.json",
data: {},
success: function (response) {
let usdExchange = response[1]["rate"];
$('#exchange-info').append("환율= $", usdExchange);
}
})
})

<body></body> 사이

</div>
<div id="exchange-info" class="info">

</div> 


반응형


※스파르타 코딩 클럽 과제 기록


1. 폰트 변경


<link href="https://fonts.googleapis.com/css2?family=Cute+Font&display=swap" rel="stylesheet">


<style type="text/css">
* {
font-family: 'Cute Font', cursive;
}

   

   1) 사이트 접속 https://fonts.google.com/

   2) language(Korean) 선택 

   3) 폰트 선택 (Select this style)

   4) 오른쪽 Selected Family의 Embed탭 클릭

   5) link와 css rules 복사하여 head에서 변경


2. 이미지 변경


.img {

background-image: url('https://kkoma.net/web/product/big/201905/4aa48d0ebab9f50f9e3b47fb7b8af386.jpg');
background-size: cover;
background-position: center;
width: 500px;
height: 300px;
padding-top: 500px;
margin-top: 30px;
}


1) 구글에서 cloud 검색 

2) 이미지 주소 복사

3) head>style>.image의 url 주소 변경

4) 이미지가 천장에 붙길래 padding-top: 500px; 추가

  내부 여백이여서 내가 원하는 사진 위로 여백은 안생겼지만 잘렸던 사진이 더 켜지길래 적용함 ㅋ

5) margin: 30px 추가

  margin: 30px도 가능하나 사방으로 붕뜨는 느낌. margin-top: 30px 적용

*margin과 padding 설명 잘되어있는 블로그: https://blog.naver.com/jm3ds/221619894995



3. 선택 가능 수량 변경


<select class="custom-select" id="order-count">

    <option selected value=""> -- 수량을 선택하세요 --</option>

    <option value="1">1</option>

    <option value="2">2</option>

    <option value="3">3</option>

    <option value="4">4</option>

    <option value="5">5</option>

</select>


input form 바꿔보려다가 안되서 쉬운 것 그냥 추가

1) <option value="1">1</option> 복사해서 숫자만 바꿔서 추 




반응형

+ Recent posts