استخراج سهام سهام از عناوین خبری مالی در وب سایت Finviz با استفاده از پایتون
Finviz قطعاً یکی از وب سایت های مورد علاقه من برای اطلاعات در مورد بازار سهام است. از نسبت های اساسی ، شاخص های فنی گرفته تا عناوین خبری و داده های آموزش خودی ، این یک صفحه نمایش کامل سهام است. علاوه بر این ، اطلاعات مربوط به عملکرد هر بخش ، صنعت و هر شاخص اصلی سهام را به روز کرده است.
finviz. com - صفحه نمایش سهام
تیک آخرین تغییر حجم سیگنال تیک تیک تیک آخرین تغییر حجم سیگنال تاریخ تأثیر انتشار زمان انتشار برای قبل مورد انتظار واقعی ...
نمونه ای از بخش عناوین خبری برای آمازون (با تیک "AMZN") از وب سایت Finviz در زیر آورده شده است. احساس راحتی کنید که از آن بازدید کنید و به این بخش بروید تا خودتان آن را ببینید! این بخش به صورت زنده ، برای هر سهام به روز می شود.
به جای اینکه بخواهیم برای هر سهام مورد علاقه خود ، از هر عنوان استفاده کنید ، می توانیم از Python برای تجزیه این داده های وب سایت استفاده کنیم و تجزیه و تحلیل احساسات را انجام دهیم (یعنی نمره احساسات را اختصاص دهید) برای هر عنوان قبل از میانگین آن در یک دوره زمانی.
ایده این است که ارزش متوسط ممکن است اطلاعات ارزشمندی را برای احساسات کلی سهام برای یک روز معین (یا هفته اگر تصمیم دارید به طور متوسط بیش از یک هفته اخبار داشته باشید) ارائه دهد. چیزی که باعث می شود وب سایت آسانتر شود این است که شما به سادگی باید در انتهای این آدرس url 'https://finviz. com/quote. ashx؟t=' اضافه کنید تا آن را تجزیه کنید (به URL در تصویر مراجعه کنیددر بالا). بیایید درست به آن بپردازیم!
بروزرسانی: به عنوان یک به روزرسانی ، من مقاله دیگری را در مورد استفاده از همه چیز در این مقاله برای ساختن یک برنامه وب داشبورد احساسات سهام در Flask و استقرار آن به صورت آنلاین نوشتم. بعد از خواندن این مقاله ، آن را بررسی کنید.
1. واردات کتابخانه ها
اول ، ما کتابخانه هایی را که برای ذخیره داده ها نیاز داریم وارد می کنیم. برای تجزیه و تحلیل داده ها از FinViz در حالی که "درخواست ها" برای دریافت داده مورد نیاز است ، "زیبا" لازم است."پاندا" برای ذخیره داده ها در DataFrames استفاده می شود در حالی که "Matplotlib" برای ترسیم احساسات در یک نمودار استفاده می شود. سرانجام ، از کتابخانه "nltk. sentiment. vader" برای انجام تجزیه و تحلیل احساسات در عناوین خبری استفاده می شود!
2. داده های تاریخ ، زمان و اخبار را ذخیره کنید
بیایید نگاهی دقیق تر به عناوین خبری آمازون (AMZN) و کد HTML مربوط به آن در زیر بیندازیم. همچنین می توانید به صفحه FinViz مراجعه کرده و کد HTML را در مرورگر خود مشاهده کنید.
از کد بالا توجه کنید که همه اخبار در جدولی با id=“news-table” ذخیره می شود. من دو ردیف از داده ها را از جدول اضافه کرده ام که با برچسب ها محدود شده اند. کد یکی از سطرها در کادر بالا قرار دارد. به داده های تاریخ و زمان بین اولین برچسب ها در کادر و متن تیتر خبر در برچسب ها توجه کنید. قرار است تاریخ، زمان و تیتر خبر را برای هر ردیف استخراج کنیم و روی تیتر خبر تحلیل احساسات انجام دهیم.
کد زیر نشان میدهد که کل «جدول اخبار» را از وبسایت FinViz در یک فرهنگ لغت پایتون، news_tables، برای این سهام ذخیره میکند - آمازون (AMZN)، تسلا (TSLA) و Google (GOOG) (یا بهتر است بگوییم Alphabet، شرکتی که مالک آن است. گوگل). شما می توانید هر تعداد علامت که می خواهید در لیست تیکرها قرار دهید.
3. چاپ داده های ذخیره شده در news_tables (اختیاری)
برای درک آنچه در فرهنگ لغت جداول خبری برای "AMZN" ذخیره شده است. با خیال راحت کد زیر را اجرا کنید، که در میان هر برچسب (برای 4 ردیف اول) تکرار می شود تا سرفصل بین برچسب ها و تاریخ و زمان بین برچسب ها را قبل از چاپ آنها بدست آورید. این مرحله اختیاری است و برای یادگیری خودتان است.
شما باید چیزی شبیه به این را در زیر دریافت کنید (البته با عناوین به روزتر).
4. تاریخ، زمان و سرفصل های اخبار را در یک لیست پایتون تجزیه کنید
کد زیر مشابه کد بالا است، اما این بار به جای چاپ کردن، تاریخ، زمان و سرفصل ها را در یک لیست پایتون به نام parsed_news تجزیه می کند. حلقه if، else ضروری است زیرا اگر به عناوین اخبار بالا نگاه کنید، فقط اولین اخبار هر روز دارای برچسب "تاریخ" هستند، بقیه اخبار فقط دارای برچسب "زمان" هستند، بنابراین ما باید این موضوع را بررسی کنیم..
بخشی از لیست شما از کد بالا به این شکل است. توجه داشته باشید که این در واقع یک لیست از لیست ها است که هر لیست حاوی نماد، تاریخ، زمان و عنوان خبر مربوطه است.
5. تجزیه و تحلیل احساسات با Vader!
اکنون زمان آن است که با nltk. sentiment. vader تجزیه و تحلیل احساسات را انجام دهیم، بالاخره! ما تیکر، تاریخ، زمان، سرفصلها را در یک Pandas DataFrame ذخیره میکنیم، قبل از اضافه کردن یک ستون اضافی در DataFrame برای ذخیره امتیازات احساسات برای هر عنوان، تحلیل احساسات را روی سرفصلها انجام میدهیم.
5 ردیف اول DataFrame از کد بالا باید چیزی شبیه به این باشد. ستون "ترکیب" نمرات احساسات را می دهد. برای نمرات مثبت، هر چه ارزش بالاتر باشد، احساسات مثبت تر است. به طور مشابه برای نمرات منفی، هر چه مقدار منفی تر باشد، احساسات منفی تر است. نمرات ا ز-1 تا 1 متغیر است.
برای اطلاعات بیشتر در مورد کتابخانه nltk. sentiment. vader و اطلاعات بیشتر در مورد تجزیه و تحلیل احساسات، می توانید به این مقاله مراجعه کنید.