본문 바로가기

STUDY

파이썬 스터디 ver2. 1주차

https://youtu.be/GC_mV1IpjWA

Under the sea, under the sea~

노래 자체가 통통 튀고 신나기도 하지만, 세바스찬이 물고기 오케스트라 친구들을 지휘하고 아리엘이 물고기들과 노는 장면이 노래에 발랄한 분위기를 더해줍니다.

이처럼 지친 학기생활에 조금이나마 힘을 주는 노래들이 있습니다. 디즈니 노래와 이와 결이 비슷한 뮤지컬 노래들이에요. 생각나는대로만 읊어봐도 Almost there, Another day of sun, Defying gravity, How far i'll go, When will my life Begin, Somethings never change, You can't stop the beat... 우와 진짜로 디즈니 아니면 뮤지컬류네요. 이게뭐람ㅋㅋㅋㅋㅋ

TMI로, 저는 모아나를 보기 전까지 바다에 대해 별 다른 감흥이 없었어요. 모아나를 세네번 정도 보았을 때 무렵부터 바다를 좋아하게 되었습니다. 진짜에요. 모아나의 바다 텍스쳐(시각효과?)를 볼때마다 감탄하면서 보았어서 더 그런 것 같습니다. 인어공주도 이때쯤 다시 보고 더 좋아졌어요. 제가 디즈니 팬이어서 그런가, 디즈니는 정말 세상의 모든것을 아름답게 만드는 경향이 있는 것 같습니다. 뭐 물론 흑인 인어공주 문제는… 차치하구요.


https://www.acmicpc.net/problem/11050

 

11050번: 이항 계수 1

첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 10, 0 ≤ \(K\) ≤ \(N\))

www.acmicpc.net

import sys

n, k = map(int, sys.stdin.readline().split())
def fct(x):
    temp = 1
    for i in range(x):
        temp = temp*(x-i)
    return temp
a = fct(n)
b = fct(k)
c = fct(n-k)

