(숫자와 아스키코드가 섞인 리스트에 대한 순위 알고리즘)
(최빈값 알고리즘을 이용해 나이분포 그래프를 출력)
(재귀 알고리즘을 이용해서 1월 부터 12월 전월대비 매출 증감액을 나타내는 프로그램)
# 실습
datas = [32, 'a', 'z', 45, 'G', 39, 50, 'T', 't', 22, 31, 55, 's', 63, 59, 'E']
print(f'datas: {datas}')
ascIIDatas = []
for data in datas:
if str(data).isalpha():
ascIIDatas.append(ord(data))
continue
ascIIDatas.append(data)
print(f'ascIIDatas: {ascIIDatas}')
ranks = [0 for i in range(len(ascIIDatas))]
for idx, data1 in enumerate(ascIIDatas):
for data2 in ascIIDatas:
if data1 < data2:
ranks[idx] += 1
print(f'ranks: {ranks}')
for i, d in enumerate(datas):
print(f'data:{d:>2} \t rank:{ranks[i] + 1}')
# 실습 실행파일
import maxMod
import modeMod
ages = [25, 27, 27, 24, 31, 34, 33, 31, 29, 25,
45, 37, 38, 46, 47, 22, 24, 29, 33, 35,
27, 34, 37, 40, 42, 29, 27, 25, 26, 27,
31, 31, 32, 38, 25, 27, 28, 40, 41, 34]
print(f'employee cnt: {len(ages)}명')
maxAlg = maxMod.MaxAlgorithm(ages)
maxAlg.setMaxIdxAndNum()
maxAge = maxAlg.getMaxNum()
print(f'maxAge: {maxAge}세')
modAlg = modeMod.ModeAlgorithm(ages, maxAge)
modAlg.setIndexList()
print(f'IndexList: {modAlg.getIndexList()}')
modAlg.printAges()
# 최댓값 클래스
class MaxAlgorithm:
def __init__(self, ns):
self.nums = ns
self.maxNum = 0
self.maxNumIdx = 0
def setMaxIdxAndNum(self):
self.maxNum = 0
self.maxNumIdx = 0
for i, n in enumerate(self.nums):
if self.maxNum < n:
self.maxNum = n
self.maxNumIdx = i
return self.maxNum
def getMaxNum(self):
return self.maxNum
def getMaxNumIdx(self):
return self.maxNumIdx;
# 최빈값 클래스
import maxMod
class ModeAlgorithm:
def __init__(self, ns, mn):
self.nums = ns
self.maxNum = mn
self.indexes = []
# 인덱스 리스트 생성 및 빈도 저장
def setIndexList(self):
self.indexes = [0 for i in range(self.maxNum + 1)]
for n in self.nums:
self.indexes[n] = self.indexes[n] + 1
def getIndexList(self):
if sum(self.indexes) == 0:
return None
else:
return self.indexes
def printAges(self):
n = 1
while True:
maxAlo = maxMod.MaxAlgorithm(self.indexes)
maxAlo.setMaxIdxAndNum()
maxNum = maxAlo.getMaxNum()
maxNumIdx = maxAlo.getMaxNumIdx()
if maxNum == 0:
break
print(f'[{n:0>3}] {maxNumIdx}세 빈도수: {maxNum}\t', end='')
print('+' * maxNum)
self.indexes[maxNumIdx] = 0
n += 1
# 실습
sales = [12000, 13000, 12500, 11000, 10500, 98000, 91000, 91500, 10500, 11500, 12000, 12500]
def salesUpAndDown(ss):
if len(ss) == 1:
return ss
print(f'sales: {ss}')
currentSales = ss.pop(0)
nextSales = ss[0]
increase = nextSales - currentSales
if increase > 0:
increase = '+' + str(increase)
print(f'매출 증감액: {increase}')
return salesUpAndDown(ss)
if __name__ == '__main__':
salesUpAndDown(sales)
알고리즘 강의의 실습내용과 비슷한 문제가 많아 빠르게 진도가 나갔고 다른 문제들도 강의 내용과 크게 벗어난 문제가 없었다. 다음 EDA진도가 많이 밀려 서둘러 수강해야 해서 마음이 조급하다... 제발 밀리지 말고 진도맞춰서 수강하자!
이글은 제로베이스 데이터 취업스쿨의 강의자료 일부를 발췌하여 작성되었습니다.