{"metadata":{"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":7391,"databundleVersionId":44328,"sourceType":"competition"},{"sourceId":6165985,"sourceType":"datasetVersion","datasetId":3537638}],"dockerImageVersionId":30627,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.10.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"#warnings\nimport warnings\nwarnings.simplefilter('ignore')\n#Tip 1.3. Ignore all warnings about later execution ¶\nwarnings.filterwarnings(\"ignore\", category=FutureWarning)\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport seaborn as sns","metadata":{"execution":{"iopub.status.busy":"2023-12-30T08:42:05.358731Z","iopub.execute_input":"2023-12-30T08:42:05.359369Z","iopub.status.idle":"2023-12-30T08:42:05.364500Z","shell.execute_reply.started":"2023-12-30T08:42:05.359337Z","shell.execute_reply":"2023-12-30T08:42:05.363419Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\ndf = pd.read_csv(\"/kaggle/input/superstore-sales/superstore_final_dataset (1).csv\",encoding='latin-1')\nprint(df.info())","metadata":{"jupyter":{"source_hidden":true},"execution":{"iopub.status.busy":"2023-12-30T08:42:05.371753Z","iopub.execute_input":"2023-12-30T08:42:05.372050Z","iopub.status.idle":"2023-12-30T08:42:05.450517Z","shell.execute_reply.started":"2023-12-30T08:42:05.372025Z","shell.execute_reply":"2023-12-30T08:42:05.449611Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#date is messy (in two format 30/5/2015 30/05/2015 d/m/y)\ndef convert_messy_date(x):# date=d/m/y 2/05/2015 2/5/2015\n    words = x.split('/')\n    day=int(words[0])\n    month=int(words[1])\n    date=f\"{words[2]}/{month:02}/{day:02}\"\n    return date\n\ndf[\"Ship_Date\"]=df.Ship_Date.apply(convert_messy_date)\ndf[\"Order_Date\"]=df.Order_Date.apply(convert_messy_date)\n# Now convert it\ndf['Order_Date'] = pd.to_datetime(df['Order_Date'], errors='coerce')\ndf['Ship_Date'] = pd.to_datetime(df['Ship_Date'], errors='coerce')\n\ndf['Postal_Code'] = pd.to_numeric(df['Postal_Code'], errors='coerce').astype('Int64')\ndf['Sales'] = pd.to_numeric(df['Sales'], errors='coerce')\ndf.drop(columns=['Row_ID', 'Customer_ID','Product_ID'],inplace=True)\ndf.columns = [column.lower() for column in df.columns]\nprint(df.info())","metadata":{"execution":{"iopub.status.busy":"2023-12-30T08:42:05.632187Z","iopub.execute_input":"2023-12-30T08:42:05.632532Z","iopub.status.idle":"2023-12-30T08:42:05.711766Z","shell.execute_reply.started":"2023-12-30T08:42:05.632503Z","shell.execute_reply":"2023-12-30T08:42:05.710821Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df[\"year\"]=df['order_date']. dt.year #int\ndf[\"month\"]=df['order_date']. dt. month #int\ndf[\"year-month\"]=df['order_date'].dt.strftime('%Y-%m')#format YYYY-MM\ndf['month_name'] = df['order_date'].dt.strftime(\"%b\") #Jan","metadata":{"execution":{"iopub.status.busy":"2023-12-30T08:42:05.714104Z","iopub.execute_input":"2023-12-30T08:42:05.714752Z","iopub.status.idle":"2023-12-30T08:42:05.871495Z","shell.execute_reply.started":"2023-12-30T08:42:05.714716Z","shell.execute_reply":"2023-12-30T08:42:05.870725Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"***\n# Col=segment #","metadata":{}},{"cell_type":"code","source":"#chart setting\ncolName= \"segment\"\ndf_cahrt=df\n\nsns.set_theme(style=\"whitegrid\")\nval = df_cahrt[colName].value_counts().sort_values(ascending=False)\n# val=df[colName].value_counts().sort_index(ascending=True)\nplt.figure(figsize=(10, 5))\nax = sns.countplot(df_cahrt, x=colName \n                   , palette=\"pastel\"\n                   # , stat=\"percent\"\n                   , order=val.index\n                   )\n\nsumm = val.sum()\n\ntitle = val.index\nlbls = [f'{p[0] * 100 / summ:.1f}%' for p in zip(val)]\n\n# vetical label x=col\nfor p, label in zip(ax.patches, lbls):\n    ax.annotate(label, (p.get_x(), p.get_height() + 0.15))\n\nplt.title(\"segment- frequency distribution\",fontsize=12)\nplt.tight_layout()\nplt.show()\n","metadata":{"execution":{"iopub.status.busy":"2023-12-30T08:42:05.872584Z","iopub.execute_input":"2023-12-30T08:42:05.872898Z","iopub.status.idle":"2023-12-30T08:42:06.318782Z","shell.execute_reply.started":"2023-12-30T08:42:05.872870Z","shell.execute_reply":"2023-12-30T08:42:06.317893Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<div class=\"alert alert-block alert-success\"><b>\nInsight:\n</b> <br>\nConsumer is most important in count. <br>\n</div>","metadata":{}},{"cell_type":"code","source":"cat_col=\"segment\" \nnum_Col=\"sales\"\nsns.barplot(x=cat_col, y=num_Col, data=df)\nplt.title(\"Mean of sales per segment\",fontsize=12)\nplt.tight_layout()\nplt.show()\n","metadata":{"execution":{"iopub.status.busy":"2023-12-30T08:42:06.320697Z","iopub.execute_input":"2023-12-30T08:42:06.321004Z","iopub.status.idle":"2023-12-30T08:42:06.728952Z","shell.execute_reply.started":"2023-12-30T08:42:06.320958Z","shell.execute_reply":"2023-12-30T08:42:06.728108Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<div class=\"alert alert-block alert-success\"><b>\nInsight:\n</b> <br>\n All segment almost equal sale <br>\n</div>","metadata":{}},{"cell_type":"markdown","source":"***\n# Col=category #","metadata":{}},{"cell_type":"code","source":"group_df =df.groupby(['category']).agg(\n         \n         sum_sales = ('sales','sum'),\n         ).sort_values(by='sum_sales',ascending=False).reset_index()\nplt.figure(figsize=(10, 6))\nax = sns.barplot(data=group_df, x='category', y='sum_sales', palette=\"pastel\")\nplt.title(\"Category & sum_sales\",fontsize=12)\nplt.xlabel(\"\")","metadata":{"execution":{"iopub.status.busy":"2023-12-30T08:42:06.730171Z","iopub.execute_input":"2023-12-30T08:42:06.730516Z","iopub.status.idle":"2023-12-30T08:42:07.001652Z","shell.execute_reply.started":"2023-12-30T08:42:06.730483Z","shell.execute_reply":"2023-12-30T08:42:07.000763Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<div class=\"alert alert-block alert-success\"><b>\nInsight:\n</b> <br>\n Technology is the most important category <br>\n</div>","metadata":{}},{"cell_type":"markdown","source":"***\n# Col=sub_category #","metadata":{}},{"cell_type":"code","source":"group_df =df.groupby(['sub_category']).agg(\n         \n         sum_sales = ('sales','sum'),\n         ).sort_values(by='sum_sales',ascending=False).reset_index()\nplt.figure(figsize=(10, 6))\nax = sns.barplot(data=group_df, y='sub_category', x='sum_sales', palette=\"pastel\")\nplt.title(\"sub_category & sum_sales\",fontsize=12)\nplt.ylabel(\"\")","metadata":{"execution":{"iopub.status.busy":"2023-12-30T08:42:07.002907Z","iopub.execute_input":"2023-12-30T08:42:07.003215Z","iopub.status.idle":"2023-12-30T08:42:07.521567Z","shell.execute_reply.started":"2023-12-30T08:42:07.003189Z","shell.execute_reply":"2023-12-30T08:42:07.520671Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<div class=\"alert alert-block alert-success\"><b>\nInsight:\n</b> <br>\nBest=phone/chairs<br>\n</div>","metadata":{}},{"cell_type":"markdown","source":"***\n# Col=product #","metadata":{}},{"cell_type":"code","source":"group_df =df.groupby(['product_name']).agg(\n         \n         sum_sales = ('sales','sum'),\n         ).sort_values(by='sum_sales',ascending=False).reset_index()\ngroup_df=group_df.head(5)\nplt.figure(figsize=(10, 6))\nax = sns.barplot(data=group_df, y='product_name', x='sum_sales', palette=\"pastel\")\nplt.title(\"Top 5 product  & sum_sales\",fontsize=12)\nplt.ylabel(\"\")","metadata":{"execution":{"iopub.status.busy":"2023-12-30T08:42:07.522778Z","iopub.execute_input":"2023-12-30T08:42:07.523098Z","iopub.status.idle":"2023-12-30T08:42:07.942147Z","shell.execute_reply.started":"2023-12-30T08:42:07.523071Z","shell.execute_reply":"2023-12-30T08:42:07.941240Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<div class=\"alert alert-block alert-success\"><b>\nInsight:\n</b> <br>\n Best=Canon copier <br>\n</div>","metadata":{}},{"cell_type":"code","source":"group_df=group_df.tail(5)\nplt.figure(figsize=(10, 4))\nax = sns.barplot(data=group_df, y='product_name', x='sum_sales', palette=\"pastel\")\nplt.title(\"Bottom 5 product  & sum_sales\",fontsize=12)\nplt.ylabel(\"\")","metadata":{"execution":{"iopub.status.busy":"2023-12-30T08:42:07.944994Z","iopub.execute_input":"2023-12-30T08:42:07.945370Z","iopub.status.idle":"2023-12-30T08:42:08.283935Z","shell.execute_reply.started":"2023-12-30T08:42:07.945334Z","shell.execute_reply":"2023-12-30T08:42:08.283033Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<div class=\"alert alert-block alert-success\"><b>\nInsight:\n</b> <br>\n Sale unit review this product <br>\n</div>","metadata":{}},{"cell_type":"markdown","source":"***\n# Col=ship_mode #","metadata":{}},{"cell_type":"code","source":"group_df =df.groupby(['ship_mode']).agg(\n         \n         sum_sales = ('sales','sum'),\n         ).sort_values(by='sum_sales',ascending=False).reset_index()\ngroup_df=group_df.head(5)\nplt.figure(figsize=(10, 6))\nax = sns.barplot(data=group_df, x='ship_mode', y='sum_sales', palette=\"pastel\")\nplt.title(\"ship_mode  & sum_sales\",fontsize=12)\nplt.ylabel(\"\")","metadata":{"execution":{"iopub.status.busy":"2023-12-30T08:42:08.285238Z","iopub.execute_input":"2023-12-30T08:42:08.285578Z","iopub.status.idle":"2023-12-30T08:42:08.565750Z","shell.execute_reply.started":"2023-12-30T08:42:08.285547Z","shell.execute_reply":"2023-12-30T08:42:08.564902Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<div class=\"alert alert-block alert-success\"><b>\nInsight:\n</b> <br>\nStandard ship mode work well<br>\n</div>","metadata":{}},{"cell_type":"code","source":"df[\"diff\"]=(df[\"ship_date\"]-df[\"order_date\"]).dt.days\n\n#chart setting\ncolName= \"diff\"\ndf_cahrt=df\n\nsns.set_theme(style=\"whitegrid\")\nval = df_cahrt[colName].value_counts().sort_index(ascending=True)\n# val=df[colName].value_counts().sort_index(ascending=True)\nplt.figure(figsize=(10, 5))\nax = sns.countplot(df_cahrt, x=colName \n                   , palette=\"pastel\"\n                   # , stat=\"percent\"\n                   , order=val.index\n                   )\n\nsumm = val.sum()\n\ntitle = val.index\nlbls = [f'{p[0] * 100 / summ:.1f}%' for p in zip(val)]\n\n# vetical label x=col\nfor p, label in zip(ax.patches, lbls):\n    ax.annotate(label, (p.get_x(), p.get_height() + 0.15))\n\nplt.title(\"segment- frequency distribution\",fontsize=12)\nplt.tight_layout()\nplt.show()\n\n","metadata":{"execution":{"iopub.status.busy":"2023-12-30T08:42:08.567270Z","iopub.execute_input":"2023-12-30T08:42:08.567601Z","iopub.status.idle":"2023-12-30T08:42:09.025368Z","shell.execute_reply.started":"2023-12-30T08:42:08.567570Z","shell.execute_reply":"2023-12-30T08:42:09.024454Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<div class=\"alert alert-block alert-success\"><b>\nInsight:\n</b> <br>\nship mode is 4 day<br>\n</div>","metadata":{}},{"cell_type":"code","source":"df[\"diff\"].describe()","metadata":{"execution":{"iopub.status.busy":"2023-12-30T08:42:09.026621Z","iopub.execute_input":"2023-12-30T08:42:09.026996Z","iopub.status.idle":"2023-12-30T08:42:09.038556Z","shell.execute_reply.started":"2023-12-30T08:42:09.026947Z","shell.execute_reply":"2023-12-30T08:42:09.037609Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"***\n# Col=region #","metadata":{}},{"cell_type":"code","source":"import squarify\n\n\nvalCount=df[\"region\"].value_counts()\nlabel=[]\nsumm=sum(valCount.tolist())\nfor idx, name in enumerate(valCount.index.tolist()):\n    label.append(name\n                #  + \" ( \"+ str(valCount[idx]) +\" )\"\n                    + \"\\n(\" +f\"{100*valCount[idx]/summ:.1f}\"+\"%)\" )\n\n# print(qq)\nplt.figure(figsize=(8, 4))\n# we don't require the axis values so lets remove it\nplt.axis(\"off\")\naxis = squarify.plot(sizes=valCount.values,\n                label=label,\n                color=sns.color_palette(\"Set2\", len(valCount)),\n                pad=0,#distance between squares\n                text_kwargs={'fontsize': 18})\naxis.set_title(\"Sale by region\", fontsize=24)\nplt.show()\n\n","metadata":{"execution":{"iopub.status.busy":"2023-12-30T08:42:09.039513Z","iopub.execute_input":"2023-12-30T08:42:09.039769Z","iopub.status.idle":"2023-12-30T08:42:09.281879Z","shell.execute_reply.started":"2023-12-30T08:42:09.039747Z","shell.execute_reply":"2023-12-30T08:42:09.281031Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<div class=\"alert alert-block alert-success\"><b>\nInsight:\n</b> <br>\nIs normal selling less in south?<br>\n</div>","metadata":{}},{"cell_type":"markdown","source":"***\n# Col=City #","metadata":{}},{"cell_type":"code","source":"fig, ax = plt.subplots(1, 2, figsize=(10, 6))\ngroup_df =df.groupby(['city']).agg(\n         \n         sum_sales = ('sales','sum'),\n         ).sort_values(by='sum_sales',ascending=False).reset_index()\ntop=group_df.head(10)\nbottom=group_df.tail(10)\nsns.barplot(data=top, y='city', x='sum_sales', palette=\"pastel\",ax=ax[0])\nsns.barplot(data=bottom, y='city', x='sum_sales', palette=\"pastel\",ax=ax[1])\nax[0].title.set_text('Sale of Top 10 City')\nax[1].title.set_text('Sale of Bottom 10 City')\nplt.tight_layout()\nplt.ylabel(\"\")","metadata":{"execution":{"iopub.status.busy":"2023-12-30T08:42:09.285451Z","iopub.execute_input":"2023-12-30T08:42:09.285800Z","iopub.status.idle":"2023-12-30T08:42:10.201612Z","shell.execute_reply.started":"2023-12-30T08:42:09.285767Z","shell.execute_reply":"2023-12-30T08:42:10.200653Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<div class=\"alert alert-block alert-success\"><b>\nInsight:\n</b> <br>\nData look wrong for bottom 10<br>\n</div>","metadata":{}},{"cell_type":"markdown","source":"***\n# Col=sales #","metadata":{}},{"cell_type":"code","source":"def show_HistoBox(colName,df):\n    var_data=df[colName]\n    # Get statistics\n    min_val = var_data.min()\n    max_val = var_data.max()\n    mean_val = var_data.mean()\n    med_val = var_data.median()\n    Q1 = var_data.quantile(0.25)\n    Q3 = var_data.quantile(0.75)\n    higher_boundary=Q3+(1.5 * (Q3-Q1))\n    lower_boundary=Q1-(1.5 * (Q3-Q1))\n    \n    fig, ax = plt.subplots(2, 1, figsize=(10, 4))\n\n\n    sns.histplot(x=var_data, data=df, kde=False,ax=ax[0],color='yellow')\n    ax[0].set_ylabel('Frequency')\n    ax[0].set_xlabel('')\n\n    # Add lines for the mean, median, and mode\n    ax[0].axvline(x=min_val, color='gray', linestyle='dashed', linewidth=2)\n    if (lower_boundary> min_val):\n        ax[0].axvline(x=lower_boundary, color='orange', linestyle='dashed', linewidth=2)\n\n    ax[0].axvline(x=Q1, color='blue', linestyle='dashed', linewidth=2)\n    ax[0].axvline(x=mean_val, color='cyan', linestyle='dashed', linewidth=2)\n    ax[0].axvline(x=med_val, color='red', linestyle='dashed', linewidth=2)\n    ax[0].axvline(x=Q3, color='pink', linestyle='dashed', linewidth=2)\n    if higher_boundary < max_val:\n        ax[0].axvline(x=higher_boundary, color='orange', linestyle='dashed', linewidth=2)\n    ax[0].axvline(x=max_val, color='gray', linestyle='dashed', linewidth=2)\n\n\n    if (higher_boundary < max_val) & (lower_boundary> min_val):\n        legendList = [\"min\",'lower_boundary', \"Q25%\", \"mean\", \"median\", \"Q75%\",'higher_boundary', \"max\"]\n    elif (higher_boundary < max_val) & (lower_boundary<= min_val):\n        legendList = [\"min\", \"Q25%\", \"mean\", \"median\", \"Q75%\",'higher_boundary', \"max\"]\n    elif (higher_boundary >= max_val) & (lower_boundary< min_val):\n        legendList = [\"min\",'lower_boundary', \"Q25%\", \"mean\", \"median\", \"Q75%\", \"max\"]\n    else:\n        legendList = [\"min\", \"Q25%\", \"mean\", \"median\", \"Q75%\", \"max\"]\n\n\n    ax[0].legend(legendList, loc='center left', bbox_to_anchor=(1, 0.5))\n\n\n    sns.boxplot(x=var_data,\n                data=df,\n                palette=\"Spectral_r\",\n                ax=ax[1],\n                showmeans=True)\n\n\n    ax[1].set_xlabel(colName)\n    # Add a title to the Figure\n    fig.suptitle('Data Distribution')\n\n    x=var_data[var_data>higher_boundary].count()\n    print(f\"Outlier:\\n{x} row > higher_boundary ({100*x/var_data.count():.2f}%) \")\n    y = var_data[var_data < lower_boundary].count()\n    print(f\"{y} row < lower_boundary ({100 * y / var_data.count():.2f}%) \")\n    print(f\"sum:{x+y} row  ({100 *(x+ y) / var_data.count():.2f}%) \")\n\n    plt.tight_layout()\n    fig.show()\n","metadata":{"execution":{"iopub.status.busy":"2023-12-30T08:42:10.203067Z","iopub.execute_input":"2023-12-30T08:42:10.203668Z","iopub.status.idle":"2023-12-30T08:42:10.221543Z","shell.execute_reply.started":"2023-12-30T08:42:10.203633Z","shell.execute_reply":"2023-12-30T08:42:10.220561Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df['sales'].describe()","metadata":{"execution":{"iopub.status.busy":"2023-12-30T08:42:10.223124Z","iopub.execute_input":"2023-12-30T08:42:10.223443Z","iopub.status.idle":"2023-12-30T08:42:10.240584Z","shell.execute_reply.started":"2023-12-30T08:42:10.223414Z","shell.execute_reply":"2023-12-30T08:42:10.239542Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"show_HistoBox(\"sales\",df)","metadata":{"execution":{"iopub.status.busy":"2023-12-30T08:42:10.241786Z","iopub.execute_input":"2023-12-30T08:42:10.242140Z","iopub.status.idle":"2023-12-30T08:42:13.037702Z","shell.execute_reply.started":"2023-12-30T08:42:10.242107Z","shell.execute_reply":"2023-12-30T08:42:13.036753Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<div class=\"alert alert-block alert-success\"><b>\nInsight:\n</b> <br>\n not normal distribution <br>\n Distribution right skew.<br>\n about 12%  outlier<br>\n</div>","metadata":{}},{"cell_type":"code","source":"group_df =df.groupby(['order_date']).agg(\n         \n         sum_sales = ('sales','sum'),\n         ).sort_values(by='order_date',ascending=True).reset_index()\n\nimport matplotlib.ticker as ticker\nfig, ax = plt.subplots(figsize=(8, 5)) \ngfg=sns.lineplot(x = \"order_date\", y = \"sum_sales\", data=group_df)\n\nplt.show()\n","metadata":{"execution":{"iopub.status.busy":"2023-12-30T08:42:13.038806Z","iopub.execute_input":"2023-12-30T08:42:13.039106Z","iopub.status.idle":"2023-12-30T08:42:13.703266Z","shell.execute_reply.started":"2023-12-30T08:42:13.039080Z","shell.execute_reply":"2023-12-30T08:42:13.702355Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<div class=\"alert alert-block alert-success\"><b>\nInsight:\n</b> <br>\nchart is not clear. change x-axis to month <br>\n</div>","metadata":{}},{"cell_type":"code","source":"group_df =df.groupby(['year-month']).agg(\n         \n         sum_sales = ('sales','sum'),\n         ).sort_values(by='year-month',ascending=True).reset_index()\n\nimport matplotlib.ticker as ticker\nfig, ax = plt.subplots(figsize=(8, 5)) \ngfg=sns.lineplot(x = \"year-month\", y = \"sum_sales\", data=group_df)\nax.yaxis.set_major_formatter(ticker.EngFormatter())\ngfg.set_xticks(range(1,13)) \nxtick_loc = [ '2015-01','2016-01','2017-01',\n            '2018-01', '2019-01']\nax.set_xticks(xtick_loc)\n\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2023-12-30T08:42:13.704421Z","iopub.execute_input":"2023-12-30T08:42:13.704702Z","iopub.status.idle":"2023-12-30T08:42:14.069147Z","shell.execute_reply.started":"2023-12-30T08:42:13.704677Z","shell.execute_reply":"2023-12-30T08:42:14.068243Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<div class=\"alert alert-block alert-success\"><b>\nInsight:\n</b> <br>\nThe trend is ascending year by yearl<br>\n</div>","metadata":{}},{"cell_type":"code","source":"group_df =df.groupby(['year','month','month_name','year-month']).agg(\n         \n         sum_sales = ('sales','sum'),\n         ).sort_values(by='year-month',ascending=True).reset_index()\nplt.figure(figsize=(10, 6))\nax = sns.barplot(data=group_df, x='month_name', y='sum_sales', hue='year', palette=\"pastel\")","metadata":{"execution":{"iopub.status.busy":"2023-12-30T08:42:14.070284Z","iopub.execute_input":"2023-12-30T08:42:14.070567Z","iopub.status.idle":"2023-12-30T08:42:14.665452Z","shell.execute_reply.started":"2023-12-30T08:42:14.070542Z","shell.execute_reply":"2023-12-30T08:42:14.664617Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<div class=\"alert alert-block alert-success\"><b>\nInsight:\n</b> <br>\nSell increase year by year<br>\nIn new month of year sell drop sharp and month by month is increased. <br>\nthe last month is the best selling month\n</div>","metadata":{}}]}