(참고자료 링크들, 점프투파이썬, 코딩도장, list와 tuple과 set과 dict의 차이점, 인덱싱 슬라이싱, PEP8, 파이썬 스타일 가이드, pandas cheat sheet, numpy, 접착제 언어, 추상성, 앤스컴콰르텟)
220919(월)~220921(수) 멋쟁이 사자처럼 AI스쿨 7기, 박조은 강사님 강의
220919
데이터 사이언스 개요
- ETL과 ELT : 추출-변환-저장/ 추출-저장-변환(더 유연)
- 참고자료
- 공공데이터포털 https://www.data.go.kr/
- ncsoft 깃헙 https://danbi-ncsoft.github.io/OpenData/ : 게임 도메인 관련 알찬 정보들이 가득하다고 생각함.
- 무료 강의 : 텐서플로우, 파이토치, https://www.edwith.org/deeplearningchoi 는 CNN 할 때 한 번 더 알려줌. 최성준 교수님 강좌
- 책 : 'AI 시대, 문과생은 이렇게 일합니다.' 읽어보고 싶음.
- 머신러닝 야학-> EBS -> 심사평가원 순으로 공부 추천. https://www.hira.or.kr/ebooksc/ebook_659/ebook_659_202109300534201190.pdf
파이썬 기초
- https://www.python.org/
- 점프투파이썬 https://wikidocs.net/book/1
- 파이썬 코딩도장 https://dojang.io/course/view.php?id=7
- list, tuple, set, dict 차이점 : 인덱싱, 슬리이싱, 변경여부, 중복허용
- 가장 마지막 줄만 출력, 중간 값들 출력하고 싶을 때는 print 구문 활용
- 숫자로 시작할 수 없음. 1a(x), a1(0)
- 예약어는 변수명으로 사용하지 않음. ex) len("1")
- 한글변수: 띄어쓰기는 하면 안됨.
- f-string(format-string)
- 문자열 인덱싱 : address[0], address[-1]
- 문자열 슬라이싱: address[:7] 앞 7글자 , address[-10:] 뒤10글자, address[::2] 0, 2, 4, 6 ,,,,, 변수들 출력
- 문자열 함수: upper, lower, strip(공백제거), address. , dir(address)
- 리스트 인덱싱, 슬라이싱, 리스트 함수: append, remove, repr()
- 딕셔너리
퀴즈
맞은 것
- 12번 문제
mix = [10, 20, ["a", "b", ["철수", "영희"]]]
print(mix[2][2])스터디에서 나왔던 것! 오예!
맞았지만 애매한 것
- 4번 문제
alt+enter는 현재 셀 실행 후 새로운 셀 생성한 다음, 다음 셀로 넘어감. - 11번 문제
num = [1, 2, 3, 4, 5]
print(num[1:4])
-> [2, 3, 4]이제 이해했다!
틀린 것
- 8번 문제
song = "동해물과 백두산이 마르고 닳도록"
백두산만 슬라이싱 -> print(song[5:8])왜 틀린거야ㅜㅜ - 9번 문제
gan = ["갑", "을", "병", "정"]
print(gan[1]) = 을숫자 똑바로 세자!! - 13번 문제
튜플 성질이 아닌 것: 튜플 요소는 리스트처럼 지울 수 있다(x) / 합연산, 곱연산 가능 / 소괄호 () - 14번 문제
딕셔너리 성질이 아닌 것 : 키만 호출 가능, value만 호출 가능, 합연산 곱연산 불가능 - 15번 문제
info = {"name":"김철수", "phone":"010-1234-5678", "age":25}
print(info.keys())
(["name","phone","age"]) 아님!! dict_keys(["name", "phone", "age"]) - 18번 문제
논리연산자 아닌 것 : and, or, not은 맞고 if는 조건문
220920
파이썬 기초 2
파이썬 스타일 가이드
https://peps.python.org/pep-0008/
- convention 체크
- 최대 라인 길이 : 모든 줄을 최대 79자 제한
- 연산자 앞에서 줄바꿈
- 핵심 배포판의 코드는 UTF-8, 인코딩 선언x(python3 전에는 인코딩 선언했어야 했음)
- import 는 , 말로 별도의 줄에 ex)import sys, os (x)
- 연산자 앞 뒤로는 공백 한 개씩 권장, *연산은 붙어서
- pep8 을 강제로 실행해서 고쳐주는 기능이 있음 : Pylint https://exmemory.tistory.com/72조건문 - if문
- : 이 있는 다음 줄은 반드시 들여쓰기가 된 문장이 있어야 함
- if, elif에 조건문 설정. x=0(할당)이 아니고 x==0(비교)반복문 - for문, while문
- 문자에 ""이 없다면 변수, 있다면 문자열. ex) for 요일 in "월화수목금토일":
- 리스트 형태로 변경하는 것과 반복문으로 출력하는 코드 헷갈리니 다시 보기range() 함수
- 최종치 앞에서 끝나는 것 생각
- for i in range(1, 11, 2) : #두 개씩 건너뛰어 홀수만 출력
- 웹스크래핑 : 10쪽~1쪽까지 url 반복문 출력
for page_no in range(10, 0, -1): print(f"https://naver.com/?page={page_no}")
- f-string/ .format : .format 부분 1주차 수업 찾아보기
- 조건문과 반복문 함께 사용하기(예시 실습) : 짝수 홀수 합, 스터디 예시 다시 연습할 것!!함수
- 매개변수(parameter), 전달인자(argument)
- num.split("-") 하면 리스트 형식으로 반환
- def find_month 다시 보기.... [:2], [:-1], [-1:] 차이 알 것.
- """은 docstring
- 꼭 외우기! find_month? Docstring / find_month?? 소스코드응용
- age_code 이해안됨…
- phone_dict 할 때 range(len())=enumerate()
Pandas
https://pandas.pydata.org/Pandas_Cheat_Sheet.pdf
- DataFrame 행렬, 2차원, [[1,2,3],[4,5,6]] / Series 벡터, 1차원, [1,2,3]
- DataFrame에서 행이나 열을 떼어오면 Series
- pandas cheat sheet 두 장이면 이해할 수 있다. 링크가져오기
- panel data system
- 행: column / 열: axis
- as는 alias의 약자, import numpy as np 넘파이를 np로 줄여서 부르겠다.
- type(df) / type(df[“가격”])
- .tolist() 컬럼을 리스트 형태로 변경
- nan == not a number 가격에 np.nan 들어가면 float, “3500”들어가면 object 등으로 하나라도 섞여 있으면 바뀜.
- df.info() 정보/ df.shape #method가 아니라 attribute로 구현되어 있어서 () 없다. (행,열) 크기 출력 / df.types 데이터 타입(object, float,,,,) /
- df.describe() 수치데이터 기술통계값 : IQR = 3사분위-1사분위수/ 3사분위 == 75%, 1사분위 == 25%, 50%는 중간값
- 빈도수, 평균, std=표준편차, 최소값, 사분위수, 최댓값
- na: not applicable, not available
- df.describe(include=”object”) : 일반 빈도수, 고유값, 최빈값, 최빈값의 빈도수
Numpy
파이썬에서 사용할 수 있는 공학용 계산기
- 파이썬의 별명: 접착제 언어
- 추상성이 있다. = 간단하게 만들어뒀다. (파이썬으로 감싸둠)
- 다른 언어와의 연결을 통해 직간접적으로 성능 향상을 시킬 수 있기 때문에 속도가 빠르다. 넘파이는 c언어 사용, 벡터 연산 사용
- numpy의 브로드캐스팅 기능. 값 3500 다 가져와서 출력
퀴즈
20/20 다 맞았다!
맞았지만 애매한 것
- 3번 문제 : 1 + "2" 문자랑 숫자는 더할 수 없음.
- 15번 문제 : print(set(queen.split())) 하면 [“We”, “will”, “rock”, “you”] 로 나옴 set이 뭐였지
220921
복습
코드의 성분 비교 (time it을 통한 프로파일링)
%timeit df[“가격”].todolist()
%timeit list(df[“가격”])
Pandas 기초 #2
- method chaining
- 범주형 데이터의 기술 통계 값: df.describe(include=”object”) / top 최빈값 / freq 최빈값의 빈도수
- 2개 이상의 컬럼명 가져오기
- df[[“약품명”, ”가격”]] 📌대괄호 2번!
- 행을 기준으로 데이터 가져오기
- df.loc[] : loc는 locate 위치 번호
- df.index / df.set_index(“약품명”) / df.set_index(“약품명”).index
- df.set_index(“약품명”).loc[“소화제”] = df.set_index(“약품명”).iloc[0]
인덱스랑 파이썬에서 리스트 인덱싱, loc와 iloc 엄청 헤깔린다. Iloc[0]은 되고 loc[0]은 출력이 안되고… 복습!
- df = df.reset_index() / del df[“level_0”] -> del df[“index”] / df.drop([“level_0”, “index”], axis=1) ->df
- 행과 열을 함께 가져오기
- df.loc[0, "약품명"]
- df.loc[[0,1,2], "약품명"]
- df.loc[[0,1,2], ["약품명", "가격"]]
- df.iloc[0:2, [0,1]]
- boolean indexing 불리언 인덱싱
- 특정약품만 가져오기(str. 같은 accessor)
- df[df["약품명"].str.contains("vita")]
- df["약품명"].str.upper() / df["약품명"].str.lower()
- df(df["약품명_소문자"].str.contains("vita|비타")]
- 📌| (파이프, shift+백슬래쉬)는 or/ &는 and를 의미.
- 특정 가격 가져오기 : df[df["가격"]>3200]
- 정렬하기
- df.sort_values ?
- ascending: bool = True : 순차정렬이 기본값
- df.sort_values(by = ["가격","약품명"], ascending=[False, True])
- 파일로 저장하기
- df.to_csv("drug.csv", index=False, encoding="cp949"): unnamed:라는 값 제거 위해 index=False
- pd.read_csv("drug.csv")
- pd.read_csv("drug.csv", encoding="cp949")
- 한글, 윈도우, 엑셀에서 사용하는 인코딩 : CP949
- euc-kr과 cp949차이: 합격통지-김설?(믜) 11,172자 지원
앤스컴 콰르텟
seaborn
- 데이터 시각화 라이브러리. Matplotlib 기반
- high-level interface : 기술이 잘 감추어져 있어 사용이 쉽다.
- 데이터 로드: df.head() / df.iloc[:5] / df.tail() /df.iloc[-5:] / df.iloc[:2, -2:]
- random_state : 랜덤의 seed값. 고정시키는 역할. 값이 클수록? 작을수록? 상관없다. / 📌 더글라스 애덤스의 ‘은하수를 여행하는 히치하이커를 위한 안내서’에서 컴퓨터한테 묻는 인생의 본질에 대한 정답이 42. / frac=0.05 1(100%, 전체 데이터)에서 0.05(5%)만 추출하겠다.
- bool indexing
- df_1.corr() 상관계수. -1<correlation<1
- Series의 빈도수: df["dataset"].value_counts(), df["dataset"].value_counts(normalize=True)
- Groupby를 통한 dataset 별 기술통계 : desc = df.groupby("dataset").describe()
- 상관계수 : df.groupby("dataset").corr()
seaborn 시각화
- countplot : sns.countplot(data=df, x="dataset")
- barplot : sns.barplot(data=df, x="dataset", y="x")
- 검은 막대기 : 신뢰구간 ci=95 confidence interval
- 범주형 값 기준
- boxplot : sns.boxplot(data=df, x="dataset", y="y")
https://www.hira.or.kr/ebooksc/ebook_659/ebook_659_202109300534201190.pdf
ㄴ9쪽 기술통계 부분 - violinplot
- 도수분포를 시간화한 것이 histogram
- df.hist(bins=10)
- sns.violinplot(data=df, x=”dataset”, y=”y”)
- displot을 마주보고 그린게 바이올린플롯
- displot : 히스토그램의 막대를 추정해서 그림
- sns.displot(data=df, x="y", hue="dataset", kde=True, col="dataset")
- 커널 밀도 추정(kernal density estimation) 그래프로, 히스토그램이 절대량(count)을 표현한다면 kdeplotdms 상대량(비율)을 시각화. 히스토그램과 마찬가지로 한개 혹은 두개의 변수에 대한 분포를 그릴 수 있음
- Hue는 그룹화해서 어떤 분포인지 보기 위해 다른 컬러로 그리겠다.
- relplot(relational) / displot(distributions) / catplot(categorical)
- scatterplot : 두 변수간의 상관을 보기 위해.
- regplot : hue 지원 안하는 그래프 -> 그래서 lmplot으로 색을 나타냄
- lmplot :
- sns.lmplot(data=df, x="x", y="y", hue="dataset", col="dataset", col_wrap=2)
- col_wrap은 화면상에 =2 2개 자료씩 보여줌
- 상관계수 49쪽
- 히스토그램과 박스플롯을 비교하면, 박스플롯은 사분위 값이 바뀌지 않으면 눈으로 보여지지 않는다.
- seaborn에서는 pie chart는 제공하지 않는다. pandas 에서는 df[“dataset”].value_counts().plot(kind=”pie”) 로 하면 불러올 수 있음. seaborn에서는 다른 그래프로 대체할 수 있어서. Pie가 잘게 쪼개지면 값 차이를 시각적으로 보기가 어려워서.
퀴즈
? / 15
틀린 것
- 백분위수:데이터 백등분
사분위수는 데이터 4등분
2사분위수는 50%
3사분위수는 하위25%(x) 하위75%
1사분위수는 상위25%(x) 하위25% - 표준편차의 정의로 바르지 않은 것
자료의 산포도를 나타내는 수치로 분산의 양의 제곱근으로 정의된다.
표준편차가 클수 평균값에서 변량들의 거리가 가깝다(x) 멀다(0)
통계학과 확률에서 주로 확률의 분포, 확률변수 혹은 측정된 인구나 중복집합을 나타낸다.
일반적으로 모집단과 표준편차는 시그마로 표본의 표준편차는 s로 나타낸다. - 관측값에서 평균 또는 중앙값을 뺀 것은 무엇일까요?
분산, 편차, 이상치, 특잇값 -> 편차
편차 제곱= 분산. 분산에 루트=표준편차 - 다음 도수분포표에 대한 설명으로 바르지 않은 것.
양적 데이터에만 사용할 수 있다(x) 질적 데이터에도 사용할수 있다(0)
양적 데이터를 질적 데이터로 변환할 때 쓰인다.
도수 분포에 사용할 수 있는 그래프 중에는 히스토그램, 선 그래프, 막대그래프, 원 그래프 등이 있다.
나이의 구간을 정해 연령대로 나누어 정리해서 도수 분포로 만들 수도 있다. - 히스토그램에 대한 설명으로 바르지 않은 것을 골라주세요.
히스토그램에서는 가로축이 계급, 세로축이 도수를 뜻하는데 때때로 반대로 그리기도 한다.
계급은 변수의 구간이고 서로 겹칠 수 있다.(x) 겹칠 수 없다.(0)
표로 되어 있는 도수 분포를 그래프로 나타낸 것이다.
막대 그래프는 계급 즉 가로를 생가하지 않고 세로의 높이로만 나타내지만 히스토그램은 가로와 세로를 함꼐 생각해야 한다. - 막대 그래프에 대한 설명으로 바르지 않은 것
X,y축 모두 수치형 데이터일 때 적합하다(x) 한쪽은 범주형, 한쪽은 수치데이터 - 상관관계에 대한 설명 중 바르지 않은 것
피어슨 상관계수는 두 변수의 공분산을 표준 편차의 곱으로 나눈 값이다.
+1은 완벽한 양의 선형 상관관계를 의미
0은 선형 상관 관계가 없음을 의미한다
-1은 완벽한 음의 선형 상관 관계를 의미한다.
상관 관계는 인과 관계를 의미한다. (x) 인과관계를 의미하지 않는다.(0)
댓글