今回はこれまでにゲットした情報をExcelに保存したいと思います。
前回の記事でSummariesというオブジェクトを作成し、
そこに論文情報(PMID, Title, Author, Journal, Pubdate)を格納しました。
Summariesにはリストの中にそれぞれの論文の情報を辞書形式で入れてます。
扱いやすくかつ見やすくする目的でExcelの表形式の様な見た目のデータフレームを扱えるライブラリPandasに入れていきます。
PandasはPythonでのデータ分析には必須のライブラリです。
また、実際に書き出して保存する時にはExcelが便利かと思いますので、
PandasでのデータフレームをExcelファイルとして保存する為に必須のライブラリであるOpenpyxlも使っていきます。
ライブラリのimport
まずは必要なライブラリをimportします。
import pandas as pd
import openpyxl
エラーなくインポートされたらOKです。
Pandas データフレームの作成
ここからエクセルの表のようにデータを格納します。
最終的にはこうなるイメージです。
空のデータフレームを作成
data = pd.DataFrame(columns = ['PMID','Title', 'Author', 'Journal', 'Pubdate'])
# カラム名を指定してデータフレームを作成カラム名を指定した空のデータフレームを作成しました。下画像参照
[f:id:tottoham:20190106230928p:plain]
カラム名のみ入った空のデータフレームが作成されましたね。
データフレームへの格納
まず、Summariesよりカラム毎(PMIDやTitleなど)のリストを作成します。
PMIDs = [ i['pmid'] for i in Summaries ]
Titles = [ i['title'] for i in Summaries ]
Authors = [ i['Author'] for i in Summaries ]
Journals = [ i['Journal'] for i in Summaries ]
Pubdates = [ i['Pubdate'] for i in Summaries ]作成したリストそれぞれをデータフレームに格納します。
data['PMID'] = PMIDs
data['Title'] = Titles
data['Author'] = Authors
data['Journal'] = Journals
data['Pubdate'] = PubdatesOutputが以下のようになります。
OpenpyxlでExcel fileとして書き出す
必要なライブラリのインポート
import openpyxl
from openpyxl.styles import Border, Font, Side, PatternFill, Alignment
from openpyxl.utils.dataframe import dataframe_to_rows1行目は重複となりますがopenpyxlのインポートをしています。
2行目はExcel上のスタイル(フォント、太字、塗り)などを設定するため。
3行目はPandasデータフレームをそのままopenpyxlに持っていくために使用します。
Bookの作成とシートの設定
wb = openpyxl.Workbook() #ワークブックの作成
ws = wb.active #ワークブックのアクティブになってるシートを選択
ws.title='論文' #シートの名前を変更スタイルの設定値を決める
Excelとして書き出す際のフォントを設定していきます。
これは私個人の好みの設定ですので、各自いろいろ変えてみてください。
#フォントの設定
normal_font = Font(name = "Century Gothic",sz = 9,b = False)
header_font = Font(name = "Century Gothic", sz = 9, b = True, color = 'FFFFFFFF')
#ヘッダーの塗りの設定
header_fill = PatternFill(patternType = "solid", fgColor = "FF808080")
#ヘッダーを中央揃えにする設定
header_center = Alignment(horizontal='center',vertical = 'center')
#ヘッダーを太字にする設定
header_border = Border(
outline=True,
left=Side(style='thin', color='FF000000'),
right=Side(style='thin', color='FF000000'),
top=Side(style='thin', color='FF000000'),
bottom=Side(style='thin', color='FF000000')
)pandasデータフレームをopenpyxlのシートへ書き込む
for r in dataframe_to_rows(data, index=False, header=True):
ws.append(r)これでpandasデータフレームがエクセルのシートに書き込まれました。
設定したスタイルを適用する
まずは、エクセルシートの全体のスタイルを設定します。
上で設定したnormal_fontを適応します。
フォントがCentury Gothicのサイズが9になるはずです。
for row in ws:
for cell in row:
cell.font = normal_font次はheaderのスタイルを指定します。
headerはPMID、Title、Author、Journal、Pubmedの5つですので、
Cellは1行目の1列目から5列目がheaderとなります。
header_cell = ['A1', 'B1', 'C1', 'D1', 'E1']
for cell in header_cell:
ws[cell].font = header_font
ws[cell].fill = header_fill
ws[cell].alignment = header_center
ws[cell].border = header_borderエクセルファイルの保存
wb.save("test.xlsx")エクセルを開くと以下のようになります。
セル幅は開いたあとに調整してます。
以上でpythonを使ってPubmedから論文情報を取得するシリーズの大きな部分は終了です。
これから更に発展して、abstractを引き抜いたりできますが、要望が多ければブログにしたいと思いますので、
コメントにお願いいたします。
また、tips等あったら記事にしたいと思います。
お疲れ様でした。



コメント