質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.32%

PandasでのIDFの求め方

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 171

1mzmk

score 16

私は、あるjsonファイルを使用しています。
私のjsonファイルは、下のURLのjsonファイルでワインについてのレビューについてのデータで、多くの種類のワインのレビューについてリストとして記載されています。
'[https://github.com/tulip-lab/sit742/raw/master/Assessment/2019/data/wine.json']
行には”country”,"variety", "price", "point", "description"などの項目があります。
私のjsonファイルは下のような表になります。(1行が1レビューになってます。)

イメージ説明
まず、私のjsonファイルをストップワードとして'stopwords.txt'に記載された単語を”description”から省いた状態にしました。
下のURLが'stopwords.txt'となっています。
'https://github.com/tulip-lab/sit742/raw/master/Assessment/2019/data/stopwords.txt'
そして、この、ストップワードを取り除いた”description”だけのものを”df9”と定義しました。

以下のコードで定義した”df9”のTF-IDF >0.4 となる単語とそのTF-IDFの値を出力したいと思ってます。

import pandas as pd
from nltk.tokenize import RegexpTokenizer

df = pd.read_json("wine.json")
with open('stopwords.txt') as f:
    stop_words = f.read().splitlines()
stop_words = set(stop_words)

tokenizer = RegexpTokenizer(r"\w+(?:[-']\w+)?")

def f(s):
    tokens = tokenizer.tokenize(s)
    return " ".join(word for word in tokens if word not in stop_words)

df["description"] = df["description"].map(f)
df.to_json("result.json")

df6 = pd.read_json("result.json")

df7 = df["description"]

df8 = df6.query('variety == "Shiraz"')

df9 = df8["description"]
df9

そして”df9”のTF-IDF >0.4 となる単語とそのTF-IDFの値を出力するために以下のコードを書きました。

from sklearn.feature_extraction.text import TfidfVectorizer
tfidf = TfidfVectorizer(analyzer='word', stop_words = 'english')

vecs = tfidf.fit_transform(df9)


その後、[https://teratail.com/questions/84025]
にあるように

TF_IDF = vecs.toarray()
terms = tfidf.get_feature_names()
for idx, word in zip(*np.where(TF_IDF> 0.4)):
    print("INDEX:{}, WORD:{}, TF-IDF:{}".format(idx, terms[word], TF_IDF[(idx,word)]))


という感じでコードを書いて”df9”のTF-IDF >0.4 となる単語とそのTF-IDFの値を出力しようとしたのですが、
np.where()という属性がpandasには存在しないのでエラーとなってしまいました。
なので、どのように書けば、エラーが発生せずに、”df9”のTF-IDF >0.4 となる単語とそのTF-IDFの値を出力できるのでしょうか?

よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • python_master

    2019/04/04 17:24

    jsonの中身がわからないとパラメータを提示されても答えようがないかと思われます。

    キャンセル

回答 1

checkベストアンサー

+1

np.wherenumpyの関数です。import numpy as npとか書いておきましょう。

これまでの質問を見ていてもプログラミング全般に不慣れな方という印象を受けるので、pythonの基礎からしっかりやることをおすすめします。まずは基本的なコードを書けるようになることで、データ分析ができるようになるのはそれからです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/04 22:50

    ご回答いただきありがとうございます。
    おかげさまで、解決することができました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.32%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る