어느덧 날이 쌀쌀해지고 시험일도 훌쩍 다가왔습니다.
업무를 핑계로, 추위를 핑계로 미뤄왔던 지난날을 뒤돌아 보면 불합격을 주고 싶습니다.
하지만 직장인은 여기서 끝날 수 없습니다. 되든 안되는 최대한 해봐야죠...
조금 속도가 빨라질 수 있는 점 양해 부탁드리겠습니다.
혹시 질문사항이 혹시라도 있으시다면 성심껏 답변 드리겠습니다. (오류 지적 환영!)
이전글 보기
2023.11.06 - [데이터 분석/빅분기] - 빅분기 실기 준비 - (1) 데이터 불러오기 및 살펴보기
필터링 하기¶
import pandas as pd
data_path = 'https://raw.githubusercontent.com/zero-bacteria/BBG_Study/master/sample_data/shipping_data.csv'
df = pd.read_csv(data_path, encoding='cp949')
print(df.columns)
Index(['product_code', 'pol', 'pod', 'shipping_date', 'rev', 'currency'], dtype='object')
조회에 이어 필요한 조건에 따른 데이터를 찾아보는 작업을 해보겠습니다.
J차장 : 우리 3만달러 넘는 오더가 몇개나 있지?
# rev = revenue
res = len(df[df.rev >= 30000])
df[df.rev >= 30000].value_counts()
print(res)
109
my_condition = df.rev >= 30000
df[my_condition].product_code.value_counts()
CA30 36
WP50 28
AB12 26
PK99 19
Name: product_code, dtype: int64
print(res)
109
우리 PK99 제품 매출이 얼마정도지?
res = df[df.product_code == 'PK99'].rev.sum()
print(f'달러로 {res}달러로 확인됩니다!')
달러로 1293822달러로 확인됩니다!
원화로 하면 얼마지?
print(res*1300)
1681968600
우리 가장 매출이 높은 날이 언제지?
res = df.loc[df.rev == df.rev.max(),'shipping_date'].values[0]
print(f'{res}에, {df.rev.max()}달러치 나갔습니다')
2023-01-26 0:23에, 49781달러치 나갔습니다
그 선적 번호좀 불러줘봐
res = df.loc[df.rev == df.rev.max(),'shipping_date'].index.values[0]
print(f'{res} 번 입니다~~')
22 번 입니다~~
이같은 내용이 맞는지 정렬을 통해 확인해 보겠습니다.
df.sort_values(by='rev', ascending=False)
product_code | pol | pod | shipping_date | rev | currency | |
---|---|---|---|---|---|---|
22 | WP50 | 부산 | VN | 2023-01-26 0:23 | 49781 | USD |
71 | WP50 | 부산 | JP | 2023-03-29 15:57 | 49740 | USD |
130 | AB12 | 부산 | CN | 2023-05-16 3:25 | 49722 | USD |
121 | WP50 | 부산 | VN | 2023-08-10 4:17 | 49527 | USD |
167 | WP50 | 부산 | CN | NaN | 49507 | USD |
... | ... | ... | ... | ... | ... | ... |
97 | PK99 | 부산 | VN | 2023-03-21 3:57 | 10498 | USD |
66 | WP50 | 부산 | CN | 2023-09-09 23:37 | 10340 | USD |
165 | PK99 | 부산 | CN | 2023-06-17 11:38 | 10318 | USD |
183 | CA30 | 부산 | CN | 2023-01-12 23:09 | 10291 | USD |
191 | PK99 | 인천 | VN | 2023-02-27 15:17 | 10283 | USD |
200 rows × 6 columns
revenue 즉 매출총액이 앞서 언급한 선적 1월 26일에 49781달러가 나갔음을 확인 할 수 있습니다.
또한 해당 데이터에는 별도의 코드 없이 index로 번호를 지정해놓았는데 index역시 22임을 확인할 수 있습니다.
하지만 위의 데이터는 저장되지 않은 조회의 상태로 다시 df를 조회하면 그대로 나온다는 것을 알수 있습니다.
또한 순서를 정렬해도 index는 바뀌지 않는다는 점 또한 알 수 있습니다. 이를 하나씩 해결해 보겠습니다.
print(df)
product_code pol pod shipping_date rev currency
0 PK99 인천 VN 2023-07-31 20:21 27599 USD
1 AB12 부산 VN 2023-10-08 15:23 29664 USD
2 WP50 인천 TW 2023-01-13 8:01 20372 USD
3 PK99 부산 JP 2023-10-30 19:44 43310 USD
4 CA30 인천 VN 2023-05-03 17:58 38521 USD
.. ... .. .. ... ... ...
195 PK99 부산 TW 2023-05-01 19:59 33543 USD
196 PK99 부산 JP 2023-08-16 11:28 23101 USD
197 CA30 인천 JP 2023-10-22 3:39 45426 USD
198 PK99 인천 CN NaN 14349 USD
199 PK99 인천 TW 2023-09-23 10:56 17256 USD
[200 rows x 6 columns]
df2 = df.sort_values(by='rev', ascending=False).reset_index(drop=True)
print(df2)
product_code pol pod shipping_date rev currency
0 WP50 부산 VN 2023-01-26 0:23 49781 USD
1 WP50 부산 JP 2023-03-29 15:57 49740 USD
2 AB12 부산 CN 2023-05-16 3:25 49722 USD
3 WP50 부산 VN 2023-08-10 4:17 49527 USD
4 WP50 부산 CN NaN 49507 USD
.. ... .. .. ... ... ...
195 PK99 부산 VN 2023-03-21 3:57 10498 USD
196 WP50 부산 CN 2023-09-09 23:37 10340 USD
197 PK99 부산 CN 2023-06-17 11:38 10318 USD
198 CA30 부산 CN 2023-01-12 23:09 10291 USD
199 PK99 인천 VN 2023-02-27 15:17 10283 USD
[200 rows x 6 columns]
.reset_index
를 실행할때 drop을 사용하지 않으면 이전의 인덱스가 새로운 컬럼으로 등록이 됩니다!
추가적으로 필터링 할 수 잇는 항목들입니다.
데이터 타입으로 필터링하거나, 혹은 quntile (분위수 - 필기를 공부할때 들었을 것으로 생각합니다)를 조회할 수 있습니다.
df.select_dtypes(include = int)
rev | |
---|---|
0 | 27599 |
1 | 29664 |
2 | 20372 |
3 | 43310 |
4 | 38521 |
... | ... |
195 | 33543 |
196 | 23101 |
197 | 45426 |
198 | 14349 |
199 | 17256 |
200 rows × 1 columns
df.rev.quantile(0.25)
22063.75
'데이터 분석 > 빅분기' 카테고리의 다른 글
빅분기 실기 준비 - (1) 데이터 불러오기 및 살펴보기 (0) | 2023.11.06 |
---|---|
빅분기 실기 준비 - (0) INTRO (1) | 2023.10.30 |