[matplotlib, pandas, 시각화, series, plot, 그래프]
이 페이지는 자세한 분석을 위한 페이지가 아닙니다.
시각화를 해야하는 이유를 보여주기 위한 페이지입니다.
In [3]:
# Frank Anscombe 이라는 사람의 사례
import seaborn
anscombe = seaborn.load_dataset('anscombe')
anscombe
Out[3]:
dataset | x | y | |
---|---|---|---|
0 | I | 10.0 | 8.04 |
1 | I | 8.0 | 6.95 |
2 | I | 13.0 | 7.58 |
3 | I | 9.0 | 8.81 |
4 | I | 11.0 | 8.33 |
5 | I | 14.0 | 9.96 |
6 | I | 6.0 | 7.24 |
7 | I | 4.0 | 4.26 |
8 | I | 12.0 | 10.84 |
9 | I | 7.0 | 4.82 |
10 | I | 5.0 | 5.68 |
11 | II | 10.0 | 9.14 |
12 | II | 8.0 | 8.14 |
13 | II | 13.0 | 8.74 |
14 | II | 9.0 | 8.77 |
15 | II | 11.0 | 9.26 |
16 | II | 14.0 | 8.10 |
17 | II | 6.0 | 6.13 |
18 | II | 4.0 | 3.10 |
19 | II | 12.0 | 9.13 |
20 | II | 7.0 | 7.26 |
21 | II | 5.0 | 4.74 |
22 | III | 10.0 | 7.46 |
23 | III | 8.0 | 6.77 |
24 | III | 13.0 | 12.74 |
25 | III | 9.0 | 7.11 |
26 | III | 11.0 | 7.81 |
27 | III | 14.0 | 8.84 |
28 | III | 6.0 | 6.08 |
29 | III | 4.0 | 5.39 |
30 | III | 12.0 | 8.15 |
31 | III | 7.0 | 6.42 |
32 | III | 5.0 | 5.73 |
33 | IV | 8.0 | 6.58 |
34 | IV | 8.0 | 5.76 |
35 | IV | 8.0 | 7.71 |
36 | IV | 8.0 | 8.84 |
37 | IV | 8.0 | 8.47 |
38 | IV | 8.0 | 7.04 |
39 | IV | 8.0 | 5.25 |
40 | IV | 19.0 | 12.50 |
41 | IV | 8.0 | 5.56 |
42 | IV | 8.0 | 7.91 |
43 | IV | 8.0 | 6.89 |
In [2]:
# dataset의 값이 I, II, III, IV 별로 추출
dataset_1 = anscombe[ anscombe['dataset']=='I']
dataset_2 = anscombe[ anscombe['dataset']=='II']
dataset_3 = anscombe[ anscombe['dataset']=='III']
dataset_4 = anscombe[ anscombe['dataset']=='IV']
In [4]:
dataset_1
Out[4]:
dataset | x | y | |
---|---|---|---|
0 | I | 10.0 | 8.04 |
1 | I | 8.0 | 6.95 |
2 | I | 13.0 | 7.58 |
3 | I | 9.0 | 8.81 |
4 | I | 11.0 | 8.33 |
5 | I | 14.0 | 9.96 |
6 | I | 6.0 | 7.24 |
7 | I | 4.0 | 4.26 |
8 | I | 12.0 | 10.84 |
9 | I | 7.0 | 4.82 |
10 | I | 5.0 | 5.68 |
In [5]:
dataset_2
Out[5]:
dataset | x | y | |
---|---|---|---|
11 | II | 10.0 | 9.14 |
12 | II | 8.0 | 8.14 |
13 | II | 13.0 | 8.74 |
14 | II | 9.0 | 8.77 |
15 | II | 11.0 | 9.26 |
16 | II | 14.0 | 8.10 |
17 | II | 6.0 | 6.13 |
18 | II | 4.0 | 3.10 |
19 | II | 12.0 | 9.13 |
20 | II | 7.0 | 7.26 |
21 | II | 5.0 | 4.74 |
In [6]:
dataset_3
Out[6]:
dataset | x | y | |
---|---|---|---|
22 | III | 10.0 | 7.46 |
23 | III | 8.0 | 6.77 |
24 | III | 13.0 | 12.74 |
25 | III | 9.0 | 7.11 |
26 | III | 11.0 | 7.81 |
27 | III | 14.0 | 8.84 |
28 | III | 6.0 | 6.08 |
29 | III | 4.0 | 5.39 |
30 | III | 12.0 | 8.15 |
31 | III | 7.0 | 6.42 |
32 | III | 5.0 | 5.73 |
In [7]:
dataset_4
Out[7]:
dataset | x | y | |
---|---|---|---|
33 | IV | 8.0 | 6.58 |
34 | IV | 8.0 | 5.76 |
35 | IV | 8.0 | 7.71 |
36 | IV | 8.0 | 8.84 |
37 | IV | 8.0 | 8.47 |
38 | IV | 8.0 | 7.04 |
39 | IV | 8.0 | 5.25 |
40 | IV | 19.0 | 12.50 |
41 | IV | 8.0 | 5.56 |
42 | IV | 8.0 | 7.91 |
43 | IV | 8.0 | 6.89 |
In [8]:
# 각각의 dataset의 통계치 확인 - 평균, 분산 유사함
# dataset_1.mean()
x, y = dataset_1.mean()
print('x={0} y={1}'.format(x, y))
x, y = dataset_2.mean()
print('x={0} y={1}'.format(x, y))
x, y = dataset_3.mean()
print('x={0} y={1}'.format(x, y))
x, y = dataset_4.mean()
print('x={0} y={1}'.format(x, y))
x, y = dataset_1.var()
print('x={0} y={1}'.format(x, y))
x, y = dataset_2.var()
print('x={0} y={1}'.format(x, y))
x, y = dataset_3.var()
print('x={0} y={1}'.format(x, y))
x, y = dataset_4.var()
print('x={0} y={1}'.format(x, y))
x=9.0 y=7.500909090909093
x=9.0 y=7.500909090909091
x=9.0 y=7.500000000000001
x=9.0 y=7.50090909090909
x=11.0 y=4.127269090909091
x=11.0 y=4.127629090909091
x=11.0 y=4.12262
x=11.0 y=4.12324909090909
In [9]:
# 시각화하기 - 하나씩 출력하여 데이타 구조가 다름을 확인
import matplotlib.pyplot as plt
# plt.plot(dataset_1['x'], dataset_1['y'])
# plt.plot(dataset_1['x'], dataset_1['y'], 'o')
# plt.plot(dataset_2['x'], dataset_2['y'], 'o')
# plt.plot(dataset_3['x'], dataset_3['y'], 'o')
# plt.plot(dataset_4['x'], dataset_4['y'], 'o')
# [결론] 평균, 분산 등의 수치가 같아도 그래프 형태로 확인하면 다른 데이타임을 알 수 있다
#
fig = plt.figure() # 1-전체 그래프의 기본 틀
axes1 = fig.add_subplot(2,2,1) # 2-그래프를 넣을 그래프 격자
axes2 = fig.add_subplot(2,2,2)
axes3 = fig.add_subplot(2,2,3)
axes4 = fig.add_subplot(2,2,4)
axes1.plot(dataset_1['x'], dataset_1['y'], 'o') # 3-격자에 그래프 추가
axes2.plot(dataset_2['x'], dataset_2['y'], 'o')
axes3.plot(dataset_3['x'], dataset_3['y'], 'o')
axes4.plot(dataset_4['x'], dataset_4['y'], 'o')
# 안나오면 fig 입력하여 확인
Out[9]:
[<matplotlib.lines.Line2D at 0x1ed3995aaf0>]
In [ ]:
1. Series 의 plot()¶
In [1]:
%matplotlib inline
In [2]:
from pandas import Series
In [6]:
# 판다스 그래프 : Series의 plot()
s=Series([1.5, 2.3, 0.9], index=['no1','no2','no3'])
s.plot(kind='bar')
Out[6]:
<AxesSubplot:>
In [11]:
s=Series([1.5, 2.3, 0.9], index=['no1','no2','no3'])
splot = s.plot.bar()
splot.set_xlabel('data')#x축
splot.set_ylabel('value')#y축
splot.set_title('Sample Graph')#title
Out[11]:
Text(0.5, 1.0, 'Sample Graph')
위의 판다스 제공 그래프와 matplotlib 그래프 비교¶
2. DataFrame 그래프¶
In [12]:
from pandas import DataFrame
import numpy as np
# 데이타프레임에서 시각화 작업
df=DataFrame(np.random.randn(10, 4), # 난수 10개를 4번
columns=['level','step','cnt','temp'],
index=np.arange(0,100,10)) # np.arange(0,100,10)
df.plot()
Out[12]:
<AxesSubplot:>
In [13]:
dfplot = df.plot(kind='barh')
dfplot.set_xlabel('data')#x축
dfplot.set_ylabel('value')#y축
dfplot.set_title('Sample Graph')#title
Out[13]:
Text(0.5, 1.0, 'Sample Graph')
In [ ]:
[참고] 데이타사이언스스쿨 > Pandas의 시각화 기능
https://datascienceschool.net/view-notebook/372443a5d90a46429c6459bba8b4342c/
In [5]:
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
""" 0. 플롯 스타일 """
plt.style.use('classic')
x = np.linspace(0,10,100)
plt.plot(np.sin(x))
Out[5]:
[<matplotlib.lines.Line2D at 0x2befc94c3a0>]
In [7]:
""" 1. 색상지정 """
plt.plot(np.sin(x-0), color='#44E1E7');
plt.plot(np.sin(x-1), color='red');
plt.plot(np.sin(x-2), color='g');
plt.plot(np.sin(x-3), color='chartreuse');
plt.plot(np.sin(x-4), color='#ff2299');
plt.plot(np.sin(x-5), color='0.75'); #회색
In [9]:
""" 2. 선스타일 """
plt.plot(np.sin(x-0), linestyle='solid');
plt.plot(np.sin(x-1), linestyle='dotted');
plt.plot(np.sin(x-2), linestyle='dashed');
plt.plot(np.sin(x-3), linestyle='dashdot');
In [11]:
plt.plot(np.sin(x-0), linestyle='-');
plt.plot(np.sin(x-1), linestyle=':');
plt.plot(np.sin(x-2), linestyle='--');
plt.plot(np.sin(x-3), linestyle='-.');
r(red) g(green) b(blue) c(cyan) m(magenta) y(yellow) k(black)¶
In [12]:
""" 3. 선과 스타일을 간결하게 (대략 읽는 수준으로 ) """
plt.plot(np.sin(x-0), '-g');
plt.plot(np.sin(x-1), '--c');
plt.plot(np.sin(x-2), ':');
plt.plot(np.sin(x-3), '-.k');
In [15]:
''' 4. 범례 '''
plt.plot(np.sin(x-0), '-g',label ='first');
plt.plot(np.sin(x-1), '--c',label ='second');
plt.plot(np.sin(x-2), ':',label ='third');
plt.plot(np.sin(x-3), '-.k',label ='fourth');
plt.legend(loc=4)
Out[15]:
<matplotlib.legend.Legend at 0x2befcea58e0>
In [4]:
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
""" 1. figure(그림틀=공간?)을 만들고 거기에 subplot을 추가 하는 방식 """
fig = plt.figure()
ax1 = fig.add_subplot(2,1,1)
ax2 = fig.add_subplot(2,1,2)
ax1.plot(np.random.randn(100))
ax2.plot(np.random.randn(200).cumsum())
plt.show()
In [8]:
""" 2. figure로 공간을 만들고 파이플롯(pyplot)의 subplot()으로 각각의 패널 지정 """
fig = plt.figure()
ax1 = plt.subplot(2,1,1)
ax2 = plt.subplot(2,1,2)
ax1.plot(np.random.randn(100))
ax2.plot(np.random.randn(200).cumsum())
plt.show()
In [17]:
""" 3. 간단하게 ax 객체를 이용하기 """
fig, ax = plt.subplots(2,1)
ax[0].plot(np.random.randn(100))
ax[1].plot(np.random.randn(200).cumsum())
plt.show()
In [4]:
''' 4. 그래프 전체 크기를 지정 '''
서브플롯 개념¶
In [21]:
plt.figure(figsize=(16,8))
plt.subplot(221)#2행2열중에 첫번째
plt.subplot(222)
plt.subplot(212)
plt.show()
In [27]:
plt.figure(figsize=(16,8))
plt.subplot(211)
plt.subplot(223)
plt.subplot(224)
plt.show()
In [60]:
plt.figure(figsize=(16,8))
plt.subplot(2,3,(1,2))
plt.subplot(233)
plt.subplot(212)
plt.show()
In [ ]:
In [28]:
import seaborn # 데이타
import matplotlib.pyplot as plt # 그래프 라이브러리
tips = seaborn.load_dataset('tips') # 팁을 지불한 손님의 정보 데이타
tips.head() # 지불금액 / 팁 / 성별 / 흡연 / 요일 / 시간대 / 인원수
Out[28]:
total_bill | tip | sex | smoker | day | time | size | |
---|---|---|---|---|---|---|---|
0 | 16.99 | 1.01 | Female | No | Sun | Dinner | 2 |
1 | 10.34 | 1.66 | Male | No | Sun | Dinner | 3 |
2 | 21.01 | 3.50 | Male | No | Sun | Dinner | 3 |
3 | 23.68 | 3.31 | Male | No | Sun | Dinner | 2 |
4 | 24.59 | 3.61 | Female | No | Sun | Dinner | 4 |
In [29]:
# 한글처리
from matplotlib import font_manager, rc
plt.rcParams['axes.unicode_minus']=False # 추가설정 : 폰트를 변경하면 -표시가 ㅁ으로 변경되기에 '-'를 변경하지 않도록 지정
rc('font', family='Malgun Gothic')
1. 일변량 그래프 - 하나의 변수만 사용한 그래프¶
- 히스토그램(수치변수)
- 막대그래프(범주변수)
- [예] 전체지불금액(total_bill)에 대한 그래프
In [9]:
# 여기에 코드
plt.hist(tips['total_bill']);
plt.xlabel('빈도수')
plt.ylabel('지불금액')
plt.title('전체지불금액에 대한 그래프')
plt.show
Out[9]:
<function matplotlib.pyplot.show(close=None, block=None)>
In [14]:
gender = tips['sex'].value_counts()
gender
type(gender)
# gender.plot(kind='bar')
plt.bar(['M','F'],gender)
Out[14]:
<BarContainer object of 2 artists>
2. 이변량 그래프 - 변수 2개를 이용한 그래프 ( 산점도 그래프 )¶
[예] 지불금액에 따른 팁 금액을 나타내는 그래프
In [15]:
# 여기에 코드
plt.scatter(tips['total_bill'], tips['tip']);
3. 이산형 변수와 연속형 변수 - 박스플롯¶
이산형 - 성별이나 국적처럼 명확하게 구분되는 값
연속형 - 수치로 이루어진 값
[예] 성별에 따른 팁을 나타내는 그래프
In [30]:
# 여기에 코드
male = tips[tips['sex'] == 'Male']['tip'] #남자들이 낸 tip값만 출력
male
female = tips[tips['sex'] == 'Female']['tip']
female
plt.boxplot([male, female], labels=['남','여']);
4. 다변량 그래프 - 3개 이상의 변수로 그래프 - 산점도 그래프¶
[예] 식사지불과 팁의 정도를 성별에 따라 그래프를 그린다면?
* 성별의 문자열값을 0과 1로 변경하여 다른 색상으로 그리고자 한다
In [36]:
# (1) 성별을 0과 1로 변환하는 함수 선언
def gender(sex):
if sex == 'Male' : return 0
else: return 1
# (2) 변경한 성별값의 변수(컬럼 sex_color) 추가
tips['sex_color'] = tips['sex'].apply(gender)
tips.head()
# (3) 그래프 : x와 y 축, c=점의 색상, alpha=점의 투명도, s=점의 크기
# 테이블당의 인원수를 점의 크기로 표현한다면 s=tips['size']*10 추가
plt.scatter(x=tips['total_bill'],y=tips['tip'],c=tips['sex_color'],s=tips['size']*10)
Out[36]:
<matplotlib.collections.PathCollection at 0x2bc95c017f0>
[ 참고 ] plt.scatter와 plt.plot 정리
In [1]:
# 여기에 코드
import pandas as pd
df = pd.read_excel('data/서울시청소년정신건강.xls')
df
Out[1]:
기간 | 구분 | 스트레스 인지율 | 스트레스 인지율.1 | 스트레스 인지율.2 | 우울감 경험률 | 우울감 경험률.1 | 우울감 경험률.2 | 자살 생각률 | 자살 생각률.1 | 자살 생각률.2 | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 기간 | 구분 | 전체 | 남학생 | 여학생 | 전체 | 남학생 | 여학생 | 전체 | 남학생 | 여학생 |
1 | 2018 | 구분 | 42.7 | 34.5 | 51.5 | 29.6 | 24.2 | 35.4 | 15.4 | 11.8 | 19.2 |
In [12]:
# 여기에 코드
df = pd.read_excel('data/서울시청소년정신건강.xls',header=1, usecols='C:K')
df
Out[12]:
전체 | 남학생 | 여학생 | 전체.1 | 남학생.1 | 여학생.1 | 전체.2 | 남학생.2 | 여학생.2 | |
---|---|---|---|---|---|---|---|---|---|
0 | 42.7 | 34.5 | 51.5 | 29.6 | 24.2 | 35.4 | 15.4 | 11.8 | 19.2 |
1-3 컬럼명을 지정하여 데이타 가져오기 (변수에 저장)¶
[출력결과]
In [18]:
# 컬럼이름을 지정
col_names = ['스트레스','스트레스남학생','스트레스여학생',
'우을감경험률','우울남학생','우울여학생',
'자살생각율','자살남학생','자살여학생']
# 변수에 저장하기(raw_data)
raw_data =pd.read_excel('data/서울시청소년정신건강.xls',header=1, usecols='C:K')
raw_data
# 여기에 코드
raw_data.columns = col_names
raw_data
Out[18]:
스트레스 | 스트레스남학생 | 스트레스여학생 | 우을감경험률 | 우울남학생 | 우울여학생 | 자살생각율 | 자살남학생 | 자살여학생 | |
---|---|---|---|---|---|---|---|---|---|
0 | 42.7 | 34.5 | 51.5 | 29.6 | 24.2 | 35.4 | 15.4 | 11.8 | 19.2 |
(2) 해당 데이타값의 반대값으로 행을 추가¶
예를 들어 스트레스를 받는다고 응답한 수가 42.7이면
아니라고 응답한 수가 100 - 42.7= 57.3 이다.
각 항목에 반대로 응답한 수의 값을 행으로 추가한다
In [26]:
# 반대의 데이타값을 가지는 행을 추가한다
raw_data.loc[1] = 100 - (raw_data.loc[0])
# 여기에 코드
raw_data
Out[26]:
스트레스 | 스트레스남학생 | 스트레스여학생 | 우을감경험률 | 우울남학생 | 우울여학생 | 자살생각율 | 자살남학생 | 자살여학생 | |
---|---|---|---|---|---|---|---|---|---|
0 | 42.7 | 34.5 | 51.5 | 29.6 | 24.2 | 35.4 | 15.4 | 11.8 | 19.2 |
1 | 57.3 | 65.5 | 48.5 | 70.4 | 75.8 | 64.6 | 84.6 | 88.2 | 80.8 |
In [30]:
# 응답 컬럼으로 '그렇다'와 '아니다' 값을 추가
raw_data['응답'] = ['그렇다','아니다']
# 여기에 코드
raw_data
Out[30]:
스트레스 | 스트레스남학생 | 스트레스여학생 | 우을감경험률 | 우울남학생 | 우울여학생 | 자살생각율 | 자살남학생 | 자살여학생 | 응답 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 42.7 | 34.5 | 51.5 | 29.6 | 24.2 | 35.4 | 15.4 | 11.8 | 19.2 | 그렇다 |
1 | 57.3 | 65.5 | 48.5 | 70.4 | 75.8 | 64.6 | 84.6 | 88.2 | 80.8 | 아니다 |
In [41]:
# 여기에 코드
raw_data=raw_data.set_index('응답')
Out[41]:
스트레스 | 스트레스남학생 | 스트레스여학생 | 우을감경험률 | 우울남학생 | 우울여학생 | 자살생각율 | 자살남학생 | 자살여학생 | |
---|---|---|---|---|---|---|---|---|---|
응답 | |||||||||
그렇다 | 42.7 | 34.5 | 51.5 | 29.6 | 24.2 | 35.4 | 15.4 | 11.8 | 19.2 |
아니다 | 57.3 | 65.5 | 48.5 | 70.4 | 75.8 | 64.6 | 84.6 | 88.2 | 80.8 |
In [70]:
raw_data
Out[70]:
스트레스 | 스트레스남학생 | 스트레스여학생 | 우을감경험률 | 우울남학생 | 우울여학생 | 자살생각율 | 자살남학생 | 자살여학생 | |
---|---|---|---|---|---|---|---|---|---|
응답 | |||||||||
그렇다 | 42.7 | 34.5 | 51.5 | 29.6 | 24.2 | 35.4 | 15.4 | 11.8 | 19.2 |
아니다 | 57.3 | 65.5 | 48.5 | 70.4 | 75.8 | 64.6 | 84.6 | 88.2 | 80.8 |
In [77]:
%matplotlib inline
import matplotlib.pyplot as plt
from matplotlib import font_manager, rc
# 폰트를 변경하면 '-' 기호가 네모로 변경되기에 '-'기호를 변경하지 않도록 설정
plt.rcParams['axes.unicode_minus'] = False
f_path = 'c:/Windows/Fonts/malgun.ttf'
font_name = font_manager.FontProperties(fname=f_path).get_name()
rc('font', family=font_name)
Out[77]:
응답
그렇다 42.7
아니다 57.3
Name: 스트레스, dtype: float64
In [83]:
# 여기에 코드
graph1 = raw_data['스트레스']
plt.figure(figsize=(16,5))
plt.title('스트레스를 받은 적 있다')
plt.pie(graph1,labels=raw_data.index, explode=(0,0.03))
plt.show()
In [90]:
graph1 = raw_data['스트레스']
graph2 = raw_data['우을감경험률']
graph3 = raw_data['자살생각율']
plt.figure(figsize=(16,6))
sub1 = plt.subplot(131)
sub2 = plt.subplot(132)
sub3 = plt.subplot(133)
sub1.set_title('스트레스를 받은 적 있다.')
sub2.set_title('우울증을 경험 한 적 있다.')
sub3.set_title('자살을 생각 한 적 있다.')
sub1.pie(graph1,labels=raw_data.index, autopct='%1.1f%%', explode=(0,0.03));
sub2.pie(graph2,labels=raw_data.index, autopct='%1.1f%%', explode=(0,0.03));
sub3.pie(graph3,labels=raw_data.index, autopct='%1.1f%%', explode=(0,0.03));
In [2]:
# 데이타 읽어오기
import pandas as pd
diamonds = pd.read_csv('data/diamonds.csv')
diamonds.head()
Out[2]:
Unnamed: 0 | carat | cut | color | clarity | depth | table | price | x | y | z | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 0.23 | Ideal | E | SI2 | 61.5 | 55.0 | 326 | 3.95 | 3.98 | 2.43 |
1 | 2 | 0.21 | Premium | E | SI1 | 59.8 | 61.0 | 326 | 3.89 | 3.84 | 2.31 |
2 | 3 | 0.23 | Good | E | VS1 | 56.9 | 65.0 | 327 | 4.05 | 4.07 | 2.31 |
3 | 4 | 0.29 | Premium | I | VS2 | 62.4 | 58.0 | 334 | 4.20 | 4.23 | 2.63 |
4 | 5 | 0.31 | Good | J | SI2 | 63.3 | 58.0 | 335 | 4.34 | 4.35 | 2.75 |
In [4]:
# 데이타프레임 구조 살피기
# [*] 질적자료와 양적자료 확인
diamonds.info()
diamonds.describe()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 53940 entries, 0 to 53939
Data columns (total 11 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Unnamed: 0 53940 non-null int64
1 carat 53940 non-null float64
2 cut 53940 non-null object
3 color 53940 non-null object
4 clarity 53940 non-null object
5 depth 53940 non-null float64
6 table 53940 non-null float64
7 price 53940 non-null int64
8 x 53940 non-null float64
9 y 53940 non-null float64
10 z 53940 non-null float64
dtypes: float64(6), int64(2), object(3)
memory usage: 4.5+ MB
Out[4]:
Unnamed: 0 | carat | depth | table | price | x | y | z | |
---|---|---|---|---|---|---|---|---|
count | 53940.000000 | 53940.000000 | 53940.000000 | 53940.000000 | 53940.000000 | 53940.000000 | 53940.000000 | 53940.000000 |
mean | 26970.500000 | 0.797940 | 61.749405 | 57.457184 | 3932.799722 | 5.731157 | 5.734526 | 3.538734 |
std | 15571.281097 | 0.474011 | 1.432621 | 2.234491 | 3989.439738 | 1.121761 | 1.142135 | 0.705699 |
min | 1.000000 | 0.200000 | 43.000000 | 43.000000 | 326.000000 | 0.000000 | 0.000000 | 0.000000 |
25% | 13485.750000 | 0.400000 | 61.000000 | 56.000000 | 950.000000 | 4.710000 | 4.720000 | 2.910000 |
50% | 26970.500000 | 0.700000 | 61.800000 | 57.000000 | 2401.000000 | 5.700000 | 5.710000 | 3.530000 |
75% | 40455.250000 | 1.040000 | 62.500000 | 59.000000 | 5324.250000 | 6.540000 | 6.540000 | 4.040000 |
max | 53940.000000 | 5.010000 | 79.000000 | 95.000000 | 18823.000000 | 10.740000 | 58.900000 | 31.800000 |
In [5]:
""" 1. 빈도구하기 : value_counts() """
diamonds['cut'].value_counts()
Out[5]:
Ideal 21551
Premium 13791
Very Good 12082
Good 4906
Fair 1610
Name: cut, dtype: int64
In [7]:
""" 2. 백분율 = 빈도수/전체수 * 100 """
temp = diamonds['cut'].value_counts() / len(diamonds['cut']) * 100
temp
Out[7]:
Ideal 39.953652
Premium 25.567297
Very Good 22.398962
Good 9.095291
Fair 2.984798
Name: cut, dtype: float64
In [11]:
""" 3. 시각화 """
temp.plot(kind="barh");
In [12]:
temp.plot(kind="pie");
In [13]:
# mapplotlib의 막대그래프
import matplotlib.pyplot as plt
plt.figure(figsize=(20,5))
plt.pie(temp,autopct='%1.1f%%')
plt.show()
In [20]:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.DataFrame({"status": temp.index,
"count": diamonds['cut'].value_counts()})
s1 = sns.barplot(x = 'status', y = 'count', data = df, color = 'red')
일변량 양적 자료 분석¶
- 표
- 그래프
- 기술통계량(요약통계량)
** 양적자료는 값에 대한 빈도와 백분율을 구하지 않음 ( 데이터가 가지는 값의 종류가 많기 때문에 )
** 양적자료로 빈도와 백분율을 구하려면 구간별 새로운 자료를 생성하고 구함
In [1]:
# 데이타 읽어오기
import pandas as pd
# 인덱스가 2번 생성되기에 기존 인덱스를 인덱스로 지정
diamonds = pd.read_csv('data/diamonds.csv', index_col='Unnamed: 0')
diamonds.head()
Out[1]:
carat | cut | color | clarity | depth | table | price | x | y | z | |
---|---|---|---|---|---|---|---|---|---|---|
1 | 0.23 | Ideal | E | SI2 | 61.5 | 55.0 | 326 | 3.95 | 3.98 | 2.43 |
2 | 0.21 | Premium | E | SI1 | 59.8 | 61.0 | 326 | 3.89 | 3.84 | 2.31 |
3 | 0.23 | Good | E | VS1 | 56.9 | 65.0 | 327 | 4.05 | 4.07 | 2.31 |
4 | 0.29 | Premium | I | VS2 | 62.4 | 58.0 | 334 | 4.20 | 4.23 | 2.63 |
5 | 0.31 | Good | J | SI2 | 63.3 | 58.0 | 335 | 4.34 | 4.35 | 2.75 |
In [7]:
import matplotlib.pyplot as plt
plt.hist(diamonds.price);
In [12]:
plt.boxplot(diamonds.price);
[양적자료를 질적자료로 새로 생성 ]¶
In [21]:
def func(x):
if x < 5000: return 5000
elif x < 10000 : return 10000
elif x < 15000 : return 15000
return 20000
diamonds['grade_price'] = diamonds['price'].apply(func)
data = diamonds['grade_price'].value_counts()
data.plot(kind='bar')
Out[21]:
<AxesSubplot:>
'Programing Language > Python' 카테고리의 다른 글
0831 머신러닝(machine learning) (0) | 2021.08.31 |
---|---|
0830 데이터 정제 (0) | 2021.08.30 |
0826 Pandas, 미국 대통령 데이터, 판다스 계산, 시각화 (0) | 2021.08.26 |
0825 Python , jupyterNoteBook (0) | 2021.08.25 |
python Day 3 (0) | 2021.08.05 |
댓글