전체 글 (755)
[python+pandas] 여러 데이터프레임 하나의 엑셀 파일 내 각각 다른 시트에 저장하기 2022.05.15 23:55:59
반응형

2개의 데이터프레임이 있습니다. 이 데이터프레임들을 하나의 엑셀 파일(.xlsx)에 저장하려고 하는데, 하나는 sheet1에 담고 싶고, 하나는 sheet2에 담고 싶습니다. 

 

이런 경우에는 pandas의 ExcelWriter 함수를 활용하면 됩니다. 바로 간단한 예제 코드로 어떻게 하면 되는지 살펴보시죠.  2022년 5월 15일 밤 11시 기준 프리미어리그 4위까지 랭킹과 라리가 4위까지의 랭킹을 각각 데이터프레임으로 만든 후에 엑셀 파일로 변환하는 코드입니다. 프리미어리그 순위는 sheet1에 저장되게 했고, 라리가 순위는 sheet2에 저장되게 했습니다.

 

import pandas as pd

data1_dict = {'이름': ['맨체스터 시티 FC', '리버풀 FC', '첼시 FC', '토트넘 홋스퍼 FC'],
              '순위': [1, 2, 3, 4],
              '승점': [89, 86, 70, 68]}

data2_dict = {'이름': ['레알 마드리드 CF', 'FC 바르셀로나', '클루브 아틀레티코 데 마드리드', '세비야 FC'],
              '순위': [1, 2, 3, 4],
              '승점': [84, 72, 67, 66]}


df1 = pd.DataFrame(data1_dict)
df1.set_index('순위', inplace=True)
df2 = pd.DataFrame(data2_dict)
df2.set_index('순위', inplace=True)


print(df1, '\n')
print(df2, '\n')

writer = pd.ExcelWriter("football_rank.xlsx")
df1.to_excel(writer, sheet_name="sheet1")
df2.to_excel(writer, sheet_name="sheet2")
writer.save()

 

위 코드를 실행하면 터미널에는 다음과 같은 내용이 출력됩니다. 

 

 

그리고 football_rank.xlsx라는 파일이 생성되었는데 열어보면 다음과 같이 sheet1에는 프리미어리그 순위가, sheet2에는 라리가 순위가 제대로 들어가 있는 것을 확인하실 수 있습니다.

 

 

반응형
secret
[python] seaborn 라이브러리가 제공하는 타이타닉 데이터셋 설명 2022.05.15 13:32:49
반응형

seaborn 라이브러리에는 여러 데이터셋이 내장되어 있습니다. 

 

'anagrams', 'anscombe', 'attention', 'brain_networks', 'car_crashes', 'diamonds', 'dots', 'exercise', 'flights', 'fmri', 'gammas', 'geyser', 'iris', 'mpg', 'penguins', 'planets', 'taxis', 'tips', 'titanic'

 

이 중 우리에게 친숙한 타이타닉 데이터셋은 어떤 컬럼들로 구성되어 있는지 살펴보도록 하겠습니다. 

 

# -*- coding: utf-8 -*-
import seaborn as sns

titanic = sns.load_dataset('titanic') 
print(titanic.head()) # 첫 5개 행만 출력
print(type(titanic))

 

 

보시다시피 15개 컬럼으로 구성되어 있습니다.

 

1. survived

생존 여부

0이면 사망, 1이면 생존

 

2. pclass

객실 등급

1이면 1등급, 2이면 2등급, 3이면 3등급

 

3. sex

성별

male이면 남자, female이면 여자

 

4. age

나이

 

5. sibsp

함께 탑승한 형제 및 배우자 수

 

6. parch

함께 탑승한 자녀 및 부모 수

 

7. fare

요금

 

8. embarked

탑승지 이름 앞글자

C는 Cherbourg, Q는 Queenstown, S는 Southampton

 

9. class

객실 등급

First면 1등급, Second면 2등급, Third면 3등급

 

10. who

