You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ML-For-Beginners/translations/ta/6-NLP/4-Hotel-Reviews-1
localizeflow[bot] 081f029c0d
chore(i18n): sync translations with latest source changes (chunk 1/1, 300 changes)
7 months ago
..
solution chore(i18n): sync translations with latest source changes (chunk 1/1, 300 changes) 7 months ago
README.md chore(i18n): sync translations with latest source changes (chunk 1/1, 300 changes) 7 months ago
assignment.md chore(i18n): sync translations with latest source changes (chunk 1/1, 300 changes) 7 months ago
notebook.ipynb 🌐 Update translations via Co-op Translator 10 months ago

README.md

ஹோட்டல் விமர்சனங்களுடன் உணர்ச்சி பகுப்பாய்வு - தரவுகளை செயலாக்குதல்

இந்த பகுதியில், நீங்கள் முந்தைய பாடங்களில் உள்ள தொழில்நுட்பங்களைப் பயன்படுத்தி ஒரு பெரிய தரவுத்தொகுப்பின் ஆராய்ச்சி தரவுப் பகுப்பாய்வைச் செய்வீர்கள். பல்வேறு பத்திகளின் பயன்தன்மையைப் பற்றிய நல்ல புரிதலைப் பெற்ற பிறகு, நீங்கள் கற்றுக்கொள்வீர்கள்:

  • தேவையற்ற பத்திகளை எப்படி நீக்குவது
  • உள்ளமைந்த பத்திகளை அடிப்படையாகக் கொண்டு புதிய தரவுகளை எப்படி கணக்கிடுவது
  • இறுதி சவாலில் பயன்படுத்தும் வகையில் பெறப்பட்ட தரவுத்தொகுப்பை எப்படி சேமிக்க வேண்டும்

பாடத்திற்கு முந்தைய வினாடி வினா

அறிமுகம்

இப்போது வரை, உரை தரவுகள் எண் வகை தரவுகளிலிருந்து எவ்வாறு மாறுபடுகின்றன என்பதைப் பற்றி நீங்கள் கற்றுக்கொண்டுள்ளீர்கள். மனிதனால் எழுதப்பட்ட அல்லது பேசப்பட்ட உரை என்றால், அதில் முறை மற்றும் அடிக்கடி பயன்படுத்தப்படும் வார்த்தைகள், உணர்ச்சி மற்றும் அர்த்தத்தை கண்டறிய முடியும். இந்தப் பாடம் உங்களை ஒரு உண்மையான சவாலுடன் கூடிய ஒரு உண்மையான தரவுத்தொகுப்புக்குள் அழைத்துச் செல்கிறது: ஐரோப்பாவில் 515K ஹோட்டல் விமர்சனங்கள் தரவுகள் மற்றும் CC0: பொது டொமைன் உரிமம் உடன் சேர்க்கப்பட்டுள்ளது. இது Booking.com இல் இருந்து பொது ஆதாரங்களில் இருந்து சேகரிக்கப்பட்டது. இந்த தரவுத்தொகுப்பின் உருவாக்குனர் ஜியாஷென் லியூ.

தயாரிப்பு

உங்களுக்கு தேவையானவை:

ஆராய்ச்சி தரவுப் பகுப்பாய்வு

இந்த சவால், உணர்ச்சி பகுப்பாய்வு மற்றும் விருந்தினரின் மதிப்பீட்டு மதிப்புகளைப் பயன்படுத்தி ஒரு ஹோட்டல் பரிந்துரை போட்டை உருவாக்குவதை நோக்கமாகக் கொண்டுள்ளது. நீங்கள் பயன்படுத்தும் தரவுத்தொகுப்பில் 6 நகரங்களில் உள்ள 1493 வெவ்வேறு ஹோட்டல்களின் விமர்சனங்கள் அடங்கும்.

Python, ஹோட்டல் விமர்சனங்களின் தரவுத்தொகுப்பு மற்றும் NLTK இன் உணர்ச்சி பகுப்பாய்வைப் பயன்படுத்தி, நீங்கள் கண்டறிய முடியும்:

  • விமர்சனங்களில் அதிகமாக பயன்படுத்தப்படும் வார்த்தைகள் மற்றும் சொற்றொடர்கள் என்ன?
  • ஒரு ஹோட்டலை விவரிக்கும் அதிகாரப்பூர்வ டேக்கள் விமர்சன மதிப்பீடுகளுடன் தொடர்புடையதா? (எ.கா. இளம் குழந்தைகளுடன் குடும்பம் என்ற டேக் கொண்ட ஹோட்டலுக்கு எதிர்மறையான விமர்சனங்கள் அதிகமாக உள்ளதா? இது தனிப்பட்ட பயணிகளுக்கு சிறந்தது என்பதை குறிக்கிறதா?)
  • NLTK உணர்ச்சி மதிப்பீடுகள் ஹோட்டல் விமர்சகரின் எண் மதிப்பீட்டுடன் 'ஒத்துப்போகிறதா'?

தரவுத்தொகுப்பு

நீங்கள் பதிவிறக்கம் செய்து உள்ளூர் சேமித்துள்ள தரவுத்தொகுப்பை ஆராய்வோம். அந்த கோப்பை VS Code அல்லது Excel போன்ற எடிட்டரில் திறக்கவும்.

தரவுத்தொகுப்பில் உள்ள தலைப்புகள் பின்வருமாறு உள்ளன:

Hotel_Address, Additional_Number_of_Scoring, Review_Date, Average_Score, Hotel_Name, Reviewer_Nationality, Negative_Review, Review_Total_Negative_Word_Counts, Total_Number_of_Reviews, Positive_Review, Review_Total_Positive_Word_Counts, Total_Number_of_Reviews_Reviewer_Has_Given, Reviewer_Score, Tags, days_since_review, lat, lng

இவை கீழே கொடுக்கப்பட்டுள்ளவாறு குழுவாக பிரிக்கப்பட்டுள்ளன:

