qcoding

[데이터분석 실습][데이터전처리]구글플레이스토어 데이터 분석 본문

Python 데이터분석

[데이터분석 실습][데이터전처리]구글플레이스토어 데이터 분석

Qcoding 2022. 7. 29. 16:40
반응형

## https://www.kaggle.com/datasets/lava18/google-play-store-apps

 

Google Play Store Apps

Web scraped data of 10k Play Store apps for analysing the Android market.

www.kaggle.com

데이터를 활용하여 데이터 탐색하기

data = pd.read_csv('./googleplaystore.csv')

## 필드명
filed_name = data.columns
print(f"필드명 : {filed_name}")

## 필드갯수
filed_number = len(data.columns)
print(f"필드명 : {filed_number} 개")

## 데이터의 수
data_number = len(data)
print(f"데이터의 수 : {data_number}")

## 기본정보확인

## 기본 정보확인
data.info()

## 결측지 확인
data.isna().sum()

# Installs 필드에 'Free'값으로 되어 있는 데이터를 필터
## installs 필드에 'Free'값으로 되어있는 데이터 필터
data_fil=data.copy()
condition_free = data['Installs'] != 'Free'
data_fil= data_fil.loc [condition_free] 
data_fil
 
# Installs 필드의 데이터에서 +와 ,를 제거한 후 숫자 타입변경
# "+" 제거
data_fil['Installs']=data_fil.loc[:,'Installs'].apply(lambda x:x[:-1] if "+" in x else x)

# ',' 제거
data_fil['Installs']=data_fil.loc[:,'Installs'].apply(lambda x:x.replace(',',''))

# 숫자 타입으로 변환
data_fil['Installs']=data_fil.loc[:,'Installs'].astype("int")

print(f'data 확인 : ')
{display(data_fil.head(3))}
print(f"type 확인 : {data_fil['Installs'].dtype}")

# Size 필드에 'Varies with device' 값 제거

## size 어떤 값들로 이루어 져있는 지 확인. 
## 총 461개의 고윳값으로 
## Varies with device 는 총 1695개가 존재함
data_fil['Size'].value_counts()

## size 필드에 'Varies with device'값으로 되어있는 데이터 필터
condition_value = data_fil.loc[:,'Size'] != 'Varies with device'
data_fil = data_fil.loc[condition_value] 

## Varies with device가 필터링 된 후 기존 10840 - 1695 = 9145의 데이터 갯수가 남음.
data_fil['Size']

 

#Reviews 데이터를 숫자로 변경

## 변경전 데이터타입 = 문자열 확인
before_type=data_fil.loc[:,'Reviews'].dtype
print(f'변경전 데이터 타입 : {before_type}')
## 타입변경
data_fil.loc[:,'Reviews'] = data_fil.loc[:,'Reviews'].astype('int')
after_type=data_fil['Reviews'].dtype
print(f'변경후 데이터 타입 : {after_type}')

 
#Installs가 0 초과인 데이터로 필터 및  Rating, Intalls에서 값이 Nan인 데이터를 제거
## Installs 가 0초과인 데이터로 필터
visual_data = visual_data.loc[visual_data['Installs']>0]

## Rating, Installs에서 값이 Nan인 데이터를 제거함
# Nan 갯수 확인
print(visual_data[['Rating','Installs']].isna().sum())
print(f"Nan제거 전 데이터 총 갯수 : {len(visual_data)}")

# Nan 제거
visual_data=visual_data.dropna(subset=['Rating','Installs'] , axis=0)
# 제거 후 갯수확인
print(f"Nan제거 후 데이터 총 갯수 : {len(visual_data)}")

#X축이 Rating, Y축이 Installs인 점 그래프를 그리고 이 때 Installs의 값이 Rating에 비해 지나치게 크기 때문에 log10로 처리함.

fig , ax = plt.subplots()
fig.set_size_inches(11,5)

plt.scatter(x=visual_data['Rating'] , y=np.log10(visual_data['Installs']) )
plt.title('Rating VS Installs', fontsize=25)
plt.xlabel('Rating', fontsize=20)
plt.ylabel('Installs', fontsize=20)

 

# X축이 Rating, Y축이 Reviews인 점 그래프를 그리기 이 때, Reviews의 값에 log10을 씌우고, Type으로 GroupBy 하여 Type의 값이 'Free'인 경우는 'red', 'Paid'인 경우는 'green' 으로 표시
## group by 사용


fig , ax = plt.subplots()
fig.set_size_inches(11,5)

group=visual_data.groupby('Type',as_index=False)

color = {'Free' : 'red' , 'Paid' : 'green'}

for label, item  in group:
  plt.scatter(
            x=item['Rating'],
            y=np.log10(item['Reviews']),
            c=color[label],
            label=label
            )
plt.title('Rating VS Reviews', fontsize=25)
plt.xlabel('Rating', fontsize=20)
plt.ylabel('Reviews', fontsize=20)
plt.legend()

#Rating, Intalls가 Nan인 데이터는 제거

# Nan 제거
print(f"Nan제거 후 데이터 총 갯수 : {len(analysis_data)}")

analysis_data=analysis_data.dropna(subset=['Rating','Installs'] , axis=0)

# 제거 후 갯수확인
print(f"Nan제거 후 데이터 총 갯수 : {len(analysis_data)}")
 
# Category별 구글 플레이 스토어 점유율을 파이 그래프 그리기
## 고윳값 확인
analysis_data['Category'].nunique()

## 그래프 그리기전에 변수처리
# 점유율 확인
category_percent= (analysis_data['Category'].value_counts() / analysis_data['Category'].value_counts().sum())*100

## 그래프 그리기
fig , ax = plt.subplots()
fig.set_size_inches(11,8)
plt.pie(category_percent, labels=category_percent.index, autopct='%.2f%%',shadow=True)
plt.show()

# 점유율 상위 5개의 카테고리를 구하고, 각각의 Rating 평균, Installs 평균 구하기
## 점유율 상위 5개의 카테고리를 구함
percent_top_5 = category_percent[:5].index

## 상위 5개의 카테고리의 데이터를 필터링
analysis_data_fil=analysis_data.loc[analysis_data['Category'].isin(percent_top_5)]    

## 각각의 Rating 평균 / Installs의 평균을 계산함.
group=analysis_data_fil.groupby('Category',as_index=False).agg(
    Rating_mean = ('Rating','mean'),
    Installs_mean = ('Installs','mean')
).round(2)
group

#점유율 상위 5개의 카테고리중 Rating 평균이 가장 높은 Category를 구하고 해당 Category 데이터를 Type별로 GroupBy한 후 Rating, Installs 평균 구하기

## 점유율 상위 5개의 카테고리중 Rating 평균이 가장 높은 Category 확인
## Game이 제일 높은 카테고리
group.sort_values('Rating_mean' , ascending=False)

## Game 카테고리 데이터를 Type 별로 Group By 수행하고 Rating과 평균을 계산함
group_game=analysis_data.loc[analysis_data['Category']=='GAME'].groupby('Type',as_index=False).agg(
          Rating_mean = ('Rating','mean'),
          Installs_mean = ('Installs','mean')
).round(2)

group_game

반응형
Comments