모두의 데이터 분석 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()

40대가 압도적으로 많고, 노년으로 갈 수록 줄어듬

 

>> 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 추세선

 

복사했습니다!