原文:
www.kdnuggets.com/2017/08/instagram-python-data-analysis.html/2
保存/加载数据到磁盘
因为这个请求可能需要很长时间,我们不希望在不必要的时候运行它,所以保存结果并在继续工作时加载它是一个好习惯。为此,我们将使用 Pickle。Pickle 可以序列化任何变量,保存到文件,然后加载。以下是它的工作示例。
保存:
import pickle
filename=username+"_posts"
pickle.dump(myposts,open(filename,"wb"))
加载:
import pickle
filename="nourgalaby_posts"
myposts=pickle.load(file=open(filename))
按点赞数量排序
现在我们有一个名为‘myposts’的字典列表。由于我们想按字典中的某个键进行排序,我们可以这样使用 lambda 表达式:
myposts_sorted = sorted(myposts, key=lambda k:
k['like_count'],reverse=True)
top_posts=myposts_sorted[:10]
bottom_posts=myposts_sorted[-10:]
然后我们可以像上面一样展示它们:
image_urls=get_images_from_list(top_posts)
display_images_from_url(image_urls)
过滤照片
我们可能希望对帖子列表应用一些过滤器。例如,如果帖子中有视频但我只想要图片,我可以这样过滤:
myposts_photos= filter(lambda k: k['media_type']==1, myposts)
myposts_vids= filter(lambda k: k['media_type']==2, myposts)
print len(myposts)
print len(myposts_photos)
print len(myposts_vids)
当然,你可以对结果中的任何变量应用过滤器,所以发挥你的创造力吧 ;)
通知
InstagramAPI.getRecentActivity()
get_recent_activity_response= InstagramAPI.LastJson
for notifcation in get_recent_activity_response['old_stories']:
print notifcation['args']['text']
你应该看到如下内容:
userohamed3 liked your post.
userhacker32 liked your post.
user22 liked your post.
userz77 liked your post.
userwww77 started following you.
user2222 liked your post.
user23553 liked your post.
仅来自一个用户的通知
此时,我们可以随意操作和玩弄通知。例如,我可以仅获取特定用户的通知列表:
username="diana"
for notifcation in get_recent_activity_response['old_stories']:
text = notifcation['args']['text']
if username in text:
print text
让我们尝试一些更有趣的事情:查看你什么时候获得最多的点赞,即一天中的哪个时间段人们最常点赞。为此,我们将绘制一天中的时间与收到的点赞数量之间的关系。
绘制通知的日期时间:
import pandas as pd
df = pd.DataFrame({"date":dates})
df.groupby(df["date"].dt.hour).count().plot(kind="bar",title="Hour" )
正如我们在我的案例中所见,我在下午 6:00 到 10:00 之间获得最多的点赞。如果你对社交媒体感兴趣,你会知道这是高峰使用时间,也是大多数公司选择发布以获得最多互动的时间。
获取粉丝和关注者列表
在这里我将获取粉丝和关注者列表,并对其进行一些操作。
为了使用两个函数getUserFollowings
和getUserFollowers
,你需要先获取user_id
。你可以通过以下方式获取user_id
:
现在你可以简单地按如下方式使用这些函数。请注意,如果粉丝数量很多,你需要进行多次请求(稍后会详细说明)。在这里,我们进行了一个请求以获取粉丝/关注者。JSON 结果包含一个“用户”列表,其中包含每个粉丝/关注者的所有信息。
InstagramAPI.getUserFollowings(user_id)
print len(InstagramAPI.LastJson['users'])
following_list=InstagramAPI.LastJson['users']
InstagramAPI.getUserFollowers(user_id)
print len(InstagramAPI.LastJson['users'])
followers_list=InstagramAPI.LastJson['users']
如果数量很大,这个结果可能不包含完整的数据集。
获取所有粉丝
获取粉丝列表类似于获取所有帖子。我们将进行一次请求,然后使用next_max_id
键进行迭代:
感谢 Francesc Garcia 的支持
import time
followers = []
next_max_id = True
while next_max_id:
print next_max_id
#first iteration hack
if next_max_id == True: next_max_id=''
_ = InstagramAPI.getUserFollowers(user_id,maxid=next_max_id)
followers.extend ( InstagramAPI.LastJson.get('users',[]))
next_max_id = InstagramAPI.LastJson.get('next_max_id','')
time.sleep(1)
followers_list=followers
你应该对关注者做同样的操作,但在这种情况下,我不会这样做,因为一个请求就足以获取到我的所有关注者。
现在我们有了所有关注者和被关注者数据的 JSON 格式列表,我将它们转换为更友好的数据类型——一个集合——以便对其执行一些集合操作。
我将只取'username'并将其转换为一个set()
。
user_list = map(lambda x: x['username'] , following_list)
following_set= set(user_list)
print len(following_set)
user_list = map(lambda x: x['username'] , followers_list)
followers_set= set(user_list)
print len(followers_set)
在这里,我选择将每个用户的用户名集合在一起。'full_name'也可以用——而且更友好——但它不是唯一的,有些用户可能没有'full_name'的值。
现在我们有了两个集合,我们可以进行以下操作:
这里我们有一些关于粉丝的统计数据。你可以从这一点做很多事情,例如保存粉丝列表,然后在稍后的时间比较,以获得取消关注者的列表。
这些是你可以用 Instagram 数据做的一些事情。我希望你了解到如何使用 Instagram API,并对它的基本用途有了一个初步了解。请关注原文,因为它仍在开发中,未来将会有更多你可以做的事情。如有任何问题或建议,请随时联系我。
简介: Nour Galaby 是一位对数据科学和机器学习充满热情的数据科学爱好者。
相关内容:
-
6 件你可以用 Python 处理 Facebook 数据的有趣事情
-
情感和抑郁的分析
-
Python 为何突然变得如此受欢迎的 6 个原因
1. Google 网络安全证书 - 快速开启网络安全职业之路。
2. Google 数据分析专业证书 - 提升你的数据分析技能
3. Google IT 支持专业证书 - 支持你的组织 IT 需求