데이터 1주차

sss·2022년 2월 3일

1강

데이터분석
현실에 존재하는 실제 문제에 대해 답을 내리는 활동
ex) tv광고 마케팅 담당자
어케하면 많이팔까 분석 --> 데이터 분석

collection - cleaning - explaratory data analysis - model building

  • model deployment

크롤링 - 데이터가공 - 탐색적 데이터분석 (시각화, 상관관계 분석) - 예측 모델 만들기 - 인사이트 도출

엑셀 - 데이터분석맛보기 - 파이썬 기초문법, 웹스크래핑
데이터 가공
주류데이터, 코로나 데이터 들 통해 분석과정 경험
회귀분석, scikit-learn패키지 사용 --> 머신러닝모델 구현
실전 가정해서 데이터 직접 다루기 --> 회원 탈퇴 예측

  • 왕초보대상 강의 - 천천히 말하고 여러번말하는 경우 많음 - 배속재생 & 스킵활용
  • 파이썬 내용 많음 --> 파이썬 연습 많이 할 것 (직접입력, 직접생각) --> 파이썬강의 들을 것
  • 내용 자체가 많음 --> 복습 필수
  • 이해 안가면 적어뒀다가 질문 --> 그냥 넘어가면 다음에 모름
  • 어려워도 끝까지 들어볼 것.
  • 데이터분석은 취업을 떠나 모든 현실문제에 좋음

2강

데이터분석 엑셀 이용 간단하게 맛보기

성적이 다른요소의 관계가 궁금? ex)'공부시간'이라는 변수 정하기
여기서 '성적'은 종속변수 -> 다른 변수에 따라 바뀜 --> 종속되어있음

'공부시간'독립변수

간단히 나타내면 공부시간*a+b = 성적
이겠으나 실생활에는 매우 많은 요인이 영향을 주므로 다양한 요인의 상관관계를 모두 탐색해야함

그래서 다양한 요인이 있다 가정하고 엑셀로 상관관계 분석해보기

캐글 - 데이터셋 제공, 분석결과 제출하면 얼마나 정확하게 예측했는지를 서로 경쟁할 수 있음.

학생성적데이터를 보면 각 행은 각 학생 한명 한명의 데이터

sheet.new로 들어가면 구글 스프레드시트 바로 들어갈 수 있음

medu - 어머니의 최종학력 (1- 초등 2 중등 3 고등 4 대학)
traveltime - 등교시간 (1- 15분미만 2- 30분미만 3- 45분미만 4- 1시간미만)
studytime - 공부시간 (2 - 2-5시간)
failures - F받은 횟수
goout - 친구랑 놀러다니는 빈도
G1 - 첫 번째 시험에서 받은 점수
G2 - 두 "
G3 - 최종 "

상관관계란? 변수간의 관계
양의 상관관계, 음의 상관관계

correation - 상관관계라는 뜻

수치들은 각 변수와의 상관계수라고 함

여기서는 성적(G3)과의 연관정도

양의 상관관계 : 1에 가까울 수록 이 요인이 증가할 때 최종성적도 증가
음의 상관관계 : -1에 가까울 수록 이 요인이 증가할 때 최종성적은 감소

인과관계는 아님 --> 그냥 확률임

여기서 양수, 음수를 구별 --> 직관과 일치하는가? --> 절대값이 클수록 연관성이 높다.

예측하기 --> 그럼 공부시간, 교육수준에 따른 최종 시험 성적은? --> 회귀분석
정규화, 이상치 탐지 등의 과정을 거치는데 이건 엑셀에선 지원하지 않음.

그래서 파이썬.

3강

여기서는 google colab을 쓸거임

주석 - 해당 코드를 왜 만들었는지 메모해두는 것 --> #을 사용
더 길게 할 때는
'''
할 말
'''
를 쓰면 됨. 큰따옴표도 됨

colab에서는 마지막 줄만 출력함
그래서 여러개를 출력하려면
print를 사용

print(3 + 5)
print(2 + 3)
괄호 꼭 사용

shift + enter가 출력

4강

변수 --> 그때 그때 꺼내쓰는 그릇 --> 숫자, 문자, 여러개의 숫자 문자 등

'=' 같다 할당하다. --> 변수를 만드는 행위

변수 종류 알아보기
#자료형
type(변수)
를 누르면 int가 들어가는데 integer-정수라는 뜻

#실수형
실수 - 소수점 들어가는거
float - 실수

#문자형
문자는 작은따옴표나 큰따옴표 사용
str이라고 뜸
string - 문자열

#리스트
여러 개의 변수를 담을 때
list1 = ['a', 'b', 'c', 'd', 'e']
리스트는 대괄호를 사용

그렇다면 리스트는 어떻게 활용하나?

