【问题标题】:How to save and handle tweets saved as JSON in Python如何在 Python 中保存和处理保存为 JSON 的推文
【发布时间】:2013-10-01 20:55:08
【问题描述】:

我是一个 Python 新手,我正在编写一段代码来收集来自两个邻居的推文,将它们保存为 JSON 格式并绘制一些数据。您对如何提取推文日期和时间或如何计算邻居的推文数量有什么建议吗?换句话说,将带有 JSON 数据的 .txt 的不同变量隔离到可绘制的东西中的最佳方法是什么?

非常感谢!

from twitter import *

import sys
import os.path
import simplejson as json
import tweepy
import csv

#log into Twitter
OAUTH_TOKEN = 'XXX'
OAUTH_SECRET = 'XXX'
CONSUMER_KEY = 'XXX'
CONSUMER_SECRET = 'XXX'

t = Twitter(auth=OAuth(OAUTH_TOKEN, OAUTH_SECRET, CONSUMER_KEY, CONSUMER_SECRET))
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)

#I consider A to be a 2km radius circle
result_A = t.search.tweets(query="kaffe",geocode="55.662610,12.604074,1.24mi",result_type='recent')
with open('data_A.txt', 'w') as outfile:
     json.dump(result_A, outfile)

#Similarly, B is a 2km radius circle 
result_B = t.search.tweets(query="kaffe",geocode="55.694700,12.548283,1.24mi",result_type='recent')
with open('data_B.txt', 'w') as outfile:
     json.dump(result_B, outfile)

【问题讨论】:

  • 您可能需要提供一条推文示例,以便我们评估其格式
  • 为什么选择 CSV?以便您可以在 Excel 中处理它? (假设您的意思是 CSV 而不是 CVS,这只是一个错字)
  • 嗨 Talvalin,这里是 file_A:dl.dropboxusercontent.com/u/2684973/data_A.txt
  • 嗨,Erik,那是个错误。如果我理解的很好,我想做的就是建立一个SQL数据库。我相应地更改了问题的文本。
  • 您可以直接从 Python 使用各种工具进行绘图;您不需要 SQL 数据库或 Excel/CSV 文件;你可以例如直接从内存中绘图,或者如果您需要 SQL,只需使用 Python 内置的 SQLite3。

标签: python json twitter


【解决方案1】:

如果您需要 Python 中更高级的电子表格功能,您可能需要查看http://manns.github.io/pyspread/

此外,SQLite3 内置为 sqlite3 模块:只需创建一个内存数据库和 SQL。

但是,这里有一些关于如何在纯 Python 中完成基本操作的示例:

import json
import urllib
from datetime import datetime

data = urllib.urlopen('https://dl.dropboxusercontent.com/u/2684973/data_A.txt').read()
data = json.loads(data)

tweets = data['statuses']

def parse_created(timestamp):
    _, m, d, t, _, y = timestamp.split(' ')
    return datetime.strptime('%s %s %s %s' % (m, d, t, y), '%b %d %H:%M:%S %Y')

tweets_data = [(x['user']['name'], x['text'], parse_created(x['created_at']))
               for x in tweets]

tweets_data 现在包含这些列的“表格”,如果您需要这种格式(例如用于绘图);或:

erik_tweets = [x for x in tweets
               if x['user']['name'] == 'Erik Allik']

或:

erik_tweets_before_today = [
    x for x in tweets
    if x['user']['name'] == 'Erik Allik'
    and x['created_at'].date() < datetime.date.today()
]

【讨论】:

  • 谢谢!以我可以绘制的格式转换时间的最佳方法是什么?现在如果我打印 tweets_data[2] 我得到 datetime.datetime(2013, 10, 2, 7, 41, 35)
  • 这是一个datetime 对象;如果要将其转换为字符串,请使用strftime 方法:docs.python.org/2/library/datetime.html
  • 太棒了!最后一件事:如何访问 tweets_data 中的时间列?如果我输入 print tweets_data[:,2] 我得到“TypeError:列表索引必须是整数,而不是元组”。
  • 那你为什么输入[:,2]呢?当你输入它时,你认为它是什么意思?总的来说,即使我知道您想要快速轻松的解决方案,我还是建议您学习 Python;这是一个开始:learnpythonthehardway.org
  • @albus_c:另外,Python 有大量的数据处理,甚至还有可用的电子表格库/工具:NumPySciPyPandaspyspread,可能还有其他;对于绘图,请查看例如 matplotlib
猜你喜欢
  • 1970-01-01
  • 2018-06-17
  • 1970-01-01
  • 2016-03-26
  • 2013-02-19
  • 1970-01-01
  • 2016-07-01
  • 2014-06-25
  • 1970-01-01
相关资源
最近更新 更多