※ 학습 노트

학습 날짜

 2020년 1월  

학습 사이트 

 인프런

과정 제목

 파이썬입문과 크롤링기초 부트캠프 (2020 업데이트) [쉽게! 견고한 자료까지!] 

학습 시간

 72강/941분

의견

 - 크롤링이 뜻대로 되지 않는 부분에 대한 팁을 얻기 위해 등록한 과정이기 때문에 

   스파르타 코딩 클럽에서 배운 것과 겹치는 부분은 스킵하고 필요한 부분부터 우선적으로 듣기로 함

 - 개념적인 것을 엄청 자세하게 설명해서 초보자(나)에게 좋음. 기존에 배운 것 복습 + 빈 곳을 채우는 느낌

 - 10~20분 단위로 micro하게 구성

 학습 모듈

 크롤링과 웹 기본 - 실전부분 




크롤링과 웹 기본__패턴으로 실습하며 익히기: HTML/CSS 이해를 바탕으로 크롤링하기

* 크롤링 패턴 코드

import requests
from bs4 import BeautifulSoup

res = requests.get('https://news.v.daum.net/v/20170615203441266')
soup = BeautifulSoup(res.content, 'html.parser')

mydata = soup.find_all('span','txt_info')
for item in mydata:
print (item.get_text())


*meta tag는 검색 엔진에 해당 페이지를 잘 검색할 수 있도록 쓰이는 경우가 많음

*해당 tag가 html 내에서 여러 군데 사용되고 있는 경우 class를 활용

*크롤링을 하고 싶은 부분이 class를 여러 개 사용 있는 경우,  class를 띄어쓰기 포함 그대로 사용

*mydata.get_text 또는 mydata.string 사용



크롤링과 웹 기본__패턴으로 실습하며 익히기: 실전 크롤링과 강력한 크롤링 기술 팁 

* 오픈 크롬 개발자 모드를 오픈 

   : 윈도우 Ctrl + Shift + i 또는 F12

* 원하는 영역 오른쪽 클릭한 후 copy > Copy outer html 복사 가능

* find()로 더 크게 감싸는 html 태그로 추출 후, 추출된 데이터에서 find_all()로 원하는 부분을 추출

* 문자 전처리할 때: strip(), split() 함수 사용

* 리스트에 숫자 붙일 때

for index, title in enumerate(titles):
print(str(index+1)+'.', title.get_text().split()[0].string())



크롤링과 웹 기본__CSS selector 사용해서 크롤링하기

* select()안에 태그 또는 CSS class 이름 등을 넣으면 결과값은 리스트 형태로 반환됨

* 하위 태그는 스페이스로 구분

* 모든 단계의 태그를 다 적을 필요는 없지만, 바로 밑의 태그에 해당하는 부분을 추출하고 싶을 때는 ul > a  식으로 > 사용

* class 이름을 사용하고 싶을 때에는 .사용, class 여러 개일때도 .사용하여 이어줌  

  id 는 # 사용 

* find()/select()로 가져온 객체는 find()/select() 모두 교차 사용 가능



바로 실전 크롤링해보기: 네이버 쇼핑 사이트 크롤링하기

#네이버쇼핑 best100 인기검색어

import requests
from bs4 import BeautifulSoup

res = requests.get('https://search.shopping.naver.com/best100v2/main.nhn')
soup = BeautifulSoup(res.content, 'html.parser')

items = soup.select('#popular_srch_lst > li > span.txt > a')
for item in items:
print(item.get_text())


#네이버쇼핑 특정 카테고리 상품 제목 

import requests
from bs4 import BeautifulSoup

