2013-07-23 6 views
7

私はパンダには新しい(まあ、すべてのこと "プログラミング" ...)が、それを試してみることをお勧めしています。 私はmongodbデータベース "test"を持っていて、 "tweets"というコレクションを持っています。 私はipythonでデータベースにアクセスし、次のようにツイートでmongodbコレクションのデータをpandasのDataFrameにロードするにはどうすればよいですか?

import sys 
import pymongo 
from pymongo import Connection 
connection = Connection() 
db = connection.test 
tweets = db.tweets 

文書の文書構造は次のとおりです。

entities': {u'hashtags': [], 
    u'symbols': [], 
    u'urls': [], 
    u'user_mentions': []}, 
u'favorite_count': 0, 
u'favorited': False, 
u'filter_level': u'medium', 
u'geo': {u'coordinates': [placeholder coordinate, -placeholder coordinate], u'type': u'Point'}, 
u'id': 349223842700472320L, 
u'id_str': u'349223842700472320', 
u'in_reply_to_screen_name': None, 
u'in_reply_to_status_id': None, 
u'in_reply_to_status_id_str': None, 
u'in_reply_to_user_id': None, 
u'in_reply_to_user_id_str': None, 
u'lang': u'en', 
u'place': {u'attributes': {}, 
    u'bounding_box': {u'coordinates': [[[placeholder coordinate, placeholder coordinate], 
    [-placeholder coordinate, placeholder coordinate], 
    [-placeholder coordinate, placeholder coordinate], 
    [-placeholder coordinate, placeholder coordinate]]], 
    u'type': u'Polygon'}, 
    u'country': u'placeholder country', 
    u'country_code': u'example', 
    u'full_name': u'name, xx', 
    u'id': u'user id', 
    u'name': u'name', 
    u'place_type': u'city', 
    u'url': u'http://api.twitter.com/1/geo/id/1820d77fb3f65055.json'}, 
u'retweet_count': 0, 
u'retweeted': False, 
u'source': u'<a href="http://twitter.com/download/iphone" rel="nofollow">Twitter for iPhone</a>', 
u'text': u'example text', 
u'truncated': False, 
u'user': {u'contributors_enabled': False, 
    u'created_at': u'Sat Jan 22 13:42:59 +0000 2011', 
    u'default_profile': False, 
    u'default_profile_image': False, 
    u'description': u'example description', 
    u'favourites_count': 100, 
    u'follow_request_sent': None, 
    u'followers_count': 100, 
    u'following': None, 
    u'friends_count': 100, 
    u'geo_enabled': True, 
    u'id': placeholder_id, 
    u'id_str': u'placeholder_id', 
    u'is_translator': False, 
    u'lang': u'en', 
    u'listed_count': 0, 
    u'location': u'example place', 
    u'name': u'example name', 
    u'notifications': None, 
    u'profile_background_color': u'000000', 
    u'profile_background_image_url': u'http://a0.twimg.com/images/themes/theme19/bg.gif', 
    u'profile_background_image_url_https': u'https://si0.twimg.com/images/themes/theme19/bg.gif', 
    u'profile_background_tile': False, 
    u'profile_banner_url': u'https://pbs.twimg.com/profile_banners/241527685/1363314054', 
    u'profile_image_url':  u'http://a0.twimg.com/profile_images/378800000038841219/8a71d0776da0c48dcc4ef6fee9f78880_normal.jpeg', 
    u'profile_image_url_https':  u'https://si0.twimg.com/profile_images/378800000038841219/8a71d0776da0c48dcc4ef6fee9f78880_normal.jpeg', 
    u'profile_link_color': u'000000', 
    u'profile_sidebar_border_color': u'FFFFFF', 
    u'profile_sidebar_fill_color': u'000000', 
    u'profile_text_color': u'000000', 
    u'profile_use_background_image': False, 
    u'protected': False, 
    u'screen_name': placeholder screen_name', 
    u'statuses_count': xxxx, 
    u'time_zone': u'placeholder time_zone', 
    u'url': None, 
    u'utc_offset': -21600, 
    u'verified': False}} 

、私の知る限り理解し、パンダの主要なデータ構造 - spreadsheet-テーブルのように - DataFrameと呼ばれます。私の「つぶやき」コレクションのデータをパンダのDataFrameにロードするにはどうしたらいいですか?そして、データベース内のサブ文書をどのようにクエリできますか?

+0

を(特に大規模なデータセットのために)よりeffecientだろう、この使用read_jsonを実行する方法があるようにあるべきです。 –

答えて

16

はあなたがこのコードを使用してDataFameパンダにあなたのMongoDBデータをロードすることができますDATAFRAME

import pandas as pd 
df = pd.DataFrame(list(tweets.find())) 
+0

"df"を渡すことで、コレクションのドキュメントがデータ列に表示されます。しかし、 "entity"という文書の中のサブ文書 "hashtags.text"を照会する必要があります。どのように私はパンダの中からこれを行うことができますか? – user2161725

+0

私はあなたに助けを与えることができるようにあなたの文書のいくつかの例を示すことができますか? – waitingkuo

+0

何が必要ですか?ハッシュタグフィールド? – waitingkuo

3

を渡す前にMongoDBからもらったカーソルを理解します。わたしにはできる。あなたにも期待してください。あなたはこのようにMongoDBのデータを持っている場合

import pymongo 
import pandas as pd 
from pymongo import Connection 
connection = Connection() 
db = connection.database_name 
input_data = db.collection_name 
data = pd.DataFrame(list(input_data.find())) 
+0

ここでコレクション名が挙げられています。コレクション名について言えば、それをどのようにアーカイブすることができますか? –

6

[ 
    { 
     "name": "Adam", 
     "age": 27, 
     "address":{ 
      "number": 4, 
      "street": "Main Road", 
      "city": "Oxford" 
     } 
    }, 
    { 
     "name": "Steve", 
     "age": 32, 
     "address":{ 
      "number": 78, 
      "street": "High Street", 
      "city": "Cambridge" 
     } 
    } 
] 

あなたがまっすぐにこのようなデータフレームにデータを置くことができます。

from pandas import DataFrame 

df = DataFrame(list(db.collection_name.find({})) 

そして、あなたはこの出力を取得します:

df.head() 

| | name | age | address             | 
|----|---------|------|-----------------------------------------------------------| 
| 1 | "Steve" | 27 | {"number": 4, "street": "Main Road", "city": "Oxford"} | 
| 2 | "Adam" | 32 | {"number": 78, "street": "High St", "city": "Cambridge"} | 

ただし、サブ文書はJSONとしてサブ文書セル内に表示されます。サブドキュメントのプロパティが個々のセルとして表示されるようにオブジェクトをフラット化する場合は、パラメータなしでjson_normalizeを使用できます。

from pandas.io.json import json_normalize 

datapoints = list(db.collection_name.find({}) 

df = json_normalize(datapoints) 

df.head() 

これは、この形式でのデータフレームを与える:

| | name | age | address.number | address.street | address.city | 
|----|--------|------|----------------|----------------|--------------| 
| 1 | Thomas | 27 |  4   | "Main Road" | "Oxford"  | 
| 2 | Mary | 32 |  78   | "High St"  | "Cambridge" | 
+0

コレクション名について言及したくない場合、すべてのコレクションのデータを取得する方法は? –

関連する問題