list = [1, 2, 3, 4, 5]
여기서 1만 출력하고 싶다

list1 = [1, 2, 3, 4, 5]
print(list1[0])

*list 다음 대괄호 0은 0번째 요소
0, 1, 2, 3, 4

#append
list1 = [1, 2, 3, 4, 5]
list1.append(6)
print(list1)

*요소를 추가할 때 사용

#extend
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c'] #문자는 무조건 따옴표로 감싸기
list1.extend(list2)
print(list1)

*리스트 + 또 다른 리스트

5강

조건문, 반복문 배우기

조건문/반복문 쓰는 이유 - 데이터분석하는데, 데이터가 너무 많음ㅇ
ex) 데이터마다 누가 이상한 문자를 섞어놔서 분석이 불가능한 경우?

for문을 쓸 때 규칙

  • for문 끝에 :붙이기
  • 반복해서 실행될 코드는 들여쓰기(indentation)을 해줘야함. --> tab이나 spacebar 4번 사용 가능

ex)
for 1 in range(0,5) # 여기서 0-첫번째숫자, 5-마지막숫자
print(i, '번 반복할게요~') # print 앞에 들여쓰기 해줌

#for문에 대한 설명
for i in range(0,5)
print(i)
에서 i는 리스트의 요소를 하나하나씩 갖고 옴
i라는 그릇에 담겨서 순차적으로 출력

range(1, 10)은 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]에 불과하다
= 총 10개가 담겨있는 리스트임

#for문에 대한 설명
for i in range(0, 5):
print(i)
print(1)

0
1
2
3
4
1

#for문에 대한 설명
for i in range(0, 5):
print(i)
print(1)

0
1 print(1)
1
1 print(1)
2
1 print(1)
3
1 print(1)
4
1 print(1)

#리스트도 가능
list1 = ['a', 'b', 'c', 'd', 'e']
for alphabet in list1:
print(alphabet)

a
b
c
d
e

6강

조건문
ex) 자판기 만들었을 때 일정금액 이상이 들어와야 상품이 나감

비교연산자

  • 어떤 요소들이 있을 때(변수), 변수들을 비교하기 위해 쓰는 것
    **비교를 해서 그 결과가 참이냐 거짓이냐에 따라 조건문의 실행 여부가 결정됨
    <

    ==

    !=

    <=

** '='과 '=='은 다른다
=은 그릇에 담기 --> 할당
==은 x와 y가 같냐? 물어보는 것
!=은 x와 y가 같지 않나요? 물어보는 것

#3이 5보다 작을까요?
3 < 5

실행

true

3 > 5
false

5!= 7
true

'문자열이에요' == '문자열입니다'
false

if 조건문: <-- 여기 비교연산자에 들어감
수행할 문장1
수행할 문장2

else:
수행할 문장A
수행할 문장B

  • :과 들여쓰기에 주의
    if문은 항상 기본연산자를 쓴다
    *
    else 뒤에는 어떠한 조건문도 붙이지 않음

조건이 한 개가 아닌 경우 if문과 else사이에 elif를 투가할 수 있다.

if <조건문>:
<문장1>
<문장2>
...
elif <조건문2>
<문장1>
<문장2>
elif <조건문3>
<문장1>
<문장2>
else: #else 뒤에는 조건문이 없어야 함
<문장A>
<문장B>

7강
함수 --> 단순작업을 줄이는 작업

직육면체와 관련된 계산을 한다 가정해보자.
부피와 겉넓이를 구하는 공식
V = abc
A = 2(ab+bc+ca)

여기서 수많은 직육면체를 계산한다면? 함수사용

def 함수이름(함수의 인자1, 함수의 인자2, ...):
수행할 코드
return 최종 결과
#:과 들여쓰기 주의

부피계산하는 함수
def volume(width, height, length):
return width height length

가로 세로 높이값을 일단 넣어줘야 알아들음 --> 이게 함수의 인자

#부피를 구하는 함수를 만들 것일 뿐, 함수를 실행한 게 아니다.
#계산하라고 한 것이 아니라, 계산할 어떤 틀을 만든 것.
def volume(width, height, length): # width, height, length 값이 있어야만 함수가 실행될 수 있다. 아니면 어케함? 그래서 명시해줘야함
return width height length # 결과값을 나중에 또 사용할 수 있도록 하는 조치
#return을 써야만 우리가 나중에 다른 변수에다 결과값 저장 가능
#print는 그냥 출력만 할 뿐, 다른 변수에 저장할 수 없다.

print(volume(5, 8, 2)) # return은 출력하라는 뜻이 아님
#코랩에서는 사용자 편하라고 print를 안 써도 출력해줌 원래는 print 써야함

결과값 저장할 때는,

