본문 바로가기
수업 문제(국비 지원)/Python

[Python] 2022.12.07 (인구구조의 그래프 제목에 코드값 제거하기, 임의의 값으로 10*10 배열을 만들고, 전체 최소값과 최대값, 행별 최대값과 최소값, 열별 최대값과 최소값을 출력하기, 임의의 값..

by byeolsub 2023. 4. 29.

 ❓

'''
0. 인구구조의 그래프 제목에 코드값 제거하기 
'''

import csv
f = open("data/age.csv")
data = csv.reader(f) # csv 형태의 파일을 읽어 저장
type(data) # _csv.reader
data # 반복문을 통해 한행씩 조회가능

import re  #  정규식 이용을 위한 모듈
import numpy as np
import matplotlib.pyplot as plt
name = "역삼"
for row in data : # row : 한개의 행
    if row[0].find(name) >= 0 : # 행정구역의 내용에 name값이 존재?
        print(row)
        name=row[0]
        # row[0]의 코드값 제거
        # re.sub(정규식 문자, 변경문자, 대상이 되는 문자열) : 치환 함수
        # \\( : 그룹을 의미하는 것이 아니고 ( 문자를 의미.
        # \\\\d : 숫자0개 이상을 의미
        # \\) : )문자를 의미.
        name = re.sub("\\(\\d*\\)","",row[0])
        # 숫자의 , 제거
        row = list(map((lambda x : x.replace(",","")), row))
        print(row)
        # 0세 컬럼 이후의 셀들을 배열로 생성
        home = np.array(row[3:],dtype=int)
        print(home)
        break # 반복문 종료
        
# home : 해당 동(읍)의 나이별 인구수를 배열로 저장
plt.style.use('ggplot') # 그래프 스타일 설정
plt.figure(figsize=(10,5),dpi=100) # 그래프 크기 지정 
plt.rc('font',family='Malgun Gothic') # 한글 설정
plt.title(name + ' 지역의 인구 구조') # 그래프 제목 설정
plt.plot(home) # 선 그래프 출력

'''
1. 임의의 값으로 10*10 배열을 만들고, 전체 최소값과 최대값, 
 행별 최대값과 최소값, 열별 최대값과 최소값을 출력하기
  임의의 값이므로 결과에 표시된 숫자는 다름
[결과]
a 최대값 : 0.9957371929996585
a 최소값 : 0.013959842183549176
a 행별 최대값 : [0.85702828 0.99573719 ... 0.99251539 0.93112787]
a 행별 최소값 : [0.04483455 0.08025441 ... 0.27046588 0.05850934]
a 열별 최대값 : [0.93112787 0.91484578 ... 0.62135503 0.95952193]
a 열별 최소값 : [0.08247677 0.04483455 ... 0.05383681 0.05850934 0.09736856] 
'''
import numpy as np
a = np.random.random((10,10))
a

print("a 최대값", a.max())
print("a 최소값", a.min())
print("a 행별 최대값", a.max(axis=1))
print("a 행별 최소값", a.min(axis=1))
print("a 열별 최대값", a.max(axis=0))
print("a 열별 최소값", a.min(axis=0))
#2 강사님
import numpy as np
rg=np.random.default_rng(2) #난수생성기 seed값. 데이터 복원시 필요 
a= rg.random((10,10)) #10행 10열 배열
#a = np.random.random((10,10)) #seed값 설정안함
a
a.shape
print("a 최대값 :",a.max())
print("a 최소값 :",a.min())
print("a 행별 최대값 :",a.max(axis=1))
print("a 행별 최대값 인덱스:",a.argmax(axis=1))
print("a 행별 최소값 :",a.min(axis=1))
print("a 행별 최소값 인덱스:",a.argmin(axis=1))
print("a 열별 최대값 :",a.max(axis=0))
print("a 열별 최대값 인덱스:",a.argmax(axis=0))
print("a 열별 최소값 :",a.min(axis=0))
print("a 열별 최소값 인덱스:",a.argmin(axis=0))

'''
2. 임의의 값을 30개 저장하는 배열을 만들고 평균값을 출력하기
  임의의 값이므로 결과에 표시된 숫자는 다름
[결과]
0.44769045640141436
'''
import numpy as np
b = np.random.random((30))
b
# 평균값
b.mean()
#2 강사님
import numpy as np
b= np.random.random((30)) #seed값 설정 없음
b
b= np.random.random(30)
b
b.mean()

'''
3.  결과와 같은 값을 저장하고 있는 8*8 행렬을 생성하기
[결과]
[[0. 1. 0. 1. 0. 1. 0. 1.]
 [1. 0. 1. 0. 1. 0. 1. 0.]
 [0. 1. 0. 1. 0. 1. 0. 1.]
 [1. 0. 1. 0. 1. 0. 1. 0.]
 [0. 1. 0. 1. 0. 1. 0. 1.]
 [1. 0. 1. 0. 1. 0. 1. 0.]
 [0. 1. 0. 1. 0. 1. 0. 1.]
 [1. 0. 1. 0. 1. 0. 1. 0.]]

'''
import numpy as np
c = np.zeros((8,8))

c[1::2,::2] = 1
c[::2,1::2] = 1
c
#2 강사님
c = np.zeros((8,8)) #8행8열 배열 생성. 요소값은 0으로 설정
c
c[1::2,::2] = 1
c
c[::2,1::2] = 1
print(c)

'''
4. 0부터 10까지의 요소를 가진 배열을 생성하고
그중 3에서 8사이의 모든 요소를 음수인 값을 갖는
배열을 생성
[결과]
[ 0,  1,  2,  3, -4, -5, -6, -7,  8,  9, 10]
'''
import numpy as np
d = np.arange(0,11)
d

d[(d>3) & (d<8)] *= -1
#2 강사님
d=np.arange(11) #0부터 10까지의 요소를 가진 배열
d
d[4:8] = -d[4:8]
d

d=np.arange(11) #0부터 10까지의 요소를 가진 배열
d
d[(3<d) & (d<8)] *= -1
d

'''
5. 0부터 9까지 정수형 난수 100개를 요소로 가진 배열 중 
그중 3의 배수인 값은 음수 값을 갖는 배열을 생성
[결과]
array([-9,  5,  2,  0,  1,  2,  7,  8,  7,  0, -6, -3, -9,  0, -9, -3,  8,
        7,  8,  1, -6, -6, -9,  8,  1,  1, -3,  0, -9, -9,  4,  0,  5,  8,
        7,  7,  7,  7,  2,  2,  5, -9, -3,  1,  2,  5,  2,  8, -9,  7, -9,
        5,  0,  1, -9, -9,  7, -3,  4,  2,  0,  1,  8,  1,  7,  1,  4,  1,
       -3, -6,  8, -3, -9,  7, -9,  0, -9,  2,  1,  1,  8,  2,  2, -3,  7,
        8, -9,  7,  1, -3,  4,  5, -6, -9,  7,  0, -3,  7,  0,  2])
'''
import numpy as np
# randint : 정수형 난수 리턴. 10 : 0~9사이의 임의의 값
e = np.random.randint(10,size=(100))
e
e[e%3 == 0] *=-1
#2 강사님
f=np.random.randint(10,size=100)
f[(f%3==0)] *= -1 #3의 배수만 True
f