[Python]판다스 데이터프레임, 맷플롯립 활용기
1. 데이터를 올린다.
chipo = pd.read_csv(io.BytesIO(uploaded['chipotle.tsv']),sep='\t')
pd.read_csv -> read_csv 함수는 Pandas 라이브러리에서 제공하는 함수로, CSV 파일을 읽어와 데이터프레임 형태로 변환
2.shape 사용
코드
print(chipo.shape)
결과
(4622, 5)
shape는 데이터프레임의 행과 열의 크기를 제공해준다.
3. info() 사용
코드
print(chipo.info())
결과
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4622 entries, 0 to 4621
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 order_id 4622 non-null int64
1 quantity 4622 non-null int64
2 item_name 4622 non-null object
3 choice_description 3376 non-null object
4 item_price 4622 non-null object
dtypes: int64(2), object(3)
memory usage: 180.7+ KB
None
- info()
- 데이터프레임의 행과 열의 구성정보를 제공

데이터프레임의 열이름의 정보를 가지고 있다.

데이터의 유무를 나타내고 있다.
위의 chipo.shape을 통해 4622,5라는 정보를 알았고 행이 4622개, 열이 5개라는 걸 알게 되었다.
이때 non-null은 비어있지 않았다는 뜻으로, 데이터가 존재한다, 즉 차있다라는 것을 의미한다.
3376 non-null은 나머지는 비어있다는 뜻이 됨

int64 : 정수
object : 문자형 타입
3. columns
코드
print(chipo.columns)
결과
Index(['order_id', 'quantity', 'item_name', 'choice_description',
'item_price'],
dtype='object')
- columns
- 컬럼에 대한 정보를 나타낸다.
4. index
코드
print(chipo.index)
결과
RangeIndex(start=0, stop=4622, step=1)
- index
- 행에 대한 인덱스 정보를 나타낸다
데이터프레임의 피처
1) 수치형 피처
- describe() 함수로 수치형 피처들의 기초 통계량 확인하기
- 연속형 피처 : 어떤 구간 안의 모든 값을 데이터로 표현 가능 ex) 키, 몸무게
- 비연속형 피처 : 셀 수 있으며, 일정 구간 안에서 정해진 몇 개의 값을 가져야 함 ex)나이
2) 범주형 피처
- unique()함수로 범주형 피처의 개수 출력하기 -> 몇개의 범주가 있는지 확인
- 순서 있는 범주형 피처 : 순서가 있으나 수치는 아니다 ex)학점
- 순서 없는 범주형 피처 : 순서 없는 범주형 피처 데이터가 구분되면서도 순서가 없음 ex)혈액형
1. describe를 통해 기초 통계량 확인하기
#order_id는 숫자의 의미를 가지지 않기 때문에 astype를 통해 형변환을 해준다.
chipo['order_id'] = chipo['order_id'].astype(str)
#describe를 통해 기초 통계량을 확인한다.
print(chipo.describe())
결과
quantity
count 4622.000000
mean 1.075725
std 0.410186
min 1.000000
25% 1.000000
50% 1.000000
75% 1.000000
max 15.000000
평균이 1.07로 한 사람당 약 1개씩 구매한다는 사실을 알 수 있다.
2) unique()
#unique로 범주형 피처의 개수 출력하기
print(len(chipo['order_id'].unique()))
print(len(chipo['item_name'].unique()))
결과
1834
50
count_values() 함수
: 각 value가 몇 개 있는지 반환, 오름차순이 기본이다.
#가장 많이 주문한 아이템 Top10
#value_counts()는 각 value가 몇 개 있는지 반환한다.
item_count = chipo['item_name'].value_counts()[:10] # -> 기본 오름차순
item_count_reverse = chipo['item_name'].value_counts(sort=True, ascending=False)[:10]
print(item_count)
print('-------------------------')
print(item_count_reverse)
결과
Chicken Bowl 726
Chicken Burrito 553
Chips and Guacamole 479
Steak Burrito 368
Canned Soft Drink 301
Steak Bowl 211
Chips 211
Bottled Water 162
Chicken Soft Tacos 115
Chips and Fresh Tomato Salsa 110
Name: item_name, dtype: int64
-------------------------
Chicken Bowl 726
Chicken Burrito 553
Chips and Guacamole 479
Steak Burrito 368
Canned Soft Drink 301
Steak Bowl 211
Chips 211
Bottled Water 162
Chicken Soft Tacos 115
Chips and Fresh Tomato Salsa 110
Name: item_name, dtype: int64
+ enumerate와 함께 깔끔하게 반환해보자
#enumerate와 함께 반환해보자
for i, (val,cnt) in enumerate (item_count.items(),1):
print("Top",i,":",val,cnt)
#item -> 키, 쌍을 반환
Top 1 : Chicken Bowl 726
Top 2 : Chicken Burrito 553
Top 3 : Chips and Guacamole 479
Top 4 : Steak Burrito 368
Top 5 : Canned Soft Drink 301
Top 6 : Steak Bowl 211
Top 7 : Chips 211
Top 8 : Bottled Water 162
Top 9 : Chicken Soft Tacos 115
Top 10 : Chips and Fresh Tomato Salsa 110
groupby : 열이름으로 묶어주기, sql에서 groupby 생각해주면 될 듯
#groupby ->열이름으로 묶어주기
order_count = chipo.groupby('item_name')['order_id'].count() #동일한 아이템 이름으로 묶어주고, 묶인 아이템 이름으로 가진 아이템 아이디가 몇개 있는지 센다.
print(order_count[:10])
item_name
6 Pack Soft Drink 54
Barbacoa Bowl 66
Barbacoa Burrito 91
Barbacoa Crispy Tacos 11
Barbacoa Salad Bowl 10
Barbacoa Soft Tacos 25
Bottled Water 162
Bowl 2
Burrito 6
Canned Soda 104
Name: order_id, dtype: int64
groupby를 통해 수량 더해주기
item_quantity = chipo.groupby('item_name')['quantity'].sum()
print(item_quantity[:10])
item_name
6 Pack Soft Drink 55
Barbacoa Bowl 66
Barbacoa Burrito 91
Barbacoa Crispy Tacos 12
Barbacoa Salad Bowl 10
Barbacoa Soft Tacos 25
Bottled Water 211
Bowl 4
Burrito 6
Canned Soda 126
Name: quantity, dtype: int64
맷플롯립으로 시각화
아이템별 주문 총수량을 막대그래프로 시각화해보자
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
#아에팀별 총수량의index를 리스트로 변환한다.
item_name_list = item_quantity.index.tolist()
x_pos= np.arange(len(item_name_list))
order_cnt = item_quantity.values.tolist()
plt.bar(x_pos,order_cnt,align='center')
plt.ylabel('orderde_quantity_sum')
plt.title("Distribution of all ordered item")
plt.show()
