
ゆうき( @BASEBALLY15 )です^^
前回に,PythonでPowerPointを操作する方法について,学びました.
PythonでPowerPointを使う方法は分かったのですが,CSVファイルのデータを入れる方法はないですか・・・?
ありますよ^^
今回は,PythonでPowerPointにCSVファイルのデータを入れる方法についてご紹介します.
よろしくお願いします・・・

目次
どのようなスライドが完成したの?
実際に,Pythonで作ったPowerPointのスライドがこれです⤵

図1は,PNG形式の画像を張り付けています.
そして,表1が,CSVファイルのデータをPythonで張り付けたものになります.
このスライド内の図と表を作るために,以下のサイトのCSVファイルを使っています.
https://www.kaggle.com/sudalairajkumar/novel-corona-virus-2019-dataset/data
それでは,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
Sno | Date | Province/State | Country | Last Update | Confirmed | Deaths | Recovered | |
---|---|---|---|---|---|---|---|---|
0 | 1 | 01/22/2020 12:00:00 | Anhui | China | 01/22/2020 12:00:00 | 1.0 | 0.0 | 0.0 |
1 | 2 | 01/22/2020 12:00:00 | Beijing | China | 01/22/2020 12:00:00 | 14.0 | 0.0 | 0.0 |
2 | 3 | 01/22/2020 12:00:00 | Chongqing | China | 01/22/2020 12:00:00 | 6.0 | 0.0 | 0.0 |
3 | 4 | 01/22/2020 12:00:00 | Fujian | China | 01/22/2020 12:00:00 | 1.0 | 0.0 | 0.0 |
4 | 5 | 01/22/2020 12:00:00 | Gansu | China | 01/22/2020 12:00:00 | 0.0 | 0.0 | 0.0 |
そして,このデータの中から,『Date』と『Confirmed』の列を使います.
『Date』ごとに『 Confirmed 』をまとめたいので,groupbyを使います.
#日ごとに感染者数をまとめる
corona_number = DataFrame(corona_df.groupby("Date")["Confirmed"].sum())
#表示
corona_number
Confirmed | |
---|---|
Date | |
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 |
次に,この結果をグラフに表示します.
そして,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

それでは,本題の『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に入れよう!

#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に入れよう!

#-----------------------------------------------------------------------
#画像を挿入
#挿入する位置
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』を追加しよう!

まずは,『表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のスライドにデータを入れないといけない場合,
この技術を使うと,自動化できるのではないでしょうか^^
それでは・・・