res = requests.get('https://search.shopping.naver.com/search/all?frm=NVBT100&origQuery=%EB%8B%A4%EC%9D%B4%EC%96%B4%EB%A6%AC&pagingIndex=2&pagingSize=40&productSet
=total&query=%EB%8B%A4%EC%9D%B4%EC%96%B4%EB%A6%AC&sort=rel&timestamp=&viewType=thumb')
soup = BeautifulSoup(res.content, 'html.parser')

items = soup.select('div.imgList_title__3yJlT > a')

for item in items: print(item.get_text()) 


#네이버증권 인기검색종목

import requests
from bs4 import BeautifulSoup

res = requests.get('https://finance.naver.com/sise/')
soup = BeautifulSoup(res.content, 'html.parser')

items = soup.select('#popularItemList > li > a')
for item in items:
print(item.get_text())



또다른 크롤링 기술, urllib 라이브러리 사용법 이해

* 기존에는 urllib+bs4 세트로 많이 사용하였는데, 최근에는 requests + bs4 세트를 많이 사용

  기존 코드 중 일부가 urllib 사용하는 경우가 있으며 인코딩 처리가 다름

* requests 라이버리를 사용해서 크롤링 진행하고, 문제가 있는 경우만 urllib 시도

from urllib.request import urlopen #urllib request class에 들어있는 urlopen 함수만 필요
from bs4 import BeautifulSoup

res = urlopen('https://davelee-fun.github.io/')
soup = BeautifulSoup(res, 'html.parser')

items = soup.select('h4.card-text')
for item in items:
print(item.get_text().strip())



여러 페이지 한번에 크롤링하는 기법

* 주소에있는 페이지 번호를 활용하여 for 구문 사용

import requests
from bs4 import BeautifulSoup

for page_num in range(10):
if page_num == 0:
res = requests.get('https://davelee-fun.github.io/')
else:
res = requests.get('https://davelee-fun.github.io/page' + str(page_num + 1))
soup = BeautifulSoup(res.content, 'html.parser')

data = soup.select('h4.card-text')
for item in data:
print(item.get_text().strip())



크롤링해서 엑셀 파일로 데이터 저장하기

* openpyxl 라이브러리 활용

* 함수 설정

import openpyxl

def write_excel_template(filename,sheetname,listdata):
excel_file = openpyxl.Workbook() #엑셀 파일 오픈
excel_sheet = excel_file.active #엑셀 시트 선택

if sheetname !='': #시트이름이 없으면 넘어가기
excel_sheet.tile = sheetname

for item in listdata:
excel_sheet.append(item)
excel_file.save(filename)
excel_file.close()


* 크롤링해서 저장하기

import requests
from bs4 import BeautifulSoup

product_lists = list()

for page_num in range(10):
if page_num == 0:
res = requests.get('https://davelee-fun.github.io/')
else:
res = requests.get('https://davelee-fun.github.io/page'+str(page_num+1))
soup = BeautifulSoup(res.content,'html.parser')

data=soup.select('div.card')
for item in data:
product_name = item.select_one('div.card-body h4.card-text')
product_date = item.select_one('div.wrapfooter span.post-date')
product_info = [product_name.get_text().strip(),product_date.get_text()]
product_lists.append(product_info)

write_excel_template('tmp.xlsx','상품정보',product_lists)


* 엑셀파일 불러오기

for item in excel_sheet.rows:
print (item[0].value, item[1].value) #셀에 들어있는 값을 가져오기 위해 .value를 붙여줌


excel_file.close()




반응형


※ 학습 노트

학습 사이트 

 인프런

과정 제목

 파이썬입문과 크롤링기초 부트캠프 (2020 업데이트) [쉽게! 견고한 자료까지!] 

학습 시간

 72강/941분

의견

 - 크롤링이 뜻대로 되지 않는 부분에 대한 팁을 얻기 위해 등록한 과정이기 때문에 

   스파르타 코딩 클럽에서 배운 것과 겹치는 부분은 스킵하고 필요한 부분부터 우선적으로 듣기로 함

 - 개념적인 것을 엄청 자세하게 설명해서 초보자(나)에게 좋음. 기존에 배운 것 복습 + 빈 곳을 채우는 느낌

 - 10~20분 단위로 micro하게 구성

 학습 모듈

 강의 준비

 파이썬과 프로그래밍 기초를 견고하게 쌓는 가장 좋은 방법 - skip

 파이썬 객체와 라이브러리 - skip

 크롤링과 웹 기본 



강의준비_데이터과학과 IT 영역에서의 파이썬과 크롤링 큰그림 이해하기

* 영역: 웹, 앱, 응용 프로그램, IoT, 인공지능

* 단계: 데이터 수집 - 저장 - 분석 - Visualization - 서비스 개발



강의준비_프로그래밍 언어 기초와 파이썬 이해

* 프로그래밍 언어: 인간이 컴퓨터와 소통할 수 있도록 컴퓨터가 이해할 수 있는 명령으로 프로그램을 작성할 수 있도록 만든 언어

  - 컴퓨터는 기계어 (0과 1로 된 이진수 형태로 CPU가 이해할 수 있는 코드)만 이해한다



강의준비_anaconda와 jupyter notebook 소개와 설치

* 아나콘다(anaconda) 확장 기능 + 컴파일러 프로그램까지 한 번에 설치할 수 있는 프로그램

  - 파이썬 기본(컴파일러), 주요라이버리, 주요툴(jupyter notebook포함)을 모아놓은 패키지

  - 컴파일러 고급 언어로 작성된 코드를 기계어로 변환하는 프로그램



크롤링과 웹 기본_패턴으로 실습하며 익히기: 크롤링 코드 패턴으로 이해하기

  #라이브러리 임포트

 import requests

 from bs4 import BeautifulSoup

 #웹페이지 가져오기

 res = requests.get('사이트주소')

 #웹페이지 파싱하기

 soup = BeautifulSoup(res.content, 'html.parser')

 #필요한 데이터 추출하기 

 mydata = soup.find('title')

 #추출데이터 활용하기

 print(mydata.get_text()) 


* 웹기본구조

- 네트워크를 통해 내 컴퓨터와 다른 컴퓨터를 연결하고 정보를 주고 받을 수 있음

- 어떤 컴퓨터에서 정보를 받아올지 지칭하는 주소가 IP주소

- IP 주소를 이름으로 표기한 것이 웹주소 

- 주소를 넣으면 html로 구성된 파일을 달라고 요청하고 html은 해당 정보를 웹브라우저 안에서 보여줌


* 파싱 문자열의 의미를 분석하는 것


* 데이터 추출

soup.find('html코드')

변수.get_text




HTML


크롤링과 웹 기본_크롤링을 위한 지식: 웹구조와 HTML 이해하기

* 웹페이지는 HTML, CSS, javascript로 표현

* HTML

   - HTML은 마크업 언어: 문서나 데이터의 구조를 표현하는 언어

   - HTML 언어 : 웹페이지를 만드는 언어

   - 꺽쇠 <>와 tab로 표현

* Sublime Text 3 프로그램: HTML 에디터


*HTML 기본구조

<!DOCTYPE html> 이 문서는 HTML 언어를 사용

 <html> 여기서부터 HTML 문서 시작

 <head> 문서 전체 정보 (제목 등)

 </head>

 <body> 실제 웹페이지 표현되는 내용

 </b> enter

 </body> 

 </html>


  <head>

 <title> 제목 </title> 웹페이지의 타이틀이라 본문에 표시되지 않지만 탭에서 확인 가능

 <meta charset="utf-8"> 글씨가 깨질 때 추가 

 </head>


*태그 속성

<태그 속성(속성 이름, 속성 값) 속성 속성>

- 속성과 속성 사이는 한 칸씩 띄어야함


*구조화된 태그 (테이블)

  <table border="1">

   <thead> 한 테이블의 타이틀(표 머리글)

      <tr>

          <th>1*1</th>

      <tr>

   </thead>

   <tbody> 본문 내용

      <tr>

          <td>1*1</td> 

      <tr>

  </tbody> 

 </table>



크롤링과 웹 기본_패턴으로 실습하며 익히기: HTML 이해를 바탕으로 크롤링하기

*속성을 가져오는 방법

soup.find('태그')

 

#예시

 data =soup.find('p', class_='cssstyle') #클래스가 cssstyle을 가져오는 것

 data =soup.find('p', attrs={class':'cssstyle') #속성과 속성값을 그대로 기입 / 속성 여러 개 나열 가능

 data =soup.find('p', 'cssstyle')

 data =soup.find('p', id='body') 


 datas =soup.find_all #전체 다 찾아주나 리스트 형태로 보여주기 때문에 for 구문써줘야함

 for find_data in find_datas:

      print (find_data.get_text())


* 크롤링에서 가장 많이 쓰는 속성은 class이고 css 언어와 관련


CSS


크롤링과 웹 기본_크롤링을 위한 지식: 웹구조와 CSS  이해하기

* HTML로 웹페이지 구조(내용)을 표현하고 CSS언어를 활용하여 디자인하는 것이 일반적

* CSS 언어 적용 방법 

  1) 적용할 태그에 style 속성으로 넣기

  2) HTML문서 <head>안에 <style>태그로 넣기

  3) HTML문서 <head>안에 CSS파일 링크하기

