|
""" |
|
وحدة تحليل السوق والأسعار التاريخية |
|
""" |
|
import streamlit as st |
|
import pandas as pd |
|
import numpy as np |
|
import plotly.express as px |
|
from datetime import datetime, timedelta |
|
|
|
class MarketAnalysis: |
|
def __init__(self): |
|
if 'market_data' not in st.session_state: |
|
self._initialize_market_data() |
|
|
|
def _initialize_market_data(self): |
|
st.session_state.market_data = { |
|
'price_indices': {}, |
|
'historical_prices': {}, |
|
'market_trends': {} |
|
} |
|
|
|
def render(self): |
|
st.header("تحليل السوق والأسعار") |
|
|
|
tabs = st.tabs([ |
|
"مؤشرات الأسعار", |
|
"التحليل التاريخي", |
|
"اتجاهات السوق" |
|
]) |
|
|
|
with tabs[0]: |
|
self._render_price_indices() |
|
|
|
with tabs[1]: |
|
self._render_historical_analysis() |
|
|
|
with tabs[2]: |
|
self._render_market_trends() |
|
|
|
def _render_price_indices(self): |
|
st.subheader("مؤشرات الأسعار الرئيسية") |
|
|
|
|
|
materials = { |
|
'الحديد': {'current': 3200, 'change': 5.2}, |
|
'الأسمنت': {'current': 400, 'change': -2.1}, |
|
'الخرسانة': {'current': 250, 'change': 1.5}, |
|
'الأسفلت': {'current': 2800, 'change': 3.8} |
|
} |
|
|
|
cols = st.columns(4) |
|
for i, (material, data) in enumerate(materials.items()): |
|
with cols[i]: |
|
st.metric( |
|
material, |
|
f"{data['current']} ريال", |
|
f"{data['change']}%" |
|
) |
|
|
|
def _render_historical_analysis(self): |
|
st.subheader("تحليل الأسعار التاريخي") |
|
|
|
|
|
dates = pd.date_range(start='2023-01-01', end='2023-12-31', freq='M') |
|
materials = ['الحديد', 'الأسمنت', 'الخرسانة', 'الأسفلت'] |
|
|
|
data = [] |
|
for material in materials: |
|
base_price = 1000 if material == 'الحديد' else 500 |
|
for date in dates: |
|
data.append({ |
|
'التاريخ': date, |
|
'المادة': material, |
|
'السعر': base_price * (1 + 0.1 * np.random.randn()) |
|
}) |
|
|
|
df = pd.DataFrame(data) |
|
|
|
|
|
fig = px.line( |
|
df, |
|
x='التاريخ', |
|
y='السعر', |
|
color='المادة', |
|
title='تطور الأسعار خلال العام' |
|
) |
|
st.plotly_chart(fig) |
|
|
|
def _render_market_trends(self): |
|
st.subheader("اتجاهات السوق والتوقعات") |
|
|
|
|
|
trends = { |
|
'قصير المدى': { |
|
'الحديد': 'صعود', |
|
'الأسمنت': 'هبوط', |
|
'الخرسانة': 'ثبات', |
|
'الأسفلت': 'صعود' |
|
}, |
|
'متوسط المدى': { |
|
'الحديد': 'ثبات', |
|
'الأسمنت': 'صعود', |
|
'الخرسانة': 'صعود', |
|
'الأسفلت': 'ثبات' |
|
}, |
|
'طويل المدى': { |
|
'الحديد': 'صعود', |
|
'الأسمنت': 'صعود', |
|
'الخرسانة': 'صعود', |
|
'الأسفلت': 'صعود' |
|
} |
|
} |
|
|
|
st.dataframe(pd.DataFrame(trends)) |