11주차 - 데이터 분석을 위한 파이썬

코린이·2022년 4월 7일
0

엘리스 AI 트랙

목록 보기
3/7

📚 python 문법 기초

for 반복문

  • 기본 구조
# 리스트의 원소들이 순서대로 변수에 대입
for 변수 in 리스트(or 튜플, 문자열): 
	수행할 문장
  • range 함수 사용
    range는 숫자 리스트를 자동으로 만들어 주는 함수이다.
# range 범위는 시작숫자 이상 , 끝 숫자 미만! 이다. 끝숫자 포함 x
for 변수 in range(시작숫자,끝숫자):
	수행할 문장

# range 범위는 0부터 숫자 미만까지이다.
for 변수 in range(숫자):
	수행할 문장

인덱싱

문자열이나 리스트의 객체마다 번호를 매겨 그 번호에 해당하는 값을 가리킬 때 인덱싱을 사용한다.
인덱스는 0부터 시작!
맨마지막 인덱스는 -1로 표현 가능.

>>> a = "life"
>>> a[0]
'l'
# 문자열의 요소값은 바꿀수 없는 값이 아니기 때문에 오류발생! 
>>> a[0] = "L"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment


>>> a = ['a','b','c']
>>> a[0]
'a'
>>> a[0] = "z"
>>> a
['z', 'b', 'c']

슬라이싱

한 문자, 한 요소만 뽑아내는 것이 아니라 일부를 잘라내 추출하는 방식을 슬라이싱 이라 한다.

  • 기본 구조
# start 이상 end 미만까지의 값을 가져온다.
# step은 생략할 경우 1이 된다.(생략가능)
객체 = [start:end:step]

>>> ex = "example"
>>> ex[0:3]
'exa'
>>> ex[1:3]
'xa'
>>> ex[3:]
'mple'
>>> ex[:3]
'exa'
>>> ex[:3:2]
'ea'

💡 인덱싱과 슬라이싱은 리스트나 튜플에서도 사용할 수 있다!

.startswith()

startswith()는 어떤 문자열이 특정문자로 시작하는지 확인하여 true or false로 반환하는 함수입니다.

  • 기본구조
# 시작문자 생략 가능, 기본값 0
str.startswith(특정문자,시작위치)

>>> a = "hello world"
>>> a.startswith("a")
False
>>> a.startswith("h")
True
>>> a.startswith("h",1)
False
>>> a.startswith("e",1)
True

.split()

문자열을 나눌 때 쓰는 함수이다.

# split()은 공백을 기준으로 문자열을 나눈다.
>>> intro  = "my name is jenny"
>>> intro.split()
['my', 'name', 'is', 'jenny']


# split(구분자)를 기준으로 문자열을 나눈다.
>>> animal = "dog,bear,cat"
>>> animal.split(',')
['dog', 'bear', 'cat']


# split()은 공백이 n개라도 1개로 처리 split(" ")은 공백 1개를 따로따로 처리
>>> a = "a         b c d"
>>> a.split()
['a', 'b', 'c', 'd']
>>> a.split(" ")
['a', '', '', '', '', '', '', '', '', 'b', 'c', 'd']


# split(구분자,분할횟수)
>>> a = "a,b,c,d,e,f,g,h"
>>> a.split(",",3)
['a', 'b', 'c', 'd,e,f,g,h']

.append()

.append()는 괄호 안의 값을 array 맨 뒤에 추가하는 함수이다.

>>> number = [1,2,3]
>>> number.append(4)
>>> number
[1, 2, 3, 4]
>>> number.append([4,5])
>>> number
[1, 2, 3, 4, [4, 5]]

대소문자 변환

.upper()는 문자열의 모든 소문자를 대분자로 변환하고 반환한다.
.lower()는 문자열의 모든 대문자를 소문자로 변환하고 반환한다.
위 두 함수 모두 변환된 문자열을 반환할 뿐 문자열 자체는 바뀌지 않는다.

>>> a = "HELLO world"
>>> a.upper()
'HELLO WORLD'
>>> a
'HELLO world'
>>> a.lower()
'hello world'

