ゾマト感情分析
Zomato Sentiment Analysis
EDAとデータの準備を通じた旅
この記事では、目的を定義し、データをロードし、探索的データ分析を行い、データの準備を行います
モデルのために守るべきステップ:
- 問題の目的を定義する。
- データの収集
- 探索的データ分析(EDA) EDAは、データをよりよく理解するための手法を使い、他の視覚的表現を提供するための場所です。
- データの準備 データは正しい形式でない場合があります。外れ値や欠損値があるかもしれません。したがって、不整合のセットをスキャンして修正する必要があります。注意:データの準備手順とEDAは切っても切れない関係です。
- 機械学習モデルの構築
- モデルの評価と最適化
- 予測/展開
さあ、実装にダイブしましょう!
目的
このプロジェクトは、インドのZomatoレストランデータを分析し、顧客のレビューによる感情を理解し、データを視覚化して洞察を得ることを目的としています。
ライブラリの読み込み
データセット:リンク
import numpy as npimport pandas as pdimport seaborn as snsimport matplotlib.pyplot as plt %matplotlib inlineimport warnings warnings.filterwarnings("ignore")import datetime as dtfrom wordcloud
データの読み込み
データセットのリンク:Github
review = pd.read_csv("Zomato Restaurant reviews.csv")
探索的データ分析
何よりも、EDAは心の状態です。データセットに変更を加える前に実行できる最初のステップです。EDAのプロセスには、要約、可視化、データセットの重要な特性に深く関わることが含まれます。
データはどのように見えますか?
review.random(5) : ランダムに5つのレコードを取得 review.tail() : 最後の5つのレコードを取得 review.head() : 最初の5つのレコードを取得 メタデータには、レストランのフォロワー数とレビュー数が含まれています。
データはどれくらい大きいですか?
7つの特徴を持つ10000件のレコード(またはレビュー)があります。
データセットの列
列のデータ型は何ですか?
ノンヌルのカウントとデータ型の情報が得られます。また、メモリ上でどれだけのスペースを占めているかも示されます。
数学的に見たデータはどのように見えますか?
重複データはありますか?
重複したデータが36件あります。重複したデータを見てみましょう
すべての重複した行はnull値です。前処理を行う際には、これらを後で削除することができます。
欠損値はありますか?
多くのnull値があります。
レビューデータセットの各変数のユニークな値を確認します。
評価には10個のユニークな評価があるため、評価のユニークな値を確認します
評価は顧客によって1、1.5、2、2.5、…5、’like’のように与えられており、いくつかの欠損値があります。
結果 :
- 評価は整数であるべきですが、’like’という値が含まれているため、オブジェクトデータ型です。
- タイミングはテキスト形式で提供されており、オブジェクトデータ型です。
- 重複した値がありますが、それらはnull値であるため、削除することができます。
- データセットは合計で10,000件のレビューを含み、7つの特徴を網羅しています。
- レストラン名と投稿された写真の数を除いて、ほとんどの値はnullです。
- レビューデータセットの説明に基づいて、100軒のレストランが顧客からのレビューを受け取っていることが推測できます。
- 評価は0から5までのカテゴリ変数と考えられます。欠損値は、特定のレストランの中央評価で置き換えることができます。’like’は評価ではないため、味が好きな人を表すために4の評価で置き換えることができます。
- 顧客は36種類の異なる値で写真を投稿しています。
データの準備
EDAセクションが終了した時点で、クリーニングや変換を行っていないことに気付いたかもしれません。しかし、どのようなクリーニングが必要か、そして何をクリーニングする必要があるかを判断しました。注:特徴量エンジニアリングはデータの前処理ステップです。基本的には、生データをより意味のあるデータまたはMLで理解できるデータに変換します。
nullの重複値を削除します
review.drop_duplicates(inplace = True, keep = False)
inplace = True:新しいDataFrameを作成するのではなく、DataFrameを変更しています。keep = False:すべての重複値を削除
評価の「Like」を評価4に置換し、列をfloat型に変換します 注意::Series.strはシリーズの値にアクセスして文字列として使用し、いくつかのメソッドを適用するために使用できます
review['Rating']=review['Rating'].str.replace("Like",'4').astype('float')
「Followers」列のnull値を0で埋めます
review['Followers'].fillna(0,inplace = True)
「Time」列を日時に変換し、時間と年を抽出します
今は「Review」列にのみnull値があるため、レビューのないレコードは削除できます。(欠損値の数が少なかったため、影響を与えませんでした)
メタデータをレビューとフォロワーに分割する
「フォロワー」の欠損値を0で置き換え、時間を日時に変換し、時間と年を抽出する
review['Followers'].fillna(0,inplace = True)review["Time"] = pd.to_datetime(review['Time'])review['Hour'] = pd.DatetimeIndex(review['Time']).hourreview['Year'] = pd.DatetimeIndex(review['Time']).year
レストランに対する平均評価とレビューの総数
avg_rating = review.groupby('Restaurant').agg({'Rating' : 'mean', 'Reviewer' : 'count'}).reset_index().rename(columns = {'Reviewer' : 'Total_Review'})avg_rating
「この旅に参加してくれてありがとう!ゾマト感情分析の世界に深く潜り込むにつれて、今後のアップデートにご期待ください。まだまだエキサイティングなことが待っていますので、次のステップと洞察については引き続きご連絡をお待ちしています。一緒にデータの中に隠されたストーリーを解き明かしましょう。では、また近々お会いしましょう!
読んでいただきありがとうございます!もし私の作品を楽しんでいただけたら、VoAGIでのフォローを考えていただけると嬉しいです。将来もっと多くの情報を共有できることを楽しみにしています。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles