entropy25 commited on
Commit
d9f1c12
·
verified ·
1 Parent(s): dc6daaa

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +48 -0
app.py CHANGED
@@ -27,18 +27,66 @@ def load_data(file):
27
  def get_material_stats(df):
28
  stats = {}
29
  total = df['weight_kg'].sum()
 
 
 
30
  for material in df['material_type'].unique():
31
  data = df[df['material_type'] == material]
 
 
32
  daily_avg = data.groupby('date')['weight_kg'].sum().mean()
33
 
34
  stats[material] = {
35
  'total': data['weight_kg'].sum(),
36
  'percentage': (data['weight_kg'].sum() / total) * 100,
37
  'daily_avg': daily_avg,
 
38
  'records': len(data)
39
  }
 
 
 
 
 
 
 
 
 
40
  return stats
41
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
  def create_trend_chart(df, time_period='daily', material_filter=None):
43
  if material_filter:
44
  df = df[df['material_type'].isin(material_filter)]
 
27
  def get_material_stats(df):
28
  stats = {}
29
  total = df['weight_kg'].sum()
30
+
31
+ total_work_days = df['date'].nunique()
32
+
33
  for material in df['material_type'].unique():
34
  data = df[df['material_type'] == material]
35
+
36
+ work_days = data['date'].nunique()
37
  daily_avg = data.groupby('date')['weight_kg'].sum().mean()
38
 
39
  stats[material] = {
40
  'total': data['weight_kg'].sum(),
41
  'percentage': (data['weight_kg'].sum() / total) * 100,
42
  'daily_avg': daily_avg,
43
+ 'work_days': work_days,
44
  'records': len(data)
45
  }
46
+
47
+ stats['_total_'] = {
48
+ 'total': total,
49
+ 'percentage': 100.0,
50
+ 'daily_avg': df.groupby('date')['weight_kg'].sum().mean(),
51
+ 'work_days': total_work_days,
52
+ 'records': len(df)
53
+ }
54
+
55
  return stats
56
 
57
+ def display_material_overview(stats):
58
+ st.subheader("📋 Material Overview")
59
+
60
+
61
+ materials = [k for k in stats.keys() if k != '_total_']
62
+
63
+
64
+ cols = st.columns(4)
65
+
66
+
67
+ for i, material in enumerate(materials):
68
+ if i < 3:
69
+ info = stats[material]
70
+ with cols[i]:
71
+ st.metric(
72
+ label=material.replace('_', ' ').title(),
73
+ value=f"{info['total']:,.0f} kg",
74
+ delta=f"{info['percentage']:.1f}% of total"
75
+ )
76
+ st.caption(f"Daily avg: {info['daily_avg']:,.0f} kg")
77
+ st.caption(f"Work days: {info['work_days']} days")
78
+
79
+
80
+ total_info = stats['_total_']
81
+ with cols[3]:
82
+ st.metric(
83
+ label="Total Production",
84
+ value=f"{total_info['total']:,.0f} kg",
85
+ delta="100% of total"
86
+ )
87
+ st.caption(f"Daily avg: {total_info['daily_avg']:,.0f} kg")
88
+ st.caption(f"Work days: {total_info['work_days']} days")
89
+
90
  def create_trend_chart(df, time_period='daily', material_filter=None):
91
  if material_filter:
92
  df = df[df['material_type'].isin(material_filter)]