.replace()

.replace()는 문자열을 변경하는 함수로 특정문자를 새로운 문자로 변경하는 기능을 가지고 있다.
변환된 문자열을 반환할 뿐 문자열 자체는 바뀌지 않는다

>>> a = "hello world!"
>>> a.replace("world","everyone")
'hello everyone!'
>>> a
'hello world!'

>>> a = "????!!!!"
>>> a.replace("?","#")
'####!!!!'

# 문자열을 변경하는 횟수를 지정할 수 있다.
>>> a.replace("?","#",1)
'#???!!!!'
>>> a
'????!!!!'

파일 열기/닫기

파이썬에서는 파일을 사용한 후 close()를 사용하여 파일을 닫아줘야한다. 그렇지 않으면 문제 발생할 수도 있어요!

  1. open 사용, 파일 생성하기
    .read() : 파일 전체를 문자열로 돌려줌
# r : 읽기모드. w: 쓰기모드 a: 추가모드
f = open(파일이름, 모드)
data = f.read() # f.read()는 파일 전체를 문자열로 돌려준다.
f.close()
  1. with 사용
    with를 사용하면 close()가 필요 없음.
with open(파일이름, 모드) as f:
	data = f.read()
  1. 줄 단위로 읽기
data = []
with open(파일명) as f:
	for line in f:
    	data.append(line)

파이썬 데이터 구조

💡 데이터 구조란?

데이터를 효율적으로 나타내기 위한 특정 데이터 타입을 말함.
list(), tuple(), dict(),set() 등등

🔎리스트 []

  • 순서가 있는 원소들의 집합
  • 변경 가능
  • 추가 가능
  • 인덱스로 접근 가능
    list.append(value) : list 맨 뒤에 value 값 추가
    list.insert(index,value) : list[index]위치 value값을 넣는다. 원래 원소들은 뒤로 밀림.
    list.pop(x) : list의 x번째 값을 삭제하고 리턴, 기본값 마지막 값
    list.reverse() : list를 역순으로 변경
>>> list = [1,3,4,6,7,2]

>>> list.append(100) # 맨뒤에 추가
>>> list
[1, 3, 4, 6, 7, 2, 100]

>>> list.insert(2,5) # 지정된 위치에 추가
>>> list
[1, 3, 5, 4, 6, 7, 2, 100]

>>> list.pop() # 맨뒤 삭제
100
>>> list
[1, 3, 5, 4, 6, 7, 2]

>>> list.pop(1) # 지정된 위치값 삭제
3
>>> list
[1, 5, 4, 6, 7, 2]

>>> list.reverse() # 역순
>>> list
[2, 7, 6, 4, 5, 1]

🔎튜플 ()

  • 순서가 있는 원소들의 집합
  • 변경 불가능
  • 인덱스로 접근 가능
  • 튜플이 1개의 데이터만 가질때는 꼭 뒤에 콤마를 붙어줘야한다.
    tuple.count(value) : tuple 안에서 value의 개수를 구함
    tuple.index(i) : tuple의 i의 위치를 반환
    + : 서로 다른 튜플을 합칠 수 있다.
    * : 튜플을 반복할 수 있다.
    append() , del ,sort 불가능
>>> tuple = (1,) # 1개의 데이터만 가지는 튜플
>>> type(tuple)
<class 'tuple'>
>>> tuple = (1)
>>> type(tuple)
<class 'int'>

>>> tuple = (1,2,3,5,1,1) 
>>> tuple.count(1) # value 개수 구하기
3
>>> tuple.count(2)
1
>>> tuple.count(4)
0

>>> tuple = ("a","c","b")
>>> tuple.index("b") # value 위치 찾기
2

>>> tuple = (1,2,3) 
>>> tuple = tuple + (1,2) # 튜플 더하기
>>> tuple
(1, 2, 3, 1, 2)
>>> tuple + (1,)
(1, 2, 3, 1, 2, 1)
>>> tuple * 2 	# 반복
(1, 2, 3, 1, 2, 1, 2, 3, 1, 2)

튜플 ↔ 리스트

