ఈ విభాగంలో మీరు గత పాఠాలలోని సాంకేతికతలను ఉపయోగించి పెద్ద డేటాసెట్ యొక్క అన్వేషణాత్మక డేటా విశ్లేషణ చేయబోతున్నారు. వివిధ కాలమ్స్ యొక్క ఉపయోగకరతను బాగా అర్థం చేసుకున్న తర్వాత, మీరు నేర్చుకుంటారు:
- అవసరం లేని కాలమ్స్ను ఎలా తొలగించాలి
- ఉన్న కాలమ్స్ ఆధారంగా కొత్త డేటాను ఎలా లెక్కించాలి
- తుది సవాలు కోసం ఫలిత డేటాసెట్ను ఎలా సేవ్ చేయాలి
ఇప్పటివరకు మీరు నేర్చుకున్నది ఏమిటంటే, టెక్స్ట్ డేటా సంఖ్యాత్మక డేటా రకాలతో చాలా భిన్నంగా ఉంటుంది. అది మనుష్యుడు రాసిన లేదా మాట్లాడిన టెక్స్ట్ అయితే, దానిని నమూనాలు మరియు తరచుదలలు, భావం మరియు అర్థం కనుగొనడానికి విశ్లేషించవచ్చు. ఈ పాఠం మీకు ఒక నిజమైన డేటా సెట్ మరియు నిజమైన సవాలు తీసుకువస్తుంది: యూరోప్లో 515K హోటల్ సమీక్షల డేటా మరియు ఇందులో CC0: పబ్లిక్ డొమైన్ లైసెన్స్ ఉంది. ఇది Booking.com నుండి పబ్లిక్ మూలాల నుండి స్క్రాప్ చేయబడింది. డేటాసెట్ సృష్టికర్త జియాషెన్ లియు.
మీకు అవసరం:
- Python 3 ఉపయోగించి .ipynb నోట్బుక్స్ నడపగల సామర్థ్యం
- pandas
- NLTK, దాన్ని మీరు స్థానికంగా ఇన్స్టాల్ చేయాలి
- Kaggleలో అందుబాటులో ఉన్న డేటాసెట్ 515K హోటల్ సమీక్షల డేటా యూరోప్లో. ఇది అన్జిప్ చేసినప్పుడు సుమారు 230 MB ఉంటుంది. దీన్ని ఈ NLP పాఠాలతో సంబంధం ఉన్న రూట్
/dataఫోల్డర్లో డౌన్లోడ్ చేయండి.
ఈ సవాలు మీరు భావ విశ్లేషణ మరియు అతిథి సమీక్ష స్కోర్లను ఉపయోగించి హోటల్ సిఫార్సు బాట్ను నిర్మిస్తున్నారని అనుకుంటుంది. మీరు ఉపయోగించబోయే డేటాసెట్లో 6 నగరాలలో 1493 విభిన్న హోటల్స్ యొక్క సమీక్షలు ఉన్నాయి.
Python, హోటల్ సమీక్షల డేటాసెట్ మరియు NLTK భావ విశ్లేషణ ఉపయోగించి మీరు తెలుసుకోవచ్చు:
- సమీక్షలలో అత్యంత తరచుగా ఉపయోగించే పదాలు మరియు పదబంధాలు ఏమిటి?
- హోటల్ను వివరిస్తున్న అధికారిక ట్యాగ్లు సమీక్ష స్కోర్లతో సంబంధం ఉందా (ఉదా: ఒక హోటల్కు యువ పిల్లలతో కుటుంబం కోసం మరింత నెగటివ్ సమీక్షలు ఉంటాయా, సోలో ప్రయాణికుడు కంటే, ఇది సోలో ప్రయాణికులకు మంచిదని సూచించవచ్చా?)
- NLTK భావ స్కోర్లు హోటల్ సమీక్షకుల సంఖ్యాత్మక స్కోర్తో 'అంగీకరిస్తాయా'?
మీరు డౌన్లోడ్ చేసి స్థానికంగా సేవ్ చేసిన డేటాసెట్ను అన్వేషిద్దాం. ఫైల్ను VS కోడ్ లేదా 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- కొంతమంది భావిస్తారు కొన్ని జాతులు పాజిటివ్ లేదా నెగటివ్ సమీక్ష ఇవ్వడానికి ఎక్కువ అవకాశం ఉంటుందని. అలాంటి అనుభవాల ఆధారంగా మోడల్స్లో జాతి ఆధారిత అభిప్రాయాలు చేర్చడంలో జాగ్రత్త వహించండి. ఇవి జాతీయ (మరియు కొన్నిసార్లు జాతి) సాంప్రదాయాలు, ప్రతి సమీక్షకుడు తన అనుభవం ఆధారంగా సమీక్ష రాశాడు. ఇది వారి గత హోటల్ stays, ప్రయాణ దూరం, వ్యక్తిగత స్వభావం వంటి అనేక దృక్కోణాల ద్వారా ఫిల్టర్ అయి ఉండవచ్చు. వారి జాతి సమీక్ష స్కోర్కు కారణమని భావించడం కష్టం.
| సగటు స్కోర్ | మొత్తం సమీక్షల సంఖ్య | సమీక్షకుడి స్కోర్ | నెగటివ్ సమీక్ష |
పాజిటివ్ సమీక్ష | ట్యాగ్లు |
|---|---|---|---|---|---|
| 7.8 | 1945 | 2.5 | ఇది ప్రస్తుతం హోటల్ కాదు, కానీ నిర్మాణ స్థలం. నేను ఉదయం మొదలుకొని మొత్తం రోజంతా అంగీకారయోగ్యమైన నిర్మాణ శబ్దంతో భయపడ్డాను, దీర్ఘ ప్రయాణం తర్వాత విశ్రాంతి తీసుకుంటూ గదిలో పని చేస్తున్నాను. పక్క గదుల్లో జాక్హ్యామర్లు ఉపయోగించి రోజంతా పని జరిగింది. గది మార్చాలని అడిగాను కానీ నిశ్శబ్ద గది అందుబాటులో లేదు. మరింత చెడుగా, నాకు అధిక చార్జ్ చేశారు. నేను సాయంత్రం చెక్ అవుట్ అయ్యాను ఎందుకంటే నాకు చాలా తొందరగా విమానం ఉండేది మరియు సరైన బిల్ అందుకున్నాను. ఒక రోజు తర్వాత హోటల్ నా అనుమతి లేకుండా బుక్ చేసిన ధర కంటే ఎక్కువ చార్జ్ చేసింది. ఇది భయంకరమైన స్థలం. ఇక్కడ బుక్ చేయడం ద్వారా మీకు శిక్ష వేయకండి | ఏమీ లేదు భయంకరమైన స్థలం దూరంగా ఉండండి | వ్యాపార ప్రయాణం జంట స్టాండర్డ్ డబుల్ గది 2 రాత్రులు ఉండటం |
మీరు చూడగలిగినట్లుగా, ఈ అతిథి ఈ హోటల్లో సంతోషంగా ఉండలేదు. హోటల్కు మంచి సగటు స్కోర్ 7.8 మరియు 1945 సమీక్షలు ఉన్నాయి, కానీ ఈ సమీక్షకుడు 2.5 ఇచ్చి తన అనుభవం ఎంత నెగటివ్ అనేదాన్ని 115 పదాలతో వర్ణించాడు. వారు Positive_Review కాలమ్లో ఏమీ రాయకపోతే, మీరు పాజిటివ్ ఏమీ లేదని ఊహించవచ్చు, కానీ వారు 7 పదాల హెచ్చరిక రాశారు. మనం పదాలను మాత్రమే లెక్కిస్తే లేదా పదాల భావాన్ని పరిగణించకపోతే, సమీక్షకుడి ఉద్దేశం తప్పుడు అర్థం కావచ్చు. ఆశ్చర్యకరం గా, వారి స్కోర్ 2.5 గందరగోళంగా ఉంది, ఎందుకంటే ఆ హోటల్ stay అంత చెడుగా ఉంటే, ఎందుకు ఏదైనా పాయింట్లు ఇస్తారు? డేటాసెట్ను సన్నిహితంగా పరిశీలిస్తే, కనీస స్కోర్ 2.5, 0 కాదు. గరిష్ట స్కోర్ 10.
పైన చెప్పినట్లుగా, మొదట చూపులో, Tags ఉపయోగించి డేటాను వర్గీకరించడం అర్థం చేసుకోవచ్చు. దురదృష్టవశాత్తు, ఈ ట్యాగ్లు ప్రమాణీకరించబడలేదు, అంటే ఒక హోటల్లో ఎంపికలు సింగిల్ రూమ్, ట్విన్ రూమ్, మరియు డబుల్ రూమ్ ఉండవచ్చు, కానీ తదుపరి హోటల్లో అవి డీలక్స్ సింగిల్ రూమ్, క్లాసిక్ క్వీన్ రూమ్, మరియు ఎగ్జిక్యూటివ్ కింగ్ రూమ్ ఉంటాయి. ఇవి ఒకే విషయాలు కావచ్చు, కానీ ఎన్నో వేరియేషన్లు ఉండటం వల్ల ఎంపిక:
-
అన్ని పదాలను ఒకే ప్రమాణానికి మార్చడానికి ప్రయత్నించడం, ఇది చాలా కష్టం, ఎందుకంటే ప్రతి సందర్భంలో మార్పు మార్గం స్పష్టంగా లేదు (ఉదా: క్లాసిక్ సింగిల్ రూమ్ అనేది సింగిల్ రూమ్ కు మ్యాప్ అవుతుంది కానీ సుపీరియర్ క్వీన్ రూమ్ విత్ కోర్ట్యార్డ్ గార్డెన్ లేదా సిటీ వ్యూ మ్యాప్ చేయడం చాలా కష్టం)
-
NLP దృష్టికోణం తీసుకుని, ప్రతి హోటల్కు వర్తించే సోలో, బిజినెస్ ట్రావెలర్, లేదా యువ పిల్లలతో కుటుంబం వంటి పదాల తరచుదల కొలవడం మరియు దానిని సిఫార్సు లోకి చేర్చడం
ట్యాగ్లు సాధారణంగా (కానీ ఎప్పుడూ కాదు) ఒకే ఫీల్డ్లో 5 నుండి 6 కామాతో విడగొట్టబడిన విలువల జాబితా ఉంటాయి, అవి ప్రయాణ రకం, అతిథుల రకం, గది రకం, రాత్రుల సంఖ్య, మరియు సమీక్ష సమర్పించిన పరికరం రకం కు సరిపోతాయి. అయితే, కొంతమంది సమీక్షకులు ప్రతి ఫీల్డ్ను నింపకపోవచ్చు (ఒకదాన్ని ఖాళీగా వదిలివేయవచ్చు), కాబట్టి విలువలు ఎప్పుడూ ఒకే క్రమంలో ఉండవు.
ఉదాహరణకు, గ్రూప్ రకం తీసుకోండి. Tags కాలమ్లో ఈ ఫీల్డ్లో 1025 ప్రత్యేక అవకాశాలు ఉన్నాయి, దురదృష్టవశాత్తు వాటిలో కొన్నింటి మాత్రమే గ్రూప్కు సంబంధించినవి (కొన్ని గది రకానికి సంబంధించినవి). మీరు కుటుంబాన్ని మాత్రమే ఫిల్టర్ చేస్తే, ఫలితాల్లో చాలా ఫ్యామిలీ రూమ్ రకాలు ఉంటాయి. మీరు with పదాన్ని కూడా చేర్చితే, అంటే Family with విలువలను లెక్కిస్తే, ఫలితాలు మెరుగ్గా ఉంటాయి, 515,000 ఫలితాల్లో 80,000 కంటే ఎక్కువ "Family with young children" లేదా "Family with older children" పదబంధం కలిగి ఉంటాయి.
దీని అర్థం ఏమిటంటే, ట్యాగ్స్ కాలమ్ పూర్తిగా ఉపయోగరహితం కాదు, కానీ ఉపయోగకరంగా మార్చడానికి కొంత పని చేయాలి.
డేటా సెట్లో కొన్ని విచిత్రతలు లేదా విరుద్ధతలు ఉన్నాయి, నేను అవి ఏమిటో అర్థం చేసుకోలేకపోతున్నాను, కానీ మీరు మీ మోడల్స్ నిర్మిస్తున్నప్పుడు అవి తెలుసుకోవాలి. మీరు అర్థం చేసుకుంటే, దయచేసి చర్చ విభాగంలో తెలియజేయండి!
డేటాసెట్లో సగటు స్కోర్ మరియు సమీక్షల సంఖ్యకు సంబంధించిన కాలమ్స్:
- Hotel_Name
- Additional_Number_of_Scoring
- Average_Score
- Total_Number_of_Reviews
- Reviewer_Score
ఈ డేటాసెట్లో అత్యధిక సమీక్షలతో ఉన్న హోటల్ Britannia International Hotel Canary Wharf 4789 సమీక్షలతో ఉంది. కానీ ఈ హోటల్కు సంబంధించిన Total_Number_of_Reviews విలువ 9086. మీరు ఊహించవచ్చు సమీక్షలు లేకుండా మరిన్ని స్కోర్లు ఉన్నాయని, కాబట్టి Additional_Number_of_Scoring విలువను చేర్చాలి. ఆ విలువు 2682, దీన్ని 4789కి జోడిస్తే 7,471 వస్తుంది, ఇది ఇంకా Total_Number_of_Reviews కంటే 1615 తక్కువ.
Average_Score కాలమ్స్ తీసుకుంటే, ఇది డేటాసెట్లోని సమీక్షల సగటు అని ఊహించవచ్చు, కానీ Kaggle వివరణ "గత సంవత్సరం చివరి వ్యాఖ్య ఆధారంగా హోటల్ యొక్క సగటు స్కోర్" అని ఉంది. ఇది అంత ఉపయోగకరం అనిపించదు, కానీ మేము డేటాసెట్లోని సమీక్ష స్కోర్ల ఆధారంగా మా సొంత సగటు లెక్కించవచ్చు. అదే హోటల్ ఉదాహరణగా తీసుకుంటే, సగటు హోటల్ స్కోర్ 7.1 గా ఇవ్వబడింది కానీ లెక్కించిన స్కోర్ (డేటాసెట్లోని సగటు సమీక్షకుడి స్కోర్) 6.8. ఇది దగ్గరగా ఉంది, కానీ అదే కాదు, మరియు Additional_Number_of_Scoring సమీక్షలలో ఇచ్చిన స్కోర్లు సగటును 7.1కి పెంచినట్టు ఊహించవచ్చు. దురదృష్టవశాత్తు, ఆ అభిప్రాయాన్ని పరీక్షించడానికి లేదా నిరూపించడానికి మార్గం లేకపోవడంతో, Average_Score, Additional_Number_of_Scoring మరియు Total_Number_of_Reviews ను ఆధారంగా లేదా సూచించే డేటా లేకపోతే ఉపయోగించడం లేదా నమ్మకం పెట్టుకోవడం కష్టం.
మరింత క్లిష్టతకు, రెండవ అత్యధిక సమీక్షలతో ఉన్న హోటల్ లెక్కించిన సగటు స్కోర్ 8.12 మరియు డేటాసెట్ Average_Score 8.1. ఇది సరైన స్కోర్ యాదృచ్ఛికమా లేదా మొదటి హోటల్ విరుద్ధతనా?
ఈ హోటల్స్ అవుట్లయర్ కావచ్చు అనే అవకాశాన్ని పరిగణనలోకి తీసుకుంటే, మరియు ఎక్కువ భాగం విలువలు సరిపోతాయని (కానీ కొన్ని కారణాల వల్ల సరిపోకపోవచ్చు) మనం డేటాసెట్లోని విలువలను అన్వేషించడానికి మరియు విలువల సరైన ఉపయోగం (లేదా ఉపయోగం లేకపోవడం) నిర్ణయించడానికి ఒక చిన్న ప్రోగ్రామ్ రాయబోతున్నాము.
🚨 జాగ్రత్త సూచన
ఈ డేటాసెట్తో పని చేస్తున్నప్పుడు మీరు టెక్స్ట్ నుండి ఏదైనా గణన చేయడానికి కోడ్ రాస్తారు, మీరు టెక్స్ట్ను స్వయంగా చదవాల్సిన అవసరం లేకుండా. ఇది NLP యొక్క సారాంశం, అర్థం లేదా భావాన్ని మానవుడు చేయకుండా అర్థం చేసుకోవడం. అయితే, మీరు కొన్ని నెగటివ్ సమీక్షలను చదవవచ్చు. నేను మీరు వాటిని చదవకూడదని సూచిస్తాను, ఎందుకంటే మీరు చదవాల్సిన అవసరం లేదు. వాటిలో కొన్ని అర్థరహితమైనవి లేదా సంబంధం లేని నెగటివ్ హోటల్ సమీక్షలు, ఉదాహరణకు "వాతావరణం బాగాలేదు" అనే సమీక్ష, ఇది హోటల్ నియంత్రణలో లేనిది, లేదా ఎవరైనా నియంత్రించలేని విషయం. కానీ కొన్ని సమీక్షలకు నల్ల వైపు కూడా ఉంటుంది. కొన్ని సార్లు నెగటివ్ సమీక్షలు జాతిపితృత్వం, లింగవాదం లేదా వయస్సు ఆధారిత వివక్ష కలిగి ఉంటాయి. ఇది దురదృష్టకరం కానీ ప్రజా వెబ్సైట్ నుండి సేకరించిన డేటాసెట్లో ఆశించదగిన విషయం. కొన్ని సమీక్షకులు అసహ్యకరమైన, అసౌకర్యకరమైన లేదా బాధాకరమైన సమీక్షలు వదిలిపెడతారు. వాటిని మీరు చదవకుండా కోడ్ భావాన్ని కొలవడం మంచిది. అయితే, ఇలాంటి సమీక్షలు రాయేవారు తక్కువ సంఖ్యలో ఉన్నారు, కానీ ఉన్నారు.
డేటాను దృష్టిగోచరంగా పరిశీలించడం సరిపోతుంది, ఇప్పుడు మీరు కొంత కోడ్ రాసి కొన్ని సమాధానాలు పొందబోతున్నారు! ఈ విభాగం pandas లైబ్రరీని ఉపయోగిస్తుంది. మీ మొదటి పని CSV డేటాను లోడ్ చేసి చదవగలగడం నిర్ధారించుకోవడం. pandas లైబ్రరీకి వేగవంతమైన CSV లోడర్ ఉంది, ఫలితం ఒక డేటాఫ్రేమ్లో ఉంచబడుతుంది, గత పాఠాలలో చేసినట్లుగా. మనం లోడ్ చేస్తున్న CSVలో సగం మించి వరుసలు ఉన్నాయి, కానీ కేవలం 17 కాలమ్స్ మాత్రమే. pandas డేటాఫ్రేమ్తో పరస్పరం చర్యలు చేయడానికి అనేక శక్తివంతమైన మార్గాలను అందిస్తుంది, ప్రతి వరుసపై ఆపరేషన్లు చేయగల సామర్థ్యం సహా.
ఈ పాఠం నుండి, కోడ్ స్నిపెట్లు, కొంత వివరణలు మరియు ఫలితాల అర్థం గురించి చర్చ ఉంటుంది. మీ కోడ్ కోసం చేర్చబడిన notebook.ipynb ఉపయోగించండి.
మీరు ఉపయోగించబోయే డేటా ఫైల్ను లోడ్ చేయడం ప్రారంభిద్దాం:
# CSV నుండి హోటల్ సమీక్షలను లోడ్ చేయండి
import pandas as pd
import time
# ఫైల్ లోడింగ్ సమయాన్ని లెక్కించడానికి ప్రారంభ మరియు ముగింపు సమయాన్ని ఉపయోగించడానికి టైమ్ను దిగుమతి చేసుకుంటోంది
print("Loading data file now, this could take a while depending on file size")
start = time.time()
# df అనేది 'డేటాఫ్రేమ్' - మీరు ఫైల్ను డేటా ఫోల్డర్కు డౌన్లోడ్ చేసుకున్నారని నిర్ధారించుకోండి
df = pd.read_csv('../../data/Hotel_Reviews.csv')
end = time.time()
print("Loading took " + str(round(end - start, 2)) + " seconds")ఇప్పుడు డేటా లోడ్ అయింది, దానిపై కొన్ని ఆపరేషన్లు చేయవచ్చు. ఈ కోడ్ను మీ ప్రోగ్రామ్ టాప్లో ఉంచండి తదుపరి భాగం కోసం.
ఈ సందర్భంలో, డేటా ఇప్పటికే శుభ్రంగా ఉంది, అంటే ఇది పని చేయడానికి సిద్ధంగా ఉంది, మరియు ఇతర భాషల అక్షరాలు లేవు, ఇవి కేవలం ఇంగ్లీష్ అక్షరాలను ఆశించే అల్గోరిథమ్స్ను గందరగోళం చేయవచ్చు.
✅ మీరు కొన్నిసార్లు NLP సాంకేతికతలు వర్తింపజేయడానికి ముందు డేటాను ప్రాథమిక ప్రాసెసింగ్ చేయాల్సి ఉండవచ్చు, కానీ ఈసారి కాదు. మీరు చేయాల్సి ఉంటే, మీరు ఎలా నాన్-ఇంగ్లీష్ అక్షరాలను నిర్వహిస్తారు?
ఒక క్షణం తీసుకుని డేటా లోడ్ అయిన తర్వాత మీరు కోడ్తో దాన్ని అన్వేషించగలరని నిర్ధారించుకోండి. మీరు సాధారణంగా Negative_Review మరియు Positive_Review కాలమ్స్పై దృష్టి పెట్టాలనుకుంటారు. అవి మీ NLP అల్గోరిథమ్స్ ప్రాసెస్ చేయడానికి సహజ టెక్స్ట్తో నింపబడ్డాయి. కానీ వేచి ఉండండి! NLP మరియు భావాన్ని ప్రారంభించే ముందు, మీరు క్రింద ఇచ్చిన కోడ్ను అనుసరించి డేటాసెట్లోని విలువలు మీరు pandas తో లెక్కించిన విలువలకు సరిపోతున్నాయా అని నిర్ధారించుకోండి.
ఈ పాఠంలో మొదటి పని డేటాఫ్రేమ్ను పరిశీలించి (మార్చకుండా) క్రింది నిర్ధారణలు సరైనవా అని కోడ్ రాయడం.
అనేక ప్రోగ్రామింగ్ పనుల్లా, దీన్ని పూర్తి చేయడానికి అనేక మార్గాలు ఉన్నాయి, కానీ మంచి సలహా మీరు తిరిగి ఈ కోడ్ను చూడగలిగేటప్పుడు అర్థం చేసుకోవడానికి సులభమైన, సరళమైన మార్గంలో చేయడం. డేటాఫ్రేమ్లకు సమగ్ర API ఉంటుంది, ఇది మీరు కోరుకున్న పనిని సమర్థవంతంగా చేయడానికి మార్గం కలిగి ఉంటుంది.
క్రింది ప్రశ్నలను కోడింగ్ పనులుగా పరిగణించి పరిష్కారం చూడకుండా సమాధానాలు ఇవ్వడానికి ప్రయత్నించండి.
- మీరు ఇప్పుడే లోడ్ చేసిన డేటాఫ్రేమ్ యొక్క ఆకారం (shape) ను ప్రింట్ చేయండి (ఆకారం అంటే వరుసలు మరియు కాలమ్స్ సంఖ్య)
- సమీక్షకుల జాతీయతల ఫ్రీక్వెన్సీ కౌంట్ లెక్కించండి:
Reviewer_Nationalityకాలమ్లో ఎన్ని వేర్వేరు విలువలు ఉన్నాయి మరియు అవి ఏమిటి?- డేటాసెట్లో అత్యధికంగా కనిపించే సమీక్షకుల జాతీయత ఏది? (దేశం మరియు సమీక్షల సంఖ్య ప్రింట్ చేయండి)
- తదుపరి టాప్ 10 అత్యధికంగా కనిపించే జాతీయతలు మరియు వాటి ఫ్రీక్వెన్సీ కౌంట్ ఏమిటి?
- టాప్ 10 సమీక్షకుల జాతీయతల కోసం అత్యధికంగా సమీక్షించిన హోటల్ ఏది?
- డేటాసెట్లో ప్రతి హోటల్కు ఎన్ని సమీక్షలు ఉన్నాయి? (హోటల్ ఫ్రీక్వెన్సీ కౌంట్)
- డేటాసెట్లో ప్రతి హోటల్కు
Average_Scoreకాలమ్ ఉన్నప్పటికీ, మీరు కూడా సగటు స్కోర్ లెక్కించవచ్చు (ప్రతి హోటల్కు డేటాసెట్లోని అన్ని సమీక్షకుల స్కోర్ల సగటు). మీ డేటాఫ్రేమ్కుCalc_Average_Scoreఅనే కొత్త కాలమ్ జోడించండి, ఇందులో లెక్కించిన సగటు ఉంటుంది. - ఏ హోటల్స్కు (1 దశాంశ స్థాయికి రౌండ్ చేసిన)
Average_ScoreమరియుCalc_Average_Scoreఒకేలా ఉన్నాయా?- ఒక Python ఫంక్షన్ రాయండి, ఇది ఒక Series (ఒక వరుస)ని ఆర్గ్యుమెంట్గా తీసుకుని విలువలను పోల్చి, విలువలు సమానంగా లేనప్పుడు సందేశం ప్రింట్ చేస్తుంది. ఆపై
.apply()మెథడ్ ఉపయోగించి ప్రతి వరుసపై ఆ ఫంక్షన్ను అమలు చేయండి.
- ఒక Python ఫంక్షన్ రాయండి, ఇది ఒక Series (ఒక వరుస)ని ఆర్గ్యుమెంట్గా తీసుకుని విలువలను పోల్చి, విలువలు సమానంగా లేనప్పుడు సందేశం ప్రింట్ చేస్తుంది. ఆపై
Negative_Reviewకాలమ్లో "No Negative" విలువ ఉన్న వరుసల సంఖ్య లెక్కించి ప్రింట్ చేయండిPositive_Reviewకాలమ్లో "No Positive" విలువ ఉన్న వరుసల సంఖ్య లెక్కించి ప్రింట్ చేయండిPositive_Reviewకాలమ్లో "No Positive" మరియుNegative_Reviewకాలమ్లో "No Negative" ఉన్న వరుసల సంఖ్య లెక్కించి ప్రింట్ చేయండి
-
మీరు ఇప్పుడే లోడ్ చేసిన డేటాఫ్రేమ్ యొక్క ఆకారం (shape) ను ప్రింట్ చేయండి (ఆకారం అంటే వరుసలు మరియు కాలమ్స్ సంఖ్య)
print("The shape of the data (rows, cols) is " + str(df.shape)) > The shape of the data (rows, cols) is (515738, 17)
-
సమీక్షకుల జాతీయతల ఫ్రీక్వెన్సీ కౌంట్ లెక్కించండి:
Reviewer_Nationalityకాలమ్లో ఎన్ని వేర్వేరు విలువలు ఉన్నాయి మరియు అవి ఏమిటి?- డేటాసెట్లో అత్యధికంగా కనిపించే సమీక్షకుల జాతీయత ఏది? (దేశం మరియు సమీక్షల సంఖ్య ప్రింట్ చేయండి)
# value_counts() ఒక సిరీస్ ఆబ్జెక్ట్ను సృష్టిస్తుంది, దీనిలో సూచిక మరియు విలువలు ఉంటాయి, ఈ సందర్భంలో దేశం మరియు వారు సమీక్షకుల జాతి లో కనిపించే సాంఖ్యికత nationality_freq = df["Reviewer_Nationality"].value_counts() print("There are " + str(nationality_freq.size) + " different nationalities") # సిరీస్ యొక్క మొదటి మరియు చివరి వరుసలను ముద్రించండి. అన్ని డేటాను ముద్రించడానికి nationality_freq.to_string() గా మార్చండి 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
-
తదుపరి టాప్ 10 అత్యధికంగా కనిపించే జాతీయతలు మరియు వాటి ఫ్రీక్వెన్సీ కౌంట్ ఏమిటి?
print("The highest frequency reviewer nationality is " + str(nationality_freq.index[0]).strip() + " with " + str(nationality_freq[0]) + " reviews.") # విలువల ముందు ఒక స్థలం ఉందని గమనించండి, ప్రింటింగ్ కోసం strip() దాన్ని తీసివేస్తుంది # టాప్ 10 అత్యంత సాధారణ జాతీయతలు మరియు వాటి సాంద్రతలు ఏమిటి? 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
-
టాప్ 10 సమీక్షకుల జాతీయతల కోసం అత్యధికంగా సమీక్షించిన హోటల్ ఏది?
# టాప్ 10 జాతీయతల కోసం అత్యధికంగా సమీక్షించిన హోటల్ ఏది # సాధారణంగా pandas తో మీరు స్పష్టమైన లూప్ను నివారిస్తారు, కానీ ప్రమాణాలను ఉపయోగించి కొత్త డేటాఫ్రేమ్ సృష్టించడం చూపించాలనుకున్నాను (పెద్ద మొత్తంలో డేటాతో ఇది చాలా నెమ్మదిగా ఉండవచ్చు కాబట్టి చేయవద్దు) for nat in nationality_freq[:10].index: # మొదట, ప్రమాణాలకు సరిపోయే అన్ని వరుసలను కొత్త డేటాఫ్రేమ్లో తీసుకోండి nat_df = df[df["Reviewer_Nationality"] == nat] # ఇప్పుడు హోటల్ ఫ్రీక్వెన్సీ పొందండి 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.
-
డేటాసెట్లో ప్రతి హోటల్కు ఎన్ని సమీక్షలు ఉన్నాయి? (హోటల్ ఫ్రీక్వెన్సీ కౌంట్)
# పాత డేటాఫ్రేమ్ ఆధారంగా కొత్త డేటాఫ్రేమ్ను మొదట సృష్టించండి, అవసరం లేని కాలమ్స్ను తీసివేయండి 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) # వరుసలను Hotel_Name ద్వారా గ్రూప్ చేసి, వాటిని లెక్కించి ఫలితాన్ని కొత్త కాలమ్ Total_Reviews_Found లో ఉంచండి hotel_freq_df['Total_Reviews_Found'] = hotel_freq_df.groupby('Hotel_Name').transform('count') # అన్ని డూప్లికేట్ వరుసలను తొలగించండి 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మోడల్లో ఉపయోగించబడదు. -
డేటాసెట్లో ప్రతి హోటల్కు
Average_Scoreకాలమ్ ఉన్నప్పటికీ, మీరు కూడా సగటు స్కోర్ లెక్కించవచ్చు (ప్రతి హోటల్కు డేటాసెట్లోని అన్ని సమీక్షకుల స్కోర్ల సగటు). మీ డేటాఫ్రేమ్కుCalc_Average_Scoreఅనే కొత్త కాలమ్ జోడించండి, ఇందులో లెక్కించిన సగటు ఉంటుంది.Hotel_Name,Average_Score, మరియుCalc_Average_Scoreకాలమ్స్ ప్రింట్ చేయండి.# ఒక వరుసను తీసుకుని దానితో కొన్ని లెక్కింపులు చేసే ఫంక్షన్ను నిర్వచించండి def get_difference_review_avg(row): return row["Average_Score"] - row["Calc_Average_Score"] # 'mean' అనేది 'సగటు' కోసం గణిత పదం df['Calc_Average_Score'] = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1) # రెండు సగటు స్కోర్ల మధ్య తేడాతో కొత్త కాలమ్ను జోడించండి df["Average_Score_Difference"] = df.apply(get_difference_review_avg, axis = 1) # Hotel_Name యొక్క అన్ని ప్రతులేని df సృష్టించండి (అంటే ప్రతి హోటల్కు ఒక్క వరుస మాత్రమే) review_scores_df = df.drop_duplicates(subset = ["Hotel_Name"]) # తక్కువ మరియు ఎక్కువ సగటు స్కోర్ తేడాను కనుగొనడానికి డేటాఫ్రేమ్ను సర్దుబాటు చేయండి 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 కంటే ఎక్కువ తేడా ఉన్నందున, తేడాను పట్టించుకోకుండా లెక్కించిన సగటు స్కోర్ను ఉపయోగించడం మంచిది.
-
Negative_Reviewకాలమ్లో "No Negative" విలువ ఉన్న వరుసల సంఖ్య లెక్కించి ప్రింట్ చేయండి -
Positive_Reviewకాలమ్లో "No Positive" విలువ ఉన్న వరుసల సంఖ్య లెక్కించి ప్రింట్ చేయండి -
Positive_Reviewకాలమ్లో "No Positive" మరియుNegative_Reviewకాలమ్లో "No Negative" ఉన్న వరుసల సంఖ్య లెక్కించి ప్రింట్ చేయండి# లాంబ్డాలతో: 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
లాంబ్డా లేకుండా అంశాలను లెక్కించడానికి మరియు వరుసలను లెక్కించడానికి సం(మొత్తం) ఉపయోగించండి:
# లాంబ్డాలు లేకుండా (మీకు రెండింటినీ ఉపయోగించవచ్చని చూపించడానికి వివిధ సూచనల మిశ్రమాన్ని ఉపయోగించడం)
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 కాలమ్స్లో వరుసలు 127 ఉన్నాయి, వీటిలో "No Negative" మరియు "No Positive" విలువలు ఉన్నాయి. అంటే సమీక్షకుడు హోటల్కు సంఖ్యాత్మక స్కోర్ ఇచ్చారు, కానీ పాజిటివ్ లేదా నెగటివ్ సమీక్ష రాయలేదు. అదృష్టవశాత్తు ఇది చాలా తక్కువ వరుసలు (515738లో 127, అంటే 0.02%), కాబట్టి ఇది మన మోడల్ లేదా ఫలితాలను ఏ దిశలోనూ ప్రభావితం చేయదు. కానీ సమీక్షల డేటాసెట్లో సమీక్షలు లేకపోవడం ఆశ్చర్యకరం, కాబట్టి ఇలాంటి వరుసలను కనుగొనడం విలువైనది.
ఇప్పుడు మీరు డేటాసెట్ను అన్వేషించారు, తదుపరి పాఠంలో మీరు డేటాను ఫిల్టర్ చేసి భావ విశ్లేషణ జోడిస్తారు.
ఈ పాఠం, గత పాఠాలలో చూచినట్లుగా, మీ డేటాను మరియు దాని లోపాలను అర్థం చేసుకోవడం ఎంత ముఖ్యమో చూపిస్తుంది. ప్రత్యేకంగా టెక్స్ట్ ఆధారిత డేటా జాగ్రత్తగా పరిశీలించాలి. వివిధ టెక్స్ట్-భారీ డేటాసెట్లను పరిశీలించి, మోడల్లో పక్షపాతం లేదా త్రుటి భావాన్ని కలిగించే ప్రాంతాలను కనుగొనగలరా చూడండి.
ఈ NLP లెర్నింగ్ పాత్ తీసుకోండి, స్పీచ్ మరియు టెక్స్ట్-భారీ మోడల్స్ నిర్మించేటప్పుడు ప్రయత్నించవలసిన టూల్స్ తెలుసుకోండి.
అస్పష్టత:
ఈ పత్రాన్ని AI అనువాద సేవ Co-op Translator ఉపయోగించి అనువదించబడింది. మేము ఖచ్చితత్వానికి ప్రయత్నించినప్పటికీ, ఆటోమేటెడ్ అనువాదాల్లో పొరపాట్లు లేదా తప్పిదాలు ఉండవచ్చు. అసలు పత్రం దాని స్వదేశీ భాషలోనే అధికారిక మూలంగా పరిగణించాలి. ముఖ్యమైన సమాచారానికి, ప్రొఫెషనల్ మానవ అనువాదం సిఫార్సు చేయబడుతుంది. ఈ అనువాదం వాడకంలో ఏర్పడిన ఏవైనా అపార్థాలు లేదా తప్పుదారుల కోసం మేము బాధ్యత వహించము.