1. 程式人生 > 其它 >C# System.NullReferenceException:未將物件引用設定到物件的例項問題解決

C# System.NullReferenceException:未將物件引用設定到物件的例項問題解決

更多python教程請到: 菜鳥教程www.piaodoo.com

人人影視www.sfkyty.com

16影視www.591319.com

星辰影院www.591319.com


一、背景及研究現狀

在我國網際網路的發展過程中,PC網際網路已日趨飽和,移動網際網路卻呈現井噴式發展。資料顯示,截止2013年底,中國手機網民超過5億,佔比達81%。伴隨著移動終端價格的下降及wifi的廣泛鋪設,移動網民呈現爆發趨勢。

微信已經成為連線線上與線下、虛擬與現實、消費與產業的重要工具,它提高了O2O類營銷使用者的轉化率。過去開發軟體,程式設計師常要考慮不同開發環境的語言、裝置的適配性和成本。現在,開發者可以在一個“類操作底層”去開發應用,打破了過去受限的開發環境。

二、研究意義及目的

隨著寬頻無線接入技術和移動終端技術的飛速發展,人們迫切希望能夠隨時隨地乃至在移動過程中都能方便地從網際網路獲取資訊和服務,移動網際網路應運而生並迅猛發展。然而,移動網際網路在移動終端、接入網路、應用服務、安全與隱私保護等方面還面臨著一系列的挑戰。其基礎理論與關鍵技術的研究,對於國家資訊產業整體發展具有重要的現實意義。

三、研究內容及資料獲取

普通使用者使用手機掃描二維碼並在手機上確認後,wxpy自動從使用者的網頁版微信獲取好友列表,包括好友暱稱、所在地區、個性簽名、性別等資訊。

四、python程式設計

#微信好友特徵資料分析及視覺化
# 1.導包操作
from wxpy import *
import re
import jieba
import numpy as np
from scipy.misc import imread
from wordcloud import WordCloud
import matplotlib.pyplot as plt
from pylab import mpl
import pandas as pd

mpl.rcParams['font.sans-serif'] = ['SimHei']
from pyecharts.charts import Map
from pyecharts import options as opts

2.登入操作

bot = Bot()

列舉登入賬號的所有好友

all_friends = bot.friends()
print(all_friends)

獲取登入賬號所關注的所有的公眾號

all_maps = bot.mps()
print("所有好友列表", all_maps)

獲取當前登入賬號的群聊列表

all_groups = bot.groups()
print("所有群聊列表", all_groups)

根據好友的備註名稱搜尋好友

myfriend = bot.friends().search('許寬')[0]

print("搜尋好友:", myfriend)

搜尋好友併發送資訊

bot.friends().search('許寬')[0].send('你好呀')

向檔案傳輸助手傳送資訊

bot.file_helper.send("hello")

3.顯示男女比例

sex_dict = {'male': 0, 'female': 0, "no_set": 0}
for friend in all_friends:
print(friend, friend.sex)
if friend.sex == 1:
sex_dict['male'] += 1
elif friend.sex == 2:
sex_dict['female'] += 1
elif friend.sex == 0:
sex_dict['no_set'] += 1
print(sex_dict)

4使用matplotlib視覺化

slices = [sex_dict["male"], sex_dict["female"], sex_dict["no_set"]]
activities = ["male", "female", "no_set"]
cols = ["r", "m", "g"]

startangle:開始繪圖的角度,逆時針旋轉

shadow:陰影

%1.1f%%:格式化字串,整數部分最小1位,小數點後保留一位,%%:轉義字元

plt.pie(slices, labels=activities, colors=cols, startangle=90, shadow=True, autopct='%1.1f%%')
plt.title("微信好友比例圖")
plt.savefig("WeChat_sex.png")

統計登入賬號好友的各省人數

province_dict = {'河北': 0, '山東': 0, '遼寧': 0, '廣西': 0, '吉林': 0,
'甘肅': 0, '青海': 0, '河南': 0, '江蘇': 0, '湖北': 0,
'湖南': 0, '江西': 0, '浙江': 0, '廣東': 0, '雲南': 0,
'福建': 0, '臺灣': 0, '海南': 0, '山西': 0, '四川': 0,
'陝西': 0, '貴州': 0, '安徽': 0, '北京': 0, '天津': 0,
'重慶': 0, '上海': 0, '香港': 0, '澳門': 0, '新疆': 0,
'內蒙古': 0, '西藏': 0, '黑龍江': 0, '寧夏': 0}

