انتشار Node.JS نسخه 8.1
سرویس های JavaScript
مقدمه ای بر NodeJS 6
فرآیند داده کاوی در Microsoft SQL Server (بخش یک)
مقدمه
بطور کلی داده کاوی به دو قسمت زیر تقسیم میشود:
1- اهداف توصیفی (Descriptive Goal): بدنبال یافتن الگوها و روابط بین دادهها هستیم، بدین ترتیب مدلی برای توصیف بهتر دادهها بدست خواهد آمد.
2- اهداف پیش بینانه (Predictive Goal): بدنبال انجام پیش بینی با استفاده از الگوها و مدلهای فوق هستیم.
همچنین مراحل اجرای یک پروژه داده کاوی شامل مراحل زیر است:
1- تحلیل: مهمترین فعالیت در این فاز، فهم عمیق مسئله و شناخت درست مسئله و شناسائی مفاهیم کلیدی (Key Concept) در مسئله است.
2- طراحی: مهمترین فعالیت این فاز، فرموله کردن مسئله با استفاده از مفاهیم کلیدی است.
3- پیاده سازی/ نگهداری و بهبود
مراحل کاری داده کاوی بر اساس استاندارد CRISP-DM
محصول
مشترک شرکتهای SPSS, Teradata, NCR و دایملر- کرایسلر است و یک فرآیند
استاندارد Cross-Industry برای داده کاوی است که به طور گسترده ای استفاده
میشود. مراحل کاری در این مدل به شش فاز اصلی به شرح زیر تقسیم میشوند:
1. درک پروژه و فهم حوزه کاربرد (Business Understanding):
به طور صریح و آشکار اهداف و نیازمندیها مشخص میشود. ترجمه اهداف و
محدودیت آن در قاعده سازی، تعریف مسئله داده کاوی و مهیا کردن استراتژی
اولیه برای نائل شدن به اهداف در این مرحله تعریف می شود.
2. انتخاب دادهها (Data Understanding):
این مرحله شامل جمع آوری دادهها برای استفاده از تحلیل اکتشافی و مشخص
کردن اطلاعات اولیه برای ارزیابی دادههای با کیفیت و انتخاب دادههای
مفید و مورد نیاز میباشد.
3. آماده سازی دادهها (Data Preparation):
آماده کردن دادههای اولیه خام به دادههای نهایی، این دادها در کلیه
مراحل بعدی استفاده میشود و از این نظر این مرحله تحلیل و تلاش بیشتری را
میطلبد. انتخاب عناصر و شناسههای تحلیل شده را برای کاوش دادهها
اختصاص میدهیم و با تمیز کردن دادههای خام آن را برای ابزارهای مدل سازی
آماده می کنیم.
4. مدل سازی (Modeling):
با انتخاب و به کار بستن تکنیکهای مدل سازی مناسب و روش داده کاوی معین
نتایج مدل سازی را بهینه می کنیم، که در صورت نیاز میتوانیم با برگشت به
عقب تحلیل مدل سازی را بهینهتر نماییم.
5. ارزیابی (Evaluation):
مشخص کردن اینکه آیا مدل انتخابی، ما را به اهدافمان که در اولین مرحله
تعیین کردیم، می رساند. اتخاذ تصمیم راجع به استفاده از نتایج داده کاوی
برای اعتبارسنجی نیز در این مرحله انجام می شود.
6. استقرار (Deployment):
استفاده کردن از مدل ایجاد شده، برای مثال میتواند تولید یک گزارش ساده از
خروجیها را نام برد، و برای یک مثال پیچیده تکمیل کردن پردازش داده کاوی
موازی در سایر حوزهها میباشد، که این الگوها به یک دانش مفید و قابل
استفاده تبدیل میشوند و پس از بهبود آنها، الگوهایی که کارا محسوب می
شوند در یک سیستم اجرایی به کار گرفته خواهند شد.
مراحل کاری داده کاوی در بستر تکنولوژی Microsoft
داده کاوی غالباً به عنوان فرآیند استخراج اطلاعات، الگوها و روندهای موجود در مجموعه ی عظیمی از دادهها یاد می شود. این الگوها و روندها را می توان به عنوان یک مدل کاوشی تعریف نمود. به بیانی دیگر ایجاد یک مدل کاوشی بخشی از فرآیند بزرگتری است که در برگیرنده ی همه مراحل؛ از تعریف مسئله که مدل حل خواهد نمود تا اجرای مدل در محیطهای کاری است. می توان این فرآیند را با استفاده از 6 مرحله اساسی زیر تعریف نمود:
باید در نظر داشت که تهیه یک مدل داده کاوی، فرآیندی چرخشی، پویا و تکرار پذیر می باشد و ممکن است هر یک از این مراحل آن قدر تکرار شود، تا مدل مناسبی تهیه گردد.
- تعریف مسئله (Defining the Problem):
تعریف روشنی از مشکل و مسئله کسب و کار است. این مرحله شامل تجزیه و تحلیل نیازمندیهای کسب وکار، تعریف دامنه مشکل، تعریف معیارهایی که با آن مدلها ارزیابی خواهد شد و تعریف هدف نهایی پروژه ی داده کاوی است.
- آماده سازی دادهها (Preparing Data):
یکپارچه سازی و پالایش داده هایی است که در مرحله ی تعریف مسئله فرآیند معین شده است. SSIS حاوی تمامی ابزارهای ملزوم برای تکمیل این مرحله میباشد.
- بررسی دادهها (Exploring Data):
به منظور تصمیم گیریهای مناسب در هنگام تهیه مدل، می بایست دادهها را درک نمود و پس از آن می توان تصمیم گیری در مورد وجود دادههای مخدوش در مجموعه داده و در نهایت استراتژی مناسب برای رفع این مشکلات اتخاذ نمود. Data Source view Designer موجود در BIDS حاوی ابزارهای جامعی برای بررسی و شناخت دادهها شامل محاسبه ارقام حداقل و حداکثر، محاسبه میانگین و انحراف معیار و بررسی توزیع دادهها می باشد.
- تهیه مدل ها (Building Models):
پیش از تهیه مدل باید، دادهها را به دو دسته ی دادههای آموزشی و اعتبارسنجی (آزمایشی) تقسیم نمود. از دادههای آموزشی برای تهیه مدل و از دادههای اعتبارسنجی برای آزمایش صحت مدل با ایجاد سوالاتی در مورد صحت پیش بینیها استفاده نمود. پس از تعریف ساختار کاوشی، می بایست به پردازش مدل پرداخته شود و ساختارهای خالی با الگوهایی که مدل را توصیف می نمایند، پُر شوند. این مرحله با عنوان آموزش مدل شناخته می شود.
- بررسی و ارزیابی مدلها (Exploring and Validating Models):
این مرحله شامل بررسی مدلهای ایجاد شده به منظور آزمودن کارایی آنهاست. می توان مدلها را با ابزارهای موجود در Designer از جمله نمودار صعود و یا ماتریس دسته بندی بررسی نمود.
- اجرا و بروزرسانی مدلها (Deploying and Updating Models):
این مرحله شامل اجرای مدل هایی است که بهترین کارائی را در یک محیط عملیاتی داشته اند. پس از استقرار مدلهای کاوشی در یک محیط عملیاتی می توان از این مدلها برای پیش بینی هایی بهره گرفت.
مراحل سه گانه موجود در ساخت یک مدل کاوش
- ایجاد ساختار کاوشی (Mining Structures): تعریف یک ساختار کاوشی شامل، تعیین تعداد ستونهای ورودی، تعداد ستونهای قابل پیش بینی و الگوریتم وابسته به آن میباشد. ساختار کاوشی یک ساختار داده ای است که محدوده ی داده هایی را که از روی آنها مدلهای کاوش ساخته می شود را تعریف می نماید.
- آموزش مدل (Model Training): یک مدل کاوشی، الگوریتمهای کاوش را به داده هایی که ساختار کاوش ارائه می نماید، اعمال می کند. به بیان دیگر استفاده و کاربرد هر ستون و الگوریتمی که برای ساخت مدل استفاده می شود را تعریف می کند، پس شامل داده منبع اصلی نیست، بلکه شامل اطلاعاتی است که توسط الگوریتم کشف می شود. به آموزش مدل، پردازش مدل نیز گفته میشود و زمانی که یک مدل پردازش می شود داده هایی که توسط ساختار کاوش تعریف شده اند، از طریق الگوریتمهای داده کاوی انتخابی منتقل می شوند، الگوریتم؛ الگوها و روندها را جستجو می کند و در ادامه این اطلاعات در مدل ذخیره می شوند. از این رو پس از یادگیری و آموزش مدل، الگوهای بدست آمده در مدل کاوش ذخیره می شوند.
- پیش بینی مدل (Prediction): غالباً مهمترین مرحله و هدف نهایی در پروژههای داده کاوی است. پیش بینی به کشف اطلاعات ناشناخته با استفاده از الگوهای یافته شده از سوابق دادهها اشاره دارد. در پیش بینی به یک مدل کاوشی آموزش دیده و یک مجموعه داده ی جدید نیاز است. و در طول پیش بینی موتور داده کاوی، قواعد بدست آمده در مرحله یادگیری را در مورد مجموعه داده ی جدید بکار می برد و نتایج پیش بینی را به هر Case ورودی تخصیص می دهد.
- برنامههای وب نیازی به نصب بر روی تک تک کلاینتها و همچنین به روز رسانی مداوم کلاینتها را ندارند. به این صورت مدیریت چند صد کاربر در یک سازمان سادهتر از قبل خواهد بود. دیگر نگران این نخواهید بود که آیا فلان کاربر آخرین به روز رسانیها را نصب کرده (دریافت کرده) یا خیر.
- امکان دسترسی از راه دور، برای مثال از طریق اینترنت یا VPN یا RRAS و خطوط دایال آپ (برای مثال دسترسی سادهتر دفاتر مختلف یک سازمان به اطلاعات یکدیگر یا امکان داشتن کارکنانی که از راه دور برای شما کار میکنند).
- امکان ذخیره سازی دادهها در سازمانی دیگر (هاست کردن این برنامهها در محیطهای ابری(!) (cloud computing) هزینههای تهیه و نگهداری سخت افزارهای یک سازمان را نیز کاهش میدهند).
- کاهش هزینههای سازمان با توجه به اینکه اگر از سرورهای قدرتمندی استفاده شود؛ از یک برنامهی وب چندین هزار یا چند میلیون کاربر میتوانند استفاده کنند بدون اینکه نگران تامین هزینه مجوز استفاده از برنامهی تهیه شده به ازای هر کاربر باشید.
- امکان دسترسی به برنامهی وب تهیه شده در انواع و اقسام سیستم عاملهایی که تنها مجهز به یک مرورگر وب هستند (نتیجه نهایی قابل استفاده مستقل از سکو است). برای مثال این روزها به کمک Adobe AIR ، Silverlight و یا کتابخانههای اسکریپتی مانند jQuery و ASP.Net Ajax، بسیاری از تواناییهای نمایشی برنامههای دسکتاپ را در وب نیز میتوان شاهد بود با این خصوصیت که نتیجهی نهایی مستقل از سکو است.
- در این حالت کلاینتها نیازی به داشتن سخت افزارهای قوی ندارند (که در کاهش هزینههای یک سازمان مؤثر است). همچنین این برنامهها مشکلات ناسازگاری با سخت افزارها و نگارشهای مختلف سیستم عاملها را نیز ندارند. بنابراین یک سازمان میتواند بودجهی خود را صرف تهیهی سرورهای بهتری کند.
- کلاینتها با توجه به محدود بودن دسترسیهای امنیتی اعمالی توسط مرورگرها، امنیت بیشتری خواهند داشت. به همین ترتیب کاربران برای استفاده از این برنامهها نیز نیازی به دسترسی بالا در یک سازمان برای اجرای مرورگر خود نخواهند داشت (کمتر جملهی "من دسترسی ادمین میخواهم" را خواهید شنید).
- امکان مونیتور کردن سادهتر فعالیت کاربران در برنامه.
- در صورت محافظت از سرور، کدهای شما از خطر دزدیده شدن مصون(تر) هستند.
- مدیریت سادهتر و مجتمع اطلاعات تولیدی با توجه به اینکه همه چیز باید بر روی سرور ذخیره شود. به این صورت مدیریت نقل مکان کاربران از یک کامپیوتر به کامپیوتری دیگر نیز سادهتر می شود؛ زیرا چیزی را قرار نیست جابجا کنند (نه اطلاعات و نه برنامه را). اگر یکی از کامپیوترهای کلاینتها قابل استفاده نباشد، به سادگی میتواند از کامپیوتری دیگر در شبکه استفاده کند، بدون اینکه معطل تیم فنی شود تا برنامهای را برای او نصب و راه اندازی کنند. به علاوه تهیه پشتیبان از اطلاعات سرورها نیز همیشه سادهتر است از تهیه پشتیبان از 100 ها کامپیوتر موجود در شبکه.
- اگر خروجی برنامهی وب شما تنها از صفحات وب و جاوا اسکریپت تشکیل شده باشد، امکان دسترسی آن در دستگاههای موبایل به سادگی میسر است.
@{ var token = await HttpContext.GetTokenAsync("access_token"); } <component type="typeof(App)" render-mode="ServerPrerendered" param-AccessToken="token" />
<CascadingValue Name="AccessToken" Value="AccessToken"> <CascadingAuthenticationState> <Router AppAssembly="@typeof(Program).Assembly"> <Found Context="routeData"> <AuthorizeRouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" /> </Found> <NotFound> <LayoutView Layout="@typeof(MainLayout)"> <p>Sorry, there's nothing at this address.</p> </LayoutView> </NotFound> </Router> </CascadingAuthenticationState> </CascadingValue> @code{ [Parameter] public string AccessToken { get; set; } }
@page "/showtoken" <p>This is part of the access token @(AccessToken != null ? AccessToken.Substring(0,30) : "(null)")</p> @code { [CascadingParameter(Name = "AccessToken")] public string AccessToken { get; set; } }
var userName = await HttpContext.User.Identity.Name;
var khasCookie = HttpContext.Request.Cookies["khas"];
ساخت لیست سفارشی
ابتدا یک لیست سفارشی بنام ContentSlides ایجاد میکنیم و ستونی از نوع Rich HTML به آن اضافه میکنیم.ایجاد یک پروژه شیرپوینتی از نوع Visual Web Part
سپس یک پروژه شیرپوینت از نوع Visual Web Part در سایتی که لیست فوق در آن قرار دارد میسازیم.
در این مرحله نامگذاریهای پیشفرض ویژوال استودیو که برای ویژوال وبپارت در نظر گرفته را به نام مناسب تغییر میدهیم.
افزودن پلاگین AnythingSlider
ابتدا پلاگین AnythingSlider را از این آدرس دریافت نمایید. سپس فایلهای anythingslider.css, anythingslider-ie.css, jquery.min.js, jquery.anythingslider.js و "default.png " را به ویژوال وبپارت اضافه میکنیم. برای اضافه کردن فایلهای این پلاگین، ابتدا فولدر "Layouts" به پروژه اضافه مینماییم و سپس فایلهای این پلاگین در این فولدر قرار میدهیم.سپس در خط 129 و 155 و 181 فایل anythingslider.css
background: url("../images/default.png") no-repeat;
background: url(“default.png") no-repeat;
در ادامه، بر روی "ContentSliderVisualWebPartUserControl.ascx" دابل کلیک کنید و کد زیر را به آن اضافه میکنیم.
<SharePoint:CssRegistration ID="AnythingSliderCssRegistration" runat="server" Name="/_layouts/ContentSliderWebPart/anythingslider.css"></SharePoint:CssRegistration> <SharePoint:CssRegistration ID="AnythingSliderCssRegistrationIE7" runat="server" Name="/_layouts/ContentSliderWebPart/anythingslider.css" ConditionalExpression="lte IE 7"></SharePoint:CssRegistration> <SharePoint:ScriptLink ID="JqueryScriptLink" runat="server" Name="/_layouts/ContentSliderWebPart/jquery.min.js"></SharePoint:ScriptLink> <SharePoint:ScriptLink ID="AnythingSliderScriptLink" runat="server" Name="/_layouts/ContentSliderWebPart/jquery.anythingslider.js"></SharePoint:ScriptLink>
توجه کنید در کد بالا ما از کنترلهای "SharePointCssRegistration" و "SharePointScriptLink" برای اضافه نمودن فایلهای Css و JavaScript مورد نیاز و هم چنین از خصیصه "ConditionalExpression" برای اضافه کردن فایل "anythingslider-ie.css" برای مرورگر اینترنت اکسپلورر 7 به بالا استفاده کردیم.
ایجاد کوئری برای لیست سفارشی
برای ایجاد کوئری از کتابخانه jQuery بنام SPService که از این آدرس قابل دریافت است، استفاده میکنیم. فایل "jquery.SPServices.min.js" موجود در این کتابخانه را همانند سایر فایلهای اضافه شده در قسمت قبل را به پروژه اضافه میکنیم.
برای استفاده از کتابخانه، کد زیر را در user control قسمت فبلی و در ادامه کدهای قبلی وارد میکنیم.
<SharePoint:ScriptLink ID="SPServicesScriptLink" runat="server" Name="/_layouts/ContentSliderWebPart/jquery.SPServices.min.js"></SharePoint:ScriptLink>
و برای ایجاد کوئری کد زیر در user control وارد میکنیم.
<script language="javascript" type="text/javascript"> $(document).ready(function () { $().SPServices({ operation: "GetListItems", async: false, listName: "ContentSlides", CAMLViewFields: "<ViewFields<FieldRef Name='SlidesContent' /></ViewFields>", completefunc: function (xData, Status) { $(xData.responseXML).SPFilterNode("z:row").each(function () { var liHtml = "<li>" + $(this).attr("ows_SlidesContent") + "</li>"; $("#slider").append(liHtml); }); } }); /*-- Initialize AnythingSlider plugin --*/ $('#slider').anythingSlider(); }); </script> <ul id="slider" />
وظیفه این کد انجام کوئری بر روی لیست "ContentSlides" و ایجاد ساختار یک لیست جهت نمایش اسلایدها میباشد که آیتمهای این لیست مقادیر ستون
"Slides Content" میباشد، شناسه این لیست "Slider" است.
توجه کنید: ما میتوانیم CAML Queryهای پیشرفتهای برای اعمال فیلتر مناسب و چیدمان اسلایدها استفاده کنیم.
در ادامه، برای مقدار دهی اولیه به پلاگین بوسیله فراخوانی تابع
$('#slider').anythingSlider();
انجام میشود.
در پایان براحتی با Deploy نمودن Solution، امکان استفاده از وب پارت مهیاست.
برای دریافت کد این پروژه از این آدرس استفاده کنید.
- این ابزار توسط اشخاص دیگری توسعه داده شده نه شما و این یعنی هر لحظه امکان تغییر سراسری اون ابزار توسط توسعه دهندگانش هست. در نتیجه هر لحظهای که اون ابزار تغییری پیدا بکنه، شما هم باید طراحی سیستم خودتون رو تغییر بدید.
- ذخیره اطلاعات یک پرداخت باید توسط شما در بانک اطلاعاتی شما انجام بشه، اطلاعاتی که پَرباد در بانک اطلاعاتی خودش ذخیره و بازبابی میکنه، صرفا جنبه مصرف داخلی برای خودش رو داره.
-
شما از قبل طراحی بانک اطلاعاتی خودتون رو بدون در نظر گرفتن هیج گونه ابزار خارجی (پَرباد) انجام دادهاید. (پَرباد یک ابزار پرداخت هست و برای اون اهمیتی نداره پرداخت در سیستم مصرف کننده به چه شکلی طراحی شده. وظیفه او فقط انجام عملیات پرداخت آنلاین هست)
- مبلغ قابل پرداخت رو مشخص میکنید و درخواست پرداخت رو توسط پَرباد انجام میدید.
- نتیجه درخواست پرداخت که شامل کد رهگیری و غیره هست رو در بانک اطلاعاتی خودتون ثبت میکنید. (برای فاکتور مورد نظر)
- کاربر به درگاه بانکی هدایت میشه، هزینه رو پرداخت میکنه و به وب سایت شما برمیگرده.
- عملیات تایید پرداخت رو توسط پَرباد انجام میدید.
- پس از تایید، کلیه اطلاعات لازم مانند کد رهگیری، کد تراکنش بانکی، مبلغ و غیره رو از پَرباد دریافت میکنید و در بانک اطلاعاتی خودتون ذخیره میکنید (با توجه به کد رهگیری که در مرحله ۳ ذخیره کرده بودید، اطلاعات فاکتور مورد نظرتون رو آپدیت میکنید)
برای این کار اولین چیزی که لازم بود دریافت و ذخیره اطلاعات بود که من برای این کار از Entity framework 4.1 Database-first و کتابخانه htmlagilitypack - HAP استفاده کردم . طراحی دیتابیس نهایی به این صورت شد
خوب در تلاش اول و مبتدیانه و بدون استفاده از این کتابخانه مفید چون اکثر صفحات وب XHTML نیستند و بالاخره چند تگ درست بسته نشده دارند و شما اگر بخواهید در آبجکت XmlDocument این htmlهای به ظاهر سالم رو لود کنید فورا با استثنای زیر مواجه میشوید
XmlException Was unhandeled The 'img' start tag on line 1 position 1604 does not match the end tag of 'a'. Line 1, position 1766
PM> Install-Package HtmlAgilityPack
مثلا با کد زیر میشه تاریخ تولد یک ورزشکار رو بدست آورد .توابع دیگه ای که خیلی جاها میتونه بدرد خورد GetAttributeValue و ChildNodes هست که یک نمونه نحوه استفادشو در ادامه میبینید
HtmlDocument xhtml = Crawler.GetXHtmlFromUri("http://www.london2012.com/athlete/hadadi-ehsan-1077408/"); HtmlNode tempNode = xhtml.DocumentNode.SelectSingleNode("//table[@class='athleteBio']/tbody/tr[4]");
string temp = tempNode.FirstChild.FirstChild.InnerText.Replace(" ", "").Trim(); athlete.Birthday = DateTime.Parse(temp.Substring(0, 10), new CultureInfo("en-GB"));
tempNode = xhtml.DocumentNode.SelectSingleNode("//div[@class='athletePhotoMedals']/div/div/img"); athlete.LargePhotoUri = tempNode.GetAttributeValue("src", "");
نکته اصلی هم پیدا کردن محل دقیق اطلاعاته که با ابزاری مثل Firebug خیلی راحتتر میشه این کارو انجام داد. کافیه روی تاریخ تولد راست کلیک و inspect element by Firebug رو بزنید و حالا اگر تویه dom روی هر المنت html نگه دارید بهتون XPath کامل رو میده که میتونید تویه تابع DocumentNode.SelectSingleNode ازش استفاده کنید.
برای درک بهتر XPath هم این 2 تا صفحه xpath_syntax و xpath_examples خیلی میتونه کمکتون بکنه.