19-R+Python处理MEM班同学微信签名

1 准备工作

  • 备注微信好友真实姓名。
  • 通过Python的itchat库爬取所有微信好友信息。代码如下:
#-*- coding:utf-8 -*-

"""
-----------------------------------
版本:Python3.6.1
-----------------------------------
"""
import io
# 导入itchat包
import itchat
def main():
    # 使用二维码登陆(括号内参数可以保持一段时间登录状态)
    itchat.auto_login(hotReload=True)
    # 打印出好友列表
    friends = itchat.get_friends(update=True)
    # print(friends)
    with io.open('C:/Users/Admin/Downloads/friend.txt', 'a', encoding='utf-8') as f:
        f.write(str(friends))

if __name__ == '__main__':
    main()

2 文本整理

2.1 读取文本

library(pacman)
p_load(data.table,tidyr,stringr,dplyr)
df <- fread('C:/Users/Admin/Downloads/friend.txt',header = F,
            stringsAsFactors = F,encoding = "UTF-8",sep = "{")
# 查看数据框结构
str(df)
# 去掉第1列和第2列,第1列没有数据,第2列是自己,信息格式与其他列不一致
df <- df[,3:692]

2.2 将有用信息清洗成原始素材

# 行列转置,宽转长
df2 <- gather(df,key="id",value="info")

# 将value列分裂为多列
df3 <- separate(df2,info,sep=",",into = c('Uin','UserName','NickName','HeadImgUrl','ContactFlag',
                                          'MemberCount','MemberList','RemarkName','HideInputBarFlag','Sex',
                                          'Signature','VerifyFlag','OwnerUin','PYInitial','PYQuanPin',
                                          'RemarkPYInitial','RemarkPYQuanPin','StarFriend','AppAccountFlag','Statues',
                                          'AttrStatus','Province','City','Alias','SnsFlag',
                                          'UniFriend','DisplayName','ChatRoomId','KeyWord','EncryChatRoomId','IsOwner'))
# 选择需要的列
need <- c('id','NickName','RemarkName','Sex','Signature','Province','City')
df4 <- df3 %>% select(need)

# 选取每列中的有效信息
df4$NickName <- df4$NickName %>% str_sub(.,start = 15L,end = -2L)
df4$RemarkName <- df4$RemarkName %>% str_sub(.,start = 17L,end = -2L)
df4$Sex <- df4$Sex %>% str_sub(.,start = 10L,end = -2L)
df4$Signature <-df4$Signature %>% str_sub(.,start = 16L,end = -2L)
df4$Province <-df4$Province %>% str_sub(.,start = 15L,end = -2L)
df4$City <-df4$City %>% str_sub(.,start = 11L,end = -2L)

# 将初步清洗的文本写入文件
write.csv(df4,"C:/Users/Admin/Downloads/friend.zl.csv")

2.3 整理MEM班级同学签名

# 读取文件
df5 <- read.csv("C:/Users/Admin/Downloads/friend.zl.csv",header = T,stringsAsFactors = F)

# 如果RemarkName为空,用NickName替代
ifelse(df5$RemarkName == "",df5$NickName,df5$RemarkName)
# 检测一下RemarkName是否还有缺失值
n <- sum(is.na(df5$RemarkName)); n
## [1] 0
# 读取班级人员名单
df.name <- read.csv("./mem.names.csv",header = T,stringsAsFactors = F)

# 选取班级人员的签名
df6 <- left_join(df.name,df5,by = c(`姓名` = "RemarkName"))

# 选取微信签名,去掉无意义的字符,并拼接为一个文本
txt <- df6$Signature %>% str_trim(.) %>% paste(.,collapse = " ") %>% str_remove_all(.,"NA|16L");txt
## [1] "不以物喜,不以己悲。   Maybe the fault does not lie in the way but in the choice.  
一往无前虎山行 尽头在哪儿呢?在学习中!! 一手烂牌是运气,打好烂牌是本事。   
∞ The princess is so cool 一枚新时代宝藏硬核女战士  阿耨多罗三藐三菩提心  Talk is chea   
淡泊明志  寧靜致遠  人生真味-淡,人生风度-忘。  哪些是科学,哪些是魔术,哪些是信仰  
我的征途是星辰大海  君子坦荡荡~~ 人生绝非一场消遣。 学习是一种信仰 stay hungry stay foolish  
能在艰苦中成长更需要一份坚决的魄力   "

