Crawling/데이터 시각화
데이터시각화_10가지_Dual Axis, 파레토 chart
km1n
2022. 1. 6. 16:39
파이썬 시각화 차트 종류
1. Column/Bar chart
2. Dual Axis, 파레토 chart
3. Pie chart
4. Line chart
5. Scatter chart
6. Bubble chart
7. Heat map
8. Histogram
9. Box plot
10. Geo chart
import pandas as pd
import matplotlib.pyplot as plt
marathon_2015_2017 = pd.read_csv('./marathon_2015_2017.csv') #늘 주의
#### 18세~59세 데이터만 가져오기 : isin()
runner_18_59 = marathon_2015_2017[marathon_2015_2017.Age.isin(range(18, 60))]
runner_18_59
#x축 : Age 나열
#### 18~59세 나이대별로 카운트 : value_counts()
runner_18_59_counting = runner_18_59.Age.value_counts()
runner_18_59_counting
x = runner_18_59_counting.index
print(type(x[0]))
print(x)
# int값을 str 값으로 바꾸기
x = [str(i) for i in x]
print(type(x[0]))
print(x)
#y축 :값 나열
y = runner_18_59_counting.values
print(type(y[0]))
print(y)
ratio = y/y.sum()
ratio
# 누적데이터 보여주는 함수 : cumsum()
ratio_sum = ratio.cumsum()
ratio_sum
그래프 그리기
list(range(3, 14))
# enumerate : index도 함께 보고 싶을 때 사용
for i, data in enumerate(range(3, 14)):
print(i, data)
ranges = lineChart.get_yticks()
ranges
# figsize 지정
fig, barChart = plt.subplots(figsize=(20,8))
# bar chart에 x, y값 넣어서 bar chart 생성
barChart.bar(x, y)
# line chart 생성
lineChart = barChart.twinx() # twinx() : 두 개의 차트가 서로 다른 y 축, 공통 x 축을 사용하게 해줌
lineChart.plot(x, ratio_sum, '-g^', alpha = 0.5) # alpha:투명도
# ^: 세모, s : sqaured, o : circle
# g : green, b: blue, r: red
######## ------- 잘라서 보여주기 -------- ########
# 오른쪽 축(라인 차트 축) 레이블
ranges = lineChart.get_yticks() # y차트의 단위들
lineChart.set_yticklabels(['{0:.1%}'.format(x) for x in ranges])
# 라인차트 데이터 별 %값 주석(annotation)
ratio_sum_percentages = ['{0:.0%}'.format(x) for x in ratio_sum]
for i, txt in enumerate(ratio_sum_percentages):
lineChart.annotate(txt, (x[i], ratio_sum[i]), fontsize=12)
# x, y label만들기
barChart.set_xlabel('Age', fontdict={'size':16})
barChart.set_ylabel('Number of runner', fontdict={'size':16})
# plot에 title 만들기
plt.title('Pareto Chart - Number of runner by Age', fontsize=18)
plt.show()
-> 파레토 차트로 직관적으로 상위 n%를 확인할 수 있다
#나이 순서대로 정렬해서 그래프 그리기
import pandas as pd
import matplotlib.pyplot as plt
marathon_2015_2017 = pd.read_csv('./data_boston/marathon_2015_2017.csv')
#### 18세~59세 데이터만 가져오기 : isin() : 컬럼에서 어떤 특정 값을 포함하고 있는것만 걸러낼 때
runner_18_59 = marathon_2015_2017[marathon_2015_2017.Age.isin(range(18, 60))]
# print(runner_18_59)
#### 18~59세 나이대별로 카운트 : value_counts()
runner_18_59_counting = runner_18_59.Age.value_counts()
# print(runner_18_59_counting)
->나이와 참가자 수 각각 데이터프레임에 칼럼 추가 -> Age를 이용한 sort 가능
runner_age = pd.DataFrame({
'Age': runner_18_59_counting.index,
'Count': runner_18_59_counting
})
print(runner_age)
runner_age_sort = runner_age.sort_values(by='Age')
runner_age_sort
# runner_age_sort 값 기준
x = runner_age_sort.index
# int값을 str 값으로 바꾸기
x = [str(i) for i in x]
# y값도 변경
y = runner_age_sort['Count']
# 누적데이터 보여주는 함수 : cumsum()
ratio = y/y.sum()
ratio_sum = ratio.cumsum()
print(ratio_sum)
# y 누적값을 리스트 형식으로 바꿔주기
y_ratio = [i for i in ratio_sum]
print(y_ratio)
# 데이터 그리기
# figsize 지정
fig, barChart = plt.subplots(figsize=(20,10))
# bar chart에 x, y값 넣어서 bar chart 생성
barChart.bar(x, y)
# line chart 생성
lineChart = barChart.twinx()
lineChart.plot(x, ratio_sum, '-g^', alpha = 0.5) # alpha:투명도
# 오른쪽 축(라인 차트 축) 레이블
ranges = lineChart.get_yticks() # y차트의 단위들
lineChart.set_yticklabels(['{0:.1%}'.format(x) for x in ranges])
# 오른쪽 축(라인 차트 축) 레이블
ranges = lineChart.get_yticks() # y차트의 단위들
lineChart.set_yticklabels(['{0:.1%}'.format(x) for x in ranges])
# 라인차트 데이터 별 %값 주석(annotation)
ratio_sum_percentages = ['{0:.0%}'.format(x) for x in ratio_sum]
for i, txt in enumerate(ratio_sum_percentages):
lineChart.annotate(txt, (x[i], y_ratio[i]), fontsize=12) #변경된 부분: ratio_sum -> y_ratio
# x, y label, title 만들기
barChart.set_xlabel('Age', fontdict={'size':16})
barChart.set_ylabel('Number of runner', fontdict={'size':16})
plt.title('Dual Axis Chart - Number of runner by Age', fontsize=18) # 제목 변경(dual axis chart)
# show plot
plt.show()