전체 글 (755)
[python+pandas] 판다스 데이터프레임 sort_values 메소드 2022.04.26 20:18:23
반응형

SQL에서 어떤 컬럼의 값을 기준으로 정렬해줄 때 사용되는 예약어는 ORDER BY입니다. 파이썬 판다스 데이터프레임에서 이것과 비슷한 역할을 해주는 것이 바로 sort_values 메소드입니다.

 

설명을 위해 간단한 데이터프레임을 하나 만들겠습니다. A, B, C, D, E, F, G라는 학생들의 수학, 영어, 역사 점수를 담은 데이터프레임입니다. 

 

import pandas as pd

df = pd.DataFrame([[95, 92, 88], [84, 67, 88], [91, 99, 68], [87, 79, 81], [77, 92, 85], [81, 82, 83], [91, 73, 41]],
     index=['A', 'B', 'C', 'D', 'E', 'F', 'G'],
     columns=['math', 'english', 'history'],
   )

print(df)

 

 

 

하나의 컬럼을 기준으로 정렬

수학 점수를 기준으로 오름차순 정렬을 해보도록 하겠습니다. 

 

print(df.sort_values(by=['math']))

 

 

수학점수가 가장 낮았던 E 학생부터 가장 높았던 A 학생 순으로 정렬되었습니다.

 

이번에는 수학 점수가 높은 학생부터 정렬을 해보도록 하겠습니다. 내림차순 정렬이 되어야 하므로, ascending 파라미터를 추가하면서 값은 False로 지정해줍니다. 

 

print(df.sort_values(by=['math'], ascending=False))

 

 

기대한 것처럼 수학점수가 가장 높았던 A학생부터 정렬되었습니다.

 

여러 개 컬럼을 기준으로 정렬

이번에는 수학 점수가 높으면서 역사 점수가 낮은 학생부터 정렬해보도록 하겠습니다. 이 경우에는 수학 점수는 내림차순이 되어야하고, 역사 점수는 오름차순이 되어야 합니다.

 

print(df.sort_values(by=['math', 'history'], ascending=[False, True]))

 

 

일단 수학점수는 내림차순으로 잘 정렬된 것을 한 눈에 확인할 수 있습니다. 그리고 수학 점수 91점으로 같은 G 학생과 C 학생을 보면 영어 점수는 오름차순으로 정렬된 것을 알 수 있습니다. 

 

 

관련 글

[1] [MariaDB] Order by, 여러 개로 정렬하기 (더 중요한 것을 앞에)

[2] [sqlite3] 데이터 오름차순 및 내림차순으로 정렬하기

반응형
secret
[mysql] mysql 서버 버전 확인하기 2022.04.25 21:33:24
반응형

mysql 서버를 이전할 때는 서버의 버전을 잘 맞춰주는 것이 좋습니다. 그렇지 않으면 굉장히 번거로워질 수 있습니다. 

 

오늘은 mysql 서버의 버전을 확인하는 방법에 대해 알아보도록 하겠습니다. 

 

터미널에서 확인하는 방법

리눅스 터미널에서 확인하고 싶을 때는 다음과 같은 명령어를 입력해주면 됩니다.

 

mysql --version

 

또는 

 

mysql -V

 

 

제 경우에는 5.7.35 버전의 MySQL 서버를 사용하고 있습니다. 

 

mysql에 접속해서 확인하는 방법

mysql 서버에 접속해서 버전을 확인할 수도 있습니다. 접속하면 바로 버전 정보가 나옵니다.

 

반응형
secret
[python+pandas] 판다스 데이터프레임 loc, at, iloc, iat 메소드 비교 2022.04.24 23:42:29
반응형

오늘은 판다스 데이터프레임의 loc, at, iloc, iat 메소드를 비교해보도록 하겠습니다. 우선 네가지 메소드 모두 데이터프레임에서 인덱싱과 관련된 메소드입니다. 정말 많이 사용하는 메소드들인데 사용할 때마다 문법이 헷갈려서 매번 다시 구글링하게 되는 놈들이라, 이번에는 정리하면서 외우려고 합니다. ^^ 

 

loc 메소드는 특정 범위의 데이터를 인덱싱하는데 사용할 수 있습니다. 반면 at 메소드는 딱 하나의 데이터를 인덱싱할 때 사용합니다. 

 

예시로 사용할 데이터프레임을 먼저 생성했습니다. A, B, C, D, E라는 학생들의 수학, 영어, 역사 시험 성적을 담은 데이터프레임입니다.

 

import pandas as pd

df = pd.DataFrame([[95, 92, 88], [84, 67, 88], [91, 99, 68], [87, 79, 81], [77, 92, 85]],
     index=['A', 'B', 'C', 'D', 'E'],
     columns=['math', 'english', 'history'],
   )

 

 