3 分词

p_load(jiebaR)

# 新建分词引擎,加载停用词词典,去除“的得地数字标点符号等”无意义的停用词
wk <- worker(stop_word = "./dict/characters-master/stop_words")
# 使用默认引擎分词
txt1 <- segment(txt,wk);txt1
##  [1] "不以"     "物喜"     "不以己"   "悲"       "Maybe"    "fault"    "lie"      "choice"   "一往无前" "虎山行"   "尽头"     "学习"     "中"       "一手"     "烂牌"    
## [16] "运气"     "好烂"     "牌"       "本事"     "The"      "princess" "cool"     "一枚"     "新"       "时代"     "宝藏"     "硬核"     "女战士"   "耨"       "多罗"    
## [31] "三"       "藐三"     "菩提"     "心"       "Talk"     "chea"     "淡泊明志" "寧靜致遠" "人生"     "真味"     "淡"       "人生"     "风度"     "忘"       "科学"    
## [46] "魔术"     "信仰"     "征途"     "星辰"     "大海"     "君子"     "坦荡荡"   "人生"     "一场"     "消遣"     "学习"     "一种"     "信仰"     "stay"     "hungry"  
## [61] "stay"     "foolish"  "艰苦"     "中"       "成长"     "更"       "一份"     "魄力"

可以看到,有些词分得有问题,手动将它们加进去。

# 添加新词到分词器,重新分词
new_user_word(wk,"不以物喜")
new_user_word(wk,"不以己悲")
new_user_word(wk,"烂牌")
new_user_word(wk,"阿耨多罗三藐三菩提心")

重新分词:

# 重新分词
txt2 <- segment(txt,wk);txt2
##  [1] "不以物喜"             "不以己悲"             "Maybe"                "fault"                "lie"                  "choice"               "一往无前"            
##  [8] "虎山行"               "尽头"                 "学习"                 "中"                   "一手"                 "烂牌"                 "运气"                
## [15] "打好"                 "烂牌"                 "本事"                 "The"                  "princess"             "cool"                 "一枚"                
## [22] "新"                   "时代"                 "宝藏"                 "硬核"                 "女战士"               "阿耨多罗三藐三菩提心" "Talk"                
## [29] "chea"                 "淡泊明志"             "寧靜致遠"             "人生"                 "真味"                 "淡"                   "人生"                
## [36] "风度"                 "忘"                   "科学"                 "魔术"                 "信仰"                 "征途"                 "星辰"                
## [43] "大海"                 "君子"                 "坦荡荡"               "人生"                 "一场"                 "消遣"                 "学习"                
## [50] "一种"                 "信仰"                 "stay"                 "hungry"               "stay"                 "foolish"              "艰苦"                
## [57] "中"                   "成长"                 "更"                   "一份"                 "魄力"

统计词频:

freq <- freq(txt2)

4 词云图

p_load(wordcloud2)

# 图一
wordcloud2(freq, size = 0.5, fontFamily = "微软雅黑",
           color = "random-light", backgroundColor = "grey")
图一
# 图二
wordcloud2(freq, size = 0.5, minRotation = -pi/2, maxRotation = -pi/2)
图二
# 图三
wordcloud2(freq, size = 0.5, minRotation = -pi/6, maxRotation = -pi/6,
  rotateRatio = 1)
图三
# 图四
#无法在自定义图片中绘制词云,是wordcloud2最新版本的BUG,暂时还没有解决办法,推荐卸载最新版本,安装0.2.0的旧版本,具体步骤如下:
#1、卸载现有的wordcloud2包:remove.packages("wordcloud2");
#2、下载旧版本的wordcloud2包;
#下载地址:Index of /src/contrib/Archive/wordcloud23、手动安装tar.gz文件
#图片放到该文件夹下:C:\Users\Admin\Documents\R\win-library\3.6\wordcloud2\examples(前面替换为R安装路径)
tu = system.file("examples/t.png",package = "wordcloud2")
wordcloud2(freq, figPath = tu, size = 0.5,color = "black")
图四
# 图五
# 因为词太少,所以选简单一点的图片和文字
letterCloud(freq, word = "王", wordSize = 0.5,color = 'random-dark',backgroundColor = "snow")

偶尔能画出来,但现在画不出来😄
图四和图五的功能还存在BUG。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容