남자, 여자, 아이

man, woman, child

 

11. adult_male

성인 남자인지 여부

True면 성인 남자, False면 그외

 

12. deck

선실 번호 첫 알파벳

A, B, C, D, E, F, G

 

13. embark_town

탑승지 이름

Cherbourg, Queenstown, Southampton

 

14. alive

생존여부

no면 사망, yes면 생존

 

15. alone

혼자 탑승했는지 여부

True면 혼자 탑승, False면 가족과 함께 탑승

 

 

이처럼 타이타닉 데이터셋에는 성별, 탑승지, 요금, 동승자 수, 생존 여부 등의 탑승자 정보가 들어가 있음을 확인하실 수 있습니다. 

반응형
secret
[vscode] 어떤 행을 복사해서 다른 곳에 붙여 넣고 싶을 때 빠르게 하는 방법 2022.05.14 23:20:33
반응형

우리가 일반적으로 어떤 내용을 복사해서 붙여넣을 때는 복사하고자 하는 부분을 드래그해서 ctrl + c 한 다음에 원하는 위치에 커서를 놓고 ctrl + v를 합니다. 

 

vscode에서는 이 과정을 좀 더 간단하게 할 수 있습니다. 복사하고자 하는 행에 가서 드래그할 필요없이 ctrl + c 한 다음에 원하는 위치에 가서 ctrl + v를 해주면 붙여넣기가 됩니다. 

 

 

행 전체를 드래그 하지 않고 그냥 커서만 갖다 놓고 ctrl + c만 했는데도 그 행 전체가 복사된 것입니다. 

 

이 기능만 잘 활용해도 코딩 시간을 좀 더 단축시킬 수 있습니다. 

반응형
secret
[세이버메트릭스] 투수가 승, 패, 세이브, 홀드를 기록하게 되는 조건 2022.05.07 23:41:51
반응형

**작년(2021년)에 이어 올해(2022년)도 한국대학생스포츠협의회(KUSF)에서 주최하는 스포츠 데이터 분석 교육 프로그램에서 강사로 참여하게 되었습니다. 그래서 기존에 세이버메트릭스 관련해서 작성했던 글들을 리뉴얼하는 작업을 하고 있습니다. 

 

 

야구 경기를 꽤 오래 시청해온 사람들도 정확히 알지 못하는 규정들이 꽤 많이 있습니다. 저는 투수가 승, 패, 세이브, 홀드를 기록하게 되는 조건도 그 중 하나라고 생각합니다. 도대체 어떤 요건을 충족해야만 승리투수가 되고, 세이브, 홀드를 기록할 수 있는지 지금부터 알아가보도록 하겠습니다.

 

승리투수가 되려면

선발투수의 경우 승리투수가 되려면 아래 3가지 조건을 모두 충족해야 합니다.

1) 5이닝 이상 투구해야 합니다.

2) 교체되는 시점에 팀이 이기고 있어야 합니다.

3) 교체되고 난 후에 팀이 동점이나 역전을 허용하면 안 됩니다. 

 

불펜투수의 경우에는 아래 한가지 조건만 충족하면 됩니다.

1) 지고 있거나 동점인 상황에서 등판하여 교체되기 전에 팀이 역전을 하여 끝까지 리드를 지켜야 합니다.

 

예를 들어 팀이 3:4로 지고 있는 상황에서 투수A가 등판했습니다. 교체되기 전에 만약 팀이 5:4로 역전을 했고 다시 동점이 되거나 역전이 된 일이 없다면 투수A는 승리투수가 됩니다.

 

패전투수가 되려면

패전투수가 되고 싶은 투수는 없겠지만, 불운하게도 투수가 패를 끌어안게 되는 조건은 다음과 같습니다. 

1) 마지막으로 상대팀에게 리드를 허용하는 실점을 기록한 투수 [1]

 

경기가 여러차례 엎치락뒤치락할 수 있지만 마지막으로 리드를 허용하게 한 투수가 패전투수가 된다는 뜻입니다. 

 

