الفلك

كيفية تحديد صدفة الذروة من مجموعات بيانات التاريخ والوقت

كيفية تحديد صدفة الذروة من مجموعات بيانات التاريخ والوقت

لدي مجموعتان أو أكثر من التواريخ والأوقات التي أهتم بها في موقع Zenith في مكاني وما إذا كانت متزامنة. حتى الآن أقوم بمقارنة أزواج منهم على نافذتين من طراز Stellarium مع الشبكة السمتية ولكنها شاقة. هل يمكن لأي شخص أن يخبرني بطريقة أسهل. أتوقع أنني أستطيع أن أفعل ذلك في التفوق بمزيد من المعرفة.


ما يقولهJohnHoltz صحيح. إذا كنت بحاجة إلى صيغة كتاب طبخ لعام 2020: يبدأ الاعتدال الربيعي العام عند 100.1167 درجة زاوية ساعة غرينتش (GHA). كل ثانية بعد ذلك تكون أكبر بمقدار 0.0041780744757 درجة. زاوية الساعة الفلكية (SHA) الخاصة بك هي خط الطول الغربي مطروحًا منها GHA للاعتدال الربيعي. إذا كنت من مستخدمي برنامج Excel ، فمن المحتمل أنك تعرف كيفية تحويل D-M-S إلى درجات عشرية ، والتعامل مع الحساب المعياري. إذا كنت مهتمًا فقط بمقارنة الأوقات ، فإن SHA للسمت الخاص بك يتكرر كل 86164.0935534009 ثانية ، لذلك ، إذا كان الفرق في الوقت هو عدد صحيح مضاعف لذلك (زائد / ناقص بعض التفاوتات) ، فإن السمت متطابقة.

عمل جدول بيانات: ابدأ بعمود من جميع التواريخ / الأوقات التي تريد مقارنتها. (قد تجد أنه من الأسهل أن يكون لديك أعمدة منفصلة للتاريخ / الوقت ، إذا كانت هذه هي الطريقة التي يتم بها تقديم بياناتك.) قم بعمل عمود من الفروق الزمنية. تتمثل إحدى طرق القيام بذلك في حساب الوقت المنقضي بالثواني لكل تاريخ / وقت منذ بداية عام 2017. قم بعمل عمود آخر لحساب فرق الوقت تعديل 86164. (ستكون صيغة Excel "= MOD ([رقم الخلية] ، 86164) "، حيث سيكون رقم الخلية للخلية المجاورة في عمود فرق التوقيت) ثم قم بفرز جدول البيانات بأكمله في هذا العمود. (يعد "الترتيب" أحد الخيارات في القائمة المنسدلة "البيانات"). لقد انتهيت في هذه المرحلة. سيتم تجميع الأوقات التي لها نفس السمت في صفوف متجاورة.


من الناحية الفنية ، موقع الذروة ثابت: 90 درجة ارتفاع ، سمت غير محدد. :-) أفترض أنك تريده من حيث ميل الإحداثيات والصعود الأيمن بدلاً من الارتفاع والسمت. الانحراف والصعود الأيمن هما نظام الإحداثيات المستخدم لتحديد موقع الأجسام في السماء. إنها متشابهة من حيث المفهوم مع خطوط الطول والعرض. الفرق هو أن أحدهما "مغلق" في السماء والآخر "مغلق" على الأرض.

  • انحدار الذروة هو نفس خط عرض الراصد. إذا كان موقعك هو نفسه ، فإن الانحراف هو نفسه. (إذا كان خط العرض مختلفًا ، فإن إحداثيات ذروة مختلفة.)
  • يمكن حساب الصعود الصحيح للسمت باستخدام الصيغ الخاصة بالوقت الفلكي المحلي (LST أو LMST لمتوسط ​​الوقت الفلكي المحلي.) انظر ما بعد التوقيت الفلكي المحلي.

أهداف البرنامج التعليمي:

في هذا البرنامج التعليمي ، سوف نستكشف ونحلل بيانات السلاسل الزمنية في R. يعد تحليل السلاسل الزمنية تقنية قوية يمكن استخدامها لفهم الأنماط الزمنية المختلفة في بياناتنا عن طريق تحليل البيانات إلى اتجاهات دورية مختلفة. يمكن أيضًا استخدام تحليل السلاسل الزمنية للتنبؤ بكيفية تغير مستويات المتغير في المستقبل ، مع مراعاة ما حدث في الماضي. من خلال إكمال ورشة العمل هذه ، ستتعلم ليس فقط كيفية القيام ببعض تحليل السلاسل الزمنية البسيطة ، ولكن أيضًا كيفية إعداد البيانات الزمنية بحيث يفهم R أن نقاط البيانات تحدث في تسلسل مميز ، وهو فن في حد ذاته.

يمكن تنزيل جميع الموارد لهذا البرنامج التعليمي ، بما في ذلك البيانات وبعض أوراق الغش المفيدة من مستودع github هذا. قبل أن نبدأ ، قم باستنساخ وتنزيل الريبو كملف مضغوط ، ثم قم بفك ضغطه.

بدلاً من ذلك ، يمكنك تقسيم المستودع إلى حساب GitHub الخاص بك ثم إضافته كمشروع RStudio جديد عن طريق نسخ رابط HTTPS / SSH. لمزيد من التفاصيل حول كيفية التسجيل على GitHub وتنزيل git ومزامنة RStudio و GitHub واستخدام التحكم في الإصدار ، يرجى مراجعة البرنامج التعليمي git والتحكم في الإصدار.

أولاً ، افتح RStudio ، وأنشئ نصًا جديدًا بالنقر فوق ملف / ملف جديد / R Script ونحن جميعًا على استعداد للتعرف على تحليل السلاسل الزمنية!

اضبط دليل العمل الخاص بك على موقع المجلد الذي قمت بتنزيله للتو من مستودع GitHub. استخدم الكود أدناه كدليل ، ولكن تذكر أن موقع المجلد على جهاز الكمبيوتر الخاص بك سيكون مختلفًا:

