#要素ごとの集計
いろいろやってみたんですが、
こんな感じで落ち着きました。
for sp in set(data['要素']):
df_op = data[data['要素'] == sp]
com_plot(df_op,sp) #集計する関数へ移動。
#集計するファイルを1つから複数に
ファイル名称を選択していたが、
*(アスタリスク)を使うようにした。
import glob
print("トランザクションデータ読み込み開始")
csv_name = r"インプットデータのあるフォルダ\*.csv"
csv_files = glob.glob(csv_name)
list = []
for f in csv_files:
list.append(pd.read_csv(f, index_col=0).drop(['Payment Number','Refund Number'], axis=1))
df = pd.concat(list)
#複数選択することができたので、日付を入力させて動き方を変更する
「YYMMDD」、「YYMM」、「all」のいずれかを入力することで処理内容を変更する。
※トランザクションデータは日時で保持しており、月ごとにフォルダを分けているので、
関数先で入力日付からyy、mm、ddを分解もしている。
def main():
print("集計日付を指定「YYMMDD」 or 「YYMM」 or 「all」")
print("集計日付の形式で取得内容を変更")
day = input("集計日付を指定 -> ")
print("")
if (len(day) == 6):
print("日時データ集計")
df = day_data(day)
data_plot(df,day,True)
top_20(df,day)
elif (len(day) == 4):
df = o_mon_data(day)
data_plot(df,day,True)
top_20(df,day)
elif (day == all):
df = month_data()
data_plot(df,day,False)
else:
print("やりなおしー")
main()
if __name__ == '__main__':
main()
def day_data(day):
print("これで抽出→:", day)
yy = day[:2]
mm = day[2:4]
#top20の作成
TOTALを付与→sort→TOTAL削除
私の環境ではTOTAK行、列の削除時にちょっと怒られる。。。
#TOTALで降順ソート
data.sort_values(['TOTAL'],ascending=False,inplace=True)
#上位20位のものを使用して、行列入れ替え
pvtop20=data[:21]
#TOTAL行、列の削除
drop_idx = ['TOTAL']
pvtop20.drop(drop_idx, inplace=True)
drop_col = ['TOTAL']
pvtop20.drop(drop_col, axis=1, inplace=True)
#付加情報紐づけ
キーが同じデータから紐づけ。
辞書(dict)を使う想定だったけど、
pandasの機能がすごかった。。。
print(デイリーデータ +アルファ)
data = pd.merge(df, tenbun_meisai, on=["キー"])
perlでのcsv集計が考え方のベースだったが
なんやかんややりたいことはできてきた。
tkinter書き忘れてたから追記
import os, tkinter, tkinter.filedialog, tkinter.messagebox
# ファイル選択ダイアログの表示
root = tkinter.Tk()
root.withdraw()
#csvを抽出したいので拡張子がcsvを表示
fTyp = [("","*.csv")]
#インプットファイルが存在するフォルダを指定
iDir = r'hoge'
#インプットファイル選択
tkinter.messagebox.showinfo('データ抽出対象選択','処理ファイルを選択してください!')
file = tkinter.filedialog.askopenfilenames(filetypes = fTyp,initialdir = iDir)
list = []
for f in file:
list.append(pd.read_csv(f, index_col=0).drop(['Payment Number','Refund Number'], axis=1))
df = pd.concat(list)