세이브 & 홀드를 기록하려면

세이브와 홀드는 기본적으로 불펜투수만 기록할 수 있는 기록입니다. 세이브를 기록할 수 있는 상황은 다음과 같습니다.

1) 3점차 이내로 리드하고 있는 상황에 등판하여 1이닝 이상 동점이나 역전을 허용하지 않음

2) 누상의 주자, 타자, 다음 타자가 득점을 하게 되면 동점이 되거나 역전이 되는 상황에 등판하여 아웃카운트를 하나라도 잡음

3) 3이닝 이상 동점 및 역전을 허용하지 않음

 

이상의 3가지 조건 중 하나라도 충족시켰고 마지막 투수였다면 세이브를 기록하게 됩니다. 이상의 3가지 조건 중 하나를 충족시켰지만 마지막 투수가 아니었다면 홀드를 기록하게 됩니다. 

 

세이브는 승리팀의 투수만 받을 수 있지만, 홀드는 패전팀의 투수도 얻을 수 있습니다.

 

예시 경기 - 2022년 5월 3일 두산 vs LG

2022년 5월 3일 잠실에서 열린 두산 vs LG 경기 결과를 살펴보겠습니다. 이 경기는 LG가 한 점 차이로 승리를 거둔 경기인데요. 계속해서 두 팀이 엎치락뒤치락했던 경기입니다.

 

 

이 경기에서 마지막으로 상대에게 리드를 허용한 실점을 기록한 투수는 두산의 김강률 선수였습니다. 8회 말에 등판하여 1이닝을 던졌지만 2점을 실점하면서 역전을 허용했습니다. 그래서 패전투수가 되었죠.

 

김강률 선수가 역전을 허용한 순간 상대팀 투수는 LG의 김진성 선수였습니다. 그래서 김진성 선수가 승리투수가 되었습니다.

 

3:4인 상황에서 9회초 LG의 고우석 선수가 등판합니다. 1점 차였기 때문에 세이브를 기록할 수 있는 상황이었고, 고우석 선수가 무실점으로 막으며 세이브를 기록하게 됩니다. 

 

두산의 장원준 선수는 팀이 패배했음에도 불구하고 홀드를 기록했습니다. 장원준 선수는 팀이 3:2로 이기고 있는 7회말 1아웃 상황에서 등판하여 2/3이닝 동안 동점이나 역전을 허용하지 않았기 때문에 홀드를 받게 되었습니다. 

 

승, 세이브, 홀드라는 스탯은 공정한가?

생각해볼 만한 것이 있습니다. 과연 승, 세이브, 홀드라는 스탯은 투수의 실력을 잘 나타내주는 스탯인가라는 질문입니다. 사실 투수가 승, 세이브, 홀드를 기록하게 되는 데에는 투수 자체의 능력보다는 타선의 도움과 상황의 도움을 많이 받습니다.

 

일단 세이브 상황, 홀드 상황 자체가 많이 발생하지 않는 팀에서 투수로 뛰고 있다면 세이브, 홀드를 기록하기가 어렵습니다. 이기고 있는 상황보다 지고 있는 상황이 많은 하위권 팀들의 투수는 일단 불리한 것이죠. 

 

그리고 불펜투수로 등판하여 1아웃만 잡았는데 그떄 마침 타선이 도움을 줘서 역전을 하여 결과적으로 승리투수가 되는 것도 어떻게 보면 참 운이 좋은 일이죠. 

 

선발투수로 등판하여 8이닝 무실점으로 기록했고 0:0인 상황에서 9회에도 등판하여 한 타자 상대했는데 그 타자를 볼넷으로 출루시킨 후 다른 투수와 교체되었는데 그 투수가 만약 그 타자를 불러들여 0:1 패배를 하게되었다면 8이닝 무실점이라는 엄청난 투구를 보이고도 패전투수가 되는 것입니다. 패배의 책임을 이 투수 한 명에게 전가하는 것이 과연 공정한 일일까요. 그보다는 1점도 내지 못한 타선에 책임을 물어야하는 것 아닐까요? (투수가 타자들 집합시켜놓고 빠따라도 들어야 할 상황입니다.)

 