ஹோட்டல் பத்திகள்
  • Hotel_Name, Hotel_Address, lat (அட்சரேகை), lng (நெடுகோடு)
    • lat மற்றும் lng ஐப் பயன்படுத்தி, ஹோட்டல் இடங்களை காட்டும் வரைபடத்தை Python மூலம் வரைந்து காட்டலாம் (எதிர்மறை மற்றும் நேர்மறை விமர்சனங்களுக்கு வண்ண குறியீடு செய்யலாம்)
    • Hotel_Address எங்களுக்கு தெளிவாக பயனுள்ளதாக இல்லை, மேலும் எளிதாக வரிசைப்படுத்த மற்றும் தேட ஒரு நாட்டுடன் அதை மாற்றுவோம்

ஹோட்டல் மெட்டா-விமர்சன பத்திகள்

  • Average_Score

    • தரவுத்தொகுப்பு உருவாக்குனரின் படி, இந்த பத்தி கடந்த ஆண்டில் உள்ள சமீபத்திய கருத்து அடிப்படையில் கணக்கிடப்பட்ட ஹோட்டலின் சராசரி மதிப்பெண் ஆகும். இது ஒரு விசித்திரமான முறையாகத் தோன்றுகிறது, ஆனால் இது சேகரிக்கப்பட்ட தரவாகும், எனவே நாங்கள் அதை தற்போதைக்கு அப்படியே எடுத்துக்கொள்வோம்.

    இந்த தரவின் பிற பத்திகளை அடிப்படையாகக் கொண்டு சராசரி மதிப்பெண்ணை கணக்கிட வேறு வழி ஒன்றை நீங்கள் யோசிக்க முடியுமா?

  • Total_Number_of_Reviews

    • இந்த ஹோட்டல் பெற்றுள்ள மொத்த விமர்சனங்களின் எண்ணிக்கை - இது தரவுத்தொகுப்பில் உள்ள விமர்சனங்களை குறிக்கிறதா என்பதை (சில குறியீடுகளை எழுதாமல்) தெளிவாகக் கூற முடியாது.
  • Additional_Number_of_Scoring

    • இது ஒரு மதிப்பீடு அளிக்கப்பட்டது என்றாலும், விமர்சகர் எந்த நேர்மறை அல்லது எதிர்மறை விமர்சனத்தையும் எழுதவில்லை என்பதைக் குறிக்கிறது

விமர்சன பத்திகள்

  • Reviewer_Score
    • இது குறைந்தபட்சம் 1 தசம புள்ளி கொண்ட எண் மதிப்பாகும், குறைந்தபட்ச மதிப்பான 2.5 மற்றும் அதிகபட்ச மதிப்பான 10 இடையே இருக்கும்.
    • ஏன் 2.5 குறைந்தபட்ச மதிப்பாக உள்ளது என்பது விளக்கப்படவில்லை.
  • Negative_Review
    • ஒரு விமர்சகர் எதுவும் எழுதவில்லை என்றால், இந்த புலத்தில் "No Negative" இருக்கும்.
    • ஒரு விமர்சகர் எதிர்மறை விமர்சன பத்தியில் நேர்மறை விமர்சனத்தை எழுதலாம் என்பதை கவனிக்கவும் (எ.கா. "இந்த ஹோட்டலில் எந்த தவறும் இல்லை").
  • Review_Total_Negative_Word_Counts
    • அதிக எதிர்மறை சொல் எண்ணிக்கை குறைந்த மதிப்பீட்டை குறிக்கிறது (உணர்ச்சியை சரிபார்க்காமல்).
  • Positive_Review
    • ஒரு விமர்சகர் எதுவும் எழுதவில்லை என்றால், இந்த புலத்தில் "No Positive" இருக்கும்.
    • ஒரு விமர்சகர் நேர்மறை விமர்சன பத்தியில் எதிர்மறை விமர்சனத்தை எழுதலாம் என்பதை கவனிக்கவும் (எ.கா. "இந்த ஹோட்டலில் எந்த நல்லதும் இல்லை").
  • Review_Total_Positive_Word_Counts
    • அதிக நேர்மறை சொல் எண்ணிக்கை அதிக மதிப்பீட்டை குறிக்கிறது (உணர்ச்சியை சரிபார்க்காமல்).
  • Review_Date மற்றும் days_since_review
    • ஒரு விமர்சனத்திற்கு புதியதா அல்லது பழையதா என்பதை அளவிடலாம் (பழைய விமர்சனங்கள் புதியவற்றைப் போல துல்லியமாக இருக்காது, ஏனெனில் ஹோட்டல் மேலாண்மை மாறியிருக்கலாம் அல்லது புதுப்பிப்பு செய்யப்பட்டிருக்கலாம் அல்லது ஒரு நீச்சல் குளம் சேர்க்கப்பட்டிருக்கலாம்).
  • Tags
    • இவை ஒரு விமர்சகர் தங்களை விவரிக்கத் தேர்ந்தெடுக்கக்கூடிய குறுகிய விளக்கங்கள் (எ.கா. தனியாக அல்லது குடும்பத்துடன்), அவர்கள் பெற்ற அறை வகை, தங்கிய நாட்களின் எண்ணிக்கை மற்றும் விமர்சனம் சமர்ப்பிக்கப்பட்ட சாதன வகை ஆகியவை.
    • துரதிர்ஷ்டவசமாக, இந்த டேக்களைப் பயன்படுத்துவது சிக்கலானது, அவற்றின் பயன்தன்மையைப் பற்றிய கீழே உள்ள பிரிவை சரிபார்க்கவும்.

