[Python] pandas라는 라이브러리를 사용하여 CSV 파일을 읽고 그래프를 만듭니다.

파이썬을 사용하여 Excel 파일 작업을 공부하고 있습니다.
오늘의 주의(복습)는, CSV의 로드에 관해서입니다.
파이썬에서 Excel을 조작하기 위해 openpyxl이라는 패키지를 사용하고 있습니다.

판매.csv
部門,1月,2月,3月
商品A,600,700,800
商品B,4100,3800,4500
商品C,2900,1800,3000
商品D,800,900,1000

위와 같은 CSV 파일을 로드



이런 막대 그래프를 만들어 붙이고 싶습니다.

pandas 설치


pip install pandas

우선은 데이터 해석용의 라이브러리 「pandas」를 인스톨 합니다.

CSV를 로드하는 방법



read_csv 메소드


pd.read_csv('ファイル名',
       encoding='読み取り時に使用する文字コード(今回はutf-8)')

CSV는 pandas의 read_csv 메소드로 읽을 수 있습니다.

읽을 때 사용하는 문자 코드는 그 밖에 「shift_jis」정도일까요?
어떤 차이가 있는지 이해할 수 없습니다.
지금까지, 「utf-8」쪽이 에러가 나오지 않았습니다.

이 로드된 CSV 파일은 DataFrame이라는 객체가 됩니다.
이번에는 DataFrame이라는 객체가 된다고만 기억하기로 했습니다.
조사하고 있으면, 내용이 많아 이해가 따라잡지 않는다···.

dataframe_to_rows 함수


dataframe_to_rows(DataFrameオブジェクト, index=None, header=True)

DataFrame 객체에 dataframe_to_rows 함수를 사용하여
데이터를 한 줄씩 꺼낼 수 있습니다.

여기서 조심해야 할 일은 인덱스와 헤더입니다.
index, header로 각각 설정합니다.

index 인수, header 인수에는 "True""False""None"을 설정할 수 있습니다.

이번에는 나중에 할 그래프 설정을 위해
index 인수는 'None', header 인수는 'True'를 선택합니다.

참조할 파일이 무엇인지 결정하고 설정해야 합니다.

Worksheet.append 메서드


ws.append(リストや辞書)

dataframe_to_rows 함수로 얻은 행을,
Worksheet.append 메서드를 사용하여 시트에 붙여넣습니다.

append 메소드는 시트에 행 단위로 값을 설정할 수 있는 편리한 메소드군요.
그래프 작성뿐만 아니라 사용 빈도가 높을 것 같습니다.

막대 그래프를 만듭니다.



막대 그래프를 만들려면 BarChart 객체를 사용합니다.
bar = BarChart()

# 縦棒グラフに設定
bar.type = 'col'

# 横棒グラフに設定
bar.type = 'bar'

세로・가로・의 설정도 맞추어 실시합니다.

그런 다음 셀을 선택하여 그래프 데이터의 범위를 결정합니다.

Reference 객체


Reference(Worksheetオブジェクト, min_col=最小の列番号, min_row=最小の行番号,
                                max_col=最大の列番号, max_row=最大の行番号)

위와 같이 Reference 객체를 사용하여 범위를 결정합니다.

add_data 메소드


bar.add_data(Referenceオブジェクト, titles_from_data=データの1行目を凡例項目にする際はTrue)

범위 설정이 끝나면 BarChart 객체의 add_data 메서드에서
그래프에 데이터를 추가합니다.

set_categories 메소드


bar.set_categories(Referenceオブジェクト)

초기 상태의 가로축 라벨은 「1,2,3,・・・・」이 되어 있으므로
라벨의 범위를 별도 Reference 객체로 준비해

BarChart 객체의 set_categories 메서드에서 그래프의 가로축 레이블로 설정합니다.

Worksheet.add_chart 메서드


ws.add_chart(BarChartオブジェクト, 'グラフを追加するセル番地')

마지막으로 Worksheet.add_chart 메서드에서 시트에 그래프를 추가하면 완성됩니다.

최종 코드


import pandas as pd
from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference
from openpyxl.utils.dataframe import dataframe_to_rows

wb = Workbook()
ws = wb.active

# CSVファイル読込み
df = pd.read_csv('売上.csv', encoding='utf-8')
for row in dataframe_to_rows(df, index=None, header=True):
    # データを1行ずつ追加
    ws.append(row)

# 棒グラフを選択
bar = BarChart()

# 縦棒グラフに設定
bar.type = 'col'

# グラフのデータ範囲を設定
data = Reference(ws, min_col=2, min_row=1,
                 max_col=ws.max_column, max_row=ws.max_row)

# ラベルの範囲を設定
labels = Reference(ws, min_col=1, min_row=2, max_row=ws.max_row)

# グラフにデータを追加
bar.add_data(data, titles_from_data=True)

# 横軸のラベルを追加
bar.set_categories(labels)

# 横軸タイトルを追加
bar.x_axis.title = '部門'

# 縦軸タイトルを追加
bar.y_axis.title = '売上高(千円)'

# グラフのタイトルを追加
bar.title = '部門別売上高'

# 棒グラフをシートに追加
ws.add_chart(bar, 'A9')

wb.save('部門別売上_棒グラフ.xlsx')

이번은 좀처럼, 이해가 잘 못되어 고생했습니다.

CSV를 붙이면 그것을 바탕으로
BarChart() 객체라고 하는 막대 그래프의 「상자」를 준비해
타이틀이나 라벨 등 파트를 CSV의 데이터를 참고로 붙여 가서 막대 그래프를 만든다
시트에 붙이기

같은 느낌입니까?

으~응. 더 잘 표현할 수 있으면・・・. 어휘력을 원한다.

좋은 웹페이지 즐겨찾기