Python-CSV-PowerPoint

ゆうき( @BASEBALLY15 )です^^

前回に,PythonでPowerPointを操作する方法について,学びました.

PythonでPowerPointを使う方法は分かったのですが,CSVファイルのデータを入れる方法はないですか・・・?

ありますよ^^
今回は,PythonでPowerPointにCSVファイルのデータを入れる方法についてご紹介します.

よろしくお願いします・・・

どのようなスライドが完成したの?

実際に,Pythonで作ったPowerPointのスライドがこれです⤵

PythonでCSVファイルをPowerPointに入れてみた

図1は,PNG形式の画像を張り付けています.

そして,表1が,CSVファイルのデータをPythonで張り付けたものになります.

このスライド内の図と表を作るために,以下のサイトのCSVファイルを使っています.

https://www.kaggle.com/sudalairajkumar/novel-corona-virus-2019-dataset/data

新型コロナウイルスの推移のCSVファイル
(画像をクリックしてもサイトに移動できます.)

それでは,CSVファイルのデータをPowerPointに入れるためのコードを見ていきましょう⤵

まずは,CSVファイルを整理しよう!(下準備)

CSVファイルのデータをPowerPointに入れる前に,CSVファイルのデータを整理します.

ライブラリ(下準備)

#CSVファイルを作成するために使う
import pandas as pd

#データフレーム型,シリーズ型に変換するためのライブラリ
from pandas import DataFrame,Series

#グラフを表示するためのライブラリ
import matplotlib.pyplot as plt

#Jupiter notebook上にグラフを表示させる
%matplotlib inline

コード(下準備)

まずは,CSVファイルを読み込んで,表示します.

#CSVファイルを読み込む
corona_file = pd.read_csv("2019_nCoV_data.csv")

#データフレーム化
corona_df = DataFrame(corona_file)

#表示
corona_df
SnoDateProvince/StateCountryLast UpdateConfirmedDeathsRecovered
0101/22/2020 12:00:00AnhuiChina01/22/2020 12:00:001.00.00.0
1201/22/2020 12:00:00BeijingChina01/22/2020 12:00:0014.00.00.0
2301/22/2020 12:00:00ChongqingChina01/22/2020 12:00:006.00.00.0
3401/22/2020 12:00:00FujianChina01/22/2020 12:00:001.00.00.0
4501/22/2020 12:00:00GansuChina01/22/2020 12:00:000.00.00.0

そして,このデータの中から,『Date』と『Confirmed』の列を使います.

Date』ごとに『 Confirmed 』をまとめたいので,groupbyを使います.

#日ごとに感染者数をまとめる
corona_number = DataFrame(corona_df.groupby("Date")["Confirmed"].sum())

#表示
corona_number
Confirmed
Date
01/22/2020 12:00:00555.0
01/23/2020 12:00:00653.0
01/24/2020 12:00:00941.0
01/25/2020 22:00:002019.0
01/26/2020 23:00:002794.0
01/27/2020 20:30:004473.0
01/28/2020 23:00:006057.0
01/29/2020 21:00:007783.0
01/30/2020 21:30:009776.0
01/31/2020 19:00:0011374.0
02/01/2020 23:00:0014549.0
02/02/2020 21:00:0017295.0
02/03/2020 21:40:0020588.0
02/04/2020 22:00:0024503.0

次に,この結果をグラフに表示します.

そして,PNG形式で保存します.

#グラフを表示
corona_amount.plot(figsize=(6,4), marker="o", title="Confirmed")

#グラフを保存
plt.savefig("corona_number.png")
新型コロナウイルスの推移

下準備の最後は, 『Date』と『Confirmed』 の列をまとめたデータフレームをCSVファイルに保存します.

#csvファイルに書き込み
corona_outdata = corona_number.to_csv("corona_outdata.csv")

#保存
corona_outdata
新型コロナウイルスの推移のCSVファイル

それでは,本題の『Pythonを使ってCSVデータをPowerPointに入れる方法』を見ていきましょう⤵

Pythonを使って,CSVデータをPowerPointに入れてみた!(本題)

ライブラリ(本題)

#PowerPointを編集するためのライブラリ
from pptx import Presentation

#サイズやテキストを扱うためのライブラリ
from pptx.util import Inches, Pt

コード(本題)

PowerPointのスライドのレイアウトを決めよう!

まずは,スライドを用意し,タイトルを決めます.

#PowerPointのスライドのレイアウトを決める
title_slide_layout = prs.slide_layouts[1]

#レイアウトを適用する
slide = prs.slides.add_slide(title_slide_layout)

#スライドのタイトルを用意
title = slide.shapes.title

#タイトルに書き込む
title.text = "実際の推移(グラフと表)"

CSVファイルを読み込もう!

次に,下準備で保存したCSVファイルを読み込みます.

#astypeで,文字(str)型に変換して読み込む
corona = pd.read_csv("corona_outdata.csv").astype("str")

ここで,注意してほしいのですが,

PowerPointにCSVファイルのデータを入れるためには,

数値型(intやfloat)ではなく,文字型(str)に変換する必要があります.