விமர்சகர் பத்திகள்

  • Total_Number_of_Reviews_Reviewer_Has_Given
    • இது பரிந்துரை மாதிரியில் ஒரு காரணியாக இருக்கலாம், உதாரணமாக, நூற்றுக்கணக்கான விமர்சனங்களை கொண்ட அதிக விமர்சகர்கள் நேர்மறை விட எதிர்மறையாக இருக்க வாய்ப்பு அதிகம் என்பதை நீங்கள் தீர்மானிக்க முடிந்தால். இருப்பினும், குறிப்பிட்ட விமர்சனத்தின் விமர்சகர் ஒரு தனித்துவமான குறியீடு மூலம் அடையாளம் காணப்படவில்லை, எனவே விமர்சனங்களின் தொகுப்புடன் இணைக்க முடியாது. 100 அல்லது அதற்கு மேற்பட்ட விமர்சனங்களைக் கொண்ட 30 விமர்சகர்கள் உள்ளனர், ஆனால் இது பரிந்துரை மாதிரிக்கு எவ்வாறு உதவ முடியும் என்பதைப் பார்க்க கடினமாக உள்ளது.
  • Reviewer_Nationality
    • சிலர் சில தேசியத்தவர்களுக்கு நேர்மறை அல்லது எதிர்மறை விமர்சனங்களை வழங்க அதிக வாய்ப்பு உள்ளது என்று நினைக்கலாம். உங்கள் மாதிரிகளில் இப்படியான கருத்துக்களை உருவாக்குவதில் கவனமாக இருங்கள். இவை தேசிய (மற்றும் சில சமயங்களில் இன) கற்பனைகள், மேலும் ஒவ்வொரு விமர்சகரும் அவர்களின் அனுபவத்தின் அடிப்படையில் விமர்சனத்தை எழுதிய தனிநபர்களாக இருந்தனர். அவர்கள் தேசியத்துவம் விமர்சன மதிப்பீட்டின் காரணம் என்று நினைப்பது நியாயமாக்க முடியாதது.
உதாரணங்கள்
சராசரி மதிப்பெண் மொத்த விமர்சனங்கள் விமர்சகர் மதிப்பெண் எதிர்மறை
விமர்சனம்
நேர்மறை விமர்சனம் டேக்கள்
7.8 1945 2.5 இது தற்போது ஒரு ஹோட்டல் அல்ல, ஆனால் ஒரு கட்டுமான தளம். நான் ஒரு நீண்ட பயணத்திற்குப் பிறகு ஓய்வெடுக்கும்போது மற்றும் அறையில் வேலை செய்யும்போது, ​​காலையில் மற்றும் முழு நாளும் ஏற்றுக்கொள்ள முடியாத கட்டுமான சத்தத்தால் பயமுறுத்தப்பட்டேன். மக்கள் முழு நாளும் வேலை செய்தனர், அதாவது பக்கத்து அறைகளில் ஜாக்ஹாமர்களுடன். நான் ஒரு அறை மாற்றத்தை கேட்டேன், ஆனால் அமைதியான அறை கிடைக்கவில்லை. விஷயங்களை மேலும் மோசமாக்க, நான் அதிகமாக கட்டணம் வசூலிக்கப்பட்டது. நான் மிகவும் தாமதமாக வெளியேறினேன், ஏனெனில் நான் அதிகாலை விமானத்தை விட்டு வெளியேற வேண்டியிருந்தது, மேலும் ஒரு பொருத்தமான பில் கிடைத்தது. ஒரு நாளுக்குப் பிறகு, ஹோட்டல் முன்பதிவு செய்யப்பட்ட விலையை மீறி மற்றொரு கட்டணத்தை என் ஒப்புதலின்றி செய்தது. இது ஒரு மோசமான இடம். இங்கே முன்பதிவு செய்து உங்களை தண்டிக்க வேண்டாம். எதுவும் இல்லை. மோசமான இடம். விலகி இருங்கள் வணிக பயணம் ஜோடி ஸ்டாண்டர்ட் டபுள் அறை 2 இரவுகள் தங்கியுள்ளனர்

இந்த விமர்சகர் இந்த ஹோட்டலில் மகிழ்ச்சியான தங்குமிடம் அனுபவிக்கவில்லை என்பதை நீங்கள் காணலாம். ஹோட்டலுக்கு 7.8 என்ற நல்ல சராசரி மதிப்பெண் மற்றும் 1945 விமர்சனங்கள் உள்ளன, ஆனால் இந்த விமar்சகர் 2.5 மதிப்பெண் அளித்து, அவர்களின் தங்குமிடம் எவ்வளவு மோசமாக இருந்தது என்பதைப் பற்றி 115 வார்த்தைகளை எழுதியுள்ளார். Positive_Review பத்தியில் அவர்கள் எதுவும் எழுதவில்லை என்றால், எந்த நேர்மறை அம்சமும் இல்லை என்று நீங்கள் ஊகிக்கலாம், ஆனால் அவர்கள் எச்சரிக்கையாக 7 வார்த்தைகளை எழுதியுள்ளனர்.

டேக்கள்

மேலே குறிப்பிடப்பட்டுள்ளபடி, முதலில், தரவுகளை வகைப்படுத்த Tags ஐப் பயன்படுத்தும் யோசனை பொருத்தமாகத் தோன்றுகிறது. துரதிர்ஷ்டவசமாக, இந்த டேக்கள் ஒரே மாதிரியாக இல்லை, அதாவது ஒரு குறிப்பிட்ட ஹோட்டலில் Single room, Twin room, மற்றும் Double room போன்ற விருப்பங்கள் இருக்கலாம், ஆனால் மற்றொரு ஹோட்டலில், அவை Deluxe Single Room, Classic Queen Room, மற்றும் Executive King Room ஆக இருக்கலாம்.

  1. அனைத்து சொற்களையும் ஒரே தரநிலைக்கு மாற்ற முயற்சிக்கலாம், இது மிகவும் கடினம், ஏனெனில் ஒவ்வொரு வழியிலும் மாற்றம் செய்யும் பாதை என்ன என்பதை தெளிவாகக் கூற முடியாது.
  2. ஒரு NLP அணுகுமுறையை எடுத்து, ஒவ்வொரு ஹோட்டலுக்கும் பொருந்தும் Solo, Business Traveller, அல்லது Family with young kids போன்ற சில சொற்களின் அடிக்கடி தோன்றும் எண்ணிக்கையை அளவிடலாம், மேலும் அதை பரிந்துரையில் உள்ளடக்கலாம்.