volume1 = volume(5, 8, 2)
print(volume1)

** print와 return의 차이점
print로는 결과값을 나중에 사용할 수 없다. 어디에도 저장되지 않음.
return은 가능

***모든 함수가 반드시 값을 return해야만 하는 건 아님. return문을 사용하지 않고 함수를 작성하면
해당 함수는 값을 return하지 않는다. 다음은 함수에서 print()를 사용하되 return은 사용하지 않는 덧셈수행함수임.
def add(a, b):
print(a,'하고',b,'를 더하면',a+b,'입니다.')

여기에 add(3, 4)

3 하고 4 를 더하면 7 입니다.

이렇게 출력

var = add(3, 4)
print(var)

하지만 이렇게 넣으면 print로 되어있어 return하지 않으므로 none이 뜬다.
여기서 none은 변수에 값이 없다는 뜻.

그럼 어떻게 return하도록 하냐?
def add(a, b):
print(a,'하고',b,'를 더하면',a+b,'입니다.')
return a + b

이렇게 return을 추가로 넣어준다. 그러면

var = add(3, 4)
print(var)

을 입력했을 때,

3 하고 4 를 더하면 7 입니다.
7

가 출력!

8강
클래스, 예외처리 --> 무조건 이해할 것.

1)클래스
예를 들어 많은 몬스터의 hp를 관리해야함.
1- 리스트에 모든 몬스터의 hp를 적어둔다.
2- 몬스터마다 각자의 hp를 설정해둔다.

두 번째가 쉽고 직관적. 이게 클래스.
ex)

class Monster():
hp = 100
mp = 10

def damage(self, attack):
    self.hp = self.hp - attack

monster1 = Monster()
monster1.damage(120)

monster2 = Monster()
monster2.damage(90)

클래스는 어떠한 틀을 짜는 것. '몬스터는 hp와 mp를 가진다'라고 미리 틀을 만들어주는 것이다.
그러면 우리는 그때그때 몬스터란 무엇인지에 대해 정의할 필요 없이, 그냥 monster()를 호출해서 몬스터를 생성할 수 있게 되는 것.
그래서 생성된 결과물을 인스턴스(객체)라 한다.

monster1 = Monster()
라 되어있으면 monster1이라는 이름의 몬스터 객체를 생성한 것이다.

이게 데이터분석 할 때 머신러닝모델을 불러오는거임

붕어빵기계 = 클래스
붕어빵 = 인스턴스(객체)

2) 예외처리 - try ~ except
데이터를 가공할 때 특정 요소를 빼는 것
가공 전 데이터는 일관되지 않는 경우 많음. 그러다 보면 일괄로 처리하기 어려운 경우 생김.
데이터 가공하는 과정에서 특정 데이터에서만 에러가 발생하는 경우 많이 때문에
그럴 때는 try ~ except문을 이용해 에러가 발생하는 데이터는 다른 방식으로 처리하라 명령할 필요 있음.

예를 들어 아래와 같은 변수 a, b가 있다 가정해보자.
a = 10
b = 0

a를 b로 나누려 한다면 0으로는 수를 나눌 수 없기 때문에 ZeroDivision에서 발생
print(a/b)

그럴 때는
try:
print(a/b)
except:
print('0으로는 나눌 수 없어요!')

일단 함수를 try시켜주고 에러가 나는 건 except코드를 실행시켜줌
--> 에러 났을 때 에러메시지 대신'0으로는 나눌 수 없어요!'를 출력

9강
패키지 - Pandas, dataframe

패키지란? 누군가 이미 만들어논 함수, 클래스 덩어리. import명령어로 사용

pandas는 파이썬 데이터분석을 위한 필수 패키지.
그중 표(테이블)형태로 된 데이터프레임은 주로 데이터를 읽어서 저장하고, 연산을 위해 많이 사용되니 매우 중요.

판다스 불러오기
import pandas as pd

대체로 pd를 약자로 쓰기 때문에 되도록 이렇게 쓰자.
pd.함수이름

import pandas as pd

items = {'code' : [101, 102, 103, 104, 105, 106, 107, 108],
'과목': ['수학', '영어', '국어', '체육', '미술', '사회', '도덕', '과학'],
'수강생':[15, 15, 10, 50, 20, 50, 70, 10],
'선생님': ['김민수','김현정','강수정', '이나리', '도민성', '강수진', '김진성', '오상배']}
df = pd.DataFrame(items)
df

items2 = {'code' : [109, 110],
'과목': ['컴퓨터', '한자'],
'수강생': [10, 12],
'선생님': ['이철민', '김영우']}
df2 = pd.DataFrame(items2)
df2

*** DataFrame 대소문자에 주의

합치는 건 concat
total_df = pd.concat([df, df2])
total_df

