import pandas as pd
# 1. DATA ENTRY
# Raw data extracted from your screenshots
data_weight = {
"Month": ["24-11", "24-12", "25-01", "25-02", "25-03", "25-04", "25-05", "25-06", "25-07", "25-08", "25-09", "25-10", "25-11", "25-12", "26-01"],
"0-1 KG": [4062, 3532, 4406, 4709, 6911, 6695, 3843, 7300, 4932, 6067, 3828, 7898, 3636, 4955, 3855],
"1-2 KG": [5164, 9193, 12083, 11147, 14293, 13358, 11079, 17301, 20253, 14370, 12808, 13615, 12068, 16299, 12746],
"2-3 KG": [20742, 14165, 15994, 18037, 22647, 15721, 18552, 22327, 21758, 15797, 23828, 17932, 15608, 26314, 33494],
"3-4 KG": [13908, 9391, 11256, 12037, 10433, 8372, 9539, 12262, 7563, 15472, 21274, 15590, 22965, 10197, 16520],
"4+ KG": [195422, 183102, 204845, 114390, 130741, 84354, 91710, 56426, 64833, 65312, 108861, 89327, 76762, 104426, 106721],
"Grand Total Weight": [239296, 219383, 248584, 160320, 185025, 128500, 134721, 115616, 119338, 117018, 170599, 144361, 131038, 162191, 173336]
}
data_qty = {
"Month": ["24-11", "24-12", "25-01", "25-02", "25-03", "25-04", "25-05", "25-06", "25-07", "25-08", "25-09", "25-10", "25-11", "25-12", "26-01"],
"0-1 PCS": [10954, 7170, 10253, 13118, 15957, 15808, 11001, 16819, 9717, 13952, 4969, 18975, 8024, 13199, 9786],
"1-2 PCS": [3664, 5953, 7989, 7371, 9254, 8856, 7411, 11557, 12707, 10078, 8153, 9431, 8274, 10901, 8262],
"2-3 PCS": [8670, 5797, 6503, 7382, 9479, 6693, 7891, 9851, 9063, 6668, 9744, 7538, 6668, 11088, 14439],
"3-4 PCS": [3819, 2634, 3148, 3396, 2871, 2391, 2647, 3400, 2162, 4351, 6001, 4323, 6348, 2954, 4455],
"4+ PCS": [33622, 26756, 35461, 18661, 22436, 13749, 13331, 8991, 9897, 10159, 16774, 14259, 12270, 16107, 14798],
"Grand Total PCS": [60729, 48310, 63354, 49928, 59997, 47497, 42281, 50618, 43546, 45208, 45641, 54526, 41584, 54249, 51740]
}
# 2. DATAFRAME CREATION
df_weight = pd.DataFrame(data_weight)
df_qty = pd.DataFrame(data_qty)
# 3. CALCULATED ANALYSIS (KPIs)
# Create a new DataFrame for analysis
df_analysis = pd.DataFrame()
df_analysis["Month"] = df_weight["Month"]
df_analysis["Total Weight (KG)"] = df_weight["Grand Total Weight"]
df_analysis["Total Quantity (PCS)"] = df_qty["Grand Total PCS"]
# Calculate Average Weight per Piece (The key metric for management)
df_analysis["Avg Weight/Piece (KG)"] = (df_analysis["Total Weight (KG)"] / df_analysis["Total Quantity (PCS)"]).round(2)
# Analyze the Mix % of Light vs Heavy Profiles
df_analysis["Light Profiles (0-1kg) %"] = ((df_qty["0-1 PCS"] / df_qty["Grand Total PCS"]) * 100).round(1)
df_analysis["Heavy Profiles (4kg+) %"] = ((df_qty["4+ PCS"] / df_qty["Grand Total PCS"]) * 100).round(1)
# Add comments based on thresholds
def assess_status(row):
if row["Avg Weight/Piece (KG)"] < 2.8:
return "CRITICAL: Low Weight Mix"
elif row["Avg Weight/Piece (KG)"] > 3.5:
return "Good: Heavy Mix"
else:
return "Average"
df_analysis["Status"] = df_analysis.apply(assess_status, axis=1)
# 4. EXPORT TO EXCEL
file_name = "Alumex_Production_Analysis.xlsx"
try:
with pd.ExcelWriter(file_name, engine='openpyxl') as writer:
df_weight.to_excel(writer, sheet_name='Raw Data - Weight (KG)', index=False)
df_qty.to_excel(writer, sheet_name='Raw Data - Quantity (PCS)', index=False)
df_analysis.to_excel(writer, sheet_name='Management Analysis', index=False)
print(f"Success! '{file_name}' has been created.")
print("This file contains three sheets:")
print("1. Raw Data - Weight (KG)")
print("2. Raw Data - Quantity (PCS)")
print("3. Management Analysis (includes Calculated Avg Weight)")
except Exception as e:
print(f"An error occurred: {e}")
aW1wb3J0IHBhbmRhcyBhcyBwZAoKIyAxLiBEQVRBIEVOVFJZCiMgUmF3IGRhdGEgZXh0cmFjdGVkIGZyb20geW91ciBzY3JlZW5zaG90cwpkYXRhX3dlaWdodCA9IHsKICAgICJNb250aCI6IFsiMjQtMTEiLCAiMjQtMTIiLCAiMjUtMDEiLCAiMjUtMDIiLCAiMjUtMDMiLCAiMjUtMDQiLCAiMjUtMDUiLCAiMjUtMDYiLCAiMjUtMDciLCAiMjUtMDgiLCAiMjUtMDkiLCAiMjUtMTAiLCAiMjUtMTEiLCAiMjUtMTIiLCAiMjYtMDEiXSwKICAgICIwLTEgS0ciOiBbNDA2MiwgMzUzMiwgNDQwNiwgNDcwOSwgNjkxMSwgNjY5NSwgMzg0MywgNzMwMCwgNDkzMiwgNjA2NywgMzgyOCwgNzg5OCwgMzYzNiwgNDk1NSwgMzg1NV0sCiAgICAiMS0yIEtHIjogWzUxNjQsIDkxOTMsIDEyMDgzLCAxMTE0NywgMTQyOTMsIDEzMzU4LCAxMTA3OSwgMTczMDEsIDIwMjUzLCAxNDM3MCwgMTI4MDgsIDEzNjE1LCAxMjA2OCwgMTYyOTksIDEyNzQ2XSwKICAgICIyLTMgS0ciOiBbMjA3NDIsIDE0MTY1LCAxNTk5NCwgMTgwMzcsIDIyNjQ3LCAxNTcyMSwgMTg1NTIsIDIyMzI3LCAyMTc1OCwgMTU3OTcsIDIzODI4LCAxNzkzMiwgMTU2MDgsIDI2MzE0LCAzMzQ5NF0sCiAgICAiMy00IEtHIjogWzEzOTA4LCA5MzkxLCAxMTI1NiwgMTIwMzcsIDEwNDMzLCA4MzcyLCA5NTM5LCAxMjI2MiwgNzU2MywgMTU0NzIsIDIxMjc0LCAxNTU5MCwgMjI5NjUsIDEwMTk3LCAxNjUyMF0sCiAgICAiNCsgS0ciOiAgWzE5NTQyMiwgMTgzMTAyLCAyMDQ4NDUsIDExNDM5MCwgMTMwNzQxLCA4NDM1NCwgOTE3MTAsIDU2NDI2LCA2NDgzMywgNjUzMTIsIDEwODg2MSwgODkzMjcsIDc2NzYyLCAxMDQ0MjYsIDEwNjcyMV0sCiAgICAiR3JhbmQgVG90YWwgV2VpZ2h0IjogWzIzOTI5NiwgMjE5MzgzLCAyNDg1ODQsIDE2MDMyMCwgMTg1MDI1LCAxMjg1MDAsIDEzNDcyMSwgMTE1NjE2LCAxMTkzMzgsIDExNzAxOCwgMTcwNTk5LCAxNDQzNjEsIDEzMTAzOCwgMTYyMTkxLCAxNzMzMzZdCn0KCmRhdGFfcXR5ID0gewogICAgIk1vbnRoIjogWyIyNC0xMSIsICIyNC0xMiIsICIyNS0wMSIsICIyNS0wMiIsICIyNS0wMyIsICIyNS0wNCIsICIyNS0wNSIsICIyNS0wNiIsICIyNS0wNyIsICIyNS0wOCIsICIyNS0wOSIsICIyNS0xMCIsICIyNS0xMSIsICIyNS0xMiIsICIyNi0wMSJdLAogICAgIjAtMSBQQ1MiOiBbMTA5NTQsIDcxNzAsIDEwMjUzLCAxMzExOCwgMTU5NTcsIDE1ODA4LCAxMTAwMSwgMTY4MTksIDk3MTcsIDEzOTUyLCA0OTY5LCAxODk3NSwgODAyNCwgMTMxOTksIDk3ODZdLAogICAgIjEtMiBQQ1MiOiBbMzY2NCwgNTk1MywgNzk4OSwgNzM3MSwgOTI1NCwgODg1NiwgNzQxMSwgMTE1NTcsIDEyNzA3LCAxMDA3OCwgODE1MywgOTQzMSwgODI3NCwgMTA5MDEsIDgyNjJdLAogICAgIjItMyBQQ1MiOiBbODY3MCwgNTc5NywgNjUwMywgNzM4MiwgOTQ3OSwgNjY5MywgNzg5MSwgOTg1MSwgOTA2MywgNjY2OCwgOTc0NCwgNzUzOCwgNjY2OCwgMTEwODgsIDE0NDM5XSwKICAgICIzLTQgUENTIjogWzM4MTksIDI2MzQsIDMxNDgsIDMzOTYsIDI4NzEsIDIzOTEsIDI2NDcsIDM0MDAsIDIxNjIsIDQzNTEsIDYwMDEsIDQzMjMsIDYzNDgsIDI5NTQsIDQ0NTVdLAogICAgIjQrIFBDUyI6ICBbMzM2MjIsIDI2NzU2LCAzNTQ2MSwgMTg2NjEsIDIyNDM2LCAxMzc0OSwgMTMzMzEsIDg5OTEsIDk4OTcsIDEwMTU5LCAxNjc3NCwgMTQyNTksIDEyMjcwLCAxNjEwNywgMTQ3OThdLAogICAgIkdyYW5kIFRvdGFsIFBDUyI6IFs2MDcyOSwgNDgzMTAsIDYzMzU0LCA0OTkyOCwgNTk5OTcsIDQ3NDk3LCA0MjI4MSwgNTA2MTgsIDQzNTQ2LCA0NTIwOCwgNDU2NDEsIDU0NTI2LCA0MTU4NCwgNTQyNDksIDUxNzQwXQp9CgojIDIuIERBVEFGUkFNRSBDUkVBVElPTgpkZl93ZWlnaHQgPSBwZC5EYXRhRnJhbWUoZGF0YV93ZWlnaHQpCmRmX3F0eSA9IHBkLkRhdGFGcmFtZShkYXRhX3F0eSkKCiMgMy4gQ0FMQ1VMQVRFRCBBTkFMWVNJUyAoS1BJcykKIyBDcmVhdGUgYSBuZXcgRGF0YUZyYW1lIGZvciBhbmFseXNpcwpkZl9hbmFseXNpcyA9IHBkLkRhdGFGcmFtZSgpCmRmX2FuYWx5c2lzWyJNb250aCJdID0gZGZfd2VpZ2h0WyJNb250aCJdCmRmX2FuYWx5c2lzWyJUb3RhbCBXZWlnaHQgKEtHKSJdID0gZGZfd2VpZ2h0WyJHcmFuZCBUb3RhbCBXZWlnaHQiXQpkZl9hbmFseXNpc1siVG90YWwgUXVhbnRpdHkgKFBDUykiXSA9IGRmX3F0eVsiR3JhbmQgVG90YWwgUENTIl0KCiMgQ2FsY3VsYXRlIEF2ZXJhZ2UgV2VpZ2h0IHBlciBQaWVjZSAoVGhlIGtleSBtZXRyaWMgZm9yIG1hbmFnZW1lbnQpCmRmX2FuYWx5c2lzWyJBdmcgV2VpZ2h0L1BpZWNlIChLRykiXSA9IChkZl9hbmFseXNpc1siVG90YWwgV2VpZ2h0IChLRykiXSAvIGRmX2FuYWx5c2lzWyJUb3RhbCBRdWFudGl0eSAoUENTKSJdKS5yb3VuZCgyKQoKIyBBbmFseXplIHRoZSBNaXggJSBvZiBMaWdodCB2cyBIZWF2eSBQcm9maWxlcwpkZl9hbmFseXNpc1siTGlnaHQgUHJvZmlsZXMgKDAtMWtnKSAlIl0gPSAoKGRmX3F0eVsiMC0xIFBDUyJdIC8gZGZfcXR5WyJHcmFuZCBUb3RhbCBQQ1MiXSkgKiAxMDApLnJvdW5kKDEpCmRmX2FuYWx5c2lzWyJIZWF2eSBQcm9maWxlcyAoNGtnKykgJSJdID0gKChkZl9xdHlbIjQrIFBDUyJdIC8gZGZfcXR5WyJHcmFuZCBUb3RhbCBQQ1MiXSkgKiAxMDApLnJvdW5kKDEpCgojIEFkZCBjb21tZW50cyBiYXNlZCBvbiB0aHJlc2hvbGRzCmRlZiBhc3Nlc3Nfc3RhdHVzKHJvdyk6CiAgICBpZiByb3dbIkF2ZyBXZWlnaHQvUGllY2UgKEtHKSJdIDwgMi44OgogICAgICAgIHJldHVybiAiQ1JJVElDQUw6IExvdyBXZWlnaHQgTWl4IgogICAgZWxpZiByb3dbIkF2ZyBXZWlnaHQvUGllY2UgKEtHKSJdID4gMy41OgogICAgICAgIHJldHVybiAiR29vZDogSGVhdnkgTWl4IgogICAgZWxzZToKICAgICAgICByZXR1cm4gIkF2ZXJhZ2UiCgpkZl9hbmFseXNpc1siU3RhdHVzIl0gPSBkZl9hbmFseXNpcy5hcHBseShhc3Nlc3Nfc3RhdHVzLCBheGlzPTEpCgojIDQuIEVYUE9SVCBUTyBFWENFTApmaWxlX25hbWUgPSAiQWx1bWV4X1Byb2R1Y3Rpb25fQW5hbHlzaXMueGxzeCIKCnRyeToKICAgIHdpdGggcGQuRXhjZWxXcml0ZXIoZmlsZV9uYW1lLCBlbmdpbmU9J29wZW5weXhsJykgYXMgd3JpdGVyOgogICAgICAgIGRmX3dlaWdodC50b19leGNlbCh3cml0ZXIsIHNoZWV0X25hbWU9J1JhdyBEYXRhIC0gV2VpZ2h0IChLRyknLCBpbmRleD1GYWxzZSkKICAgICAgICBkZl9xdHkudG9fZXhjZWwod3JpdGVyLCBzaGVldF9uYW1lPSdSYXcgRGF0YSAtIFF1YW50aXR5IChQQ1MpJywgaW5kZXg9RmFsc2UpCiAgICAgICAgZGZfYW5hbHlzaXMudG9fZXhjZWwod3JpdGVyLCBzaGVldF9uYW1lPSdNYW5hZ2VtZW50IEFuYWx5c2lzJywgaW5kZXg9RmFsc2UpCiAgICAKICAgIHByaW50KGYiU3VjY2VzcyEgJ3tmaWxlX25hbWV9JyBoYXMgYmVlbiBjcmVhdGVkLiIpCiAgICBwcmludCgiVGhpcyBmaWxlIGNvbnRhaW5zIHRocmVlIHNoZWV0czoiKQogICAgcHJpbnQoIjEuIFJhdyBEYXRhIC0gV2VpZ2h0IChLRykiKQogICAgcHJpbnQoIjIuIFJhdyBEYXRhIC0gUXVhbnRpdHkgKFBDUykiKQogICAgcHJpbnQoIjMuIE1hbmFnZW1lbnQgQW5hbHlzaXMgKGluY2x1ZGVzIENhbGN1bGF0ZWQgQXZnIFdlaWdodCkiKQoKZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgcHJpbnQoZiJBbiBlcnJvciBvY2N1cnJlZDoge2V9Iik=