loc 메소드

A, B, C 학생의 영어 성적만을 선택하고 싶으면 다음과 같이 loc 메소드를 사용하면 됩니다. 참고로 loc은 location을 줄인 것입니다.

 

print(df.loc[['A', 'B', 'C'], 'english'])

 

 

 

만약 A, B, C 학생의 영어 및 역사 성적을 선택하고 싶으면 다음과 같이 코드를 작성하면 됩니다.

 

print(df.loc[['A', 'B', 'C'], ['english', 'history']])

 

 

at 메소드

위에서 언급했듯이 at 메소드는 특정 행, 특정 컬럼의 데이터를 읽을 때 사용합니다. 만약 C 학생의 영어 성적을 알고 싶다면 다음과 같이 코드를 작성하면 됩니다. 

 

print(df.at['C', 'english'])

 

 

 

loc 메소드와 at 메소드를 살펴봤습니다. 그러면 앞에 i가 추가된 iloc 메소드와 iat 메소드에 대해 알아보도록 하겠습니다. 여기서 i는 integer의 첫글자를 따서 붙여진 것입니다. 인덱스와 컬럼명을 사용하지 않고 대신 행과 컬럼의 위치에 대해서 정수를 사용하고 싶으면 iloc과 iat을 사용하면 됩니다. 

 

iloc 메소드

1번째 행부터 2번쨰 행까지, 그리고 0번째 컬럼부터 1번째 컬럼까지의 데이터를 인덱싱하고 싶을 때는 iloc 메소드를 사용하면 됩니다.  

 

print(df.iloc[1:3, 0:2])

 

 

 

iat 메소드

마찬가지로 4번째 행, 0번째 컬럼의 값을 알고 싶을 때는 iat 메소드를 사용할 수 있습니다.

 

print(df.iat[4, 0])

 

 

 

오늘은 판다스 데이터프레임의 loc, at, iloc, iat 메소드에 대해서 정리해봤습니다. 역시 포스팅을 하면서 정리해보니 차이점이 좀 더 확실하게 구분이 되는군요^^

반응형
secret
[python] 파이썬 리스트에 최대 몇 개의 요소가 들어갈 수 있을까? 2022.04.19 22:24:48
반응형

파이썬 개발을 하다가 파이썬 리스트에 최대 몇 개의 요소(element)가 들어갈 수 있는 지를 대략적으로 알아야 하는 상황이 생겼습니다. 

 

구글링 해보니 방법은 간단하더군요. 표준 모듈인 sys 를 활용하면 됩니다.

 

import sys
print(sys.maxsize)

 

 

9,223,372,036,854,775,807

 

약 9백경 정도가 되니 어마어마하게 큰 숫자네요. 참고로 10,000조가 1경입니다. 이 숫자는 PC의 사양에 따라 다를 수 있다고 합니다. 문자열, 딕셔너리, 튜플 등에 허용되는 최대 요소의 수도 마찬가지인 것 같습니다. 

 

제가 개발하는 프로그램에서는 이 정도 요소의 개수를 리스트에 담는 것이 허용된다면 전혀 문제가 안 될 것 같습니다. 

 

참고자료

[1] https://stackoverflow.com/questions/855191/how-big-can-a-python-list-get

반응형
secret
[python] UnicodeDecodeError: 'cp949' codec can't decode byte 0xed in position 135: illegal multibyte sequence 에러 해결법 2022.04.18 21:09:41
반응형

UnicodeDecodeError: 'cp949' codec can't decode byte 0xed in position 135: illegal multibyte sequence

 

 

위 에러는 파이썬에서 configparser 모듈을 이용해서 config.ini와 같은 파일을 읽을 때 발생할 수 있는 에러입니다. cp949는 한글 인코딩 방식의 하나인데 파이썬에서는 이걸로 인코딩된 한글은 제대로 못 읽어냅니다. 

 

이때는 인코딩 방식을 utf-8로 지정해주면 간단히 해결됩니다. 

 

config = configparser.ConfigParser()
config.read('config.ini')

 

위와 같이 코딩했을 때는 위 에러메시지가 떴지만 config.read에 encoding="UTF-8"을 추가해주니 더 이상 에러 메시지가 뜨지 않습니다. 

 

config = configparser.ConfigParser()
config.read('config.ini', encoding="UTF-8")

 

 

관련글

[1] [python] SyntaxError: Non-ASCII character '\xec' 에러 해결법

반응형
secret
[css] 요소 사이에 구분선 넣고 싶다면? ex) 게시판 | 1:1문의 | 회원가입 2022.04.11 22:57:11
반응형