சராசரி ஹோட்டல் மதிப்பெண்

தரவுத்தொகுப்பில் சில விசித்திரமான அல்லது முரண்பாடுகள் உள்ளன, ஆனால் அவை உங்கள் மாதிரிகளை உருவாக்கும்போது நீங்கள் அவற்றை கவனத்தில் கொள்ள வேண்டும். இந்த ஹோட்டல்கள் ஒரு விலகல் (outlier) ஆக இருக்கக்கூடும், மற்றும் பெரும்பாலான மதிப்பீடுகள் பொருந்தலாம் (ஆனால் சில காரணங்களுக்காக சில மதிப்பீடுகள் பொருந்தாமல் இருக்கலாம்) என்ற சாத்தியத்தைக் கருத்தில் கொண்டு, அடுத்ததாக ஒரு சிறிய நிரலாக்கத்தை எழுதுவோம், தரவுத்தொகுப்பில் உள்ள மதிப்பீடுகளை ஆராய்ந்து, அவற்றின் சரியான பயன்பாட்டை (அல்லது பயன்பாட்டின்மையை) தீர்மானிக்க.

🚨 கவனிக்க வேண்டிய ஒரு குறிப்பை

இந்த தரவுத்தொகுப்புடன் வேலை செய்யும்போது, நீங்கள் உரையிலிருந்து ஏதாவது கணக்கிடும் நிரல்களை எழுதுவீர்கள், ஆனால் நீங்கள் உரையை நேரடியாக வாசிக்கவோ அல்லது பகுப்பாய்வு செய்யவோ தேவையில்லை. இது இயற்கை மொழி செயலாக்கத்தின் (NLP) சாராம்சம், ஒரு மனிதன் செய்யாமல் பொருள் அல்லது உணர்வை புரிந்துகொள்வது. ஆனால், சில நேரங்களில் நீங்கள் சில எதிர்மறை மதிப்பீடுகளை வாசிக்கலாம். நான் உங்களை அதை செய்ய வேண்டாம் என்று கேட்டுக்கொள்கிறேன், ஏனெனில் நீங்கள் அதை செய்ய தேவையில்லை. சில மதிப்பீடுகள் முட்டாள்தனமானவை அல்லது பொருத்தமற்றவை, உதாரணமாக "வானிலை சிறப்பாக இல்லை", இது ஹோட்டலின் கட்டுப்பாட்டுக்கு அப்பாற்பட்டது, அல்லது யாருக்கும் கட்டுப்படுத்த முடியாதது. ஆனால், சில மதிப்பீடுகளில் இருண்ட பக்கம் உள்ளது. சில நேரங்களில் எதிர்மறை மதிப்பீடுகள் இனவெறி, பாலினவெறி, அல்லது வயதுவெறி கொண்டதாக இருக்கலாம். இது துரதிர்ஷ்டவசமானது, ஆனால் பொதுவான இணையதளத்திலிருந்து சேகரிக்கப்பட்ட தரவுத்தொகுப்பில் எதிர்பார்க்கக்கூடியது. சில மதிப்பீடர்கள் நீங்கள் வெறுப்பாக, அசௌகரியமாக, அல்லது மனவருத்தமாக உணரக்கூடிய மதிப்பீடுகளை விடுகிறார்கள். உணர்வை அளவிட நிரல்களை பயன்படுத்துவது நல்லது, நீங்கள் நேரடியாக வாசித்து மனவருத்தம் அடைவதை விட. அதுவும், இது ஒரு சிறிய பகுதியே எழுதுகிறார்கள், ஆனால் அவர்கள் இருப்பது உண்மை.

பயிற்சி - தரவுத்தொகுப்பை ஆராய்வது

தரவுகளை ஏற்றுதல்

தரவுகளை கண்ணோட்டமாக ஆராய்வது போதுமானது, இப்போது நீங்கள் சில நிரல்களை எழுதுவீர்கள் மற்றும் சில பதில்களை பெறுவீர்கள்! இந்த பகுதி pandas நூலகத்தை பயன்படுத்துகிறது. உங்கள் முதல் பணியாக, நீங்கள் CSV தரவுகளை ஏற்றவும் வாசிக்கவும் முடியும் என்பதை உறுதிப்படுத்த வேண்டும். pandas நூலகத்தில் ஒரு வேகமான CSV ஏற்றும் செயலி உள்ளது, மற்றும் முடிவுகள் முந்தைய பாடங்களில் போல dataframe-ல் வைக்கப்படும். நாம் ஏற்றும் CSV-ல் அரை மில்லியனுக்கும் மேற்பட்ட வரிசைகள் உள்ளன, ஆனால் 17 மட்டுமே நெடுவரிசைகள் உள்ளன. pandas உங்களுக்கு dataframe-ஐ தொடர்பு கொள்ள பல சக்திவாய்ந்த வழிகளை வழங்குகிறது, அதில் ஒவ்வொரு வரிசையிலும் செயல்பாடுகளை செய்யும் திறனும் அடங்கும்.

இப்பாடத்தில் இங்கிருந்து, சில நிரல்குறிப்புகள் மற்றும் அவற்றின் விளக்கங்கள் மற்றும் முடிவுகள் என்ன பொருள் கொண்டது என்பதற்கான விவாதம் இருக்கும். உங்கள் நிரலுக்கு notebook.ipynb ஐ பயன்படுத்தவும்.

நாம் பயன்படுத்தும் தரவுத்தொகுப்பை ஏற்றுவதில் தொடங்குவோம்:

# Load the hotel reviews from CSV
import pandas as pd
import time
# importing time so the start and end time can be used to calculate file loading time
print("Loading data file now, this could take a while depending on file size")
start = time.time()
# df is 'DataFrame' - make sure you downloaded the file to the data folder
df = pd.read_csv('../../data/Hotel_Reviews.csv')
end = time.time()
print("Loading took " + str(round(end - start, 2)) + " seconds")

