convenient_store.csv 파일을 이용해서 서울시 편의점 데이터를 분석했다.
사실 분석이라기 보다는 파이썬과 pandas, matplotlib를 사용하는 방법이라고 볼 수 있다.
=============================== Python ===============================
import pandas as pd
data = pd.read_csv('convenient_store.csv') # 데이터 가져오기
data.info() # 데이터 정보 확인
'''
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 177 entries, 0 to 176
Data columns (total 7 columns):
area 177 non-null object
company 177 non-null object
hourly_wage 177 non-null int64
area1 177 non-null object
area2 177 non-null object
outlier 177 non-null int64
name 177 non-null object
dtypes: int64(2), object(5)
memory usage: 9.8+ KB
'''
print(data.describe()) # 요약. 숫자로 되어있는 자료만 요약이 된다.
'''
hourly_wage outlier
count 177.000000 177.0
mean 5787.627119 0.0
std 352.318646 0.0
min 5580.000000 0.0
25% 5580.000000 0.0
50% 5600.000000 0.0
75% 6000.000000 0.0
max 7500.000000 0.0
'''
print(data.hourly_wage.describe()) # 특정 컬럼에 대한 요약. 여기서는 hourly_wage컬럼에 대한 요약.
'''
count 177.000000
mean 5787.627119
std 352.318646
min 5580.000000
25% 5580.000000
50% 5600.000000
75% 6000.000000
max 7500.000000
Name: hourly_wage, dtype: float64
'''
print(data.area.describe()) # area 컬럼에 대한 요약
'''
count 177
unique 117
top 강남구 논현동
freq 7
Name: area, dtype: object
'해석'
총 갯수는 177개의 데이터, 117개의 개별 데이터와 이름이 동일한 데이터가 60개가 있다.
제일 많이 나온 데이터는 '강남구 논현동'이고 7회 등장했다.
'''
# 시급이 6000원 이상인 데이터만 추출
high_wage = data[data.hourly_wage >= 6000]
print(high_wage)
# high_wage컬럼을 내림차순으로 정렬한다. 오름차순은 ascending=1로 하면 된다.
print(high_wage.sort_values(by='hourly_wage', ascending=0))
# 마포구에 있는 편의점 중 시급이 6000원 이상인 데이터만 추출
# 구와 동은 area1, area2로 나뉘어 있음. 때문에 area1로 검색
b = data[(data.hourly_wage >= 6000) & (data.area1 == '마포구')]
print(b)
# company에 문자열 'CU'가 들어간 데이터만 추출
cu = data[data.company.str.contains('CU')]
print(cu)
# seoul 컬럼에 in seoul이라는 데이터를 추가
data['seoul'] = 'in seoul'
print(data.head())
# more_than_6000이라는 컬럼을 만들어 data.hourly_wage >= 6000인 boolean값을 저장한다.
data['more_than_6000'] = data.hourly_wage >= 6000
print(data.more_than_6000)
# more_than_6000 컬럼이 True인 것들만 요약
cu = data[data.more_than_6000 == True].describe()
print(cu)
'''
hourly_wage outlier
count 47.000000 47.0
mean 6275.531915 0.0
std 360.517795 0.0
min 6000.000000 0.0
25% 6000.000000 0.0
50% 6200.000000 0.0
75% 6500.000000 0.0
max 7500.000000 0.0
'''
# x > 6000 이면 A, 아니면 B 그룹으로 분류하는 함수
def more_than_6000(x):
if x > 6000:
return 'A Group'
else:
return 'B Group'
# data의 more_than_6000 컬럼에 위의 함수를 이용해 A,B 그룹으로 분리.
data['more_than_6000'] = data.hourly_wage.map(lambda x : more_than_6000(x))
print(data)
# more_than_6000 컬럼의 값이 True인 것들 중 area1, hourly_wage 컬럼만 따로 data2에 저장한다.
# 우리는 위에 A Group으로 저장했으므로 True가 아닌 A Group으로 지정해야 한다.
data2 = data[data.more_than_6000 == 'A Group'][['area1','hourly_wage']]
print(data2)
# data2를 hourly_wage 컬럼의 내림차순으로 정렬한다.
data2 = data2.sort_values(by='hourly_wage',ascending=0)
# data2를 data2.csv로 저장한다.
data2.to_csv('data2.csv', index=0)
# matplotlib.pyplot을 이용해서 data를 시각화한다.
import matplotlib.pyplot as plt
# hourly_wage를 히스토그램으로 표현한다. bins=10은 히스토그램의 그래프 넓이가 10이라는 듯
data.hourly_wage.hist(bins=10)
#만든 플롯을 띄운다.
plt.show()
# 박스플롯을 만든다. x축에 area1을 놓고 y축에 hourly_wage를 출력한다.
data.boxplot(column='hourly_wage', by='area1')
plt.show() # 한글이 깨진다.
### 한글 깨짐을 해결해보기
import matplotlib
font_name = matplotlib.font_manager.FontProperties(fname='C:/windows/Fonts/malqun.ttf').get_name()
matplotlib.rc('font', family=font_name)
print(font_name)
# vert=False로 xy축을 바꿀 수 있다.
data.boxplot(column='hourly_wage', by='area1', vert=False)
plt.xticks(fontsize=10) # x축의 폰트 크기를 바꾼다.
plt.yticks(fontsize=10) # y축의 폰트 크기를 바꾼다.
plt.show()
=============================== Python ===============================
ref.
jsideas / 파이썬 초보 - pandas와 matplotlib을 활용한 간단 분석 part 1, part 2
http://jsideas.net/python/2015/08/10/histogram_tutorial.html
'프로그래밍 > Python, R 프로그래밍' 카테고리의 다른 글
[Python DataStreamOut] csv, json, xlsx로 데이터 내보내기 (0) | 2018.06.13 |
---|---|
[Python] pandas에서 특정 문자열이 들어간 데이터를 제외하기 (0) | 2018.06.12 |
[Python] Python 16일차(예제로 배우는 파이썬 데이터 시각화) (0) | 2018.06.11 |
[Python] dialect 란? (0) | 2018.06.11 |
[Python] Python 15일차(예제로 배우는 파이썬 데이터 시각화) (0) | 2018.06.07 |