Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

travel data science

[Numpy] 2. 배열 생성 및 차원 변경, random함수, 통계(중앙값, 평균, 합계, 평균), 정렬 (2주차 스터디) 본문

Python study

[Numpy] 2. 배열 생성 및 차원 변경, random함수, 통계(중앙값, 평균, 합계, 평균), 정렬 (2주차 스터디)

가방이 2021. 7. 28. 21:46

* array생성

np.arange(시작, 끝, 간격)

np.linspace(시작, 끝, num=생성 갯수)

np.logspace(시작, 끝, num=생성 갯수) #linspace와 다른 점은 log를 쓰기 때문에 지수 형태(e+100같은..)로 나타난다.

 

* array의 길이, 차원 등 확인 및 재배열

a=np.arange([[1, 2, 3], [4, 5, 6]])

a=a.reshape(1, 2, 3)

  # [[[1, 2, 3], [4, 5, 6]]] => 차원, shape변경

 

* 1차원으로 변경

a=a.ravel()

a=a.flatten()

 

* numpy에서 사용하는 random함수

b=np.random.seed(100) #seed는 변수를 생성하는 것은 아니고 라디오 주파수라고 생각, 같은 seed번호에서 random한 변수 생성시 같은 숫자 배열만 나타나는 경향이 있음.

b=np.random.randint(생성 범위) #생성 범위 중 하나만 추출 

b=np.random.rand(생성갯수) #0~1정규분포 난수

b=np.random.randn(생성갯수) #평균 0, 표준편차 1의 가우시안 표준정규분포 난수

 

* 평균, 중앙값, 합계 계산하기

np.mean(a) #평균

np.sum(a)  #합계

np.median(a) #중앙값

 

*argsort()사용하기

a=np.array([10, 8, 1, 2])

s=a.argsort()  => [2, 3, 1, 0]  #정렬을 하고, 원래 index를 가져옴

a를 제대로 출력하고 싶으면

a[s]를 출력하면 됨.

 

* 예제 문제 풀기

import pandas as pd
import numpy as np

def print_score(array1, array2):
    print("---------------------------------------------------------------------------")
    print("{:<8}{:<8}{:<8}{:<8}{:<8}{:<8}{:<8}".format('번호', '국어', '수학', '영어', '총점', '평균', '환산'))
    print("---------------------------------------------------------------------------")
    
    argsort_array=array1[:,0].argsort()
    array1=array1[argsort_array]
    for i in array1:
        a, b, c, d, e, f, g=i
        print("{:<10}{:<10}{:<10}{:<10}{:<10}{:<10}{:<10}".format(a, b, c, d, e, f, g))
    
    array_max=np.max(array2, axis=0)
    array_min=np.min(array2, axis=0)
    print("{:<6}{:<10}{:<10}{:<10}".format('최고점수', array_max[0], array_max[1], array_max[2]))
    print("{:<6}{:<10}{:<10}{:<10}".format('최저점수', array_min[0], array_min[1], array_min[2]))
    
def grade(array):
    mean=np.mean(array)
    if mean >= 90:
        grade="A"
        
    elif mean>=80:
        grade="B"
        
    elif mean>=70:
        grade="C"
        
    elif mean>=60:
        grade="D"
        
    else:
        grade="F"
        
    return grade

def isint(x):
    list=[]
    result=x
    for i in range(0, 101):
        list.append(str(i))
    if x not in list:
        result=input("1~100 사이 점수로 다시 입력하시오: ")
        result=isint(result)
    return result

def is10int(array, x):
    list=[]
    result=x
    for i in range(0, 10):
        list.append(str(i))
        
    if x not in list:
        result=input("0~10 사이로 다시 입력하시오: ")
        result=is10int(array, result)
        
        ''''''
    if array.shape[1]==0:
        return result
    
    elif x in array[:,0]:
        result=input("이미 입력된 학번입니다. 다시 입력해주세요: ")
        result=is10int(array, result)
        
    return result


print("===========")
print("==피식 고등학교 성적처리 프로그램==")
print("===========")
print("1. 성적입력")
print("2. 성적현황")
print("3. 종료")
print("===========")

list_all=[]
list_scores=[]
array_student=np.array([[]])
while True:
    status=input(" > ")
    print("===========")
    if status=="1":
        print("학생 성적 입력")
        print("===========")
        num=input("학번: ")
        num=int(is10int(array_student, num))
        
        score_korean=input(f"{num}의 국어 점수: ")
        score_korean=int(isint(score_korean))
        
        score_math=input(f"{num}의 수학 점수: ")
        score_math=int(isint(score_math))
        
        score_english=(input(f"{num}의 영어 점수: "))
        score_english=int(isint(score_english))
        
        list_score=[[score_korean, score_math, score_english]]
        array_score=np.array(list_score)
        list_student=[[num, score_korean, score_math, score_english, np.sum(array_score), round(np.mean(array_score), 2), grade(array_score)]]
        save_point=input(f"{num}의 점수를 저장하시겠습니까(y/n)? => ")
        
        if save_point=="y"or save_point=="Y":
            list_all=list_all+list_student
            list_scores=list_scores+list_score
            array_student=np.array(list_all)
            array_scores=np.array(list_scores)
        
        print(f"--> 학생 ({num})의 점수 합계는 {list_student[0][4]}점, 평균은 {round(list_student[0][5], 2)}입니다.")
        print("===========")
        
    elif status=="2":
        print_score(array_student, array_scores)
        
    elif status=="3":
        print("종료합니다.")
        print("==========")
        break
        
    else:
        print("1, 2, 3 중에서 입력해주세요")

'Python study' 카테고리의 다른 글

백준 11022번  (0) 2021.10.03
백준 15552번  (0) 2021.10.03
재귀호출 알고리즘  (0) 2021.09.30
[python basic] 3. 데이터 타입과 컬렉션  (0) 2021.09.02
[Numpy] 1.Numpy기초와 인덱싱 (1주차 스터디)  (0) 2021.07.05