# 튜플 → 리스트 
>>> a = (1,2,3)
>>> list(a)
[1, 2, 3]

# 리스트 → 튜플 
>>> a = [1,2,3]
>>> tuple(a)
(1, 2, 3)

🔎딕셔너리

key : 중복 x
dict[키값] : 키값을 이용하여 value 값에 접근할 수 있다. 변경도 가능
del dict[키값] : 딕셔너리 항목 제거
키값 in dictionary : 딕셔너리 안에 key값이 존재하는지 확인할 수 있다.
인덱싱 사용 x

dict = { key: value }

# 딕셔너리 정의
>>> dict = {
... "name" : "jenny",
... "age" : 25,
... "school" : "school"
... }
# 딕셔너리 값 접근하기
>>> dict["name"]
'jenny'

# 딕셔너리 변경
>>> dict["age"]=22
>>> dict
{'name': 'jenny', 'age': 22, 'school': 'school'}

# 딕셔너리 항목 제거
>>> del dict["school"]
>>> dict
{'name': 'jenny', 'age': 22}

# 키값 존재 유무 확인
>>> "name" in dict
True

JSON VS 딕셔너리

json

  • 인터넷에서 자료를 주고 받을 때 그자료를 표현하는 방법
  • 웹 환경에서 데이터를 주고 받는 가장 표준적인 방식
  • "키-값 쌍"으로 이루어진 데이터 오브젝트
  • 데이터가 쉽게 오염 X
  • 다른 포맷에 비해 용량이 조금 큰 편
  • 키를 이용하여 원하는 데이터만 빠르게 추출 가능

loads() : JSON 형태의 문자열을 딕셔너리로 변환.
dumps() : 딕셔너리를 JSON 형태의 문자열로 변환합니다.

🔎집합

-중복 X -> 중복을 제거하기 위한 필터 역할로 종종 사용
-순서 X
-인덱싱 지원 x , 인덱싱 사용하려면 리스트나 튜플로 변환 후 사용

# 집합 자료형은 set키워드를 사용해 만들 수 있다.
# set() 괄호안에 리스트나 문자열을 입력하여 만들 수 있다.
>>> s1 = set([1,2,3,4,5])
>>> s1
{1, 2, 3, 4, 5}
>>> s2 = set("hello")
>>> s2
{'o', 'e', 'h', 'l'}

# 빈 집합 자료형
>>> s = set()
>>> s
set()

▸교집합, 합집합, 차집합

>>> s1 = set([1,2,3,4,5])
>>> s2 = set([3,4,5,6,7])

# 교집합 &, intersection
>>> s1 & s2
{3, 4, 5}
>>> s1.intersection(s2)
{3, 4, 5}
>>> s2.intersection(s1)
{3, 4, 5}

# 합집합 | , union
>>> s1|s2
{1, 2, 3, 4, 5, 6, 7}
>>> s1.union(s2)
{1, 2, 3, 4, 5, 6, 7}

# 차집합 - , difference
>>> s1-s2
{1, 2}
>>> s2-s1
{6, 7}
>>> s1.difference(s2)
{1, 2}
>>> s2.difference(s1)
{6, 7}

▸집합 자료형 관련 함수들

add : 값 1개 추가
update: 값 여러개 추가
remove : 값 제거

>>> s1 = set([1,2,3])
>>> s1.add(4)
>>> s1
{1, 2, 3, 4}
>>> s1.update([5,6])
>>> s1
{1, 2, 3, 4, 5, 6}
>>> s1.remove(2)
>>> s1
{1, 3, 4, 5, 6}

정렬 sort vs sorted

차이점 1. sort()로 문자열 정렬 불가능

# sorted()
>>> a = "apple"
>>> a = sorted(a)
>>> a
['a', 'e', 'l', 'p', 'p']

# sort() , 오류 발생
>>> a = "apple"
>>> a.sort()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'sort'

차이점 2. sorted()는 정렬 결과를 리턴할 뿐 그 자체는 바뀌지 않는다. 변수 필요

