프로그래밍/python

Python_판다스(pandas)_(2)

gunnwu 2023. 2. 11. 21:14

 

https://www.kaggle.com/datasets/jr2ngb/superstore-data

 

superstore_data

retail sales

www.kaggle.com

1. 판다스로 csv파일 불러오고 조작하기

1-1. 데이터파일은 캐글에 올라와있는 superstore 데이터를 활용.

 

[데이터 설명]

-4 년 동안 글로벌 슈퍼마켓의 소매 데이터 세트

[columns설명]

shipmode: 배송모드

segment : 고객군

country : 나라

city :도시

state : 주

postal code :우편번호

region : 지역방위

category :제품 카테고리

sub-category : 하위카테고리

sales :판매액

quantity : 수량

discount :할인율

profit : 이익

 

1-2.  항상 먼저 확인할 메소드

head(): 상위 데이터 확인  

tail(): 하위 데이터 확인  

shape: 데이터프레임 크기  

index: 인덱스 정보 확인  

values: 값 정보 확인  

columns: 열 정보 확인  

dtypes: 열 자료형 확인  

info(): 열에 대한 상세한 정보 확인  

describe(): 기초통계정보 확인  

 

1-3. 파일 불러오기

# df =pd.read_csv('파일경로',encoding='필요한 형식')

store = pd.read_csv('C:\\Users\\User\\data\\SampleSuperstore.csv',encoding='CP949')
store.head()

#파일경로를 변수로 선언하고 넣어도 됨
# path='C:\\Users\\User\\data\\SampleSuperstore.csv',encoding='CP949'
# store = pd.read_csv(path,encoding='CP949')

superstore 파일을 데이터 프레임으로 불러옴

2.데이터 탐색하기

#데이터 형태 확인
store.shape
# 실행결과
#(9994, 13)

#데이터 정보
store.info()

info 실행결과

#기술통계확인
store.describe()

실행결과

어떤 배송형태가 가장 많을까? => value_count() 활용

#어떤 배송모드가 가장 많은지
store['Ship Mode'].value_counts()

Standard Class 이용이 가장 많다.

#Profit이 높은순으로 내림차순 정렬
#ascending =True는 오름차순 정렬

pratice = store.sort_values(by='Profit',ascending=False)
pratice

실핼결과

정렬하면서 인덱스가 무의미하게 섞였기 때문에 초기화 시켜주기

#인덱스 초기화
pratice.reset_index(drop=True, inplace=True) #drop=True는 기존 인덱스 제거
pratice.head()

인덱스가 초기화되어 정렬된걸 알 수 있다.

어떤 고객군이 가장 많은지 궁금하다 => 최빈값을 활용

# 최빈값 메소드 mode()
store['Segment'].mode()

consumer가 제일 많다

총 수량의 합계가 궁금하다 => sum()

#열기준 합을 구해야 한다 (전체 행을 더하라)=>axis=0
store[['Quantity']].sum(axis=0)

그렇다면 매출평균이 어떻게 될까? 기술통계에서 확인할 수 있지만 mean 매소드를 통해서 확인도 가능

#superstore 매출평균
store[['Sales']].mean()

describe()에서 확인한것과 같다.

3. 데이터 조회

특정 열과 행을 조회하고 싶을 수 있다. 위에서 이미 사용했지만 .loc라는 메소드로 다양하게 접근해본다.

#열 조회
#df.loc[ : , [열 이름1, 열 이름2,...]]
#열은 생략가능 행은 생략불가능


#df[[열 이름1, 열 이름2,...]] => 일반적인 구문

store.loc[:,['City','State']]
store[['City','State']]

범위를 지정할때는 loc를 꼭 사용하자

#범위를 지정할땐 loc 쓰자
store.loc[ :, 'City':'State']

특정조건을 만족하는 데이터만 뽑는것도 가능하다. 매출액이 평균이상인 것들만 조회해보자.

#df.loc[조건] 형태로 조건을 지정해 조건에 만족하는 데이터만 조회
# 매출액이 평균이상인것들만 조회


sales_mean = store['Sales'].mean()
store.loc[(store['Sales'] >= sales_mean)].head()

평균이상의 데이터들로 구성된 새로운 데이터프레임이 됨

#조건에 맞는 하나의 열만 조회
df = store.loc[(store['Sales'] >= sales_mean),['City']]
df

그 중에서 도시만 볼게

그렇다면 매출액이 평균이상인 city 중 어디가 제일 많을까? =>vlaue_count() 사용

#매출액이 평균이상인 city는 뉴욕이 젤 많다
df.value_counts()

isin 구문 

 

isin([값1, 값2,..., 값n]): 값1 또는 값2 또는...값n인 데이터만 조회

#city중 뉴욕과 LA가 포함된 데이터들만 조회

store.loc[ store['City'].isin(['New York City',"Los Angels"]) ]

 

4. 데이터 집계

-범주값을 기준으로 연속값을 집계

-as_index=False를 설정하면 행 번호를 기반으로 한 정수 값이 인덱스로 설정

-합,평균,중앙값,표준편차 등등 을 집계

# 도시별 매출액, 이익의 합
store.groupby(by='City', as_index=False)[ ['Sales','Profit'] ].sum()

# 도시별 매출액, 이익의 중앙값
store.groupby(by='City', as_index=False)[ ['Sales','Profit'] ].median()

# 도시별 매출액, 이익의 표준편차
store.groupby(by='City', as_index=False)[ ['Sales','Profit'] ].std()

# 도시별 매출액, 이익의 평균
store.groupby(by='City', as_index=False)[ ['Sales','Profit'] ].mean()

# 도시별 매출액, 이익의 최대값
store.groupby(by='City', as_index=False)[ ['Sales','Profit'] ].max()

sum()의 실행결과

# 집계 기준열을 여럿 설정가능
# .sum()앞에 아무열도 지정하지 않으면 기준열 이외의 모든열에 대한 집계가 이루어짐
store.groupby(by=['City','State'], as_index=False).sum()

실행결과

다음은 시각화도 해보면서 데이터탐색을 더 해볼 예정이다.