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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Mecab

Mecabは、オープンソースの形態素解析エンジンです。 言語、辞書、コーパスに依存しない汎用的な設計を基本方針としています。 Mecabの由来は、開発者の好物である和布蕪(めかぶ)から名づけられました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

2回答

728閲覧

Pythons Pandasでエクセルに落とす方法

pon244

総合スコア59

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Mecab

Mecabは、オープンソースの形態素解析エンジンです。 言語、辞書、コーパスに依存しない汎用的な設計を基本方針としています。 Mecabの由来は、開発者の好物である和布蕪(めかぶ)から名づけられました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

1グッド

2クリップ

投稿2020/02/06 02:56

編集2020/02/06 08:19

下記の結果をPandasを使用して格納し、エクセルに落としたいです。
利用目的としては、複数同じ単語があるのでユニークにして数を計算したいです。
単語名 件数 
コロナ 405
マスク 2

#検索キーワード q = "#花粉 exclude:retweets" #データ取得 tweet_doc =[] for tweet in tweepy.Cursor(api.search, q=q,tweet_mode="extended").items(500): tweet_doc.append(tweet.full_text) import MeCab def sep_by_mecab(text): m = MeCab.Tagger ('-Ochasen') node = m.parseToNode(text) word_list=[] while node: hinshi = node.feature.split(",")[0] if hinshi in ["名詞","動詞","形容詞"]: origin = node.feature.split(",")[6] if origin not in ["*","する","いる","なる","てる","れる","ある","こと","もの","HTTPS","花粉","花粉症","症"] : word_list.append(origin) node = node.next return word_list documents=[] for t in tweet_doc: documents.append(set(sep_by_mecab(t))) import pyfpgrowth import pprint #分析 patterns = pyfpgrowth.find_frequent_patterns(documents, 30) #降順に並び替えて見やすく表示 sorted_patterns = sorted(patterns.items(),reverse=True,key=lambda x:x[1]) pprint.pprint(sorted_patterns)

結果
[(('マスク',), 169),
(('コロナ',), 94),
(('飛ぶ',), 72),
(('ウイルス', 'コロナ'), 67),
(('コロナ', 'マスク'), 67),
(('ウイルス', 'マスク'), 57),
(('対策',), 53),
(('日',), 51),
(('鼻',), 51),
(('ウイルス', 'コロナ', 'マスク'), 51),
(('目',), 44),
(('今日',), 44),
(('の',), 40),
(('アレルギー',), 40),
(('くる',), 39),
(('スギ',), 39),
(('でる',), 38),
(('コロナ', '新型'), 38),
(('インフルエンザ', 'マスク'), 38),
(('月',), 37),
(('鼻水',), 36),
(('ない',), 36),
(('インフルエンザ', 'ウイルス'), 36),
(('インフルエンザ', 'コロナ'), 36),
(('ん',), 35),
(('飛散',), 35),
(('でる', '飛ぶ'), 35),
(('できる',), 34),
(('くしゃみ',), 33),
(('ウイルス', '新型'), 32),
(('ウイルス', 'コロナ', '新型'), 31),
(('枚',), 30),
(('インフルエンザ', 'コロナ', 'マスク'), 30)]
===================
上記の結果をPndasで下記のように格納したいです!
単語名 件数 
コロナ 405
マスク 2

DrqYuto👍を押しています

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

stdio

2020/02/06 03:37

> どのようにデータを格納して、Pnadasを使用すればいいかわからず困っています。 個人的には自分で考えろとしか言えません。 データの加工は他人に相談して解決出来るものではないです。 まずはどのような情報が必要なのかを教えてください。 Twitterと言ってもそこには多くの情報があります。どんな情報をPnadasで外部ファイルとして吐き出したいのですか?
magichan

2020/02/06 04:19

ソースコードのインデントが崩れて表示されております。 ソースコードはコードブロックのMarkdownで囲ってください。
magichan

2020/02/06 04:21

あと、 pprint.pprint(sorted_patterns) の出力結果を提示してください。 (公開したくない情報はダミーのデータに置き換えて頂いて構いません)
pon244

2020/02/06 07:38