오늘은 요소 사이에 구분선을 넣는 방법에 대해 알아보도록 하겠습니다. 많은 웹사이트를 보면 아래와 같이 어떤 요소들을 구분해 주기 위해서 세로 구분선을 넣어주는 경우가 많습니다. 

 

삼성전자 홈페이지 푸터 부분

 

이런 구분선을 넣어주면 전반적으로 깔끔한 느낌도 주고, 요소들 구분을 확실히 시켜주기 때문에 많이 사용합니다. 

 

그럼, 한번 함께 만들어 가봅시다. html과 css를 활용해야 하는데, html 코드 먼저 살펴보겠습니다.

 

<div id="test">
    <span>요소1</span>
    <span>요소2</span>
    <span>요소3</span>
    <span>요소4</span>
</div>

 

아주 간단합니다. test라는 아이디를 가진 div 요소 안에 4개의 span 요소가 있습니다. css로 꾸며주지 않은 상태에서 웹 페이지를 열어보면 다음과 같이 보일 것입니다. 

 

 

요소1, 요소2, 요소3, 요소4가 순차적으로 같은 줄에 위치해 있습니다. span 태그를 사용했기 때문입니다.

 

이제 css로 꾸며보겠습니다. 요소2, 요소3, 요소4에 border-left를 부여해서 구분선을 넣는 것도 하나의 방법이 되겠지만, 저는 다른 방법을 사용하겠습니다. 

 

아이디어는 첫번째 요소를 제외하고 두번째 요소부터 앞쪽에 너비가 1px인 요소를 넣어주면서 background-color를 부여해주는 것입니다. 사실상 구분선이 아니라 너비가 1px인 사각형을 넣어주는 것입니다. 너비가 1px라서 선처럼 보일 뿐인 것이죠. 

 

우선 아이디가 test인 요소의 자식인 span 요소 중에서 2번째 요소부터 마지막 요소까지 position을 relative로 설정하고 margin-left와 padding-left를 적절히 부여해줍니다. 참고로 아이디가 test인 요소의 자식 span 요소 중에서 2번째 요소부터 마지막 요소까지에 대한 css 선택자는 다음과 같습니다.

 

#test span:nth-child(n+2)

 

그 다음에 ::after 가상요소를 활용해서 요소들의 좌측에 너비가 1px, 높이가 15px인 검정색 배경색의 요소를 넣어줍니다. 이 내용을 css 코드로 나타내면 다음과 같습니다. 

 

#test span:nth-child(n+2) {
    position: relative;
    margin-left: 5px;
    padding-left: 10px;
}

#test span:nth-child(n+2)::after {
    position:absolute;
    left: 0;
    top: 3px;
    content: "";
    width: 1px;
    height: 15px;
    background-color: black;
}

 

이제 html 문서를 웹브라우저에서 열어보면 적절하게 구분선들이 들어간 것을 확인할 수 있습니다. 

 

 

 

 

 

 

 

 

 

 

 

 

반응형
secret
[css] 요소의 종횡비를 지정해주는 css 속성, aspect-ratio 2022.04.10 13:37:04
반응형

html 에서 어떤 요소에 대해서 종횡비(aspect-ratio), 즉 가로세로비율을 지정해서 유지하고 싶은 경우가 있습니다. 이게 생각보다 구현하기가 쉽지 않습니다. 다행히 css에는 이것과 관련해서 아주 좋은 속성이 있습니다. 바로 aspect-ratio 속성입니다. 

 

설명을 위해 간단한 test라는 아이디를 가진 div 요소를 만들겠습니다.

 

<div id="test">
    aspect-ratio 속성
</div>

 

이제 이 div 요소를 css로 꾸며주겠습니다. 배경색은 빨간색으로 줄 것이고, 가로 길이는 40%로 설정해줄 것입니다. 브라우저 화면의 40%를 차지할 것입니다. 또한 마지막으로 aspect-ratio를 4:3으로 해서 종횡비가 4:3이 되도록 하겠습니다.

 

#test {
    background-color:red;
    width: 40%; 
    aspect-ratio: 4/3;
}

 

자, 이제 결과화면을 한번 확인해보도록 하겠습니다.

 

 

브라우저 가로의 40% 너비이면서 4:3 비율의 빨간색의 div 요소가 생성된 것을 확인할 수 있습니다. 

 

브라우저 사이즈를 변경했을 때도 4:3 비율이 유지되는지 확인해보겠습니다. 

 

 

브라우저의 사이즈가 바뀌어도 4:3 비율이 잘 유지되죠?

 

이번에는 좀 더 다양하게 종횡비를 설정해보겠습니다. aspect-ratio를 4/3, 1/1, 16/9, 1920/1280으로 설정한 결과입니다. 비교를 위해 요소의 가로 길이는 모두 200px로 고정시켰습니다. 

 

 

