[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
商品E,600,550,720

이전과 마찬가지로 위와 같은 CSV 파일을 읽습니다.



이런 원형 차트를 만들어 붙여넣고 싶습니다.

PieChart 객체



원형 차트를 만들려면 PieChart 개체를 사용합니다.
그래프를 만드는 방법 자체는 막대 그래프와 동일하지만

조심하는 포인트가 2점 있습니다.
  • 원형 차트에 표시되는 순서
  • 각 데이터의 비율 표시

  • 둘 다 원형 차트를 만드는 경우 중요한 포인트라고 생각합니다.

    원형 차트에 표시할 순서


    DataFrame.sort_values(by='ソートする項目', ascending=昇順はTrue,降順はFalse)
    

    원형 차트로 데이터를 확인하려면
    차지하는 비율이 큰 것부터 순서대로 표시하고 싶기 때문에
    CSV 데이터를 붙이기 전에 데이터를 정렬하고 싶습니다.
    그래서 위의 DataFrame.sort_values ​​메서드를 사용하여 정렬합니다.

    각 데이터의 비율 표시


    pie.dataLabels = DataLabelList()
    pie.dataLabels.showPercent = True
    

    원형 차트는 기본적으로 비율 표시가 되어 있지 않은 것 같습니다.
    표시하려면 PieChart 객체의
    DataLabelList.showPercent 속성을 True로 설정합니다.

    최종 코드


    import pandas as pd
    from openpyxl import Workbook
    from openpyxl.chart import PieChart, Reference
    from openpyxl.chart.label import DataLabelList
    from openpyxl.utils.dataframe import dataframe_to_rows
    
    wb = Workbook()
    ws = wb.active
    
    # CSVファイル読込み
    df = pd.read_csv('売上.csv', encoding='utf-8')
    
    # データを降順でソート
    df = df.sort_values(by='1月', ascending=False)
    for row in dataframe_to_rows(df, index=None, header=True):
        # データを1行ずつ追加
        ws.append(row)
    
    # 円グラフを選択
    pie = PieChart()
    
    # 円グラフのスタイル設定
    pie.style = 2
    
    # グラフのデータ範囲を設定
    data = Reference(ws, min_col=2, min_row=2, max_row=ws.max_row)
    
    # ラベルの範囲を設定
    labels = Reference(ws, min_col=1, min_row=2, max_row=ws.max_row)
    
    # グラフにデータを追加
    pie.add_data(data)
    
    # 円グラフのラベルを追加
    pie.set_categories(labels)
    
    #割合をパーセント表示
    pie.dataLabels = DataLabelList()
    pie.dataLabels.showPercent = True
    
    pie.title = '部門別売上'
    
    # 棒グラフをシートに追加
    ws.add_chart(pie, 'A9')
    
    wb.save('部門別売上_円グラフ.xlsx')
    

    어떻게든 할 수 있었습니다. 정렬은 사용하기 쉬운 방법이므로
    일찍 알 수 있어서 좋았습니다.

    덤 pie.style의 종류



    pie.style의 경우,
    1 ~ 48까지의 정수 값을 지정하여 스타일을 변경할 수 있습니다.
    목록과 같은 것을 찾을 수 없습니다.

    라는 것으로, 상기의 응용으로 이런 것을 만들었습니다.
    import pandas as pd
    from openpyxl import Workbook
    from openpyxl.chart import PieChart, Reference
    from openpyxl.chart.label import DataLabelList
    from openpyxl.utils.dataframe import dataframe_to_rows
    
    wb = Workbook()
    ws = wb.active
    
    # CSVファイル読込み
    df = pd.read_csv('売上.csv', encoding='utf-8')
    
    # データを降順でソート
    df = df.sort_values(by='1月', ascending=False)
    for row in dataframe_to_rows(df, index=None, header=True):
        # データを1行ずつ追加
        ws.append(row)
    
    for i in range(1, 49):
        pie = PieChart()
        pie.style = i
        data = Reference(ws, min_col=2, min_row=2, max_row=ws.max_row)
        labels = Reference(ws, min_col=1, min_row=2, max_row=ws.max_row)
        pie.add_data(data)
        pie.set_categories(labels)
    
        pie.dataLabels = DataLabelList()
        pie.dataLabels.showPercent = True
        pie.title = f'{i}'
    
        ws.add_chart(pie, f'A{(i-1)*16+9}')
    
    wb.save('部門別売上_円グラフ一覧.xlsx')
    

    시험에 만들어 보았습니다만, 의외로 재미있습니다.

    개인적으로는 스타일 「10」이 마음에 드는 것입니다.

    좋은 웹페이지 즐겨찾기