그래서 세이버메트리션들 중에는 아주 전통적인 투수 스탯들인 승, 세이브, 홀드에 대해 회의적인 시각을 갖고 있는 사람들이 많습니다. 세이버메트릭스는 기본적으로 운의 요소를 최대한 제거해보려고 하는데 승, 패, 홀, 세에는 너무 운이 작용을 많이 하기 때문입니다.  

 

 

여기까지 읽으시느라 고생하셨습니다. 나름대로 조사해가며 정리해가며 작성했지만 내용 중 일부가 틀렸을 수도 있습니다. 그런 부분 있다면 가감없이 알려주시면 교정하도록 하겠습니다.^^ 

 

참고자료

[1] https://namu.wiki/w/%ED%8C%A8%EC%A0%84%ED%88%AC%EC%88%98, 나무위키, "패전투수"

반응형
secret
[구름IDE] 컨테이너 실행했는데 하단에 터미널이 안 보이는 경우 2022.05.06 21:46:11
반응형

클라우드 통합개발환경 중에 구름IDE가 있습니다.

 

 

인기 개발 유튜버 조코딩 님을 통해 구름IDE에 대해 처음 접한 이후로 종종 사용하고 있습니다. 무료 서비스도 제공하기 때문에 강의를 진행할 때 리눅스 개발환경이 필요할 때 학생들에게 사용을 권하곤 합니다. 

 

오늘은 구름IDE에서 컨테이너를 실행했는데 하단에 터미널이 안 보이는 경우 대처 방법에 대해 알려드리도록 하겠습니다.

 

 

컨테이너를 실행했는데 위와 같이 터미널 창이 없는 경우라면, 상단 메뉴바에서 '창'을 클릭한 후 화면 구성을 클릭한 후 '하단 영역 보기'를 클릭하시면 됩니다.

 

창 - 화면 구성 - 하단 영역 보기

 

 

그러면 아래와 같이 다시 터미널이 보입니다. 간단하죠?

 

 

반응형
secret
[세이버메트릭스] 포스아웃 vs 태그아웃 2022.05.05 20:19:47
반응형

**작년(2021년)에 이어 올해(2022년)도 한국대학생스포츠협의회(KUSF)에서 주최하는 스포츠 데이터 분석 교육 프로그램에서 강사로 참여하게 되었습니다. 그래서 기존에 세이버메트릭스 관련해서 작성했던 글들을 리뉴얼하는 작업을 하고 있습니다.

 

 

야구에서 주자를 아웃시키는 방법은 크게 포스아웃(force out)과 태그아웃(tag out)으로 나눌 수 있습니다. 

 

야구 경기를 보다보면 어떤 경우에는 공을 글러브나 손에 잡은 채로 주자를 터치해서 아웃시키는 경우가 있고 그냥 베이스를 밟고 있는 채로 공을 받아서 아웃시키는 경우가 있습니다. 전자가 태그아웃이고, 후자가 포스아웃입니다. 왜 어떤 상황에서는 터치를 해야만 하고 어떤 상황에서는 그냥 베이스를 밟기만 하면 되는 것일까요?

 

포스아웃과 태그아웃을 논하려면 우선 포스플레이 상황에 대해 알아야 합니다. 표준국어대사전에서 정의내린 포스플레이는 "누상의 주자가 다음 타자의 진루로 인하여 강제적으로 다음 누로 진루해야 할 때에 생기는 플레이"입니다. 좀 더 쉽게 말하자면 선행주자가 뒤로 돌아갈 수 없는 상황이라면 포스플레이 상황입니다. 포스플레이 상황에서는 포스아웃으로 주자가 아웃될 수 있습니다. 그 외에는 모두 태그아웃으로 주자를 아웃시켜야 합니다. 

 

