2013-07-23 7 views
7

मैं पांडा के लिए नया हूं (ठीक है, सभी चीजों के लिए "प्रोग्रामिंग" ...), लेकिन इसे एक कोशिश देने के लिए प्रोत्साहित किया गया है। मेरे पास एक "mweetsodb डेटाबेस" - "test" है - "ट्वीट्स" नामक संग्रह के साथ। मैं IPython में डेटाबेस का उपयोग:मैं mongodb संग्रह से डेटा को पांडा 'डेटाफ्रेम में कैसे लोड कर सकता हूं?

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- टेबल की तरह - डेटाफ्रेम कहा जाता है। मैं अपने "ट्वीट्स" संग्रह से डेटा को पांडा 'डेटाफ्रेम में कैसे लोड कर सकता हूं? और डेटाबेस के भीतर एक उप-दस्तावेज़ के लिए मैं क्वेरी कैसे कर सकता हूं?

+0

इस read_json का उपयोग कर के लिए एक रास्ता है, जो अधिक कुशल हो जाएगा (विशेष रूप से बड़े डेटा सेट के लिए) होना चाहिए। –

उत्तर

16

कर्सर आप इसे DataFrame

को गुजर
import pandas as pd 
df = pd.DataFrame(list(tweets.find())) 
+0

ग्रेट, संग्रह के दस्तावेजों को "डीएफ" पास करके डेटा कॉलम में लाया जाता है। हालांकि, मुझे एक दस्तावेज, "इकाइयों" में एक उप-दस्तावेज़ - "हैशटैग.टेक्स्ट" के लिए पूछताछ की आवश्यकता है। कोई विचार है कि मैं पांडा के भीतर से यह कैसे कर सकता हूं? – user2161725

+0

क्या आप अपने दस्तावेज़ों के लिए कुछ उदाहरण दिखा सकते हैं ताकि मैं आपको सहायता दे सकूं? – waitingkuo

+0

आपको क्या चाहिए? हैशटैग फ़ील्ड? – waitingkuo

3

आप अपने MongoDB डेटा लोड कर सकते हैं इससे पहले कि MongoDB से मिल गया समझने DataFame इस कोड का उपयोग करने के लिए पांडा। इससे मेरा काम बनता है। आप के लिए भी आशा है।

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

आप इस तरह MongoDB में डेटा है, तो:

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

आप सीधे इस तरह एक dataframe में डेटा डाल सकते हैं:

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() 

यह इस प्रारूप में dataframe दे देंगे:

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

अगर हम संग्रह नाम का उल्लेख नहीं करना चाहते हैं तो सभी संग्रहों के लिए डेटा कैसे प्राप्त करें ?? –

संबंधित मुद्दे