* css언어는 프로퍼티와 프로퍼티 값으로 이루어짐. 

* 프로퍼티 정의는 구글 검색하여 css tutorial 활용


* 적용 방법 별 예시

  1) 적용할 태그에 style 속성으로 넣기

<td style ="text-align:center; color:blue">

세미콜론으로 구분해서 프로퍼티와 값을 연속으로 사용 가능. 띄어쓰기 해도 되고 안해도 됨


  2) HTML문서 <head>안에 <style>태그로 넣기

<style type="text/css">

td{

    font-size: 2em; 화면에서 디폴트로 보여주는 폰트의 2배

    font-family: Gulim;

    text-align: center;

}

</style>


 3) HTML문서 <head>안에 CSS파일 링크하기  매 페이지마다 head를 쓸 필요 없이 css 파일을 만들어놓고 페이지에 링크 가능

통상 css라는 확장자를 사용하여 파일 저장

#특정 태그에 css 설정 적용할 때

<link rel="stylesheet" type="text/css" href="css/style.css"> css파일이 들어있는 폴더와 파일명 


#.이름을 써서 별도의 css를 설정하여 내가 원하는 곳에 적용하려고 할 때

#.highlight는 내가 설정한 이름이며, class라고 부름 

.highlight {

 font-size:3em; 

 text-align:right;

 color: blue;

 }