이해를 돕기 위해 몇 가지 예를 들어보겠습니다. 

 

예시1 - 주자 없음

일단 가장 흔하게 발생하는 포스아웃은 타자가 땅볼을 치고 1루로 달려갈 때 상대팀 야수(보통 유격수, 2루수, 3루수)가 공을 잡아서 1루를 밟고 있는 선수에게 던져서 아웃시키는 것입니다. 한 경기에서도 열 번 이상은 나오는 상황이죠. 이때는 타자 주자를 터치하지 않아도 아웃이 됩니다. 

 

예시2 - 주자 1루

또 자주 발생하는 포스아웃은 주자가 1루에 있는 상황에서 타자가 땅볼을 쳤을 때 2루로 달려가던 주자를 아웃시킬 때입니다. 이때 야수는 2루로 달려가는 주자를 아웃시키기 위해 터치할 필요가 없습니다. 그저 공을 받아서 2루를 밟기만 하면 됩니다. 그 다음에 1루로 공을 던져서 공이 타자주자보다 먼저 도착한다면 타자주자도 포스아웃됩니다. 병살플레이가 되는 것이죠.

 

그런데 만약 야수가 공을 잡아서 타자주자를 먼저 잡기 위해 1루로 던져서 타자주자를 포스아웃시켰다면 2루 주자를 잡을 때는 태그 아웃을 해야만 합니다. 왜냐하면 2루 주자는 이제 1루로 돌아갈 수 있는 여지가 생겼기 때문입니다.

 

그래서 보통 병살아웃을 시키기 위해서는 1루보다는 2루에 먼저 공을 던지는 게 일반적입니다. 포스아웃이 태그아웃보다 훨씬 수월하기 때문입니다. 하지만 1루수가 베이스 바로 근처에서 공을 잡았다면 일단 1루를 밟고 2루에 공을 던져서 병살플레이를 만드는 것이 더 나은 방법일 수도 있겠죠. 

 

예시3 - 만루

주자 만루 상황에서 타자가 땅볼을 쳤다면 1루, 2루, 3루에 있는 주자들은 뒤로 돌아갈 수가 없습니다. 그래서 야수가 홈으로 공을 던지면 3루 주자는 포스아웃이 됩니다. 

 

그런데 만약 만루 상황에서 타자가 땅볼을 친 것을 야수가 잡아서 1루로 던진다면 타자주자는 포스아웃이 되지만 그 다음에 홈으로 공을 다른 주자를 잡기 위해 홈, 3루, 2루 등에 던질 때는 태그 아웃을 해야만 합니다. 타자주자가 죽어버리면서 뒤로 돌아갈 수 있는 여지가 생겼기 때문입니다. 

 

예시4 - 1루 주자 도루

1루 주자가 2루로 도루하는 경우에도 태그아웃을 해야합니다. 왜냐하면 1루 주자가 마음을 바꿔서 다시 1루로 귀루할 수도 있기 때문입니다. 

 

예시5 - 주자 2루

주자 2루 상황에서 타자가 땅볼을 쳤을 때는 2루 주자를 잡기 위해서는 태그 아웃을 해야합니다. 2루 주자는 3루로 갈 수도 있고 2루에 그냥 남아있을 수도 있기 때문입니다. 

 

예시6 - 주자 3루

주자 3루 상황에서 타자가 뜬공을 쳤습니다. 이때 3루 주자는 야수가 공을 포구하는 순간에 홈으로 뛸 수 있습니다. 이때 주자를 아웃시키려면 태그아웃을 해야합니다. 왜냐하면 3루 주자는 다시 비어있는 3루로 돌아갈 수 있기 때문입니다. 

 

예시7 - 주자 1, 2루