தரவுகள் ஏற்றப்பட்டவுடன், அதில் சில செயல்பாடுகளை செய்யலாம். உங்கள் நிரலின் அடுத்த பகுதிக்காக இந்த நிரலை மேல் பகுதியில் வைத்திருங்கள்.

தரவுகளை ஆராய்வது

இந்தக் கட்டத்தில், தரவுகள் ஏற்கனவே சுத்தமாக உள்ளது, அதாவது இது வேலை செய்ய தயாராக உள்ளது, மற்றும் ஆங்கில எழுத்துக்களை மட்டுமே எதிர்பார்க்கும் அல்காரிதம்களை தடுமாறச் செய்யக்கூடிய பிற மொழிகளில் எழுத்துக்கள் இல்லை.

நீங்கள் ஆரம்ப செயலாக்கம் தேவைப்படும் தரவுகளுடன் வேலை செய்ய வேண்டியிருக்கலாம், ஆனால் இந்த முறை அவசியமில்லை. நீங்கள் செய்ய வேண்டியிருந்தால், ஆங்கிலமல்லாத எழுத்துக்களை எப்படி கையாளுவீர்கள்?

தரவுகள் ஏற்றப்பட்டவுடன், நீங்கள் அதை நிரல்களுடன் ஆராய முடியும் என்பதை உறுதிப்படுத்த ஒரு நிமிடம் எடுத்துக்கொள்ளுங்கள். Negative_Review மற்றும் Positive_Review நெடுவரிசைகளில் கவனம் செலுத்த விரும்புவது மிகவும் எளிது. அவை உங்கள் NLP அல்காரிதம்களுக்கு இயற்கை உரையால் நிரப்பப்பட்டுள்ளன. ஆனால் காத்திருக்கவும்! NLP மற்றும் உணர்வை ஆராய்வதற்கு முன், pandas மூலம் தரவுத்தொகுப்பில் கொடுக்கப்பட்ட மதிப்பீடுகள் நீங்கள் கணக்கிடும் மதிப்பீடுகளுடன் பொருந்துகிறதா என்பதை உறுதிப்படுத்த கீழே உள்ள நிரலை பின்பற்ற வேண்டும்.

Dataframe செயல்பாடுகள்

இந்த பாடத்தில் முதல் பணியாக, தரவுத்தொகுப்பை (மாற்றாமல்) ஆராயும் நிரலை எழுதுவதன் மூலம் பின்வரும் உறுதிப்படுத்தல்களை சரிபார்க்க வேண்டும்.

பல நிரலாக்க பணிகளுக்கு பல வழிகள் உள்ளன, ஆனால் நல்ல ஆலோசனை என்னவென்றால், நீங்கள் அதை எளிதாகவும், சிக்கலற்றதாகவும் செய்ய வேண்டும், குறிப்பாக நீங்கள் எதிர்காலத்தில் இந்த நிரலை மீண்டும் பார்க்கும்போது புரிந்துகொள்ள எளிதாக இருக்கும். Dataframe-களுடன், ஒரு விரிவான API உள்ளது, இது நீங்கள் விரும்பும் செயல்பாட்டை திறமையாக செய்ய ஒரு வழியை அடிக்கடி கொண்டிருக்கும்.

பின்வரும் கேள்விகளை நிரலாக்க பணிகளாக கருதி, தீர்வை பார்க்காமல் பதிலளிக்க முயற்சிக்கவும்.

  1. நீங்கள் ஏற்றிய dataframe-இன் shape ஐ அச்சிடுங்கள் (shape என்பது வரிசைகள் மற்றும் நெடுவரிசைகளின் எண்ணிக்கை)
  2. மதிப்பீட்டாளர் தேசியத்திற்கான அதிர்வெண் எண்ணிக்கை கணக்கிடுங்கள்:
    1. Reviewer_Nationality நெடுவரிசைக்கு எத்தனை தனித்துவமான மதிப்பீடுகள் உள்ளன, அவை என்ன?
    2. தரவுத்தொகுப்பில் எந்த மதிப்பீட்டாளர் தேசியம் மிகவும் பொதுவானது (நாடு மற்றும் மதிப்பீடுகளின் எண்ணிக்கையை அச்சிடவும்)?
    3. அடுத்த 10 மிகவும் பொதுவான தேசியங்கள் மற்றும் அவற்றின் அதிர்வெண் எண்ணிக்கை என்ன?
  3. மிக அதிகமாக மதிப்பீடு செய்யப்பட்ட ஹோட்டல் ஒவ்வொரு 10 மிக அதிக மதிப்பீட்டாளர் தேசியங்களுக்கு என்ன?
  4. தரவுத்தொகுப்பில் ஹோட்டல் ஒன்றுக்கு எத்தனை மதிப்பீடுகள் உள்ளன (ஹோட்டலின் அதிர்வெண் எண்ணிக்கை)?
  5. தரவுத்தொகுப்பில் ஒவ்வொரு ஹோட்டலுக்கும் மதிப்பீட்டாளர் மதிப்பீடுகளின் சராசரியை கணக்கிடுவதன் மூலம் சராசரி மதிப்பீட்டை கணக்கிடலாம், Calc_Average_Score என்ற தலைப்புடன் dataframe-க்கு ஒரு புதிய நெடுவரிசையை சேர்க்கவும்.
  6. எந்த ஹோட்டல்கள் (1 தசம இடம் வரை வட்டமிடப்பட்ட) Average_Score மற்றும் Calc_Average_Score மதிப்பீடுகளை ஒரே மாதிரியானவை கொண்டுள்ளன?
    1. ஒரு Series (வரிசை) ஐ வாதமாக எடுத்துக்கொண்டு மதிப்பீடுகளை ஒப்பிட்டு, மதிப்பீடுகள் சமமாக இல்லாதபோது ஒரு செய்தியை அச்சிடும் Python செயல்பாட்டை எழுத முயற்சிக்கவும். பின்னர் .apply() முறைமையை பயன்படுத்தி ஒவ்வொரு வரிசையையும் செயல்பாட்டுடன் செயல்படுத்தவும்.
  7. Negative_Review நெடுவரிசை மதிப்பீடுகள் "No Negative" என்று உள்ள எத்தனை வரிசைகள் உள்ளன என்பதை கணக்கிடவும் மற்றும் அச்சிடவும்.
  8. Positive_Review நெடுவரிசை மதிப்பீடுகள் "No Positive" என்று உள்ள எத்தனை வரிசைகள் உள்ளன என்பதை கணக்கிடவும் மற்றும் அச்சிடவும்.
  9. Positive_Review நெடுவரிசை மதிப்பீடுகள் "No Positive" மற்றும் Negative_Review மதிப்பீடுகள் "No Negative" என்று உள்ள எத்தனை வரிசைகள் உள்ளன என்பதை கணக்கிடவும் மற்றும் அச்சிடவும்.