<td class="highlight"> #설정한 css를 사용하고 싶은 곳의 태그 안에 class로 표시

<td class=highlight> 


반응형




※ 학습 노트


이런 강의가 있다.


---


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()


반응형

역시 사람은 물어봐야한다.

끝없이 헤매고 있다가 작년에 피플 애널리틱스를 시작한 동료에게 하소연하였더니 로지스틱 회귀분석을 찾아보라고 한다.

 

※학습노트

* 로지스틱회귀분석(logistic regression analysis)
  - 이항 로지스틱 회귀(binominal regression analysis) 종속변수의 범주 수가 2개 일 경우 
  - 다항 로지스틱 회귀(binominal regression analysis) 종속변수의 범주 수가 3개 이상일 경우
 
* 큰 값 (연구 관심 결과인 '있음')에 해당하는 경우로 분류될 확률
* Odds(비) Odds ratio (비의 비율) 로짓(Odds에 로그)

 

 

12-1. 로지스틱 회귀분석이란? - 로지스틱 회귀분석 (1)

* OLS 회귀 분석은 종속 변수가 nominal & continuous여야 함  

* 이항변수가 종속변수인 경우 OLS를 적용하였을 때 무엇이 문제인지 확인하는 예시를 다룸 

 > 기존 회귀계수를 해석하는데 문제가 있음 (x가 1증가할 때 y가 b만큼 증가한다고 할 수 없음), 0도 아닌 1도 아닌 예측값이 나옴

* 우리가 기대하는 것은 독립 변수가 1증가할 때 종속 변수가 1이 될 확률 >>> 엇, 내가 찾는 거 맞는 것 같다

 

12-2. 로짓과 로그오즈비란 - 로지스틱 회귀분석 (2)

* 종속변수가 이항변수인 경우 예) 성공/실패, 업/다운, 생존/죽음, Yes/No 등

로지스틱 회귀분석은, 

  - 이항 변수를 로짓이라는 개념을 통해 연속 변수처럼 바꾸어줌

  - 확률 개념 해석 가능

*오즈(Odds) = 확률 / (1-확)

*오즈비(Odd ratio)

*마이너스 무한대<로짓 = 로그(오즈비)<플러스 무한대

 

12-3.로지스틱 회귀분석을 해석해보자 - 로지스틱 회귀분석 (3)

