File size: 3,706 Bytes
d9e7bdd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
"""
وحدة تحليل السوق والأسعار التاريخية
"""
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)) |