python 으로 위 챗 친구 정보 분석

16971 단어 python작은 편지
1.사용 한 라 이브 러 리
① wxpy:위 챗 로봇 초기 화
② openpyxl:위 챗 친구 데 이 터 를 Excel 표 로 저장 합 니 다.
③ pyecharts:시각 화 된 지도 생 성
④ wordcloud,matplotlib,jieba:단어 구름 그림 생 성
[특별 알림]:pyecharts 라 이브 러 리 는 0.5.x 버 전 을 사용 하고 pip 에 1.x.x 버 전 을 설치 하기 때문에 자체 적 으로[홈 페이지]에서 다운로드 해 야 합 니 다.
2.기본 기능
① 위 챗 친구 데이터 분석
② 단어 구름 그림 생 성
③ 맵 생 성 전시
3.코드 구현
클래스 를 사용 하여 구현 합 니 다.
(1)가 져 오기 모듈

#     
from wxpy import Bot
import openpyxl
from pyecharts import Map
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import jieba
(2)로봇 초기 화 및 위 챗 친구 의 소스 정보 획득
여기 서 Bot()방법 을 호출 하려 면 스 캔 코드 를 사용 하여 위 챗 웹 페이지 에 로그 인하 고 후속 작업 을 해 야 합 니 다.

def __init__(self, ToExcelFile="", ToCityFile="", ToMapProvinceFile="", ToMapCityFile=""):
  '''             '''
  #       ,    
  self.bot = Bot()
  #              -       (   )
  self.allFriends_Info = self.bot.friends()
  #         
  self.allFriends_Num = len(self.allFriends_Info)
  #                (.xlsx)
  self.ExcelFile = ToExcelFile
  #             (.png/.jpg)
  self.WCOfCityFile = ToCityFile
  #            (.html)
  self.MapProvinceFile = ToMapProvinceFile
  #       
  self.MapCityFile = ToMapCityFile
  #     run  ,                 
  self.run()
(3)위 챗 친구 의 정보 통계 및 처리
열 거 된 것 외 에 도 개성 서명,프로필 사진 등 다른 속성 이 있 습 니 다.

def getFriendsInfo(self):
  '''             '''
  #          (       )
  self.friendsInfo = []
  #      
  self.infoTitle = ['NickName', 'RemarkName', 'Sex', 'Province', 'City']
  for aFriend in self.allFriends_Info:
    #     
    NickName = aFriend.raw.get(self.infoTitle[0], None)
    #     
    RemarkName = aFriend.raw.get(self.infoTitle[1], None)
    #     
    Sex = {1:" ", 2:" ", 0:"  "}.get(aFriend.raw.get(self.infoTitle[2], None), None)
    #     
    Province = aFriend.raw.get(self.infoTitle[3], None)
    #     
    City = aFriend.raw.get(self.infoTitle[4], None)
    lisTmp = [NickName, RemarkName, Sex, Province, City]
    self.friendsInfo.append(lisTmp)
(4)위 챗 친구 의 정보 저장
읽 기 편 하도록 Excel 표 로 저장 하고 코드 에 헤더 줄 을 삽입 합 니 다.

def saveFriendsInfoAsExcel(self, ExcelName):
  '''            Excel     '''
  #   openpyxl  
  workbook = openpyxl.Workbook()
  #     
  sheet = workbook.active
  #       
  sheet.title = 'WeChatFriendsInfo'
  #          
  for _ in range(len(self.infoTitle)):
    sheet.cell(row=1, column=_+1, value=self.infoTitle[_])
  #         ,      
  for i in range(self.allFriends_Num):
    for j in range(len(self.infoTitle)):
      sheet.cell(row=i+2, column=j+1, value=str(self.friendsInfo[i][j]))
  #       ,        
  if ExcelName != "":
    workbook.save(ExcelName)
    print(">>> Save WeChat friends' information successfully!")
(5)위 챗 친구 의 정보 분석

 def quiteAnalyzeFriendsInfo(self):
   '''     ,    ,     '''
   print(self.allFriends_Info.stats_text())
(6)city 단어 구름 그림 생 성

def creatWordCloudOfCity(self, CityName):
  '''          city    '''
  #        
  cityStr = ""
  for i in range(self.allFriends_Num):
    if self.friendsInfo[i][4] not in cityStr:
      cityStr += " " + self.friendsInfo[i][4]
  #jieba       
  wordlist = jieba.lcut(cityStr)
  cityStr = ' '.join(wordlist)
  #       
  #cloud_mask = np.array(Image.open(BackGroundFile))
  #       
  font = r'C:\Windows\Fonts\simfang.ttf' #       
  wc = WordCloud(
    background_color = 'black',   #     
    #mask = cloud_mask,       #     
    max_words = 100,        #           
    font_path = font,        #       (      )
    height = 300,          #     
    width = 600,          #     
    max_font_size = 100,      #      
    random_state = 100,       #        
    )
  #      
  myword = wc.generate(cityStr)
  #     
  plt.imshow(myword)
  plt.axis('off')
  plt.show()
  #       ,        
  if CityName != "":
    #     
    wc.to_file(CityName)
    print(">>> Creat WeChat wordcloud of city successfully!")
(7)province 지도 생 성

def creatMapProvince(self, MapFile):
  '''          province   '''
  #       
  provinceList, provinceNum = [], []
  for i in range(self.allFriends_Num):
    if self.friendsInfo[i][3] not in provinceList:
      provinceList.append(self.friendsInfo[i][3])
      provinceNum.append(0)
  for i in range(self.allFriends_Num):
    for j in range(len(provinceList)):
      if self.friendsInfo[i][3] == provinceList[j]:
        provinceNum[j] += 1
  #    Map
  map = Map("        ", width=1000, height=800)
  map.add("", provinceList, provinceNum, maptype="china", is_visualmap=True, visual_text_color='#000')
  #       ,        
  if MapFile != "":
    map.render(MapFile)
    print(">>> Creat WeChat Map of Provinces seccessfully!")
(8) city 맵 생 성

def creatMapCity(self, MapFile):
    '''          city   '''
    #       
    CityList, CityNum = [], []
    for i in range(self.allFriends_Num):
      if self.friendsInfo[i][4] not in CityList:
        CityList.append(self.friendsInfo[i][4])
        CityNum.append(0)
    for i in range(self.allFriends_Num):
      for j in range(len(CityList)):
        if self.friendsInfo[i][4] == CityList[j]:
          CityNum[j] += 1
    for i in range(len(CityList)):
      CityList[i] += ' '
    #    Map
    map = Map("        ", width=1000, height=800)
    map.add("", CityList, CityNum, maptype="  ", is_visualmap=True, visual_text_color='#000')
    #       ,        
    if MapFile != "":
      map.render(MapFile)
      print(">>> Creat WeChat Map of Cities seccessfully!")
상술 한 각 기능 을 실현 하 는 방법 이 있 으 면,여러 가지 방법 을 호출 하 는 방법 이 부족 하 다.
(9)run 방법

def run(self):
  #         
  self.getFriendsInfo()
  print(">>> Get WeChat friends' information successfully!")
  print(">>> Members:", self.allFriends_Num)
  #         
  self.saveFriendsInfoAsExcel(self.ExcelFile)
  #         
  self.quiteAnalyzeFriendsInfo()
  #         city      
  self.creatWordCloudOfCity(self.WCOfCityFile)
  #         province   
  self.creatMapProvince(self.MapProvinceFile)
  #         city   
  self.creatMapCity(self.MapCityFile)
파일 경로 에 대해 main 함수 에서 전달 하면 됩 니 다.[주]:상기 코드 는 모두 클래스 에 있 습 니 다.여기 서 끝 납 니 다.다음은 main 함수 입 니 다.

if __name__ == "__main__":
  ToExcelFile = "./WeChatAnalyze//FriendsInfo.xlsx"   #        Excel      
  ToPictureFile = "./WeChatAnalyze//CityWordCloud.png"  #       city       
  ToMapFileProvince = "./WeChatAnalyze//WeChatProvinceMap.html" #       province      
  ToMapFileCity = "./WeChatAnalyze//WeChatCityMap.html" #       city      
  # WeChatRobot     
  robot = WeChatRobot(ToExcelFile, ToPictureFile, ToMapFileProvince, ToMapFileCity)
메 인 함수 가 짧다 고 생각 하 시 죠?하하,맞아요.이렇게 간단 해 요!
이제 실현 효 과 를 살 펴 보 자!
>>>이것 은 터미널 디 스 플레이 효과 입 니 다.

>>>이 건 Excel 표 로 저 장 된 내용 입 니 다.

 >>> 이것 은 위 챗 친구 각 성의 분포 입 니 다.

>>>이것 은 위 챗 친구 각 시의 분포 입 니 다.

전체 코드

# -*- coding: utf-8 -*-
'''
This is a program which can analyze datas of WeChat friends.
@author: bpf
'''

#     
from wxpy import Bot
import openpyxl
from pyecharts import Map
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import jieba

