使用reticulate包调用Python获取微信好友数据

使用reticulate包调用Python获取微信好友数据

RStudio公司推出的reticulate包可以直接在R脚本中调用Python代码,本文尝试使用reticulate包调用Python获取微信好友数据,并绘制好友的分布图。

首先reticulate包的文档地址为:reticulate

该包提供了多种调用Python代码的形式,本文使用的是source_python()函数,该函数可以引用一个Python函数作为R函数使用。

首先我们需要使用Python的itchat包写一个获取好友数据的函数:

R
1
2
3
4
5
6
7
def getfriends():
import itchat
import pandas as pd
itchat.auto_login(hotReload = True)
friends = itchat.get_friends(update = True)
friends = pd.DataFrame(friends)
return(friends)

并将该文件保存为:getfriends.py

然后是R部分,运行的过程中需要扫描二维码登录:

R
1
2
3
4
5
6
7
8
9
10
11
library(dplyr)
library(reticulate)
use_python("/Users/mr.cheng/anaconda3/bin/python") # 设定自己的二维码的路径
source_python('getfriends.py')
df <- getfriends() %>%
group_by(Province) %>%
summarise(n = n()) %>%
mutate(
Province = gsub(pattern = "[a-z, A-Z]", Province, replacement = "")
) %>%
filter(Province != "" & Province != "--")
省份 好友数量
安徽 40
澳门 3
北京 12
重庆 2
福建 6
甘肃 1
广东 139
海南 2
河北 4
湖北 10
湖南 4
吉林 4
江苏 10
辽宁 3
内蒙古 5
山东 3
山西 1
陕西 3
上海 8
四川 2
台湾 2
天津 1
香港 7
云南 2
浙江 5

接下来使用echarts4r包绘制一幅中国地图展示这个数据。

这里需要使用geojson数据,昨天我又找了一个不错的中国地图的geojson数据存储库:echarts-map-data。这个存储库里的geojson文件的好处是:

  1. 省份的名字都是简洁的名字,例如内蒙古就是内蒙古,而不是内蒙古自治区;
  2. 藏南争议地区归中国。
R
1
2
3
4
5
6
7
8
9
10
11
12
13
library(echarts4r.suite)
json <- jsonlite::read_json('https://raw.githubusercontent.com/taozhiw/echarts-map-data/master/world/geojson/China.json')
df %>%
e_charts(Province) %>%
e_map_register("中国", json) %>%
e_map(n, map = "中国") %>%
e_visual_map(n,
color = c(rev(RColorBrewer::brewer.pal(3, "Greens"))),
left = '90%',
top = '50%') %>%
e_title("我的微信好友分布",
textStyle = list("fontSize" = 30,"fontFamily" = "STSongti-SC-Bold"),
textAlign = "middle", left = "50%")

# Python, R

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×