본문 바로가기
CS/DataAnalysis

Bigdata analytics

by zieunee 2019. 2. 19.
반응형

Bigdata analytics

Why Python ?

  • 간결하고 쉽다.

  • 데이터 분석과 머신러닝을 위한 수많은 라이브러리들이 있습니다.

  • 다양한 확장이 용이하다 (R, SPSS etc...)

Anaconda

내 계정 컴퓨터에 파일을 만들면 크롬에서 주피터로 연결되는 http://localhost:8888/tree/test_python 곳에서 내 파일이 생긴다.

C:\Users\owner\test_python

주피터 단축키

a = 3 #shift +e Enter 누르면 메모리가 올라감
print(a)

esc 커멘드 모드

esc 한 후에 ctrl c v 하면 복붙 가능

위에 셀 추가 아래 셀 추가

esc+ a 위에 줄 추가

esc+ b 아래 줄 추가

esc+ d 삭제

esc m 파이썬 명령어 넣더라도 실행안됨 / 마크다운처럼 쓸 수 있다.

--> Cell CellType code 로하면 코드라인으로 바뀐다.

tab키 자동완성

Shift +tab: 받아들이는 인자 뭔지 설명

help() 함수는 어떤 역할을 하는지 알려주는 함수이다.

import os
os.getcwd()

'C:\\Users\\owner\\test_python'

경로 어디인지 찾기!

esc ctrl s 저장


아나콘다 없으면 html로 꺼낸다.


Python 기본 문법

print("My name is {}".format("Groot"))

My name is 뒤에 Groot가 넣어진다.


print("My name is {} and I'm {} years old".format('Groot',99))

-> My name is Groot and I'm 99 years old


print("My name is {1} and I'm {0} years old".format('Groot',99))

->My name is 99 and I'm Groot years old


그외 Python Basic 참조


Python은

index 방식(대부분) : str, list , numpy,

key 방식 : dic, pandas.DataFrame


index

temp = "Python"
temp[0]
# 'P'
   
temp[0:4]
#'Pyth'   --> 0이상 4이하 뒷부분 4는 언제가 제외된다.

temp[-1]
#'n' --> 맨 뒤에서 부터 접근

temp[ : ]
#'Python' --> 다나옴


참거짓

t = True
f = False
#대문자임

print(t && f) #바꿔쓸 수 있다
print(t and f)


함수

def just_print():
   print("Yes, I'm groot")
   #들여쓰기 맞춰줘야한다.

def add_nums(num1,num2):
   print(num1+num2)
   
add_nums(2,3) # 5
   
def add_nums(num1,num2=10):
   print(num1+num2)
add_nums(2) # 12 -> 위에서 num2를 미리 초기화 해준다면?

#print 와 return의 차이
def add_nums(x, y):
   return x+y

a = add_nums(3, 4)

a # 7

여러개 줄이 들여쓰기가 안되어 있다면? 한줄한줄 고칠 수 없다

---> 단축키 shift tab



컨테이너 (다른 변수들을 담을 수 있는 자료형)

list, dict, tuple, set

리스트 (list) _ index
x = list(,,,) #이런 식으로 쓰기도 한다. 
x = [3, 1, 2, 4, 6] # 리스트의 생성(대괄호)
x
#[3, 1, 2, 4, 6]

x[0:3] # [3, 1, 2] 를 출력하려면?
x[1: ] # 1부터 끝까지?

x.append("어머나") # 리스트 item 추가하기
x
x.pop() # 기본적으로 리스트의 마지막 요소를 삭제하고 반환 (pop(n) -> index 기반으로 n번째 아이템을 삭제할 수도 있음)

# 1) 데이터의 순서/자리를 활용하여 삭제할 때 : del == index를 활용 (추천)
del x[0] # 삭제의 영어 단어 앞 3글자?

# 2) 데이터 값 자체를 활용하여 삭제할 때 : remove() == value를 활용
# 3) 삭제 후 삭제한 값을 리턴받아 활용해야할 때 : pop() == index를 활용

# 리스트 합치기
y = [3, 4, 5]
z = x + y

# 리스트 정렬하기
z.sort()

# 리스트 역으로 정렬하기
z.sort(reverse=True)


