サンプルDF作成・出力、フォルダ内のpklファイルを全結合

投稿者: | 2021-11-27

目次

サンプルDFを作成後、pklで出力する

import pandas as pd
import numpy as np
import pathlib
from tqdm import tqdm

# サンプルDF_カラム作成用
def get_col_list(col_name):
    
    col = {
        'area': ['北海道', '東北', '東京', '中部', '関西', '中国', '四国', '九州', '沖縄'],
        'plan': ['Aプラン', 'Bプラン', 'Cプラン'],
    }
    
    rand_num = np.random.randint(0, len(col[col_name]))
    col_val = col[col_name][rand_num]
    return col_val


# サンプルDF作成後、出力する(periodは列「年月」作成用)
def get_df_to_pkl():

    period = ['202004', '202005', '202006', '202007', '202008', '202009', '202010', '202011', '202012', '202101', '202102', '202103']
    
    for i, ym in enumerate(period):

        ym_data = [ym for i in list(range(3000))]
        
        area_data = [get_col_list('area') for j in list(range(3000))]
        plan_data = [get_col_list('plan') for j in list(range(3000))]
        
        uriage_data = [np.random.randint(1000,20000) for j in range(3000)]

        data = {
            '年月': ym_data,
            'エリア': area_data,
            'プラン': plan_data,
            '売上額': uriage_data,
            }

        df = pd.DataFrame(data)
        
        pkl_name = "unique_" + ym_data[0] + ".pkl"
        p = pathlib.Path("/Users/mbp441/Desktop/pkl") / pkl_name
        df.to_pickle(p) 

フォルダ内のpklファイルを全結合(concat)

# フォルダ内のpklファイルを全結合
def concat_df_all_indir():

    base_dir = pathlib.Path("/Users/mbp441/Desktop/pkl")
    list_pkl = list(base_dir.glob('*.pkl'))

    df_list = []
    for p in list_pkl:
        print(p)
        df = pd.read_pickle(p)
        df_list.append(df)

    df_all = (pd.concat(df_list)
            .sort_values(['年月'], ascending=[True])
            .reset_index(drop=True))
    
    return df_all

df_all.to_pickle((base_dir / "unique_all.pkl")

一部エリアの売上を集計

sales_by_area = (
    df_all.groupby(['エリア','年月'])
    .agg({'売上額': 'sum'})
    .reset_index()
)

month_sales_chubu = sales_by_area.query('エリア == "中部"')
total_sales_chubu = month_sales_chubu['売上額'].sum()

display(month_sales_chubu)
print(f'中部エリア売上額(202004~202103):{total_sales_chubu}')