利用Python统计微信联系人男女比例以及简单的地区分布

python

寒暄的话不多说,直接进入主题。

运行效果图:

 

 

【准备环境】

  Python版本:v3.5及其以上

  开发工具:随意,此处使用Pycharm

 

【依赖包】

  1、itchat (CMD运行:pip install itchat   进行安装)

  2、pycharts (CMD运行:pip install pyecharts   进行安装)

 

  itchat包是对网页版微信相关接口封装的一个第三方包,目前来说比较好用,一会代码里面会用到相关接口(注释说明);

  pycharts包进行图表的创建,只是用到了其初级功能,大家有时间可以将代码改改,生成更全面直观的图表,代码中使用的柱状图,稍显low,可以升级为全国热点图,这样人员的地区分布就更加直观了。

 

代码:

 

  1 import itchat

2 from collections import Counter

3 from pyecharts import Bar

4

5 dict_sex = {}

6 count_city = None

7

8 # itchat微信登录,hotReload表示热登录,如果是True,下一次就不用扫码了(时间不能过长),会在根目录生成一个 itchat.pkl 的文件

9 itchat.auto_login(hotReload=True)

10 # itchat 的get_friends接口,获取微信好友列表,返回的列表第一位是你自己,如果想过滤掉自己,改为:itchat.get_friends()[1:]

11 member_list = itchat.get_friends()[0:]

12

13

14 def calc_all_sex():

15 """

16 微信联系人总男女信息

17 :return:

18 """

19 man = woman = others = 0

20 city = []

21 for index, name in enumerate(member_list):

22 print("\t{}、{}({})".format(index, name["RemarkName"] if name["RemarkName"] is not "" else name["NickName"], name["UserName"]))

23 sex = name["Sex"]

24 if sex == 1:

25 man += 1

26 elif sex == 2:

27 woman += 1

28 else:

29 others += 1

30 if name["City"] == "":

31 city.append("未知城市")

32 else:

33 city.append(name["City"])

34

35 global count_city

36 count_city = Counter(city)

37 total = len(member_list)

38 man_percent = (float(man) / total * 100)

39 woman_percent = (float(woman) / total * 100)

40 others_percent = (float(others) / total * 100)

41

42 print("\n>>>>>>>>>>>>>微信联系人总男女信息:")

43 print("男性好友:%.2f%%" % man_percent)

44 print("女性好友:%.2f%%" % woman_percent)

45 print("其 它:%.2f%%" % others_percent)

46

47

48 class PeopleInfo:

49 def __init__(self, man_, woman_, _others, total_):

50 self.man = man_

51 self.woman = woman_

52 self.others = _others

53 self.total = total_

54

55

56 def count(dict_={}):

57 """

58 计算各个地区的男女人数

59 :param dict_:

60 :return:

61 """

62 print("\n>>>>>>>>>>>>>各地区男女分布信息:")

63 for val in dict_:

64 city_tmp = "" if val == "未知城市" else val

65 man = woman = others = 0

66 for member in member_list:

67 if member["City"] == city_tmp:

68 sex = member["Sex"]

69 if sex == 1:

70 man += 1

71 elif sex == 2:

72 woman += 1

73 else:

74 others += 1

75 people_info = PeopleInfo(man, woman, others, dict_[val])

76 dict_sex[val] = people_info

77 print("【{}】男性:{},女性:{},其它:{}".format(city_tmp, man, woman, others))

78

79

80 def count_sex_area():

81 """

82 统计联系人性别、地区

83 :return:

84 """

85 calc_all_sex()

86 attr = ["{}".format(i) for i in count_city]

87 count(count_city)

88 v1 = []

89 man_count = []

90 woman_count = []

91 others_count = []

92 for i in attr:

93 v1.append(count_city[i])

94 man_count.append(dict_sex[i].man)

95 woman_count.append(dict_sex[i].woman)

96 others_count.append(dict_sex[i].others)

97

98 bar = Bar(title="{}的微信联系人分布".format(member_list[0]["NickName"]), subtitle="微信联系人分布情况", width=2024, height=768)

99 bar.add("地区人数", attr, v1, mark_line=["average"], mark_point=["max", "min"])

100 bar.add("男性", attr, man_count, mark_line=["average"], mark_point=["max", "min"])

101 bar.add("女性", attr, woman_count, mark_line=["average"], mark_point=["max", "min"])

102 bar.render(path="地区统计.html")

103

104

105 def get_signatare():

106 """

107 获取微信联系人的签名信息

108 :return:

109 """

110 for member in member_list:

111 signatare = str(member["Signature"])

112 print("\n{}:\n\t>>>>>:{}".format(member["RemarkName"], signatare))

113

114

115 if __name__ == \'__main__\':

116 count_sex_area()

117 # get_signatare()

 

以上是 利用Python统计微信联系人男女比例以及简单的地区分布 的全部内容, 来源链接: utcz.com/z/386589.html

回到顶部