이렇게 하면 df와 df2가 합쳐서 나옴

**데이터프레임을 저장해두고 다시 사용할 때는 파일로 저장해 해야함.
그럴 때는

total_df.to_csv('data.csv')
#이렇게 하면 각 테이블 행의 숫자가 표기되고 unnamed가 보임
#이럴 때는 total_df.to_csv('data.csv', index=False)로 정해줌. 각 테이블의 숫자가 index라서 그걸 없애는것임
이러면 data.csv라는 파일을 저장 가능

불러올 때는?

new_df = pd.read_table('data.csv', sep=',')
#sep은 seperator : 어떤 것 (,)을 기준으로 열을 나누겠다는 뜻.

10강
웹 이해하기
크롤링 : 웹사이트에서 데이터를 추출하는 행위

웹페이지 = 텍스트 덩어리(html)를 브라우저를 사용해 보여줌.

<>들의 조합은 태그
ex)

태그, 태그

2) 선택자(selector)
직접 이름 짓는 것. 크롤링 할 때 어디서 긁어오는지 정해주는 것.
--> 웹페이지 구성요소의 주소
ex) id='clothes', class='name', title=라운드티 등

여기서 라운드티 관련 크롤링을 할 경우 소스를 보고 title을 크롤링하면 됨.

11강
웹스크래핑 패키지 이해하기
크롤링을 하기 위해서는 패키지를 받아야 함.

!pip. install 패키지이름
으로 설치

그 다음 from 패키지 이름 import 모듈
으로 패키지 사용

여기서는 BeautifulSoup4를 사용할 것임

크롤링 할 때는 어떤 문서에서 어떤 데이터를 가져올 건지 bs4한테 알려주는 코드를 입력해야함
soup = BeautifulSoup(html, 'html.parser')
#그게 이거

여기서 html은 분석할 문서의 이름.
html.parser는 어떤 분석기로 분석할 것인지 정해주는 것.
이걸 soup이라는 그릇에 담음

  • soup.select('태그명') : 태그를 입력으로 사용할 경우
  • soup.select('.클래스명') : 클래스를 입력으로 사용할 경우
  • soup.select('#아이디') : ID를 입력으로 사용할 경우
  • soup.select('상위태그명 하위태그명') : 자손 관계 (어떤 태그 내부에 있는 모든 태그를 자손이라고 함)
  • soup.select('상위태그명 > 하위태그명') : 자식 관계 (어떤 태그 내부에 있는 태그 중 바로 한 단계 아래에 있는 태그를 자식이라고 함)

**제대로 가져오고 있는지 프린트해보면서 진행할 것
print(soup.select('a'))
print(soup.select('.price'))
print(soup.select('#watch'))
print(soup.select('#clothes .price'))

soup.a를 쓰면 a태그 중 가장 첫번째 것만 가져옴

2) Newspaper3k 실습
Newspaper3k로는 인터넷 뉴스 기사의 url을 전달해주면 여기서 기사의 제목과 텍스트를 추출

newspaper라는 패키지로부터 Article이라는 모듈을 임포트

from newspaper import Article

파싱할 뉴스 기사 주소

url = 'https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=101&oid=030&aid=0002881076'

언어가 한국어이므로 language='ko'로 설정

article = Article(url, language='ko')

뉴스 제목과 본문을 찾아내는 분석!

article.download()
article.parse()

12강
네이버뉴스 구조 파악하기
url = uniform resource locator
웹페이지에 접근하는 주소

어떤 url의 경우 웹페이지에서 특정 정보를 보여달라고 url자체에 명시하는 경우 있음.
네이버 뉴스가 그런 형태의 url을 갖고 있음

그래서 웹사이트에서 특정 정보를 크롤링하려면 url부터 분석해야함.

네이버 메인 > 뉴스 > 속보에 위치한 페이지를 크롤링할 것.
카테고리 자체는 속보지만 과거 일자에 접근할 수 있기 때문에 특정 과거 일자의 뉴스를 받아올 수 있음.
https://news.naver.com/main/list.nhn?mode=LSD&mid=sec&sid1=105&date=20200430&page=2
여기서 &sid1=105 뉴스가 속한 카테고리의 번호
20200430은 날짜,
맨 마지막의 2는 뉴스기사들이 나열되어있는 페이지 번호

크롬으로 url 접속해서 f12누르면 소스를 볼 수 있음.
여기서 왼쪽 페이지의 영역을 찾으면서 url을 찾은 다음 크롤링할 정보를 알아둠
ex)여기서는 각 url의 상위태그인

을 크롤링할 것.

13강
네이버뉴스 가져오기

  1. 네이버뉴스 접속
  2. f12
  3. url찾기
profile

0개의 댓글