* 일반 OSL & 로지스틱 분석 결과는 데이터의 유의미한 정도는 거의 비슷하게 나오나 해석이 다름

* estimate (회귀계수값)의 로그를 벗겨~

 엑셀에서 함수 exp(회귀계수) = 오즈비(odds ratio)

   - (오즈비-1) x 100은 %증가/감소로 해석 가능

*독립변수가 1단위 증가할때와 1단위 감소할때의 해석은 다름
 - {(1/(오즈비-1))=1} x 100으로 해석
 
*모든 독립변수 증감에 대해 종속 변수가 1(Y=1)이 되는 확률로 해석
 
12-3.로지스틱 회귀분석을 실습해보자 - 로지스틱 회귀분석 (4)
* 내가 가지고 있는 데이터로 따라해봐야지!

* jamovi > analysis > regression > binominal logistic regression

* 숫자인데 text로 읽히는 경우도 있어서 필요 시 데이터 속성 변경

  - norminal (명목척도), ordinal (순서척도), continuous (연속척도)
반응형



두 집단을 비교하는데에 t-test가 적합하다고 하여 번갯불에 콩구워먹듯이 공부를 했는데.

공부를 다하고도 몰랐다. 내가 가지고 있는 데이터에는 적합하지 않다는 것을.


자, 이제 공부했으니 데이터 분석을 해볼까, 하고 프로그램을 열고 가만- 생각해보니 뭔가 이상하다.

내가 가지고 있는 데이터(강점/보완점)는 명목 변수다.


값이 이항분포일 때에는 (유/무) t-test로 분석하기 어렵고 chi-square test를 해야한다고 한다.

치-스퀘어 테스트? 

,,, 카이 스퀘어 테스트였다. 


정말 울고 싶군 ㅋ





다행히, t-test 를 공부했던 유튜브 채널에 카이 스퀘어 테스트도 있다!


※학습노트

9-1. 카이제곱 검정에 대해 알아보자

* 음, 그런데 여기서는 독립 변수, 종속 변수 모두 명목 변수일 때 사용하는 것이 카이제곱 검정이라고 한다...!

  내가 가진 데이터의 독립 변수는 연속 변수인데 (...) 이미 시무룩

* 관찰된 빈도가 기대되는 빈도와 의미있게 다른지 검증하기 위해 사용

* 관찰 빈도는 자료, 기대 빈도는 개념적으로 기대하는 수치와 유사한 개념

* 테이블이나 그래프를 볼일은 많지 않음 


9-2. 일원 카이제곱 검정을 계산해 보자

* 일원 카이제곱 검정 (One-way) 

* 검정의 유의성이 의미하는 것은 무엇인가 다르다, 정도

  - 그래서 카이제곱 검정을 적합도라고 부르기도 한다.


9-3. 이원 카이제곱 검정을 계산해 보자3

* 이원 카이제곱 검정 (Two-way) 

* 두 변수 모두 명목 변수일 때, 두 변수 사이에 어떠한 연관성이 있는지 확인해보는 것

* 카이제곱 감정은 인과관계가 아니고 상관관계 (연관성이 있다,)

* 기대 빈도 = (행합계 x 열합계) / 총합계


9-4. 카이제곱 검정을 넘어서

의료계에서 많이 쓰이는 편 

* 각 셀의 기대빈도가 5이상이어야 함

*...오...먼말인지 몰라지는....모르겠다 아무튼, 한계가 많은 검정임...안되겠다...

* 상대위험도는 두 확률의 차이가 아니라 비율로 나타냄 

* 오즈(odds)란 어떤 확율이 일어날 확율 / 일어나지 않을 확율 (행열을 바꿔서 계산해도 오즈비는 거의 비슷) 

* 두 명목 척도인 변수가 연관성이 있을 경우, 상관계수를 구하는 방법 > Contingency coefficient (분할계수/c계수), Phi and Cremer's V

  변수가 순위 척도 & 연관성이 있을 경우, 상관계수를 구하는 방법 > Kendall's tau-b, Gamma


9-5. 카이제곱 검정을 실습해보자

* Jamovi > frequency에 있음

* 결과가 유의하게 나와도 통계적으로 유의미한 설명하기 어려움


