|
|
1 month ago | |
|---|---|---|
| .. | ||
| solution | 7 months ago | |
| README.md | 1 month ago | |
| assignment.md | 7 months ago | |
| notebook.ipynb | 12 months ago | |
README.md
ਹੋਟਲ ਸਮੀਖਿਆਵਾਂ ਨਾਲ ਭਾਵਨਾ ਵਿਸ਼ਲੇਸ਼ਣ
ਹੁਣ ਜਦੋਂ ਤੁਸੀਂ ਡੇਟਾਸੈੱਟ ਨੂੰ ਵਿਸਥਾਰ ਨਾਲ ਖੰਗਾਲ ਲਿਆ ਹੈ, ਹੁਣ ਕਾਲਮਾਂ ਨੂੰ ਫਿਲਟਰ ਕਰਨ ਦਾ ਸਮਾਂ ਹੈ ਅਤੇ ਫਿਰ ਡੇਟਾਸੈੱਟ 'ਤੇ NLP ਤਕਨੀਕਾਂ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਹੋਟਲਾਂ ਬਾਰੇ ਨਵੇਂ ਅੰਤਰਦ੍ਰਿਸ਼ਟੀ ਪ੍ਰਾਪਤ ਕਰੋ।
ਪ੍ਰੀ-ਲੈਕਚਰ ਕਵਿਜ਼
ਫਿਲਟਰਿੰਗ ਅਤੇ ਭਾਵਨਾ ਵਿਸ਼ਲੇਸ਼ਣ ਕਾਰਜ
ਜਿਵੇਂ ਕਿ ਤੁਸੀਂ ਸੰਭਵਤ: ਨੋਟਿਸ ਕੀਤਾ ਹੈ, ਡੇਟਾਸੈੱਟ ਵਿੱਚ ਕੁਝ ਸਮੱਸਿਆਵਾਂ ਹਨ। ਕੁਝ ਕਾਲਮ ਬੇਕਾਰ ਜਾਣਕਾਰੀ ਨਾਲ ਭਰੇ ਹੋਏ ਹਨ, ਹੋਰ ਕਾਲਮ ਗਲਤ ਲੱਗਦੇ ਹਨ। ਜੇਕਰ ਉਹ ਸਹੀ ਹਨ, ਤਾਂ ਇਹ ਸਪਸ਼ਟ ਨਹੀ ਕਿ ਉਹ ਕਿਵੇਂ ਗਣਨਾ ਕੀਤੇ ਗਏ ਹਨ, ਅਤੇ ਜਵਾਬਾਂ ਨੂੰ ਆਪਣੇ ਆਪ ਸਵੈਤੰਤ੍ਰ ਤੌਰ 'ਤੇ ਜਾਂਚਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ।
ਅਭਿਆਸ: ਥੋੜ੍ਹੀ ਹੋਰ ਡੇਟਾ ਪ੍ਰੋਸੈਸਿੰਗ
ਡੇਟਾ ਨੂੰ ਥੋੜ੍ਹਾ ਹੋਰ ਸਾਫ ਕਰੋ। ਉਹ ਕਾਲਮ ਜੋ ਬਾਅਦ ਵਿੱਚ ਲਾਭਦਾਇਕ ਹੋਣਗੇ ਸ਼ਾਮਲ ਕਰੋ, ਹੋਰ ਕਾਲਮਾਂ ਵਿੱਚ ਮੁੱਲਾਂ ਨੂੰ ਬਦਲੋ, ਅਤੇ ਕੁਝ ਕਾਲਮਾਂ ਨੂੰ ਪੂਰੀ ਤਰ੍ਹਾਂ ਹਟਾ ਦਿਓ।
-
ਮੁਢਲਾ ਕਾਲਮ ਪ੍ਰੋਸੈਸਿੰਗ
-
latਅਤੇlngਨੂੰ ਹਟਾਓ -
Hotel_Addressਦੇ ਮੁੱਲਾਂ ਨੂੰ ਹੇਠ ਲਿਖੇ ਮੁੱਲਾਂ ਨਾਲ ਬਦਲੋ (ਜੇ ਪਤਾ ਵਿੱਚ ਸ਼ਹਿਰ ਅਤੇ ਦੇਸ਼ ਦੋਹਾਂ ਸ਼ਾਮਲ ਹਨ, ਤਾਂ ਇਹ ਸਿਰਫ਼ ਸ਼ਹਿਰ ਅਤੇ ਦੇਸ਼ 'ਤੇ ਬਦਲੋ).ਇਹ ਡੇਟਾਸੈੱਟ ਵਿੱਚ ਮੌਜੂਦ ਸਿਰਫ਼ ਸ਼ਹਿਰ ਅਤੇ ਦੇਸ਼ ਹਨ:
ਐਮਸਟਰਡੈਮ, ਨੀਦਰਲੈਂਡ
ਬਾਰਸੀਲੋਨਾ, ਸਪੇਨ
ਲੰਡਨ, ਯੂਨਾਈਟਡ ਕਿੰਗਡਮ
ਮਿਲਾਨ, ਇਟਲੀ
ਪੈਰਿਸ, ਫ਼੍ਰਾਂਸ
ਵੀਨਾ, ਆਸਟਰੀਆ
def replace_address(row): if "Netherlands" in row["Hotel_Address"]: return "Amsterdam, Netherlands" elif "Barcelona" in row["Hotel_Address"]: return "Barcelona, Spain" elif "United Kingdom" in row["Hotel_Address"]: return "London, United Kingdom" elif "Milan" in row["Hotel_Address"]: return "Milan, Italy" elif "France" in row["Hotel_Address"]: return "Paris, France" elif "Vienna" in row["Hotel_Address"]: return "Vienna, Austria" # ਸਾਰਿਆਂ ਪਤੇ ਛੋਟੀ ਤੇ ਵੱਧ ਉਪਯੋਗੀ ਰੂਪ ਵਿੱਚ ਬਦਲੋ df["Hotel_Address"] = df.apply(replace_address, axis = 1) # value_counts() ਦਾ ਜੋੜ ਸਮਫ਼ਲ ਸਕਦਾ ਹੈ ਕੁੱਲ ਸਮੀਖਿਆਵਾਂ ਦੀ ਗਿਣਤੀ ਦੇ ਬਰਾਬਰ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ print(df["Hotel_Address"].value_counts())ਹੁਣ ਤੁਸੀਂ ਦੇਸ਼ ਪੱਧਰੀ ਡਾਟਾ ਪੁੱਛਗਿੱਛ ਕਰ ਸਕਦੇ ਹੋ:
display(df.groupby("Hotel_Address").agg({"Hotel_Name": "nunique"}))Hotel_Address Hotel_Name ਐਮਸਟਰਡੈਮ, ਨੀਦਰਲੈਂਡ 105 ਬਾਰਸੀਲੋਨਾ, ਸਪੇਨ 211 ਲੰਡਨ, ਯੂਨਾਈਟਡ ਕਿੰਗਡਮ 400 ਮਿਲਾਨ, ਇਟਲੀ 162 ਪੈਰਿਸ, ਫ਼੍ਰਾਂਸ 458 ਵੀਨਾ, ਆਸਟਰੀਆ 158
-
-
ਹੋਟਲ ਮੈਟਾ-ਸਮੀਖਿਆ ਕਾਲਮਾਂ ਨੂੰ ਪ੍ਰੋਸੈਸ ਕਰੋ
-
Additional_Number_of_Scoringਨੂੰ ਹਟਾਓ -
Total_Number_of_Reviewsਨੂੰ ਉਸ ਸਕੋਰ ਨਾਲ ਬਦਲੋ ਜੋ ਹਕੀਕਤ ਵਿੱਚ ਡੇਟਾਸੈੱਟ ਵਿੱਚ ਉਸ ਹੋਟਲ ਦੀ ਸਮੀਖਿਆ ਦੀ ਕੁੱਲ ਸੰਖਿਆ ਹੈ -
Average_Scoreਨੂੰ ਆਪਣੀ ਗਣਨਾ ਕੀਤੀ ਗਈ ਸਕੋਰ ਨਾਲ ਬਦਲੋ
# `Additional_Number_of_Scoring` ਨੂੰ ਹਟਾਓ
df.drop(["Additional_Number_of_Scoring"], axis = 1, inplace=True)
# `Total_Number_of_Reviews` ਅਤੇ `Average_Score` ਨੂੰ ਸਾਡੇ ਆਪਣੇ ਗਣਨਾ ਕੀਤੇ ਮੁੱਲਾਂ ਨਾਲ ਬਦਲੋ
df.Total_Number_of_Reviews = df.groupby('Hotel_Name').transform('count')
df.Average_Score = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1)
-
ਸਮੀਖਿਆ ਕਾਲਮਾਂ ਨੂੰ ਪ੍ਰੋਸੈਸ ਕਰੋ
-
Review_Total_Negative_Word_Counts,Review_Total_Positive_Word_Counts,Review_Dateਅਤੇdays_since_reviewਨੂੰ ਹਟਾਓ -
Reviewer_Score,Negative_Review, ਅਤੇPositive_Reviewਨੂੰ ਜਿਵੇਂ ਹਨ ਰੱਖੋ, -
ਅਜੇ ਲਈ
Tagsਨੂੰ ਰੱਖੋ
- ਅਗਲੇ ਭਾਗ ਵਿੱਚ ਅਸੀਂ ਟੈਗਾਂ 'ਤੇ ਹੋਰ ਫਿਲਟਰਿੰਗ ਕਾਰਜ ਕਰਾਂਗੇ ਅਤੇ ਫਿਰ ਟੈਗ ਹਟਾ ਦਿੱਤੇ ਜਾਣਗੇ
-
-
ਸਮੀਖਿਆਕਾਰ ਕਾਲਮਾਂ ਨੂੰ ਪ੍ਰੋਸੈਸ ਕਰੋ
-
Total_Number_of_Reviews_Reviewer_Has_Givenਨੂੰ ਹਟਾਓ -
Reviewer_Nationalityਨੂੰ ਰੱਖੋ
ਟੈਗ ਕਾਲਮ
Tag ਕਾਲਮ ਸਮੱਸਿਆ ਵਾਲਾ ਹੈ ਕਿਉਂਕਿ ਇਹ ਇੱਕ ਸੂਚੀ ਹੈ (ਪਾਠ ਰੂਪ ਵਿੱਚ) ਜੋ ਕਾਲਮ ਵਿੱਚ ਸਟੋਰ ਕੀਤੀ ਗਈ ਹੈ। ਬਦਕਿਸਮਤੀ ਨਾਲ ਇਸ ਕਾਲਮ ਵਿੱਚ ਉੱਪ-ਭਾਗਾਂ ਦਾ ਕ੍ਰਮ ਅਤੇ ਗਿਣਤੀ ਹਮੇਸ਼ਾਂ ਇਕੋ ਜਿਹੀ ਨਹੀਂ ਹੁੰਦੀ। ਇਹ ਮਨੁੱਖ ਲਈ ਸਹੀ ਵਾਕਾਂਸ਼ਾਂ ਦੀ ਪਹਚਾਣ ਕਰਨਾ ਮੁਸ਼ਕਲ ਬਣਾਉਂਦਾ ਹੈ, ਕਿਉਂਕਿ 515,000 ਕਤਾਰਾਂ ਅਤੇ 1427 ਹੋਟਲ ਹਨ, ਅਤੇ ਹਰ ਇੱਕ ਸਮੀਖਿਆਕਾਰ ਵੱਖ-ਵੱਖ ਵਿਕਲਪ ਚੁਣ ਸਕਦਾ ਹੈ। ਇਹੀ NLP ਦਾ ਜੋਸ਼ ਹੈ। ਤੁਸੀਂ ਪਾਠ ਨੂੰ ਸਕੈਨ ਕਰਕੇ ਸਭ ਤੋਂ ਆਮ ਵਾਕਾਂਸ਼ ਲੱਭ ਸਕਦੇ ਹੋ ਅਤੇ ਉਨ੍ਹਾਂ ਦੀ ਗਿਣਤੀ ਕਰ ਸਕਦੇ ਹੋ।
ਬਦਕਿਸਮਤੀ ਨਾਲ, ਅਸੀਂ ਇੱਕ-ਸ਼ਬਦਾਂ ਵਿੱਚ ਦਿਲਚਸਪੀ ਨਹੀਂ ਰੱਖਦੇ, ਪਰ ਬਹੁ-ਸ਼ਬਦੀ ਵਾਕਾਂਸ਼ਾਂ ਵਿੱਚ (ਜਿਵੇਂ ਕਿ ਬਿਜ਼ਨੇਸ ਟ੍ਰਿਪ)। ਇਸ ਕਦਰ ਡਾਟਾ (6762646 ਸ਼ਬਦ) 'ਤੇ ਬਹੁ-ਸ਼ਬਦ ਫ੍ਰੀਕਵੈਂਸੀ ਵਿਤਰਨ ਅਲਗੋਰਿਦਮ ਚਲਾਉਣਾ ਬਹੁਤ ਸਮਾਂ ਲੈ ਸਕਦਾ ਹੈ, ਪਰ ਡਾਟਾ ਦੇਖਣ ਤੋਂ ਬਿਨਾਂ ਇਹ ਲੋੜੀਂਦਾ ਖਰਚਾ ਲੱਗਦਾ ਹੈ। ਇੱਥੇ ਖੋਜ-ਪਖ਼ਤ ਡਾਟਾ ਵਿਸ਼ਲੇਸ਼ਣ ਮਦਦਗਾਰ ਹੋ ਜਾਂਦੀ ਹੈ, ਕਿਉਂਕਿ ਤੁਸੀਂ ਟੈਗਾਂ ਦਾ ਨਮੂਨਾ ਦੇਖ ਚੁੱਕੇ ਹੋ, ਜਿਵੇਂ ਕਿ [' Business trip ', ' Solo traveler ', ' Single Room ', ' Stayed 5 nights ', ' Submitted from a mobile device '] , ਤੁਸੀਂ ਪੁੱਛ ਸਕਦੇ ਹੋ ਕਿ ਕੀ ਪ੍ਰੋਸੈਸਿੰਗ ਨੂੰ ਬਹੁਤ ਘਟਾਇਆ ਜਾ ਸਕਦਾ ਹੈ। ਖੁਸ਼ਕਿਸਮਤੀ ਨਾਲ, ਇਹ ਸੰਭਵ ਹੈ - ਪਰ ਪਹਿਲਾਂ ਤੁਹਾਨੂੰ ਟੈਗਾਂ ਦੀ ਪਛਾਣ ਲਈ ਕੁਝ ਕਦਮ ਚੁੱਕਣੇ ਪੈਣਗੇ।
ਟੈਗਾਂ ਨੂੰ ਫਿਲਟਰ ਕਰਨਾ
ਯਾਦ ਰੱਖੋ ਕਿ ਡੇਟਾਸੈੱਟ ਦਾ ਮਕਸਦ ਭਾਵਨਾ ਅਤੇ ਕਾਲਮ ਸ਼ਾਮਲ ਕਰਨਾ ਹੈ ਜੋ ਤੁਹਾਨੂੰ ਸਭ ਤੋਂ ਵਧੀਆ ਹੋਟਲ ਚੁਣਨ ਵਿੱਚ ਮਦਦ ਕਰੇਗਾ (ਚਾਹੇ ਆਪਣੇ ਲਈ ਹੋਵੇ ਜਾਂ ਕਿਸੇ ਕਲਾਇੰਟ ਲਈ ਜੋ ਤੁਹਾਨੂੰ ਹੋਟਲ ਸਿਫਾਰਸ਼ ਬੋਟ ਬਣਾਉਣ ਲਈ ਅਸਾਈਨ ਕਰਦਾ ਹੋਵੇ)। ਤੁਹਾਨੂੰ ਆਪਣੇ ਆਪ ਨਾਲ ਪੁੱਛਣਾ ਹੈ ਕਿ ਕੀ ਟੈਗ ਅੰਤਿਮ ਡੇਟਾਸੈੱਟ ਵਿੱਚ ਲਾਭਦਾਇਕ ਹਨ ਜਾਂ ਨਹੀਂ। ਇੱਥੇ ਇੱਕ ਵਿਆਖਿਆ ਹੈ (ਜੇ ਤੁਸੀਂ ਡੇਟਾਸੈੱਟ ਨੂੰ ਹੋਰ ਕਾਰਨਾਂ ਲਈ ਚਾਹੁੰਦੇ ਹੋ ਤਾਂ ਵੱਖਰੇ ਟੈਗ ਸ਼ਾਮਲ/ਬਾਹਰ ਰਹਿ ਸਕਦੇ ਹਨ):
- ਯਾਤਰਾ ਦੀ ਕਿਸਮ ਸਬੰਧਤ ਹੈ, ਅਤੇ ਇਹ ਰਹਿਣਾ ਚਾਹੀਦਾ ਹੈ
- ਮਹਿਮਾਨ ਸਮੂਹ ਦੀ ਕਿਸਮ ਮਹੱਤਵਪੂਰਨ ਹੈ, ਅਤੇ ਇਹ ਰਹਿਣਾ ਚਾਹੀਦਾ ਹੈ
- ਕਮਰਾ, ਸ੍ਯੂਟ ਜਾਂ ਸਟੂਡੀਓ ਦੀ ਕਿਸਮ ਜਿਸ ਵਿੱਚ ਮਹਿਮਾਨ ਠਹਿਰਿਆ ਹੈ, ਅਣਗੌਰਤਯੋਗ ਹੈ (ਸਭ ਹੋਟਲਾਂ ਦੇ ਕਮਰੇ ਬੁਨਿਆਦੀ ਤੌਰ 'ਤੇ ਸਮਾਨ ਹੁੰਦੇ ਹਨ)
- ਜਿਸ ਉਪਕਰਣ 'ਤੇ ਸਮੀਖਿਆ ਜਮ੍ਹਾਂ ਕੀਤੀ ਗਈ ਹੈ, ਅਹਿਮ ਨਹੀਂ ਹੈ
- ਸਮੀਖਿਆਕਾਰ ਨੇ ਕਿੰਨੇ ਰਾਤਾਂ ਰਹਿਣ ਲਈ ਬਚਾਇਆ ਹੈ ਸੰਭਵ ਹੈ ਕਿ ਲੰਬੇ ਸਮੇਂ ਰਿਹਾਇਸ਼ ਨਾਲ ਉਹ ਹੋਟਲ ਵਧੀਆ ਲੱਗਦਾ ਹੋਵੇ, ਪਰ ਇਹ ਅੰਦਾਜ਼ਾ ਹੀ ਹੈ, ਅਤੇ ਸੰਭਵਤ: ਗੈਰ-ਮਹੱਤਵਪੂਰਨ ਹੈ
ਸੰਖੇਪ ਵਿੱਚ, 2 ਕਿਸਮ ਦੇ ਟੈਗ ਰੱਖੋ ਅਤੇ ਬਾਕੀ ਹਟਾ ਦਿਓ।
ਪਹਿਲਾਂ, ਤੁਸੀਂ ਟੈਗਾਂ ਨੂੰ ਗਿਣਨਾ ਨਹੀਂ ਚਾਹੁੰਦੇ ਜਦ ਤੱਕ ਉਹ ਬਿਹਤਰ ਫਾਰਮੈਟ ਵਿੱਚ ਨਹੀਂ ਹੁੰਦੇ, ਇਸ ਦਾ ਅਰਥ ਹੈ ਵਰਗੇ ਬ੍ਰੈਕਟ ਅਤੇ ਕੋਟਸ ਨੂੰ ਹਟਾਉਣਾ। ਤੁਸੀਂ ਇਹ ਕਈ ਤਰੀਕਿਆਂ ਨਾਲ ਕਰ ਸਕਦੇ ਹੋ, ਪਰ ਤੁਹਾਨੂੰ ਸਭ ਤੋਂ ਤੇਜ਼ ਤਰੀਕਾ ਚਾਹੀਦਾ ਹੈ ਕਿਉਂਕਿ ਇਹ ਬਹੁਤ ਡੇਟਾ ਨੂੰ ਪ੍ਰੋਸੈਸ ਕਰਨਾ ਲੰਬਾ ਸਮਾਂ ਲੈ ਸਕਦਾ ਹੈ। ਖੁਸ਼ਕਿਸਮਤੀ ਨਾਲ, pandas ਨੇ ਹਰ ਇਹ ਕਦਮ ਕਰਨ ਦਾ ਆਸਾਨ ਤਰੀਕਾ ਦਿੱਤਾ ਹੈ।
# ਖੁਲ੍ਹਣ ਅਤੇ ਬੰਦ ਕਰਨ ਵਾਲੇ ਕੋਸ਼ਿਕਾ ਹਟਾਓ
df.Tags = df.Tags.str.strip("[']")
# ਸਾਰੇ ਕੋਟੀ ਜਿਹੜੇ ਹਨ ਉਹ ਵੀ ਹਟਾਓ
df.Tags = df.Tags.str.replace(" ', '", ",", regex = False)
ਹਰ ਟੈਗ ਕੁਝ ਇਸ ਤਰ੍ਹਾਂ ਹੋ ਜਾਦਾ ਹੈ: Business trip, Solo traveler, Single Room, Stayed 5 nights, Submitted from a mobile device.
ਅਗਲੇ ਕਦਮ ਵਿੱਚ ਸਾਨੂੰ ਇੱਕ ਸਮੱਸਿਆ ਮਿਲਦੀ ਹੈ। ਕੁਝ ਸਮੀਖਿਆਵਾਂ ਜਾਂ ਕਤਾਰਾਂ ਵਿੱਚ 5 ਕਾਲਮ ਹਨ, ਕੁਝ ਵਿੱਚ 3, ਕੁਝ ਵਿੱਚ 6। ਇਹ ਡੇਟਾਸੈੱਟ ਬਣਾਉਣ ਦਾ ਨਤੀਜਾ ਹੈ ਅਤੇ ਠੀਕ ਕਰਨਾ ਮੁਸ਼ਕਲ ਹੈ। ਤੁਸੀਂ ਹਰ ਵਾਕਾਂਸ਼ ਦੀ ਗਿਣਤੀ ਪ੍ਰਾਪਤ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ, ਪਰ ਉਹ ਵੱਖਰੇ ਕ੍ਰਮ ਵਿੱਚ ਹਰੇਕ ਸਮੀਖਿਆ ਵਿੱਚ ਹਨ, ਇਸ ਲਈ ਗਿਣਤੀ ਗਲਤ ਹੋ ਸਕਦੀ ਹੈ ਅਤੇ ਹੋਟਲ ਨੂੰ ਉਹ ਟੈਗ ਦਿੱਤਾ ਨਾ ਜਾਵੇ ਜੋ ਉਸਦਾ ਹੱਕਦਾਰ ਸੀ।
ਇਸ ਦੀ ਬਜਾਏ ਤੁਸੀਂ ਵੱਖਰੇ ਕ੍ਰਮ ਦਾ ਫ਼ਾਇਦਾ ਚੁੱਕੋਗੇ, ਕਿਉਂਕਿ ਹਰ ਟੈਗ ਬਹੁ-ਸ਼ਬਦੀ ਹੈ ਪਰ ਕਮਾ ਨਾਲ ਵੀ ਵੱਖਰਾ ਕੀਤਾ ਗਿਆ ਹੈ! ਸਭ ਤੋਂ ਸੌਖਾ ਤਰੀਕਾ ਇਹ ਹੈ ਕਿ 6 ਅਸਥਾਈ ਕਾਲਮ ਬਣਾਓ ਜਿੱਥੇ ਹਰ ਟੈਗ ਉਸ ਕਾਲਮ ਵਿੱਚ ਪਾਇਆ ਜਾਵੇ ਜੋ ਉਸਦੀ ਕ੍ਰਮ ਅਨੁਸਾਰ ਹੋਵੇ। ਫਿਰ ਤੁਸੀਂ 6 ਕਾਲਮਾਂ ਨੂੰ ਇੱਕ ਵੱਡੇ ਕਾਲਮ ਵਿੱਚ ਜੋੜ ਸਕਦੇ ਹੋ ਅਤੇ value_counts() ਤਰੀਕਾ ਇਸ ਉਪਜ ਕਾਲਮ 'ਤੇ ਚਲਾ ਸਕਦੇ ਹੋ। ਇਸ ਨੂੰ ਪ੍ਰਿੰਟ ਕਰਨ 'ਤੇ ਤੁਸੀਂ ਵੇਖੋਗੇ ਕਿ 2428 ਯੂਨੀਕ ਟੈਗ ਹਨ। ਇੱਥੇ ਇੱਕ ਛੋਟਾ ਨਮੂਨਾ ਹੈ:
| Tag | ਗਿਣਤੀ |
|---|---|
| Leisure trip | 417778 |
| Submitted from a mobile device | 307640 |
| Couple | 252294 |
| Stayed 1 night | 193645 |
| Stayed 2 nights | 133937 |
| Solo traveler | 108545 |
| Stayed 3 nights | 95821 |
| Business trip | 82939 |
| Group | 65392 |
| Family with young children | 61015 |
| Stayed 4 nights | 47817 |
| Double Room | 35207 |
| Standard Double Room | 32248 |
| Superior Double Room | 31393 |
| Family with older children | 26349 |
| Deluxe Double Room | 24823 |
| Double or Twin Room | 22393 |
| Stayed 5 nights | 20845 |
| Standard Double or Twin Room | 17483 |
| Classic Double Room | 16989 |
| Superior Double or Twin Room | 13570 |
| 2 rooms | 12393 |
ਕੁਝ ਆਮ ਟੈਗ ਜਿਵੇਂ ਕਿ Submitted from a mobile device ਸਾਡੇ ਲਈ ਬੇਕਾਰ ਹਨ, ਇਸ ਲਈ ਇਹ ਗਿਣਤੀ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਉਹਨਾਂ ਨੂੰ ਹਟਾਣਾ ਸਮਰਥ ਸੂਝਵਾਨ ਕੰਮ ਹੋ ਸਕਦਾ ਹੈ, ਪਰ ਇਹ ਇੰਨਾ ਤੇਜ਼ ਕਾਰਜ ਹੈ ਕਿ ਤੁਸੀਂ ਉਨ੍ਹਾਂ ਨੂੰ ਛੱਡ ਕਰ ਅਣਡਿੱਠਾ ਕਰ ਸਕਦੇ ਹੋ।
ਰਹਿਣ ਸਮੇਂ ਦੇ ਟੈਗ ਹਟਾਉਣਾ
ਇਹ ਟੈਗ ਹਟਾਉਣਾ ਪਹਿਲਾ ਕਦਮ ਹੈ, ਇਹ ਸਮੀਖਿਆ ਲਈ ਕੱਲ ਗਿਣਤੀ ਨੂੰ ਥੋੜ੍ਹਾ ਘਟਾਉਂਦਾ ਹੈ। ਧਿਆਨ ਦਿਓ ਕਿ ਤੁਸੀਂ ਡੇਟਾਸੈੱਟ ਵਿੱਚੋਂ इन्हें ਹਟਾ ਰਹੇ ਨਹੀਂ, ਸਿਰਫ ਗਿਣਤੀ/ਰੱਖਣ ਲਈ ਵਿਚਾਰ ਤੋਂ ਹਟਾ ਰਹੇ ਹੋ।
| ਰਹਿਣ ਦੀ ਲੰਬਾਈ | ਗਿਣਤੀ |
|---|---|
| 1 ਰਾਤ ਰਹੀ | 193645 |
| 2 ਰਾਤਾਂ ਰਹੀਆਂ | 133937 |
| 3 ਰਾਤਾਂ ਰਹੀਆਂ | 95821 |
| 4 ਰਾਤਾਂ ਰਹੀਆਂ | 47817 |
| 5 ਰਾਤਾਂ ਰਹੀਆਂ | 20845 |
| 6 ਰਾਤਾਂ ਰਹੀਆਂ | 9776 |
| 7 ਰਾਤਾਂ ਰਹੀਆਂ | 7399 |
| 8 ਰਾਤਾਂ ਰਹੀਆਂ | 2502 |
| 9 ਰਾਤਾਂ ਰਹੀਆਂ | 1293 |
| ... | ... |
ਕਮਰੇ, ਸਿੂਟ, ਸਟੂਡੀਓ, ਅਪਾਰਟਮੈਂਟਸ ਆਦਿ ਦੀ ਵੱਡੀ ਵੈਰਾਇਟੀ ਹੈ। ਉਹ ਸਭ ਲੱਗਭਗ ਇੱਕੋ ਜਿਹਾ ਮਤਲਬ ਰੱਖਦੇ ਹਨ ਅਤੇ ਤੁਹਾਡੇ ਲਈ ਅਣਗੌਰਤਯੋਗ ਹਨ, ਇਸ ਲਈ ਉਨ੍ਹਾਂ ਨੂੰ ਗਿਣਤੀ ਤੋਂ ਹਟਾ ਦਿਓ।
| ਕਮਰੇ ਦੀ ਕਿਸਮ | ਗਿਣਤੀ |
|---|---|
| ਡਬਲ ਰੂਮ | 35207 |
| ਸਟੈਂਡਰਡ ਡਬਲ ਰੂਮ | 32248 |
| ਸੁਪਰੀਅਰ ਡਬਲ ਰੂਮ | 31393 |
| ਡੀਲਕਸ ਡਬਲ ਰੂਮ | 24823 |
| ਡਬਲ ਜਾਂ ਟਵਿਨ ਰੂਮ | 22393 |
| ਸਟੈਂਡਰਡ ਡਬਲ ਜਾਂ ਟਵਿਨ ਰੂਮ | 17483 |
| ਕਲਾਸਿਕ ਡਬਲ ਰੂਮ | 16989 |
| ਸੁਪਰੀਅਰ ਡਬਲ ਜਾਂ ਟਵਿਨ ਰੂਮ | 13570 |
ਆਖ਼ਰੀ ਵਿੱਚ, ਅਤੇ ਇਹ ਖ਼ੁਸ਼ਨੁਮਾ ਗੱਲ ਹੈ (ਕਿਉਂਕਿ ਇਸ ਨੇ ਜ਼ਿਆਦਾ ਪ੍ਰੋਸੈਸਿੰਗ ਨਹੀਂ ਲਿਆ), ਤੁਹਾਨੂੰ ਹੇਠ ਲਿਖੇ ਲਾਭਦਾਇਕ ਟੈਗ ਮਿਲਣਗੇ:
| ਟੈਗ | ਗਿਣਤੀ |
|---|---|
| ਲੇਜ਼ਰ ਟ੍ਰਿਪ | 417778 |
| ਜੋੜਾ | 252294 |
| ਇਕੱਲਾ ਸੈਲਾਨੀ | 108545 |
| ਬਿਜ਼ਨੇਸ ਟ੍ਰਿਪ | 82939 |
| ਸਮੂਹ (ਦੋਸਤਾਂ ਨਾਲ ਸੈਲਾਨੀ ਦੇ ਨਾਲ ਮਿਲਾ ਕੇ) | 67535 |
| ਛੋਟੇ ਬੱਚਿਆਂ ਵਾਲਾ ਪਰਿਵਾਰ | 61015 |
| ਵੱਡੇ ਬੱਚਿਆਂ ਵਾਲਾ ਪਰਿਵਾਰ | 26349 |
| ਪਾਲਤੂ ਜਾਨਵਰ ਨਾਲ | 1405 |
ਤੁਸੀਂ ਇਹ ਦਲੀਲ ਦੇ ਸਕਦੇ ਹੋ ਕਿ ਦੋਸਤਾਂ ਨਾਲ ਸੈਲਾਨੀ ਮੁਲਨਿਆਮ ਕਰਨ ਯੋਗ ਹੈ ਸਮੂਹ ਦੇ ਬਰਾਬਰ ਹੈ, ਅਤੇ ਇਹ ਠੀਕ ਹੈ ਕਿ ਦੋਹਾਂ ਨੂੰ ਉਪਰ ਦਿੱਤਾ ਗਇਆ ਤਰੀਕਾ ਨਾਲ ਜੋੜ ਦਿੱਤਾ ਜਾਵੇ। ਸਹੀ ਟੈਗ ਪਹਚਾਣ ਕਰਨ ਲਈ ਕੋਡ Tags notebook ਵਿੱਚ ਹੈ।
ਅੰਤਿਮ ਕਦਮ ਇਹ ਹੈ ਕਿ ਹਰ ਇੱਕ ਟੈਗ ਲਈ ਨਵੇਂ ਕਾਲਮ ਬਣਾਓ। ਫਿਰ, ਹਰ ਸਮੀਖਿਆ ਕਤਾਰ ਲਈ, ਜੇਕਰ Tag ਕਾਲਮ ਕਿਸੇ ਨਵੇਂ ਕਾਲਮ ਨਾਲ ਮੇਲ ਖਾਂਦਾ ਹੈ, ਤਾਂ 1 ਸ਼ਾਮਲ ਕਰੋ, ਨਹੀਂ ਤਾਂ 0 ਸ਼ਾਮਲ ਕਰੋ। ਅੰਤਿਮ ਨਤੀਜਾ ਇਹ ਹੋਵੇਗਾ ਕਿ ਕਿੰਨੇ ਸਮੀਖਿਆਕਾਰਾਂ ਨੇ ਇਸ ਹੋਟਲ ਨੂੰ ਚੁਣਾ (ਕੁੱਲ ਮਿਲਾ ਕੇ), ਜਿਵੇਂ ਤਬਬਰਣ ਬਿਜ਼ਨੇਸ ਬਨਾਮ ਖੇਡ-ਖੁਦਰਜੀ ਦੀ ਭੁਮਿਕਾ ਵਿੱਚ, ਜਾਂ ਪਾਲਤੂ ਲਿਜਾਣ ਲਈ, ਅਤੇ ਇਹ ਸਿਫਾਰਸ਼ ਕਰਨ ਸਮੇਂ ਮਦਦਗਾਰ ਜਾਣਕਾਰੀ ਹੈ।
# ਟੈਗਸ ਨੂੰ ਨਵੀਂ ਕਾਲਮਾਂ ਵਿੱਚ ਪ੍ਰਕਿਰਿਆ ਕਰੋ
# ਫਾਇਲ Hotel_Reviews_Tags.py ਸਭ ਤੋਂ ਮਹੱਤਵਪੂਰਣ ਟੈਗਸ ਦੀ ਪਛਾਣ ਕਰਦੀ ਹੈ
# ਮਨੋਰੰਜਨ ਯਾਤਰਾ, ਜੋੜਾ, ਇਕੱਲਾ ਯਾਤਰੀ, ਕਾਰੋਬਾਰੀ ਯਾਤਰਾ, ਗਰੁੱਪ ਜੋ ਕਿ ਦੋਸਤਾਂ ਨਾਲ ਯਾਤਰੀਆਂ ਨਾਲ ਮਿਲ ਕੇ ਹੈ,
# ਛੋਟੇ ਬੱਚਿਆਂ ਨਾਲ ਪਰਿਵਾਰ, ਵੱਡੇ ਬੱਚਿਆਂ ਨਾਲ ਪਰਿਵਾਰ, ਪਸ਼ੂ ਨਾਲ
df["Leisure_trip"] = df.Tags.apply(lambda tag: 1 if "Leisure trip" in tag else 0)
df["Couple"] = df.Tags.apply(lambda tag: 1 if "Couple" in tag else 0)
df["Solo_traveler"] = df.Tags.apply(lambda tag: 1 if "Solo traveler" in tag else 0)
df["Business_trip"] = df.Tags.apply(lambda tag: 1 if "Business trip" in tag else 0)
df["Group"] = df.Tags.apply(lambda tag: 1 if "Group" in tag or "Travelers with friends" in tag else 0)
df["Family_with_young_children"] = df.Tags.apply(lambda tag: 1 if "Family with young children" in tag else 0)
df["Family_with_older_children"] = df.Tags.apply(lambda tag: 1 if "Family with older children" in tag else 0)
df["With_a_pet"] = df.Tags.apply(lambda tag: 1 if "With a pet" in tag else 0)
ਆਪਣੀ ਫ਼ਾਇਲ ਸੇਵ ਕਰੋ
ਅੰਤ ਵਿੱਚ, ਹੁਣੇ ਬਣਾਈ ਗਈ ਡੇਟਾਸੈੱਟ ਨੂੰ ਨਵਾਂ ਨਾਮ ਦੇ ਕੇ ਸੇਵ ਕਰੋ।
df.drop(["Review_Total_Negative_Word_Counts", "Review_Total_Positive_Word_Counts", "days_since_review", "Total_Number_of_Reviews_Reviewer_Has_Given"], axis = 1, inplace=True)
# ਗਣਨਾ ਕੀਤੀਆਂ ਕਾਲਮਾਂ ਨਾਲ ਨਵਾਂ ਡੇਟਾ ਫਾਈਲ ਸੰਭਾਲ ਰਿਹਾ ਹੈ
print("Saving results to Hotel_Reviews_Filtered.csv")
df.to_csv(r'../data/Hotel_Reviews_Filtered.csv', index = False)
ਭਾਵਨਾ ਵਿਸ਼ਲੇਸ਼ਣ ਕਾਰਜ
ਇਸ ਅੰਤਿਮ ਭਾਗ ਵਿੱਚ, ਤੁਸੀਂ ਸਮੀਖਿਆ ਕਾਲਮਾਂ 'ਤੇ ਭਾਵਨਾ ਵਿਸ਼ਲੇਸ਼ਣ ਲਾਗੂ ਕਰੋਗੇ ਅਤੇ ਨਤੀਜੇ ਡੇਟਾਸੈੱਟ ਵਿੱਚ ਸੰਭਾਲੋਗੇ।
ਅਭਿਆਸ: ਛਾਂਟਿਆ ਹੋਇਆ ਡੇਟਾ ਲੋਡ ਕਰੋ ਅਤੇ ਸੇਵ ਕਰੋ
ਇਹ ਧਿਆਨ ਵਿੱਚ ਰੱਖੋ ਕਿ ਹੁਣ ਤੁਸੀਂ ਪਿਛਲੇ ਭਾਗ ਵਿੱਚ ਸੇਵ ਕੀਤੇ ਛਾਂਟਿਆ ਹੋਇਆ ਡੇਟਾ ਲੋਡ ਕਰ ਰਹੇ ਹੋ, ਅਸਲ ਡੇਟਾ ਲੋਡ ਨਹੀਂ ਕਰ ਰਹੇ।
import time
import pandas as pd
import nltk as nltk
from nltk.corpus import stopwords
from nltk.sentiment.vader import SentimentIntensityAnalyzer
nltk.download('vader_lexicon')
# ਫਿਲਟਰ ਕੀਤੀਆਂ ਹੋਟਲ ਸਮੀਖਿਆਵਾਂ ਨੂੰ CSV ਤੋਂ ਲੋਡ ਕਰੋ
df = pd.read_csv('../../data/Hotel_Reviews_Filtered.csv')
# ਤੁਹਾਡਾ ਕੋਡ ਇੱਥੇ ਜੋੜਿਆ ਜਾਵੇਗਾ
# ਆਖਰਕਾਰ, ਨਵਾਂ NLP ਡੇਟਾ ਜੋੜ ਕੇ ਹੋਟਲ ਸਮੀਖਿਆਵਾਂ ਸੁਰੱਖਿਅਤ ਕਰਨਾ ਯਾਦ ਰੱਖੋ
print("Saving results to Hotel_Reviews_NLP.csv")
df.to_csv(r'../data/Hotel_Reviews_NLP.csv', index = False)
ਠਹਿਰਾਏ ਸ਼ਬਦ ਹਟਾਉਣਾ
ਜੇ ਤੁਸੀਂ ਨੈਗੇਟਿਵ ਅਤੇ ਪਾਜ਼ਿਟਿਵ ਸਮੀਖਿਆ ਕਾਲਮਾਂ 'ਤੇ ਭਾਵਨਾ ਵਿਸ਼ਲੇਸ਼ਣ ਚਲਾਉਂਦੇ, ਤਾਂ ਇਹ ਲੰਬਾ ਸਮਾਂ ਲੈ ਸਕਦਾ ਹੈ। ਤੇਜ਼ CPU ਵਾਲੇ ਸ਼ਕਤੀਸ਼ਾਲੀ ਟੈਸਟ ਲੈਪਟੌਪ 'ਤੇ ਟੈਸਟ ਕੀਤਾ ਗਿਆ, ਇਹ 12-14 ਮਿੰਟ ਲੱਗੇ ਇਸ ਗੱਲ 'ਤੇ ਨਿਰਭਰ ਕਰ ਕੇ ਕਿ ਕਿਹੜੀ ਭਾਵਨਾ ਲਾਇਬ੍ਰੇਰੀ ਵਰਤੀ ਗਈ ਸੀ। ਇਹ (ਤੁਲਨਾਤਮਕ) ਲੰਬਾ ਸਮਾਂ ਹੈ, ਇਸ ਲਈ ਇਹ ਜ਼ਾਂਚ ਕਰਨ ਦੇ ਯੋਗ ਹੈ ਕਿ ਕੀ ਇਸ ਨੂੰ ਤੇਜ਼ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ।
ਠਹਿਰਾਏ ਸ਼ਬਦ, ਜਾਂ ਆਮ ਅੰਗਰੇਜ਼ੀ ਸ਼ਬਦ ਜੋ ਵਾਕ ਦਾ ਭਾਵਨਾ ਬਦਲਦੇ ਨਹੀਂ, ਹਟਾਉਣਾ ਪਹਿਲਾ ਕਦਮ ਹੈ। ਉਨ੍ਹਾਂ ਨੂੰ ਹਟਾਉਣ ਨਾਲ ਭਾਵਨਾ ਵਿਸ਼ਲੇਸ਼ਣ ਤੇਜ਼ ਹੋਏਗੀ, ਪਰ ਘੱਟ ਸਹੀ ਨਹੀਂ ਹੋਵੇਗੀ (ਕਿਉਂਕਿ ਠਹਿਰਾਏ ਸ਼ਬਦਾਂ ਦਾ ਭਾਵਨਾ 'ਤੇ ਪ੍ਰਭਾਵ ਨਹੀਂ ਹੁੰਦਾ, ਪਰ ਉਹ ਵਿਸ਼ਲੇਸ਼ਣ ਨੂੰ ਧੀਮਾ ਕਰਦੇ ਹਨ)।
ਸਭ ਤੋਂ ਲੰਬੀ ਨਕਾਰਾਤਮਕ ਸਮੀਖਿਆ 395 ਸ਼ਬਦ ਦੀ ਸੀ, ਪਰ ਠਹਿਰਾਏ ਸ਼ਬਦ ਹਟਾਉਣ ਤੋਂ ਬਾਅਦ ਇਹ 195 ਸ਼ਬਦ ਰਹਿ ਗਈ।
ਠਹਿਰਾਏ ਸ਼ਬਦ ਹਟਾਉਣਾ ਵੀ ਤੇਜ਼ ਕਾਰਜ ਹੈ, 2 ਸਮੀਖਿਆ ਕਾਲਮਾਂ ਤੋਂ 515,000 ਕਤਾਰਾਂ ਵਿੱਚ ਠਹਿਰਾਏ ਸ਼ਬਦ ਹਟਾਉਣ ਵਿੱਚ ਟੈਸਟ ਯੰਤਰ 'ਤੇ 3.3 ਸਕਿੰਟ ਲੱਗੇ। ਇਹ ਤੁਹਾਡੇ ਯੰਤਰ ਦੇ CPU ਗਤੀ, RAM, SSD ਹੋਣ ਜਾਂ ਨਾ ਹੋਣ ਅਤੇ ਹੋਰ ਕਈ ਕਾਰਕਾਂ 'ਤੇ ਨਾੜਿਆ ਜਾ ਸਕਦਾ ਹੈ। ਕਾਰਜ ਦੀ ਰੀਲੈਟਿਵ ਛੋਟੀ ਅਵਧੀ ਇਸ ਗੱਲ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਂਦੀ ਹੈ ਕਿ ਜੇ ਇਹ ਭਾਵਨਾ ਵਿਸ਼ਲੇਸ਼ਣ ਸਮਾਂ ਤੇਜ਼ ਕਰਦਾ ਹੈ, ਤਾਂ ਇਹ ਕਰਨ ਦੇ ਯੋਗ ਹੈ।
from nltk.corpus import stopwords
# ਹోటਲ ਸਮੀਖਿਆਵਾਂ ਨੂੰ CSV ਤੋਂ ਲੋਡ ਕਰੋ
df = pd.read_csv("../../data/Hotel_Reviews_Filtered.csv")
# ਸਟਾਪ ਵਰਡਜ਼ ਹਟਾਓ - ਬਹੁਤ ਸਾਰਾ ਮਤਨ ਹੋਣ ਤੇ ਇਹ ਸਲੋ ਹੋ ਸਕਦਾ ਹੈ!
# Ryan Han (Kaggle ਉੱਤੇ ryanxjhan) ਨੇ ਵੱਖ-ਵੱਖ ਸਟਾਪ ਵਰਡਜ਼ ਹਟਾਉਣ ਦੇ ਤਰੀਕਿਆਂ ਦੀ ਕਾਰਗੁਜ਼ਾਰੀ ਮਾਪਣ ਵਾਲਾ ਇੱਕ ਵਧੀਆ ਪੋਸਟ ਕੀਤਾ ਹੈ
# https://www.kaggle.com/ryanxjhan/fast-stop-words-removal # Ryan ਵੱਲੋਂ ਸੁਝਾਇਆ ਗਿਆ ਤਰੀਕਾ ਵਰਤਦੇ ਹੋਏ
start = time.time()
cache = set(stopwords.words("english"))
def remove_stopwords(review):
text = " ".join([word for word in review.split() if word not in cache])
return text
# ਦੋਹਾਂ ਕਾਲਮਾਂ ਤੋਂ ਸਟਾਪ ਵਰਡਜ਼ ਹਟਾਓ
df.Negative_Review = df.Negative_Review.apply(remove_stopwords)
df.Positive_Review = df.Positive_Review.apply(remove_stopwords)
ਭਾਵਨਾ ਵਿਸ਼ਲੇਸ਼ਣ ਕਰਨਾ
ਹੁਣ ਤੁਹਾਨੂੰ ਨੈਗੇਟਿਵ ਅਤੇ ਪਾਜ਼ਿਟਿਵ ਸਮੀਖਿਆ ਕਾਲਮਾਂ ਲਈ ਭਾਵਨਾ ਵਿਸ਼ਲੇਸ਼ਣ ਗਿਣਤੀ ਕਰਨੀ ਚਾਹੀਦੀ ਹੈ, ਅਤੇ ਨਤੀਜਾ 2 ਨਵੇਂ ਕਾਲਮਾਂ ਵਿੱਚ ਸਟੋਰ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ। ਭਾਵਨਾ ਦੀ ਜਾਂਚ ਇਸ ਤਰ੍ਹਾਂ ਹੋਵੇਗੀ ਕਿ ਸਮੀਖਿਆਕਾਰ ਦੇ ਅੰਕ ਨਾਲ ਉਸੇ ਸਮੀਖਿਆ ਲਈ ਤੁਲਨਾ ਕੀਤੀ ਜਾਵੇ। ਉਦਾਹਰਨ ਵਜੋਂ, ਜੇ ਭਾਵਨਾ ਸੋਚਦੀ ਹੈ ਕਿ ਨਕਾਰਾਤਮਕ ਸਮੀਖਿਆ ਦਾ ਭਾਵਨਾ 1 (ਬਹੁਤ ਪਾਜ਼ਿਟਿਵ ਭਾਵਨਾ) ਸੀ ਅਤੇ ਸਕਾਰਾਤਮਕ ਸਮੀਖਿਆ ਭਾਵਨਾ ਵੀ 1 ਸੀ, ਪਰ ਸਮੀਖਿਆਕਾਰ ਨੇ ਹੋਟਲ ਨੂੰ ਸਭ ਤੋਂ ਘਟੀਆ ਸਕੋਰ ਦਿੱਤਾ, ਤਾਂ ਜਾਂ ਤਾਂ ਸਮੀਖਿਆ ਪਾਠ ਸਕੋਰ ਦੇ ਅਨੁਰੂਪ ਨਹੀਂ ਹੈ, ਜਾਂ ਭਾਵਨਾ ਵਿਸ਼ਲੇਸ਼ਕ ਏਲੀ ਗਲਤ ਸੂਚਨਾ ਦਿੱਤੀ। ਤੁਸੀਂ ਕੁਝ ਭਾਵਨਾ ਅੰਕਾਂ ਨੂੰ ਪੂਰੀ ਤਰ੍ਹਾਂ ਗਲਤ ਮੰਨ ਸਕਦੇ ਹੋ, ਅਤੇ ਅਕਸਰ ਇਹ ਵਿਆਖਿਆਯੋਗ ਹੋਵੇਗਾ, ਉਦਾਹਰਨ ਵਜੋਂ, ਸਮੀਖਿਆ ਬਹੁਤ ਵਿਅੰਗੀ ਹੋ ਸਕਦੀ ਹੈ "ਬੇਸ਼ੱਕ ਮੈਨੂੰ ਕਮਰੇ ਵਿੱਚ ਹੀਟਿੰਗ ਨਾ ਹੋਣ ਤੇ ਸੌਣਾ ਬਹੁਤ ਪਸੰਦ ਆਇਆ" ਅਤੇ ਭਾਵਨਾ ਵਿਸ਼ਲੇਸ਼ਕ ਸੋਚਦਾ ਹੈ ਕਿ ਇਹ ਪਾਜ਼ਿਟਿਵ ਹੈ, ਹਾਲਾਂਕਿ ਇੱਕ ਮਨੁੱਖ ਪੜ੍ਹ ਕੇ ਜਾਣਦਾ ਹੈ ਕਿ ਇਹ ਵਿਅੰਗ ਹੈ।
NLTK ਵੱਖ-ਵੱਖ ਭਾਵਨਾ ਵਿਸ਼ਲੇਸ਼ਕ ਮੁਹੱਈਆ ਕਰਵਾਉਂਦਾ ਹੈ ਜਿਨ੍ਹਾਂ ਨਾਲ ਸਿੱਖਿਆ ਜਾ ਸਕਦੀ ਹੈ, ਅਤੇ ਤੁਸੀਂ ਉਨ੍ਹਾਂ ਨੂੰ ਬਦਲ ਕੇ ਦੇਖ ਸਕਦੇ ਹੋ ਕਿ ਭਾਵਨਾ ਜ਼ਿਆਦਾ ਜਾਂ ਘੱਟ ਸਹੀ ਹੈ। ਇੱਥੇ VADER ਭਾਵਨਾ ਵਿਸ਼ਲੇਸ਼ਣ ਦੀ ਵਰਤੋਂ ਕੀਤੀ ਗਈ ਹੈ।
Hutto, C.J. & Gilbert, E.E. (2014). VADER: ਸੋਸ਼ਲ ਮੀਡਿਆ ਟੈਕਸਟ ਦੀ ਭਾਵਨਾ ਵਿਸ਼ਲੇਸ਼ਣ ਲਈ ਇੱਕ ਸੰਖੇਪ ਰੂਲ-ਅਧਾਰਤ ਮਾਡਲ। ਅਠਵਾਂ ਅੰਤਰਰਾਸ਼ਟਰੀ ਸੰਮੇਲਨ ਵੈਬਲੌਗ ਅਤੇ ਸੋਸ਼ਲ ਮੀਡਿਆ (ICWSM-14)। ਐਨ ਆਰਬਰ, MI, ਜੂਨ 2014।
from nltk.sentiment.vader import SentimentIntensityAnalyzer
# ਵੈਡਰ ਸੰਵੇਦਨਾ ਵਿਸ਼ਲੇਸ਼ਕ ਬਣਾਓ (ਨਲਟਕ ਵਿੱਚ ਹੋਰ ਵੀ ਹਨ ਜੋ ਤੁਸੀਂ ਕੋਸ਼ਿਸ਼ ਕਰ ਸਕਦੇ ਹੋ)
vader_sentiment = SentimentIntensityAnalyzer()
# ਹੁੱਟੋ, ਸੀ.ਜெ. & ਗਿਲਬਰਟ, ਈ.ਈ. (2014). ਵੈਡਰ: ਸੋਸ਼ਲ ਮੀਡੀਆ ਟੈਕਸਟ ਦੇ ਸੰਵੇਦਨਾ ਵਿਸ਼ਲੇਸ਼ਣ ਲਈ ਇੱਕ ਸੰਕੁਚਿਤ ਨਿਯਮ-ਆਧਾਰਿਤ ਮਾਡਲ। ਅਠਵਾਂ ਅੰਤਰਰਾਸ਼ਟਰੀ ਕਾਨਫਰੰਸ ਵੈਬਲੌਗਸ ਅਤੇ ਸੋਸ਼ਲ ਮੀਡੀਆ (ICWSM-14)। ਐਨ ਅਰਬਰ, ਮਾਈ, ਜੂਨ 2014।
# ਇੱਕ ਸਮੀਖਿਆ ਦੇ ਲਈ 3 ਇਨਪੁਟ ਸੰਭਾਵਨਾਵਾਂ ਹਨ:
# ਇਹ "ਕੋਈ ਨਕਾਰਾਤਮਕ ਨਹੀਂ" ਹੋ ਸਕਦਾ ਹੈ, ਜਿਸ ਸਥਿਤੀ ਵਿੱਚ 0 ਵਾਪਸ ਕਰੋ
# ਇਹ "ਕੋਈ ਧਨਾਤਮਕ ਨਹੀਂ" ਹੋ ਸਕਦਾ ਹੈ, ਜਿਸ ਸਥਿਤੀ ਵਿੱਚ 0 ਵਾਪਸ ਕਰੋ
# ਇਹ ਇੱਕ ਸਮੀਖਿਆ ਹੋ ਸਕਦੀ ਹੈ, ਜਿਸ ਸਥਿਤੀ ਵਿੱਚ ਸੰਵੇਦਨਾ ਦੀ ਗਣਨਾ ਕਰੋ
def calc_sentiment(review):
if review == "No Negative" or review == "No Positive":
return 0
return vader_sentiment.polarity_scores(review)["compound"]
ਬਾਅਦ ਵਿੱਚ ਤੁਹਾਡੇ ਪ੍ਰੋਗਰਾਮ ਵਿੱਚ ਜਦੋਂ ਤੁਸੀਂ ਭਾਵਨਾ ਦੀ ਗਿਣਤੀ ਕਰਨ ਲਈ ਤਿਆਰ ਹੋ, ਤੁਸੀਂ ਇਸਨੂੰ ਹਰ ਸਮੀਖਿਆ 'ਤੇ ਅਜਿਹਾ ਲਗਾ ਸਕਦੇ ਹੋ:
# ਨਕਾਰਾਤਮਕ ਭਾਵਨਾ ਅਤੇ ਸਕਾਰਾਤਮਕ ਭਾਵਨਾ ਕਾਲਮ ਸ਼ਾਮਿਲ ਕਰੋ
print("Calculating sentiment columns for both positive and negative reviews")
start = time.time()
df["Negative_Sentiment"] = df.Negative_Review.apply(calc_sentiment)
df["Positive_Sentiment"] = df.Positive_Review.apply(calc_sentiment)
end = time.time()
print("Calculating sentiment took " + str(round(end - start, 2)) + " seconds")
ਇਹ ਮੇਰੇ ਕੰਪਿਊਟਰ 'ਤੇ ਲਗਭਗ 120 ਸਕਿੰਟ ਲੈਂਦਾ ਹੈ, ਪਰ ਇਹ ਹਰ ਕੰਪਿਊਟਰ 'ਤੇ ਵੱਖ-ਵੱਖ ਹੋਵੇਗਾ। ਜੇ ਤੁਸੀਂ ਨਤੀਜੇ ਪ੍ਰਿੰਟ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ ਅਤੇ ਦੇਖਣਾ ਚਾਹੁੰਦੇ ਹੋ ਕਿ ਭਾਵਨਾ ਸਮੀਖਿਆ ਨਾਲ ਮਿਲਦੀ ਹੈ ਜਾਂ ਨਹੀਂ:
df = df.sort_values(by=["Negative_Sentiment"], ascending=True)
print(df[["Negative_Review", "Negative_Sentiment"]])
df = df.sort_values(by=["Positive_Sentiment"], ascending=True)
print(df[["Positive_Review", "Positive_Sentiment"]])
ਚੈਲੈਂਜ ਵਿੱਚ ਇਸਦਾ ਉਪਯੋਗ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਫਾਈਲ ਨਾਲ ਆਖिरी ਕੰਮ ਸੰਭਾਲਣਾ ਹੈ, ਇਸਨੂੰ ਸੰਭਾਲ ਕੇ ਸੇਵ ਕਰਨਾ! ਤੁਹਾਨੂੰ ਆਪਣੀਆਂ ਸਾਰੀਆਂ ਨਵੀਂ ਕਾਲਮਾਂ ਨੂੰ ਇਸ ਤਰ੍ਹਾਂ ਦੁਬਾਰਾ ਲਗਾਉਣ ਬਾਰੇ ਵੀ ਸੋਚਣਾ ਚਾਹੀਦਾ ਹੈ ਤਾਂ ਜੋ ਉਹਨਾਂ ਨਾਲ ਕੰਮ ਕਰਨਾ ਆਸਾਨ ਹੋਵੇ (ਇੱਕ ਮਨੁੱਖ ਲਈ ਇਹ ਇੱਕ ਸੁੰਦਰਤਾ ਵਿੱਚ ਬਦਲਾਅ ਹੈ)।
# ਕਾਲਮਾਂ ਨੂੰ ਮੁੜ ਕ੍ਰਮਬੱਧ ਕਰੋ (ਇਹ ਸਿਰਫ਼ ਸੁੰਦਰਤਾ ਲਈ ਹੈ, ਪਰ ਬਾਅਦ ਵਿੱਚ ਡੇਟਾ ਦੀ ਤਫਤੀਸ਼ ਨੂੰ ਆਸਾਨ ਬਣਾਉਣ ਲਈ)
df = df.reindex(["Hotel_Name", "Hotel_Address", "Total_Number_of_Reviews", "Average_Score", "Reviewer_Score", "Negative_Sentiment", "Positive_Sentiment", "Reviewer_Nationality", "Leisure_trip", "Couple", "Solo_traveler", "Business_trip", "Group", "Family_with_young_children", "Family_with_older_children", "With_a_pet", "Negative_Review", "Positive_Review"], axis=1)
print("Saving results to Hotel_Reviews_NLP.csv")
df.to_csv(r"../data/Hotel_Reviews_NLP.csv", index = False)
ਤੁਹਾਨੂੰ ਪੂਰਾ ਕੋਡ ਚਲਾਉਣਾ ਚਾਹੀਦਾ ਹੈ ਵਿਸ਼ਲੇਸ਼ਣ ਨੋਟਬੁੱਕ ਲਈ (ਜਦੋਂ ਤੁਸੀਂ ਆਪਣੇ ਫਿਲਟਰਿੰਗ ਨੋਟਬੁੱਕ ਨੂੰ ਚਲਾਕੇ Hotel_Reviews_Filtered.csv ਫਾਈਲ ਉਤਪੰਨ ਕਰ ਲਈ ਹੈ)।
ਸਮੀਖਿਆ ਲਈ, ਕਦਮ ਹਨ:
- ਮੂਲ ਡੇਟਾਸੈੱਟ ਫਾਈਲ Hotel_Reviews.csv ਪਿਛਲੇ ਪਾਠ ਵਿੱਚ ਇਕਸਪਲੋਰਰ ਨੋਟਬੁੱਕ ਨਾਲ ਖੋਜੀ ਗਈ
- Hotel_Reviews.csv ਨੂੰ ਫਿਲਟਰਿੰਗ ਨੋਟਬੁੱਕ ਨਾਲ ਫਿਲਟਰ ਕੀਤਾ ਗਿਆ ਜਿਸਦਾ ਨਤੀਜਾ Hotel_Reviews_Filtered.csv ਹੈ
- Hotel_Reviews_Filtered.csv ਨੂੰ ਭਾਵਨਾ ਵਿਸ਼ਲੇਸ਼ਣ ਨੋਟਬੁੱਕ ਨਾਲ ਪ੍ਰੋਸੈਸ ਕੀਤਾ ਗਿਆ ਜਿਸਦਾ ਨਤੀਜਾ Hotel_Reviews_NLP.csv ਹੈ
- ਹੇਠਾਂ NLP ਚੈਲੈਂਜ ਵਿੱਚ Hotel_Reviews_NLP.csv ਦੀ ਵਰਤੋਂ ਕਰੋ
ਨਤੀਜਾ
ਜਦੋਂ ਤੁਸੀਂ ਸ਼ੁਰੂ ਕੀਤਾ ਸੀ, ਤੁਹਾਡੇ ਕੋਲ ਕਾਲਮਾਂ ਅਤੇ ਡੇਟਾ ਵਾਲਾ ਡੇਟਾਸੈੱਟ ਸੀ ਪਰ ਸਾਰਾ ਡੇਟਾ ਜਾਂ ਚੈੱਕ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ ਜਾਂ ਵਰਤਿਆ ਜਾ ਸਕਦਾ ਸੀ। ਤੁਸੀਂ ਡੇਟਾ ਖੋਜਿਆ, ਜਰੂਰੀ ਨਾ ਹੋਣ ਵਾਲਾ ਹਟਾਇਆ, ਟੈਗਾਂ ਨੂੰ ਕੁਝ ਲਾਭਦਾਇਕ ਵਿੱਚ ਬਦਲਿਆ, ਆਪਣੇ ਆਪ ਗਣਨਾ ਕੀਤੀ, ਕੁਝ ਭਾਵਨਾ ਕਾਲਮ ਜੋੜੇ ਅਤੇ ਉਮੀਦ ਹੈ ਕਿ ਕੁਝ ਦਿਲਚਸਪ ਗੱਲਾਂ ਸਿੱਖੀਆਂ ਜਿਵੇਂ ਪ੍ਰਾਕ੍ਰਿਤਿਕ ਭਾਸ਼ਾ ਟੈਕਸਟ ਨੂੰ ਪ੍ਰੋਸੈਸ ਕਰਨਾ।
ਪੋਸਟ-ਲੈਕਚਰ ਕਵਿਜ਼
ਚੈਲੈਂਜ
ਹੁਣ ਜਦੋਂ ਤੁਹਾਡੇ ਕੋਲ ਭਾਵਨਾ ਲਈ ਵਿਸ਼ਲੇਸ਼ਿਤ ਡੇਟਾਸੈਟ ਹੈ, ਵੇਖੋ ਕਿ ਤੁਸੀਂ ਇਸ ਪਾਠਕ੍ਰਮ ਵਿੱਚ ਸਿੱਖੇ ਹੋਏ ਰਣਨੀਤੀਆਂ (ਸ਼ਾਇਦ ਕਲੱਸਟਰਿੰਗ?) ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਭਾਵਨਾ ਦੇ ਆਲੇ-ਦੁਆਲੇ ਦੇ ਪੈਟਰਨ ਨਿਰਧਾਰਤ ਕਰ ਸਕਦੇ ਹੋ.
ਸਮੀਖਿਆ ਅਤੇ ਸਵੈ ਅਧਿਐਨ
ਇਸ Learn ਮਾਡਿਊਲ ਨੂੰ ਲਵੋ ਤਾਂ ਜੋ ਹੋਰ ਸਿੱਖਿਆ ਜਾਵੇ ਅਤੇ ਭਾਵਨਾ ਦੀ ਪੜਤਾਲ ਲਈ ਵੱਖ-ਵੱਖ ਉਪਕਰਨ ਵਰਤੇ ਜਾ ਸਕਣ।
ਅਸਾਈਨਮੈਂਟ
ਅਸਵੀਕਾਰੋਪਣ: ਇਸ ਦਸਤਾਵੇਜ਼ ਦਾ ਅਨੁਵਾਦ ਏਆਈ ਅਨੁਵਾਦ ਸੇਵਾ Co-op Translator ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਕੀਤਾ ਗਿਆ ਹੈ। ਜਦੋਂ ਕਿ ਅਸੀਂ ਸਹੀਤਾਵਾਂ ਲਈ ਯਤਨਸ਼ੀਲ ਹਾਂ, ਕਿਰਪਾ ਕਰਕੇ ਧਿਆਨ ਰੱਖੋ ਕਿ ਸਵੈਚਾਲਿਤ ਅਨੁਵਾਦਾਂ ਵਿੱਚ ਗਲਤੀਆਂ ਜਾਂ ਅਸਮੱਤਿਆਵਾਂ ਹੋ ਸਕਦੀਆਂ ਹਨ। ਮੂਲ ਦਸਤਾਵੇਜ਼ ਆਪਣੀ ਮੂਲ ਭਾਸ਼ਾ ਵਿੱਚ ਅਧਿਕਾਰਕ ਸਰੋਤ ਮੰਨਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ। ਜਰੂਰੀ ਜਾਣਕਾਰੀ ਲਈ, ਪੇਸ਼ੇਵਰ ਮਨੁੱਖੀ ਅਨੁਵਾਦ ਦੀ ਸਿਫ਼ਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਅਸੀਂ ਇਸ ਅਨੁਵਾਦ ਦੇ ਉਪਯੋਗ ਤੋਂ ਪੈਦਾ ਹੋਣ ਵਾਲੀਆਂ ਕਿਸੇ ਵੀ ਗਲਤਫਹਿਮੀਆਂ ਜਾਂ ਗਲਤ ਵਿਆਖਿਆਵਾਂ ਲਈ ਜਵਾਬਦੇਹ ਨਹੀਂ ਹਾਂ।