நிரல்குறிப்பு பதில்கள்

  1. நீங்கள் ஏற்றிய dataframe-இன் shape ஐ அச்சிடுங்கள் (shape என்பது வரிசைகள் மற்றும் நெடுவரிசைகளின் எண்ணிக்கை)

    print("The shape of the data (rows, cols) is " + str(df.shape))
    > The shape of the data (rows, cols) is (515738, 17)
    
  2. மதிப்பீட்டாளர் தேசியத்திற்கான அதிர்வெண் எண்ணிக்கை கணக்கிடுங்கள்:

    1. Reviewer_Nationality நெடுவரிசைக்கு எத்தனை தனித்துவமான மதிப்பீடுகள் உள்ளன, அவை என்ன?
    2. தரவுத்தொகுப்பில் எந்த மதிப்பீட்டாளர் தேசியம் மிகவும் பொதுவானது (நாடு மற்றும் மதிப்பீடுகளின் எண்ணிக்கையை அச்சிடவும்)?
    # value_counts() creates a Series object that has index and values in this case, the country and the frequency they occur in reviewer nationality
    nationality_freq = df["Reviewer_Nationality"].value_counts()
    print("There are " + str(nationality_freq.size) + " different nationalities")
    # print first and last rows of the Series. Change to nationality_freq.to_string() to print all of the data
    print(nationality_freq) 
    
    There are 227 different nationalities
     United Kingdom               245246
     United States of America      35437
     Australia                     21686
     Ireland                       14827
     United Arab Emirates          10235
                                   ...  
     Comoros                           1
     Palau                             1
     Northern Mariana Islands          1
     Cape Verde                        1
     Guinea                            1
    Name: Reviewer_Nationality, Length: 227, dtype: int64
    
    1. அடுத்த 10 மிகவும் பொதுவான தேசியங்கள் மற்றும் அவற்றின் அதிர்வெண் எண்ணிக்கை என்ன?

      print("The highest frequency reviewer nationality is " + str(nationality_freq.index[0]).strip() + " with " + str(nationality_freq[0]) + " reviews.")
      # Notice there is a leading space on the values, strip() removes that for printing
      # What is the top 10 most common nationalities and their frequencies?
      print("The next 10 highest frequency reviewer nationalities are:")
      print(nationality_freq[1:11].to_string())
      
      The highest frequency reviewer nationality is United Kingdom with 245246 reviews.
      The next 10 highest frequency reviewer nationalities are:
       United States of America     35437
       Australia                    21686
       Ireland                      14827
       United Arab Emirates         10235
       Saudi Arabia                  8951
       Netherlands                   8772
       Switzerland                   8678
       Germany                       7941
       Canada                        7894
       France                        7296
      
  3. மிக அதிகமாக மதிப்பீடு செய்யப்பட்ட ஹோட்டல் ஒவ்வொரு 10 மிக அதிக மதிப்பீட்டாளர் தேசியங்களுக்கு என்ன?

    # What was the most frequently reviewed hotel for the top 10 nationalities
    # Normally with pandas you will avoid an explicit loop, but wanted to show creating a new dataframe using criteria (don't do this with large amounts of data because it could be very slow)
    for nat in nationality_freq[:10].index:
       # First, extract all the rows that match the criteria into a new dataframe
       nat_df = df[df["Reviewer_Nationality"] == nat]   
       # Now get the hotel freq
       freq = nat_df["Hotel_Name"].value_counts()
       print("The most reviewed hotel for " + str(nat).strip() + " was " + str(freq.index[0]) + " with " + str(freq[0]) + " reviews.") 
    
    The most reviewed hotel for United Kingdom was Britannia International Hotel Canary Wharf with 3833 reviews.
    The most reviewed hotel for United States of America was Hotel Esther a with 423 reviews.
    The most reviewed hotel for Australia was Park Plaza Westminster Bridge London with 167 reviews.
    The most reviewed hotel for Ireland was Copthorne Tara Hotel London Kensington with 239 reviews.
    The most reviewed hotel for United Arab Emirates was Millennium Hotel London Knightsbridge with 129 reviews.
    The most reviewed hotel for Saudi Arabia was The Cumberland A Guoman Hotel with 142 reviews.
    The most reviewed hotel for Netherlands was Jaz Amsterdam with 97 reviews.
    The most reviewed hotel for Switzerland was Hotel Da Vinci with 97 reviews.
    The most reviewed hotel for Germany was Hotel Da Vinci with 86 reviews.
    The most reviewed hotel for Canada was St James Court A Taj Hotel London with 61 reviews.
    
  4. தரவுத்தொகுப்பில் ஹோட்டல் ஒன்றுக்கு எத்தனை மதிப்பீடுகள் உள்ளன (ஹோட்டலின் அதிர்வெண் எண்ணிக்கை)?

    # First create a new dataframe based on the old one, removing the uneeded columns
    hotel_freq_df = df.drop(["Hotel_Address", "Additional_Number_of_Scoring", "Review_Date", "Average_Score", "Reviewer_Nationality", "Negative_Review", "Review_Total_Negative_Word_Counts", "Positive_Review", "Review_Total_Positive_Word_Counts", "Total_Number_of_Reviews_Reviewer_Has_Given", "Reviewer_Score", "Tags", "days_since_review", "lat", "lng"], axis = 1)
    
    # Group the rows by Hotel_Name, count them and put the result in a new column Total_Reviews_Found
    hotel_freq_df['Total_Reviews_Found'] = hotel_freq_df.groupby('Hotel_Name').transform('count')
    
    # Get rid of all the duplicated rows
    hotel_freq_df = hotel_freq_df.drop_duplicates(subset = ["Hotel_Name"])
    display(hotel_freq_df) 
    
    Hotel_Name Total_Number_of_Reviews Total_Reviews_Found
    Britannia International Hotel Canary Wharf 9086 4789
    Park Plaza Westminster Bridge London 12158 4169
    Copthorne Tara Hotel London Kensington 7105 3578
    ... ... ...
    Mercure Paris Porte d Orleans 110 10
    Hotel Wagner 135 10
    Hotel Gallitzinberg 173 8

    நீங்கள் கவனிக்கலாம், தரவுத்தொகுப்பில் எண்ணப்பட்ட முடிவுகள் Total_Number_of_Reviews மதிப்பீடுடன் பொருந்தவில்லை. இந்த மதிப்பீடு ஹோட்டல் கொண்டிருந்த மொத்த மதிப்பீடுகளை பிரதிநிதித்துவப்படுத்தியது, ஆனால் அனைத்தும் சேகரிக்கப்படவில்லை, அல்லது வேறு கணக்கீடு. Total_Number_of_Reviews மாடலில் பயன்படுத்தப்படவில்லை, ஏனெனில் இது தெளிவற்றது.

  5. Average_Score என்ற நெடுவரிசை தரவுத்தொகுப்பில் உள்ள ஒவ்வொரு ஹோட்டலுக்கும், மதிப்பீட்டாளர் மதிப்பீடுகளின் சராசரியை கணக்கிடுவதன் மூலம் சராசரி மதிப்பீட்டை கணக்கிடலாம். Calc_Average_Score என்ற தலைப்புடன் dataframe-க்கு ஒரு புதிய நெடுவரிசையை சேர்க்கவும். Hotel_Name, Average_Score, மற்றும் Calc_Average_Score நெடுவரிசைகளை அச்சிடவும்.

    # define a function that takes a row and performs some calculation with it
    def get_difference_review_avg(row):
      return row["Average_Score"] - row["Calc_Average_Score"]
    
    # 'mean' is mathematical word for 'average'
    df['Calc_Average_Score'] = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1)
    
    # Add a new column with the difference between the two average scores
    df["Average_Score_Difference"] = df.apply(get_difference_review_avg, axis = 1)
    
    # Create a df without all the duplicates of Hotel_Name (so only 1 row per hotel)
    review_scores_df = df.drop_duplicates(subset = ["Hotel_Name"])
    
    # Sort the dataframe to find the lowest and highest average score difference
    review_scores_df = review_scores_df.sort_values(by=["Average_Score_Difference"])
    
    display(review_scores_df[["Average_Score_Difference", "Average_Score", "Calc_Average_Score", "Hotel_Name"]])
    

    நீங்கள் Average_Score மதிப்பீடு மற்றும் கணக்கிடப்பட்ட சராசரி மதிப்பீடு ஏன் சில நேரங்களில் வேறுபடுகிறது என்று ஆச்சரியப்படலாம். சில மதிப்பீடுகள் பொருந்துகின்றன, ஆனால் மற்றவை வேறுபாடு கொண்டுள்ளன, ஏன் என்பதை நாம் அறிய முடியாது, எனவே இந்த வழக்கில், நாம் கொண்டிருக்கும் மதிப்பீடுகளை பயன்படுத்தி சராசரியை நாமே கணக்கிடுவது பாதுகாப்பானது. அதுவும், வேறுபாடுகள் பொதுவாக மிகவும் சிறியவை, தரவுத்தொகுப்பின் சராசரி மற்றும் கணக்கிடப்பட்ட சராசரியில் மிக அதிக வேறுபாடு கொண்ட ஹோட்டல்கள் இவை:

    Average_Score_Difference Average_Score Calc_Average_Score Hotel_Name
    -0.8 7.7 8.5 Best Western Hotel Astoria
    -0.7 8.8 9.5 Hotel Stendhal Place Vend me Paris MGallery
    -0.7 7.5 8.2 Mercure Paris Porte d Orleans
    -0.7 7.9 8.6 Renaissance Paris Vendome Hotel
    -0.5 7.0 7.5 Hotel Royal Elys es
    ... ... ... ...
    0.7 7.5 6.8 Mercure Paris Op ra Faubourg Montmartre
    0.8 7.1 6.3 Holiday Inn Paris Montparnasse Pasteur
    0.9 6.8 5.9 Villa Eugenie
    0.9 8.6 7.7 MARQUIS Faubourg St Honor Relais Ch teaux
    1.3 7.2 5.9 Kube Hotel Ice Bar

    1 மதிப்பீடு மட்டுமே 1-க்கு மேற்பட்ட வேறுபாடு கொண்டுள்ளது, எனவே வேறுபாட்டை புறக்கணித்து கணக்கிடப்பட்ட சராசரி மதிப்பீட்டை பயன்படுத்தலாம்.

  6. Negative_Review நெடுவரிசை மதிப்பீடுகள் "No Negative" என்று உள்ள எத்தனை வரிசைகள் உள்ளன என்பதை கணக்கிடவும் மற்றும் அச்சிடவும்.

  7. Positive_Review நெடுவரிசை மதிப்பீடுகள் "No Positive" என்று உள்ள எத்தனை வரிசைகள் உள்ளன என்பதை கணக்கிடவும் மற்றும் அச்சிடவும்.

  8. Positive_Review நெடுவரிசை மதிப்பீடுகள் "No Positive" மற்றும் Negative_Review மதிப்பீடுகள் "No Negative" என்று உள்ள எத்தனை வரிசைகள் உள்ளன என்பதை கணக்கிடவும் மற்றும் அச்சிடவும்.

    # with lambdas:
    start = time.time()
    no_negative_reviews = df.apply(lambda x: True if x['Negative_Review'] == "No Negative" else False , axis=1)
    print("Number of No Negative reviews: " + str(len(no_negative_reviews[no_negative_reviews == True].index)))
    
    no_positive_reviews = df.apply(lambda x: True if x['Positive_Review'] == "No Positive" else False , axis=1)
    print("Number of No Positive reviews: " + str(len(no_positive_reviews[no_positive_reviews == True].index)))
    
    both_no_reviews = df.apply(lambda x: True if x['Negative_Review'] == "No Negative" and x['Positive_Review'] == "No Positive" else False , axis=1)
    print("Number of both No Negative and No Positive reviews: " + str(len(both_no_reviews[both_no_reviews == True].index)))
    end = time.time()
    print("Lambdas took " + str(round(end - start, 2)) + " seconds")
    
    Number of No Negative reviews: 127890
    Number of No Positive reviews: 35946
    Number of both No Negative and No Positive reviews: 127
    Lambdas took 9.64 seconds
    

மற்றொரு வழி

Lambda-களை பயன்படுத்தாமல் உருப்படிகளை எண்ணும் மற்றொரு வழி, மற்றும் வரிசைகளை எண்ண sum-ஐ பயன்படுத்தவும்:

# without lambdas (using a mixture of notations to show you can use both)
start = time.time()
no_negative_reviews = sum(df.Negative_Review == "No Negative")
print("Number of No Negative reviews: " + str(no_negative_reviews))

no_positive_reviews = sum(df["Positive_Review"] == "No Positive")
print("Number of No Positive reviews: " + str(no_positive_reviews))

both_no_reviews = sum((df.Negative_Review == "No Negative") & (df.Positive_Review == "No Positive"))
print("Number of both No Negative and No Positive reviews: " + str(both_no_reviews))

end = time.time()
print("Sum took " + str(round(end - start, 2)) + " seconds")

Number of No Negative reviews: 127890
Number of No Positive reviews: 35946
Number of both No Negative and No Positive reviews: 127
Sum took 0.19 seconds

நீங்கள் கவனித்திருக்கலாம், Negative_Review மற்றும் Positive_Review நெடுவரிசைகளுக்கு "No Negative" மற்றும் "No Positive" மதிப்பீடுகளை கொண்ட 127 வரிசைகள் உள்ளன. அதாவது மதிப்பீட்டாளர் ஹோட்டலுக்கு ஒரு எண் மதிப்பீட்டை கொடுத்தார், ஆனால் ஒரு நேர்மறை அல்லது எதிர்மறை மதிப்பீட்டை எழுத மறுத்தார். அதிர்ஷ்டவசமாக, இது ஒரு சிறிய வரிசைகளின் தொகை (127/515738, அல்லது 0.02%), எனவே இது எங்கள் மாடல் அல்லது முடிவுகளை எந்த ஒரு குறிப்பிட்ட திசையில் சாய்க்காது, ஆனால் மதிப்பீடுகள் இல்லாத வரிசைகள் கொண்ட தரவுத்தொகுப்பை நீங்கள் எதிர்பார்க்கவில்லை, எனவே இந்த தரவுகளை ஆராய்ந்து இவ்வாறான வரிசைகளை கண்டறிவது மதிப்புமிக்கது.