統計省份

for friend in all_friends:

print(friend.province)

if friend.province in province_dict.keys():
province_dict[friend.province] += 1

print("province_dict")
print(province_dict)

為了方便資料呈現,生成JSON Array格式資料

data = []
for key, value in province_dict.items():
data.append({'name': key, 'value': value}) # 在data列表末尾新增一個字典元素
print(data)

data_process = pd.DataFrame(data) # 建立資料框
data_process.columns = ['city', 'popu']
print(data_process)

map = Map().add("微信好友城市分佈圖", [list(z) for z in zip(data_process['city'], data_process['popu'])],
"china").set_global_opts(
title_opts=opts.TitleOpts(title="Map-VisualMap(連續型)"), visualmap_opts=opts.VisualMapOpts(max_=10))
map.render('map.html')

with...as...語句結束時,自動呼叫f.close()

a表示:在檔案末尾追加

def write_txt_file(path, txt): # 寫檔案
with open(path, 'a', encoding='gbk') as f:
return f.write(txt)

每次執行程式前,需要刪除上一次的檔案

預設字元編碼為GBK

def read_txt_file(path):
with open(path, 'r', encoding='gbk') as f:
return f.read()

統計登入賬號好友個性簽名

for friend in all_friends:
print(friend, friend.signature)

對資料進行清洗,將標點符號等對詞頻率統計造成影響的因素剔除

[...]:匹配中括號任意一個字元

r:防止轉義

pattern = re.compile(r'[一-龥]+') # 將正則字串編譯成正則表示式物件,以後在後期的匹配中複用

對某一個簽名進行匹配,只匹配中文漢字,結果是列表

filterdata = re.findall(pattern, friend.signature)
print(filterdata)
write_txt_file('signatures.txt', ''.join(filterdata))

讀取檔案並輸出。

content = read_txt_file('signatures.txt')
print(content) # 輸出內容,僅漢字

輸出分詞結果,結果為列表

segment = jieba.lcut(content) # 精確模式:不存在冗餘資料,適合文字分析
print(segment)

生成資料框且有一列元素

word_df = pd.DataFrame({'segment': segment}) # 字典型別
print(word_df)

index_col=False:第一行不做為索引

seq=" ":分隔符

names=['stopword']:列名

"stopwords.txt":停止詞庫

stopwords = pd.read_csv("stopwords.txt", index_col=False, sep=" ", names=['stopword'], encoding='gbk')
print(stopwords)

檢視過濾停止詞後的資料框

word_df = word_df[~word_df.segment.isin(stopwords.stopword)]
print("過濾後:")
print(word_df)

檢視分詞的詞頻

python中的groupby可以看作是基於行或者是基於index的聚合操作

agg函式提供基於列的聚合操作,一般與groupby連用

np.size:numpy庫中統計一列中不同值的個數

words_stat = word_df.groupby(by=['segment'])['segment'].agg({"計數": np.size}) # 警告資訊
print(words_stat)

根據計數這一列降序排列

words_stat = words_stat.reset_index().sort_values(by=["計數"], ascending=False)
print(words_stat)

讀入背景圖片

color_mask = imread("black_mask.png")

設定詞雲屬性

wordcloud = WordCloud(font_path="Hiragino.ttf", # 設定字型
background_color="pink", # 設定顏色
max_words=100, # 詞雲顯示的最大詞數
mask=color_mask, # 設定背景圖片
max_font_size=100 # 字型最大值
)

生成詞雲字典,獲取詞雲最高的前一百詞

word_frequence = {x[0]: x[1] for x in words_stat.head(100).values}
print(word_frequence)

繪製詞雲圖

wordcloud.generate_from_frequencies(word_frequence)
wordcloud.to_file("wordcloud.png")

對影象進行處理

plt.imshow(wordcloud)
plt.axis("off") # 隱藏座標軸
plt.show()

五、資料分析及視覺化

微信好友男女性別比例

微信好友所在省份比例

宣告
祖國領土主權神聖不可侵犯!
部分地區未標註,敬請諒解!

微信好友個性簽名詞雲圖

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援菜鳥教程www.piaodoo.com。