# sort() 변수 필요 x, 리스트 자체가 바뀜
>>> a = [1,3,5,2,7]
>>> a.sort()
>>> a
[1, 2, 3, 5, 7]
# sort()는 변수에 담을 수 없음
>>> result = a.sort()
>>> result
>>> print(result)
None

# sorted() 변수 필요 o , 리스트 자체가 바뀌지 않음
>>> b = [1,3,5,2,7]
>>> sorted(b)
[1, 2, 3, 5, 7]
>>> b
[1, 3, 5, 2, 7]
>>> c = sorted(b)
>>> c
[1, 2, 3, 5, 7]

차이점 3. sort, sorted의 key옵션
reverse : True이면 내림차순, False이면 오름차순으로 정렬
key : 정렬할 기준을 정할 수 있다.
lambda : 익명 함수를 지칭하는 용어로 , 바로 정의하여 사용할 수 있는 함수
ex) key = lambda x : x[1]

>>> student = [["jenny",25],["mina",20],["jimin",30]]
>>> result = sorted(student, key = lambda x : x[1] )
>>> print(result)
[['mina', 20], ['jenny', 25], ['jimin', 30]]

📚고급 파이썬

lambda

lambda 매개변수 : 표현식
lambda 함수란?
이름없는 함수로 일시적인 함수이다. 함수가 생성된 곳에서만 즉시 사용하고 버릴 수 있다.
return문이 표함되어 있지 x

>>> test = lambda x : x+2
>>> print(test(2))
4

>>> test = lambda x,y : x+y
>>> print(test(2,3))
5

assert()

assert 조건, "오류메시지"
조건이 true일 경우 그대로 코드 진행, false인 경우 AssertError 발생
오류메시지는 생략 가능하다.


>>> a = 10
>>> assert a == 100, "a는 100이 아닙니다."
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError: a는 100이 아닙니다.

map()

map(함수, 리스트나 튜플 등)
map()은 함수를 객체의 모든 요소에 대해 적용한후 변경된 객체를 반환한다.
map함수의 반환값은 map타입이라서 list혹은 tuple형으로 변환시켜줘야 한다.

>>> def plus(n):
...     return n+10

>>> list(map(plus,[1,2,3]))
[11, 12, 13]

>>> a = [1.1,4.1,2.3,4.2]
>>> a = list(map(int,a))
>>> print(a)
[1, 4, 2, 4]

>>> a = [1,2,3,4]
>>> a = list(map(lambda x : x*10, a))
>>> a
[10, 20, 30, 40]

filter()

filter(함수(조건),리스트나 튜플 등)
filter()는 리스트나 튜플의 각각의 요소를 함수로 필터링하는 함수이다.
filter함수의 반환값은 filter 타입을 가져 list혹은 tuple형으로 변환시켜줘야 한다.
true면 반환하고 false이면 그 요소는 제거

>>> def test(n):
...     return n % 2 == 0
...
>>> numbers = [1,2,3,4,5,6,7]

>>> result = list(filter(test,numbers))
>>> print(result)
[2, 4, 6]

>>> result2 = list(filter(lambda x : x%2==0, numbers))
>>> print(result2)
[2, 4, 6]

📚CSV

💡csv란?

csv 파일은 각 라인의 컬럼들이 콤마로 분리된 텍스트 파일 포맷이다.(다른 구분 문자도 사용 가능)
=> 각 열이 특정한 의미를 가진다.
=> 구분자가 ,이고 데이터에 ,가 포함된 경우 큰 따옴표를 이용하여 데이터를 감싼다
csv 파일을 읽기 위해서는 파이썬에 내장된 csv 모듈을 import 한다.

장점 : 같은 데이터를 저장하는데 용량을 적게 소모 , 이해하기 쉽고 직관적인 데이터
단점 : 데이터 오염에 취약함 데이터에 쉼표가 들어갈 경우 지옥.
delimiter 를 기준으로 분리

import csv
 
f = open('data.csv', 'r', encoding='utf-8')
rdr = csv.reader(file, delimiter=',')
for line in rdr:
    print(line)
f.close()  
profile
초보 개발자

0개의 댓글