이처럼 aspect-ratio 속성 덕분에 아주 쉽게 종횡비를 설정할 수 있습니다.

 

관련글

[1] [pyside6] QLabel에 이미지 넣을 때 종횡비(aspect ratio) 설정

반응형
secret
[vscode] html 문서에서 아이디 또는 클래스 부여한 div 요소 빠르게 생성하는 방법 2022.04.09 08:17:09
반응형

웹 개발을 하다보면 아래와 같이 id 또는 class가 부여되어 있는 div 요소를 만드는 경우가 매우 잦을 것입니다. 

 

<div id="main">
</div>

<div class="name">
</div>

 

vscode에서는 위와 같은 코드를 아주 쉽고 빠르게 생성할 수 있습니다.

 

#main만 입력한 후에 탭을 누르면 자동으로 아래와 같이 됩니다.

 

#아이디 + 탭

 

<div id="main">
</div>

 

또한 .name만 입력한 후에 탭을 누르면 자동으로 아래와 같이 코드가 완성됩니다. 

 

.클래스 + 탭

<div class="name">
</div>

 

이 기능만 활용해도 코드 작성 시간을 상당히 줄일 수 있습니다. 

 

 

 

반응형
secret
어떤 장소의 위도, 경도 좌표 값 얻는 방법(구글 지도 말고 다른 방법) 2022.04.08 20:49:09
반응형

어떤 장소의 정확한 위치를 두 개의 숫자로 나타낼 수 있는 방법이 있습니다. 그것은 바로 위도, 경도 좌표로 그 장소의 위치를 나타내는 것입니다. 위도(latitude)는 동서남북 중 남북에 대한 위치를, 경도(longitude)는 동서에 대한 위치를 나타냅니다. 위도의 값의 범위는 -90에서 90이고, 경도의 값의 범위는 -180에서 180입니다. 위도 -90이면 남극인 것이고, 위도 90이면 북극인 것입니다. 그리고 경도의 경우 영국이 대략적으로 0이고 그로부터 오른쪽으로 가면 +가 되고, 왼쪽으로 가면 -가 됩니다. 

 

이 글을 읽으시는 분들은 위도, 경도에 대한 개념은 갖고 계실 것이라 생각해서 긴 설명은 안하겠습니다. 위도랑 경도가 헷갈리기 쉬운데, "위 아래"니까 위도로 외우시기 바랍니다.ㅎㅎ 

 

본론에 들어가겠습니다. 원래 위도, 경도 좌표값이 구글 지도에서 나왔습니다. 그런데 무슨 일인지 지금은 나오지가 않더라고요. 그래서 다른 방법을 찾다가 찾게 된 방법은 구글 어스를 이용하는 것입니다.

 

우선 장소를 검색합니다. 경복궁을 검색해보겠습니다.

 

 

검색해보시면 위도, 경도 정보로 보이는 것이 두 군데 있습니다. 이 중에서 주소창에 있는 것이 정확한 위도, 경도 정보입니다. 

 

경복궁의 위도, 경도 좌표

위도 37.579617

경도 126.977041

 

구글어스 하단에 있는 위도, 경도 정보는 해당 장소의 정확한 위도, 경도 정보가 아닌 점 유의하십시오. 

 

혹시 제가 구글 지도에서 위도, 경도 정보를 조회하는 방법을 모르고 있는 것이라면 알려주시면 감사하겠습니다^^ 

 

 

반응형
secret
[vscode] 전체 프로젝트에서 어떤 단어를 검색하려면? 2022.04.04 22:14:51
반응형

프로젝트 내에 어떤 단어를 썼는지 안 썼는지 헷갈리는 경우가 있습니다. 만약 어떤 단어를 썼다면 어떤 파일, 어떤 위치에서 사용했는지 알고 싶을 때가 있습니다.

 

visual studio code에는 이를 위한 좋은 단축키가 있습니다. 한 파일 내에서 어떤 단어를 검색할 때는 ctrl + f면 되지만, 이렇게 여러 파일들로 구성되어 있는 프로젝트 단위에서 어떤 단어를 검색할 때는 ctrl + shift + f를 타이핑하면 됩니다.  

 

ctrl + shift + f

 

위 단축키를 입력하면 vscode UI 좌측 상단에 아래와 같은 검색창이 생성됩니다. 

 

 

검색창에 내가 찾고 싶은 단어를 입력하면, 프로젝트 내에서 어떤 파일에 이 단어가 사용되었는지 내역을 알 수 있습니다.

 

 

그리고 나온 결과를 클릭하면 그 파일에서 그 단어가 있는 위치가 열립니다. 

 

꽤 유용한 기능이니 아직 사용해보지 않으신 분들은 사용해보세요. 

 

 

 

 

 

 

 

 

반응형
secret
-
+