ㅠ-ㅠ 큰일났다! 이것도 아닌 것 같다...

반응형

 

이터 분석력 0인데 숙제는 해야하는 상태

 

조직 특성(구성)에 따라 리더십 진단 결과에 차이가 있는지 분석하기로 하였는데, 

리더십 진단 결과가 점수가 아니라 강점과 보완점이다.

 

하여, 특정 리더십 역량이 강점 또는 보완점으로 나온 집단과 그렇지 않은 집단을 비교해보기로 하고

두 집단을 비교하는 t-test를 공부해보기로함 

 

뭐하고 있는지도 모르겠으나, 

하다보면...길이 나오려나...ㅠ

 

 

 

 

우선 유튜브에서 듣기 편한 영상을 찾았고, 2편까지 보고, 정리하면서 보면 좋을 것 같아서 블로그를 열었다

 

학습하기에 좋은 영상은 

- 속도가 적절하고 (영상 속도 조절만으로는 어려운, 말의 템포 &스타일이 있다)

- 내용에 차근차근 접근하며 (나는 진짜 똥멍청이급 초보니까)

- 예시를 잘 들어주는 특징이있는 것 같다

 

아무튼, ※학습노트

3-3. 너무 빨리 먹으면 체합니다 -t-test(3) = z-test

* z-text & t-test는 본질적으로 같음. z-text는 모집단, t-test는 표본집단을 대상으로 함

 

* 정규 분포

   - 정규 분포의 아래 면적은 확률을 의미

   - 표준 정규 분포는 평균이 0이고 표준 편차가 1인 정규 분포 

   - 정규 분포를 표준 정규 분포로 바꾼 후,

     z-score = (값-평균)/표준편차

   - 표준정규분포표의 확률표 참고

 

* t-test의 질문 (3-2 복습)

  - A대학 남학생 평균 키 vs. B대학 남학생 평균키가 우연히 같은 확률은? 

    . 두 집단의 차이가 표준편차보다 현저히 작으면 ㅡ 그 차이에 큰 의미를 둘 수 없음

    . 두 집단의 차이가 표준편차보다 현저히 크면 ㅡ 그 차이에 큰 의미를 둘 수 있음

  - 우연히 발생했을 확률 = 정규 분포 면적을 활용한 확률

  - 다만, t-test는 정규분포가 아닌 다른 분포 곡선을 사용 

 

3-4 단순하지만 헷갈릴 수도... - t-test (4)

* 양측 검정 vs. 단측 검정

   - 양측 검정과 단측 검정의 차이는 대립 가설의 차이에서 발생

   - 양측은 0보다 크거나 작은 두 가지를 모두 포함하므로 분포 곡선의 양쪽 꼬리의 면접의 합이 5%에 들어갈만큼 크거나 작아야함

   - 단측은 0보다 크다(우측검정)와 0보다 작다(좌측검정)의 두 가지로 나누어볼 수 있고 한쪽 꼬리의 면적이 5%에 들어갈만큼 크거나 작아야 한다

   - 0을 기준으로 양측이든 단측이든 95%안에 들어오면 두 평균값의 차이는 우연히 발생한 것

 

3-5 이제야 t-test를 하다니 - t-test (5)

* t-value = 두 집단의 평균 차이 / (표본의 표준 편차 / 표본의 갯수)

  - 표본의 갯수가 많아지리 수록 t-value는 높아지고 정규 분포에 가까워짐 

* df(degree of freedom) = 표본 개수 - 1

* t-table에서 df와 confidence level의 critical value를 찾아 t-value와 비교 

 

3-6 종류별로 알아보자 - t-test (6)

* t-test의 종류 : two-sample t-test, one-sample t-test, paired t-test    

* 계산은 컴퓨터에 맡기자!!! >> 아주 마음에 드는 부분ㅋ

 

3-7 t-test를 컴퓨터에서 실습해보자 - t-test (7)

*Jamovi www.jamovi.org

 - 영문으로 작성된 데이터만 사용 가능

 

내일 데이터 분석해보면 뭐라도 나오겠지.

희망을 가지고 여기까지.

반응형



※복습 노트

* 조건문

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> 


반응형

+ Recent posts