そのため,CSVファイルを読み込む際に,

astype(“str”)

を追加します.

CSVファイルのデータをリスト化しよう!(重要)

次に,読み込んだデータをリスト化します.

まずは,コラム部分をリスト化します.

#コラムのみをリスト化
corona_col = list([corona.columns.tolist()])

#表示
corona_col

[[‘Date’, ‘Confirmed’]]

次に,コラムと数値を合わせてリスト化します.

#リスト化(コラムと数値を合わせる)
corona_list = corona_col+ corona.values.tolist()

#表示
corona_list
[['Date', 'Confirmed'],
 ['01/22/2020 12:00:00', '555.0'],
 ['01/23/2020 12:00:00', '653.0'],
 ['01/24/2020 12:00:00', '941.0'],
 ['01/25/2020 22:00:00', '2019.0'],
 ['01/26/2020 23:00:00', '2794.0'],
 ['01/27/2020 20:30:00', '4473.0'],
 ['01/28/2020 23:00:00', '6057.0'],
 ['01/29/2020 21:00:00', '7783.0'],
 ['01/30/2020 21:30:00', '9776.0'],
 ['01/31/2020 19:00:00', '11374.0'],
 ['02/01/2020 23:00:00', '14549.0'],
 ['02/02/2020 21:00:00', '17295.0'],
 ['02/03/2020 21:40:00', '20588.0'],
 ['02/04/2020 22:00:00', '24503.0']]

このように,CSVデータをリスト化することが出来ました.

それでは,スライドを完成させていきます.

CSVデータをPowerPointに入れよう!

CSVデータをPowerPointに入れる
#cell内のフォントサイズ
cell_font = 11

#挿入する位置
table_left = Centis(15)

table_top = Centis(6)

#tableの幅と高さ
table_width = Centis(8)

table_height = Centis(10)

#tableの行数と列名
table_row = len(corona_list)

table_col = len(corona_list[0])

table = slide.shapes.add_table(table_row, 
                              table_col, 
                              table_left, 
                              table_top,
                              table_width, 
                              table_height).table

#表の各セルに文字や数値を記入
for i in range(table_row):
    
    for j in range(table_col):
        
        #セルを用意
        cell = table.cell(i, j)
        
        #セル内に入れていく
        cell.text = corona_list[i][j]
        
        #フォントサイズを適用
        cell.text_frame.paragraphs[0].font.size = Pt(cell_font)

次に,画像とテキストを入れていきますが,この解説は前回の投稿で行っています.

そのため,コードのみを載せておきます.

この記事のトップに前回の記事のリンクを貼っています.

画像をPowerPointに入れよう!

PythonでPowerPointに画像を入れる
#-----------------------------------------------------------------------
#画像を挿入
#挿入する位置
img_left = Centis(1)

img_top = Centis(5)

#画像の高さを指定する
img_height = Centis(8)

#画像のパスを指定
img_path = "./corona_number.png"

#画像を挿入
slide.shapes.add_picture(img_path, 
                        img_left, 
                        img_top, 
                        height=img_height)
#-----------------------------------------------------------------------

『表1』と『図1』を追加しよう!

PythonでPowerPointにテキストを入れる

まずは,『表1』を追加します.

#表にタイトルを付ける
#テキストボックスを用意
img_text1 = "表1 日ごとの感染者数"

#テキストボックスの位置
text1_left = Centis(15)

text1_top = Centis(5)

#テキストボックスの幅と高さを決める
text1_width = Centis(8)

text1_height = Centis(1)

#文字のフォントサイズを決める
textbox1_fontsize = 11

textbox1 = slide.shapes.add_textbox(text1_left,
                                  text1_top,
                                  text1_width,
                                  text1_height)

#テキストを書きこむ
textbox1.text = img_text1

#フォントサイズを適用
textbox1.text_frame.add_paragraph().font.size = Pt(textbox1_fontsize)

次に,『図1』を追加します.

#画像にタイトルを付ける
#テキストボックスを用意
img_text2 = "図1 日ごとの感染者数の推移"

#テキストボックスの位置
text2_left = Centis(1)

text2_top = Centis(13)

#テキストボックスの幅と高さを決める
text2_width = Centis(8)

text2_height = Centis(1)

#文字のフォントサイズを決める
textbox2_fontsize = 11

textbox2 = slide.shapes.add_textbox(text2_left,
                                  text2_top,
                                  text2_width,
                                  text2_height)

#テキストを書きこむ
textbox2.text = img_text2

#フォントサイズを適用
textbox2.text_frame.add_paragraph().font.size = Pt(textbox2_fontsize)

そして,最後にPowerPointのスライドを保存します.

作成したPowerPointのスライドを保存しよう!

#セーブファイル名
prs.save("./Coronavirus.pptx")

終わりに

今回は,Pythonを使って,CSVファイルのデータをPowerPointに入れてみました.

毎回,PowerPointのスライドにデータを入れないといけない場合,

この技術を使うと,自動化できるのではないでしょうか^^

それでは・・・

Q &A

参考資料

https://qiita.com/kousakulog/items/34855cd8286bd4f33c08

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA