1.ライブラリを使用します
①wxpy:マイクロチャンネル初期化ロボット
②openpyxl:マイクロチャンネルの友人は、Excelスプレッドシートにデータを保存します
③pyecharts:視覚的なマップを生成します
④wordcloud、matplotlibの、jieba:単語の雲を発生させます
[ 思い出させる ]:0.5.xバージョンを使用してpyechartsライブラリが、1.xxのバージョンのピップをインストールし、[所有する必要がある公式サイトをダウンロードします]。
2.基本機能
①マイクロチャネルバディデータ分析
②生成する単語の雲
③示すマップを生成します
3.コードの実装
本明細書において使用されるクラスが実装します
(1)インポートモジュール
1#导入模块 wxpyインポートボットから2 3インポートopenpyxl pyechartsから4は、マップインポート wordcloudインポートWordCloudから5 PLTとして6インポートmatplotlib.pyplot 7インポートjieba
(2)ロボットの初期化および情報取得元マイクロ文字の友人
ここでのボットは、()メソッドを呼び出して、あなたは庭の着陸マイクロ文字のWebバージョンを掃引する必要があり、その後の操作を行うことができます。
1 DEF __init __(自己、ToExcelFile = ""、ToCityFile = ""、ToMapProvinceFile = ""、ToMapCityFile = ""): 2 '' '初期化ロボットおよび他のパラメータ' '' 3#初期化ロボットは、スキャンコード必要 4自己。 。=ボットBOT() 。5#私はすべてのマイクロチャネルバディ情報取得- (未処理)の基本的な情報を格納する 。6 = self.bot.friends self.allFriends_Info() 。7#私の友人マイクロチャンネル番号 8 self.allFriends_Num = LEN(自己.allFriends_Info) スプレッドシートファイルは、(パス#9マイクロ文字の友人の情報を保存したの.xlsx) 10 self.ExcelFile = ToExcelFile 単語市の#11を保存するクラウドファイルパス(.PNG / .JPG) 12 self.WCOfCityFile = ToCityFile 13#州を保存ファイルパス(.htmlの) 14 self.MapProvinceFile ToMapProvinceFile = 15の#他の有用なパラメータ 16自己。= ToMapCityFile MapCityFile 。17#自動的に実行する方法、このような動作を自動的にインスタンス化オブジェクト他の関数を呼び出します 18 self.run()
(3)統計処理及びマイクロチャネル情報友人
またパーソナライズ署名、列挙されたのヘッドがあると他の追加のプロパティ。
DEF getFriendsInfo 1(自己): 2 '' ' '友達はすべての利用可能なマイクロ文字入手'' 3#ストアマイクロチャネルのバディ情報(加工情報) 4 self.friendsInfo = []。 5つの#は、列の見出しを定義します。 6 self.infoTitle =を[ 'ニックネーム'、 'RemarkName'、 '性別'、 '地方'、 '都市'] self.allFriends_Infoでafriend 7: 8#ニックネーム取得 9ニックネーム= aFriend.raw.get(self.infoTitle [0 ]、なし) 10備考#を取得する 。[1] 11 RemarkName = aFriend.raw.get(self.infoTitle、なし) 12取得性別位で 13性別= {1: "M"、2 "女性" 0 "その他"}。 (aFriend.raw.get(self.infoTitle [2]、[なし])は、なし)を得る 14位取得州 15州= aFriend.raw.get(self.infoTitle [3 ]、なし) 16位の都市を取得します 17シティ= aFriend.raw.get(self.infoTitle [4]、なし) 18 lisTmp = [ニックネーム、RemarkName、セックス、州、市] 19 self.friendsInfo.append(lisTmp)
(4)お友達微信情報を保存
これは、Excelスプレッドシートに格納され、ヘッダー行のコードは、読みやすくするために挿入します。
DEF saveFriendsInfoAsExcel 1(セルフ、ExcelName): 2 '' 'のマイクロチャネルバディExcelスプレッドシートに情報を保存する' '' 3#1 openpyxlは、オブジェクトを生成した 4ワークブックopenpyxl.Workbook =()。 5つの#テーブルを活性化する。 6シート= workbook.active。 7#。セットテーブルタイトル = 8 sheet.title 'WeChatFriendsInfo'。 最初の行に向かって9#充填したカラム。 レンジ(LEN(self.infoTitle))で_ 10: 11 sheet.cell(行= 1、カラム= _ + 1、値。 self.infoTitle = [_]) 12第二行から開始し、マイクロチャネル#バディ情報で満たされる :13の範囲(self.allFriends_Num)にIするためのものである ):の範囲内J(LEN(self.infoTitle 14) 15 sheet.cell( 2 = I +行、列= + J. 1、値= STR(self.friendsInfo [I] [J])) ファイル名が空でない場合は16位、それはパスに保存され ExcelName = ""場合は17! 18 workbook.save(ExcelName) 19印刷( ">>>保存が正常に友人の情報を微信!")
マイクロチャネル情報の友人の(5)分析
DEF quiteAnalyzeFriendsInfo 1(自己):。 2 '' '分析データ、一歩、簡単な' '' 。3印刷(self.allFriends_Info.stats_text())
(6)ワードクラウド街を生成します
DEF creatWordCloudOfCity 1(自己、CityName):。 2 '' '' '取得したデータ・ワードクラウド世代市使って' すべての都市の3#の概要を 。4 cityStr = "" レンジ(self.allFriends_Num)におけるIのための5: 6セルフIF。 friendsInfo [I]はcityStrで[4] [4] 7 cityStr = + "" + self.friendsInfo [I] 。8 #jiebaライブラリファインモードセグメンテーション 9ワードリスト= jieba.lcut(cityStr) 10 cityStr = '' .join (ワードリスト) 11#ロードされた背景画像 12 #cloud_mask = np.array(Image.open(BackGroundFile)) 13の#組のワードクラウド特性 14フォント= R'C:\ Windowsの\フォント\#「はsimfang.ttf フォントパスを設定する 15 wordcloud = WC( 16 BACKGROUND_COLOR = 'ブラック'背景色# 17 #mask = cloud_mask、#背景画像 18 max_words = 100、#は表示ワードクラウドの最大の数を設定 #(存在する機械システムで)フォントフォーマットを設定し、font_path =フォント19 20高さ= 300、#画像高さ 21幅= 600、#イメージ幅 22 max_font_size = 100、最大フォント# 23 random_state = 100、タイプ#1の配色 24) ワードクラウド#生成する25 26はmyWord = wc.generate(cityStr)で 27#ワードクラウドディスプレイ 28 plt.imshow(myWord) 29 plt.axis( 'OFF' ) 30 plt.show() 31は、ファイル名は、パスは次に保存されている場合、空#ない 32 IF CityName = "":! 33保存されている単語の雲# 34 wc.to_file(CityName) 35プリント(「成功した都市の>>>クリート微信のwordcloud!」)
(7)生成州マップ
DEF creatMapProvince 1(セルフ、マップファイル): 2 '' '地域を生成、取得した地図データを用い' '' 3つの#は、すべての州を取得する 。4 provinceList、provinceNum = []、[] 5におけるI(self.allFriends_Num)レンジ用: 6 self.friendsInfo IF [I]はprovinceList [3]: 図7 provinceList.append(self.friendsInfo [I] [3。]) 8 provinceNum.append(0) レンジ(self.allFriends_Num)におけるI 9: 10 Jため範囲(LEN(provinceList)) 。11 IF self.friendsInfo [I] == provinceList [J] [3]: 12であるprovinceNum [J] + 1 = 13で生成された地図# 14地図マップ=( "友人マイクロチャネルの地方分布" 、幅= 1000、高さ= 800 ) Map.add 15( ""、provinceList、provinceNum、マップタイプ= "中国"、is_visualmap =真、visual_text_color = '#000') 16#ファイル名が空でない場合は、パスに保存 MAPFILE場合は17!= "" : 18 map.render(マップファイル) 19印刷( ">>>クリートはseccessfully州の地図を微信!")
(8)生成市内地図
DEF creatMapCity 1(セルフ、マップファイル): 2 '' '都市を生成、取得した地図データを用い' '' 3つの#は、すべての州を取得する 。4 CityList、CityNum = []、[] 5におけるI(self.allFriends_Num)レンジ用: 6 self.friendsInfo IF [I]はCityListで[4] 。7 CityList.append(self.friendsInfo [I] [4]) 8 CityNum.append(0) レンジ(self.allFriends_Num)におけるI 9: J 10 (LEN(CityList))における範囲: 11 self.friendsInfo [I] IF == CityList [J] [4]: 12 CityNum [J] + 1 = 13の範囲(LEN(CityList))でIのためのものである: 14 CityList [ I] + = 'SI' 15は、地図#を生成し、 16地図=マップ( "マイクロチャネルバディ・プロファイル・都市"、幅= 1000、高さ= 800) 。17 map.add( ""、CityList、CityNum、マップタイプ= "広東"、is_visualmap =真、visual_text_color = '#000') 18でありますファイル名は、パスに保存し、その後、空でない#場合 MAPFILE IF = 19 "!": 20 map.render(マップファイル) 21印刷( ">>>クリートはseccessfully都市の地図を微信!")
彼は、それが呼び出された様々な方法を送ったので、様々な機能を実現するための上記の方法で。
(9)runメソッド
RUN DEF 1(自己): 2#フレンド情報取得マイクロチャネル 3 self.getFriendsInfo()。 4印刷( ">>>微信、正常友達の情報を入手!")。 5印刷。( ">>>メンバー:"、self.allFriends_Num) マイクロチャネル#6バディ情報を保存する 。7 self.saveFriendsInfoAsExcel(self.ExcelFile) 。8#マイクロ分析バディ情報チャネル 9はself.quiteAnalyzeFriendsInfo() 10人の#友人マイクロ文字のワードクラウド世代都市使用 。11 self.creatWordCloudOfCity(self.WCOfCityFile) 12が生成されるマイクロチャネル#友人州マップ 13は、self.creatMapProvince(self.MapProvinceFile)である マイクロ文字友人市内マップを生成するために14# 15 self.creatMapCity(self.MapCityFileを)
ファイルパスの場合は、メイン機能で送信することができます。[注]:クラスに上記のコードは、次の主な機能の終わり
IF __name__ == 1 "__main__": 2 ToExcelFile = "./WeChatAnalyze//FriendsInfo.xlsx" Excelスプレッドシート保存されたパス#マイクロ手紙の友人情報 3 ToPictureFile = "./WeChatAnalyze//CityWordCloud.png" #マイクロ文字の単語の友人の情報都市クラウドはパス保存 州のフレンド情報保存されたマップパス微信4 ToMapFileProvinceは=「./WeChatAnalyze//WeChatProvinceMap.html」#を フレンド情報保存された都市は、パスにマッピング微信=「./WeChatAnalyze//WeChatCityMap.html」#5 ToMapFileCity 6#WeChatRobotオブジェクトのインスタンスを 7ロボット= WeChatRobot(ToExcelFile、ToPictureFile 、ToMapFileProvince、ToMapFileCity)
それはとてもシンプルであること、はい、ハハ、主な機能は非常に短いということではありません!
そして、それを達成される効果を見てください!
これは、表示端末で>>>
>>>これは、Excelスプレッドシートのコンテンツとして保存されます
>>>これは、マイクロ文字の友人の州の分布であります
>>>これは、マイクロ文字の友人の自治体の分布であります
[OK]をクリックします。これは、今日、それを共有することです!最後に、完全なコードを添付!
参考文献:
パイソンと①マイクロチャンネルプレイ:https://segmentfault.com/a/1190000014203617
② pyecharts 中部分import 不到:https://blog.csdn.net/weixin_38617311/article/details/81146748
③ pyecharts 中地图显示不全:https://blog.csdn.net/xiamoyanyulrq/article/details/80025105
'''
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
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()
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!")
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オブジェクトインスタンスの
ロボット= WeChatRobot(ToExcelFile、ToPictureFile、 ToMapFileProvince、ToMapFileCity)