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

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

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

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

Q&A

解決済

1回答

1326閲覧

ネスト構造の辞書から値をCSV抽出する時に、項目ごとにカンマをつけたい

onag

総合スコア3

Python

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

0グッド

0クリップ

投稿2020/05/23 01:28

前提・実現したいこと

PythonでGoogleトレンドデータを抽出し、
自動的にトレンド推移を追うことのできる仕組みを作っています。

データの抽出自体はPythonライブラリのpytrendsを使用してできたのですが、
抽出されたデータをもっと細かく加工できればと思います。

pytrendsから得られるデータはネスト構造の辞書でして、必要な情報が一つの項目に入ってしまっているようです。CSV抽出するときに、その情報を小分けにしたいのですが。。

具体的には、取得データのqueryとvalueが一体化しているので、間に、カンマを入れたい。
*セルごとに区切ることができれば尚いいですが。。

どなたかご教示いただけると助かります。
よろしくお願いします。

データ抽出方法参考ページ:
pytrends で Google トレンドのデータを取得する
https://www.monotalk.xyz/blog/Get-Google-trend-data-with-pytrends/

発生している問題・エラーメッセージ

■データ取得時点 {'japan': {'rising':query, 'top': japanese 100} } ■現在のcsv抽出結果 (セルA1)"japan rising "" query value" (セルA2)0 japanese 100 ■理想のcsv抽出結果 "japan rising "" query value" 0, japanese, 100 *「0」と「japanese」末尾に、カンマをつけたい。 *もしくは「0」、「japanese」、「100」それぞれをセルで区切りたい。

該当のソースコード

Python

1#google trendデータを取得 2 3import csv 4from pytrends.request import TrendReq 5pytrends = TrendReq() 6 7kw_list = ["japan"] 8pytrends.build_payload(kw_list, cat=18, timeframe='now 7-d', geo='US') 9 10lista = pytrends.related_queries() 11 12#csvとして出力する 13 14with open('TrendJapan.csv', 'w') as csv_file: 15 csvwriter = csv.writer(csv_file, delimiter='\t') 16 for session in lista: 17 for item in lista[session]: 18 csvwriter.writerow([session, item, lista[session][item]]) 19 20 21

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。A

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

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

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

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

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

guest

回答1

0

ベストアンサー

とりあえずのヒントです。

取得データのqueryとvalueが一体化しているので

この部分は、pandas の DataFrame になっています。csv.writer と組み合わせるにはちょっと工夫が必要そうですが、

lista[session][item].to_csv('TrendJapan.csv', mode='a')

などとすると以下のような部分を追記してくれると思います。

python

1,query,value 20,amazon japan,100 31,japanese,49 42,yahoo japan,45 53,from japan,42 64,japan store,41 75,sarku japan,35 86,hobbylink japan,24 97,nintendo japan,21 108,japan time,15 119,blue blue japan,15 1210,japan blue,15 1311,japan clothing,13 1412,yahoo japan auctions,12 1513,china,11 1614,nike japan,11 1715,ebay japan,11 1816,japan movt,10 1917,seiko japan,9 2018,seiko,9 2119,japan shirt,9 2220,japan movt watch,8 2321,tokyo japan,8 2422,google japan,8 2523,netflix japan,8 2624,japan coronavirus,7

【参考】

【一応、組み合わせてみたバージョン】

python

1import csv 2from pytrends.request import TrendReq 3pytrends = TrendReq() 4 5kw_list = ["japan"] 6pytrends.build_payload(kw_list, cat=18, timeframe='now 7-d', geo='US') 7 8lista = pytrends.related_queries() 9 10#csvとして出力する 11with open('TrendJapan.csv', 'w') as csv_file: 12 csvwriter = csv.writer(csv_file, delimiter='\t') 13 for session in lista: 14 for item in lista[session]: 15 csvwriter.writerow([session, item, lista[session][item].columns[0], lista[session][item].columns[1]]) 16 lista[session][item].to_csv(csv_file, mode='a', header=False) 17

【結果例】

csv

1japan top query value 20,amazon japan,100 31,japanese,49 42,yahoo japan,45 53,from japan,41 64,japan store,40 75,sarku japan,35 86,hobbylink japan,24 97,nintendo japan,21 108,blue blue japan,15 119,japan blue,15 1210,japan time,15 1311,japan clothing,13 1412,yahoo japan auctions,11 1513,china,11 1614,nike japan,11 1715,ebay japan,11 1816,japan movt,10 1917,seiko japan,9 2018,seiko,9 2119,japan shirt,9 2220,tokyo japan,8 2321,japan movt watch,8 2422,google japan,8 2523,netflix japan,7 2624,japan coronavirus,7 27japan rising query value 280,japan recession,5350 291,dreamland japan,550 302,dreamland,550 313,dreamland in japan,400 324,hobbylink japan shipping,150 335,thank you in japan,90 346,solaris japan,80 357,nori japan,80 368,suits japan,80 379,japan borders open,80 3810,hobbylink japan,70 3911,nintendo land japan,70 4012,crunchyroll store,60 4113,sarku japan hours,60 4214,mastermind japan,60 4315,japan store,60 4416,sarku japan,50

投稿2020/05/23 02:39

編集2020/05/23 03:01
Yasumichi

総合スコア1773

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

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

onag

2020/05/23 04:07

迅速なご回答ありがとうございます。理想とする結果が得られ、大変助かりました。。 「この部分は、pandas の DataFrame になっています。」というヒントもおおいに気づきになりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問