چه زمانی باید از GLMM استفاده کنم؟
نحوه محاسبه مدل لوجیت در نرم افزار R
مدل های لوجیت معرف مدل هایی هستند که متغیر وابسته آنها دو بعدی است. در یک مدل لجیت لگاریتم برتری به عنوان برونداد مدل و بر اساس ترکیبی از متغیر های مستقل مدلیزه می شود.
به عنوان مثال اگر متغیر وابسته موفق شدن یا نشدن یک تیزر تبلیغاتی با اساس ضریب نفوذ آن باشد، و بخواهیم متغیر های مستقل پیش بینی کننده آن را شناسایی کنیم؛ با یک مدل لجیت سرو کار داریم. لذا در این پژوهش ها نمی توان از رگرسیون های معمولی (که متغیر وابسته باید کمی باشد)، برای پیش بینی رخداد متغیر وابسته استفاده نمود. در این نوع از رگرسیون از نسبت برتری که نسبت موفقیت به شکست می باشد استفاده می شود.
باید توجه شود که پیش شرط های انجام رگرسیون خطی مانند وجود رابطه خطی بین متغیر های مستقل و وابسته، همسانی واریانس متغیر وابسته و متغیر های مستقل، توزیع نرمال متغیر وابسته و باقیمانده ها یا خطای اندازه گیری در مدل لجیت مورد توجه نیست. مدل عمومی تابع لجیت به شرح زیر است:
Ln (p/ (1-p) = intercept + b1*X1 + b2*X2 + … + bk*Xk
شکل کلی این تابع به شکل زیر خواهد بود:
هدف این نوشتار نحوه محاسبه تابع لوجیت در نرم افزار R می باشد. این نرم افزار امروزه دارای محبوبیت گسترده ای در زمینه انجام آنالیز های چند متغیره شده است و می توان بسیاری از توانمندی های آنرا با نرم افزار های مشهوری چون SAS، SPSS و S-PLUS مقایسه نمود.
شکل کلی دستور اجرای این تکنیک آماری در نرم افزار R به شکل زیر است که در ادامه در مورد هر یک از مولفه ها توضیحی خواهد آمد.
به عنوان مثال در تحقیقی، هدف به دست آوردن توابع لجیت برای بررسی افزایش شانس قبولی در آزمونی است. به این منظور با کد صفر و یک در یک ستون افرادی که در آزمون رد یا قبول شده اند مشخص و سپس در مقابل هر یک؛ دو نمره آنها یعنی gre, gpa را ثبت و سپس نوع موسسه ای که افراد آموزش دیده اند را نیز با کدهای یک تا چهار که بیانگر درجه یک تا درجه چهار می باشند مشخص و در ستون متغیری به نام rank تعریف می شود. به منظور انجام تابع لجیت این مثال، در نرم افزار R ابتدا باید دیتای مورد تحلیل به نرم افزار معرفی شود. برای این منظور باید در کنسول نرم افزار کد زیر تایپ شود تا داده گرد آوری شده از این فایل خوانده شود.
سپس باید دیتای موجود با کنسول ورودی متصل شود. لذا دستور زیرتایپ شود:
attach(mydata)
names(mydata)
[1] “admit” “gre” “gpa” “rank”
در این مرحله برای مشاهده آماره های توصیفی کافی است دستور summary را نوشته و داخل پرانتز اسم متغیر را وارد کنیم مانند:
سپس دستور اجرای تابع لوجیت را در نرم افزار در خط بعدی تایپ می کنیم:
در این دستور GLM تابع اصلی انجام تابع لجیت است و متغیر نوع موسسه به دلیل طبقه ای بودن به صورت as.factor(rank) معرفی می شود.
در این مرحله آنالیز های انجام شده در فایل موقتی به اسم mylogit در نرم افزار ذخیره شده است. برای دیدن آن کافی است که دستور مقابل را تایپ کنید:
با این دستور تمام آنالیز های مورد نیاز جهت به دست آوردن تابع لوجیت انجام می شود.
glm(formula = admit ~ gre + gpa + as.factor(rank), family = binomial(link = “logit”),
na.action = na.pass)
Deviance Residuals:
Min 1Q Median 3Q Max
-1.6268 -0.8662 -0.6388 1.1490 2.0790
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -3.989979 1.139951 -3.500 0.000465 ***
gre 0.002264 0.001094 2.070 0.038465 *
gpa 0.804038 0.331819 2.423 0.015388 *
as.factor(rank)2 -0.675443 0.316490 -2.134 0.032829 *
as.factor(rank)3 -1.340204 0.345306 -3.881 0.000104 ***
as.factor(rank)4 -1.551464 0.417832 -3.713 0.000205 ***
—
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 499.98 on 399 degrees of چه زمانی باید از GLMM استفاده کنم؟ freedom
Residual deviance: 458.52 on 394 degrees of freedom
AIC: 470.52
در اولین بخش خروجی اطلاعات مربوط به عملیات محاسباتی مورد نظر آورده شده است. در قسمت بعد انحراف استاندارد آورده شده است که با کمک آن می توان نسبت به بررسی برازش یا فیت مدل قضاوت نمود. بخش بعدی ضرایب تخصیص یافته به هر متغیر مستقل آورده شده است که برای آن آماره والد در قسمت z value آورده شده است. در صورتیکه مقدار سطح معنی داری زیر 05/0 باشد می توان آن متغیر مستقل را برای پیش بینی ابعاد متغیر وابسته مورد استفاده قرار داد.
به عنوان مثال با یک واحد افزایش در مقدار gre مقدار لگاریتم نسبت برتری به میزان 002/0 واحد بیشتر خواهد بود و به همین ترتیب برای سایر متغیر های مستقل. در ادامه خروجی نیز دو بخش انحراف صفر و انحراف باقیمانده گزارش شده است که در کنار شاخص AIC به منظور بررسی برازش کلی مدل لوجیت مورد استفاده قرار می گیرد.
به منظور لود نمودن مقادیر اکسپوننشیال تابع که قضاوت را ساده تر می کند دستور زیر را تایپ می کنیم.
exp(mylogit$coefficients)
(Intercept) gre gpa as.factor(rank)2
0.0185001 1.0022670 2.2345448 0.5089310
as.factor(rank)3 as.factor(rank)4
0.2617923 0.2119375
بر اساس مقادیر اکسپوننشیال می توان بیان نمود که یک واحد افزایش مقداری gpe به معنای 2/2 برابر شدن شانس قبولی در آزمون است. این مقدار از به توان بردن مقدار Estimate به عدد طبیعی است.
به منظور بررسی فاکتور نوع موسسه ای که فرد در آن تحصیل نموده است، می توان از دستور زیر استفاده نمود.
و سپس دستور زیر تایپ شود:
بعد از این دستور این خروجی ظاهر می شود:
gre gpa rank rankP
1 587.7 3.3899 1 0.5166016
2 587.7 3.3899 2 0.3522846
3 587.7 3.3899 3 0.2186120
4 587.7 3.3899 4 0.1846684
نتایج نشان می دهد که دانشجویی که در یک موسسه درجه اول تحصیل نموده شانس قبولی وی 52 درصد است در حالیکه دانشجویی که در یک موسسه درجه چهار تحصیل نموده از شانس 18 درصدی برخور دار است.
در نهایت جهت بررسی مقادیر انحراف باقیمانده ها از دستور زیر استفاده می کنیم.
این دستور مقدار کای اسکویر مدل فعلی را ظاهر می کند که مقدار 41 محاسبه شده است. به منظور بیان درجه آزادی آن نیز دستور زیر را تایپ می کنیم.
که مقدار 5 را گزارش می کند. به منظور محاسبه سطح معنی داری نیز ابتدا کد زیر را تایپ می کنیم.
مقدار کمتر از 001/0 مدل نشان می دهد که متغیر های وارد شده به مدل لوجیت از اعتبار بالایی برخور دار هستند زیرا که اختلاف کای اسکویر در مدل صفر با مدل اشباع شده کاملا معنی دار است که نشان از برازش کلی مدل دارد. به منظور محاسبه تابع حداکثر درستنمایی جهت گزارش نیز می توان دستور logLik(mylogit) را تایپ نمود. مقدار تابع حداکثر درستنمایی در این مرحله نمایش داده می شود. رگرسیون لجستیک بحث مفصلی است که در این آموزش بیشتر نحوه پیاده سازی آن در نرم افزار R مورد توجه بود. برای کسب اطلاعات بیشتر می توان از منبع زیر استفاده نمود.
• Rice, J. C. (1994). Logistic regression: An introduction. Advances in social science methodology, Vol. 3: 191-245. Greenwich , CT: JAI Press. Popular introduction
تبدیل دادهها (Data Transformation) به فُرمت قالب فهم برای الگوریتم دادهکاوی
اکثرِ الگوریتمهای دادهکاوی، نیاز دارند تا دادههای عددی را دریافت کنند و ساختارِ یادگیریِ آنها بر اساسِ یادگیری از ماتریسهای عددی است. در درسِ طبقهبندی دیدید که چگونه میتوان یک سری ویژگی را به صورت ماتریس ساخت و به الگوریتمِ طبقهبندی داد. اما یادمان باشد که همیشه دادهها به صورتِ عددی آماده نیستند و بعضاً نیاز دارند تا به فرمتِ دلخواهِ الگوریتم (یعنی همان فرمتِ ماتریسِ عددی) تبدیل شوند. این دست از دادهها بایستی قبل از تزریق به الگوریتم، به فُرمتِ مناسب تبدیل (transform) شوند. روشهای تبدیل داده بسیار گسترده و متنوع است و در این درس، یکی از آنها را با هم مرور میکنیم.
اجازه بدهید نگاهی به جدولِ زیر بیندازیم:
فرض کنید در اینجا تعدادی دانشآموز داریم که هر کدام ویژگیهای مختلفی دارند. سن، معدل، قد و جنسیت ۴ویژگیِ دانشآموزان هستند که میخواهیم بر روی آنها عملیاتی مانند عملیاتِ خوشهبندی را انجام دهیم. همانطور که میبینیدِ، ۳ ویژگیِ اولْ عددی هستند و ویژگیِ آخر یعنی جنسیت ۲ مقدار دارد، مرد و زن. در اصطلاح، ویژگیِ جنسیت یک ویژگیِ categorical است، به این معنی که یک مقدارِ عددی نیست که بتوان بزرگی یا کوچکی را با آن مشخص کرد. مثلا زن از مرد بزرگتر نیست و یا برعکس. این دستْ از ویژگیها برای بسیاری از الگوریتمهای دادهکاوی نامفهوم هستند. بنابراین بایستی به ویژگیهای عددی تبدیل شوند. در مثالِ بالا اگر بخواهیم جنسیت را به ویژگیِ عددی تبدیل کنیم، شکلِ بالا به شکلِ زیر تبدیل میشود:
در اینجا به ازای هر نوع جنسیت، یک ستون اضافه کردیم (ستون جنسیت نیز حذف شد). همانطور که مشاهده میکنید چون ۲ نوع جنسیت (مرد و زن) داشتیم، پس دو ستون یعنی دو ویژگی اضافه کردیم و با توجه به هر دانشآموز، مقدارِ مرد بودن و یا زن بودن را در سطرِ مربوطه برابرِ ۱ قرار دادیم و دیگری را برابرِ ۰. مثلا دانشآموزِ اول (student#1) یک مرد است. پس ستون مرد، برای این دانشآموز برابرِ ۱ و ستون زن برای این دانشآموز برابر ۰ قرار میگیرد، و به همین ترتیب برای بقیهی سطرها همینکار را تکرار میکنیم. مثلاً اگر این ستون مقدار دیگری مانندِ جنسیت نامشخص داشت، آنگاه بایستی این ویژگی به سه ستون شکسته شود. مرد، زن و نامشخص و در هر سطر، یکی از این ویژگیها ۱ و بقیه ۰ میشدند
در اصطلاح به این فرآیند one hot encoding نیز گفته میشود، چون در هر سطر فقط یکی از ستونهای آن نوع (مثلاً جنسیت) ۱ و بقیه صفر هستند.
چگونه از پردازش زبان طبیعی ( NLP ) در پایتون استفاده کنیم
این یک مثال مرحله به مرحه عملی برای پی بردن به مهارت های موردنیاز متخصصین علم داده به همراه NLTK است.
در این مقاله ما کاربرد پردازش زبان طبیعی ( NLP ) را بصورت مرحله به مرحله در قالب مثالی از فرصت های ارتقا شغلی ارائه می دهیم.
در واقع این مقاله یک توضیح است که در آن ابزار ها، مهارت ها و حداقل آموزشی که مورد نیاز اغلب کارفرمایان است را فراهم کرده ایم.
اگر دوست دارید که یک نمونه کاربردی استفاده از بسته ی جعبه ابزار زبان طبیعی ( Natural Language Toolkit ) با کدهای پایتون را ببینید، پس با ما در این مقاله همراه باشید.
آماده سازی : استخراج اطلاعات
ما فرصت های ارتقا شغلی برای متخصصین داده را از ۸ شهر مختلف استخراج کرده ایم که شامل شهرهای بوستون، لس آنجلس، مونترال، شیکاگو، سان فرانسیسکو، تورنتو و ونکوور می شود.
متغیر های این آزمایش شامل عنوان شغلی ( job_title )، شرکت ( company )، موقعیت ( location ) و شرح شغل ( job_description ) است.
ما در این مقاله وارد جزییات این فرایند نخواهیم شد ولی شما می توانید در صورت تمایل به کد ها در اینجا مراجعه کنید.
در نهایت ما ابزار های پر کاربرد، مهارت ها و حداقل آموزش موردنیاز کارفرمایان برای این اطلاعات را خلاصه خواهیم کرد.
حالا که مرحله آماده سازی انجام شد، آزمایش را شروع می کنیم.
مرحله اول : بارگذاری و پاکسازی اطلاعات
ابتدا فایل های داده این ۸ شهر را در پایتون بارگذاری و ترکیب می کنیم.
در این مرحله اگر دو تا ردیف و یا فرصت شغلی با ویژگی های عنوان شغل، شرح شغل و یا شهر بطور مشابه وجود داشت، آن را حذف می کنیم.
حالا با داشتن مجموعه اطلاعاتی شامل پنج ویژگی و ۲۶۸۱ ردیف به مرحله دوم می رویم.
مرحه دوم : تشکیل لیست هایی شامل کلمات کلیدی
ما قبل از جستجو در توضیحات شغلی ، به لیست هایی از واژگان کلیدی که ابزار ها، مهارت ها و رتبه ها را نشان می دهد، نیاز داریم.
برای این تحلیل ، ما از رویکرد ساده ای برای تشکیل لیست ها استفاده می کنیم به این صورت که این لیست ها براساس قضاوت ما و محتوای فرصت های شغلی تشکیل خواهند شد. البته اگر موضوع آزمایش پیچیده تر از این باشد ، می توانید از رویکردهای پیشرفته تری هم استفاده کرد.
ابتدا بر اساس میزان دانش خود از علم اطلاعات، لیستی از واژگان کلیدی ابزار های مورد نیاز تهیه می کنیم. البته به خوبی می دانیم که این ابزارها شامل Paython ، R ، Hadoop ، spark و…. است. ما اطلاعات مناسبی از این زمینه داریم. بنابراین این لیست اولیه خوب است که بسیاری از ابزارهای ذکر شده در پست های شغلی را پوشش داده است.
سپس با دیدن فرصت های شغلی تصادفی، ابزارهایی که هنوز در لیست نیستند را به آن اضافه می کنیم. در اکثر مواقع این واژگان کلیدی جدید، به ما یادآوری می کنند که ابزارهای مرتبط دیگری را نیز به لیست موجود اضافه کنیم. در نتیجه پس از این مرحله، یک لیست کلمات کلیدی داریم که بیشتر ابزار های ذکر شده در فرصت های شغلی را در بر می گیرد.
سپس در مرحله بعد ، واژگان کلیدی را بصورت لیست های تک کلمه ای و چند کلمه ای از یکدیگر جدا می کنیم. در این مرحله لیست های بوجود آمده باید با روش های مختلف با شرح شغل مطابقت پیدا کنند.
اغلب بوسیله مطابقت های ساده رشته ها، می توان خیلی راحت تر و بهتر از واژگان کلیدی چند کلمه ای در شناسایی شرح شغل استفاده کرد. بطور مثال واژه کلیدی تک حرفی “c” در مقاله ما به زبان برنامه نویسی C اشاره دارد. اما “c” همچنین یک حرف معمولی است که در بسیاری از کلمات از جمله can” ، “clustering استفاده می شود. بنابراین ما باید این واژگان تک حرفی را از طریق توکن سازی پردازش کنیم درا ین صورت حرف “c” تنها با واژگان مشابه در شرح شغل تطابق پیدا می کند.
در زیر لیست هایی از واژگان کلیدی برای ابزارهای رمزگذاری شده در پایتون وجود دارد.
با ادامه فرایندی مشابه فرایند بکار گرفته شده برای ابزار ها، می توان به لیست هایی از کلمات کلیدی از مهارت ها دست یافت.
همچنین باید به این نکته توجه شود که ما برای سطوح تحصیلاتی مختلف از روش های متفاوتی استفاده می کنیم.
از آنجایی که ما به دنبال حداقل سطح تحصیلات مورد نیاز هستیم ، برای رتبه بندی تحصیلات به یک عددی احتیاج داریم که نشاند هنده آن سطح باشد. به عنوان مثال ، ما از عدد ۱ برای نشان دادن سطح “کارشناسی” یا “دانشجوی دوره کارشناسی” استفاده کرده و از عدد ۲ برای نشان دادن سطح “کارشناسی ارشد” یا “فارغ التحصیل” و غیره استفاده می کنیم.
به این ترتیب، ما دارای رتبه بندی از اعداد ۱ تا ۴ هستیم که در این رتبه بندی هرچه از عدد ۱ به عدد ۴ برویم، سطح تحصیلات نیز بالاتر می رود.
مرحله سوم: ساده سازی شرح شغلی با استفاده از تکنیک های NLP
در این مرحله ، می خاوهیم متن توضیحات شغلی را ساد سازی کنیم. درک متن توضیحات شغلی توسط برنامه های کامپیوتری ساده تر خواهد شد در نتیجه بطور کارآمدتری این متن ها با لیست واژگان کلیدی تطابق پیدا می کند.
شرح شغل موجود در مجموعه داده های ما در زیر نشان داده شده است.
توکن سازی توصیفات شغل
توکن سازی یا همان جداسازی واژگان فرایندی است که در آن یک داده متنی داده شده به واحدهای زبانی کوچکتری به نام توکن تقسیم بندی می شود و از آنجا که برنامه های کامپیوتری متونی که جداسازی شده است را بهتر درک می کنند، این کار ضروری است.
برای اینکار باید رشته های متون مربوط به توصیفات شغل را توسط فاصله هایی از یکدیگر جدا کرده و به توکن های متفاوت تقسیم کرد. ما برای انجام این عمل از تابع word_tokenize استفاده میکنیم.
پس از این فرآیند، رشته های متون مربوط به شرح کار، همانند زیر به توکن ها (کلمات) تقسیم می شوند در نتیجه کامپیوتر می تواند این توکن ها را آسان تر بخواند و پردازش کند.
برای مثال حرف کلیدی “c” که قبلا امکان داشت با کلماتی که حرف ابتدایی آن ها “c” است مانند “can” و یا ” clustering” تطبیق پیدا کند، الان تنها با توکن هایی که حرف “c” دارند تطبیق پیدا می کند.
لطفا همچنان به خواندن کدهای پایتون ادامه دهید چون ما توکن سازی را با تعدادی از روند های بعدی ترکیب خواهیم کرد.
برچسب گذاری اجزای کلام ( Parts Of Speech ) توضیحات شغل
توضیحات شغل اغلب طولانی است در نتیجه ما باید کلمات مفید برای تجزیه و تحلیل خود را حفظ کنیم و باقی را حذف کنیم و برای رسیدن به این هدف از برچسب گذاری اجزای کلام ( POS Tagging ) استفاده می کنیم.
برچسب گذاری برچسب گذاری اجزای کلام یک روش NLP برای برچسب گذاری با صرف نظر از اینکه کلمه یک اسم ، صفت ، فعل و غیره، است. ویکی پدیا این روش را به خوبی توضیح می دهد:
الگوریتم برچسب گذاری اجزا کلام ( POS Tagging ) فرآیند علامت گذاری یک کلمه در یک متن بر اساس مطابقت آن کلمه با تعریف آن و زمینه محتوایی که آن کلمه در آن ظاهر می شود، است. به عنوان مثال، واحدهای زبانی مجاور و مرتبط در یک عبارت، جمله یا پاراگراف. نوع ساده تری از این روش به طور معمول در مدارس به دانش آموزان در قالب نقش های دستوری مانند اسم (noun)، فعل (verb)، صفت (adjective) آموزش داده می شود.
به لطف NLTK می توانیم این برچسب گذاری را در پایتون استفاده کنیم.
با استفاده از این روش در لیست کلمات کلیدی، می توانیم برچسب های مربوط به آزمایش خود را پیدا کنیم.
ما در جدول زیر لیست کلمات کلیدی را برچسب گذاری کرده ایم تا به شما چگونگی انجام این عملیات را نشان دهیم.
ترکیب مختلف حروف معرفی کننده ی تگ ها هستند. برای مثال دو حرف “NN” نشان دهنده اسم ها و کلمات مفرد مانند “Paython” است و یا “JJ” نشان دهنده صفت هایی مانند “big” است. لیست کاملی از آن ها در پایین برای شما قرارداده شده است.
همانطور که می بینید برچسب گذاری بدون نقص نیست برای مثال “sql” بصورت “JJ” چه زمانی باید از GLMM استفاده کنم؟ و صفت برچسب گذاری شده است ولی خب حداقل به ما کمک می کند تا کلمات مورد نیاز خود را از بقیه جدا کنیم.
ما می توانیم از لیست برچسب های تمام کلمات کلیدی برای جداسازی توضیحات شغل استفاده کنیم. با اینکار ما فقط کلماتی از توضیحات شغل را نگه می داریم که برچسب مشابهی از کلمات کلیدی دارند. برای مثال کلماتی از توضیحات شغل با برچسب های “NN” و “JJ” را نگه می داریم. با اینکار ما واژه هایی مانند “the” و “then” را که کلمات مفیدی برای تحلیل ما نیستند را از بقیه جدا می کنیم.
اکنون در این مرحله ما توضیحات شغلی ساده شده ای داریم که کوتاه و جداسازی شده است. حالا می توانیم به مرحله بعد برویم.
مرحله چهارم : پردازش نهایی کلمات کلیدی و توصیفات شغلی
مرحله چهارم شامل پردازش نهایی کلمات کلیدی و توضیحات شغلی است که در این مرحله ما بیشتر لیست های کلمات کلیدی و توضیحات شغلی را پردازش می کنیم.
ریشه یابی ( Stemming ) کلمات
Stemming یا ریشه یابی کلمات فرایند بازگرداندن کلمات به شکل اولیه، ریشه ای و بطور کلی فرم نوشته شده ی کلمه است.
درواقع عملیات Stemming به کامپیوتر این امکان را می دهد که کلمات مختلفی که ظاهر متفاوت ولی ریشه یکسان دارند را شناسایی کند. در این صورت می توان کلمات را تا وقتی که ریشه مشابهی دارند، مطابقت داد. بطور مثال کلماتی مانند “models” و “modeling” هر دو از کلمه “model” گرفته شده اند و به عبارتی ریشه این دو “model” است.
اکنون ما هر دو لیست کلمات کلیدی و شرح شغل ساده تر شده را فهرست می کنیم.
عملیات Lowercasing
Lowercasing فرایند تبدیل تمامی کلمات موجود در متن به حروف کوچک است و ما در پایان کار کلمات موجود در توصیفات شغلی را با تبدیل آن ها به حروف کوچک استاندارد می کنیم زیرا لیست های کلمات کلیدی بر این مبنا ایجاد شده است.
همانطور که در بخش قبلی گفته شد، کد های پایتونی که در روش قبلی استفاده شد در زیر وجود دارد.
پس از انجام مراحل بالا، حالا تنها کلمات ( توکن ها ) در توضیحات شغلی که مرتبط با آزمایش ما هستند باقی می مانند. در زیر نمونه ای از توضیحات شغلی نهایی آمده است.
در نهایت ما برای مرحله تطبیق کلمات کلیدی آماده هستیم.
مرحله پنجم : تطبیق کلمات کلیدی و توضیحات شغلی
در این مرحله ما لیست های کلمات کلیدی و توضیحات شغلی ساده شده را با یکدیگر تطبیق می دهیم. برای پی بردن به این موضوع که آیا یک شرح شغل به کلمات کلیدی خاصی اشاره دارد یا نه، بایستی لیستهای کلمات کلیدی و توضیحات شغلی یاده شده در مرحله قبل با یکدیگر تطابق پیدا کنند
ابزار ها / مهارت ها
همانطور که در بخش های قبلی دیدید، ما دو نوع از لیست های کلمات کلیدی را ایجاد کردیم که شامل لیست کلمات تک کلمه ای و چند کلمه ای می شد. حال برای لیست کلمات کلیدی تک کلمه ای، هر کدام از آن کلمات را با شرح شغل و توسط مجموعه عملکرد های مشترک تطبیق می دهیم و برای کلمات کلیدی چند کلمه ای، بررسی می کنیم که آیا آن ها زیر رشته های توضیحات شغل هستند یا خیر.
آموزش
برای سطح اموزش، ما از روش مشابه با روش ابزار ها / مهارت ها برای تطبیق کلمات کلیدی استفاده می کنیم. با این تفاوت که در اینجا ما تنها به دنبال کمترین سطح هستیم.
اجازه بدهید این را در قالب یک مثال بیان کنیم. زمانیکه دو واژه “bachelor” و “master” هر دو در توضیحات شغلی وجود دارند، مدرک کارشناسی (bachelor degree) حداقل تحصیلات مورد نیاز برای شغل موردنظر می باشد.
کدهای پایتون و جزییات بیشتر در زیر وجود دارد.
مرحله ششم : تجسم نتایج
در نهایت ما نتایج را با نمودار میله ای خلاصه می کنیم.
در این مرحله ما برای هرکدام از کلمات کلیدی سطوح ابزار / مهارت / تحصیلات، توضیحات شغلی که با آن ها تطابق دارد را حساب می کنیم. همینطور در صد آن ها در میان تمام توضیحات شغلی را نیز حساب می کنیم.
ما برای لیست های ابزار ها و مهارت ها، تنها ۵۰ مورد برتر را ارائه می دهیم و برای سطح تحصیلات، آن ها را با توجه به حداقل سطح موردنیاز خلاصه می کنیم.
همچنین جزییات کد های پایتون در زیر وجود دارند.
ابزار های برتر مورد نیاز
۵۰ ابزار برتر برای مخصصین داده
مهارت های برتر مورد نیاز
۵۰ مهارت برتر مورد نیاز متخصصین داده
حداقل تحصیلات مورد نیاز
حداقل سطح تحصیلات مورد نیاز برای متخصصین داده
امیدواریم این مقاله برای شما مفید بوده باشد. لطفا کامنت بگذارید و نظر خود را به ما بگویید.
آشنایی با RecyclerView در اندروید
با سلام و درود، خب میخوام در مورد RecyclerView در اندروید صحبت کنم که فکر کنم همه ی اندروید کارها حداقل اسمش رو دیدن و ازش استفاده نیز کردن، منتهی خیلیا آشنایی کامل از قابلیت ها و ویژگی های RecyclerView ندارند، امیدوارم این مطلب به فهم بیشتر مفاهیم , آشنایی با RecyclerView کمک بکنه.
لیست ها اجتناب ناپذیر هستند.
اپلیکیشن تلگرام رو که باز کنید یک لیست از چت هاتون باز میشه. یا اپلیکیشت پخش موسیقیتان که لیستی از موسیقی هایتان را در بر دارد. حتی صفحه خانه (Home Screen) از گوشی هوشمندتون نیز یه لیست محسوب می شود. لیست ها راحت ترین راه نمایش داده روی ابزار ها با صفحه نمایش کوچک (همانند گوشی هوشمند) محسوب می شوند. پس داده های بسیار زیاد را می توانند روی یک صفحه کوچک به نمایش بگذارند.
در حالی که لیست ها در نمایش یک سری از داده هایی که مشابه به نظر می رسند عالی هستند، ممکن است که در مصرف منابع خیلی خوب نباشند. زیرا می بینید که یه لیست هر بار که اسکرول میخوره نیاز به ایجاد یک view جدیدتر هست و ایجاد view جدید یک عمل سنگین و گران (از لحاظ مصرف منابع) می باشد. یک لیست سنگین به این معنی است که برنامه مورد نظر در مصرف منابع سیستمی نیز گرسنه تر است. این مسئله در اندروید قبل از اینکه RecyclerView معرفی بشه برای سالیان سال مشکل به حساب می آمد.
گوگل
گوگل RecyclerView را در کنار CardView و Design Support Library در سال 2014 با عرضه اندروید Lollipop منتشر کرد. ایده پشت RecyclerView ساده است، به جای ساخت و ایجاد View برای هر دفعه که کاربر اسکرول می کند، view یک مرتبه ایجاد می شود و هر بار که نیاز بود recycle و استفاده مجدد می شوند. RecyclerView به غیر از الگوی استفاده مجدد و یا الگوی ViewHolder ، برخی بهبودهای دیگر نسبت به لیست های سابق را ارائه می دهد، مانند Layout Manager، Item Decoration، Item Animator و غیره. خب دهید وارد موضوع اصلی بشیم و ببینیم که RecyclerView در مقابل لیست های سابق چه چیزی را ارائه میدهد
1- RecyclerView چیست؟
RecyclerView کتابخانه ای برای طراحی لیست می باشد که اساسا پنجره ای با سایز ثابت را برای بارگیری مجموعه داده ی بزرگی در آن فراهم می کند. این view ای که در ابتدا ایجاد شده است را هر زمان که view مورد نظر خارج از محدوده یا پنجره شد recycle می کند و سپس اگر نیاز باشد، آنها رابرای آنکه به نظر نرسد که View پایان یافته و ادامه دارد مجدد reuse می کند و به صورت عمودی محتویات درون پنرج به صورت ادامه دار نمایش داده می شوند.
سه پنجره را در زیر می بینید. هر سه دارای recyclerView هستند. اولی از StaggeredLayoutManager استفاده کرده است در حالی که دومی و سومی از LinearLayoutManger استفاده کرده اند. در ادامه به این می پردازیم که LayoutManger چی هست.
بهمچنین ممکن است به این توجه کرده باشید که در پنجره اولی view ها مشابه نیستند؛ آنها آیتم های داده متفاوتی را درون خودشان دارند. بله، RecyclerView این قابلیت را برای شما ممکن می سازد، به طور خاص، الگوی ViewHolder از RecyclerView. برای هر view یک ViewHolder جداگانه تعریف کنید و مدیریتش را به RecyclerAdapter بسپارید. به طریقه این کار در ادامه خواهیم پرداخت.
همانطور که در ابتدا گفته شد، RecyclerView یک کتابخانه پشتیبانی مستقل از تیم گوگل می باشد که درسال 2014 منتشر شد. پس ما نیاز داریم تا آن را به صورت جداگانه در اپلیکیشن خودمان اضافه کنیم، این کتابخانه با هیچ ورژنی از SDK همراه نبوده و باید به صورت دستی به اپ اضافه بشه. افزودن خط زیر به بلاک dependencies فایل build.graddle از اپلیکیشن و انجام دادن sync گردل، gradle به ما اجازه استفاده از این کتابخانه را می دهد.
For Android Studio below version 3.0, this needs to be added instead, برای اندروید استادیو ورژن های کمتر از 3 نیاز داریم تا خط زیر را به جای خط فوق اضافه کنیم.
2- چقدر متفاوت از ListView می باشد؟
به راحتی می توان RecyclerView را یک ListView بهتر بنامیم. مانند ListView کار می کند، یک مجموعه داده را روی صفحه نمایش نشان داده اما از رویکردی متفاوت برای رسیده به هدفش استفاده می کند. RecyclerView با توجه به اسمش پیشنهاد می کند که View ها را هر گاه که از محدوده (صفحه نمایش) خارج شدند، با کمک الگوی ViewHolder، ریسایکل کند.
مطمئنا، ListView نیز می تواند دارای ViewHolder باشد، اما این به صورت پیش فرض امکان پذیر نمی باشد و ما را مجبور می کند که کد بیشتری را برای بهبود کارایی لیست استفاده کنیم. از سوی دیگر، ViewHolder ها قسمت مهمی از کل معماری RecyclerView می باشد، به این معنی که سیستم شما را مجبور می کند برای هر layout ای که ممکن است به کار بگیرید، یک ViewHolder داشته باشید. معماری سپس از این ViewHolder ها جهت ساخت کپی View از layout ای که میخواهد استفاده شود، استفاده می کند و به جای ایجاد مجدد آنها، از view های کش (cached) شده استفاده می کند و آنها را با داده های جدید bind می کند.
دیگر سودی که RecyclerView نسبت به ListView دارد، LayoutManager ، Item Decoration و Item Animator می باشد. فقط به ساخت یک Grid list با سه ستون فکر کنید که زمانی که آیتم جدیدی insert می شود یا دارای فاصله مناسب بین طرفین child view با مرزها است، متحرک می شود.مشکل به نظر میاد، درسته!؟ خب، RecyclerView انجام این کار را با استفاده از این سه ویژگی اصلی اش که ازشون نام بردیم، بسیار ساده میکند. این کار را انجام دهید:
و ما رفتار RecyclerView را با این کار شبیه به یک grid می کنید، یا این کد زیر:
جهت افزودن انیمه-animate (متحرک شدن) برای ورود یا خروج Child View ها.
3- تعریف و ویژگی ها.
یه RecyclerView چیزی نیست جز یک ViewGroup ساده که ScrolView را پیاده سازی می کند. چیزی که RecyclerView را جادویی می کند، توانایی هایش در مدیریت View های داخل آن است.
RecyclerView
RecyclerView یک View را با recycle یا scrape کردن آن مدیریت می کند. یک View که recycle شده است، view ای می باشد که قبلا inflate شده است و می توان آن را کش (cache) کرد تا با یا بدون bind کردن داده های دیگر مجدد استفاده شود.
Scrap view
Scrap view از سوی دیگر یک view ای می باشد که از layout در زمان ایجاد detach شده است. در موردش به عنوان یه View استاتیک فکر کنید. حال اگر نیازی بهش باشد، RecyclerView از آن با یا بدون data binding استفاده خواهد کرد. سودی که Scrap view ارائه می دهد، این است که ما می توانیم در سیستم یک view داشته باشیم اما هیچ سرباری روی کارایی سیستم د رزمانی که از آن view استفاده نمی شود، ندارد.
مبنای معماری RecyclerView مشابه دیگر VirewGroup ها می باشد (یادتان باشه که یه ViewGroup هست.) ویژگی های خاصی که همارهش هست عبارتند از reverseLayout، fastScrollingEnabled، layoutManager و stackFromEnd.
4- LayoutManager چیست؟
LayoutManager قلب و روح یک recyClerView به حساب می آید. این مسئولیت را دارد تا به recyclerView بگوید که چه زمانی باید یک Child view را recycle کند (هر وقت از محدوده صفحه خارج شد). بدون این، recyclerView نمی تواند تشخیص دهد که چه نوع layout هایی قرار است که برای قرار گرفتن روی صفحه نمایش پشتیبانی شوند، یک linear layout باشه یا یک grid با spans یا اینکه این grid layout یک stagged layout هست که برایش نگه داشتن view ها در یک ردیف با ارتفاع یکسان قابل قبول نیست.
ایده پایه پشت LayoutManager این بوده که قابلیت تغییر Layout از مجموعه داده مشابه به صورت داینامیک با تنها یک اپلیکیشن setter را ممکن سازد.
3 تا layoutManager برای recyclerView در دسترس است:
- LinearLayoutManager: برای مدیریت LinearLayout نسبتا ساده (عمودی یا افقی)
- GridLayoutManager: برای ایجاد یا مدیریت grid Layout که دارای spans است (ستون ها)
- StaggeredLayoutManager: برای مدیریت staggered Layout شبیه اسکرین شات بالایی که گذاشته شده است.(اولین پنجره)
در مورد LayoutManager بعدا در بلاگ بیشتر صحبت خواهم کرد
5- Recycler Adapter
مهمترین قسمت از کل معماری RecyclerView همین Adapter هست. یک RecyclerView Adapter شبیه باقی adapter ها مسئولیت bind کردن مجموعه داده به View هایی که در پنجره باید نمایش داده بشوند را دارد. یک adapte عمومی، اساسا فقط یک iterator هست که محدودیت هایش را زا getCount() که معمولا وابسته به سایز مجموعه داده است می گیرد و view های جدید را می سازد و داده ها را از مجموعه داده های مختلف به آنها چه زمانی باید از GLMM استفاده کنم؟ bind می کند. ListView یا ViewPager از همین نوع adapter استفاده می کنند. از سوی دیگر RecyclerView از سیستم پیچیده تری برای bind کردن داده و مدیریت view ها استفاده می کند.
همانطور که در بالا گفته شد، RecyclerView به صورت پیشفرض از ViewHolders استفاده می کند. بنابراین Recycler adapter به جای ایجاد view ها ، viewHolder ها را می سازد که view های inflate شده را نگه می دارد. پس از ایجاد، ViewHolder در cache (حافظه پنهان) قرار داده شده و اگر نیاز باشد میتوان ازش استفاده مجدد کرد
چیزی که نیازهست در ذهنمان نگه داریم، این هست که viewHolder بر مبنای نوع itemview ایجاد شده یا مرجع داده می شود، نه بر حسب موقعیت (position)، بنابراین با یان کار مزایایی اضافه می شود مانند برای adpater مشاهده view ها جهت استفاده مجدد آسانتر می شود و میتوان view های ناهمگونی (heterogeneous)را با فراهم کردن view type های جدید به RecyclerView اضافه کرد.
زمانی که با RecyclerView Adapter کار می کنیم نیاز هست که این 4 اصطلاح زیر را بلد باشیم:
- ItemViewType : یک viewType مبتنی بر position برای Reuse یا recycle کردن view ها (مجبور لغات تخصصی را با لاتین به کار ببرم که برای برنامه نیوس های فهم و درکشون راحت تر باشه)
- ViewHolder: کلاس والد که layout inflation و استفاده از vhild view را مدیریت می کند.onCreateViewHolder (کد بالایی) ایجاد یا recycle کردن ViewHolder را مدیریت می کند و view inflation را بر مبنای itemViewType بازگشت داده شده(returned) توسط getItemViewType(…) نیز مدیریت می کند.
- Bind ViewHolder: داده را به Child view از ViewHolder مورد نظر bind می کند. متور عمومی (public method) با نام onBindViewHolder(…) مسئولیت bind کردن viewholder ها را دارد.
این پر هزینه ترین قسمت از بلاک کد مربوط به ل Adapter می باشد، چون که این هر زمان یک view را جه نمایش روی صفحه نمایش فراخوانی خواهد کرد و د رنتیجه باید مراقبت های ویژه ای برا اطمینان از عملکر مناسب و کارایی سیستم نیز انجام دهد. یکی از آن معبارهای ویژه این است که نگذارد کدهای چه زمانی باید از GLMM استفاده کنم؟ slow درونش اضافه شود، مانند interfaceها (برای مثال رویداد onClick).
- Count: متودی که چندرین بار فراخوانی می شود تا سایز محدودیت لیست را بدست بیاورد. این متود به طور کلی سایز مجموعه داده مورد استفاده برای adapter را بر می گرداند(return).
6- تغییر داده ها به صورت داینامیک (اطلاع رسانی)
این در واقع هیچ ویژگی مستقلی از RecyclerView نمی باشد، بلکه به وسیله RecyclerView انجام می شود.
زمانی که در جستجوی داده بیشتر یا آپدیت یا حذف داده های در حال حاضر هست. ما نیاز داریم تا به adapter اطلاع بدیم که داده هایمان تغییر کرده یا بروز شده اند. چندین روش برای RecyclerView وجود دارد. Adapter برای اطلاع رسانی تغییرات همانند notifyDataSetChanged() یا notifyItemInserted(…) یا notifyItemRangeChanged(…). در مودرشون در آینده ان شاالله صحبت خواهد شد.
7-به کجا رسیدیم؟
من فقط در مورد RecyclerView یه سری اطلاعات رو داخل این مطلب در اختیارتون گذاشتم و اینکه چطور بهتر از ListView میشه به راحتی ازش استفاده کرد.
یه نکته اصلی این هست که با افزایش ویژگی ها، پیچیدگی نیز افزایش پیدا می کند، که این برای RecyclerView نیز صادق هست. ما ویژگی ها خوبی رو به دست میاریم که کارایی را بهبود می بخشه. اما در کنارش به مقدار کد بیشتری نیز نیاز داریم که شامل کدهای منطقی سیستمی نیز می شود. برای مثال اضافه کردن Header به یک ListView چقدرساده است. ولی در کنارش همین کار برای RecyclerView کلی کار نیاز داره.
نکته آخر
نیز این هست که درسته RecyclerView خیلی خوب و کاربردیه، اما برای هر موردی (use case) نباید از آن استفاده کرد. وقتی که مجموعه داده هایمان کوچک است و زیاد تغییر نمی کنند بهتر است از ListView استفاده کنیم. چون هم راحت تر است و هم منابع سیستمی را کمتر اشغال می کند. RecyclerView بهتره برای لیست ها با داده های بسیار زیاد که دارای View type های متفاوتی است و کاربر نیاز به اسکرول کردن زیاد دارد استفاده شود.
ان شاالله در چند پست دیگه آموزش استفاده کاربردی از RecyclerView رو نیز خواهم گذاشت.
شبکه Golem و ارز دیجیتال GLM
Golem راهی برای سریع تر کردن تراکنش ها
Golem بستری است که کاربران در آن می توانند به صورت غیرمتمرکز و همتا به همتا به خرید و فروش و انتقال ارز های دیجیتال بپردازند.
ارز دیجیتال Golem به عنوان یکی از اولین پروژههای ساخته شده بر روی اتریوم، نوعی ابررایانه است که میتواند خریداران و فروشندگان را برای انواع محاسبات، از جمله رندر CGI (یک زبان برنامه نویسی پیشرفته با قابلیت ایجاد صفحات پویا)، هوش مصنوعی و استخراج ارزهای دیجیتال و سایر وظایف، به هم متصل کند.
نرم افزار Golem برای تسهیل این مبادله ساخته شده است و کاربرانی را که منابع لازم برای انجام پروژه ها را ندارند با کسانی که منابعی برای صرفه جویی در اختیار دارند مرتبط می کند. و در ازای آن، به کسانی که منابع شبکه گولم را تامین می کنند، رمز ارز GLM ، توکن بومی Golem ، تعلق می گیرد.
به این ترتیب، شبکه ی گولم یک جایگزین مناسب برای کاربرانی است که به دنبال کار محاسباتی هستند و جالب این است که کاربران خودشان بر این شبکه نظارت دارند.
چه کسی ارز دیجیتال Golem را ایجاد کرد؟
موسسان شبکه ی Golem توسط الکساندرا اسکرزیپچاک، آندری رگولسکی، جولیان زاویستوفسکی و پیوتر جانیوک در سال 2016 تأسیس شد.
در آن سال، تیم گولم 82 درصد از عرضه GLM را به عموم مردم فروخت و 820000 اتریوم به دست آورد. (تقریباً 8.6 میلیون دلار در آن زمان).
Golem چگونه کار می کند؟
کاربران شبکه ی گولم به سه دسته تقسیم می شوند:
- درخواست کنندگان که تمایل دارند در این شبکه بتوانند به منابع محاسباتی پیشرفته ای دسترسی داشته باشند.
- تامین کنندگان که زیر ساخت های این شبکه را تامین می کنند.
- توسعه دهندگان که به بهبود شبکه کمک می کنند.
در ابتدای مقاله درباره ی اهدای توکن GLM به تامین کنندگان و توسعه دهندگان به عنوان پاداش صحبت کردیم.
نرم افزار Golem درخواست ها را محاسبه کرده و کاربران مختلفی که به شبکه دسترسی دارندرا به هم متصل می کند.
تراکنشها زمانی شروع میشوند که شخصی در بازار منابع محاسباتی (که در اصطلاح Golem به عنوان «درخواستکننده» شناخته میشود) منابعی را با استفاده از آنچه «الگوی وظیفه یا task template» نامیده میشود، درخواست میکند.
کاربران با مراجعه به شبکه ی گولم می توانند در سریع ترین زمان ممکن فرایند محاسباتی خود را به ثمر برسانند این فرایند محاسباتی می تواند شامل خرید و فروش یا انتقال و یا هر مورد محاسباتی دیگر باشد.
ساختار شبکه ی Golem
شبکه ی گولم برای اجرای درخواست کاربران به یک منطق محاسباتی ویژه نیاز دارد که ساختار این شبکه را شکل می دهد و شامل دستورالعمل های ویژه ای می باشد از جمله :
- کد اصلی باید اجرا شود.
- کد به اجزای کوچکتری تقسیم می شود و به نود های مختلف شبکه ارسال می شود.
- و در نهایت نتایج حاصل از تجزیه و تحلیل نود های مختلف اجماع می شود.
درخواستکنندگان میتوانند از یک الگوی موجود که قبلاً برای شبکه ایجاد شده است استفاده کنند یا الگوی خود را ایجاد کنند. هنگامی که یک درخواست کننده درخواستی را ارسال می کند، شبکه Golem به دنبال اجرای برنامه ای جهت رسیدگی به آن خواهد بود.
پس از تکمیل وظایف فرعی که به نود ها سپرده شده بود، نتایج حاصل از آن ها از مرحله تأیید عبور می کنند تا اطمینان حاصل شود که به درستی تکمیل شده اند.
پس از دریافت، درخواست کنندگان مقدار معینی از رمز ارز GLM را به قرارداد ارسال می کنند تا به تامین کنندگان پرداخت شود.
سیستم اعتبارسنجی در شبکه ی گولم
پس از تکمیل یک درخواست، Golem از یک سیستم اعتبارسنجی برای رتبه بندی خریداران و فروشندگان استفاده می کند.
استفاده از این سیستم اعتبارسنجی مزایای زیادی دارد از جمله :
- شناسایی نود های مخرب
- ارائه ی یک معیار ارزیابی برای رسیدگی به درخواست ها
برای درخواستکنندگان، سیستم اعتبارسنجی بر بهموقع بودن پرداختها و بررسی وجود خطاهای احتمالی در محاسبات، نظارت میکند.
و در این سیستم، ارائه دهندگان بر اساس توانایی آنها در محاسبه صحیح یک درخواست رتبه بندی می شوند.
گولم پروژه ای بر بستر اتریوم
تیم Golem تصمیم گرفت نرمافزار خود را روی اتریوم اجرا کند تا پرداختها بر روی بلاک چین تسویه شود. علاوه بر این، گولم از مکانیزم اجماع اتریوم، برای استقرار، اجرای وظایف و اعتبارسنجی این تراکنشها استفاده میکند.
ایده پشت این موضوع این است که تیم امیدوار است که شبکه اتریوم در نهایت مقیاسپذیرتر شود و در نتیجه کارآمدتر شود و در عین حال توانایی پردازش پرداختهای خرد را نیز شامل شود.
در حال حاضر دوبرنامه برای شبکه ی گولم موجود است :
- Clay Golem
- Golem Unlimited
Clay Golem نرم افزاری است که توسط یک ماشین اجرا می شود در حالی که در Golem Unlimited چندین نود درگیر می باشند. بنابراین Golem Unlimited نرمافزاری است که میتواند توسط شرکتها یا کاربرانی که درخواست های زیادی دارند، اجرا شود.
توکن GLM
توکن بومی پروژه ی Golem در ابتدا رمز ارز GNT نام داشت اما در ادامه به جهت نیاز پروژه به ویژگی های لایه ی دوم اتریوم و شبکه ERC20 لازم بود که توکنی جدید برای این پروژه به جای GNT به وجود بیاید.
در حال حاضر توکن بومی پروژه ی Golem رمز ارز GLM نام دارد.
این توکن با قیمتی معادل 0.3962 دلار در رتبه ی 138 وب سایت کوین مارکت کپ قرار دارد.
نکته ی حائز اهمیت درباره ی این توکن این است که کل تعداد این توکن ها که در حال حاضر در گردش است یک میلیارد می باشد.
- Max Supply : 1.000.000.000
- Total Supply : 1.000.000.000
- Circulating supply : 1.000.000.000
مارکت کپ این توکن تقریبا 350 میلیون دلار می باشد.
ارز دیجیتال GLM را از کجا خریداری کنیم؟
شما می توانید توکن GLM را که مختص شبکه ی گولم () می بشاد را از صرافی هتای معتبری خریداری کنید.
برخی از این صرافی ها عبارتند از :
چرا توکن GLM ارزشمند است؟
ارز رمزنگاری شده GLM ارزش خود را از کاربرد آن در شبکه Golem به دست میآورد، زیرا روش پرداخت ترجیحی در شبکه است.
این بدان معناست که متقاضیان باید برای اجاره منابع محاسباتی، GLM را خریداری و خرج کنند و در مقابل ارائه دهندگان هم باید GLM را به عنوان کارمزد محاسبات خود بپذیرند.
گولم از بلاک چین اتریوم برای پردازش تراکنشهای GLM بین درخواستکنندگان و ارائهدهندگان استفاده میکند.
علاوه بر این، مانند بسیاری از ارزهای دیجیتال دیگر، عرضه توکنهای GLM محدود است. طبق قوانین شبکه، تنها 1 میلیارد GLM وجود خواهد داشت.
دیدگاه خود را به ما بگویید لغو پاسخ
تیم سرمایه دیجیتال در سال ۹۷ به طور رسمی شروع به فعالیت گسترده در حوزه تحلیل بازار های مالی ، آموزش تحلیل تکنیکال ، آموزش ترید و سرمایه گذاری ، آموزش های رایگان در حوزه رمز ارزها می کند .
دیدگاه شما