[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,1000,1200
商品E,600,450,300

이전과 마찬가지로 위에서 설명한 CSV 파일을 읽습니다.
(그래프의 보기 쉬움 향상을 위해, 조금 수치를 변경했습니다.)



이와 같은 꺾은선 그래프를 만들어 붙여넣고 싶습니다.

LineChart 객체



꺾은선형 차트 작성에는 LineChart 객체를 사용합니다.
그래프를 만드는 방법 자체는 막대 그래프와 동일하지만
이번에도 조심하는 포인트가 있습니다.
  • 월별 매출 금액을 선 그래프로 만듭니다.
  • 매출 금액은 각 수치를 1000배한다

  • 솔직히, 재료가 다해 왔기 때문에, 1000 배는 무리 화살을 더했습니다.

    여담 : openpyxl에서 사용할 수있는 그래프


  • BarChart : 막대 그래프
  • PieChart: 원형 차트
  • LineChart : 꺾은선형 차트
  • AreaChart: 면 그래프
  • BarChart3D : 3D 막대 그래프
  • RadarChart : 레이더 차트
  • BubbleChart 버블 차트
  • DoughnutChart 도넛 차트

  • 목적에 맞는 그래프를 선택하고 싶습니다.
    사용할 수없는 것 외에도
    개인적으로 레이더 차트가 선호됩니다.

    그래프의 참조 데이터를 행/열로 전환


    bar.add_data(Referenceオブジェクト, from_rows=True, titles_from_data=True)
    

    이번에도 위와 같이 「from_rows=True」를 기술해
    그래프의 참조 데이터를 행/열로 전환합니다.

    매출금액을 1000배로


    DataFrame[列名] *= 1000
    

    pandas의 DataFrame 기능을 사용하여 열 이름을 지정하면 해당 열의 데이터를 얻을 수 있으므로
    위와 같이 연산자를 사용하면 계산도 할 ​​수 있습니다.
    그러나 이번에는 모든 판매 데이터 (1 월 ~ 3 월 판매가 나열된 열)이므로
    DataFrame[['1月', '2月', '3月']] *= 1000
    

    라고 설명해 보았습니다.
    DataFrame의 지정 열에 리스트를 넣어 보는 이미지입니다.
    그러자 잘 작동했습니다.

    하지만 이것이 있나요? ? ?
    if 문으로 작성하는 것이 더 좋았습니까?
    제대로 움직이고 있기 때문에, 좋은가? ? ?

    최종 코드


    import pandas as pd
    from openpyxl import Workbook
    from openpyxl.chart import LineChart, Reference
    from openpyxl.utils.dataframe import dataframe_to_rows
    
    wb = Workbook()
    ws = wb.active
    
    # CSVファイル読込み
    df = pd.read_csv('売上.csv', encoding='utf-8')
    
    # 各売上数値を1000倍
    df[['1月', '2月', '3月']] *= 1000
    
    for row in dataframe_to_rows(df, index=None, header=True):
        # データを1行ずつ追加
        ws.append(row)
    
    # 折れ線グラフを選択
    line = LineChart()
    
    # 円グラフのスタイル設定
    line.style = 10
    
    # グラフのデータ範囲を設定
    data = Reference(ws, min_col=1, min_row=2,
                     max_col=ws.max_column, max_row=ws.max_row)
    
    # ラベルの範囲を設定
    labels = Reference(ws, min_col=2, min_row=1, max_col=ws.max_column)
    
    # グラフにデータを追加(参照方法を行列で切り替え)
    line.add_data(data, from_rows=True, titles_from_data=True)
    
    # 折れ線グラフのラベルを追加
    line.set_categories(labels)
    
    # 横軸タイトルを追加
    line.x_axis.title = '月度'
    
    # 縦軸タイトルを追加
    line.y_axis.title = '売上高'
    
    # グラフのタイトルを追加
    line.title = '売上推移'
    
    ws.add_chart(line, 'A9')
    wb.save('部門別売上_折れ線グラフ.xlsx')
    
    

    여담 : line.style의 종류



    pie.style과 마찬가지로 line.style도
    1~48까지의 정수치를 지정하는 것으로 스타일을 변경할 수 있습니다
    전회와 같이 일람표를 만들어 보았습니다.
    import pandas as pd
    from openpyxl import Workbook
    from openpyxl.chart import LineChart, Reference
    from openpyxl.utils.dataframe import dataframe_to_rows
    
    wb = Workbook()
    ws = wb.active
    
    # CSVファイル読込み
    df = pd.read_csv('売上.csv', encoding='utf-8')
    
    # 各売上数値を1000倍
    df[['1月', '2月', '3月']] *= 1000
    
    for row in dataframe_to_rows(df, index=None, header=True):
        # データを1行ずつ追加
        ws.append(row)
    
    for i in range(1, 49):
        line = LineChart()
        line.style = i
        data = Reference(ws, min_col=1, min_row=2,
                         max_col=ws.max_column, max_row=ws.max_row)
        labels = Reference(ws, min_col=2, min_row=1, max_col=ws.max_column)
        line.add_data(data, from_rows=True, titles_from_data=True)
        line.set_categories(labels)
        line.x_axis.title = '月度'
        line.y_axis.title = '売上高'
        line.title = F'{i}'
    
        ws.add_chart(line, f'A{(i-1)*16+9}')
    wb.save('部門別売上_折れ線グラフ一覧.xlsx')
    

    다만, 원 그래프와 달리 색 분할이 동색의 그라데이션이라고 보기 어렵다・・・.

    지난 며칠 그래프 작성만 공부했습니다.
    「보이는 방법」은, 소중한구나~라고 다시 느낄 수 있었습니다.

    자기만족이 아니라 상대방이 보고 어떻게 생각하는지 고민하면서
    코드도 디자인도 만들 수 있게 되고 싶네요.

    좋은 웹페이지 즐겨찾기