https://data.seoul.go.kr/dataList/419/S/2/datasetView.do
https://data.seoul.go.kr/dataList/OA-2734/F/1/datasetView.do
# np.random.randn() : 표준정규분포에서 샘플링한 난수 생성
data = np.random.randn(6,4)
data
dates=pd.date_range("20210101", periods = 6)
dates
df = pd.DataFrame(data, index = dates, columns=["A","B","C","D"])
# df.head() : 상위 5개의 데이터 보여줌, () 안에 숫자를 입력하면 입력한 숫자만큼의 rows를 보여줌
df.head()
# df.tail() : 하위 5개의 데이터 보여줌, () 안에 숫자를 입력하면 입력한 숫자만큼의 rows를 보여줌, 하위의 마지막 rows의 개수를 볼 수 있음
df.tail()
# df.index : 리스트 형태로 index 값 반환
df.index
# df.columns : 리스트 형태로 index 값 반환
df.columns
# df.values : 리스트 형태로 value 값 반환
df.values
# df.info() : dataframe의 기본 정보 확인 가능
df.info()
# df.describe() : dataframe의 기술통계정보 확인
df.describe()
df
# df.sort_values() : 특정 컬럼(열)을 기준으로 데이터를 정렬
# inplace = True : 데이터 변경사항 저장
df.sort_values(by="B", ascending=False, inplace = True)
df
# 한 개의 컬럼 선택
# dataframe.선택열 : dataframe["선택열"]와 같음,
# 단, 선택하는 열의 이름이 문자일 경우만 해당됨,
# 선택된 열이 하나일 땐 data type = Series임, (dataframe = series가 모여서 만들어진 것)
df["A"]
type(df["A"])
# dataframe.선택열 : dataframe["선택열"]와 같음,
# 단, 선택하는 열의 이름이 문자일 경우만 해당됨,
df.A
#### 두 개 이상 컬럼 선택
#dataframe[["선택열1", 선택열1"]] : 괄호를 안에 하나 더 해주어야 함
df[["A","B"]]
#### offset index
# [n:m] : n부터 m - 1 까지
# 인덱스나 컬럼의 이름으로 slice 하는 경우는 끝을 포함
df
df[0:3]
df["20210101":"20210104"]
# loc : location의 약자
# index 이름으로 특정 행, 열을 선택
df.loc[:,["A","B"]]
df.loc["20210102":"20210104",["A","D"]]
df.loc["20210102":"20210104","A":"D"]
df.loc["20210102",["A","B"]]
# iloc : integet location
# 컴퓨터가 인식하는 인덱스 값으로 선택
df.iloc[3]
df.iloc[3, 2]
df.iloc[3:5,0:2]
df.iloc[[1, 2, 4],[0,2]]
df.iloc[:,1:3]
df
# A 컬럼에서 0보다 큰 숫자(양수)만 선택
df["A"]>0
df[df["A"]>0]
df[df>0] # 조건에 부합하지 않는 데이터는 NaN 값으로 반환 (NaN : Not a Number)
df
df["E"] = ["one","one","two","three","four","six"]
df
# isin() : 특정 요소가 있는지 확인
df["E"].isin(["two"])
df["E"].isin(["two","five"])
df["E"].isin(["two","five","three"])
# 조건에 부합하는 데이터만 반환
df[df["E"].isin(["two","five","three"])]
# del dataframe["선택열"] : del 특정 컬럼 삭제
del df["E"]
df
# dataframe.drop([지울컬럼], axis = 0) : drom 특정 컬럼 삭제,
# axis = 0 → 가로, axis = 1 → 세로
df.drop(["D"], axis = 1)
df.drop(["20210104"]) # index 값을 입력하면 해당 행 삭제
df
df["A"].apply("sum")
df["A"].apply("mean")
df["A"].apply("min"), df["A"].apply("max")
df[["A","D"]].apply("sum")
df["A"].apply(np.sum)
df["A"].apply(np.mean)
df["A"].apply(np.std)
df.apply(np.sum) # 전체 설정도 가능
df
def plusminus(num):
return "plus" if num > 0 else "minus" # ★
df["A"].apply(plusminus)
df["A"].apply(lambda num: "plus" if num > 0 else "minus") # ★
# 딕셔너리 안의 리스트 형태
left = pd.DataFrame({"key":["K0","K4","K2","K3"],
"A":["A0","A1","A2","A3"],
"B":["B0","B1","B2","B3"]})
# 리스트 안의 딕셔너리 형태
right = pd.DataFrame([{"key":"K0", "C":"C0", "D":"D0"},
{"key":"K1", "C":"C1", "D":"D1"},
{"key":"K2", "C":"C2", "D":"D2"},
{"key":"K3", "C":"C3", "D":"D3"}])
left, right
# pd.merge( dataframe1, dataframe2, on="key" ) : key값을 기준으로 병합
# pd.merge( dataframe1, dataframe2, how = "inner", on="key" ) 와 동일, how="inner" 기본 값임
pd.merge(left, right, on="key")
# pd.merge( dataframe1, dataframe2, how="left", on="key" ) :
#왼쪽에 있는 dataframe의 key값을 기준으로 병합
pd.merge(left, right, how="left", on="key")
# pd.merge( dataframe1, dataframe2, how="right", on="key" ) :
#오른쪽에 있는 dataframe의 key값을 기준으로 병합
pd.merge(left, right, how="right", on="key")
# pd.merge( dataframe1, dataframe2, how="outer", on="key" ) :
# key값을 기준으로 모두 다 병합
pd.merge(left, right, how="outer", on="key")
matplotlib : 파이썬의 시각화 도구
- matplotlib은 plt로 많이 naming한다
- jupyter notebook 유저의 경우, matplotlib의 결과가 out session에 나타나는 것이 유리하므로 %matplotlib inline 옵션을 사용
matplotlib의 기본 형태
- plt.figure(figsize=(10,6)
- plt.plot(x, y)
- plt.show()
※ 예제 참고
import matplotlib.pyplot as plt # pyplot : matlab에 사용하는 시각화 프로그램이 있음
from matplotlib import rc
rc("font", family="Malgun Gothic") # mac은 다름, Arial Unicode MS
# %matplotlib inline # 아래와 같은 의미, 주피터 노트북에 그래프가 바로 보이게 하는 설정
get_ipython().run_line_magic("matplotlib", "inline")
plt.figure(figsize=(10,6)) # x, y축 설정, 빈 그래프 설정
plt.plot([0, 1, 2, 3, 4, 5, 6, 7 ,8, 9], [1, 1, 2, 3, 4, 2, 3, 5, -1, 3])
# plot : 그래프의 형태, ()안에는 데이터 입력
plt.show() # plt.show() : 데이터를 저장한 후 보여줌
# 삼각함수 그리기
# numpy 함수
# np.arange(a, b, s) : a부터 b까지의 s의 간격
# np.sin(value) : sin 함수(삼각함수)
import numpy as np
t = np.arange(0, 12, 0.01)
y = np.sin(t)
plt.figure(figsize = (10, 6))
plt.plot(t, np.sin(t))
plt.plot(t, np.cos(t))
plt.show()
# 1. 격자무늬 추가
# 2. 그래프 제목 추가
# 3. x축, y축 제목 추가
# 4. 주황색, 파란색 선 데이터 의미 구분
def drawGraph():
plt.figure(figsize = (10, 6))
plt.plot(t, np.sin(t))
plt.plot(t, np.cos(t))
plt.grid(True) # 격자 무늬
plt.title("Example of sinewave") # 그래프 제목 추가
plt.xlabel("time") # x축 제목 추가
plt.ylabel("Amplitude") # amplitude : 진폭 # y축 제목 추가
plt.legend(labels=["sin","cos"], loc=2) # 범례, 각 선이 어떤 것을 의미하는지 설정 필요
# 주황색, 파란색 선 데이터 의미 구분,
# legend() : 괄호 안에 아무것도 설정하지 않으면 가장 민 공간에 범례가 출력
# .legend(loc = "" ) : 범례 위치 설정 가능 ex) loc = 2, loc = upper right....
# plt.plot(t, np.sin(t), label="sin") 위의 것과 같음
# plt.plot(t, np.cos(t), label="cos") 위의 것과 같음
plt.show()
drawGraph()
t = np.arange(0, 5, 0.5)
def drawGraph():
plt.figure(figsize = (10, 6))
plt.plot(t, t, "r--") # "r--" : red 색으로 -- 점선 표시를 해라
plt.plot(t, t ** 2, "bs") # "bs" : blue square
plt.plot(t, t ** 3, "g^") # "g^" : green ^방향의 삼각형
plt.show()
drawGraph()
t = list(range(0, 7))
y = [1, 4, 5, 8, 9, 5, 3]
def drawGraph():
plt.figure(figsize=(10, 6))
plt.plot(t, y, color="red", linestyle="dashed", # dash : 점선, = -- 같음
marker="o", markerfacecolor="blue", markersize=12)
plt.xlim([-0.5, 10]) # x축 설정
plt.ylim([0.5, 9.5]) # y축 설정
plt.show()
drawGraph()
t = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
y = np.array([9, 8, 7, 9, 8, 3, 2, 4, 3, 4])
# scatter는 점을 뿌리듯이 그리는 그림
def drawGraph():
plt.figure(figsize=(20, 6))
plt.scatter(t, y)
plt.show()
drawGraph()
colormap = t
def drawGraph():
plt.figure(figsize=(20, 6))
plt.scatter(t, y, s = 100, c=colormap, marker=">") # s = : size
plt.show()
drawGraph()
# matplotlib을 가져와서 사용
data_result.head()
# pandas에서 plot 그리기
data_result["인구수"].plot(kind="barh",figsize=(10,10))
💻 출처 : 제로베이스 데이터 취업 스쿨