SECTION 01 데이터분석 (1)

데이터셋의 기초 정보 출력하기

데이터 불러오기 위해서 read_csv() 함수 사용
'..'라는 경로는 상위폴더를 의미

# pandas 모듈 임포트
import pandas as pd
# read_csv() 함수로 데이터를 Dataframe 형태로 불러옵니다.
# pd.read_csv("파일경로를 포함한 파일명", sep="구분자")
# raw data를  상대 경로로 불러오기
file_path = '../1208data/chipotle.tsv'
chipo = pd.read_csv(file_path, sep='\t')
print(chipo.shape)
print("------------------------------")
print(chipo.info())
실행결과
(4622, 5)
------------------------------
<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

shape는 데이터의 행과 열의 크기를 반환
info()는 행과 열의 구성 정보

Chipotle 데이터의 행과열, 데이터 확인

# chipo라는 데이터 프레임에서 순서대로 10개의 데이터를 보여줍니다.
chipo.head(10)
print(chipo.columns)
print("-------------------------------")
print(chipo.index)

실행결과
Index(['order_id', 'quantity', 'item_name', 'choice_description',
       'item_price'],
      dtype='object')
--------------------------------
RangeIndex(start=0, stop=4622, step=1)

head(10) 함수는 첫 10개의 데이터를 테이블 형태로 출력
columns(행의목록), index(열의목록)를 호출하면 데이터의 행과 열에 대한 정보를 함께 출력

  • order_id : 주문번호
  • quantity : 아이템의 주문 수량
  • item_name : 주문한 아이템의 이름
  • choice_description : 주문한 아이템의 상세 선택 옵션
  • item_price : 주문 아이템의 가격 정보

quantity와 item_price의 수치적 특징

quantity 와 item_price 이 두 피처는 연속형 피처
연속형 피처는 키와 몸무게처럼 어떠한 값도 가질수 있는 연속적인 숫자형태

다음 코드의 출력 결과는 describe() 함수가 나타낸 피처의 기초 통계량
하지만 현재 유일하게 존재하는 피처는 quantity뿐이기 때문에, quantity에 대한 정보만을 출력

#order_id는 숫자의 의미를 가지지 않기 때문에 str으로 변환합니다.
chipo['order_id'] = chipo['order_id'].astype(str)
print(chipo.describe()) # chipo 데이터 프레임에서 수치형 피처들의 기초 통계량을 확인합니다.
실행결과
          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

order-id와 item_name의 개수

order_id와 item_name 이 두 피처는 범주형 피처이기 때문에
unique() 함수를 사용. 이를 통해 피처 내에 몇개의 범주가 있는지 확인

#unique()함수로 범주형 피처의 개수 출력하기
print(len(chipo['order_id'].unique())) # order_id의 개수를 출력합니다.
print(len(chipo['item_name'].unique()))
실행결과
1834
50

가장 많이 주문한 아이템 Top 10

분석하기 위해 DataFrame['column']의 형태에 value_counts() 함수를 적용하는 방식 사용
DataFrame['column']은 시리즈 라는 객체를 반환하는데,
value_counts() 함수는 오로지 이러한 시리즈 객체에만 적용되기 때문

#가장 많이 주문한 아이템 top 10 출력하기
item_count = chipo['item_name'].value_counts()[:10]
for idx, (val, cnt) in enumerate(item_count.iteritems(),1):
    print("Top", idx, ":", val, cnt)
실행결과
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()함수는 데이터 프레임에서 특정 피처를 기준으로 그룹을 생성
이를 통해 그룹별 연산을 적용가능

아이템별 주문 개수와 총량 구하기

#아이템별 주문 개수를 출력합니다
order_count = chipo.groupby('item_name')['order_id'].count()
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
#아이템별 주문 총량을 출력합니다
item_quantity = chipo.groupby('item_name')['quantity'].sum()
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

시각화

tolist()와 넘파이의 arange()함수를 이용해 x_pos를 선언, 0~50까지 숫자를 그래프의 x축으로 사용
y값(order_cnt)에는 주문 총량에 해당하는 값인 item_quantity.values.tolist()를 넣어줌

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
#아이템별 주문의 총량을 막대 그래프로 시각화
item_name_list = item_quantity.index.tolist()
#numpy.arange(시작, 끝, 간격)으로 배열 만들기
x_pos = np.arange(len(item_name_list))
order_cnt = item_quantity.values.tolist()
#
plt.bar(x_pos, order_cnt, align='center')
plt.ylabel('ordered_item_count')
plt.title('Distribution of all orderd item')
#
plt.show()

좋은 웹페이지 즐겨찾기