print(a//(b*c))

자연수 N과 정수 K가 주어졌을 때 이항 계수 (NK)를 구하는 프로그램을 작성하시오.

> 코드 제대로 쓴 것 같은데 왜 계속 틀리나 했었는데.. 마지막의 프린트를 print(a/b*c)라고 써서 한 번, print(a/(b*c))라고 써서 한 번 틀렸다.  후자가 왜 틀렸냐 하면 원하는 출력형식은 int인데 저건 float로 나와 그렇다..

> 팩토리얼 함수를 만들고 나니 라이브러리가 있으면 편할 것 같아 찾아보았다. math라는 라이브러리 안에 팩토리얼 등이 있다고 한다.

https://manniz.tistory.com/entry/Python%ED%8C%8C%EC%9D%B4%EC%8D%AC-%ED%8C%A9%ED%86%A0%EB%A6%AC%EC%96%BCfactorial-%EA%B5%AC%ED%98%84-3%EA%B0%80%EC%A7%80-%EB%B0%A9%EB%B2%95for%EC%9E%AC%EA%B7%80math%EC%86%8C%EC%8A%A4-%EC%BD%94%EB%93%9C

 

[Python]파이썬 import 사용 방법과 예제(설명추가)

c/c++에는 #include가 있고, c#에는 using이 있는 것처럼 파이썬에는 import 가 있습니다. import를 통해서 기존 만들어져있는 라이브러리를 사용할 수 있습니다. 기본적인 파이썬 import 방법은 다음과 같

manniz.tistory.com

 

https://www.acmicpc.net/problem/2751

 

2751번: 수 정렬하기 2

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

www.acmicpc.net

import sys

n = int(sys.stdin.readline())
numlst = []
for i in range(n):
    numlst.append(int(sys.stdin.readline()))
for i in sorted(numlst):
    print(i)

N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.

> 많이 풀어봤던 형식이라 한번에 풀었습니다. 포인트는 '정렬한 결과를 한 줄에 하나씩 출력할 것'. 이를 위해 따로 for문을 하나 더 만들어주었습니다(for i in sorted(numlst)).

> 모든 문제가 이렇게 빠르고 쉽게 풀리면 얼마나 좋을까..요

 

https://www.acmicpc.net/problem/10814

 

10814번: 나이순 정렬

온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을

www.acmicpc.net

import sys

n = int(sys.stdin.readline())
mems = []
for i in range(n):
    age, names = map(str, sys.stdin.readline().split())
    mems.append([int(age), i, names])
for i in sorted(mems):
    print(i[0], i[2])

첫째 줄부터 총 N개의 줄에 걸쳐 온라인 저지 회원을 나이 순, 나이가 같으면 가입한 순으로 한 줄에 한 명씩 나이와 이름을 공백으로 구분해 출력

> 풀다가 화딱지나서 그냥 답안 봄. 왜 틀렸나 하니 '나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬' 기준을 생각하지 않았기 때문. i를 append해주고 그걸 sorted함으로써 int(age)순 -> i순으로 정렬이 된다.

> 왜 안돼!!! 하면서 발악하다 체념하고 구글링을 했다. 역시 구글링은 정신건강에 좋다…

> 다음에 다시 풀어봐야지


데이터분석<ver0>: K-드라마 프로그램, 출연진, 채널, 시청률 등의 TV 콘텐츠 DB 데이터

(출처: https://www.bigdata-culture.kr/bigdata/user/data_market/detail.do?id=5745c740-40d3-11eb-af9a-4b03f0a582d6)

콘텐츠 관련 취업을 희망하는 입장에서, 실제 콘텐츠 데이터를 활용해 분석을 하는 경험이 분명 의미있을 것이라 생각했다.
프로그램의 어떤 요소가 (성별/연령별)시청률과 가장 관계가 있는지 알고싶다. 이는 추후에 있을 프로그램의 시청률 유추에 도움이 될 것이다.
 
data = pd.read_csv('/content/drive/MyDrive/Colab Notebooks/TN_K_DRAMA_CST_AUDERT_INFO_202112.csv')
data.head() #데이터 불러와 위쪽 행, 칼럼 살펴보기

BRDCST_DE:  방송일자
BRDCST_END_DE:  방송종료일자
CHNNEL_NM:  채널명
PROGRM_BEGIN_TIME:  프로그램시작시간
PROGRM_END_TIME:  프로그램종료시간
PROGRM_NM:  프로그램명
PROGRM_DC:  프로그램설명
BRDCST_TME_NM:  방송회차명
PROGRM_BRDCST_AREA_NM:  프로그램방송지역명
BRDCST_TIME:  방송시간  
PROGRM_GENRE_LCLAS_NM: 프로그램장르대분류명
PROGRM_GENRE_MLSFC_NM:  프로그램장르중분류명
PROGRM_GENRE_SCLAS_NM:  프로그램장르소분류명
MALE_4_9YO_WTCHNG_RT: 남자4_9세시청율
MALE_N10S_WTCHNG_RT:  남자10대시청율
MALE_N20S_WTCHNG_RT:  남자20대시청율
MALE_N30S_WTCHNG_RT:  남자30대시청율
MALE_N40S_WTCHNG_RT:  남자40대시청율
MALE_N50S_WTCHNG_RT:  남자50대시청율
MALE_N60S_ABOVE_WTCHNG_RT:  남자60대이상시청율
FEMALE_4_9YO_WTCHNG_RT: 여자4_9세시청율
FEMALE_N10S_WTCHNG_RT:  여자10대시청율
FEMALE_N20S_WTCHNG_RT:  여자20대시청율
FEMALE_N30S_WTCHNG_RT:  여자30대시청율
FEMALE_N40S_WTCHNG_RT:  여자40대시청율
FEMALE_N50S_WTCHNG_RT:  여자50대시청율
FEMALE_N60S_ABOVE_WTCHNG_RT:  여자60대이상시청율
CST_CN: 출연진내용

 

전처리<ver.0>: 
우선 전체 컬럼을 살펴보자. 분석에 필요 없거나 방해가될 것 같은 칼럼으로는 크게 네 가지, `PROGRM_DC(프로그램설명)``BRDCST_TME_NM(방송회차명)``PROGRM_BRDCST_AREA_NM(프로그램방송지역명)``CST_CN(출연진내용)`이다.

이제 이 칼럼들을 하나씩 살펴보며 drop할것인지를 결정할 것이다.
 
data['PROGRM_DC'] #NaN값이나 1회, 2회같은 데이터가 들어있다. 역시 필요없는 것 같다. 드랍하자.
data['BRDCST_TME_NM'] #역시 PROGRM_DC와 같은 데이터가 들어있다. 필요없을 것 같다.
data['PROGRM_BRDCST_AREA_NM'] #전국이 대부분이다. 그럼 지역 데이터는 없는 것일까?
data[data['PROGRM_BRDCST_AREA_NM']!="전국"] #오..이상한 데이터가 나왔다. 딱히 필요없는 게 맞는 듯 하다.

data['CST_CN'] #이 데이터를 활용하려면 정말 많은 노력이 필요할 것 같다. 작금의 분석엔 쓸모없다.

`PROGRM_DC(프로그램설명)``BRDCST_TME_NM(방송회차명)``PROGRM_BRDCST_AREA_NM(프로그램방송지역명)``CST_CN(출연진내용)` 네 칼럼을 없앨만 한 명분을 얻었다.

위 칼럼들을 drop한 뒤 데이터프레임의 형태를 보자. 
 
data = data.drop(['PROGRM_DC', 'BRDCST_TME_NM', 'PROGRM_BRDCST_AREA_NM', 'CST_CN'], axis=1)
data.head() #처음보단 깔끔해 진 것 같다

data.count() #24개의 모든 칼럼에 값이 입력되어 있다.

 

널값은 없는 듯 보이나, 정말 없을까? 모두 유의한 값일지에 대한 확인이 필요할 것 같다.
 
data.describe() #수치형 변수 확인

 

`PROGRM_BEGIN_TIME`의 최솟값이 0이다. 프로그램 시작 시간이 자정이란 이야기일까? 살펴볼 필요가 있다.

(선호도는 0부터 대략 32까지의 숫자로 표현되어 있는 듯 하니 넘어가도 될 것 같다.)
 
 
data[data['PROGRM_BEGIN_TIME']==0] #!!정말로 0시에 시작해 1시 21분 23초에 끝난 듯 하다. 유의한 변수이긴 하나, 이대로 두면 추후에 오류가 발생할 것 같다.

 

VER0...은 아직 특별히 EDA나 마이닝 기법을 활용하기 어렵네요. 으.. 일단 이번주 과제의 늪에 빠져있어서.. 빨리 끝내고 싶습니당

'STUDY' 카테고리의 다른 글

파이썬 스터디 ver2. 3주차  (1) 2022.05.08
파이썬 스터디 ver2. 2주차  (4) 2022.04.05
파이썬 스터디 10주차  (3) 2022.03.18
파이썬 스터디 9주차  (0) 2022.03.04
파이썬 스터디 4주차(머신러닝)(3)  (0) 2022.03.03