주자 1, 2루 상황에서 타자가 땅볼을 쳤습니다. 만약 3루수가 공을 잡고 3루를 밟으면 2루 주자는 포스아웃됩니다. 그리고 2루로 던지면 1루 주자는 포스아웃됩니다. 그리고 1루로 던지면 타자 주자도 포스아웃됩니다. 물론 공이 주자들보다 더 빨리 도착했을 경우에만 그렇습니다. 이것이 바로 삼중살입니다. 한 번에 아웃 카운트 3개를 올릴 수 있는 플레이입니다. 한 시즌에 2, 3번 정도 밖에 나오지 않는 아주 보기 힘든 플레이죠. 

 

그런데 만약 3루수가 3루를 밟지 않고 2루로 공을 먼저 던진 상황이라면 2루 주자를 잡기 위해서는 태그아웃을 해야만 합니다. 2루 주자는 다시 2루로 귀루할 수 있는 여지가 생겼기 때문입니다. 

 

예시8 - 주자없음

주자 없는 상황에서 타자가 우중간 쪽으로 안타를 쳤습니다. 타자주자는 일단 1루를 밟았고 멈추지 않고 2루를 향해서 달려갔습니다. 이때 상대팀이 타자주자를 잡으려면 태그아웃을 해야합니다. 왜냐하면 타자주자는 1루로 돌아갈 수 있는 여지가 있기 때문입니다.

 

 

포스아웃과 태그아웃에 대해 이런 저런 예시를 들어봤습니다. 포스아웃, 태그아웃 이제 확실히 이해되셨나요? 역시 야구는 알고 볼 수록 더 재밌는 것 같습니다. 혹시 제가 이해하고 있는 것이 잘못된 부분이 있다면 꼭 지적해주시길 바랍니다^^ 

반응형
secret
[세이버메트릭스] 랭킹에 들어가려면 규정타석과 규정이닝을 채워! 2022.05.04 20:25:05
반응형

**작년(2021년)에 이어 올해(2022년)도 한국대학스포츠협의회(KUSF)에서 주최하는 스포츠 데이터 분석 교육 프로그램에서 강사로 참여하게 되었습니다. 그래서 기존에 세이버메트릭스 관련해서 작성했던 글들을 리뉴얼하는 작업을 하고 있습니다. 

 

이 글에서는 야구 데이터로 순위를 매길 때 중요한 개념인 규정타석과 규정이닝에 대해 설명드리도록 하겠습니다. 

 

규정타석

규정타석은 타자 기록 산정을 위한 최소 타석입니다. 최소 이 정도 타석은 되야 랭킹을 매길 때 끼워준다는 뜻입니다. KBO에서는 전체 경기수에 3.1을 곱한 결과를 소수 반올림한 것을 규정타석으로 잡습니다. MLB, NPB도 마찬가지입니다.

 

- KBO 규정타석: 전체 경기수(144) * 3.1, 소수 버림 = 446타석

- MLB 규정타석: 전체 경기수(162) * 3.1, 소수 반올림 = 502타석

- NPB 규정타석: 전체 경기수(143) * 3.1, 소수 반올림 = 443타석

 

왜 규정타석이 필요한지 실례를 들어 설명해보도록 하겠습니다. 현재(2022년 5월 4일) KBO 기록실에서 타자기록을 보면 롯데 한동희 선수가 이번 시즌에 가장 높은 타율(0.424)을 기록하고 있습니다. 한동희 선수는 규정타석을 채운 타자 중에서 현재 타율이 1등이라는 뜻입니다. 

 

 

그런데 타율이 한동희 선수보다 높은 선수는 존재합니다. 예를 들어 대타로 한 타석에 들어섰는데 안타를 친 경우도 분명 있겠죠. 그러면 타율이 무려 10할이 되어버립니다.

 

공포의 10할 타자

 

하지만 이런 선수는 랭킹에 껴주지 않습니다. 왜냐하면 규정타석을 채우지 않았기 때문입니다. 이런 경우를 랭킹에 껴주면 순위표는 엉망이 되어 버릴 것입니다. 노이즈가 많아지는 것이죠. 그래서 표본수가 어느 정도 되는 선수들의 기록만 랭킹에 반영하는 것이고 그때 기준이 되는 것이 바로 규정타석인 것입니다. 

 

