핵심만 빠르게, 입문자를 위한 파이썬(Python)과 판다스(Pandas) 1
1. 기본 자료형(Data Type)과 변수(Variables)
- 기본 자료형(숫자, 문자, 참거짓)
- 숫자
- 정수(int)
- 실수(float)
- type 함수
- 사칙연산
- 더하기(+), 빼기(-), 곱하기(x), 나누기(/), 몫(//), 나머지(%)
- 문자(str)
- 작은 따옴표 또는 큰 따옴표로 처음과 끝을 표시하여 선언
print("안녕")
type("안녕")
- 문자의 인덱싱, 슬라이싱
- 주어진 문자에서 필요한 부분만 가져올 수 있음
- 대괄호 [시작:끝:단위]를 사용
"동해물과 백두산이 마르고 닳도록"[0:4:2]
- 참 & 거짓
- 불린(bool)
- True, False
True
- 불린(bool) 데이터는 주로 비교연산, 논리 연산의 결과로 추후 조건문, 반복문 등 프로그래밍을 할 때 자주 사용하게 됌
- 비교연산
- == : 같은가?
- ! = : 다른가?
-
= 크거나 같은가? (작거나 같은가?)
-
: 큰가?(작은가?)
10 >= 1
논리 연산
- and
- or
- not
True and True
not False
- 변수
- 데이터를 담는 공간
- 위에서 살펴본 자료형을 저장할 수 있음
- 선언방법
- 변수명 = 데이터
# 변수명 = 데이터
fruit1 = "사과"
fruit2 = "망고"
print(f"첫번째 과일은 {fruit1}, 두번째 과일은 {fruit2}") # 포맷팅
2. 컨테이너 자료형 (List, Dict)
- 컨테이너 자료형 (list, dict)
- 컨테이너 자료형은 컨테이너 박스처럼 많은 자료형을 담을 수 있는 공간
- list
- [자료1, 자료2]
- 선언(create)
names = ["jenny", "james", "john"]
names
- 인덱싱과 슬라이싱 (read)
- 문자 자료형과 마찬가지로 주어진 리스트에서 필요한 부분만 가져올 수 있음
- 대괄호 [시작:끝:단위]를 사용
names[1]
- 수정(update)
names[0] = "tom"
names
- 삭제(delete)
names.remove("jenny")
names
- dict
- {key : value, key : value}
- 선언(create)
users = {"aa123" : "123", "bb456" : "456", "cc678" : "678"}
users
- 조회(read)
- 인덱스가 없음. 이를 hash 형 자료라고도 하는데 훨씬 더 검색속도가 빠름
- 인스타 해시태그 할 때 그 해시와 같음
- {key} 값으로 조회
users["aa123"]
- 수정(update)
users["aa123"] = "qq123"
users
# 새로운 요소를 추가하는 방법도 같음
users["dd123"] = "test"
users
- 삭제(delete)
del users["aa123"]
users
3. 조건문
- 조건문
- 조건에 따라 다르게 실행해야하는 경우 사용
- 사용법
if 조건:
조건이 참일 때 실행할 코드
elif 조건:
조건이 참일 때 실행할 코드
else:
위 조건이 모두 거짓일 때 실행할 코드
isTrue = True
if isTrue:
print("isTrue는 True입니다.")
else:
print("isTrue는 False입니다.")
- 조건문의 조건에는 다양한 비교연산, 논리연산이 들어갈 수 있음
if (10 > 1) or (11 == 12):
print("참이면 실행")
- 기본 자료형에도 참, 거짓이 있음
- False로 간주되는 값
- None
- 0
- ‘’ 빈 문자열
- [] 빈 리스트
- {} 빈 딕셔너리
if not '':
print("참이면 실행")
4. 반복문
- 반복문
- 프로그래밍에서는 불필요한 반복을 줄이는 것이 핵심.
- 반복문은 그것을 해결해줄 방법!
- 파이썬 반복문의 종류
- while
- for
- 1 ~ 10까지 숫자를 print 해볼 것임
- 먼저 반복문을 사용하기 전..
print(1)
print(2)
print(3)
...
print(10)
- while 반복
- 사용법
초기값
while 반복조건:
반복할 코드
증감식
num = 1
while num <= 10:
print(num)
num += 1
- 증감조건이 없다면 → 무한 반복
- 필요에 따라 사용하되, while을 사용할 땐 언제 반복을 종료할지 잘 정의할 것.
while True:
print("무한반복")
- for 반복
- 사용법
for 반복변수 in 반복대상:
반복할 코드
# for를 사용할 때는 range 함수와 자주 사용합니다.
for i in range(1, 11):
print(i)
a = [i for i in range(1, 11)]
a
for item in a:
print(item)
for char in "hello":
print(char)
- 반복문 제어 (break, continue)
- break : 반복 종료
- continue : 건너 뛰기
- break 예시 : 5까지만 출력하고 반복을 종료
for i in range(1, 11):
if i > 5:
break
print(i)
- continue 예시 : 5는 건너뛰고 반복하자
for i in range(1, 11):
if i == 5:
continue
print(i)
5. 함수(Function)란?
- 함수
- 변수가 데이터를 담는 공간이였다면, 함수는 특정 기능을 하는 코드를 담는 공간입니다.
- 더하기 함수, 빼기 함수 등. 반복되고 자주 사용하는 기능을 묶어서 만들어 놓은 것이 바로 함수!
- 사용법
def 함수명(매개변수1, 매개변수2):
코드
return 반환 값
def myAdd(x, y):
answer = 10 * x + y
return answer
a = myAdd(1, 3)
a
- parameter(매개변수)
- 함수에 전달되는 값 (함수의 재료)
- 함수의 목적과 기능에 따라서 매개변수가 없을 수도 있고, n 개일 수도 있음
- 정의된 순서에 따라 값을 전달해야 함. 그게 아니라면 값을 명시하여 전달
b = myAdd(y = 5, x = 2)
b
- 기본값
- 매개변수 기본값 지정 가능
- 전달되지 않으면 기본값으로 사용
def myAdd(x, y = 3):
answer = 10 * x + y
return answer
c = myAdd(1)
c
- multiple return (복수 값 반환)
- tuple 반환을 하여 복수개의 값 리턴 가능
def addProd(x, y):
add = x + y
prod = x * y
return add, prod
d = addProd(3, 5)
d
add, prod = addProd(5, 6)
print(add, prod)
- 지역변수와 전역 변수
- 변수가 참조 가능한 코드상의 범위
- 함수 내의 변수는 함수 내에서만 유효함
- 함수 내에 선언한 변수는 지역변수(local variable)
- 상단에서 정의되어 프로그램 전역에서 사용가능한 변수는 전역변수(global variable)
k = "안녕"
def dummy():
# 지역, 전역 변수를 같은 이름으로 선언할 경우 지역변수의 우선순위가 더 높음
k = '잘가' # 주석을 사용해서 테스트!
print(k)
return
dummy()
print(k)
- global 키워드 ← 전역변수로 선언
k = "안녕"
def dummy():
global k
k = "잘가"
print(k)
retrun
dummy()
print(k)
6. 라이브러리의 개념, Pandas, Numpy 설치
- 라이브러리의 의미?
- 프로그래밍을 하면서 모든 기능을 하나 하나 직접 개발하는 것은 너무나 힘든 일이다. 우리가 밥을 먹기 위해서 농사부터 짓는게 아니라 마트가서 식료품을 사오듯, 프로그래밍에서는 라이브러리를 통해 다양한 기능을 쉽게 구현할 수 있다.
- Pandas, Numpy
- 판다스는 파이썬으로 데이터를 다룰 때 가장 많이 사용하는 라이브러리
- 쉽게 생각하면, 판다스 = 엑셀 파이썬 버전
- 넘파이는 파이썬으로 선형대수를 다룰 때 가장 많이 사용하는 라이브러리
7. 사실상 Pandas의 전부, DataFrame의 개념과 생성
- Series & DataFrame
- 판다스는 엑셀의 파이썬 버전이라고 비유해서 설명했습니다.
- 엑셀은 표(table) 형태로 데이터를 저장합니다.
- 이 표가 바로 판다스에서는 Dataframe 입니다. Dataframe은 Series를 여러개 붙여서 만들어집니다.
import pandas as pd
nums = [i for i in range(1, 11)]
nums
- Series 데이터를 생성하는 방법
seriesNums = pd.Series(nums)
seriesNums
- 애꿎은 list를 Series로 만들어서 뭐하냐?
- pandas의 다양한 기능을 사용할 수 있다.
seriesNums.mean()
seriesNums.describe()
- DataFrame을 생성하는 방법
nums = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
dfNums = pd.DataFrame(nums)
dfNums
- Series와 Dataframe의 관계
- 여러개의 시리즈를 합친게 바로 데이터프레임
type(dfNums)
dfNums[0]
type(dfNums[0])
- DataFrame을 생성하는 다른 방법
- 리스트 전달 (위에서 했던 방식)
users = [
["철수", 180, 5],
["민수", 170, 5],
["짱구", 130, 5]
]
users
dfUsers = pd.DataFrame(users)
dfUsers
- 컬럼을 설정해주자
dfUsers.columns = ["name", "height", "age"]
dfUsers
dfUsers = pd.DataFrame(users)
dfUsers
- 리스트 in 딕셔너리 전달
- 실제 현업에서는 api 요청의 결과로 이런 형식의 데이터 포맷으로 올 가능성이 크다!
users = [
{"name" : "철수", "height" : 180, "age" : 25},
{"name" : "민수", "height" : 170, "age" : 30},
{"name" : "짱구", "height" : 130, "age" : 5}
]
users
dfUsers = pd.DataFrame(users)
dfUsers
- Dataframe의 행, 열, 인덱스
sample = pd.read_csv('내국인 생활인구.csv', encoding = 'cp949') # 내용에 한글이 있을 경우
sample
- head, tail 함수
- 데이터가 너무 많으면, 오히려 보기 불편할 수도 있다.
- 데이터 생김새만 보고 싶으면 맨 위 또는 맨 아래 n개만 볼 수 있는 기능
sample.head(10)
sample.tail(10)
- index
- 인덱스는 책의 목차같은 개념
- 더 빠르게 검색하고, 데이터를 정렬할 때 사용되는 개념
sample.index
- 기본 인덱스는 의미가 없음. 여기서는 일자 컬럼을 인덱스로 지정해보자.
sample = pd.read_csv('내국인 생활인구.csv', encoding = 'cp949', index_col = 0) # 맨 첫번째 컬럼을 인덱스로 설정
sample.head()
sample.index
8. DataFrame의 조회 방법
- DataFrame 조회 (read)
- 컬럼명
- loc, iloc
- indexing과 활용
- 컬럼명을 사용해서 원하는 컬럼만 뽑아낼 수 있다.
- df[컬럼명]
sample = pd.read_csv('내국인 생활인구.csv', encoding = 'cp949')
sample
- 우선 컬럼명을 가공하자
# split 함수를 사용
"안녕(hello)".split("(")
newCols = []
cols = sample.columns
for col in cols:
newCols.append(col.split("(")[0])
newCols
sample.columns = newCols
sample.head()
sample = sample.set_index("일자")
sample.head()
- 1개의 컬럼 조회
sample["시간"]
- 2개의 컬럼을 동시에 조회하고 싶으면 리스트 형태로 전달
sample[["시간", "남자10~14세"]]
- loc, iloc 함수
- 두 함수를 사용하여 원하는 행 또는 열에 인덱싱, 슬라이싱이 가능하다.
- loc[행인덱스] → row 조회
- loc[행인덱스, 컬럼명] → row & column 조회
- iloc[행인덱스번호] → row 조회
- iloc[행인덱스번호, 열인덱스번호] → row & column 조회
sample.head()
- loc[행인덱스] → row 조회
sample.loc[20170226:20180317] # 마지막까지 전부 가져옴.
- loc[행인덱스, 컬럼명] → row & column 조회
sample.loc[:, "시간":"집계구코드"]
- iloc[행인덱스번호] → row 조회
sample.iloc[0]
- iloc[행인덱스번호, 열인덱스번호] → row & column 조회
sample.iloc[:, 0:3]
- indexing과 활용
- 조건에 따라 원하는 부분만 가져오고 싶은 경우가 있다. 이런 것을 인덱싱이라고 함!
sample[sample["생활인구합계"] >= 1000]
sample.loc[sample["생활인구합계"] >= 1000]
생활인구합계가 1000이상이고, 행정동 코드가 11680610인 데이터만 뽑아내자 (and)
condition = (sample["생활인구합계"] >= 1000) & (sample["행정동코드"] == 11680610)
condition
sample[condition]
댓글남기기