DATA 표현
벡터의 산술연산과 브로드캐스팅연산을 지원하는 다차원 배열 ndarray
데이터 타입을 지원
Numpy를 이용하기 위해서는 ndarray
객체를 만드러야 함. array
라고 부르기도함
import numpy as np 로 호출
np.array([1, 3, 5, 7])는 print했을때 [1 3 5 7]
로 보여짐
np.zeros([2,3])
array([[0., 0., 0.],
[0., 0., 0.]])
브로드캐스팅
random : 다양한 난수생성
5) 이미지파일 행렬로 변환
import numpy as np
img_arr = np.array(img)
print(type(img))
print(type(img_arr))
print(img_arr.shape)
print(img_arr.ndim)
.format()
: {} 사용해서 문자열출력할때 쓰는 함수(ex: my = "My name is {}, I'm {}".format("mimi",26))11- 1. Series
ser = pd.Series(['a','b','c',3])
ser
0 a
1 b
2 c
3 3
dtype: object
array(['a', 'b', 'c', 3], dtype=object)
RangeIndex(start=0, stop=4, step=1)
ser2 = pd.Series(['a', 'b', 'c', 3], index=['i','j','k','h'])
ser2.index = ['Jhon', 'Steve', 'Jack', 'Bob']
입력하면 i, j, k, h 대신 Jhon..이 들어감ser3.name = 'Country_PhoneNumber'
ser3.index.name = 'Country_Name
Country_Name
Korea 82
America 1
Swiss 41
Italy 39
Japan 81
China 86
Rusia 7
Name: Country_PhoneNumber, dtype: int64
11-2. DataFrame
11-3. EDA(데이터탐색)
.head() : 데이터셋의 처음 5개 행을 보여줌
.tail() : 마지막 5개 행 보여줌
.columns : 이용해서 데이터셋에 존재하는 컬럼명을 확인
.info() : 각 컬럼별로 Null값과 자료형을 보여주는 메소드
.describe()
.isnull().sum()
.value_counts() : 범주형데이터(case,category)로 기재되는 컬럼(가로)이 각 범주별로 값이 몇개 있는지 구할수있다. (피벗같은 느낌..메소드앞에 있는 데이터들의 카테고리별 갯수를 알수있음) ex) data['RegionName'].value_counts()
같은 경우 RegionName열 에 있는 값들의 갯수를 알려줌,
.value_counts().sum() : sum()메소드 추가해서 컬럼별 통계수치의 합을 구할수있음,
(🤔결측치 확인이 가능할지도..그러나 메소드 앞 데이터명을 써서 일일이 확인해하는것은 비효율적인것같다.)
.corr()
data.drop(['Latitude','Longitude','Country','Date','HospitalizedPatients', 'IntensiveCarePatients', 'TotalHospitalizedPatients','HomeConfinement','RegionCode','SNo'], axis=1, inplace=True)
Visualization(시각화)
import matplotlib.pyplot as plt
: 그래프 그리기 위해 라이브러리 가져오기%matplotlib inline
: 주피터 노트북을 실행할때 주로 같이 씀, 쥬피터노트북을 실행한 브라우저에서 바로 그림을 볼수있게함subject = ['English', 'Math', 'Korean', 'Science', 'Computer'] points = [40, 90, 50, 60, 100]
: 그래프 데이터 fig = plt.figure()
: figure()라는 객체는 도화지(그래프)ax1 = fig.add_subplot(1,1,1)
: figure()객체에 add_subplot 메소드를 이용해 축을 그려준다.ax1.bar(subject, points)
: bar() 메소드를 이용해 막대그래프를 그립plt.xlabel('Subject')
: x 라벨(제목) plt.ylabel('Points')
: y 라벨(제목)plt.title("Yuna's Test Result")
: 표제목-그래프 데이터
csv_path = os.getenv("HOME") + "/aiffel/data_visualization/AMZN.csv"
data = pd.read_csv(csv_path ,index_col=0, parse_dates=True)
price = data['Close']
축 그리기 및 좌표축 설정
fig = plt.figure()
도화지
ax = fig.add_subplot(1,1,1)
사각형만듬 1*1 총 1개의 그래프 1사분면에
price.plot(ax=ax, style='black')
AxesSubplot:xlabel='Date'
plt.ylim([1600,2200])
(1600.0, 2200.0) y축 범위
plt.xlim(['2019-05-01','2020-03-01'])
(18017.0, 18322.0) x 축 범위
주석달기
important_data = [(datetime(2019, 6, 3), "Low Price"),(datetime(2020, 2, 19), "Peak Price")]
for d, label in important_data:
ax.annotate(label, xy=(d, price.asof(d)+10), #주석을 달 좌표(x,y)
xytext=(d,price.asof(d)+100), #주석 텍스트가 위차할 좌표(x,y)
arrowprops=dict(facecolor='red')) #화살표 추가 및 색 설정
보여주기
plt.show()# 위에 검은창 사라짐
Pandas Series 데이터 활용
plt.xlim(), plt.ylim()을 통해 x, y 좌표축의 범위를 설정
-그래프 안에 추가적으로 글자나 화살표 등 주석을 그릴 때는 annotate()
메소드
grid() 메소드를 이용하면 그리드(격자눈금)를 추가
-plt.plot()
figure()객체를 생성하고 add_subplot()으로 서브 플롯을 생성하며 plot을 그리는 과정 생략 할수있는 명령
matplotlib은 가장 최근의 figure객체와 그 서브플롯을 그림
서브플롯이 없으면 서브플롯 하나를 생성
x데이터, y데이터, 마커옵션, 색상 이용가능
- plt.plot(x, np.sin(x),'o')
- plt.plot(x, np.cos(x),'--', color='black')
plt.subplot(2,1,1) (행갯수, 열갯수, 위치(min: 1 max: 행*열)
linestyle='dotted'
(1) 데이터준비
import pandas as pd
import seaborn as sns
tips = sns.load_dataset("tips.csv")
(2) EDA(데이터 살펴보기
(3) 범주형데이터
grouped = df['tip'].groupby(df['sex'])
grouped.size()
;성별에 따른 데이터 량(팁 횟수)grouped.mean()
: 위에서 선언된 변수 grouped 의 평균(mean)sex = dict(grouped.mean())
: sex 변수는 평균데이터가 딕셔너리형태로 들어가있음import matplotlib.pyplot as plt
plt.bar(x = x, height = y)
plt.ylabel('tip[$]')
plt.xlabel('sex')
plt.title('Tip by Sex')
(4) (3)을 Seaborn과 Matplotlib을 활용해 간단히 보여줌
sns.barplot(data=df, x='sex', y='tip')
.barplot
: 지정한 변수의 평균을 계산 plt.figure(figsize=(10,6)) # 도화지 사이즈를 정합니다.
sns.barplot(data=df, x='sex', y='tip')
plt.ylim(0, 4) # y값의 범위를 정합니다.
plt.title('Tip by sex') # 그래프 제목을 정합니다.
(5) 시계열 데이터 시각화
데이터 불러오기
data = pd.read_csv(csv_path)
flights = pd.DataFrame(data)
그래프그리기
sns.barplot(data=flights, x='year', y='passengers')
평균
sns.pointplot(data=flights, x='year', y='passengers')
점으로 나타내기
sns.lineplot(data=flights, x='year', y='passengers')
선으로 나타내기
sns.distplot(flights['passengers'])
히스토그램
히스토그램(Heatmap)
pivot = flights.pivot(index='year', columns='month', values='passengers')
index는 왼쪽 첫번째열, colums는 값을 나눌 기준,year과 month로 pivot한을 코드로 짠거다양한 데이터 전처리기법
trade = pd.read_csv(csv_file_path)
len(trade)
: 전체 데이터 건수len(trade) - trade.count()
: 전체 데이터 건수에서 각 컬럼별 값이 있는 데이터 수를 빼기 , 숫자가 클수록 결측치가 많음trade = trade.drop('기타사항', axis=1)
: 기타사항이 전체다 결측치라 컬럼 삭제 , .drop 메소드로 삭제, axis=1 은 열(칼럼)을 타나냄DataFrame.isnull()
: 데이터마다 결측치 여부를 True, False로 반환DataFrame.any(axis=1)
: 행마다 하나라도 True가 있으면 True, 그렇지 않으면 False를 반환trade.isnull().any(axis=1)
: 각 행이 결측치가 하나라도 있는지' 여부를 불리언 값으로 가진 Series가 출력trade[trade.isnull().any(axis=1)]
: 결측치(빈칸)이 있는 데이터만 볼수있음, DataFrame.loc[행 라벨, 열 라벨]
을 입력하면 해당 라벨 데이터를 출력해줌, (ex : trade.loc[[188, 191, 194]] 같은경우 행 188,191,194만 보임, 열라벨이 없으므로)DataFrame.duplicated()
: 중복된 데이터 여부를 불리언 값으로 반환 trade[trade.duplicated()]
: 중복된 값을 직접 확인가능trade.drop_duplicates(inplace=True)
: 중복된 데이터 삭제, 중복된 값이 있을경우 true 로 불리언값이 나오기때문에z score
def outlier(df, col, z)
abs(df[col] - np.mean(df[col]))
: 데이터에서 평균을 빼준 것에 절대값을 취하기abs(df[col] - np.mean(df[col]))/np.std(df[col])
: 위에 한 작업에 표준편차로 나눠주기df[abs(df[col] - np.mean(df[col]))/np.std(df[col])>z].index
: 값이 z보다 큰 데이터의 인덱스를 추출not_outlier
는 <= z
: 이상치 값이 아닌 데이터만 추출outlier2(trade, '무역수지')
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
pd.get_dummies
함수Data binning
혹은 bucketing
라고함