情報不足で申しございません。 コード ``` #検索キーワード q = "#花粉 exclude:retweets" #データ取得 tweet_doc =[] for tweet in tweepy.Cursor(api.search, q=q,tweet_mode="extended").items(500): tweet_doc.append(tweet.full_text) import MeCab def sep_by_mecab(text): m = MeCab.Tagger ('-Ochasen') node = m.parseToNode(text) word_list=[] while node: hinshi = node.feature.split(",")[0] if hinshi in ["名詞","動詞","形容詞"]: origin = node.feature.split(",")[6] if origin not in ["*","する","いる","なる","てる","れる","ある","こと","もの","HTTPS","花粉","花粉症","症"] : word_list.append(origin) node = node.next return word_list documents=[] for t in tweet_doc: documents.append(set(sep_by_mecab(t))) import pyfpgrowth import pprint #分析 patterns = pyfpgrowth.find_frequent_patterns(documents, 30) #降順に並び替えて見やすく表示 sorted_patterns = sorted(patterns.items(),reverse=True,key=lambda x:x[1]) pprint.pprint(sorted_patterns) ``` 結果 [(('マスク',), 169), (('コロナ',), 94), (('飛ぶ',), 72), (('ウイルス', 'コロナ'), 67), (('コロナ', 'マスク'), 67), (('ウイルス', 'マスク'), 57), (('対策',), 53), (('日',), 51), (('鼻',), 51), (('ウイルス', 'コロナ', 'マスク'), 51), (('目',), 44), (('今日',), 44), (('の',), 40), (('アレルギー',), 40), (('くる',), 39), (('スギ',), 39), (('でる',), 38), (('コロナ', '新型'), 38), (('インフルエンザ', 'マスク'), 38), (('月',), 37), (('鼻水',), 36), (('ない',), 36), (('インフルエンザ', 'ウイルス'), 36), (('インフルエンザ', 'コロナ'), 36), (('ん',), 35), (('飛散',), 35), (('でる', '飛ぶ'), 35), (('できる',), 34), (('くしゃみ',), 33), (('ウイルス', '新型'), 32), (('ウイルス', 'コロナ', '新型'), 31), (('枚',), 30), (('インフルエンザ', 'コロナ', 'マスク'), 30)] =================== 上記の結果をPndasで下記のように格納したいです! 単語名 件数  コロナ 405 マスク 2
magichan

2020/02/06 08:13

残念ながら、ここ(質問修正依頼)はMarkdownが使えませんので、編集ボタンより質問を再編集していただけたらと思います。
guest

回答2

0

ベストアンサー

こういうことでしょうか?

Python

1from collections import Counter 2import pandas as pd 3pd.set_option('display.unicode.east_asian_width', True) 4 5lines = [(('マスク',), 169), 6(('コロナ',), 94), 7(('飛ぶ',), 72), 8(('ウイルス', 'コロナ'), 67), 9(('コロナ', 'マスク'), 67), 10(('ウイルス', 'マスク'), 57), 11(('対策',), 53), 12(('日',), 51), 13(('鼻',), 51), 14(('ウイルス', 'コロナ', 'マスク'), 51), 15(('目',), 44), 16(('今日',), 44), 17(('の',), 40), 18(('アレルギー',), 40), 19(('くる',), 39), 20(('スギ',), 39), 21(('でる',), 38), 22(('コロナ', '新型'), 38), 23(('インフルエンザ', 'マスク'), 38), 24(('月',), 37), 25(('鼻水',), 36), 26(('ない',), 36), 27(('インフルエンザ', 'ウイルス'), 36), 28(('インフルエンザ', 'コロナ'), 36), 29(('ん',), 35), 30(('飛散',), 35), 31(('でる', '飛ぶ'), 35), 32(('できる',), 34), 33(('くしゃみ',), 33), 34(('ウイルス', '新型'), 32), 35(('ウイルス', 'コロナ', '新型'), 31), 36(('枚',), 30), 37(('インフルエンザ', 'コロナ', 'マスク'), 30)] 38 39# 単語毎に頻度を積算 40words = {} 41for line in lines: 42 for word in line[0]: 43 if word not in words: 44 words[word] = 0 45 words[word] += line[1] 46 47df = pd.DataFrame({'value':list(words.keys()), 'count':list(words.values())}) 48df = df.sort_values('count', ascending=False).reset_index(drop=True) 49print(df.head())

Python

1# teratailアップ用 2import pytablewriter 3writer = pytablewriter.MarkdownTableWriter() 4writer.from_dataframe(df.head()) 5writer.write_table()
valuecount
コロナ414
マスク412
ウイルス274
インフルエンザ140
飛ぶ107

投稿2020/02/06 09:01

編集2020/02/06 09:25
can110

総合スコア38262

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pon244

2020/02/06 10:51

ありがとうございます!! 上記でできました! これをエクセルに落としたい場合はどうすればいいですか、、、泣 ?
can110

2020/02/06 10:52

magichanさんの回答にあるとおり、to_excelを使ってください。
guest

0

一応、sorted_patterns のデータをそのままpandasでDataFrame化してExcelに書き出すと、以下のようなExcelが得られますが・・・行いたいことは、これでしょうか?

import pandas as pd df = pd.DataFrame(sorted_patterns, columns=['単語', '件数']) df.to_excel('patterns.xlsx', index=None)

出力
イメージ説明

投稿2020/02/06 08:46

magichan

総合スコア15898

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問