규정이닝

타자에게 규정타석이 있다면 투수에게는 규정이닝이 있습니다. 규정이닝은 투수 기록 산정을 위한 최소 이닝을 뜻합니다. KBO, MLB, NPB에서는 전체 경기수에 1을 곱한 것이 규정이닝이 됩니다. 

 

- KBO 규정이닝: 전체 경기수(144) * 1 = 144이닝

- MLB 규정이닝: 전체 경기수(162) * 1 = 162이닝

- NPB 규정이닝: 전체 경기수(143) * 1 = 143이닝

 

투수의 경우 선발투수가 아닌 이상 규정이닝을 채우기가 결코 쉽지 않습니다. 불펜 투수의 경우 매일 등판해서 1이닝 이상을 책임져야지만 달성할 수 있는 기록이기 때문입니다. 최근에는 모르겠는데 1999년(132경기)에 임창용 선수가 선발등판 없이 138.2이닝을 던져서 규정이닝 채운 경우가 있다고 합니다. 

 

중요!

중요한 것은 타자, 투수 기록 중에서도 비율과 관련된 기록을 산정할 때 규정타석, 규정이닝이 사용됩니다. 비율 기록(타율, 출루율, 방어율 등)이 아닌 누적 기록(홈런 개수, 탈삼진 개수)은 규정타석, 규정이닝이 사용되지 않습니다. 따라서, 그럴 가능성은 희박하긴 하지만, 규정타석을 채우지 않았지만 홈런왕이 될 수도, 규정이닝을 채우지 않았지만 탈삼진왕이 될 수도 있습니다. 하지만 실제로 그런 일은 발생하지 않았던 것 같습니다. 

 

토니 그윈 룰

타자의 경우 규정타석을 채우지 못했지만 그럼에도 불구하고 타격왕(타율왕)이 될 가능성이 여전히 남아 있습니다. 만약 채우지 못한 타석을 모두 아웃 처리했을 때도 타율이 1위면 타격왕이 될 수 있습니다. MLB의 토니 그윈이란 선수가 높은 타율을 유지하고 있었다가 부상으로 규정타석을 채우지 못했지만(단 6타석 부족) 이 규칙이 적용되어 타격왕이 된 적이 있는데, 이것을 계기로 이 규칙에 토니 그윈 룰이라는 이름이 붙여졌습니다. 

 

 

참고자료

[1] https://namu.wiki/w/%EA%B7%9C%EC%A0%95%EC%9D%B4%EB%8B%9D, 나무위키, "규정이닝"

반응형
secret
구글링할 때 2022년 이후의 자료만 검색되게 하고 싶다면? 2022.04.29 22:04:07
반응형

오늘은 구글링할 때 특정 기간에 작성된 자료를 찾는 방법에 대해서 공유하고자 합니다. 구글링을 하다보면 너무 예전 자료가 상단에 노출되는 경우들이 있습니다. 알고리즘이 선택해준 글이기 때문에 유용한 글일 가능성이 크지만, 그래도 시대에 뒤떨어진 글일 가능성도 배제할 수 없습니다. 따라서 기간을 설정해준다면 조금 더 빠르게 나에게 필요한 자료를 찾을 가능성이 커집니다.  

 

특정 시점 이후의 글만 검색되게 하는 방법

ex) 팜유 after: 2021

 

위와 같이 검색하면 2022년 이후에 쓰여진 "팜유"와 관련된 글만 검색됩니다. 2021년을 포함하지 않습니다. 코딩뿐만 아니라 주식과 관련된 정보를 검색할 때는 최신 뉴스를 보는 것이 생명이겠죠? 

 

 

특정 시점 이전의 글만 검색되게 하는 방법

ex) 팜유 before: 2021 

 

2020년, 2019년, 2018년,... 등의 글이 검색됩니다. 마찬가지로 2021년을 포함하지 않습니다. 

 

 

이처럼 "before:년도", "after:년도"만 검색할 때 붙여줘도 빠르게 나에게 필요한 정보를 얻는데 도움이 됩니다. ㅎㅎ 

반응형
secret
[python+pandas] groupby 메소드로 그룹의 평균값, 최대값 산출하기 2022.04.28 21:28:10
반응형

오늘은 SQL의 GROUP BY와 비슷한 역할을 하는 판다스 데이터프레임의 groupby 메소드에 대해 알아보도록 하겠습니다. SQL에서 GROUP BY는 집계 함수(평균, 최대값, 최소값 등)와 함께 사용되는 것처럼 판다스 데이터프레임의 groupby 메소드도 mean(), max() 등의 메소드와 같이 사용됩니다. 

 

백문이 불여일견이라고 간단한 예제를 통해 groupby 메소드의 사용법을 살펴보도록 하겠습니다. 다음과 같이 여러 사람의 국적과 연봉을 담고 있는 데이터프레임이 있다고 가정하겠습니다.

 

import pandas as pd

dict_data = {'국적':['한국', '일본', '중국', '미국', '중국', '한국', '미국', '러시아', '한국', '한국', '이탈리아'], 
'연봉':[4000, 6200, 2500, 8600, 3000, 5600, 6800, 3800, 5200, 3300, 4400]}
df = pd.DataFrame(dict_data)

print(df)

 

 

국적을 기준으로 그룹을 지어서 국적별 연봉 평균을 알아보도록 하겠습니다. 

 

print(df.groupby(['국적']).mean())

 

 

이와 같이 groupby와 mean을 활용해서 간단히 국적별 평균 연봉을 구할 수 있습니다. 제대로 계산된 건지 확인해볼까요? 국적이 한국인 사람이 총 4명이고, 각각 4000, 5600, 5200, 3300의 연봉이므로 모두 더해서 4로 나눠보니 4525가 맞네요.^^

 

이번에는 국적별 최대 연봉자의 연봉을 알아볼까요? max 메소드를 활용하면 되겠죠?

 

print(df.groupby(['국적']).max())

 

 

 

관련 글

[1] [MariaDB] Group by로 그룹화된 그룹의 개수

반응형
secret
[python+pandas] 판다스 데이터 프레임에서 컬럼의 고유값을 알고 싶으면, unique 메소드 2022.04.27 21:43:21
반응형

오늘은 판다스 데이터 프레임의 특정 컬럼에서 고유값(선형대수학의 고유값 아님), 즉 유일한 값들을 리스트로 반환해주는 unique 메소드에 대해 알아보도록 하겠습니다. 

 

우선 예시를 위해 간단한 데이터프레임을 만들도록 하겠습니다. 8명의 국적과 연봉을 담은 데이터프레임입니다. 

 

import pandas as pd

dict_data = {'국적':['한국', '일본', '중국', '미국', '한국', '미국', '러시아', '한국'], '연봉':[4000, 6200, 2500, 8600, 5600, 6800, 3800, 5200]}
df = pd.DataFrame(dict_data)

print(df)

 

 

현재 보면, 한국, 일본, 중국 등 다양한 국적의 사람들이 있는데 어떤 국적의 사람들이 있는지를 확인하고 싶다면 어떻게 해야할까요? 이럴 때 사용하는 것이 바로 unique 메소드입니다.

 

print(df['국적'].unique())

 

위와 같이 코드를 작성해주면 국적 컬럼의 unique한 값들이 리스트의 형태로 반환됩니다. 

 

 

8명의 사람들은 이 5개 국적의 사람들이었군요.^^ 

 

 

관련 글

[1] [python] 리스트의 중복된 요소들 중에 고유한 요소들을 알고 싶다면, numpy.unique()

 

반응형
secret
-
+