728x90
Numpy - Array¶
In [3]:
#numpy
import numpy as np
#array: 배열
arr=np.array([1,2,3])#리스트를 array로 캐스팅
print(arr,type(arr))
[1 2 3] <class 'numpy.ndarray'>
- array 만들기
In [4]:
arr1=np.array([1,2,3])
arr2=np.array([2,3,4])
arr1+arr2
Out[4]:
array([3, 5, 7])
- array 연산
In [72]:
arr1=np.array([1,2,3])
arr2=np.array([2,3,4])
arr1-arr2
Out[72]:
array([-1, -1, -1])
In [6]:
arr1+1
Out[6]:
array([2, 3, 4])
In [7]:
[1,2,3]+[4,5,6] #리스트 더하기
Out[7]:
[1, 2, 3, 4, 5, 6]
In [8]:
#[1,2,3]-[4,5,6] #리스트 빼기는 안됨
In [9]:
list = [10,20,30,40]
del list[3] #================delete
print(list)
list.append(50) #==============insert
print(list) #=====================select
print(list[1])
print(list[1:4])
list[0]= 70 #=====================update
print(list)
[10, 20, 30]
[10, 20, 30, 50]
20
[20, 30, 50]
[70, 20, 30, 50]
In [10]:
list1=[70,20,30,50]
res=[]
for i in list1:
res.append(i*2)
print(res)
[140, 40, 60, 100]
In [11]:
list1=[70,20,30,50]
res=[]
for i, num in enumerate(list):
res.append(list[i]*2)
print(res)
[140, 40, 60, 100]
In [12]:
res=np.array(list1)*2
print(res)
[140 40 60 100]
In [13]:
arr2 **2
Out[13]:
array([ 4, 9, 16])
In [14]:
arr1 * arr2
Out[14]:
array([ 2, 6, 12])
In [15]:
arr1 / arr2
Out[15]:
array([0.5 , 0.66666667, 0.75 ])
In [16]:
arr1=np.array([10,20,30,40])
arr1>20
Out[16]:
array([False, False, True, True])
In [17]:
res=[i for i in arr1 if i>20]
print(res)
[30, 40]
In [18]:
res = arr1[arr1>20]
print(res)
[30 40]
리스트-> 어레이 / 어레이-> 리스트¶
- list ==> arr : np.array(list)
- arr --> list : arr.tolist(arr)
In [19]:
print(arr1)
list1 = arr1.tolist()
print(list1)
[10 20 30 40]
[10, 20, 30, 40]
통계연산¶
In [20]:
arr3=np.arange(5) #numpy array #5까지 범위 array로 출력
arr3
Out[20]:
array([0, 1, 2, 3, 4])
In [21]:
arr = np.array([10,20,30])
arr.max(), arr.min(), arr.sum(), arr.mean(), arr.std(), arr.var() #최대값, 최소값, 합, 평균, 표준편차, 분산
Out[21]:
(30, 10, 60, 20.0, 8.16496580927726, 66.66666666666667)
In [22]:
arr = np.array([10,20,30])
arr.cumsum() #누적값 [10, 10+20, 10+20+30]
Out[22]:
array([10, 30, 60])
행렬 연산¶
- 행렬 (행,렬) (줄,칸)
In [23]:
A = np.array([0,1,2,3]) #***********(4,)
A.shape #(행,렬)출력
Out[23]:
(4,)
In [24]:
list = [[0,1,2,3],[4,5,6,7]]
arr=np.array(list)
print("list====================")
print(list)
print("arr=====================")
print(arr,arr.shape)
#컴퓨터 상 arr의 첫칸은 0인데 행렬상 arr의 첫칸은 1임
print("arr[1][0] =",arr[1][0])
list====================
[[0, 1, 2, 3], [4, 5, 6, 7]]
arr=====================
[[0 1 2 3]
[4 5 6 7]] (2, 4)
arr[1][0] = 4
reshape¶
reshape(a,b) => a행b열로 바꾸어라¶
- 전위 == 비봇 : 행<->열
In [25]:
A=np.array([0,1,2,3]).reshape(2,2) #2행2열로 바꾸어라
A
Out[25]:
array([[0, 1],
[2, 3]])
In [26]:
A=np.array([0,1,2,3])
print(A)
res = A.reshape(-1,1) #-1은 세로줄로 출력 & 알아서 행|열 숫자 계산 12개 데이터(ex.3,-1)=(3,4)
print(res)
[0 1 2 3]
[[0]
[1]
[2]
[3]]
dot() 행렬 내적¶
In [27]:
A=np.array([0,1,2,3]).reshape(2,2)
B=np.array([3,2,0,1]).reshape(2,2)
print(A)
print(B)
A.dot(B) #행렬 내적
np.dot(A,B)
[[0 1]
[2 3]]
[[3 2]
[0 1]]
Out[27]:
array([[0, 1],
[6, 7]])
[0 1] [3 2] -> [0 1]
[2 3] [0 1] -> [6,7]
In [28]:
score=np.array([100,90,80,70,65])
print("인덱스 n번째",score[0], score[1], score[2])
print("슬라이싱",score[0:3])
print(score[0]) #인덱스 표현 : [번째] #리스트 : [값,값] #배열 : [값 값]
print("[멀티n번째]",score[[1,3,4]])
인덱스 n번째 100 90 80
슬라이싱 [100 90 80]
100
[멀티n번째] [90 70 65]
- reshape(3,3) 3*3 총 9개의 값을 배열이 가지고 있어야 한다 == 딱 나누어 떨어진다.
In [29]:
# 10, 20, ... ,90, 100
a2 = np.arrange(1,11,1).reshape(3,3) #10개값 / 9 --->에러
a2
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_25712/2009342799.py in <module>
1 # 10, 20, ... ,90, 100
----> 2 a2 = np.arrange(1,11,1).reshape(3,3) #10개값 / 9 --->에러
3 a2
c:\ai\pythonproject\venv\lib\site-packages\numpy\__init__.py in __getattr__(attr)
313 return Tester
314
--> 315 raise AttributeError("module {!r} has no attribute "
316 "{!r}".format(__name__, attr))
317
AttributeError: module 'numpy' has no attribute 'arrange'
In [30]:
list = [[10,20,30],[40,50,60],[70,80,90]]
print(list)
print(list[0][2])
#print(list[0,2]) #error --- 리스트는 이런 문법 없다
[[10, 20, 30], [40, 50, 60], [70, 80, 90]]
30
In [31]:
arr=np.array(list)
print(arr)
print(arr[0][2])
print(arr[0,2]) #배열은 가능
[[10 20 30]
[40 50 60]
[70 80 90]]
30
30
In [32]:
a2=arr
print(a2)
print(a2[1])
a2[0]=np.array([45,55,65])
a2[1]=[47,57,67]
print(a2)
[[10 20 30]
[40 50 60]
[70 80 90]]
[40 50 60]
[[45 55 65]
[47 57 67]
[70 80 90]]
In [40]:
list = [[10,20,30],[40,50,60],[70,80,90]]
arr = np.array(list)
print(arr)
print("0번째줄",arr[0])
print("0번째줄 중에서도 1번째 값:",arr[0][1])
print("0번째 1번째줄:\n", arr[[0,1]])
print("0번째줄 1번째값, 1번째줄 2번째값", arr[[0,1], [1,2]])
[[10 20 30]
[40 50 60]
[70 80 90]]
0번째줄 [10 20 30]
0번째줄 중에서도 1번째 값: 20
0번째 1번째줄:
[[10 20 30]
[40 50 60]]
0번째줄 1번째값, 1번째줄 2번째값 [20 60]
In [41]:
a = np.array([1,2,3,4,5,6])
a[a>3]
Out[41]:
array([4, 5, 6])
In [42]:
a[(a%2)==0]
Out[42]:
array([2, 4, 6])
In [43]:
a[(a//3)==1]
Out[43]:
array([3, 4, 5])
In [48]:
print(arr)
arr[1:3,1:3] #1,2번째 행, 1,2번째열
[[10 20 30]
[40 50 60]
[70 80 90]]
Out[48]:
array([[50, 60],
[80, 90]])
In [47]:
arr[:3, 1:] #1,2,3행 1,2열 가져와라
Out[47]:
array([[20, 30],
[50, 60],
[80, 90]])
QUIZ¶
- arr[행,렬]
- arr[[1행,2행],[1열,2열]]
- arr[s:e행 s:e열]
- arr[1행:2행,1열:2열]
In [50]:
arr = np.array([[10, 25, 35],
[40, 55, 65],
[70, 80, 90]])
print(arr)
[[10 25 35]
[40 55 65]
[70 80 90]]
In [63]:
arr[0:2 , 0:1]
Out[63]:
array([[10],
[40]])
In [56]:
arr[[0,2],[0,1]] #뒤에 쉼표는
Out[56]:
array([10, 80])
In [61]:
arr[[0,2], 0:1] #슬라이싱에는 []기호 쓰면 안됨 []는 지목할때만 씀
Out[61]:
array([[10],
[70]])
In [64]:
arr[0:2, [0,1]]
Out[64]:
array([[10, 25],
[40, 55]])
PANDAS - DataFrame¶
In [1]:
import pandas as pd #pandas.py
import numpy as np
#data=None,
#index: Axes | None = None,
#columns: Axes | None = None,
#dtype: Dtype | None = None
df = pd.DataFrame(data = [[1,'kim',111],[2,'lee',222]], columns=['seq','id','pw']) #DataFrame.class
print(df.info()) ##desc df
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2 entries, 0 to 1
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 seq 2 non-null int64
1 id 2 non-null object
2 pw 2 non-null int64
dtypes: int64(2), object(1)
memory usage: 176.0+ bytes
None
In [2]:
df.head() #상단에서부터 5개 보여줘
Out[2]:
seq | id | pw | |
---|---|---|---|
0 | 1 | kim | 111 |
1 | 2 | lee | 222 |
방법 1) 리스트에 데이터 담기¶
In [71]:
data_list = [[1,'kim',111],[2,'lee',222]]
col_list = ['seq','id','pw']
df = pd.DataFrame(data = data_list, columns= col_list)
print(df,df.info())
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2 entries, 0 to 1
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 seq 2 non-null int64
1 id 2 non-null object
2 pw 2 non-null int64
dtypes: int64(2), object(1)
memory usage: 176.0+ bytes
seq id pw
0 1 kim 111
1 2 lee 222 None
방법2) numpy array에 데이터 담기¶
In [70]:
data_list = [[1,'kim',111],[2,'lee',222]]
col_list = ['seq','id','pw']
data_arr = np.array(data_list)
df = pd.DataFrame(data = data_arr, columns= col_list)
print(df,df.info()) #array 하면 type이 전부 object
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2 entries, 0 to 1
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 seq 2 non-null object
1 id 2 non-null object
2 pw 2 non-null object
dtypes: object(3)
memory usage: 176.0+ bytes
seq id pw
0 1 kim 111
1 2 lee 222 None
방법3) 파일(csv,txt,excel,html,hdf...) 데이터 담아서 만들기¶
In [86]:
import pandas as pd #pandas.py
import numpy as np
df = pd.read_csv('c:\\AI\\pythonProject\\venv\\pkg\\book\\data\\total_sales_data.csv') #sep=','
print(df)
print(df.info())
df.iloc[[3,4],[1,2]]
매장명 제품종류 모델명 판매 재고
0 A 스마트폰 S1 1 2
1 A 스마트폰 S2 2 5
2 A TV V1 3 5
3 B 스마트폰 S2 4 6
4 B 스마트폰 S1 5 8
5 B TV V1 6 9
6 C 스마트폰 S2 2 4
7 C TV V1 3 6
8 C TV V2 7 9
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 9 entries, 0 to 8
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 매장명 9 non-null object
1 제품종류 9 non-null object
2 모델명 9 non-null object
3 판매 9 non-null int64
4 재고 9 non-null int64
dtypes: int64(2), object(3)
memory usage: 488.0+ bytes
None
Out[86]:
제품종류 | 모델명 | |
---|---|---|
3 | 스마트폰 | S2 |
4 | 스마트폰 | S1 |
In [87]:
df.tail(2)
Out[87]:
매장명 | 제품종류 | 모델명 | 판매 | 재고 | |
---|---|---|---|---|---|
7 | C | TV | V1 | 3 | 6 |
8 | C | TV | V2 | 7 | 9 |
'Python > 데이터 분석' 카테고리의 다른 글
(데이터 분석) 파이썬 - Pandas DataFrame SQL처럼 활용하기(CRUD) (0) | 2022.01.07 |
---|---|
(데이터 분석)파이썬 - Pandas_dataframe (0) | 2022.01.06 |
(데이터 분석) Pandas 가이드북 링크 (0) | 2022.01.05 |
(데이터 분석)파이썬- datetime (0) | 2022.01.04 |
(데이터 분석)파이썬 -오라클 가이드북 (0) | 2022.01.04 |
댓글