بعد ذلك ، قم بتحميل (library ()) الحزم اللازمة لهذا البرنامج التعليمي. إذا كانت هذه هي المرة الأولى التي تستخدم فيها هذه الحزم ، فستحتاج إلى تثبيتها أولاً (على سبيل المثال عن طريق تشغيل install.packages ("ggplot2) وبعد ذلك يمكنك تحميلها باستخدام مكتبة (). ما عليك سوى تثبيت الحزم مرة واحدة ، ولكن عليك تحميلها في كل جلسة RStudio جديدة.

بعد ذلك ، قم بتحميل ملفات .csv التي سنستخدمها في ورشة العمل هذه - هذه هي عينات بيانات السلاسل الزمنية التي سنقوم بتحليلها ، ولكن يمكنك أيضًا تجربة استخدام بياناتك الخاصة.


إعلان حقول التاريخ / الوقت

يمكن تحديد حقول نوع بيانات التاريخ والوقت إما في ملفات فعلية باستخدام DDS ، أو كحقول داخلية في RPG (باستخدام مواصفات D). الطابع الزمني يمكن أيضًا تحديد الحقول التي تتضمن التاريخ والوقت (بما في ذلك الثواني الدقيقة).

يكتب رمز نوع البيانات
تاريخ د
زمن تي
الطابع الزمني ض

عند تحديد حقول التاريخ في D-specs ، يمكن استخدام الكلمة الأساسية INZ لتعيين قيمة أولية لحقل التاريخ / الوقت ، كما في:

لاحظ أنه قد يتم تحديد قيمة * SYS لتهيئة تاريخ أو وقت أو طابع زمني لتاريخ / وقت النظام الحالي.

يمكن تحديد حقول التاريخ والوقت في عدد من التنسيقات المختلفة. يحدد التنسيق كيفية عرض حقل التاريخ والوقت وطباعته. استخدم ال DATFMT كلمة أساسية في D-specs أو H-specs لتحديد تنسيق حقل التاريخ. تنسيقات التاريخ المتاحة هي (لاحظ الأحرف الفاصلة):

DATFMT صيغة عينة
* MDY mm / dd / yy 12/31/99
* DMY يوم / شهر / سنة 31/12/99
* YMD س س / ش ش / ي ي 99/12/31
* يوليو س س / ي ي ي 99/365
* ISO ccyy-mm-dd 1999-12-31
*الولايات المتحدة الأمريكية mm / dd / ccyy 12/31/1999
*يورو dd.mm.ccyy 31.12.1999
* JIS ccyy-mm-dd 1999-12-31

راجع وثائق IBM & # 8217s على الإنترنت RPG للحصول على وصف كامل لتنسيقات التاريخ ، بالإضافة إلى الحد الأدنى والحد الأقصى للقيم لكل تنسيق.

تُستخدم الكلمة الأساسية TIMFMT في مواصفات D أو مواصفات H لتحديد تنسيق حقل الوقت.

تيمفمت صيغة عينة
* HMS hh: mm: ss 13:59:00
* ISO hh.mm.ss 13.59.00
*الولايات المتحدة الأمريكية hh: mm am
hh: mm pm
1:59 مساءً
*يورو hh.mm.ss 13.59.00
* JIS hh: mm: ss 13:59:00

يتوفر تنسيق واحد فقط لحقول الطابع الزمني:

المواضع الستة الأخيرة لحقل الطابع الزمني هي ميكروثانية (غالبًا ما تستخدم حقول الطابع الزمني لإنشاء مفاتيح فريدة لملف).

عند الإعلان عن حقول التاريخ أو الوقت في برنامج RPG ، إذا لم يتم تحديد DATFMT أو TIMFMT في مواصفات D ، فستتحول التنسيقات افتراضيًا إلى DATFMT و TIMFMT المحدد في المواصفات H. إذا لم يتم تعريف هذه الكلمات الأساسية في المواصفات H ، فسيتم تعيين التنسيق افتراضيًا على * ISO.


2. هندسة الشبكة وخط أنابيب الاستدلال

يظهر خط أنابيب البرنامج الخاص بنا وبنية RNN المختارة في الشكل 1. قد تتحلل RNN إلى عنصرين ، المشفر و أ فك (شو وآخرون 2014). تقبل RNN خطوات الوقت كمدخلات. تمثل خطوات التشفير الأولى الفاصل الزمني للخلفية ، قبل ظهور مؤقت. يتم البحث عن حدث إشارة محتملة ضمن خطوات مفكك التشفير التالية. لكل تحليل من أمثلة التحليلات الموضحة أدناه ، يتم اختيار القيمة وفقًا للخصائص المتوقعة للإشارات (على سبيل المثال ، الجداول الزمنية المادية) ، مع مراعاة بنية البيانات المتاحة. تتلقى كل خطوة مجموعة من المدخلات (الخاصة بالتحليل).

شكل 1. الرسوم التوضيحية التخطيطية لخط أنابيب البرنامج ، وبنية شبكة RNN. (أ) يتكون خط الأنابيب من مرحلتين رئيسيتين ، التدريب / المعايرة و الإستنباط. يشمل التدريب مرحلة ما قبل المعالجة لتوليد محاكاة الخلفية. تُستخدم هذه البيانات لتدريب RNN وحساب إحصائيات الاختبار (TS). يتم تعيين الأخير إلى -values ​​كجزء من معايرة مرحلة. يتضمن الاستدلال تقييم TS- والقيم ، باستخدام RNN المدربة والمعايرة المحسوبة مسبقًا. (ب) قد تتحلل الشبكة إلى ملف المشفر (خطوات الوقت) و أ فك (خطوات الوقت) ، حيث يمثل مفكك الشفرة فاصل البحث. يتكون RNN من LSTMs (المستطيلات الخضراء). يتكون كل LSTM من طبقتين من 128 و 64 وحدة مخفية. تشكل بيانات الإدخال (الدوائر الزرقاء) أرقامًا لكل خطوة زمنية (سداسيات زرقاء). وبالمثل ، يشار إلى مخرجات LSTM على أنها (دوائر حمراء). ل إكتشاف عيب خلقي، مدخلات ومخرجات وحدة فك التشفير ، س و ب، مباشرة لحساب TS للاكتشاف. ل تصنيف، يتم إدخال مخرجات مفكك الشفرة في اللوغاريتمات (وكلاء لاحتمالات التصنيف) ، والتي تُستخدم لاشتقاق TS المقابل. مجموعة المعلمات المحددة المستخدمة لكل تحليل من أمثلة التحليلات (ηو و) في اللوحة السفلية. يتم وصف الاختيارات المحددة بالتفصيل في النص.

في نهجنا الاسمي ، نستخدم تقنية الكشف عن الشذوذ. نحن نستخدم تسلسل بيانات الإدخال ، والتي تتوافق للتدريب مع استجابة الجهاز في غياب أحداث الإشارة. يتم استخدام RNN للتنبؤ بالخلفية المتوقعة للتجربة. ثم يتم الكشف عن العابرين كاختلافات كبيرة عن هذه التنبؤات. نحدد إحصائية اختبار فريدة (TS) ، والتي تلخص الفرق (يعني خطأ تربيعيا) ما بين س و ب لكل تحليل.

بالإضافة إلى ذلك ، نحن نستخدم نهج تصنيف تكميلي (موضّح لمثال تحليل-الصورة). في هذه الحالة ، يتم استخدام RNN لتصنيف الأحداث العابرة مباشرة ، بدلاً من التنبؤ بالخلفية. في المقابل ، يتم تدريب الشبكة باستخدام أمثلة معنونة لكل من بيانات الخلفية والإشارة المفترضة. يعتمد اكتشاف TS على النسبة بين الخلفية واحتمالية تصنيف الإشارة (Cranmer et al. 2015 Goodfellow et al. 2016).

يقترن خرج TS الخاص بـ RNN بخط أنابيب يُستخدم لاشتقاق أهمية الاكتشاف. اسميًا ، لا نفترض نموذجًا إحصائيًا محددًا للخلفية أو للإشارة. لذلك ، فإننا نولد عمليات إدراك متعددة لعينة الخلفية المدخلة ، والتي نستمد منها التوزيعات التراكمية لـ TS. تُستخدم الأخيرة لمعايرة العلاقة بين قيم TS وقيم فرضية اختبار الخلفية فقط.

نقوم بتدريب RNNs باستخدام آدم التحسين مع أ معدل التعليم من 0.01. لكل تحليل من تحليلات اكتشاف الشذوذ الثلاثة ، لدينا خلفية متتابعة من الخطوات. بالنسبة لمثال التصنيف الفردي ، يتم استخدام أحداث إشارة إضافية أيضًا. يتم تطبيع المدخلات بشكل مستقل ، بحيث يتم تعيين النطاق الاسمي لقيمها لعينة التدريب في الخلفية على الفاصل الزمني ، [0 ، 1]. يتم تقسيم البيانات بشكل عشوائي إلى دفعات من 64 تسلسلًا للتدريب ، حيث يتم تخصيص 20٪ من الأحداث للتحقق من صحتها. من أجل التخفيف من الإفراط في التركيب ، نطبق 30٪ أوقع تنظيم التدريب (الإخفاء العشوائي للوحدات). تستغرق عملية التدريب على التحليلات المختلفة عدة دقائق على كمبيوتر محمول - وحدة المعالجة المركزية ، مع الاستدلال الفرعي المقابل (أقل بكثير من متطلبات تطبيقات الوقت الفعلي ذات الصلة).

قارنا عدة تكوينات للمعلمات الفائقة لـ RNN (معلمات التكوين الداخلي للشبكة). على سبيل المثال ، تضمن ذلك مضاعفة عدد طبقات LSTM ، وزيادة حجم الدفعة ، وتغيير معدل التعلم ، وما إلى ذلك. بالإضافة إلى ذلك ، قمنا بإجراء فحوصات منهجية تعتمد على التحليل ، كما هو موضح أدناه. لم نعثر على اختلاف كبير في النتائج. ترجع القوة في الأداء إلى اختيارنا لتصميم RNN بسيط ، وإلى حقيقة أننا نعتمد على معايرة تعتمد على البيانات لإحصاءات الاختبار بعد التدريب.

في ما يلي ، نوضح إطار عملنا باستخدام أمثلة ملموسة. نقصر المناقشة على السمات العامة للطريقة في كل حالة ، مثل المقاييس الزمنية ذات الصلة ، ومدخلات RNN ، وأهمية الاكتشاف. للحصول على وصف شامل لمجموعات البيانات ، وتعريف إحصائيات الاختبار ، ونمذجة المصدر ، والاختبارات المنهجية ، انظر الملحق.


قبل أن تتمكن من الاستعلام عن التاريخ / الوقت (أو زمني) البيانات ، عليك أن تعرف شيئًا عن كيفية تخزين قيم التاريخ / الوقت. يدعم SQL Server نوعين من بيانات التاريخ / الوقت: datetime و smalldatetime. الفرق بين الاثنين هو مقدار التخزين المستخدم. يستخدم Datetime 8 بايت من التخزين ، بينما يستخدم smalldatetime 4 بايت فقط. لهذا السبب ، يمكن أن يمثل datetime قيم التاريخ / الوقت ضمن نطاق أوسع وبدقة أكثر من smalldatetime. تم تلخيص هذه الاختلافات في الجدول أدناه.

31 ديسمبر 9999 23:59: 59.997 (0.003 ثانية حتى منتصف الليل)

إلى أقرب 3.33 مللي ثانية

6 يونيو 2079 23:59 (دقيقة واحدة حتى منتصف الليل)

يمثل كل من datetime و smalldatetime التاريخ والوقت كقيمة تساوي & # 39 s عدد الأيام المتعلقة بالتاريخ الأساسي. في SQL Server ، يكون هذا التاريخ الأساسي هو منتصف ليل 1 يناير 1900. كما ترى في الجدول ، يمكن لنوع smalldatetime تمثيل التواريخ من هذا التاريخ الأساسي فقط. في المقابل ، يمكن أن يمثل نوع التاريخ والوقت أيضًا التواريخ التي تسبق 1 يناير 1900. للقيام بذلك ، يقوم بتخزين هذه القيم كأرقام سالبة.

لتصور كيفية تخزين قيم التاريخ / الوقت ، يمكنك التفكير فيها على أنها تتكون من جزأين. يمثل جزء العدد الصحيح عدد الأيام الكاملة منذ 1 كانون الثاني (يناير) 1900. ويمثل الجزء الكسري جزء اليوم الذي مر منذ منتصف الليل & # 39. على سبيل المثال ، يتم تخزين قيمة التاريخ / الوقت التي تمثل ظهر يوم 4 يناير 1900 على أنها 3.5. في هذه الحالة ، يمثل الرقم 3 ثلاثة أيام كاملة منذ تاريخ الأساس ويمثل 0.5 نصف يوم بين منتصف الليل والظهر. لمشاهدة هذا ، أرسل الاستعلام التالي:

ملاحظة: تعمل وظيفة CAST بشكل صريح على تغيير نوع البيانات لقيمة كما هو محدد. لذلك في هذا البيان ، يغير CAST الداخلي السلسلة الحرفية & # 391900-01-04 12: 00 & # 39 إلى قيمة من نوع البيانات datetime. بعد ذلك ، يقوم CAST الخارجي بتغيير قيمة التاريخ والوقت إلى قيمة عائمة لنوع البيانات. النتيجة النهائية هي تمثيل النقطة العائمة لقيمة التاريخ والوقت التي تمثل ظهر يوم 4 يناير 1900.

حتى الان جيدة جدا. لكن المشاكل التي تظهر في الاستعلام عن بيانات التاريخ / الوقت ناتجة عن الارتباك حول حقيقتين أساسيتين ليستا واضحتين للغاية. أولاً ، أنواع بيانات التاريخ / الوقت هي أرقام تقريبية وليست أرقامًا دقيقة. ثانيًا ، يمكن لأنواع بيانات التاريخ / الوقت & # 39t تخزين تاريخ بدون وقت أو وقت بدون تاريخ.

قيم التاريخ / الوقت هي أرقام تقريبية

Datetime و smalldatetime يشبهان أنواع بيانات الفاصلة العائمة ، عائم وحقيقي ، من حيث أنهما & # 39 هما أرقام تقريبية. هذا يعني أن القيمة المستردة من SQL Server قد تكون مختلفة عن القيمة التي تم تخزينها في الأصل. على سبيل المثال ، إذا قمت بتخزين التعبير 10 / 3.0 في عمود عائم من نوع البيانات ، فستسترجع قيمة & # 39ll 3.3333330000000001. على الرغم من أن هذا تمثيل معقول لعشرة أثلاث ، إلا أنه ليس دقيقًا لأنه تم تقريبه إلى ما بعد الرقم السادس. في الواقع ، إذا جمعت ثلاث قيم من هذا القبيل معًا ، فستحصل على 9.9999990000000007 ، وليس 10. بالطبع ، يفهم معظم المبرمجين هذا على أنه خطأ تقريب. وهي مشكلة مستمرة لجميع أجهزة الكمبيوتر الرقمية ، وليس فقط تلك التي تستخدم SQL Server. ومع ذلك ، يجب أن تكون على دراية به أثناء ترميز شروط البحث.

في المقابل ، عند العمل مع البيانات الرقمية الدقيقة ، فإن القيمة المستردة من SQL Server هي بالضبط القيمة التي تم تخزينها في الأصل. على سبيل المثال ، إذا قمت بتخزين 10 / 3.0 في عمود من نوع البيانات int ، فسيتم تخزينها كـ 3 واستردادها كـ 3. في هذه الحالة ، يلقي SQL Server ضمنيًا نتيجة التعبير كقيمة حقيقية ، 3.333333. بعد ذلك ، يلقي SQL Server ضمنيًا 3.333333 كعدد صحيح لأنه يتم تخزينه في عمود من النوع int. على الرغم من أن هذا لا يزال خطأ التقريب ، إلا أنه يحدث قبل تخزين القيمة ، وليس نتيجة للقيود المادية لتخزين الكمبيوتر. بمعنى آخر ، تم تقديم الخطأ باستخدام نوع بيانات خاطئ ، وليس عن طريق القيد المتأصل لنوع البيانات نفسه. نظرًا لأن النظام يُرجع دائمًا نفس القيمة المخزنة ، يكون نوع البيانات دقيقًا.

الآن ، لمعرفة كيف يؤثر ذلك على قيم التاريخ / الوقت ، ضع في اعتبارك قيمة التاريخ والوقت الساعة 8:00 صباحًا في 4 يناير 1900. كما رأيت أعلاه ، يتم تخزين ظهر هذا اليوم على أنه 3.5 أو في منتصف اليوم الرابع. في المقابل ، الساعة 8:00 صباحًا هي ثلث الطريق خلال اليوم ، لذلك سيكون تمثيلها تقريبيًا. لترى هذا بنفسك ، أرسل الاستعلام التالي:

ستحصل على النتيجة التالية:

ولكن إذا قمت بتقديم هذا الاستعلام:

ستحصل على النتائج التالية:

كما ترى ، هذه القيم الثلاث كلها متقاربة تمامًا. في الواقع ، إنهم قريبون بما يكفي ليتم اعتبارهم الساعة 8:00 صباحًا لمعظم التطبيقات. ومع ذلك ، في شرط بحث يستند إلى قيمة واحدة ، مثل:

أنت & # 39d تطابق فقط تلك الصفوف حيث تتطابق القيمة المخزنة تمامًا مع 3.3333333333333335. & # 39 سترى كيفية الالتفاف على هذا لاحقًا في هذه المقالة.

التواريخ بدون أوقات وأوقات بدون تواريخ

لا يوفر SQL Server أنواع بيانات لتخزين التاريخ أو الوقت فقط. لذلك إذا قمت بتخزين قيمة تاريخ / وقت بدون وقت محدد ، يتم تعيين الجزء الكسري من القيمة على صفر. يمثل هذا منتصف الليل على أنه 00:00:00. وبالمثل ، إذا قمت بتخزين قيمة تاريخ / وقت بدون تاريخ صريح ، يتم تعيين جزء العدد الصحيح من القيمة على صفر. يمثل هذا التاريخ 1 يناير 1900. لمشاهدة هذا ، أرسل الاستعلام التالي:

والتي تُرجع النتيجة التالية:

يعتمد ما إذا كان بإمكانك تجاهل التاريخ أو مكون الوقت عند الاستعلام عن عمود التاريخ / الوقت على كيفية تصميم العمود واستخدامه.

تأثير تصميم قاعدة البيانات على الاستعلام

لا يستخدم مصممو قواعد البيانات & # 39t دائمًا أعمدة التاريخ / الوقت بشكل مناسب. في الوقت الذي يتم فيه تصميم قاعدة البيانات ، يجب تحديد كل عمود تاريخ / وقت لمعرفة ما إذا كان سيتم تخزين التواريخ والأوقات أو التواريخ فقط أو الأوقات فقط. يمكن للمصمم ، باستخدام الإعدادات الافتراضية والقيود والمشغلات ، فرض هذه القواعد لمنع التخزين العرضي للبيانات التي تكون إما غير ضرورية أو غير قابلة للتطبيق.

على سبيل المثال ، من غير المحتمل أن يحتاج العمود في نظام الحسابات الدائنة لتاريخ استلام الفاتورة إلى الوقت. في هذه الحالة ، يجب أن يخطط المصمم لاستخدام العمود للتواريخ فقط وعدم تخزين مكون الوقت مطلقًا. يمكن تعيين مشغل لمنع تخزين الجزء غير الصحيح لقيمة التاريخ عند التحديث أو الإدراج.

بشكل عام ، ومع ذلك ، يضطر المبرمج للعمل مع قاعدة بيانات موجودة. في هذه الحالة ، يجب عليك فحص الطريقة التي يتم بها استخدام قيم التاريخ / الوقت قبل أن تفترض أن المصمم قام بعمله بشكل صحيح.

إن أبسط طريقة للقيام بذلك هي إرسال استعلام باستخدام شرط بحث مشابه لما يلي ، حيث يكون DT هو عمود التاريخ / الوقت المعني:

ملاحظة: تعرض الدالة FLOOR أكبر عدد صحيح أقل من القيمة المحددة أو مساويًا لها. في هذا التعبير ، يتم تطبيق FLOOR على تمثيل النقطة العائمة لعمود DT. هذا ببساطة يزيل الجزء الكسري من الرقم.

يُرجع التعبير الأول جزء التاريخ (عدد صحيح) من القيمة ، بينما يُرجع التعبير الثاني جزء الوقت. إذا لم يُرجع هذا الاستعلام أي صفوف ، فمن المحتمل أن العمود قد تم استخدامه باستمرار لتخزين كل من التواريخ والأوقات ، نظرًا لأن التاريخ ليس صفرًا مطلقًا والوقت ليس صفرًا أبدًا.

ضع في اعتبارك ، بالطبع ، أنه إذا قام الاستعلام أعلاه بإرجاع صفوف ، فإنه لا يعني بالضرورة أنه تم استخدام العمود بشكل غير متسق. إذا كان الوقت هو منتصف الليل بالضبط أو كان التاريخ هو 1 يناير 1900 ، فسيظهر في مجموعة النتائج. في هذه الحالة ، يمكنك اختبار الأعمدة التي تحتوي على بيانات الوقت فقط أو بيانات التاريخ فقط باستخدام أي من هذين الاستعلامين:

هنا ، TOnly و DOnly هما أعمدة التاريخ / الوقت التي تتوقع أن تحتوي على مرات أو تواريخ فقط ، على التوالي. إذا أرجع الاستعلام صفوفًا ، فإن هذه الصفوف لا تحتوي على نوع البيانات التي توقعتها.

يعد تحديد نوع البيانات المخزنة في أعمدة التاريخ / الوقت لكل جدول أمرًا مهمًا للاستعلام الذكي. إذا تم استخدام الأعمدة باستمرار ، فستكون مهمتك أسهل. ومع ذلك ، حتى إذا تم استخدام الأعمدة بشكل غير متسق ، فأنت & # 39ll تعرف على الأقل مخاطر الاستعلام التي يجب الانتباه إليها أثناء ترميز استعلاماتك.

اعتبارات الأداء في الاستعلام

يكتمل البحث المستند إلى عمود مفهرس بشكل أسرع من البحث المستند إلى عمود غير مفهرس. لذلك يجب فهرسة أعمدة التاريخ / الوقت التي يتم البحث عنها بشكل متكرر. ومع ذلك ، يجب أن تدرك أنه إذا استخدمت وظيفة في حالة البحث ، فيمكن استخدام الفهرس بالطريقة نفسها ، مما يؤدي إلى إبطاء الأداء. بالنسبة لعمليات البحث التي يتم تنفيذها آلاف المرات يوميًا في قاعدة بيانات الإنتاج ، فقد يتسبب ذلك في حدوث مشكلات كبيرة في الأداء. لهذا السبب ، يجب تجنب استخدام الوظائف في ظروف البحث هذه كلما أمكن ذلك. كما سترى في الأمثلة التالية ، ينتج عن هذا أحيانًا حلول أقل مرونة من تلك التي تستخدم الوظائف.

بالإضافة إلى ذلك ، ضع في اعتبارك أن بعض التطبيقات تتطلب البحث عن أجزاء من عمود التاريخ / الوقت. يمكن أن يكون الجزء عبارة عن تاريخ فقط أو وقت فقط أو حتى جزء أصغر ، مثل سنة أو ساعة. في هذه الحالة ، قد يؤدي تقسيم عمود تاريخ / وقت واحد إلى عمودين منفصلين أو أكثر إلى تحسين الأداء ، ثم فهرسة تلك التي يتم البحث عنها كثيرًا.

كيف تبحث عن طريق التاريخ

مرارا. عليك & # 39 أن تبحث في عمود التاريخ / الوقت عن تاريخ محدد ، بغض النظر عن الوقت. إذا تم استخدام البيانات الموجودة في العمود بشكل متسق مع تعيين مكون الوقت على صفر ، فلن تكون هذه مشكلة. ما عليك سوى البحث عن التاريخ الذي تبحث عنه.

لكن ضع في اعتبارك الجدول التالي ، المسمى DateSample:

كما ترى ، يتم استخدام عمود DateVal بشكل غير متسق. تشير القيمتان الثالثة والرابعة إلى أن العمود ربما كان مخصصًا لتخزين التواريخ فقط ، لكن القيمتين الأوليين تشيران إلى أن هذا لم يتم فرضه.

نتيجة لذلك ، إذا استخدمت الاستعلام التالي لاسترداد الصفوف بتاريخ 28 فبراير 2002:

تتضمن مجموعة النتائج الصف 4 فقط بدلاً من كلا الصفين 2 و 4. هذا & # 39 ثانية لأن التاريخ الحرفي يتم إلقاؤه ضمنيًا كقيمة التاريخ والوقت والتي ، في هذه الحالة ، تحتوي على مكون وقت صفري. نظرًا لأن هذا لا يتطابق تمامًا مع القيمة الموجودة في الصف 2 ، لم يتم إرجاع هذا الصف & # 39t.

كيف يمكنك الالتفاف حول عنصر الوقت؟ إذا تم تشغيل الاستعلام بشكل متكرر ، فيجب أن يستند البحث إلى مجموعة من القيم ، كما في:

تذكر أن جملة BETWEEN تسترد القيم التي تساوي الحدين العلوي والسفلي ، لذا يمكنك & # 39t ترميز الحد الأعلى كـ & # 392002-02-29 & # 39. إذا قمت بذلك ، فستقوم & # 39ll باسترداد الصف 3. بطريقة غير صحيحة. هناك طريقة أخرى للحصول على نفس النتيجة وهي استخدام عوامل المقارنة:

إذا تم تشغيل الاستعلام بشكل غير متكرر (لإنتاج تقرير مرة واحدة فقط في الشهر ، على سبيل المثال) ، يمكنك ترميز تعبير في جملة WHERE الذي يزيل قيمة التاريخ / الوقت لمكونه الكسري. على سبيل المثال ، هذا الاستعلام:

إرجاع كلا الصفين 2 و 4. بالإضافة إلى ذلك ، هناك العديد من التعبيرات الأخرى التي يمكنك استخدامها لتحقيق نفس النتيجة (كتابي SQL ، Murach & # 39s SQL for SQL Server ، يغطي اثنين من التعبيرات الأخرى).

بالمناسبة ، إذا كنت ترغب في استرداد الصفوف مع اليوم 28 فبراير ، بغض النظر عن السنة ، يمكنك ترميز الاستعلام التالي:

الذي يسترد الصفوف 1 و 2 و 4. نظرًا لعدم وجود طريقة & # 39t لإنجاز ذلك دون استخدام دالة واحدة أو أكثر ، ومع ذلك ، يجب تشغيل هذا الاستعلام & # 39t بشكل متكرر على قاعدة بيانات الإنتاج. إذا كنت بحاجة إلى إجراء هذا النوع من البحث على استعلام يتم تشغيله كثيرًا ، فيجب عليك تغيير تصميم قاعدة البيانات ، إن أمكن. بعد ذلك ، يمكنك إنشاء عمود مفهرس منفصل لتخزين جزء قيمة التاريخ / الوقت التي تريد البحث فيها.

كيف تبحث عن طريق الوقت

البحث في عمود لوقت محدد ، بغض النظر عن التاريخ ، يشبه البحث عن قيم التاريخ فقط. إذا كان العمود يخزن باستمرار جزء الوقت فقط ، فسيتم تبسيط البحث في البيانات. ومع ذلك ، على عكس قيم التاريخ ، يتم تمثيل قيمة الوقت برقم تقريبي. لذلك حتى عندما يمكن تجاهل جزء التاريخ ، لا يزال يتعين عليك التفكير في أخطاء التقريب.

لتوضيح عمليات البحث للوقت فقط ، ضع في اعتبارك الجدول التالي ، المسمى TimeSample:

هنا ، يتم استخدام عمود TimeVal بشكل غير متسق ، وأحيانًا يخزن الوقت فقط وأحيانًا يخزن التاريخ والوقت. لذلك إذا كنت تستخدم الاستعلام التالي لاسترداد الصفوف في الساعة 10:00 صباحًا:

تحصل فقط على الصف 4. لا يتم استرداد الصف 1 & # 39t لأن التاريخ الحرفي يتم تصويره ضمنيًا كقيمة تاريخ ووقت مع مكون تاريخ صفري ، والذي لا يتطابق مع مكون التاريخ في الصف 1. بالإضافة إلى ذلك ، لا يتم استرداد الصف 3 & # 39t لأن هذه القيمة قريبة من 10:00 صباحًا ولكنها لا تساويها.

لتجاهل مكوِّن التاريخ لعمود ما ، يمكنك ترميز تعبير يزيل قيمة التاريخ / الوقت لمكوِّن العدد الصحيح ، مثل:

التي تُرجع الصفين 1 و 4. لسوء الحظ ، لا توجد طريقة لإنجاز ذلك بدون استخدام وظيفة واحدة أو أكثر. لهذا السبب ، من الأهمية بمكان تخزين بيانات الوقت فقط بشكل صحيح في المقام الأول. إذا كنت بحاجة إلى إجراء هذا النوع من البحث كثيرًا ، فيجب عليك ، إن أمكن ، تغيير تصميم قاعدة البيانات.

إن البحث عن قيم الوقت المتساوية تقريبًا هو ببساطة مسألة ترميز نطاق من القيم. إذا تم تخزين بيانات الوقت فقط بشكل متسق بدون مكون التاريخ ، فيمكنك استخدام استعلام مثل هذا:

يُرجع كلا الاستعلامين الصفين 3 و 4. بالطبع ، عليك أن تقرر القيم الحرفية التي يجب استخدامها لنطاق التقريب الذي تفضله.

إذا تم تخزين بيانات الوقت فقط بشكل غير متسق ، فأنت بحاجة إلى استيعاب كل من مكونات التاريخ غير الصفرية ونطاق من قيم الوقت. على سبيل المثال ، يمكنك استخدام استعلام مثل هذا:

التي تُرجع الصفوف 1 و 3 و 4. مرة أخرى ، على الرغم من أنه لا توجد طريقة لتحقيق ذلك بدون استخدام دالة. لذلك قد تحتاج إلى تغيير تصميم قاعدة البيانات ، إذا أمكنك ذلك.

هناك طريقة أخرى لتقريب قيم الوقت وهي استخدام نوع بيانات smalldatetime بدلاً من نوع بيانات التاريخ والوقت في الجدول الأصلي. نظرًا لأن smalldatetime تقوم دائمًا بتقريب جزء الوقت إلى أقرب دقيقة ، يتم تخزين الأوقات الموجودة في النطاق من 09: 59: 29.999 إلى 10: 00: 29.998 على أنها 10:00. إذا كان التقريب لأقرب دقيقة كاملة كافيًا لتطبيقك ، فإن استخدام smalldatetime سيمنع الحاجة إلى البحث عن مجموعة من القيم.


حساب متوسط ​​القيمة اليومية من مجموعة البيانات الكبيرة مع التاريخ / الأوقات بتنسيق قياسي R؟

لدي إطار بيانات من حوالي 10 ملايين صف تمتد حوالي 570 يومًا. بعد استخدام وقت التعطل لتحويل التواريخ والأوقات ، تبدو البيانات كما يلي:

أود حساب متوسط ​​القيمة في كل يوم (كما في أيام السنة ، وليس أيام الأسبوع) ثم رسمها. على سبيل المثال. احصل على جميع الصفوف التي تحتوي على اليوم "2004-01-01" ، واحسب متوسط ​​السعر ، ثم افعل الشيء نفسه لـ "2004-01-2" وما إلى ذلك.

وبالمثل ، سأكون مهتمًا بإيجاد متوسط ​​القيمة الشهرية ، أو السعر بالساعة ، لكنني أتخيل أنه يمكنني حلها بمجرد معرفة كيفية الحصول على متوسط ​​السعر اليومي.

أكبر صعوبة لدي هنا هي استخراج يوم من السنة من متغير التاريخ تلقائيًا. كيف يمكنني التنقل خلال 365 يومًا بالكامل وحساب متوسط ​​القيمة لكل يوم ، وتخزينه في قائمة؟

تمكنت من العثور على متوسط ​​القيمة ليوم الأسبوع باستخدام وظيفة أيام الأسبوع () ، لكن لم أجد أي شيء مشابه لذلك.


تحويل إلى كائنات الجدول

بدلاً من توصيل الأوراق باستخدام الصيغ ، سنستخدم Power Pivot لإنشاء علاقات بين الجداول. بهذه الطريقة ، يمكنك تجاوز الصيغ تمامًا. ومع ذلك ، يتعرف Power Pivot فقط على كائنات الجدول. لذا ، فإن خطوتك الأولى هي تحويل كل مجموعة بيانات إلى جدول وتسميتها على النحو التالي:

  1. انقر في أي مكان داخل مجموعة البيانات.
  2. انقر فوق علامة التبويب إدراج ، ثم انقر فوق جدول في مجموعة الجداول.
  3. في مربع الحوار الناتج ، حدد أو ألغِ تحديد (حسب الضرورة) خيار يحتوي الجدول على رؤوس. تحتوي جميع مجموعات البيانات النموذجية على رؤوس.
  4. انقر فوق موافق.
  5. انقر فوق علامة التبويب "التصميم السياقي".
  6. انقر داخل عنصر تحكم اسم الجدول على يسار الشريط وأدخل اسمًا ذا معنى للجدول واضغط على Enter. تسمية الجدول ، رغم أنه ليس ضروريًا ، سيكون مفيدًا لاحقًا.

قم بإنشاء ثلاثة كائنات جدول: العملاء وتفاصيل الطلب والأوامر. عندما تنتهي ، تكون جاهزًا للمتابعة.


كيفية تقسيم التاريخ والوقت من خلية إلى خليتين منفصلتين في إكسيل؟

على سبيل المثال ، لديك قائمة بيانات مختلطة مع التاريخ والوقت ، وتريد تقسيم كل منهما إلى خليتين ، واحدة هي التاريخ والأخرى هي الوقت كما هو موضح أدناه. الآن أعطيك طريقتين سريعتين لحلها في Excel.

تقسيم التاريخ والوقت بالصيغ

إذا كنت تستخدم وظائف النسخ واللصق لنسخ كل تاريخ ووقت واحدًا تلو الآخر ، فهذا يعد مضيعة للوقت. فيما يلي بعض الصيغ التي يمكن أن تساعدك في تقسيم التاريخ والوقت بسرعة.

1. حدد نطاق العمود الذي تريد وضع نتائج التاريخ فيه فقط ، وانقر بزر الماوس الأيمن لتحديده تنسيق الخلايا من قائمة السياق. انظر لقطة الشاشة:

2. في تنسيق الخلايا الحوار ، ضمن علامة التبويب رقم ، انقر فوق "موافق" تاريخ من عند فئة قسم الذهاب إلى يكتب قائمة لتحديد نوع التاريخ الذي تحتاجه. انظر لقطة الشاشة:

3. انقر فوق نعم لإغلاق الحوار. بعد ذلك ، انتقل إلى تحديد نطاق عمود آخر تريد تحديد الوقت فقط وتنسيقه كنوع الوقت الذي تحتاجه. انظر لقطة الشاشة:

4. انقر فوق نعم لإغلاق تنسيق الخلايا الحوار. ثم في الخلية الأولى من تاريخ العمود (باستثناء الرأس) ، اكتب هذه الصيغة = INT (A2) (A2 هي الخلية التي تريد التقسيم بها) ، ثم اسحب مقبض التعبئة إلى النطاق المطلوب لتطبيق هذه الصيغة. انظر لقطات الشاشة:

5. انتقل إلى الخلية الأولى من عمود الوقت (باستثناء الرأس) واكتب هذه الصيغة = A2-C2 (A2 هي الخلية التي تقسمها ، و C2 هي خلية التاريخ) ، واسحب مقبض التعبئة فوق النطاق الذي تريده. انظر لقطات الشاشة:

ثم تم تقسيم التاريخ والوقت إلى خليتين.

تقسيم التاريخ والوقت بواسطة Kutools for Excel (3 خطوات بنقرات)

الطريقة الأسهل والأكثر راحة لتقسيم التاريخ والوقت هي تطبيق تقسيم الخلايا فائدة كوتولس ل إكسيل، بدون شك!

بعد تثبيت Kutools for Excel ، يرجى القيام بما يلي: (تنزيل مجاني Kutools for Excel الآن!)

1. حدد خلايا التاريخ والوقت وانقر كوتولس & GT دمج وتقسيم أمبير & GT تقسيم الخلايا. انظر لقطة الشاشة:

2. في تقسيم الخلايا الحوار ، تحقق انقسام إلى أعمدة و مساحة والخيارات. انظر لقطة الشاشة:

3. انقر فوق نعم وحدد خلية لإخراج القيم المنفصلة وانقر نعم. انظر لقطة الشاشة:

الآن تم تقسيم الخلايا إلى تاريخ ووقت منفصلين.

نصيحة. باستخدام الأداة المساعدة Split Cells ، يمكنك تقسيم خلية مفردة إلى صفوف أو أعمدة بواسطة المحدد أو العرض الثابت. إذا كنت ترغب في الحصول على نسخة تجريبية مجانية من وظيفة Split Cells ، فالرجاء الانتقال إلى تجربة Kutools for Excel مجانًا أولاً ، ثم الانتقال لتطبيق العملية وفقًا للخطوات المذكورة أعلاه.

تقسيم الخلايا

قم بإزالة الوقت من DateTime

في Excel ، لإزالة 12:11:31 من 1/21/2017 12:11:31 وجعله بالضبط 1/21/2017 ، قد تضطر إلى قضاء بعض الوقت لإنشاء صيغة للتعامل مع هذه المهمة. ومع ذلك ، فإن الأداة المساعدة لإزالة الوقت من التاريخ هي كوتولس ل إكسيل يمكنك إزالة الطابع الزمني بشكل دائم من تنسيق التاريخ والوقت في Excel. انقر لتنزيل نسخة تجريبية مجانية مدتها 30 يومًا.

تقسيم التاريخ والوقت باستخدام "استخراج النص"

مع الأداة الملائمة - استخراج النص من كوتولس ل إكسيل، يمكنك أيضًا استخراج التاريخ والوقت بسرعة من عمود واحد إلى عمودين.

بعد تثبيت Kutools for Excel ، يرجى القيام بما يلي: (تنزيل مجاني Kutools for Excel الآن!)

1. أولاً ، تحتاج إلى تنسيق الخلايا كتاريخ ووقت. حدد نطاق عمود واحد وانقر بزر الماوس الأيمن للتحديد تنسيق الخلايا من قائمة السياق. ثم في تنسيق الخلايا الحوار ، انقر فوق تاريخ تحت فئات قسم وحدد نوع تاريخ واحد. انظر لقطات الشاشة:

2. انقر فوق نعم. وانتقل إلى نطاق عمود آخر وقم بتنسيقه حسب الوقت. انظر لقطة الشاشة:

3. حدد خلايا التاريخ والوقت (باستثناء الرأس) وانقر كوتولس & GT نص & GT استخراج النص. انظر لقطة الشاشة:

4. ثم في Extract Text dialog, type * and a space into the Text box, then click Add to add it to the Extract list. See screenshots:

5. Click Ok and select a cell to put the dates. See screenshot:

6. Click OK. You can see the date data has been extracted.

7. Select the date and time data again and click Kutools > Text > Extract Text. And remove all the criteria of Extract list, and type a space and * into the Text box and add it to the Extract list. See screenshots:

8. Click Ok to select a cell for putting out the result and click OK to close the dialog. Now the data has been split into columns.

Note: You can change the space as other separator as your need.

Tip: With Extract Text can quickly extract data by substring. Actually, in Kutools for Excel, you can extract emails, split first, middle and last name, convert string to date and so on.If you want to have a free trial of the Extract Text function,please go to free download Kutools for Excel first, and then go to apply the operation according above steps.

Split Date and Time

Split date and time with Text to Column

In Excel, you also can use Text to Column to split the Date and Time column to columns.

1. Select the data range and click Data > Text to Columns, then in the popping dialog, check Delimited option. See screenshot:

2. Then click Next to open the Convert Text to Column Wizard Step 2 of 3 dialog, check Space (you also can select other delimiters as your need) in the Delimiters section. See screenshot:

3. Click Finish to close dialog, then the data range is split into columns. Select the Date range and right click to select Format Cells from context menu. See screenshot:

4. Then in the Format Cells dialog, click Date من عند فئات section, and select the date type you need under يكتب section. See screenshot:

5. Click OK. Now the result is shown as below

Note: You’d better copy the original data before using Text to Column because it will break the original data.


How to determine zenith coincidence from date time data sets - Astronomy

Sinogram and Imaging Formats

شكل 1
  1. From an annihilation event, an line of response (LOR) is generated as noted in the example
  2. In our example there a 3 LORs: red, green, and blue
  3. When a coincident event is recorded the LOR defines the path to which it occurred, however, there is one minor problem. The specific location of the event within a three dimensional space cannot be directly located, but a line can be drawn indicating the path in which the annihilation occurred
  4. Therefore, in actuality, each recorded LOR presence two photon events that have occurred in a straight line. This LOR is placed into a a series of voxels, and stored as a sinogram
    1. When two events at opposite direction are detected an LOR is created
    2. They must occur as two separate events that strike at opposite ends, within the timing window, and fall within the PHA window
    3. If the two blocks pick up the set of event within the same ring, at opposite ends then this is called a direct-plain event
    4. However, if the blocks are in adjacent rings then it is a cross-plain event
    5. Memory location generates a prompt sinogram أو prompt event
    6. A prompt sinogram can either a true, random, or scatter
    1. As previously stated, the specific location of the event cannot be determined
    2. What can be defined is distance from the center (r) and the angle from the the center Φ
      1. Hence the LOR's location is displayed as (r,Φ) this does have similarities to (x,y) axis on a 2D graph
      2. LOR's are projected on to 2-D histograms which appears in a 3-D volume (voxel)
      1. Color is used to help you associate where the event occurred and were its location would be on a sinogram
      2. In the y-axis,Φ, the angle of the event occurs between 0 to 179 degrees
      3. In the x-axis, r, defines the distance from the center
      1. The red LOR is left of center at about 45 degrees
      2. The green LOR almost goes through the center and has about a 5 degree angle
      3. The blue LOR is right of center and has about a 140 degree angle
      4. The actual location of the annihilation event cannot be determined even thought the diagram indicates its exact location
      Figure 2 (click to enlarge image)

      1. أ Blank Scan in PET(More on Blank Scan) is a QC procedure that evaluates all angles of coincidences and displays a series of sinograms as seen above. Click on the image for a larger view. Do you see anything wrong?
      2. The QC display of the blank scan shows a series all possible angles of coincidence (direct and cross-plain) via criss cross sets of lines (sinograms). If there is a PMT or block failure, then a lack of LORs (activity) are noted.
      3. In QC - Blank scan is the "uniformity flood" of a PET scanner
      4. أ Normalization scan tunes all the detectors and generates uniformity correction map. See Normalization Scan for more information

      الشكل 3

      1. Red LORs is the smaller object with less activity
      2. Gray LORs is the larger object with greater activity
      3. The image on the right displays the sinograms is the sinogram data from one bed position

      3Figure 4
      1. Left image shows the extreme angles of coincidence that are available in the axial FOV
      2. In the center of the FOV is a thick gray line that connect blocks 9 and 21
      3. The image on the left shows that sinogram relationship where the detectors within these two blocks communicate and display and equal distribtuion of sinograms
      4. Each detector within these blocks detects the coincident event, from direct and cross plane events, generating LORs and are stored/displayed in a sinogram matrix
      5. This concept is not an easy one .. we display this in 2D space but coincidences occur in 3D as they interact within the axial FOV (z - axis)
      Figure 5
      Figure 6
      Figure 7
      1. So lets follow the an annihilation event that is recorded as a coincidence event
      2. Each PMTs from opposite ends pick up the luminescence create by the incoming photon
      3. Low level discriminator will accept these pulses if they are height enough (based on light scintillation generated from the energy photon)
      4. The pulses proceeds to a timing signal a time i
      5. The coincidence timing circuit will accept the two events if it fall within the appropriate time (5 - 12 nsec)
      6. PHA evaluates the energy pulse, much like gamma camera and if the pulse falls with the energy window it is accepted
      7. LOR is generated and a digital signature then becomes a prompt sinogram
      8. A prompt sinogram is either a true event or it could be random or scatter event
      9. The delayed sinogram has a longer timing window (Process is identified below). These longer recorded events are then subtract as random events from the prompt sinogram leaving true events
      10. Other corrections include dead time and attenuation
      11. The image above shows the correction for random events
      12. The CRT display will generate sinograms within its 3D format ( Does SPECT display the same concept?)
      Figure 8
      1. A single SPECT projection shows information at that angle across all slices in a 3-D volume (image)
      2. PET's sinogram slice presences data acquired from a slice across all angles within a given 3-D volume (image)
      1. Static
        1. Displays activity located in tissue at a specific time
        2. Temporal resolution is not a factor
        3. Each acquired frame of data represents a set of sinograms during a given acquisition
        4. Consider how FDG locks into issue
        5. Estimation of radiopharmaceutical uptake can be quantified (SUV)
        6. Spatial resolution is usually very important
        7. Example - Brain scan which is usually acquired in one bed position, however some literature indicates that it can be done in two. Why might a two bed acquisition be a problem in a brain scan?
        1. Identifies the change of activity, within the tissue, over time
        2. Temporal resolution becomes an important factor
        3. There is a series of frames, of which, each one has a set of sinograms, followed by the next set, etc. Identifying a dynamic process
        4. Consider 15 O distribution in a brain scan, it has a very short half-life, and requires analysis of oxygen distribution over time.
        1. Is another aspect of dynamic acquisition
        2. Like routine nuclear cardiology it looks at cardiac contraction
        3. The best format for gating is in a list mode. It allows the user to select a set of specific R to R waves, which should improves temporal resolution
        Figure 9
        1. The scanner takes multiple axial acquisitions which is fused together to form a whole body projection
        2. In this example, an axial FOV is 30 centimeter
        3. When enough counts are acquired the table moves the patient to the next bed position
        4. Technically, if patient is 68 inches in length it would require 6 bed positions to scan the entire body (2.54 x 68 = 173cm/30cm = 5.8 bed positions
        5. Important - The FOV losses sensitivity as in collects data in the peripheral directions of the FOV , therefore each image within the acquisition overlaps, between 3 to 5 cm
        6. However, in reality a true whole body scan (head to toe) is completed by (1) Starting at then top of the head and scanning to mid-thigh (2) then the patient is rotated 180 degrees and scanned from the foot to the pelvis
        7. Each image takes between 2.5 to 5 minutes (LYSO vs BGO) to acquire, pending the amount of activity administered and the type crystal
        8. Consider the concept of whole body: eyes to thighs or head to toe. Why do we have two types of whole body procedures? What might the criteria for (1) eyes to thighs and (2) head to toe acquisition?
        Figure 10
        1. 2-D Mode
          1. When thinking about how collimation might help improve PET acquisition it can be done in what is referred to as 2-D Mode. Some imaging systems are equipped with tungsten "septa" located between each block from a axial projection (z-axis) of the gantry (see above)
          2. Physically these (annular) septa are 7 - 10 cm in length and 1 - 5 mm in thickness
          3. They can be fixed, but usually retract into and out of the rings as needed
          4. Key role is to prevent excessive cross over of events that prevents scatter
          5. In the diagram above, A, shows an event that occurs in a direct plane, where C represents a cross plane event
          6. In B no event is detected because the annular absorbs the photon's energy
          7. Adjacent rings also have coincident circuitry in order to account for a cross plane event. Usually this feature can cross over around 5 to 6 rings
          8. In 2D imaging this type of acquisition improves system resolution and reduces system sensitivity by decreasing scatter
          9. Scatter from prompt events may be as much as 30 - 40% and when using annular scatter may be reduced to a 10-15% margin
          1. Here annular do not play their "extended" role, therefore photons can be recorded from any angle which increases sensitivity, but at a price of increased scatter
          2. One may argue that excessive scatter will reduce image contrast and effect resolution
          3. 3D is usually done with brain imaging and with systems that have Time of Flight (TOF)
          4. Interesting point - I have read several articles that favor 3D for better lesion detection, "This study showed that, given a patient's size and scanner type, the fully 3D acquisition mode allowed better or equivalent detection performance than the 2D mode for an injected dose corresponding to the peak 3D NEC rate (noise equivalent count)." - ref
          Figure 11
          1. This gives us yet another concept of what the axial view can acquire based on its "dimensional" format with depends on the amount of rings composing the FOV
          2. In the strictest sense, Image A - shows that only direct coincidence where the same ring at the opposite block acquires the coincidence
          3. Image B - Is in 2D format and can communicate between 7 difference rings
          4. Image is 3D there are no annular it appears that all angles of coincidence are available - increasing counts
          5. Consider the display above and ask the following questions:
            1. Which acquisition mode give you better resolution?
            2. . increase in counts?
            3. . reduces scatter or random?
            4. The answer does not appear to be as an easy one
            Figure 12
            Figure 13

              Normalization
                What causes non-uniformity? The cause is a result of several factors (much like a regular gamma camera): crystal structure, electronic configuration, PMT/HV. Think about it, there are some 10k elements attached to several hundred PMTs which operate "independently." For this reason non-uniformity within an axial acquisition occurs and must be corrected! To generated a correction map, a PET scanner, must acquire a normalization scan


              Computing a date from the past (or future) with SAS

              Social media has brought anniversary dates to the forefront. Every day, my view of Google Photos or Facebook shows me a collection of photos from exactly some number of years ago to remind me of how good things were back then. These apps are performing the simplest of date-based math to trick me. They think, "We have a collection of photos from this month/day from some previous year -- let's collect those together and then prey on Chris' nostalgia instincts."

              Sometimes it works and I share them with friends. Weren't my kids so cute back then? It's true, they were -- but I don't pine for those days. I live in the present and I look towards the future -- as all citizens of the world should.

              Looking back at dates in SAS

              But you know who likes to look at the past? Managers (and probably a few of my colleagues. ). Many of my SAS jobs are in support of date-based reports. They answer questions such as, "what happened in the past 30 days?" or "how much activity in the past 6 months?" When I have SAS date values, going back 30 days is simple. The SAS date for "30 days ago" is simply today()-30. (Because, remember, a SAS date is simply an integer representing the count of days since Jan 1, 1960.)

              "6 months ago" is a little more nuanced. I could fudge it by subtracting 183 or 184 from the value of today(), but that's not precise enough for the analytical wonks that I work with. Fortunately, SAS provides a function that can compute any date -- given a starting date -- using just about any criteria you can imagine. The function is called INTNX (link to INTNX function doc). Here's an example that computes the date from 6 months ago:

              If I wanted to go 6 years into the past, I would simply change that first argument to 'year'. 6 days? Change it to 'day'. Here's the (very long) list of built-in intervals that INTNX supports.

              Using INTNX in SAS macro language

              The form I showed above works with DATA step, but I usually capture this value in a macro variable so that I can reference it across different procedures without having to recompute it. To express this in the SAS macro language, I need to wrap those two function calls (for the TODAY function and the INTNX function) in %SYSFUNC -- the macro function that breaks out of macro processing to invoke built-in SAS functions. I also need to remove the quotes around the interval and alignment values -- the SAS macro processor will treat these as string literals and would not approve of the quotes.

              Notice the result is a number -- which is exactly what I need for date value comparisons. But what if I wanted a formatted version of the date? The %SYSFUNC macro function has an optional second argument that accepts a SAS format name, allowing me to create a value for display.

              Adapting INTNX for SAS datetime values

              This computed date works perfectly when my data sets contain SAS date values that I want to filter. For example, I can limit the records to those from the past 6 months with code similar to this:

              But I realized that some of my data sets use datetime values, not date values. A SAS datetime value is simply the number of seconds since midnight on Jan 1, 1960. I've seen programs that adapt the code above by converting the computed cutoff date from a date value to a datetime value -- it's simple to do with math:

              The %SYSEVALF function tells the SAS macro processor to evaluate the mathematical expression within the parenthesis. Multiplying the SAS date value by the number of seconds in a day (60 seconds * 60 minutes-per-hour * 24 hours-per-day) results in the equivalent datetime value. (Where have I seen such crazy code? Certainly not in my own SAS programs -- no sir. Never happened.)

              But this is SAS -- there is an easier way (again) with the INTNX function. INTNX can process datetime values too, and supports special datetime intervals. In this case, all I need to do is swap in the 'dtmonth' interval for 'month', and the DATETIME() function for TODAY():

              I can then use the much more readable version of my comparison code:

              Learning more about date and datetime intervals

              First, an acknowledgment. I recently had the privilege of presenting at the Quebec user groups with SAS-world superstar Marje Fecht. Marje is an excellent instructor, and she delivered a popular talk about working with SAS date values -- a topic that trips up many new SAS users. It's useful for me -- someone who has used SAS for a long time -- to see a basic topic presented to me as if I were brand new. Her talk reminded me of some good practices that I was able to bring home and apply in my own production SAS jobs. I know that Marje was invited to present this talk at SAS Global Forum 2018, and I hope that I did not steal too much of her thunder. She has a good origin story about the 01JAN1960 date decision. You should attend the conference and see her talk in person.

              The INTNX (and its sister function for computing date differences, INTCK) are powerful tools for manipulating date and datetime values. Other programming languages offer complex code libraries to accomplish what these two functions can do as part of Base SAS. They are tricky to learn at first, but once you get the hang of them they can really simplify your SAS programs that deal with time-based data.

              While these functions are available in Base SAS, they are maintained by the developers who look after SAS/ETS (econometrics and time series). You'll find comprehensive usage information in the SAS/ETS documentation. The functions are incredibly important, as they are often used to calculate dates and times that are used in legal and financial applications. Those industries take their dates/times very seriously. For a fun example of how deep it can get, see this thread on the SAS Support Communities.

              About Author

              +Chris Hemedinger is the manager of SAS Online Communities. Since 1993, Chris has worked for SAS as an author, a software developer, an R&D manager and a consultant. Inexplicably, Chris is still coasting on the limited fame he earned as an author of SAS For Dummies. He also hosts the SAS Tech Talk webcasts each year from SAS Global Forum, connecting viewers with smart people from SAS R&D and the impressive work that they do.

              4 Comments

              I always love learning something new about the INTNX and INTCK functions. Thanks for sharing the tips and resources. I didn't know that these functions are maintained by the ETS developers.

              As for nostalgia, I'm finding there are many memories to reminisce on a daily basis. gone are the days when taking a photograph was a cautious exercise of composition and settings to minimize film wastage. -)

              Thanks for sharing tidbits from our time in Montreal and Quebec City, Chris. The additional spins on my topic, as well as the further references are both great additions to what I am preparing for SAS Global Forum 2018.


              شاهد الفيديو: تسجيل التاريخ والوقت بشكل تلقائي عند تعبئة خلية معينة (شهر اكتوبر 2021).