தரவுத்தொகுப்பை நீங்கள் ஆராய்ந்த பிறகு, அடுத்த பாடத்தில் நீங்கள் தரவுகளை வடிகட்டி, சில உணர்வு பகுப்பாய்வுகளைச் சேர்ப்பீர்கள்.


🚀சவால்

இந்த பாடம், முந்தைய பாடங்களில் பார்த்தது போல, உங்கள் தரவுகளை அதன் குறைபாடுகளுடன் புரிந்துகொள்வது செயல்பாடுகளை செய்யும் முன் மிகவும் முக்கியமானது என்பதை விளக்குகிறது. உரை அடிப்படையிலான தரவுகள், குறிப்பாக, கவனமாக ஆராயப்பட வேண்டும். பல உரை-மிகுந்த தரவுத்தொகுப்புகளை ஆராய்ந்து, ஒரு மாடலில் பாகுபாடு அல்லது சாய்ந்த உணர்வை அறிமுகப்படுத்தக்கூடிய பகுதிகளை கண்டறிய முயற்சிக்கவும்.

பாடத்திற்குப் பிந்தைய வினாடி வினா

மதிப்பீடு & சுயபயிற்சி

உரையுடன் மற்றும் உரை-மிகுந்த மாடல்களை உருவாக்க முயற்சிக்கும் போது பயன்படுத்தக்கூடிய கருவிகளை கண்டறிய இந்த Learning Path on NLP ஐ எடுத்துக்கொள்ளுங்கள்.

பணிக்கட்டளை

NLTK


குறிப்பு:
இந்த ஆவணம் Co-op Translator என்ற AI மொழிபெயர்ப்பு சேவையைப் பயன்படுத்தி மொழிபெயர்க்கப்பட்டுள்ளது. எங்கள் தரச்செயல்முறையை உறுதிப்படுத்த முயற்சிக்கிறோம், ஆனால் தானியங்கி மொழிபெயர்ப்புகளில் பிழைகள் அல்லது தவறான தகவல்கள் இருக்கக்கூடும் என்பதை கவனத்தில் கொள்ளவும். அதன் தாய்மொழியில் உள்ள மூல ஆவணம் அதிகாரப்பூர்வ ஆதாரமாக கருதப்பட வேண்டும். முக்கியமான தகவல்களுக்கு, தொழில்முறை மனித மொழிபெயர்ப்பு பரிந்துரைக்கப்படுகிறது. இந்த மொழிபெயர்ப்பைப் பயன்படுத்துவதால் ஏற்படும் எந்த தவறான புரிதல்கள் அல்லது தவறான விளக்கங்களுக்கு நாங்கள் பொறுப்பல்ல.