딕셔너리_key
cage = {'Cat' : '야옹', 'Dog' : '멍멍'} # {key:value, key:value, ...} (중괄호)

cage['Cat'] # key 기반 호출
cage.get('Cat') # '얻다'
cage.get('Fish', '집나감') #'집나감'이 출력 / 없는키면 default value로 인식됨
print('Pig' in cage) # key 유무 체크 (있나없나?)
cage['Pig'] = '꿀꿀' # dict에 새로운 item 추가하기
del cage['Pig'] # 삭제의 영어 단어 앞 3글자?
cage.keys()
cage.values() # value들을 꺼내려면?

# list -> dict
temp = [['Cat', '야옹'], ['Dog', '멍멍'], ['Tiger', '어흥']]
cage = dict(temp)


튜플(tuple)

값과 크기가 변하지 않음

t = (5, 6)
type(t)
#자주 안쓴다

# 튜플이 사용되는 예시
def return_tuple(x, y):
   return x, y

what = return_tuple(3, 4)
what # (3, 4)


set

중복을 허용하지 않음

x = set( , , ) #주로 이런식으로 쓴다.
s = {1, 2, 3, 3, 4, 4, 5}  #잘 안씀


temp = [1, 2, 3, 3, 4, 4, 5]  
temp
# 리스트 temp 에서 중복을 제거하고, 다시 리스트로 만드려면?
what = list(set(temp))
what #[1, 2, 3, 4, 5]

중복 날리는 용도로 쓰이긴 한다.


if
# x 가 'Groot' 인지 체크하고, 맞을 경우 'I'm groot' 를 출력하기
if x == 'Groot':
   print("I'm groot")
   
if x != 'Groot':
   print("I'm groot") #I'm groot
   
   
if lunch_price > 10000:
   print("거참 창렬일세")
elif lunch_price < 3000: # else + if
   print("와우 혜자다 혜자")
else: # 나머지 조건 모두 받기
   print("얼른 벌어서 소고기 먹어야지")
 


for
nums = [1, 2, 3, 4, 5]

for number in nums:

range(5) # '범위'를 영어로? -> iterable이라고 부른다 0부터 5개꺼내줌(= 0부터 5미값 꺼내준다)
for index in range(5):
for item in cage.items(): # values + keys = items
     print(item[1])

# enumerate 배우기
for index, student in enumerate(class_1):
   print("얘 번호는 {}번이구요. 이름은 {}래요".format(index+1, student))
   
# for 문의 주된 활용 방식
empty_list = []
for student in class_1:
   empty_list.append(student) # 리스트에 item 추가하기
   

class = ['철수', '영희', '동수'] # 왜 에러가 발생할까요?class는 예약어 이다. class_1 = ['철수', '영희', '동수']은 가능하다.


while
temp = 1
while temp <= 10:
   print(temp)
   temp += 1 # temp 를 1 증가시켜주려면?
   
# 무한 루프, Pass, Interrupting kernel
while True:
   pass # *표시가 나면서 다른 셀들이 실행이 안된다, Kernel 에 interrupt해준다.



파일 읽고 쓰기


파일 쓰기
file = open('cage.txt', 'w', encoding='utf-8') # '열다'를 영어로? & w/r/a
cage = ['Cat', 'Dog', 'Tiger']
file.write(cage) # 에러 발생
# file.write(cage) 대신,
for animal in cage:
   file.write(animal)
file.close() #써줘야 파일이 나온다.

with open('cage2.txt', 'w', encoding='utf-8') as file: #별명을 file이라고 지어서 for문이 끝날때 까지 함께 있는다는 의미
   for animal in cage:
       file.write(animal)


파일 읽기
file = open('cage.txt', encoding='utf-8') # 읽기 모드
file = open('cage.txt','r', encoding='utf-8') # 읽기 모드
cage = file.readlines() # 여러줄 한번에 읽어서 리스트에 담기    


클래스

class Cage: # 클래스 X를
#   상속할 때에는 : class Cage(X):
#------------------------------------------  
   def print_something():
       print("This is something!")
       
