1. 인터프리터 언어란 C/C++ 과 달리 작성한 소스 프로그램을 컴퓨터가 이해할 수 있는 기계어 (0과 1로 구성된 코드)로 변환하는 컴파일 과정없이 바로 실행할 수 있는 언어 - 파이썬이 인터프리터 언어에 해당. 

 

 

2. 문자열 포맷팅:  특정 포맷에 맞추어 문자열을 재배치하는 것.

% 연산자를 이용하는 방법과 str.format을 이용하는 방법 두 가지가 있다. 

 

name = 'Mark'
a = '나는 %s입니다.' % name
print(a)

출력 : 나는 Mark입니다.

 

C언어 printf( %d , 123) 이렇게 했던 것과 같다고 생각하면 된다. 

% 뒤에 한칸 띄어쓰는 것이 원칙이지만 붙여 써도 상관없다. 

문자열을 끼워 넣는 경우 %s (string), 숫자를 끼워 넣는 경우 %d (digit)을 사용한다.  

 

age = 25
a = '나는 %d살입니다.' % age
print(a)

출력 : 나는 25살입니다.

 

숫자를 끼워 넣을 때, 정의해둔 숫자 앞에 0을 끼워 넣어야하는 경우가 있는데,  ex) 2 -> 02  or 002 

%와 d 사이에 원하는 자릿수를 넣으면 된다. 

02 를 원하는 경우 %02d, 002를 원하는 경우 세자리이므로 %03d ... 

 

age = 25
a = '나는 %03d살입니다.' % age
print(a)

출력 : 나는 025살입니다.

 

궁금해서 %10d 를 입력해 보았다. 

age = 25
a = '나는 %10d살입니다.' % age
print(a)

출력 : 나는         25살입니다.

띄어쓰기 제외하고 25앞에 8칸 생성됨. 10자리인데 숫자 앞을 0으로 채우지 않고 비워둔다. 

 

 

실수형 숫자를 포맷팅하는 경우는 %f를 사용한다. f는 floating point, 부동소수점을 의미한다.

자릿수를 지정하지 않았더니 소수점 뒤가 지저분하게 출력된다. 

height = 180.5
a = '나는 %fcm입니다.' % height
print(a)

출력 : 나는 180.500000cm입니다.

 

 

다음과 같이 소수점 몇째자리에서 반올림할지 지정해준다. %.2f 는 소수점 뒤 둘째자리까지만 표현함을 의미한다. 

height = 180.5
a = '나는 %.2fcm입니다.' % height
print(a)

 

 

5. 범례(Legend)는 그래프의 내용을 알기위해 본보기로 표시해둔 기호나 설명. 범례의 위치를 나타내는 키워드로 'upper left', 'upper center'. 'upper right', 'center left', 'center right', 'center', 'lower left', 'lower center', 'lower right'이 있다. 

 

9. 산술연산자 중 나머지 연산자 : %

11. 리스트 끝에 또 다른 리스트를 병합하는 메소드 : extend()

15. math 모듈의 주요 함수 중 거듭 제곱 값을 구하는 함수 : math.pow()

16.  주피터 노트북에서 작업 폴더의 위치를 알려주는 명령어 : pwd

17. 가우시안 정규분포를 갖는 랜덤 수 생성 메소드 : random.randn()

18. 배열의 모든 요소들의 평균값 반환 : mean()

 

 

 

보안이나 비밀번호가 걸린 엑셀은 openpyxl이나 xlrd로 열리지 않음. 

xlwings를 이용하려고 했지만,  xlwings를 이용한 코드는 xlwings가 안깔린 pc에서는 안돌아간다고.. 

배포용 exe를 만들어야하기 때문에 다른 방법을 찾기로 함. 

 

win32com 역시 보안 걸린 엑셀을 열 수 있다. 

 

 

 

 

[엑셀 열기]

 

win32com.client.Dispatch("Excel.Application") : 윈도우 백그라운드에 엑셀 프로그램을 실행한다

