
모두의 데이터 분석 Unit 07-10 복습
- ggplot 스타일 (격자 무늬 스타일 지정)
# 자동화 프로그램
import csv
f = open('../data/age_clean.csv')
data = csv.reader(f)
result = []
name = input('인구 구조가 알고 싶나요? 지역의 이름(읍면동 단위) 입력해 주세요 : ') # string
for row in data:
if name in row[0]:
for i in row[3:103]:
result.append(int(i.replace(',','')))
print(result)
plt.style.use('ggplot')
plt.rc('font', family='Malgun Gothic')
plt.rcParams['axes.unicode_minus']=False
plt.title(name + '지역 인구 구조 현황')
plt.plot(result)
plt.show()
>> input으로 입력받은 name이 row[0]에 있다면
row를 3부터 102까지 읽어 들이면서 ',' (콤마)를 없앤 값을 result에 넣어줌
>> plt.rc('font', family='Malgun Gothic') : 한글 폰트 깨짐 방지
>> plt.rcParams['axes.unicode_minus']=False : '-'(마이너스) 부호 깨짐 방지
- 항아리 모형 그리기 1
# gender(성별) 인구구조_항아리 모형 그리기
import csv
f = open('gender.csv.csv')
data = csv.reader(f)
m = []
f = []
for row in data:
if '신도림' in row[0]:
for i in range(0,101):
m.append(int(row[i+3]))
f.append(int(row[-(i+1)]))
f.reverse()
print(m)
print(f)
>> row[i+3] : 0세 > row[3] 100세 > row[103]

여 인구수 > row[-103] / 연령구간인구수 > row[-102] / 0세 > row[-101] / 100세 > row[-1]
>> row[-(i+1)] : 0세 > row[-1] ~ 100세 > row[-101]
>> reverse함수로 뒤집기
0세 > row[-101] ~ 100세 > row[-1]
- 항아리 모형 그리기 2
# 우리 동네 인구구조를 항아리 모양 그래프로 표현하기
# gender(성별) 인구구조_항아리 모형 그리기
import csv
f = open('gender.csv.csv')
data = csv.reader(f)
m = []
f = []
name = input('어디 사세요? 동네 이름을 알려주시면 인구를 분석해드릴게요: ')
for row in data:
if name in row[0]:
for i in row[3:104]:
m.append(-int(i))
# 겹쳐서 출력되기 때문에, (-) 부호 넣어서 음수로 변경 (양쪽으로 표현하기 위해서)
for i in row[106:]:
f.append(int(i))
print(m)
print(f)
import matplotlib.pyplot as plt
plt.style.use('ggplot')
plt.figure(figsize=(10,6), dpi=300)
plt.title(name+'지역의 남녀 성별 인구분포')
plt.barh(range(101),m,label='남성')
plt.barh(range(101),f,label='여성')
plt.legend()
plt.show()
#plt.rcParams['axes.unicode_minus']=False
#마이너스 폰트 깨지기 방지
>> input으로 입력받은 name이 row[0]에 있다면
row 3부터 103까지 돌면서 '-' 로 치환한 값을 m에 저장 ( 양쪽으로 표현하기 위해 -를 붙여 -방향으로 나타내기 위해)
row 106부터 돌면서 f에 저장
>> ggplot 스타일을 이용해 size (10,6), dpi(해상도) = 300인 그래프 그림
barh : 100개 데이터의 m, f를 가로 막대 그래프로 그림
- 꺾은선 그래프
# 꺾은선 그래프로 표현하기
import csv
f = open('gender.csv.csv')
data = csv.reader(f)
m = []
f = []
name = input('궁금한 동네를 입력해주세요: ')
for row in data:
if name in row[0]:
for i in range(3,104):
m.append(int(row[i].replace(',',''))) # 남성 데이터
f.append(int(row[i+103].replace(',',''))) # 여성 데이터
break
import matplotlib.pyplot as plt
plt.plot(m, label='male')
plt.plot(f, label='female')
plt.legend()
plt.show()
- 산점도
import matplotlib.pyplot as plt
from astropy.visualization import astropy_mpl_style
astropy_mpl_style['axes.grid'] = False
plt.style.use(astropy_mpl_style)
# 자동화
import math
import csv
f = open('gender.csv.csv')
data = csv.reader(f)
m = []
f = []
size = []
name = input('궁금한 동네를 입력해주세요: ')
for row in data:
if name in row[0]:
for i in range(3,104):
m.append(int(row[i].replace(',',''))) # 남성 데이터
f.append(int(row[i+103].replace(',',''))) # 여성 데이터
size.append(math.sqrt(int(row[i].replace(',',''))+int(row[i+103].replace(',',''))))
break
plt.style.use('ggplot')
plt.rc('font', family='Malgun Gothic')
plt.figure(figsize=(10,6), dpi=300)
plt.title(name+'지역의 성별 인구 그래프')
plt.scatter(m,f,s=size, c=range(101), alpha=0.6, cmap='jet')
plt.colorbar()
plt.plot(range(max(m)), range(max(m)), 'blue')
plt.xlabel('남성 인구수')
plt.ylabel('여성 인구수')
plt.show()
>> from astropy.visualization import astropy_mpl_style
astropy_mpl_style['axes.grid'] = False
plt.style.use(astropy_mpl_style)
데이터 시각화 할 때 사용. 안써도 무방하나 matplotlib 기본 스타일 일부 설정을 개선
>> 남성 데이터와 여성 데이터를 각각 m과 f에 저장하고,
math.sqrt함수를 이용. row[i] (남성 데이터)와 row[i+103] (여성 데이터) 의 제곱근 반환
원의 크기(size)는 인구수의 제곱근
>> plt.style.use('ggplot') : ggplot 스타일로 지정
plt.scatter : x축 데이터 m, y축 데이터 f, s = size, c (marker colors) = range(101), alpha(투명도) = 0.6,
cmap (colormap) = 'jet'
plt.plot(range(max(m)), range(max(m))) : y=x 추세선