cage_1 = Cage()
cage_1.print_something() #오류남
# 파이썬 내부적으로 Cage.print_something()가 호출된다.
Cage.print_something(cage_1) #로 해줘야한다. 내가 ~인데 ~거 실행시켜줘라
##오류남
# ====> 바꿔라
class Cage: # 클래스 X를
#   상속할 때에는 : class Cage(X):
   
   def print_something(self): #self로 해주면
       print("This is something!")
       
   cage_1.print_something()
   Cage.print_something(cage_1)
   
#------------------------------------------
class Cage:
   def __init__(self):
       print("생성자 함수 호출")
   def print_somthing(self):
        print("This is something!")
   # 클래스 선언 후 객체가 메소드를 호출할 때 메소드를 호출한 객체 자신이 첫번째 인자로 함께 전달된다.
   # ("self"는 다른 값으로 바꿔줘도 무방함)
   def print_something(self):
       print("This is something!")
 
cage_1 = Cage() ## 생성자 함수 호출
cage_1.print_something() # 메소드 호출, check_animals 메소드를 호출한 객체 cage_1 이 자동으로 self에 전달된다.
   ## This is something!
   
#------------------------------------------

class Cage:
   def __init__(self):
       defalut_cage = ['Dog','Cat']
   def print_somthing(self):
        print("This is something!")
   # 클래스 선언 후 객체가 메소드를 호출할 때 메소드를 호출한 객체 자신이 첫번째 인자로 함께 전달된다.
   # ("self"는 다른 값으로 바꿔줘도 무방함)
   def print_something(self):
       print("This is something!")

   cage_1 = Cage()
Cage.print_something(cage_1)
   ##This is something!

self 는 변수를 공유할 때

클래스의 모든인자는 첫번째에 self를 써야한다


Pass (why we need 'self')
age.check_animals(cage_1) # == cage1.check_animals() -> cage_1 객체를 check_animals()에게 인자로 던져주는 것 
#['Cat', 'Dog', 'Tiger']

Cage.check_animals(cage_2) # == cage2.check_animals()
#['Cat', 'Dog', 'Tiger', 'Pig']

# 사실 cage_1.check_animals()를 실행하면
# 백그라운드에서는 Cage.check_animals(chech_1) 이 실행되는 것
# 이 때 클래스 Cage 가 어떤 객체(instance)의 메소드를 호출해야하는지 모르기 때문에 객체를 인자로 전달해줘야 한다.


Python 기본 내장함수와 외장함수

len('Python') # 길이?
list('Python')
dir('Python') # (여기서는 string) 객체가 자체적으로 가지고 있는 변수나 함수
# "Python"은 'str'이라는 데이터타입(클래스)이 만들어낸 객체이며 'str' 데이터타입(클래스)에 정의된 모든 속성(객체변수)과 메소드를 상속 받음
round(1.7) # 반올림
bool(1) # 참/거짓 판별
sum([1, 2, 3]) # 합
max([1, 2, 3]) # 최대값
min([1, 2, 3]) # 최소값
list(range(0, 100, 10))

#######
def func(x):
   return x**2
func(5)
# 한줄로 함수를 쓰고 싶다면 ? java의 람다함수
# x(input) 를 받아 x**2(output) 를 return 해주는 람다 함수
func = lambda x:x**2
func(5)
# 함수의 input : 함수의 output (:를 기준으로)
#######

import random # 외장함수
x = random.random()

import os # 외장함수
os.getcwd() # get current working directory


라이브러리 활용하기 (Library == Package, Module(단일 .py)의 상위 개념 )

import numpy # import 라이브러리이름
a = numpy.array([1, 2, 3])
##array([1, 2, 3])

import numpy as np # import 라이브러리이름 as 별명
a = np.array([1, 2, 3])
##array([1, 2, 3]) -->제일 좋은 방식

from numpy import array, ndarray # from 라이브러리이름 import 함수이름
a = array([1, 2, 3])
## array([1, 2, 3]) --> 제일 권장되지 않는다.

conda intall .... //아나콘다 프롬포트 상에서

pip install ...//cmd에서

라이브러리 치기






반응형

'CS > DataAnalysis' 카테고리의 다른 글

데이터 분석  (0) 2021.04.11
데이터 분석_설치환경구축, 라이브러리  (0) 2021.03.28
정형 데이터의 전처리 / 탐색 /시각화  (0) 2019.02.19