図表を作成し、図表データを分析してコメントを作成している。
サンプルスクリプト
# スクリブト52 2-1 発行件数の年別推移(図表とコメント作成)
import pandas as pd
import numpy as np
import openpyxl
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.family'] = 'MS PGothic'
import matplotlib.patches as patches
import csv
import copy
# 図表Noを初期化
nfig = 0
fig_n = '図' + str(nfig)
nhyo = 0
hyo_n = '表' + str(nhyo)
# テーマ名thema読み込み
thema_data = pd.read_excel('trans_data.xlsx',sheet_name='テーマ名')
thema_data = thema_data.dropna(how='all') # 全列がNaNである行を削除
thema01 = thema_data.iloc[:,0]
thema = thema01[0]
print('テーマ名=',thema)
# コード表読み込み
code_data = pd.read_excel('trans_data.xlsx',sheet_name='code表')
code_data = code_data.dropna(how='all') # 全列がNaNである行を削除
# コードcode_list01読み込み
code01 = code_data.iloc[:,1]
code_list01 =[]
for str1 in code01:
code_list01.append(str1)
print('コード数=',len(code_list01))
print('コード[0:5]=',code_list01[0:5])
# コード内容code_list02読み込み
code02 = code_data.iloc[:,2]
code_list02 =[]
for str1 in code02:
code_list02.append(str(str1))
print('コード内容[0:3]=',code_list02[0:3])
# 年別発行件数読み込み
pd_data = pd.read_excel('trans_data.xlsx',sheet_name='年別発行件数集計')
# 年別発行件数nyken_list読み込み
pd_data1 = pd_data.iloc[:,1]
# nenlast = len(pd_data1)
ntot = 0
nyken_list = []
nyken_list2 = [] # 追加件数
nyken_list3 = [] # 合計件数
# for str1 in pd_data1:
for n1, str1 in enumerate(pd_data1):
nyken_list.append(int(str1))
ntot = ntot + str1
nn = int(str1)
if n1 == nenlast - 1:
nn = nn*npmend # 月数補正
nn = round(nn,1)
nyken_list2.append(nn)
nyken_list3.append(str1+nn)
else:
nyken_list2.append(0)
nyken_list3.append(str1)
print('発行件数=',nyken_list)
print('追加補正係数=',npmend)
print('追加予想件数=',nyken_list2)
print('合計発行件数=',nyken_list3)
# 図表Noを加算
nfig = nfig + 1
fig_n = '図' + str(nfig)
# コメント書き出し
if npmend > 0:
wrd1 = ' ' + str(pystt) + '年〜' +str(pyend) + '年' + str(monthend) + '月末の間に発行された' + thema + 'に関する分析対象公報の合計件数は' + str(ntot) + '件であった。\n'
else:
wrd1 = ' ' + str(pystt) + '年〜' +str(pyend) + '年の間に発行された' + thema + 'に関する分析対象公報の合計件数は' + str(ntot) + '件であった。\n'
wrd2 = ' ' + fig_n + 'はこの分析対象公報を発行年別に集計し、縦棒グラフにしたものである。\n'
wrd3 = ' ※ 調査最終年が12ヶ月未満の場合には、実際の発行件数を青色、その後の発行予想件数を橙色で示している(以下、同じ)。\n'
wrd =wrd1 + wrd2 + wrd3
print('wrd=',wrd)
wrd2_1_1= wrd
print(fig_n)
# 描画データ設定
labels = py_list
data = nyken_list
data2 = nyken_list2
# 表示位置設定
x_width = 0.5
x_loc = np.array(range(len(data))) + x_width
# グラフの大きさを設定
fig = plt.figure(figsize=(13.0, 4.0))
# タイトル、ラベルを設定
plt.title("公報発行件数の年別推移", fontsize=20)
plt.xlabel("発行年", fontsize=18)
plt.ylabel("発行件数", fontsize=18)
plt.bar(x_loc, data, width=x_width,color='C0',label='最終年発行件数') # 棒グラフの設定
plt.xticks(x_loc, labels,fontsize=14) # x軸にラベル設定
if npmend > 0: # 追加補正係数>0ならば予想件数を表示
plt.bar(x_loc, data2, width=x_width,bottom=data,color='tab:orange',label='最終年予想件数')
plt.grid() # 罫線追加
# 追加補正係数>0ならば予想件数を表示
if npmend > 0:
plt.legend()
# 棒グラフ内に数値を書く
hx =(ntot/len(data))/30 # 書き込み位置を上に修正
for x, y in zip(x_loc, data):
plt.text(x, y+hx, y, ha='center', va='bottom') # 数値の書き込み位置をhx上に修正
# 図表書き出し
plt.savefig('書き出し図表/' + fig_n + '.png',bbox_inches='tight', pad_inches=0.05)
# 描画実行
plt.show()
# 2-1 発行件数年別推移のコメント
# 調査年数nnen算出
nnen = int(pyend) - int(pystt) + 1
# def実行 IN=(py_list,nyken_list)、OUT=wrd
print('list2=',py_list) # 発行年
print('list3=',nyken_list) # 発行件数
print('合計発行件数=',nyken_list3)
wrd = bargraph_comment(py_list,nyken_list3)
# print('def_wrd=',wrd)
# コメント作成
wrd1 = ' このグラフによれば、' + thema + 'に関する公報件数は' + wrd + '\n'
# まとめに追加
wrd2= ' 今回の調査テーマ「' + thema + '」に関する公報件数は' + wrd + '\n'
f = open("matome.txt", "w")
f.write(str(wrd2) + '\n')
f.close()
# コメント追加
wrd2 = ' ※ 上記「最終年近傍」は最終年を含む3年としている。\n'
wrd3= ' ※ 出願時期は、一般的には発行日の1年6ヶ月以前である。\n'
wrd = wrd1 + wrd2 + wrd3
# コメント書き出し
print('wrd=',wrd)
wrd2_1_2=wrd
print(fig_n,'、',hyo_n)
# スクリブト53 第二章 全体分析 発行件数の年別推移(コメント書き出し)
# 図表Noの初期値設定
nfig = 0
fig_n = '図' + str(nfig)
nhyo = 0
hyo_n = '表' + str(nhyo)
para = doc.add_paragraph('第二章 全体分析')
para.runs[npara].font.size = docx.shared.Pt(16)
para.runs[npara].bold = True
para = doc.add_paragraph('2-1 発行件数の年別推移')
para.runs[npara].font.size = docx.shared.Pt(14)
para.runs[npara].bold = True
print(wrd2_1_1)
para = doc.add_paragraph(wrd2_1_1)
nfig = nfig+ 1
fig_n = '図' + str(nfig)
print(fig_n)
doc.add_picture('./書き出し図表/' + fig_n + '.png')
wrd = fig_n
para = doc.add_paragraph(' ' + wrd)
para.alignment = WD_ALIGN_PARAGRAPH.CENTER # 中央揃え
para.runs[npara].font.size = docx.shared.Pt(14)
print(wrd2_1_2)
para = doc.add_paragraph(wrd2_1_2)
para.runs[npara].bold = True
doc.save('report.docx')
print(fig_n,'、',hyo_n)
# スクリブト54 2-2 出願人別発行件数の割合(図表とコメント作成)
# 図表Noを加算
nhyo = nhyo + 1
hyo_n = '表' + str(nhyo)
wrd1 = ' ' + hyo_n + 'は本テーマの分析対象公報を公報発行件数が多い上位10社とその他の出願人について集計した集計表である。\n'
wrd2 = ' ※ 件数は持ち分として共同出願人数で按分している。\n'
wrd = wrd1 + wrd2
# コメント書き出し
wrd2_2_1= wrd
print(wrd2_2_1)
# 出願人別集計読み込み
ap_data = pd.read_excel('trans_data.xlsx',sheet_name='出願人別集計')
ap_data = ap_data.dropna(how='all') # 全列がNaNである行を削除
nlimit = 10
# 出願人読み込み
ap01 = ap_data.iloc[:,0]
ap01_list =[]
for n1,str1 in enumerate(ap01):
# print(str1)
if len(str1) > 30:
# str1 = str1[0:25] + '・・・'
str1 = str1[0:29] + '\n'+str1[29:59]
ap01_list.append(str1)
if n1>= nlimit-1: break
nap = len(ap01_list)
print('出願人数=',nap)
print('出願人名[0:5]=',ap01_list[0:5])
# 発行件数読み込み
ap02 = ap_data.iloc[:,1]
nap02 = 0
ap02_list =[]
for n1, str1 in enumerate(ap02):
str1= round(str1,1)
ap02_list.append(float(str1))
nap02 = nap02 + str1
if n1>= nlimit-1: break
# 全発行件数算出
naptot = 0
for str1 in ap02:
naptot = naptot + float(str1)
# その他と合計を追加
ap01_list.append('その他')
ap01_list.append('合計')
naphoka=round((naptot - nap02),1) # その他の件数
if naphoka < 0: naphoka = 0
ap02_list.append(naphoka)
naptot01=round(naptot,1)
ap02_list.append(naptot01 )
# %計算
ap03_list = []
for str1 in ap02_list:
str2 = (str1/naptot)*100
str2=round(str2,1)
ap03_list.append(str2)
# 上位10社の発行件数集計表
df1 = pd.DataFrame(data=ap01_list,columns=['出願人'])
df2 = pd.DataFrame(data=ap02_list,columns=['発行件数'])
df3 = pd.DataFrame(data=ap03_list,columns=['%'])
df4 = pd.concat([df1,df2,df3], axis=1)
# 表の作成
nx = 2
ny = len(ap01_list)
arr1 = [[0.0 for x in range(nx+1)] for y in range(ny)]
# 縦軸設定
for y, str1 in enumerate(ap01_list):
arr1[y][0] = str1
# 発行年別の発行件数
for y, str1 in enumerate(ap02_list):
arr1[y][1] = str1
# %追加
for y, str1 in enumerate(ap03_list):
arr1[y][2] = str1
table_vals = arr1
fig = plt.figure()
ax = fig.add_subplot(111) # nrows,ncols,indexが全て一桁のときは、カンマを省略して111で良い
print(hyo_n)
# 描画
col_labels = ['出願人', '発行件数','%']
the_table = plt.table(cellText=table_vals,
colWidths=[0.4, 0.1, 0.1], # 列の幅を指定
colLabels=col_labels,
loc='center')
the_table.scale(4, 4)
the_table.auto_set_font_size(False)
the_table.set_fontsize(18)
for x in range(3):
the_table[(0,x)].set_facecolor('lightgreen') # ヘッダを薄緑色に着色
the_table[(0,x)].get_text().set_fontsize('24') # フォントサイズ=24
the_table[(0,x)].get_text().set_fontweight('bold') # フォント種=bold
for j in range(nap+2):
the_cell = the_table[j+1,0]
the_text = the_cell.get_text()
the_text.set_horizontalalignment('center')
plt.tick_params(axis='x', which='both', bottom=False, top=False, labelbottom=False)
plt.tick_params(axis='y', which='both', right=False, left=False, labelleft=False)
for pos in ['right','top','bottom','left']:
plt.gca().spines[pos].set_visible(False)
# 図表書き出し
plt.savefig('書き出し図表/' + hyo_n + '.png',bbox_inches='tight', pad_inches=0.05)
plt.show()
# ソート
arr4 = df4.values
arr4 = arr4[0:11] # 合計を除く
arr4 = sorted(arr4, key=lambda x:x[1], reverse=True) # 逆順
# 株式会社を空白に置換
ap011_list = []
for str1 in arr4:
str2 = str1[0].replace("株式会社", "") # "株式会社"を消去
str2 = str2.replace("国立大学法人", "") # "国立大学法人"を消去
str2 = str2.replace("公立大学法人", "") # "公立大学法人"を消去
str2 = str2.replace("学校法人", "") # "学校法人"を消去
str2 = str2.replace("地方独立行政法人", "") # "地方独立行政法人"を消去
str2 = str2.replace("独立行政法人", "") # "独立行政法人"を消去
str2 = str2.replace("国立研究開発法人", "") # "国立研究開発法人"を消去
str2 = str2.replace("一般財団法人", "") # "一般財団法人"を消去
str2 = str2.replace("公益財団法人", "") # "公益財団法人"を消去
ap011_list.append(str2)
if naphoka > ap02_list[0]:
wrd1 = ' この集計表によれば、その他を除くと、第1位は'
else:
wrd1 = ' この集計表によれば、第1位は'
wrd2 = ap01_list[0] + 'であり、' # その他を除く1位の出願人略称
wrd3 = str(ap03_list[0]) # その他を除く1位の%
wrd = wrd1 + wrd2 + wrd3 + '%であった。\n'
# まとめに追加
wrd4 = ' 出願人別に集計した結果によれば、第1位は' + wrd2 + wrd3 + '%であった。'
f = open("matome.txt", "a")
f.write(str(wrd4) + '\n')
f.close()
# コメント書き出し
wrd2_2_2= wrd
arr5 =ap011_list[2:11] # 2位~10位に絞り込み
wrd4 = ''
for n1, str1 in enumerate(arr5):
if n1== 0:
wrd4 = str1
else:
wrd4 =wrd4 + '、' + str1
wrd4 = wrd4.replace('\n','') # 改行を削除
# コメント追加
wrd4 = ' 以下、' + wrd4
wrd5 = wrd4 + 'と続いている。\n'
# まとめに追加
f = open("matome.txt", "a")
f.write(str(wrd5) + '\n')
f.close()
# コメント書き出し
print('wrd=',wrd)
wrd2_2_3= wrd
print(fig_n,'、',hyo_n)
# スクリブト55 2-2 出願人別発行件数の割合(コメント書き出し)
# コメント書き出し
doc.add_page_break() # 改頁
para = doc.add_paragraph('2-2 出願人別発行件数の割合')
para.runs[npara].font.size = docx.shared.Pt(14)
para.runs[npara].bold = True
print(wrd2_2_1)
para = doc.add_paragraph(wrd2_2_1)
doc.add_picture('./書き出し図表/' + hyo_n + '.png')
wrd = hyo_n
para = doc.add_paragraph(' ' + wrd)
para.alignment = WD_ALIGN_PARAGRAPH.CENTER # 中央揃え
para.runs[npara].font.size = docx.shared.Pt(14)
print(wrd2_2_2)
para = doc.add_paragraph(wrd2_2_2)
para.runs[npara].bold = True
doc.save('report.docx')
print(fig_n,'、',hyo_n)
# スクリブト56 2-2 出願人別円グラフ)(図表とコメント作成)
# データ読み込み
fig_data = pd.read_excel('trans_data.xlsx',sheet_name='出願人別集計')
# 図表Noを加算
nfig = nfig + 1
fig_n = '図' + str(nfig)
# コメント追加
wrd = ' ' + fig_n + 'は上記集計結果を円グラフにしたものである。\n'
print(wrd)
wrd2_2_4 = wrd
# 出願人読み込み
pd_data0 = fig_data.iloc[:,0]
list2 =[]
for str1 in pd_data0:
list2.append(str1)
# 発行件数読み込み
pd_data1 = fig_data.iloc[:,1]
list3 = []
ntot = 0
for str1 in pd_data1:
list3.append(str1)
ntot = ntot + str1
# 上位10読み込み
n10 = []
ap10 = []
fullap10 = []
ntot10 = 0
for n in range(10):
n10.append(list3[n])
ntot10 =ntot10 + list3[n]
str2 = list2[n].replace("株式会社", "") # "株式会社"を消去
str2 = str2.replace("国立大学法人", "") # "国立大学法人"を消去
str2 = str2.replace("公立大学法人", "") # "公立大学法人"を消去
str2 = str2.replace("学校法人", "") # "学校法人"を消去
str2 = str2.replace("地方独立行政法人", "") # "地方独立行政法人"を消去
str2 = str2.replace("独立行政法人", "") # "独立行政法人"を消去
str2 = str2.replace("国立研究開発法人", "") # "国立研究開発法人"を消去
str2 = str2.replace("一般財団法人", "") # "一般財団法人"を消去
str2 = str2.replace("公益財団法人", "") # "公益財団法人"を消去
ap10.append(str2)
fullap10.append(list2[n])
n10.append(ntot-ntot10)
ap10.append('その他')
fullap10.append('その他')
print(fig_n)
# 凡例
hanrei_nm = fullap10 # 出願人名を凡例として格納
# 円グラフ作成
plt.pie(n10, labels=ap10, autopct="%1.1f%%",pctdistance=0.9,radius=1.5,
startangle=90,counterclock=False)
# 円グラフの右横=1.5の位置に高さ=1で描画
plt.legend(hanrei_nm, fontsize=14,bbox_to_anchor=(1.5, 1)) # 凡例の表示
# 図表書き出し
plt.savefig('書き出し図表/' + fig_n + '.png',bbox_inches='tight', pad_inches=0.05)
plt.show()
# コメント作成
np = round((ntot10/ntot)*100,1) # 小数点以下1位で%表示
wrd = " このグラフによれば、上位10社で" + str(np) + "%を占めている。"
m05_wrd01 = " この上位10社で" + str(np) + "%を占めている。"
if np<35:
wrd = " このグラフによれば、上位10社だけでは" + str(np) + "%を占めているに過ぎず、多数の出願人に分散しているようである。"
m05_wrd01 = " この上位10社だけでは" + str(np) + "%を占めているに過ぎず、多数の出願人に分散しているようである。"
if np>45:
wrd = " このグラフによれば、上位10社だけで" + str(np) + "%を占めており、少数の出願人に集中しているようである。"
m05_wrd01 = " この上位10社だけで" + str(np) + "%を占めており、少数の出願人に集中しているようである。"
wrd =wrd + '\n'
print(wrd)
wrd2_2_5 = wrd
print('m05_wrd01=',m05_wrd01)
# まとめに追加
f = open("matome.txt", "a")
f.write(m05_wrd01+ '\n')
f.close()
print(fig_n,'、',hyo_n)
# スクリブト57 2-2 出願人別発行件数の割合(コメント書き出し)
fig_n = '図' + str(2)
# print(fig_n)
print(wrd2_2_4 )
para = doc.add_paragraph(wrd2_2_4 ) # 第2図は上記集計結果を円グラフ
#図No追加
doc.add_picture('./書き出し図表/' + fig_n + '.png')
wrd = fig_n
para = doc.add_paragraph(wrd)
para.alignment = WD_ALIGN_PARAGRAPH.CENTER # 中央揃え
para.runs[npara].font.size = docx.shared.Pt(14)
print(wrd2_2_5)
para = doc.add_paragraph(wrd2_2_5) # このグラフによれば、上位10社
para.runs[npara].font.size = docx.shared.Pt(11)
para.runs[npara].bold = True
doc.save('report.docx')
print(fig_n,hyo_n)
# スクリブト58 2-3 出願人数の年別推移(図表とコメント作成)
import numpy as np
# 図表Noを加算
nfig = nfig + 1
fig_n = '図' + str(nfig)
wrd1 = ' ' + fig_n + 'は本テーマの分析対象公報の出願人数を発行年別に集計し、縦棒グラフにしたものである。\n'
wrd2 = ' ※ 同じ年の出願人の重複は除去して集計している。\n'
wrd = wrd1 + wrd2
print('wrd=',wrd)
wrd_2_3_1 = wrd
# 年別出願人数読み込み
pd_data = pd.read_excel('trans_data.xlsx',sheet_name='出願人数年別集計')
# 年別出願人数読み込み
pd_data1 = pd_data.iloc[:,1]
# nenlast = len(pd_data1)
ntot = 0
nyken_list = []
nyken_list2 = [] # 追加件数
nyken_list3 = [] # 合計件数
for n1, str1 in enumerate(pd_data1):
nyken_list.append(str1)
ntot = ntot + str1
if n1 == nenlast - 1:
nn2 = str1*npmend # 月数補正
nn2 = round(nn2,1)
nyken_list2.append(nn2)
nyken_list3.append(str1+nn2)
else:
nyken_list2.append(0)
nyken_list3.append(str1)
print('出願人数=',nyken_list)
print('追加補正係数=',npmend)
print('追加予想出願人数=',nyken_list2)
print('合計出願人数=',nyken_list3)
# print('出願人数合計=',ntot)
print(fig_n)
# 描画データ設定
labels = py_list
data = nyken_list
data2 = nyken_list2
# 表示位置設定
x_width = 0.5
x_loc = np.array(range(len(data))) + x_width
# グラフの大きさを設定
fig = plt.figure(figsize=(13.0, 4.0))
# タイトル、ラベルを設定
plt.title("出願人数の年別推移", fontsize=20)
plt.xlabel("発行年", fontsize=18)
plt.ylabel("出願人数", fontsize=18)
plt.bar(x_loc, data, width=x_width,color='C0',label='最終年発行件数') # 棒グラフの設定
plt.xticks(x_loc, labels, fontsize=14) # x軸にラベル設定
if npmend > 0: # 追加補正係数>0ならば予想件数を表示
plt.bar(x_loc, data2, width=x_width,bottom=data,color='tab:orange',label='最終年予想件数') # 棒グラフの設定
plt.grid() # 罫線追加
# 追加補正係数>0ならば予想件数を表示
if npmend > 0:
plt.legend()
# 棒グラフ内に数値を書く
hx = (ntot/len(data))/30 # 書き込み位置を上に修正
for x, y in zip(x_loc, data):
plt.text(x, y+hx, y, ha='center', va='bottom') # 数値の書き込み位置をhx上に修正
# 図表書き出し
plt.savefig('書き出し図表/' + fig_n + '.png',bbox_inches='tight', pad_inches=0.05)
# 描画実行
plt.show()
# def実行
print('list2=',py_list) # 発行年
print('list3=',nyken_list) # 出願人数
print('合計出願人数=',nyken_list3)
wrd = bargraph_comment(py_list,nyken_list3)
# print(wrd)
# 2-3 出願人数年別推移のコメント
wrd = ' このグラフによれば、出願人数は' + wrd + '\n'
print('wrd=',wrd)
#if ntot < 30 :
# if nmax < 5:
# wrd = " 件数が少ないため傾向を判定できなかった。"
# print('wrd=',wrd)
# コメントコピー
wrd_2_3_2 = wrd
print(fig_n,'、',hyo_n)
# スクリブト59 2-3 出願人数の年別推移(コメント書き出し)
fig_n = '図' + str(3)
# print(fig_n)
# doc.add_page_break() # 改頁
para = doc.add_paragraph('2-3 出願人数の年別推移')
para.runs[npara].font.size = docx.shared.Pt(14)
para.runs[npara].bold = True
print(wrd_2_3_1)
para = doc.add_paragraph(wrd_2_3_1) # 第1表は本テーマの分析対象公報
# 図表読み込み
doc.add_picture('./書き出し図表/' + fig_n + '.png')
wrd = fig_n
para = doc.add_paragraph(wrd)
para.alignment = WD_ALIGN_PARAGRAPH.CENTER # 中央揃え
para.runs[npara].font.size = docx.shared.Pt(14)
print(wrd_2_3_2)
para = doc.add_paragraph(wrd_2_3_2) # このグラフによれば、上位10社
para.runs[npara].font.size = docx.shared.Pt(11)
para.runs[npara].bold = True
doc.save('report.docx')
print(fig_n,'、',hyo_n)
# スクリブト60 2-4 出願人別発行件数の年別推移(折線グラフ)(図表とコメント作成)
# 図表Noを加算
nfig = nfig + 1
fig_n = '図' + str(nfig)
wrd1 = ' ' + fig_n + 'は本テーマに関係する主要出願人の発行件数が年毎にどのように推移しているかを見るためのものであり、'
wrd2 = '公報発行件数が多い上位10社について公報発行件数を発行年別に集計し、折線グラフにしたものである。\n'
wrd3 = ' ※ 件数は持ち分として共同出願人数で按分している。(以下、この注釈は省略する)\n'
wrd = wrd1 + wrd2 + wrd3
print(wrd)
# コメントコピー
wrd_2_4_1 = wrd
# 年別出願人数読み込み
pd_data = pd.read_excel('trans_data.xlsx',sheet_name='出願人別年別集計')
nclm=(len(pd_data.columns)) # 出願人欄から合計欄まで
# 読み込みデータ全体をDataFrameに変換
df00 = pd.DataFrame(pd_data)
# dataframeをarrayに変換
arr00 = df00.values
##発行年読み込み
nen_data = pd_data.columns[1:nclm-1] # 発行年のminからmaxまで
nen_list = []
for str1 in nen_data:
str1 = str(str1) + '年'
nen_list.append(str1)
nnen = len(nen_list)
print('発行年=',nen_list)
# ベスト(nbest)設定
nbest=10
## 出願人読み込み
ap_list =[]
for n1, str1 in enumerate(arr00):
# if n1 == (nbest-1): break
if n1 == nbest: break
ap_list.append(str1[0])
print('出願人=',ap_list)
## 表内数値読み込み
arr_nxny = []
for n1, str1 in enumerate(arr00):
# if n1 == (nbest-1): break
if n1 == nbest: break
list01 = []
for n2, nn1 in enumerate(str1):
if n2 > 0:
nn1 = round(nn1,1)
if n2 < nnen+1:
nn1 = round(nn1,1)
if n2 < nnen+1:
list01.append(nn1)
arr_nxny.append(list01)
print('arr_nxny=',arr_nxny)
# 最終年の件数を補正
# nenlast = nnen
nmax = 0
arr01 = []
cd01 = []
nxy_list0 = []
for n1, str1 in enumerate(arr_nxny):
arr02 = []
list0 = []
for n2, str2 in enumerate(str1):
if str2 > nmax: nmax = str2
list0.append(str2)
if (n2+1) == nenlast:
str2 = str2*(npmend+1) # 最終年の件数を補正
str2 = round(str2,1)
arr02.append(str2)
else:
arr02.append(str2)
arr01.append(arr02)
nxy_list0.append(list0)
print('元の件数=',nxy_list0)
print('月数補正後の件数=',arr01)
# 変数名修正
nen_list = nen_list
code_list = ap_list
arr_nxny = arr01
g_title = '出願人別発行件数の年別推移'
# def実行
wrd = ''
wrd01,wrd02 = oresen_comment(nen_list,code_list,arr_nxny,fig_n, g_title)
print('wrd01=',wrd01)
wrd02 = wrd02.replace('次のコード','次の出願人')
bwd = code_list[0]
wrd02 = wrd02.replace(bwd,'')
print('wrd02=',wrd02)
# スクリブト61 2-4 出願人別発行件数の年別推移(コメント書き出し)
para = doc.add_paragraph('2-4 出願人別発行件数の年別推移')
para.runs[npara].font.size = docx.shared.Pt(14)
para.runs[npara].bold = True
print(wrd_2_4_1)
para = doc.add_paragraph(wrd_2_4_1) # ex:図4は本テーマに関係する主要出願人の発行件数
para.runs[npara].font.size = docx.shared.Pt(11)
# 図表読み込み
doc.add_picture('./書き出し図表/' + fig_n + '.png')
wrd = fig_n
para = doc.add_paragraph(wrd)
para.alignment = WD_ALIGN_PARAGRAPH.CENTER # 中央揃え
para.runs[npara].font.size = docx.shared.Pt(14)
print(wrd01)
para = doc.add_paragraph(wrd01)
para.runs[npara].font.size = docx.shared.Pt(11)
para.runs[npara].bold = True
print(wrd02)
para = doc.add_paragraph(wrd02) # このグラフによれば、上位10社
para.runs[npara].font.size = docx.shared.Pt(11)
para.runs[npara].bold = True
print(fig_n,'、',hyo_n)
# スクリブト62 2-4 出願人別発行件数の年別推移(バブルチャート)(図表とコメント作成)
import numpy as np
# 図表Noを加算
nfig = nfig + 1
fig_n = '図' + str(nfig)
# コメント追加
wrd1 = ' ' + fig_n + 'はこの集計結果を数値付きバブルチャートにしたものである。\n'
if npmend > 0:
wrd2 = ' 最終年は発行予想件数を加算した件数を使用している(以下、同じ)。\n'
else:
wrd2 = ''
wrd = wrd1 + wrd2
print(wrd)
# コメントコピー
wrd_2_4_5 = wrd
# 年別出願人数読み込み
pd_data = pd.read_excel('trans_data.xlsx',sheet_name='出願人別年別集計')
#出願人読み込み
ap_data = pd_data.iloc[:,0]
ap_list =[]
ap_list01 =[]
for n1, str1 in enumerate(ap_data):
# if n1 == 9: break
if n1 >= nbest: break
ap_list01.append(str1)
str2 = str1.replace("株式会社", "") # "株式会社"を消去
str2 = str2.replace("国立大学法人", "") # "国立大学法人"を消去
str2 = str2.replace("公立大学法人", "") # "公立大学法人"を消去
str2 = str2.replace("学校法人", "") # "学校法人"を消去
str2 = str2.replace("地方独立行政法人", "") # "地方独立行政法人"を消去
str2 = str2.replace("独立行政法人", "") # "独立行政法人"を消去
str2 = str2.replace("国立研究開発法人", "") # "国立研究開発法人"を消去
str2 = str2.replace("一般財団法人", "") # "一般財団法人"を消去
str2 = str2.replace("公益財団法人", "") # "公益財団法人"を消去
ap_list.append(str1)
# print(len(nen_list))
nnen = len(nen_list)
# 発行件数nxy_list読み込み
nenlast = nnen
# print(nenlast)
nmax = 0
nxy_list = []
nxy_list0= []
for n1 in range(nap):
# if n1 >= 9:break
if n1 >= nbest:break
nx_list = []
nx_list0 = []
for n2 in range(nnen+1):
if n2 > 0:
# if n2 >= 0:
str1 = pd_data.iloc[n1,n2]
# print(str1)
str1 = round(str1,1)
if n2 == nenlast :
nx_list0.append(str1)
str1 = str1*(npmend + 1)
str1 = round(str1,1)
nx_list.append(str1)
else:
nx_list.append(str1)
nx_list0.append(str1)
if nmax < int(str1): nmax = int(str1)
nxy_list.append(nx_list)
nxy_list0.append(nx_list0)
print('元の件数=',nxy_list0)
print('月数補正後の件数=',nxy_list)
# 変数名変更
x_list = nen_list
y_list = ap_list
print('x_list=',x_list)
print('y_list=',y_list)
print('nxy_list=',nxy_list)
print(fig_n)
# def実行
buble0(x_list,y_list,nxy_list,fig_n)
# 2-4 出願人別発行件数の年別推移(バブルチャート)のコメント
# 最終年が最多の出願人を抽出
nap = len(ap_list)
npk_list = []
pkap_list = []
# for n1, str1 in enumerate(ap_list):
for n1, str1 in enumerate(ap_list01):
nxy_list01 = nxy_list[n1]
np = 0
for n2, str2 in enumerate(nxy_list01):
if str2>np:
np=str2 # ピーク件数
pknen = n2+1 # ピーク年
if pknen==nnen: # 最終年がピークならば
pkap_list.append(str1)
np = round(np,1)
npk_list.append(np)
n2 = len(pkap_list) # 最終年が最多の出願人数
# コメント追加
if n2 > 0:
wrd1 = ' このチャートによれば、以下の出願人は最終年が最多となっている。\n'
# 最終年が最多の出願人書き出し
wrd2 =''
for str1 in pkap_list: # 最終年が最多の出願人
str1 = " " + str1 + "\n"
wrd2 = wrd2 + str1
wrd = wrd1 + wrd2
if n2 == 0:
wrd = ' このチャートによれば、最終年が最多となっている出願人は無かった。\n'
# 増加した出願人コピー
wrd_2_4_6 = wrd
print(wrd_2_4_6)
# 重要出願人を抽出
## 最終年の件数が平均以上でかつピーク時の80%以上(ただし0件以外の平均)でかつ増加率が100%以上か
## または最終年の件数が平均以上でかつピーク時の95%以上のものを重要出願人として書出す
#最終年と最終年前年の件数をリスト化し、合計件数、平均件数を算出
ct = 0
ntot = 0
nlast_list = []
nmae_list = []
for n in range(nap):
n0 = nxy_list[n][nnen-1] # 最終年の件数
if n0 > 0: ct = ct + 1
nlast_list.append(n0)
n1 = nxy_list[n][nnen-2] # 最終年前年の件数
nmae_list.append(n1)
ntot = ntot + n0
if ct > 0:
navr = round(ntot/ct,1) # 最終年の平均件数(ただし0件以外の平均)
else:
navr = 0
print('最終年の平均件数=',navr,'対象件数=',ct)
# 重要出願人を判定
vipap_list = []
# for n1, str1 in enumerate(ap_list):
for n1, str1 in enumerate(ap_list01):
flg = 0
if nlast_list[n1] > navr: # 最終年の件数が平均以上
if nlast_list[n1] > (npk_list[n1]*0.8): # ピーク時の80%以上
if nmae_list[n1] > 0:
if (nlast_list[n1]/nmae_list[n1]) > 1: #増加率が100%以上
vipap_list.append(str1)
flg = 1
if flg == 0:
if nlast_list[n1] > navr: # 最終年の件数が平均以上
if nlast_list[n1] > (npk_list[n1]*0.95): # ピーク時の95%以上
vipap_list.append(str1)
# コメント追加
wrd1 = ' 下記条件を満たす重要出願人は次のとおり。\n'
# 重要出願人書き出し
wrd2 =''
for str1 in vipap_list:
str1 = " " + str1 + "\n"
wrd2 = wrd2 + str1
wrd = wrd1 + wrd2
if wrd2 != '':
wrd = ' 下記条件を満たす重要出願人は次のとおり。\n' + wrd2
else:
wrd = ' 下記条件を満たす重要出願人は無かった。\n'
print(wrd)
# 増加した出願人コピー
wrd_2_4_7 = wrd
if wrd2 != '':
m08_wrd01 = ' 特に、重要と判定された出願人は次のとおり。\n' + wrd2
else:
m08_wrd01 = ' 特に、重要と判定された出願人は無かった。\n'
# まとめに追加
f = open("matome.txt", "a")
f.write(m08_wrd01 + '\n')
f.close()
# コメント追加
wrd1 = ' ※最終年の件数が平均以上でかつピーク時の80%以上でかつ増加率が100%以上か、'
wrd2 = 'または最終年の件数が平均以上でかつピーク時の95%以上。以下、この条件を「所定条件」という。\n'
wrd = wrd1 + wrd2
# コピー
wrd_2_4_8 = wrd
print(wrd_2_4_8)
print(fig_n,'、',hyo_n)
# スクリブト63 2-4 出願人別発行件数の年別推移(コメント書き出し)
print(wrd_2_4_5)
para = doc.add_paragraph(wrd_2_4_5) # 第1表は本テーマの分析対象公報
para.runs[npara].font.size = docx.shared.Pt(11)
# 図表読み込み
doc.add_picture('./書き出し図表/' + fig_n + '.png')
wrd = fig_n
para = doc.add_paragraph(wrd)
para.alignment = WD_ALIGN_PARAGRAPH.CENTER # 中央揃え
para.runs[npara].font.size = docx.shared.Pt(14)
print(wrd_2_4_6)
para = doc.add_paragraph(wrd_2_4_6)
para.runs[npara].font.size = docx.shared.Pt(11)
# para.runs[npara].bold = True
print(wrd_2_4_7)
para = doc.add_paragraph(wrd_2_4_7)
para.runs[npara].font.size = docx.shared.Pt(11)
para.runs[npara].bold = True
print(wrd_2_4_8)
para = doc.add_paragraph(wrd_2_4_8)
para.runs[npara].font.size = docx.shared.Pt(11)
# para.runs[npara].bold = True
doc.save('report.docx')
print(fig_n,'、',hyo_n)
# スクリブト64 2-5 メイングループ別発行件数の分布(図表とコメント作成)
import numpy as np
# 図表Noを加算
nfig = nfig + 1
fig_n = '図' + str(nfig)
# コメント追加
wrd = ' ' + fig_n + 'はIPCのメイングループ分類別に発行公報を集計し、上位20位までを縦棒グラフにしたものである。\n'
# コメントコピー
wrd_2_5_1 = wrd
print(wrd_2_5_1)
# 年別出願人数読み込み
pd_data = pd.read_excel('trans_data.xlsx',sheet_name='メインG別年別集計')
# ベストnを設定
nbest = 20
# メインG読み込み
pd_data0 = pd_data.iloc[:,0]
k = 0
maing_list =[]
for str1 in pd_data0:
k = k + 1
if k > nbest: break
str1 = str1 + '00'
maing_list.append(str(str1))
# 合計読み込み
pd_data1 = pd_data.iloc[:,nnen+1]
k = 0
ntot = 0
nken_list = []
for nn1 in pd_data1:
k = k + 1
if k > nbest: break
nken_list.append(nn1)
ntot = ntot +nn1
# DataFrame化
df1 = pd.DataFrame(data=maing_list, columns=['メインG'])
df2 = pd.DataFrame(data=nken_list, columns=['メインG別合計件数'])
# 結合
df3=pd.concat([df1, df2], axis=1)
# メインGでソート
df3 = df3.sort_values('メインG', ascending=True) # 昇順
# リストに分解
maing_list01 = df3.iloc[:,0]
nken_list01 = df3.iloc[:,1]
# データ設定
labels = maing_list01
data = nken_list01
# 表示位置設定
x_width = 0.5
x_loc = np.array(range(len(data))) + x_width
print(fig_n)
# グラフの大きさを設定
fig = plt.figure(figsize=(13.0, 4.0))
# タイトル、ラベルを設定
gtitle="メイングループ別ベスト" + str(nbest) +"の発行件数分布"
plt.title(gtitle, fontsize=20)
plt.xlabel("メイングループ", fontsize=18)
plt.ylabel("発行件数", fontsize=18)
plt.bar(x_loc, data, width=x_width,color='C0') # 棒グラフの設定
# x軸にラベル設定(45度回転)
plt.xticks(x_loc, labels, rotation=45,fontsize=14) # x軸にラベル設定
plt.grid() # 罫線追加
# 棒グラフ内に数値を書く
hx = (ntot/len(data))/30 # 書き込み位置を上に修正
for x, y in zip(x_loc, data):
plt.text(x, y+hx, y, ha='center', va='bottom') # 数値の書き込み位置をhx上に修正
# 図表書き出し
plt.savefig('書き出し図表/' + fig_n + '.png',bbox_inches='tight', pad_inches=0.05)
# 描画実行
plt.show()
# 2-5 メイングループ別発行件数の分布(棒グラフ)のコメント
# IPC分類表読み込み
ipc_data = pd.read_excel('IPC分類表.xlsx',sheet_name='メイングループ表')
ipc_data = ipc_data.dropna(how='all') # 全列がNaNである行を削除
maing01 = ipc_data.iloc[:,1]
maing_list01 = maing01[0:]
mgtitle01 = ipc_data.iloc[:,2]
mgtitle_list01 = mgtitle01[0:]
# 上位メインGに分類内容と件数を結合
mg_title_list =[]
for n1, str1 in enumerate(maing_list):
for n2, str2 in enumerate(maing_list01):
if str1 == str2:
str3 = str1 + ":" + mgtitle_list01[n2] + "(" +str(nken_list[n1]) + "件)"
mg_title_list.append(str3)
mg_title_list = sorted(mg_title_list)
# コメント追加
wrd1 = ' これらのメイングループの内容は以下のとおり。\n'
# 上位メインG書き出し
wrd2 =''
for str1 in mg_title_list: # 上位メインG+分類内容+件数
str1 = str1 + "\n"
wrd2 = wrd2 + str1
wrd = wrd1 + wrd2
print(wrd)
# 上位メインGコピー
wrd_2_5_2 = wrd
# 重要メインG(=平均件数以上)を抽出
ntot = 0
for nn1 in nken_list:
ntot = ntot + nn1
npsum = 0
nlimit = ntot/nbest
mgv_list = []
for n1, nn1 in enumerate(nken_list):
if nn1 < nlimit: break
mgv_list.append(maing_list[n1])
nmgv = len(mgv_list)
# 重要メインGに分類内容を結合
mg_title2_list =[]
for n1, str1 in enumerate(mgv_list):
for n2, str2 in enumerate(maing_list01):
if str1 == str2:
str3 = str1 + ":" + mgtitle_list01[n2] + "(" +str(nken_list[n1]) + "件)"
mg_title2_list.append(str3)
break
mg_title2_list = sorted(mg_title2_list)
# 重要メインG数を書き出し
n2 =nmgv
print('重要メインG数=',n2)
# コメント追加
wrd1 = ' この中で比較的多かったのは、次のメイングループである。\n'
# 重要メインG書き出し
wrd2 =''
for str1 in mg_title2_list: # 重要メインG+分類内容+件数
str1 = str1 + "\n"
wrd2 = wrd2 + str1
wrd = wrd1 + wrd2
print(wrd)
# 重要メインGコピー
wrd_2_5_3 = wrd
m09_wrd01 = ' IPC別に集計した結果によれば、重要メイングループは次のとおり。\n' + wrd2
# まとめに追加
f = open("matome.txt", "a")
f.write(m09_wrd01 + '\n')
f.close()
print(fig_n,'、',hyo_n)
# スクリブト65 2-5 IPC別発行件数の年別推移(コメント書き出し)
doc.add_page_break() # 改頁
para = doc.add_paragraph('2-5 メイングループ別発行件数の分布')
para.runs[npara].font.size = docx.shared.Pt(14)
para.runs[npara].bold = True
print(wrd_2_5_1)
para = doc.add_paragraph(wrd_2_5_1) # 第1表は本テーマの分析対象公報
para.runs[npara].font.size = docx.shared.Pt(11)
# 図表読み込み
doc.add_picture('./書き出し図表/' + fig_n + '.png')
wrd = fig_n
para = doc.add_paragraph(wrd)
para.alignment = WD_ALIGN_PARAGRAPH.CENTER # 中央揃え
para.runs[npara].font.size = docx.shared.Pt(14)
print(wrd_2_5_2)
para = doc.add_paragraph(wrd_2_5_2)
para.runs[npara].font.size = docx.shared.Pt(11)
# para.runs[npara].bold = True
print(wrd_2_5_3)
para = doc.add_paragraph(wrd_2_5_3)
para.runs[npara].font.size = docx.shared.Pt(11)
para.runs[npara].bold = True
doc.save('report.docx')
print(fig_n,'、',hyo_n)
# スクリブト66 2-6 IPC別発行件数の年別推移(バブルチャート)(図表とコメント作成)
import numpy as np
# 上位メインG数の設定
nbest = 20
# 図表Noを加算
nfig = nfig + 1
fig_n = '図' + str(nfig)
# コメント追加
wrd1 = ' ' + fig_n + 'はIPCのメイングループ分類別の発行件数を年別に集計し、'
wrd2 = '上位20位までを数値付きバブルチャートにしたものである。\n'
wrd = wrd1 + wrd2
print(wrd)
# コメントコピー
wrd_2_6_1 = wrd
# メインG数読み込み
pd_data = pd.read_excel('trans_data.xlsx',sheet_name='メインG別年別集計')
# y = len(pd_data)
# x = len(pd_data.columns)
#メインG読み込み
maing_data = pd_data.iloc[:,0]
maing_list =[]
for n1, str1 in enumerate(maing_data):
if n1 == nbest: break # nbestでループ終了
str1 = str1 + '00'
maing_list.append(str1)
nmg=len(maing_list)
# 発行年読み込み
nen_data = pd_data.columns[1:nnen+1] # 発行年
nen_list = []
for str1 in nen_data:
str1 = str(str1) + '年'
nen_list.append(str1)
# カラム数読み込み
nclm=(len(pd_data.columns))
# 発行件数読み込み
nenlast = len(nen_list)
nmax = 0
nxy_list = []
nxy_list0 = []
for n1 in range(nmg):
nx_list = []
nx_list0 = []
for n2 in range(nclm-1):
if n2>0:
str1 = pd_data.iloc[n1,n2]
if n2 == nenlast :
nx_list0.append(str1)
str1 = str1*(npmend + 1)
str1 = round(str1,1)
nx_list.append(str1)
else:
nx_list.append(str1)
nx_list0.append(str1)
if nmax < str1: nmax = str1
nxy_list.append(nx_list)
nxy_list0.append(nx_list0)
print('元の件数=',nxy_list0)
print('月数補正後の件数=',nxy_list)
# 変数名変更
x_list = nen_list
y_list = maing_list
print('x_list=',x_list)
print('y_list=',y_list)
print('nxy_list=',nxy_list)
print(fig_n)
# def実行
buble0(x_list,y_list,nxy_list, fig_n)
# 2-6 IPC別発行件数の年別推移(バブルチャート)のコメント
# 最終年が最多のメインGを抽出
nnen = len(nen_list)
nmg =len(maing_list)
npk_list = []
pkmg_list = []
for n1, str1 in enumerate(maing_list):
nxy_list01 = nxy_list[n1]
np1 = 0
for n2, str2 in enumerate(nxy_list01):
if str2>np1:
np1=str2 # ピーク件数
pknen = n2+1 # ピーク年
if pknen==nnen: # 最終年がピークならば
pkmg_list.append(str1)
np = round(np1,1)
npk_list.append(np1)
# ソート
pkmg_list= sorted(pkmg_list)
# メインGに分類内容と件数を結合
pkmg_title_list =[]
for n1, str1 in enumerate(pkmg_list):
for n2, str2 in enumerate(maing_list01):
if str1 == str2:
str3 = str1 + ":" + mgtitle_list01[n2] + "(" +str(nken_list[n1]) + "件)"
pkmg_title_list.append(str3)
# 最終年が最多のメインG数を書き出し
n2 = len(pkmg_list)
print('最終年が最多のメインG数=',n2)
# コメント追加
flg_n2 = 0
if n2 > 0:
wrd1 = ' このチャートによれば、最終年が最多となっているメイングループは次のとおり。\n'
# 最終年が最多のメインG書き出し
wrd2 =''
for str1 in pkmg_title_list: # 最終年が最多のメインG
str1 = str1 + "\n"
wrd2 = wrd2 + str1
wrd = wrd1 + wrd2
if n2 == 0:
wrd = ' このチャートによれば、最終年が最多のメイングループはなかった。\n'
# 増加したメインG書き出し
f = open('sub_txt.txt', 'a')
f.write(wrd)
f.close()
wrd_2_6_2 = wrd
print(wrd_2_6_2)
# 重要メインGを抽出
## 最終年の件数が平均以上でかつピーク時の80%以上でかつ増加率が100%以上か
## または最終年の件数が平均以上でかつピーク時の95%以上のものを重要メインGとして書出す
#最終年と最終年前年の件数をリスト化し、合計件数、平均件数を算出
ntot = 0
nlast_list = []
nmae_list = []
for n in range(nmg):
n0 = nxy_list[n][nnen-1] # 最終年の件数
nlast_list.append(n0)
n1 = nxy_list[n][nnen-2] # 最終年前年の件数
nmae_list.append(n1)
ntot = ntot + n0
navr = round(ntot/nmg,1) # 最終年の平均件数
# 重要メインGを判定
vipmg_list = []
for n1, str1 in enumerate(maing_list):
flg = 0
if nlast_list[n1] > navr: # 最終年の件数が平均以上
if nlast_list[n1] > (npk_list[n1]*0.8): # ピーク時の80%以上
if nmae_list[n1] > 0:
if (nlast_list[n1]/nmae_list[n1]) > 1: #増加率が100%以上
vipmg_list.append(str1)
flg = 1
if flg == 0:
if nlast_list[n1] > navr: # 最終年の件数が平均以上
if nlast_list[n1] > (npk_list[n1]*0.95): # ピーク時の95%以上
vipmg_list.append(str1)
# ソート
vipmg_list= sorted(vipmg_list)
# メインGに分類内容と件数を結合
vmg_title_list =[]
for n1, str1 in enumerate(vipmg_list):
for n2, str2 in enumerate(maing_list01):
if str1 == str2:
str3 = str1 + ":" + mgtitle_list01[n2] + "(" +str(nken_list[n1]) + "件)"
vmg_title_list.append(str3)
# 重要メインG数を書き出し
n2 = len(vipmg_list)
print('重要メインG数=',n2)
# コメント追加
if n2 > 0:
wrd1 = ' 所定条件を満たす重要メインGは次のとおり。\n'
# 重要出願人書き出し
wrd2 =''
for str1 in vmg_title_list:
str1 = str1 + "\n"
wrd2 = wrd2 + str1
wrd = wrd1 + wrd2
if n2 == 0:
if flg_n2 == 0:
wrd = ' 所定条件を満たす重要メインGはなかった。\n'
else:
wrd = ' 所定条件を満たす重要メインGもなかった。\n'
# 増加した出願人書き出し
f = open('sub_txt.txt', 'a')
f.write(wrd)
f.close()
print('wrd=',wrd)
wrd_2_6_3 = wrd
print(fig_n,'、',hyo_n)
# スクリブト67 2-6 IPC別発行件数の年別推移(コメント書き出し)
# doc.add_page_break() # 改頁
para = doc.add_paragraph('2-6 メイングループ別発行件数の年別推移')
para.runs[npara].font.size = docx.shared.Pt(14)
para.runs[npara].bold = True
print(wrd_2_6_1)
para = doc.add_paragraph(wrd_2_6_1) # 第1表は本テーマの分析対象公報
para.runs[npara].font.size = docx.shared.Pt(11)
# 図表読み込み
doc.add_picture('./書き出し図表/' + fig_n + '.png')
wrd = fig_n
para = doc.add_paragraph(wrd)
para.alignment = WD_ALIGN_PARAGRAPH.CENTER # 中央揃え
para.runs[npara].font.size = docx.shared.Pt(14)
print(wrd_2_6_2)
para = doc.add_paragraph(wrd_2_6_2)
para.runs[npara].font.size = docx.shared.Pt(11)
# para.runs[npara].bold = True
print(wrd_2_6_3)
para = doc.add_paragraph(wrd_2_6_3)
para.runs[npara].font.size = docx.shared.Pt(11)
para.runs[npara].bold = True
doc.save('report.docx')
print(fig_n,'、',hyo_n)
# スクリブト73 第三章 コード別の分析(コメント書き出し)
doc.add_page_break() # 改頁
para = doc.add_paragraph('第三章 分類コード別の分析')
para.runs[npara].font.size = docx.shared.Pt(16)
para.runs[npara].bold = True
print(wrd_3)
para = doc.add_paragraph(wrd_3) # 第1表は本テーマの分析対象公報
para.runs[npara].font.size = docx.shared.Pt(11)
# doc.add_page_break() # 改頁
doc.save('report.docx')
print(fig_n,'、',hyo_n)
# スクリブト74 3-1-1 一桁コード別の発行件数割合(集計表)(図表とコメント作成)
# 図表Noを加算
nhyo = nhyo + 1
hyo_n = '表' + str(nhyo)
# コメント追加
wrd = ' ' + hyo_n + 'は分析対象公報の分類コードを一桁別(サブテーマ別)で集計した集計表である。\n'
print(wrd)
# コメントコピー
wrd_3_1_1 = wrd
# 一桁年別集計読み込み
pd_data = pd.read_excel('trans_data.xlsx',sheet_name='一桁年別集計')
ny = len(pd_data)
nx = len(pd_data.columns)
nclm = 4 # 書き出すカラム数を設定
arr1 = pd_data.values # リスト化
#一桁分類コード読み込み
code_data01 = pd_data.iloc[:,0]
code_list01 =[]
for str1 in code_data01:
code_list01.append(str1)
ncd01=len(code_list01)
# code表読み込み
pd_data01 = pd.read_excel('trans_data.xlsx',sheet_name='code表')
#コード読み込み
code_data = pd_data01.iloc[:,1]
code_list =[]
for str1 in code_data:
code_list.append(str1)
ncd=len(code_list)
# print(code_list)
# コード内容読み込み
cdnaiyo_data = pd_data01.iloc[:,2]
cdnaiyo_list = []
for str1 in cdnaiyo_data:
cdnaiyo_list.append(str1)
# print(cdnaiyo_list)
# コード内容追加
nwrd_max = 0
cdnaiyo_list01 = []
for n1, str1 in enumerate(code_list01):
for n2, str2 in enumerate(code_list):
if str1 == str2:
str3 = cdnaiyo_list[n2]
if len(str3) > 26:
str3 = str3[:25] + '\n' + str3[26:50] # 25文字で折り返し(50文字以上は表示せず)
cdnaiyo_list01.append(str3)
if len(str3) > nwrd_max: nwrd_max = len(str3)
# print(cdnaiyo_list01)
#横合計読み込み、全合計算出
tot_data01 = pd_data.iloc[:,nx-1]
ntot = 0
tot_list01 =[]
for nn1 in tot_data01:
ntot = ntot + nn1
tot_list01.append(nn1)
# %算出
np_list01 =[]
for str1 in tot_data01:
if ntot > 0:
str1 = (str1/ntot)*100
str1 = round(str1,1)
np_list01.append(str1)
else:
np_list01.append(0)
# 上位10社の発行件数集計表
df1 = pd.DataFrame(data=code_list01,columns=['コード'])
df2 = pd.DataFrame(data=cdnaiyo_list01,columns=['コード内容'])
df3 = pd.DataFrame(data=tot_list01,columns=['合計'])
df4 = pd.DataFrame(data=np_list01,columns=['%'])
df5 = pd.concat([df1,df2,df3,df4], axis=1)
# 表の作成
arr1 = df5.values # リスト化
# print(arr1)
table_vals = arr1
fig = plt.figure()
ax = fig.add_subplot(111) # nrows,ncols,indexが全て一桁のときは、カンマを省略して111で良い
# 描画
col_labels = ['コード', 'コード内容','合計','%']
the_table = plt.table(cellText=table_vals,
colWidths=[0.1, 0.4, 0.1, 0.1], # 列の幅を指定
colLabels=col_labels,
loc='center')
the_table.scale(4, 4) # 全体のサイズをX=4、Y=4に設定
the_table.auto_set_font_size(False)
the_table.set_fontsize(20)
for x in range(nclm):
the_table[(0,x)].set_facecolor('lightgreen') # ヘッダを薄緑色に着色
the_table[(0,x)].get_text().set_fontsize('20') # フォントサイズ=80
the_table[(0,x)].get_text().set_fontweight('bold') # フォント種=bold
for j in range(ny):
the_cell = the_table[j+1,0]
the_text = the_cell.get_text()
the_text.set_horizontalalignment('center')
# 2列目の文字位置を設定
for j in range(ny):
the_cell = the_table[j+1,1]
the_text = the_cell.get_text()
the_text.set_horizontalalignment('left')
plt.tick_params(axis='x', which='both', bottom=False, top=False, labelbottom=False)
plt.tick_params(axis='y', which='both', right=False, left=False, labelleft=False)
for pos in ['right','top','bottom','left']:
plt.gca().spines[pos].set_visible(False)
# 図表書き出し
plt.savefig('書き出し図表/' + hyo_n + '.png',bbox_inches='tight', pad_inches=0.05)
# 合計でソート
arr1 = sorted(arr1, key=lambda x:x[3], reverse=True)
# コメント作成
wrd1 = ' この集計表によれば、コード「'
wrd2 = arr1[0][0] + ':' + arr1[0][1]
wrd2 = wrd2.replace('\n','') # 改行を削除
wrd3 = '」が最も多く、'
wrd4 = str(arr1[0][3]) + '%を占めている。\n'
wrd5 = ' 以下、'
wrd6 = ''
for n1, str1 in enumerate(arr1):
if n1== ny : break
str2 = str1[:][0] + ':' + str1[:][1]
if n1== 1:
wrd6 = str2
if n1 > 1:
wrd6 = wrd6 + '、' + str2
wrd6 = wrd6.replace('\n','') # 改行を削除
wrd7 = 'と続いている。'
wrd = wrd1 + wrd2 + wrd3 + wrd4 + wrd5 + wrd6 + wrd7
# 書き出し
wrd_3_1_2 = wrd
print(wrd_3_1_2)
m12_wrd01 = ' 1桁コード別に集計した結果によれば、コード「'+ wrd2 + wrd3 + wrd4 + wrd5 + wrd6 +wrd7
# まとめに追加
f = open("matome.txt", "a")
f.write(m12_wrd01 + '\n')
f.close()
print(fig_n,'、',hyo_n)
# スクリブト75 3-1 コード別全体分析(コメント書き出し)
para = doc.add_paragraph('3-1 分類コード別全体分析')
para.runs[npara].font.size = docx.shared.Pt(14)
para.runs[npara].bold = True
wrd = " 分析対象公報を、サブテーマコード毎に分類し、分析した結果は以下のようになった。"
print(wrd)
para = doc.add_paragraph(wrd)
para = doc.add_paragraph('3-1-1 一桁コード別の発行件数割合')
para.runs[npara].font.size = docx.shared.Pt(14)
para.runs[npara].bold = True
print(wrd_3_1_1)
para = doc.add_paragraph(wrd_3_1_1)
para.runs[npara].font.size = docx.shared.Pt(11)
# para.runs[npara].bold = True
# 図表読み込み
doc.add_picture('./書き出し図表/' + hyo_n + '.png')
wrd = hyo_n
para = doc.add_paragraph(' ' + wrd)
para.alignment = WD_ALIGN_PARAGRAPH.CENTER # 中央揃え
para.runs[npara].font.size = docx.shared.Pt(14)
print(wrd_3_1_2)
para = doc.add_paragraph(wrd_3_1_2)
para.runs[npara].font.size = docx.shared.Pt(11)
para.runs[npara].bold = True
doc.save('report.docx')
print(fig_n,'、',hyo_n)
# スクリブト76 3-1-1 一桁コード別の発行件数割合(円グラフ)(図表とコメント作成)
# 図表Noを加算
nfig = nfig + 1
fig_n = '図' + str(nfig)
# コメント追加
wrd = ' ' + fig_n + 'は上記集計結果を円グラフにしたものである。'
print('wrd=',wrd)
para = doc.add_paragraph( wrd)
# コメントコピー
wrd_3_1_3 = wrd
# 凡例用に、コード+内容を作成
cd_naiyo_list = []
hancd_naiyo_list = []
for n1, str1 in enumerate(code_list01):
str2 = str1 + ':' + cdnaiyo_list01[n1]
nlen = len(str2)
if nlen > 15:
str3 = str2[0:15] + '・・・'
else:
str3 = str2[0:15]
cd_naiyo_list.append(str2)
hancd_naiyo_list.append(str3)
# 凡例を設定
hanrei_nm = hancd_naiyo_list # コード+内容を凡例として格納
print(fig_n)
# 円グラフ作成
plt.pie(tot_list01, labels=hancd_naiyo_list, autopct="%1.1f%%",pctdistance=0.9,
startangle=90,counterclock=False)
# 円グラフの右横=2.7の位置に高さ=1で描画
plt.legend(hanrei_nm, fontsize=12,bbox_to_anchor=(2.7, 1)) # 凡例の表示
# 図表書き出し
plt.savefig('書き出し図表/' + fig_n + '.png',bbox_inches='tight', pad_inches=0.05)
plt.show()
# 図表読み込み
doc.add_picture('./書き出し図表/' + fig_n + '.png')
wrd = fig_n
para = doc.add_paragraph(' ' + wrd)
para.alignment = WD_ALIGN_PARAGRAPH.CENTER # 中央揃え
para.runs[npara].font.size = docx.shared.Pt(14)
doc.save('report.docx')
print(fig_n,'、',hyo_n)
# スクリブト77 3-1-2 一桁コード別発行件数の年別推移(折線グラフ)(図表とコメント作成)
# 図表Noを加算
nfig = nfig + 1
fig_n = '図' + str(nfig)
# コメント追加
wrd = ' ' + fig_n + 'は分析対象公報を一桁コード別・年別に集計し、折線グラフにしたものである。'
print(wrd)
# コメントコピー
wrd_3_1_2_1 = wrd
# 一桁年別集計読み込み
pd_data = pd.read_excel('trans_data.xlsx',sheet_name='一桁年別集計')
nclm=(len(pd_data.columns)) # コード名から合計欄まで
# ny = len(pd_data)
# nx = len(pd_data.columns)
# 読み込みデータ全体をDataFrameに変換
df00 = pd.DataFrame(pd_data)
# dataframeをarrayに変換
arr00 = df00.values
# print(arr00)
# 上位10に制限
nbest = 10
##発行年読み込み
nen_data = pd_data.columns[1:nclm-1] # 発行年のminからmaxまで
nen_list = []
for str1 in nen_data:
str1 = str(str1) + '年'
nen_list.append(str1)
nnen = len(nen_list)
print('発行年=',nen_list)
## コード読み込み
print(nbest)
cd_list =[]
for n1, str1 in enumerate(arr00):
if n1 == (nbest-1): break
# print(n1,str1[0])
cd_list.append(str1[0])
print('コード=',cd_list)
# コード内容読み込み
code_data = pd.read_excel('trans_data.xlsx',sheet_name='code表')
nclm=(len(code_data.columns)) # コード名から合計欄まで
# コードcode_list01読み込み
code01 = code_data.iloc[:,1]
code_list01 =[]
for str1 in code01:
code_list01.append(str1)
print('コード数=',len(code_list01))
print('コード[0:5]=',code_list01[0:5])
# コード内容code_list02読み込み
code02 = code_data.iloc[:,2]
code_list02 =[]
for str1 in code02:
code_list02.append(str(str1))
print('コード内容[0:3]=',code_list02[0:3])
# コード内容追加
cdnaiyo_list01 = []
for n1, str1 in enumerate(code_list01):
for n2, str2 in enumerate(cd_list):
if str1 == str2:
str3 = str2 + ':' + code_list02[n1]
if len(str3) > 30:
str3 = str3[:29] + '\n' + str3[29:] # 30文字で折り返し(60文字以上は表示せず)
cdnaiyo_list01.append(str3)
# print('コード内容[0:3]=',cdnaiyo_list01[0:3])
print('コード内容=',cdnaiyo_list01)
## 表内数値読み込み
arr_nxny = []
for n1, str1 in enumerate(arr00):
if n1 == (nbest-1): break
list01 = []
for n2, nn1 in enumerate(str1):
if n2 > 0:
nn1 = round(nn1,1)
if n2 < nnen+1:
list01.append(nn1)
arr_nxny.append(list01)
print('arr_nxny=',arr_nxny)
# 最終年の件数を補正
# nenlast = nnen
nmax = 0
arr01 = []
cd01 = []
nxy_list0 = []
for n1, str1 in enumerate(arr_nxny):
arr02 = []
list0 = []
for n2, str2 in enumerate(str1):
if str2 > nmax: nmax = str2
list0.append(str2)
if (n2+1) == nenlast:
str2 = str2*(npmend+1) # 最終年の件数を補正
str2 = round(str2,1)
arr02.append(str2)
else:
arr02.append(str2)
arr01.append(arr02)
nxy_list0.append(list0)
print('元の件数=',nxy_list0)
print('月数補正後の件数=',arr01)
# 変数名修正
nen_list = nen_list
code_list = cdnaiyo_list01
arr_nxny = arr01
g_title = '一桁コード別発行件数の年別推移'
# def実行
wrd = ''
wrd01,wrd02 = oresen_comment(nen_list,code_list,arr_nxny,fig_n, g_title)
# wrd01 = wrd01.replace('上記主要出願人名義の公報発行件数は、','')
print('wrd01=',wrd01)
bwd = '次のコードも'
wrd02 = wrd02.replace(bwd,'次のコードは')
print('wrd02=',wrd02)
# まとめに追加
m08_wrd01 = wrd01 + wrd02
# m08_wrd01 = m08_wrd01.replace('このグラフによれば上記',' ')
m08_wrd01 = m08_wrd01.replace('このグラフによれば上記','年別推移で見ると')
m08_wrd01 = m08_wrd01.replace('この中で第1位は','上記のとおり、この中で第1位は')
m08_wrd01 = m08_wrd01.replace('この中で、第1位は','上記のとおり、この中で第1位は')
print(m08_wrd01)
f = open("matome.txt", "a")
f.write(m08_wrd01)
f.close()
# スクリブト78 3-1-2 一桁コード別発行件数の年別推移(折線グラフ)(コメント書き出し)
# doc.add_page_break() # 改頁
para = doc.add_paragraph('')
para = doc.add_paragraph('3-1-2 一桁コード別発行件数の年別推移')
para.runs[npara].font.size = docx.shared.Pt(14)
para.runs[npara].bold = True
print(wrd_3_1_2_1)
para = doc.add_paragraph(wrd_3_1_2_1)
para.runs[npara].font.size = docx.shared.Pt(11)
# para.runs[npara].bold = True
# 図表読み込み
doc.add_picture('./書き出し図表/' + fig_n + '.png')
wrd = fig_n
para = doc.add_paragraph(' ' + wrd)
para.alignment = WD_ALIGN_PARAGRAPH.CENTER # 中央揃え
para.runs[npara].font.size = docx.shared.Pt(14)
print(wrd01)
para = doc.add_paragraph(wrd01)
para.runs[npara].font.size = docx.shared.Pt(11)
para.runs[npara].bold = True
print(wrd02)
para = doc.add_paragraph(wrd02)
para.runs[npara].font.size = docx.shared.Pt(11)
# para.runs[npara].bold = True
doc.save('report.docx')
print(fig_n,'、',hyo_n)
# スクリブト79 3-1-2 一桁コード別発行件数の年別推移(バブルチャート作成)(図表とコメント作成)
import numpy as np
# 図表Noを加算
nfig = nfig + 1
fig_n = '図' + str(nfig)
# コメント追加
wrd = ' ' + fig_n + 'は一桁コード別の発行件数を年別に集計し、数値付きバブルチャートにしたものである。'
print('wrd=',wrd)
# コメントコピー
wrd_3_1_2_4 = wrd
ncd=len(cd_naiyo_list)
# 一桁年別集計読み込み
pd_data = pd.read_excel('trans_data.xlsx',sheet_name='一桁年別集計')
ny = len(pd_data)
nx = len(pd_data.columns)
arr1 = pd_data.values # リスト化
# 発行年読み込み
nen_data = pd_data.columns[1:nnen+1] # 発行年
nen_list = []
for str1 in nen_data:
str1 = str(str1) + '年'
nen_list.append(str1)
print('nen_list=',nen_list)
# コード+コード内容リスト
print('cd_naiyo_list=',cd_naiyo_list)
nmax = 0
# 発行件数読み込み
nenlast = len(nen_list)
nxy_list = []
nxy_list0 = []
# for n1 in range(ncd+1):
for n1 in range(ncd):
nx_list = []
nx_list0 = []
for n2 in range(nx-1):
if n2 > 0:
str1 = pd_data.iloc[n1,n2]
# print(n1,n2,str1)
nx_list0.append(str1)
if n2 == nenlast :
str1 = str1*(npmend + 1)
str1 = round(str1,1)
nx_list.append(str1)
else:
nx_list.append(str1)
if nmax < str1: nmax = str1
nxy_list.append(nx_list)
nxy_list0.append(nx_list0)
print('元の件数=',nxy_list0)
print('月数補正後の件数=',nxy_list)
y_len = len(nxy_list)
# print(y_len)
# 発行件数%化
npxy_list = []
for n1_list in nxy_list:
npx_list = []
for n2 in n1_list:
n3= round(n2/nmax,2)
npx_list.append(n3)
npxy_list.append(npx_list)
# 変数名変更
x_list = nen_list
y_list = cd_naiyo_list
print('x_list=',x_list)
print('y_list=',y_list)
print('nxy_list=',nxy_list)
print(fig_n)
# def実行
buble0(x_list,y_list,nxy_list, fig_n)
# 3-1-2 一桁コード別発行件数の年別推移(バブルチャート)のコメント
# 最終年が最多のメインGを抽出
nnen = len(nen_list)
ncd =len(cd_naiyo_list)
npk_list = []
pkcd_list = []
for n1, str1 in enumerate(cd_naiyo_list):
nxy_list01 = nxy_list[n1]
np1 = 0
for n2, str2 in enumerate(nxy_list01):
if str2>np1:
np1=str2 # ピーク件数
pknen = n2+1 # ピーク年
if pknen==nnen: # 最終年がピークならば
pkcd_list.append(str1)
np = round(np1,1)
npk_list.append(np1)
# 合計件数読み込み
pd_data1 = pd_data.iloc[:,nx-1]
ntot = 0
nyken_list = []
for str1 in pd_data1:
nyken_list.append(str1)
ntot = ntot + str1
# DataFrame化
df1 = pd.DataFrame(data=cd_naiyo_list, columns=['コード'])
df2 = pd.DataFrame(data=nyken_list, columns=['コード別合計件数'])
# 結合
df3=pd.concat([df1, df2], axis=1)
# コード
code_list01 = df3.iloc[:,0]
# ソート
pkcd_list= sorted(pkcd_list)
# メインGに分類内容と件数を結合
pkcd_title_list =[]
for n1, str1 in enumerate(pkcd_list):
for n2, str2 in enumerate(code_list01):
if str1 == str2:
str3 = nyken_list[n2]
str3 =round(str3,1)
str4 = str1 + "(" +str(str3) + "件)"
pkcd_title_list.append(str4)
# print('pkcd_title_list=',pkcd_title_list)
n2 = len(pkcd_list) # 最終年が最多のメインG数
# コメント追加
flg_n2 = 0
if n2 > 0:
wrd1 = ' このチャートによれば、最終年が最多となっているコードは次のとおり。\n'
# 最終年が最多のコード書き出し
wrd2 =''
for str1 in pkcd_title_list: # 最終年が最多のコード
str1 = " " + str1 + "\n"
wrd2 = wrd2 + str1
wrd = wrd1 + wrd2
if n2 == 0:
flg_n2 = 1
wrd = ' このチャートによれば、最終年が最多となっているコードはなかった。'
print(wrd)
# 増加したコードコピー
wrd_3_1_2_5 = wrd
# 重要コードを抽出
## 最終年の件数が平均以上でかつピーク時の80%以上でかつ増加率が100%以上か
## または最終年の件数が平均以上でかつピーク時の95%以上のものを重要コードとして書出す
#最終年と最終年前年の件数をリスト化し、合計件数、平均件数を算出
ntot = 0
nlast_list = []
nmae_list = []
# for n in range(ncd):
for n in range(y_len):
n0 = nxy_list[n][nnen-1] # 最終年の件数
nlast_list.append(n0)
n1 = nxy_list[n][nnen-2] # 最終年前年の件数
nmae_list.append(n1)
ntot = ntot + n0
navr = round(ntot/ncd,1) # 最終年の平均件数
# 重要メインGを判定
vipcd_list = []
for n1, str1 in enumerate(code_list01):
if n1 >= y_len: break
flg = 0
if nlast_list[n1] > navr: # 最終年の件数が平均以上
if nlast_list[n1] > (npk_list[n1]*0.8): # ピーク時の80%以上
if nmae_list[n1] > 0:
if (nlast_list[n1]/nmae_list[n1]) > 1: #増加率が100%以上
vipcd_list.append(str1)
flg = 1
if flg == 0:
if nlast_list[n1] > navr: # 最終年の件数が平均以上
if nlast_list[n1] > (npk_list[n1]*0.95): # ピーク時の95%以上
vipcd_list.append(str1)
# ソート
vipcd_list= sorted(vipcd_list)
# メインGに分類内容と件数を結合
vcd_title_list =[]
for n1, str1 in enumerate(vipcd_list):
for n2, str2 in enumerate(code_list01):
if str1 == str2:
str3 = str1 + "(" +str(nyken_list[n2]) + "件)"
vcd_title_list.append(str3)
n2 = len(vipcd_list) # 最終年が最多のコード数
# コメント追加
if n2 > 0:
wrd1 = ' 所定条件を満たす重要コードは次のとおり。\n'
# 重要コード書き出し
wrd2 =''
for str1 in vcd_title_list:
str1 = " " + str1 + "\n"
wrd2 = wrd2 + str1
wrd = wrd1 + wrd2
if n2 == 0:
if flg_n2 == 0:
wrd = ' 所定条件を満たす重要コードはなかった。'
else:
wrd = ' 所定条件を満たす重要コードもなかった。'
print(wrd)
# 増加したコードコピー
wrd_3_1_2_6 = wrd
print(fig_n,'、',hyo_n)
# スクリブト80 3-1-2 一桁コード別発行件数の年別推移(バブルチャート作成)(コメント書き出し)
print(wrd_3_1_2_4)
para = doc.add_paragraph(wrd_3_1_2_4)
para.runs[npara].font.size = docx.shared.Pt(11)
# para.runs[npara].bold = True
# 図表読み込み
doc.add_picture('./書き出し図表/' + fig_n + '.png')
wrd = fig_n
para = doc.add_paragraph(' ' + wrd)
para.alignment = WD_ALIGN_PARAGRAPH.CENTER # 中央揃え
para.runs[npara].font.size = docx.shared.Pt(14)
print(wrd_3_1_2_5)
para = doc.add_paragraph(wrd_3_1_2_5)
para.runs[npara].font.size = docx.shared.Pt(11)
# para.runs[npara].bold = True
print(wrd_3_1_2_6)
para = doc.add_paragraph(wrd_3_1_2_6)
para.runs[npara].font.size = docx.shared.Pt(11)
para.runs[npara].bold = True
doc.save('report.docx')
print(fig_n,'、',hyo_n)
# コード別個別分析一括処理
## 一桁コード毎に(1)~(8)の図表を作成する。
上記スクリプトと同様の処理をループで繰り返しているだけなので省略する。