# - * - 코딩 : UTF- 8 - * - "" " 저자 : 미스터 양 의 데이터 : 2019 / 09 / (26) " "" 수입 itchat의 수입 matplotlib.pyplot 로 PLT의 수입하기 matplotlib의 수입 OS의 수입 재 수입 NumPy와 같은 NP 에서 PIL 가져 오기 이미지 에서 wordcloud.wordcloud 수입, 구름, 클래스 : WeiXinAnalyze () 데프 __init __ (자기) : self.sex_dict = {} self.city_dict = {} self.self_nickname = '' self.wordList = [] self.save_path = ' 결과 ' DEF의 wx_login (자기) "" " 마이크로 채널 통계 및 데이터 로그 " "" itchat.login () 데이터 = itchat.get_friends (갱신 = 참) self.self_nickname = 데이터 [ 0 ] ' 닉네임 ' ] # 마이크로 채널 별 얻기 위한 항목 에 데이터 : 성별 . = 아이템 GET ( ' 성 ' ) # 성 지방 = 아이템. GET( ' 지방 ' ) #省份 도시 = 항목을 선택합니다. 수 ( ' 시 ' ) #城市 경우 섹스 섹스 == 0 : 만약 섹스하지 의 self.sex_dict : self.sex_dict [성] = (1) 다른 사람 : self.sex_dict [성] + = 1 의 경우 지방 및 도시 : 주소 = ' - ' .join ([지방시]) 의 경우 하지 주소에 self.city_dict : self.city_dict [주소] = 1 다른 : self.city_dict [주소] + = 1 의 경우 항목 [ " 서명 " ] 서명 =의 re.sub (R ' . <스팬 * </ SPAN> ' , '' , 항목 [ " 시그너처 " ). 스트립 (). 교체 ( " \ n을 ' , ' ' ) self.wordList.append (서명) 경우 하지 os.path.exists (self.save_path) os.mkdir (자기.save_path) 데프 (자동) get_sex_info : "" " 성별 방법 " "" sex_dict = {} sex_dict [ ' M ' , sex_dict [ ' F ' , sex_dict [ ' 다른 ' = 셀프. sex_dict.pop ( . 1 ) self.sex_dict.pop ( 2 ) self.sex_dict.pop ( 0 ) # 데이터 준비 데이터 =의 sex_dict.items ()를 라벨 = I이 [ 0 ] 에 대한 I 에서 데이터] 의 nums = [I [ . 1 ] 에 대한 I 에서 데이터] # 사용하기 matplotlib 원 그래프를 그릴 matplotlib.rcParams [ ' font.sans serif- ' ] = ' SimHei ' ] # 한자 폰트 타입 (여기 굵게) 지정 (plt.title를 ' 마이크로 채널 버디 성별 통계 ({}) ' .format (self.self_nickname)) plt.pie (X = nums는 = 라벨, 라벨 autopct = ' %의 1.2f %%를 ' ) os.path.join (자기 plt.savefig를 ( .save_path, ' wx_sex_data.png는 ' )) : DEF (자기) get_address_info "" " 분석 방법 주소를 " "" 데이터= self.city_dict한다.항목 () sort_data= 정렬 (데이터 키 = 람다 I : 제가 [ 1 ], 역방향 = TRUE) : 20 ] X = [I [ 0 ] 에 대한 I 에서 sort_data] Y = [I [ 1 ] 에 대한 I 에서 sort_data] 하기 matplotlib. rcParams [ ' font.sans - 세리프 ' ] = ' SimHei가 ' ] 도, AX = plt.subplots는 () 의 구형 = ax.barh (X, Y, 컬러 = ' greenyellow ' , 정렬은 = " 센터 " ) Ax.set_yticks (X)를 설정 스케일 위치 # 1 ax.set_yticklabels (X)는 각각 # 스케일의 속성 값을 설정 종축 ax.invert_yaxis () # 반전 스케일 값 ax.set_xlabel를 ( " 수 (비트) ' ) # 가로축 단위 설정 ax.set_title를 ( ' 마이크로 편지 친구 도시 통계 ({}) ' .format (self.self_nickname)) # 제목을 설정 사진 에 대한 RECT의 y 축, NUM 에서 ZIP (의 구형, X 축, Y) : X = rect.get_width () plt.text (X + 0.05 , Y, " %의 D " %의 INT (NUM)) plt.savefig합니다 (os.path.join (self.save_path,'wx_address_data.png ' )) DEF의 wx_ciyun (자기) : "" " 마이크로 편지 단어 구름 방법 " "" 텍스트 = " " .join (self.wordList) # 현재 파일 실행 경로 얻기 src_dir을 = os.getcwd () # 단어를 생성 구름 픽처 어드레스 모양 IMAGEPATH = os.path.join (src_dir를 " timg.jpg " ) #는 (중국어 왜곡 방지) 워드 클라우드 폰트 주소를 생성 폰트 = os.path.join (src_dir를 " simhei.ttf " ) # 세대 주소 단어 구름 resultPath = os.path.join (self.save_path, ' wx_ciyun.PNG ') # 이미지를 생성하기 시작 BG = np.array (Image.open합니다 (IMAGEPATH)) WC = , 구름 ( MODE = " RGBA ' # 투명한 배경 마스크 = BG 덮고 # 형상 BACKGROUND_COLOR = " 화이트 " 배경 색상 # 1 max_font_size을 = 80 최대 폰트 # 1 MIN_FONT_SIZE = 10 , 최소 폰트 # 1 MAX_WORDS = 5000 , 워드 클라우드에 표시된 단어의 최대 수 # random_state = 100 , # 얼마나 많은 임의의 생성 상태를 제공하는, 즉, 얼마나 많은 색조 font_path = 폰트, 폰트 세트 # ) .generate (텍스트) wc.to_file (resultPath) IF __name__ == ' __main__ ' : Weixin = WeiXinAnalyze () Weixin .wx_login () weixin.get_sex_info () weixin.get_address_info () weixin.wx_ciyun ()
마지막으로, 결과를 보면 :
피곤, 제 1 접촉 데이터 분석.