class WeChatRobot:

  '''====================== 1.          ======================'''
  def __init__(self, ToExcelFile="", ToCityFile="", ToMapProvinceFile="", ToMapCityFile=""):
    '''             '''
    #       ,    
    self.bot = Bot()
    #              -       (   )
    self.allFriends_Info = self.bot.friends()
    #         
    self.allFriends_Num = len(self.allFriends_Info)
    #                (.xlsx)
    self.ExcelFile = ToExcelFile
    #             (.png/.jpg)
    self.WCOfCityFile = ToCityFile
    #            (.html)
    self.MapProvinceFile = ToMapProvinceFile
    #       
    self.MapCityFile = ToMapCityFile
    #     run  ,                 
    self.run()

  '''====================== 2.          ======================'''
  def getFriendsInfo(self):
    '''             '''
    #          (       )
    self.friendsInfo = []
    #      
    self.infoTitle = ['NickName', 'RemarkName', 'Sex', 'Province', 'City']
    for aFriend in self.allFriends_Info:
      #     
      NickName = aFriend.raw.get(self.infoTitle[0], None)
      #     
      RemarkName = aFriend.raw.get(self.infoTitle[1], None)
      #     
      Sex = {1:" ", 2:" ", 0:"  "}.get(aFriend.raw.get(self.infoTitle[2], None), None)
      #     
      Province = aFriend.raw.get(self.infoTitle[3], None)
      #     
      City = aFriend.raw.get(self.infoTitle[4], None)
      lisTmp = [NickName, RemarkName, Sex, Province, City]
      self.friendsInfo.append(lisTmp)

  '''====================== 3.          ======================'''
  def saveFriendsInfoAsExcel(self, ExcelName):
    '''            Excel     '''
    #   openpyxl  
    workbook = openpyxl.Workbook()
    #     
    sheet = workbook.active
    #       
    sheet.title = 'WeChatFriendsInfo'
    #          
    for _ in range(len(self.infoTitle)):
      sheet.cell(row=1, column=_+1, value=self.infoTitle[_])
    #         ,      
    for i in range(self.allFriends_Num):
      for j in range(len(self.infoTitle)):
        sheet.cell(row=i+2, column=j+1, value=str(self.friendsInfo[i][j]))
    #       ,        
    if ExcelName != "":
      workbook.save(ExcelName)
      print(">>> Save WeChat friends' information successfully!")

  '''====================== 4.          ======================'''
  def quiteAnalyzeFriendsInfo(self):
    '''     ,    ,     '''
    print(self.allFriends_Info.stats_text())

  '''====================== 5.   city    ======================'''
  def creatWordCloudOfCity(self, CityName):
    '''          city    '''
    #        
    cityStr = ""
    for i in range(self.allFriends_Num):
      if self.friendsInfo[i][4] not in cityStr:
        cityStr += " " + self.friendsInfo[i][4]
    #jieba       
    wordlist = jieba.lcut(cityStr)
    cityStr = ' '.join(wordlist)
    #       
    #cloud_mask = np.array(Image.open(BackGroundFile))
    #       
    font = r'C:\Windows\Fonts\simfang.ttf' #       
    wc = WordCloud(
      background_color = 'black',   #     
      #mask = cloud_mask,       #     
      max_words = 100,        #           
      font_path = font,        #       (      )
      height = 300,          #     
      width = 600,          #     
      max_font_size = 100,      #      
      random_state = 100,       #        
      )
    #      
    myword = wc.generate(cityStr)
    #     
    plt.imshow(myword)
    plt.axis('off')
    plt.show()
    #       ,        
    if CityName != "":
      #     
      wc.to_file(CityName)
      print(">>> Creat WeChat wordcloud of city successfully!")

  '''===================== 6.   province   ====================='''
  def creatMapProvince(self, MapFile):
    '''          province   '''
    #       
    provinceList, provinceNum = [], []
    for i in range(self.allFriends_Num):
      if self.friendsInfo[i][3] not in provinceList:
        provinceList.append(self.friendsInfo[i][3])
        provinceNum.append(0)
    for i in range(self.allFriends_Num):
      for j in range(len(provinceList)):
        if self.friendsInfo[i][3] == provinceList[j]:
          provinceNum[j] += 1
    #    Map
    map = Map("        ", width=1000, height=800)
    map.add("", provinceList, provinceNum, maptype="china", is_visualmap=True, visual_text_color='#000')
    #       ,        
    if MapFile != "":
      #map.show_config()
      map.render(MapFile)
      print(">>> Creat WeChat Map of Provinces seccessfully!")

  '''===================== 7.   city   ====================='''
  def creatMapCity(self, MapFile):
    '''          city   '''
    #       
    CityList, CityNum = [], []
    for i in range(self.allFriends_Num):
      if self.friendsInfo[i][4] not in CityList:
        CityList.append(self.friendsInfo[i][4])
        CityNum.append(0)
    for i in range(self.allFriends_Num):
      for j in range(len(CityList)):
        if self.friendsInfo[i][4] == CityList[j]:
          CityNum[j] += 1
    for i in range(len(CityList)):
      CityList[i] += ' '
    #    Map
    map = Map("        ", width=1000, height=800)
    map.add("", CityList, CityNum, maptype="  ", is_visualmap=True, visual_text_color='#000')
    #       ,        
    if MapFile != "":
      map.render(MapFile)
      print(">>> Creat WeChat Map of Cities seccessfully!")

  '''===================== 8.        ====================='''
  def run(self):
    #         
    self.getFriendsInfo()
    print(">>> Get WeChat friends' information successfully!")
    print(">>> Members:", self.allFriends_Num)
    #         
    self.saveFriendsInfoAsExcel(self.ExcelFile)
    #         
    self.quiteAnalyzeFriendsInfo()
    #         city      
    self.creatWordCloudOfCity(self.WCOfCityFile)
    #         province   
    self.creatMapProvince(self.MapProvinceFile)
    #         city   
    self.creatMapCity(self.MapCityFile)

if __name__ == "__main__":
  ToExcelFile = "./WeChatAnalyze//FriendsInfo.xlsx"   #        Excel      
  ToPictureFile = "./WeChatAnalyze//CityWordCloud.png"  #       city       
  ToMapFileProvince = "./WeChatAnalyze//WeChatProvinceMap.html" #       province      
  ToMapFileCity = "./WeChatAnalyze//WeChatCityMap.html" #       city      
  # WeChatRobot     
  robot = WeChatRobot(ToExcelFile, ToPictureFile, ToMapFileProvince, ToMapFileCity)
이상 은 python 으로 위 챗 친구 정보 분석 을 하 는 상세 한 내용 입 니 다.python 위 챗 정보 분석 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 십시오!

좋은 웹페이지 즐겨찾기