Workbook.Open(##경로##.xlsx) : 경로 내의 엑셀 파일을 열어 창을 띄운다. 엑셀 파일은 wb라고 명명. 

###엑셀어플리케이션####.Visible = True/False : 실행한 엑셀 파일창을 보이게 할지 / 안보이게 할지

###워크북###.Sheets("시트이름") 

excel = win32com.client.Dispatch("Excel.Application")       #자물쇠 엑셀을 열기위한 win32

wb = excel.Workbooks.Open(path1)                            # 입력받은 엑셀을 wb에 저장
excel.Visible = True                                        # False   / 엑셀 안띄우게하기
ws = wb.Sheets("시그널리스트")

 

 

[win32com으로 불러온 엑셀에서 범위 지정하기]

 

###워크시트###.UsedRange() : 내용이 있는 셀만 범위로 지정. 시트의 무한한 셀을 지정하지 않기 위해. 

###워크시트###.Range("A1: C3") / Range("A1","B2") : 특정 셀 혹은 일정 범위를 지정할 수 있다. 

ws.UsedRange()

 

 

[엑셀 데이터 pandas DataFrame으로 옮기기]

 

pd.DataFrame(ws.UsedRange())  : 엑셀 워크북에서 특정 범위만 추출해서 dataframe으로 저장한다. 여기서는 내용이 적힌 셀들만 가져온다. 

df.iloc[:, 7:38 : 가져온 데이터프레임에서 특정 열만 가져온다 (엑셀의 "H:AL").

       아직 컬럼이름이 정해지기 전이기 때문에 iloc를 이용해서 열 인덱스로 지정한다.

df.rename(columns=) : 컬럼 명을 정해줄 수 있다. =뒤에 '@#$%' 직접 이름을 적어줄 수도 있고, 리스트 이름을 지정해줄 수도 있다.

. loc[]/.iloc[] 로 행을 지정해주면 데이터 프레임의 특정 행을 컬럼으로 설정할 수 있다. 0,1,2,3 .. 으로 자동으로 정해져있던 컬럼 인덱스가 정해준 컬럼이름으로 바뀐다. 

df.drop(df.index[0:7]) : 0~6 까지의 행을 삭제한다.  ('df='를 안붙여줘도 inplace=True 를 해주면 df에 덮어쓴다.) 컬럼 명이 있다면, columns=[#컬럼이름#, ... ] 해줘도 된다. 

df.reset_index() : 행, 열을 삭제함으로써 최초 DataFrame에서 가져올 때의 인덱스가 틀어졌는데, 다시 0 부터 인덱스를 만든다. 이 때 기존에 틀어진 인덱스를 맨 왼쪽 컬럼에 데이터로 저장하는데, 기존 인덱스를 버리려면 drop=True 를 해준다.

candb = pd.DataFrame(ws.UsedRange())        # 데이터 적힌 셀들만 추출해서 dataframe에 저장.
candb = candb.iloc[:, 7:38]                 # 원하는 컬럼만 추출하기
candb = candb.rename(columns=candb.loc[6])  # 컬럼 이름 정하기
candb.drop(candb.index[0:7], inplace=True)  # 필요없는 행 삭제하기
candb.drop(columns=['Address', 'Src MAC', 'Src IP', 'NmNode', 'Remote Network \nWake Up Request', 'HS CAN Routing Factor',
        'UsrMsgPurpose', 'GenMsgStartDelayTime', 'Msg Receiver', 'TPIndex', 'UserSigValidity'], inplace=True)
candb = candb.reset_index(drop=True)        # 인덱스를 다시 0부터 정렬하기

 

 

[중복되는 컬럼 이름 바꾸기]

 

데이터 프레임에서 컬럼으로 지정한 열에 동일한 데이터가 중복되어 있을 때, 

컬럼이름이 중복되면 지정에 불편함이 생긴다. 

중복된 이름을 다른 이름으로 변경해주기 위해, 딕셔너리를 사용한다.

key : '중복된 이름' : [대체할 이름, , ... ]  

d = {'Name': ['Name', 'Name.1', 'Name.2']}
candb = candb.rename(columns=lambda c: d[c].pop(0) if c in d.keys() else c) # 동일한 이름의 컬럼을 딕셔너리껄로 대체

 

 

[엑셀 닫기]

wb.Close() : 열었던 워크북, 엑셀 파일을 닫는다. 

SaveChanges=True/False: 위에서 사용한 .Visible() 이 True건 False건 엑셀을 닫을 때 저장 여부 물어보는 팝업이 뜬다. 해당 팝업이 안뜨게 알아서 저장/저장하지 않음을 지정해 줄 수 있다. 

excel.Quit():  윈도우 백그라운드에 실행했던 엑셀 어플리케이션을 종료한다. 

wb.Close(SaveChanges=False)            # 저장여부- NO
excel.Quit()

 

 

[풀 코드]

import pandas as pd
import PySimpleGUI as sg
import win32com.client

excel = win32com.client.Dispatch("Excel.Application") #자물쇠 엑셀을 열기위한 win32

wb = excel.Workbooks.Open('주소 & 파일명.xls') # 입력받은 엑셀을 wb에 저장
excel.Visible = True                          # False로 바꿔주기   / 엑셀 안띄우게하기
ws = wb.Sheets("MAIN bus")                    # 사용할 시트

candb = pd.DataFrame(ws.UsedRange())          # 빈 영역 제외하고 데이터 적힌 셀들만 추출해서 dataframe에 저장.

candb = candb.rename(columns=candb.loc[0])    # 컬럼 이름을 첫 행으로 정하기

candb.drop(candb.index[0:431], inplace=True)  # 필요없는 행 삭제하기
candb = candb.reset_index(drop=True)          # 인덱스를 다시 0부터 정렬하기

#d = {'Name': ['Name', 'Name.1', 'Name.2']}
#candb = candb.rename(columns=lambda c: d[c].pop(0) if c in d.keys() else c)  # 동일한 이름의 컬럼을 딕셔너리껄로 대체

wb.Close(SaveChanges=False)                   # 저장여부- NO
excel.Quit()                                  # 엑셀 종료 
print(candb)

xlwings : 파이썬에서 엑셀 VBA를 다룰 수 있게 하는 모듈 

 

 

[모듈 설치]:

Terminal> pip install xlwings

                  > xlwings addin install

 

 

xlwings 뿐 아니라 xlwings addin 도 깔아줘야 모듈을 사용할 수 있다. 

 

아나콘다와 파이참 둘다 깔아서인지, xlwings 인스톨 후 아래와 같은 오류가 나면서 addin이 안깔렸는데, 

 

xlwings : 'xlwings' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다. 이름이 정확한지 확인하고 경로가 포함된 경우 경로가 올바른지 검증한 다음 다시 시도하십시오.
위치 줄:1 문자:1
+ xlwings addin install
+ ~~~~~~~
    + CategoryInfo          : ObjectNotFound: (xlwings:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

 

 

아나콘다 기본 모듈이라고 하는데 내가 xlwings를 또 깔았으니 혹시 중복되었나 싶어서..

윈도우 검색창에서 xlwings 를 검색, 파일 위치 열기

-> C:\Users\M\PycharmProjects\pythonProject\rusted-host 폴더 안의 xlwings, xlwings-0.25.3.dist-info 폴더를 다른데로 옮겨 버렸다.  -> 지워버려도 되는 지는 확신이 안서서 일단 냅뒀다

그러고 나서

 

pip install xlwings

xlwings addin install 

 

다시 하니까 설치 잘 됨.

 

.py 를 .exe로 변환하려고 아래와 같은 명령을 넣었더니 

 

PS C:\Users\M\PycharmProjects\pythonProject> pyinstaller ExceltoDbc.py

 

다음과 같이 출력되면서 오류가 뜸

 

345 INFO: PyInstaller: 4.7
345 INFO: Python: 3.10.0

 

843 INFO: UPX is not available.

2460 INFO: Building Analysis because Analysis-00.toc is non existent

12821 INFO: Processing pre-find module path hook distutils from 'c:\\users\\m\\pycharmprojects\\pythonproject\\venv\\lib\\site-packages\\PyInstaller\\hooks\\pre_find_module_path\\hook-distutils.py'.
12834 INFO: distutils: retargeting to non-venv dir 'C:\\Users\\M\\AppData\\Local\\Programs\\Python\\Python310\\lib'

 

20207 INFO: Processing pre-find module path hook site from 'c:\\users\\m\\pycharmprojects\\pythonproject\\venv\\lib\\site-packages\\PyInstaller\\hooks\\pre_find_module_path\\hook-site.py'.
20211 INFO: site: retargeting to fake-dir 'c:\\users\\m\\pycharmprojects\\pythonproject\\venv\\lib\\site-packages\\PyInstaller\\fake-modules'

 

IndexError: tuple index out of range

 

검색해보니 python 3.10 버젼에서 나오는 버그 같은데 해결책을 찾음

 

[해결 방법]

 

Python 검색 -> 파일 위치 열기 -> python 바로가기 우클릭해서 파일 위치 열기 

-> python310 설치 폴더 ->Lib -> dis.py 실행   (PyCharm 이건 Visual Studio건 등등 코드 열 수 있으면 된다. )

 

 

 

 

_unpack_opargs 함수를 찾아서

else: 항에  

'extended_arg=0'를 추가해준다. 

def _unpack_opargs(code):
    extended_arg = 0
    for i in range(0, len(code), 2):
        op = code[i]
        if op >= HAVE_ARGUMENT:
            arg = code[i+1] | extended_arg
            extended_arg = (arg << 8) if op == EXTENDED_ARG else 0
        else:
            arg = None
            extended_arg=0
        yield (i, op, arg)

 

다시 변환해보니 잘 된다. 

해결!

파이썬에서 16진수를 10진수로 변환할 일이 생겼다. (CAN ID가 dbc txt 파일에서는 10진수로 표현됨)

 

id=str(int(rawid,16))

 

10진수 -> 2진수 변환하기:

"{0:b}".format()

 

10진수 -> 16진수 변환하기 :

"{0:x}".format()

 

16진수 -> 10진수 변환하기:

int("0x6D",16)

int("6D",16)

 

 

API ? Application Programming Interface

운영체제나 C, C++, Pascal 등과 같은 언어로 응용 프로그램을 만들 때, 윈도우를 만들고 파일을 여는 것과 같은 처리를 할 수 있도록 1,000여 개 이상의 함수로 구성되어 있다. API는 프로그래머를 위한 운영체제나 프로그램의 인터페이스로서 사용자와 직접 대하게 되는 그래픽 사용자 인터페이스나 명령형 인터페이스와 뚜렷한 차이가 있다.

[네이버 지식백과] API [application programming interface] (두산백과)

 

개발자용 인터페이스라고 생각하면 되고, 네이버, 구글, 페이스북 등 여러 회사에서 API를 통해 자사의 서비스를 이용할 수 있게 하고 있다. 오늘은 네이버에서 제공하는 API 사용하는 법을 알아보도록 한다. 

 

 

 

[네이버 개발자 센터에서 애플리케이션 등록하기]

1. '네이버 개발자 센터 -> 서비스 API-> 데이터 랩 -> 오픈 API 이용 신청' 을 누른다. 

 

https://developers.naver.com/main/

 

NAVER Developers

네이버 오픈 API들을 활용해 개발자들이 다양한 애플리케이션을 개발할 수 있도록 API 가이드와 SDK를 제공합니다. 제공중인 오픈 API에는 네이버 로그인, 검색, 단축URL, 캡차를 비롯 기계번역, 음

developers.naver.com

 

2. 간단한 가입 절차

네이버 로그인한 상태로 오픈 API를 누르면 간단한 휴대폰 인증 절차 후 애플리케이션을 등록할 수 있다. 

- 회사명은 기입하지 않아도 된다. 

 

3. 사용할 API 설정

내가 모아둘 API들을 표시할 '애플리케이션 이름'을 설정한다. 

나는 책에서 제안한 것과 같이 아래처럼 설정하였다. 

 

 

 


책에서는 주피터 노트북 사용 시 비로그인 오픈 API 서비스 환경을 설정하였는데, 나는 주피터 노트북을 사용하지 않고 powershell 모드를 사용하기 때문에 해당 링크를 넣어보았다.  

naver.com을 넣어도 가능하다.

 

https://aka.ms/pscore6

 

Windows, Linux 및 macOS에 PowerShell 설치 - PowerShell

Windows, Linux 및 macOS에 PowerShell을 설치하는 데 관해 알아봅니다.

docs.microsoft.com

 

 

 

 

등록을 완료하면 다음과 같은 화면이 나오고, 

받은 Client ID, Client Secret 의 정보를 가지고 네이버 API를 이용할 수 있다. (북마크에 저장해두자.)

 

'파이썬 > 웹 크롤링' 카테고리의 다른 글

네이버 API (2) : 웹 검색 결과 가져오기  (0) 2022.01.13

Pandas로 만든 DataFrame을 CSV 파일로 변환해본다. 

 

 

 

pd.DataFrame( { 행:열 } ) : 데이터프레임을 만든다. (예시는 딕셔너리 형태의 데이터 프레임)

 

그림 1. Data Frame

 

#dataframe#.to_csv ("경로", encoding='utf-8')  : 데이터 프레임을 경로에 csv 형태로 저장한다. 한글은 utf-8 형태로 인코딩한다. 

import pandas as pd

practice= pd.DataFrame({'날짜':[],'운동':[],'양':[]})


practice.loc[0]=['19-03-01','달리기',1.0]
practice.loc[1]=['19-03-02','걷기',1.0]
practice.loc[2]=['19-03-02','달리기',1.0]
practice.loc[3]=['19-03-02','계단 오르기',1.0]
practice.loc[4]=['19-03-03','걷기',1.5]
practice.loc[5]=['19-03-03','달리기',1.0]

practice.to_csv("D:\\02. CANoe\\CANoe_dbc\\SX2HEV\\새 폴더\\practice.csv",encoding='utf-8')

print(practice)

 

 

만들어진 csv 파일을 엑셀로 열면 그림 2와 같이 글씨가 깨져서 보인다. 

엑셀은 utf-8을 지원하지 않기 때문에 그렇고, 생성된 csv 파일 자체에 이상은 없다. 

그림2. utf-8로 인코딩 된 csv 파일을 엑셀로 열 경우&nbsp;

텍스트 파일로 열면 다음과 같이 정상적으로 저장되었음을 확인할 수 있다. 

그림 3. txt로 연 csv파일

 

 

pd.read_csv("경로", encoding='utf-8') : csv 파일를 pandas로 읽어온다.

 

index_col=0 : csv파일로 만들면서 인덱스 값이 csv파일에 데이터로 저장되는데, 그림 4와 같이 Unnamed 컬럼이 새로 생긴 것을 볼 수 있다. 이 불필요한 컬럼을 없애기 위해 "index_col"을 없애준다.  

print(pd.read_csv("D:\\02. CANoe\\CANoe_dbc\\SX2HEV\\새 폴더\\practice.csv",index_col=0,encoding='utf-8'))

 

그림 4. index_col 이 포함된 데이터프레임&nbsp;

 

 

 

 

추가로

#dataframe#.pivot_table (index="컬럼 이름", aggfunc=[np.sum, len]) : 컬럼의 데이터 특성을 나타냄.

aggfunc : default는 평균값이며, sum으로 총합을 나타낼 수도 있고, len 으로 몇번 나오는지도 알 수 있다. 

 

평균
sum

 

 

 

[풀코드]

import pandas as pd
import numpy as np

practice= pd.DataFrame({'날짜':[],'운동':[],'양':[]})


practice.loc[0]=['19-03-01','달리기',1.0]
practice.loc[1]=['19-03-02','걷기',1.0]
practice.loc[2]=['19-03-02','달리기',1.0]
practice.loc[3]=['19-03-02','계단 오르기',1.0]
practice.loc[4]=['19-03-03','걷기',1.5]
practice.loc[5]=['19-03-03','달리기',1.0]

practice.to_csv("D:\\02. CANoe\\CANoe_dbc\\SX2HEV\\새 폴더\\practice.csv",encoding='utf-8')


print(pd.read_csv("D:\\02. CANoe\\CANoe_dbc\\SX2HEV\\새 폴더\\practice.csv",index_col=0,encoding='utf-8'))

print(practice.pivot_table(index="운동", aggfunc=[np.sum, len])) #sum: 총합. len :  며칠을 했는지. 횟수

1. Matplotlib :그래프를 그리기 위한 기본 모듈.

Terminal에,

python -m pip install -U matplotlib

import matplotlib.pyplot as plt

pyplot 모듈을 plt로 정의해서 사용. 

 

2. 한글 지원 설정

matplotlib은 기본적으로 한글 지원이 안되므로 한글지원을 위해 

한글 가능한 폰트를 지정해준다. 

from matplotlib import font_manager, rc
f_path ="C:\Windows\Fonts\HYWULM.ttf" # 한글가능한 폰트 아무거나
font_name=font_manager.FontProperties(fname=f_path).get_name()
rc('font', family=font_name)

 

3. 그래프 그리기 기초

 

plt.figure(figsize=(10,6))  : 그래프 창 설정

plt.plot(x,y) : xy축 그래프 그리기 (x, y 값은 미리 지정할 것)

plt.grid()  : 격자 그리기

plt.show()  : 그래프 출력.  plt.plot() 과 plt.show() 사이에 정의된 플롯 모두 출력한다. 

 

plt.title('그래프 제목')

plt.xlabel('x축')

plt.ylabel('y축')

plt.legent()   : 레전드 딱지

 

 

4. Subplot 활용하기. 

 

matplotlib는 아래와 같이 크게 두 가지 방법으로 사용할 수 있습니다.

stateless API (objected-based)

stateful API (state-based)

 

stateless 방법은 내가 지정한 figure, 내가 지정한 ax에 그림을 그리는 방법이고,

stateful 방법은 현재의 figure, 현재의 ax에 그림을 그리는 방법입니다.

* figure : 그래프를 그릴 공간(종이) / ax(axes) : 그 공간 중 지금 내가 사용할 부분

 

 

* figure 와 ax 객체를 생성하는 방법

    #1. fig = plt.figure() : ax 없는 빈 figure 생성 (후에 ax를 추가해줘야함)

    #2. fig, ax = plt.subplots() : 하나의 ax 만을 가지는 하나의 figure 생성

    #3. fig, axes = plt.subplots(2,2) : 4개(2*2)이 ax들을 가지는 하나의 figure 생성

 

*책 Ch2.4 서울시 청소년 정신건강 분석

Report.xls
0.01MB

1. 엑셀 데이터 불러오기

 

raw_data= pd.read_excel ( '경로' , usecols="####", names=###)  :

 

1) pd.read_excel : 경로의 엑셀을 데이터 프레임 'raw_data'에 저장 

2) usecols, userows : 엑셀에서 어느 행 혹은 어느 열을 불러올지 선택 가능.

3) names= 행의 이름 

 

col_names= ['스트레스','스트레스남학생','스트레스여학생','우울감','우울남학생','우울여학생','자살생각률','자살남학생','자살여학생'] #컬럼 이름 정의
raw_data= pd.read_excel('C:\\Users\\ASUS\\Downloads\\Report.xls', header=1, usecols="C:K", names=col_names)

 

2. dataframe 데이터 정렬 

 

새로운 행 추가 :  df.loc[1]= 100- df.loc[0]   (기존의 행을 참조하여 연산 결과로 df.loc[1]을 새로 추가)

새로운 열 추가 :  df['@@']= ['##', '###']    (하나의 값을 넣으면 해당 열 모든 값이 하나의 값으로 중복되어 입력)

인덱스 설정 : df.set_index( ' 인덱스명 ' , drop=True/False, inplace= True/False)  (기존 기본지정 인덱스 버릴지 말지)

 

raw_data.loc[1]=100-raw_data.loc[0]  # 데이터 프레임의 열을 나타낼 때, loc[i] 로 나타낼 수 있음.
raw_data['응답']=['그렇다','아니다'] # loc 없이 그냥 chr or str 형식이면 일반적으로 column을 나타냄
raw_data.set_index('응답',drop=True, inplace=True) # 인덱스를  위에서 정의한 컬럼인 '응답' 으로 지정. inplace = 기존의 인덱스 0,1,2,.. 를 이걸로 대체한다. drop = 기존 인덱스는 버린다.

* inplace=True :

raw_data=raw_data.set_index(~  이렇게 하지 않으면, raw_data 값에 새로 인덱스 설정한 값이 저장되지 않는다. 

inplace=True 는 앞에 'raw_data=' 를 붙이지 않아도 raw_data 값이 갱신되게 해준다. 

 

특정 컬럼 지우기 : .drop(columns=' 컬럼 이름' , inplace=True)

not_exercise.drop(columns='기간', inplace=True)

특정 컬럼만 불러오기: .copy() 사용 

not_ex_gen=not_exercise[not_exercise['대분류']=='성별'].copy()

 

 

 

3. 그래프 그리기 

import matplotlib.pyplot as plt

 

파이 차트 : df['컬럼 이름']. plot.pie

다른 영역 간 간격 : explode=[ ]

raw_data['스트레스'].plot.pie(explode=[0,0.02]) # plot 모듈의 pie 차트 기능. explode : 다른 영역 간 간격

 

여러 플롯 그리는 경우

 

plt 모듈에서 subplots ( 행, 열, figsize=(가로, 세로))

 

f= figure, ax= axis 속성

그래프 제목 : ax[i]. set_title

그래프 라벨 : ax[i].ylabel

 

subplots 혹은 plot 으로 시작하여 

plt.show() 로 끝남 둘 사이의 plot들을 모두 출력 

f, ax = plt.subplots(1,3, figsize=(16,8)) # 1행 3열의 플롯을 그린다. f는 figure, ax는 axes 속성 지정

raw_data['스트레스'].plot.pie(explode = [0, 0.02], ax=ax[0], autopct='%1.1f%%') # 데이터, 그래프 내부
ax[0].set_title('스트레스를 받은 적 있다. ')# a[0]: 서브플롯 3개중 첫번째 플롯의 속성. label, axis 등 축 관련 속성
ax[0].set_ylabel('')

raw_data['우울감'].plot.pie(explode = [0, 0.02], ax=ax[1], autopct='%1.1f%%') # 데이터, 그래프 내부
ax[1].set_title('우울증을 경험한 적 있다. ')# a[0]: 서브플롯 3개중 첫번째 플롯의 속성. label, axis 등 축 관련 속성
ax[1].set_ylabel('')

raw_data['자살생각률'].plot.pie(explode = [0, 0.02], ax=ax[2], autopct='%1.1f%%') # 데이터, 그래프 내부
ax[2].set_title('자살을 고민한 적 있다. ')# a[0]: 서브플롯 3개중 첫번째 플롯의 속성. label, axis 등 축 관련 속성
ax[2].set_ylabel('')

plt.show()

 

 

 

 

[풀 코드]


import matplotlib.pyplot as plt
import pandas as pd
from matplotlib import font_manager, rc
f_path ="C:\Windows\Fonts\HYWULM.ttf" # matplotlib 에서 한글지원하도록 해주는 폰트
font_name=font_manager.FontProperties(fname=f_path).get_name()
rc('font', family=font_name)

# f. ~ 으로 나타내는 것은 print해보면 해당 값이 아닌 주소 값임을 알 수 있다.


col_names= ['스트레스','스트레스남학생','스트레스여학생','우울감','우울남학생','우울여학생','자살생각률','자살남학생','자살여학생'] #컬럼 이름 정의
raw_data= pd.read_excel('C:\\Users\\ASUS\\Downloads\\Report.xls', header=1, usecols="C:K", names=col_names ) #pandas의 read_excel을 사용해, 데이터를 데이터 프레임으로 가져옴
# 기존 엑셀의 C:K 까지의 컬럼을 가져옴. 컬럼 이름은 col_names
raw_data.loc[1]=100-raw_data.loc[0]  # 데이터 프레임의 열을 나타낼 때, loc[i] 로 나타낼 수 있음.
raw_data['응답']=['그렇다','아니다'] # loc 없이 그냥 chr or str 형식이면 일반적으로 column을 나타냄
raw_data.set_index('응답',drop=True, inplace=True) # 인덱스를  위에서 정의한 컬럼인 '응답' 으로 지정. inplace = 기존의 인덱스 0,1,2,.. 를 이걸로 대체한다. drop = 기존 인덱스는 버린다.


raw_data['스트레스'].plot.pie(explode=[0,0.02]) # plot 모듈의 pie 차트 기능. explode : 다른 영역 간 간격

f, ax = plt.subplots(1,3, figsize=(16,8)) # 1행 3열의 플롯을 그린다. f는 figure, ax는 axes 속성 지정

raw_data['스트레스'].plot.pie(explode = [0, 0.02], ax=ax[0], autopct='%1.1f%%') # 데이터, 그래프 내부
ax[0].set_title('스트레스를 받은 적 있다. ')# a[0]: 서브플롯 3개중 첫번째 플롯의 속성. label, axis 등 축 관련 속성
ax[0].set_ylabel('')

raw_data['우울감'].plot.pie(explode = [0, 0.02], ax=ax[1], autopct='%1.1f%%') # 데이터, 그래프 내부
ax[1].set_title('우울증을 경험한 적 있다. ')# a[0]: 서브플롯 3개중 첫번째 플롯의 속성. label, axis 등 축 관련 속성
ax[1].set_ylabel('')

raw_data['자살생각률'].plot.pie(explode = [0, 0.02], ax=ax[2], autopct='%1.1f%%') # 데이터, 그래프 내부
ax[2].set_title('자살을 고민한 적 있다. ')# a[0]: 서브플롯 3개중 첫번째 플롯의 속성. label, axis 등 축 관련 속성
ax[2].set_ylabel('')

plt.show()

'파이썬 > Pandas' 카테고리의 다른 글

CSV 파일 만들기, 불러오기  (0) 2022.01.12
Matplotlib 설치와 그래프 그리기 기초  (0) 2022.01.11
Pandas 설치와 Data Frame의 기초  (0) 2022.01.11

1. Pandas 설치 

 

Terminal에 아래와 같이 Pandas 설치 

pip install pandas

 

import pandas as pd

 

2. DataFrame :  Pandas 에서 자료를 저장하는 구조체.

 

행 : index. loc() 혹은 iloc()로 접근

열 : Column. Axis. ax[i] 로 접근하거나 열 이름 [" ###"]으로 접근 가능

값 : Value

 

 

DataFrame 생성하기 :

practice= pd.DataFrame({'날짜':[],'운동':[],'양':[]})

practice.loc[0]=['19-03-01','달리기',1.0]
practice.loc[1]=['19-03-02','걷기',1.0]

 

 

3. 데이터 관련 기초 함수들

 

df.describe() : 개수, 평균, 표준편차, 최댓값/최솟값 등 DataFrame의 특성을 자동으로 알려줌.

 

df.sort_value(by='A' )  : 'A' column 기준으로 정렬 (default 오름차순 정렬)

df.sort_value(by='A', ascending=False ) : False; 내림차순, True or 안적으면 오름차순. 

 

df['A'] : 'A' column 만 출력.

df[0:3] : 0,1,2 column 출력 (슬라이싱)

 

(loc= location)

df.loc[##index##] : 해당 열 출력  

df.loc[ "행", ["컬럼"] ] : 해당 셀 출력

df.loc[ "행", ["열1"," 열2"]] : 해당 영역 출력 

df.loc[ "행1":"행3", ["컬럼1":" 컬럼3"]] : 해당 영역 출력.

df.loc[ ["행1", "행3"], [열2:열4] ] 

df.loc[:, 컬럼 인덱스] : 안됨! 컬럼 인덱스는 iloc에서 지정해야함

 

df.iloc[행, 열] : 슬라이싱은 loc와 똑같이 가능.  다만, loc는 인덱스의 이름이나 컬럼의 이름을 지칭했다면, iloc는 무조건 숫자로 지칭.

df.loc[:, 1:3] : 1~2 컬럼만 추출

 

슬라이싱에 관한 자세한 내용은

아래 글 참고

https://bearwoong.tistory.com/65

 

파이썬 DataFrame 인덱싱 하는 방법(df[ ], df.loc[ ], df.iloc[ ])

DataFrame은 python list 나 numpy array 처럼 여러 값을 저장할 때 쓴다. 하지만 DataFrame은 저장되는 자료형에 제약이 없고, column 이름이나 row 이름을 지정해줄 수 있어서 데이터를 관리하기에 훨씬 편리

bearwoong.tistory.com

 

 

4. 행 열 바꾸기

 

df2= pd.DataFrame( df, columns=['A', 'C', 'D', 'B'])   

 

pandas 모듈, DataFrame 기능, df를 가져와서 컬럼을 원래 있던 ABCD 에서 ACDB 순서로 바꾼다. -> df2 데이터프레임에 저장

 

 

MS Office 어플을 다루기 위한 win32com 

win32com을 설치하기 위해 

install pywin32 를 해준다. (여느 때와 같이 SSL 에러 회피)

 

python -m pip install pywin32 --trusted-host pypi.org --trusted-host files.pythonhosted.org

 

win32com 모듈 임포트 해준다. 

import win32com.client

 

+ Recent posts