# 도형 1
fruit = ['사과','바나나','딸기','오렌지','포도']
result = [7,6,3,2,2]
import matplotlib.pyplot as plt
plt.pie(result)
plt.show()
# 도형 2# 생성한 원이 타원 -> 원형으로 변환
plt.figure(figsize=(5,5))
plt.pie(result, labels = fruit, autopct = '%.1f%%')
plt.show()
도형 1도형 2
# 시계방향순 데이터 정렬
plt.figure(figsize=(5,5))
plt.pie(result, labels = fruit, autopct = '%.1f%%', startangle=90, counterclock=False )
# startangle=90 x축 기준 90도 에서 시작 (생략시 0도)# autopct 소수점 보여줄꺼# counterclock=False 시계방향
plt.show()
explode_value = (0.1, 0,0,0,0) # 1번째 요소 0.1 만큼 파이에서 나오게# 시계방향 순으로 데이터 pie_chart를 생성
plt.figure(figsize=(5,5))
plt.pie(result, labels = fruit, autopct = '%.1f%%', startangle =90, counterclock=False, explode=explode_value, shadow=True)
# img 저장하기
plt.savefig('./save_test0.png')
plt.show()
# 사진의 해상도 높이기 dpi(dot per inch)import matplotlib as mpl
mpl.rcParams['figure.figsize']
# 해상도 보기 dpi를 찍어보기
mpl.rcParams['figure.dpi']
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 5)
x
y1 = x
y2 = x+1
y3 = x+2
y4 = x+3
<y= x 꼴 그래프 만들어보기>
plt.plot(x,y1, x,y2, x,y3, x,y4)
plt.grid()
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Saving a figure')
# 위의 이미지 저장
plt.savefig('./save_test10', dpi=1000)
import matplotlib.pyplot as plt
import numpy as np
height = [165,177,160,180,185,155,172] # 키 데이터
weight = [62,67,55,74,90,43,64] # 몸무게 데이터
plt.scatter(height, weight)
plt.xlabel('Height(cm)')
plt.ylabel('Weight(kg)')
plt.title('Height & Weight')
plt.grid() # 그리드
plt.scatter(height, weight, s=500, c='r') # s: 마커크기, c: 색
plt.show()
# 마커 크기를 변경하는 방법
plt.scatter(height, weight, s=500, c='r') # s: 마커 크기, c: 색깔
plt.show()
# 데이터마다 마커의 크기와 컬러를 다르게 지정
size = 100* np.arange(1, 8)
colors = ['r', 'g', 'b', 'c', 'm', 'k','y']
plt.scatter(height, weight, s=size, c=colors)
height = [165,177,160,180,185,155,172] # 키 데이터
weight = [62,67,55,74,90,43,64] # 몸무게 데이터 # 165, 62가 1번째 Red -> 177, 67 Green 순서대로
plt.show()
https://hyunmin1906.tistory.com/30
import numpy as np
city = ['서울','인천','대전','대구','울산','부산','광주']
# 위도(latitude)와 경도(longitude)
lat = [37.56, 37.45, 36.35, 35.87, 35.53, 35.18, 35.16]
lon = [126.97, 126.70, 127.38, 128.60, 129.31, 129.07, 126.85]
# 인구밀도
pop_den = [16154, 2751, 2839, 2790, 1099, 4454, 2995]
size = np.array(pop_den) * 0.2# 마커의 크기 지정
colors = ['r','g','b','c','m','k','y'] # 마커의 컬러 지정
plt.scatter(lon, lat, s= size, alpha=0.5)
plt.xlabel('경도')
plt.ylabel('위도')
plt.title('지역별 인구밀도')
for x,y, city_name inzip(lon, lat,city):
plt.text(x,y, city_name) # 경도, 위도에 따른 도시이름 mapping
plt.show()
import sklearn
import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
print(sklearn.__version__) # 사이킷런 버전확인
#붓꽃 데이터 세트를 로딩
iris=load_iris()
#iris.data는 Iris 데이터 세트에서 피처(feature)만으로 된 데이터를 numpy로 가지고 있음.
iris_data=iris.data # x값 들#iris.target은 붓꽃 데이터 세트에서 레이블(결정 값)데이터를 numpy로 가지고 있다.
iris_label=iris.target #y값 들print('iris target값:', iris_label)
print('iris target명:', iris.target_names) # ['setosa' 'versicolor' 'virginica'] 문자타입을 0, 1, 2숫자로 변환!#붓꽃 데이터 세트를 자세히 보기 위해 DataFrame으로 변환한다.
iris_df = pd.DataFrame(iris_data,columns=iris.feature_names)
iris_df['label']=iris.target
iris_df.tail()
다음으로 학습용 데이터와 테스트용 데이터를 분리해보자. 학습용 데이터와 테스트용 데이터는 반드시 분리해야 한다.
학습데이터로 학습된 모델이 얼마나 뛰어난 성능을 가지는지 평가하려면 테스트 데이터 세트가 필요하기 때문이다.
이를 위해 사이킷런은 train_test_split()API를 제공한다. train_test_split()을 이용하면 학습 데이터와 테스트 데이터를 test_size 파라미터 입 값의 비율로 쉽게 분할이 가능하다. 예를 들어 test_size =0.2로 입력 파라미터를 설정하면 전체 데이터 중 테스트 데이터가 20%, 학습데이터가 80%로 데이터를 분할한다. 먼저 train_test_split()을 호출한 후 좀 더 자세히 입력 파라미터와 변환값을 살펴보자.
X_train.shape # (sepal length, sepal width, petal length, petal width)# (120, 4) 120가지의 4개의 컬럼을 가지고 있고 이것을 학습용 x (독립 변수로 두겠다)
y_train.shape # (label => 품종이 어떤건지)
(120,) 120가지의 품종이 있다 (종속 변수)
# X_train의 4가지 독립변수들을 결합하여 y_train 종속 변수를 찾아내는 알고리즘을 학습시킴# 그 알고리즘에
X_test.shape # (sepal length, sepal width, petal length, petal width)# (30, 4) 30가지의 4개의 컬럼을 직접 넣어서
y_test.shape
# (30,) 30개의 품종을 얼마나 잘 맞추는지 테스트하는것!
의사결정나무를 통해서 학습시키기
# 의사결정 트리에 120개의 학습용 데이터 넣기
DecisionTreeClassifier.fit(X_train,y_train)
#학습이 완료된 DecisionTreeClassifier 객체에서 테스트 데이터 세트로 예측 수행.
pred=dt_clf.predict(X_test) # X_test는 test_size=0.2에서 빼둔 (30, 4)개의 데이터
# 함수 설정하기import numpy as np
import matplotlib.pyplot as plt
x = np.arange(-4.5, 5.0, 0.5)
y1 = 2*x**2
y2 = 5*x + 30
y3 = 4*x**2 + 10
# 시각화 방법 1
plt.plot(x,y1)
plt.plot(x,y2)
plt.plot(x,y3)
plt.show()
# 더 간단하게도 가능#plt.plot(x,y1,x,y2,x,y3)# plt.show()
여러 그래프를 여러 창에 넣어보기
# 넘파이로 함수 생성import numpy as np
# 데이터 생성
x = np.arange(-5,5, 0.1)
y1 = x**2 -2
y2 = 20*np.cos(x)**2#plt.figure 로 새창을 만들고 (숫자)로 여러 창 생성가능
plt.figure(1) # 1번 그래프를 창에 넣기
plt.plot(x, y1)
plt.figure(2) # 2번 그래프를 창에 넣기
plt.plot(x, y2)
plt.show()
# 3. Pclass 1인 정보 추출하기
titan_df[titan_df.Pclass==1] # <class 'pandas.core.series.Series'># titan_df[titan_df['Pclass']==1] # 이렇게 해도됨#titan_df[titan_df.Pclass==1].Pclass.value_counts() # 갯수# print(type(titan_df[titan_df.Pclass==1])) => <class 'pandas.core.frame.DataFrame'># print(type(titan_df.Pclass==1])) => <class 'pandas.core.series.Series'>
여러가지 조건
# and 조건일 때는 & / or 조건일 때는 | / Not 조건일 때는 ~# 60세넘는 1등급 여성 추출
titan_df[(titan_df.Pclass==1) & (titan_df.Sex=='female') & (titan_df['Age'] > 60)]
# Not 조건인 경우 (반대조건)# titan_df[~((titan_df.Pclass==1) & (titan_df.Sex=='female') & (titan_df['Age'] > 60))]
2-2 여러가지 기능들
# 해당 열(Name)에 글자가 포함된 데이터 출력
titan_df[titan_df.Name.str.contains('Mrs')]
# 인덱스번호 재정렬
titan_df[titan_df.Name.str.contains('Mrs')].reset_index()
# 인덱스번호 재정렬상태에서 상위3개만 보여주기 # titan_df[titan_df.Name.str.contains('Mrs')].reset_index().head(3) # 상위 3개# titan_df[titan_df.Name.str.contains('Mrs')].reset_index()[:3] # 상위 3개# titan_df[titan_df.Name.str.contains('Mrs')].reset_index().tail(3) # 하위# 결측치받기
.isna() # 표로 보여주기
.isna().sum() # 합쳐서 보여주기
3. 선택된 행(row) 가로만 뽑아보기
titan_df.loc[[0]] # loc 이름이 0인 행만 추출해줘 titan_df.iloc[[0]] # iloc 위치가 0번째 행인 값들만 추출해줘
# 단일값을 불러오기1 - loc(label::명칭) // iloc(Positional-위치)
titan_df.loc[[0]] # loc 이름이 0인 행만 추출해줘
titan_df.iloc[[0]] # iloc 위치가 0번째 행인 값들만 추출해줘# iloc 경우 슬라이스 가능# iloc [시작:끝:옵션]# 테스트하기 위해서 행 이름 바꿀때 # data_df.rename(index={'two': 1, 'one': 3}, inplace=True) # inplace 원본도 바꿀래?
data_df
3-1. loc/iloc 을 통한 행열 을 사용하여 하나의 값 뽑기
titan_df.loc[0,'Pclass']
# 3 출력# titan_df.loc[[0,'Pclass']] 로 하면 "['Pclass'] not in index" 에러 뜸
3-2. loc/iloc 을 통한 행열 을 사용하여 여러개의 값 뽑기
titan_df.loc[:,'Pclass':'Age']
# 행 [:] = 전부 , 열 ['Pclass':'Age'] Pclass부터 ~ Age 까지3-1. loc을 통한 행열 을 사용하여 하나의 값 뽑기
titan_df.iloc[:,2:6]
# 와 동일한 값 (2열부터 ~ 2,3,4,5 까지) 6열 포함x
본문을 요약하면 사타야 말릭 박사는 한 컨퍼런스에서 OpenCV의 창시자인 그레이 브라드스키 박사(Dr. Gray Bradski)를 만났고 그에게 왜 RGB가 아닌 BGR을 쓰냐고 물었고 그에 대한 대답은 “왜 미국 철도 표준이 4피트 8.5 인치 인가?”라는 질문으로 되돌아 왔다고 합니다.
이게 무슨 말이냐면 미국이 철도 표준을 정할때 무슨 대단한 이유가 있어서 4피트 8.5인치로 정한것이 아니라 열차 이전에 주로 사용했던 마차의 폭에 마춰서 정했다는 겁니다. 결국, 브라드스키 박사도 BGR로 정한데는 별다른 이유가 있던게 아니라 그걸 정하던 시절 초창기 카메라 산업 개발자들이 BGR을 많이 썼기 때문에 그 자신도 그냥 아무 생각없이 BGR을 선택했다는 거죠.
2: 그럼 왜 영상 기기 개발자들 사이에서는 RGB보다 BGR을 많이 사용했을까?
이는 엔디안(Endianness)와 관련이 있습니다.
CPU에 따라서 값을 메모리에 저장하고 읽을 때, MSB 즉 큰 값을 먼저 쓰는 빅엔디안과 LSB 즉 작은 값을 먼저 쓰는 리틀엔디언 방식이 있는데, 인텔에서 만든 x86계열의 CPU는 리틀엔디언을 따릅니다.
(OpenCV는 인텔에서 시작)
예를 들어 0x123456이라는 값을 빅엔디언으로 저장하면 0x123456 순으로 저장되지만 리틀엔디언으로 저장하면 0x563412순으로 저장되게 됩니다.
BGR 포맷으로 이루어진 색상 정보는 각 채널당 8비트로 이루어 지고 3개의 채널을 사용하므로 24비트 즉, 0xBBGGRR가 필요합니다. 24비트 단위의 입출력은 효과적이지 않으니 메모리에 저장할때 unsigned 32비트를 사용하는것이 일반적인데 이렇게 되면 0x00BBGGRR 가 됩니다. 이 값을 x86 계열의 CPU 처럼 리틀엔디언을 사용해서 저장하면 메로리에는 0xRRGGBB00가 저장됩니다.
이렇게 저장된 값을 메모리에 직접 접근해서 읽어 들이는 디스플레이 장치, 카메라 등의 영상 하드웨어에서는 CPU와 무관하게 지정된 엔디안으로 앞에서 부터 읽어 들이면 자연스럽게 RGB로 읽히기 때문에 BGR 포맷이 초창기 영상 기기 관련 하드웨어 개발자들에게 자연스레 널리 사용되었다고 볼 수 있습니다.
BGR 포맷과 엔디안과의 관계에 대한 추가적인 의견은 아래의 스택오버플로우 링크에서도 보 실 수 있습니다.