赞
踩
虽然很早确定了研究任务,从网络数据获取,地理实体数据集成与处理,分析挖掘,制图或知识表达的思路来开展这方面的研究工作。分析挖掘如文本挖掘,空间关联分析,空间趋势分析,空间分布分析,空间聚类/空间分类分析等等。奈何上学期我一学沫沫还要硬着头皮应付考试,赶上疫情在家,最近才着手此研究,趁着这还热乎,记录下学习历程(还不是菜)。
1、Numpy
import numpy as np
1.创建一维数组
numpy.array([元素1,元素2,...,元素n])
x=numpy.array(['1','2','3','4'])
2.创建二维数组
numpy.array([[元素1,元素2,...,元素n],[元素1,元素2,...,元素n],...,[元素1,元素2,...,元素n]])
x=numpy.array([[3,13,10],[9,2,67],[2,6,11]])
3.排序
x.sort()
4.取最大最小值
xMax=x.max()
xMin=x.min()
5.切片[起始下标:终止下标+1]
x1=x[1:3] => 1-2
2、pandas
import pandas as pda
Series
a=pda.Series([8,9,2,1])
b=pda.Series([8,9,2,1],index=["one","two","three","four"])
DataFrame
c=pda.DataFrame([[5,6,2,3],[8,4,6,3],[6,4,32,2]],columns=["one","two","three","four"])
c.head(行数) #取头部数据
c.tail(行数) #取尾部数据
c.describe() #统计数据 count mean std min 25% 50% 75% max
d=pda.DataFrame({
"one":4,
"two":[6,2,3],
"three":list(str(982))
})
import pandas as pda
i=pda.read_csv("path")
i.describe
import pymongo
import pandas as pda
client = pymongo.MongoClient('localhost', 27017)
db = client['ZYSina']
#print(db)
pk=db["Tweets"]
data = pda.DataFrame(list(pk.find()))
print(data)
k=data.describe()
print(k)
_id crawl_time weibo_url ... origin_weibo video_url location_map_info 0 1842712825_Fc31llare 1576400801 https://weibo.com/1842712825/Fc31llare ... NaN NaN NaN 1 1842712825_IiuJTjb2W 1576400801 https://weibo.com/1842712825/IiuJTjb2W ... NaN NaN NaN 2 1842712825_Ih8aV0f6C 1576400801 https://weibo.com/1842712825/Ih8aV0f6C ... https://weibo.cn/comment/Ih7RWAURu?rl=1#cmtfrm NaN NaN 3 1842712825_IgJvx3jDN 1576400801 https://weibo.com/1842712825/IgJvx3jDN ... NaN NaN NaN 4 1842712825_IgI0Uq6QC 1576400801 https://weibo.com/1842712825/IgI0Uq6QC ... NaN NaN NaN ... ... ... ... ... ... ... ... 2022 1842712825_Id8u2bTg4 1576409188 https://weibo.com/1842712825/Id8u2bTg4 ... https://weibo.cn/comment/Id7OdwfJV?rl=1#cmtfrm NaN NaN 2023 1842712825_GampAftQ6 1576409162 https://weibo.com/1842712825/GampAftQ6 ... https://weibo.cn/comment/Gaff3nMua?rl=1#cmtfrm NaN NaN 2024 1842712825_GcFqF0D5e 1576409162 https://weibo.com/1842712825/GcFqF0D5e ... https://weibo.cn/comment/G7El3wIt6?rl=1#cmtfrm NaN NaN 2025 1842712825_GdjRIpBqF 1576409162 https://weibo.com/1842712825/GdjRIpBqF ... https://weibo.cn/comment/GdhX5iCE2?rl=1#cmtfrm NaN NaN 2026 1842712825_GdnHkai49 1576409162 https://weibo.com/1842712825/GdnHkai49 ... https://weibo.cn/comment/GcXWxpWmQ?rl=1#cmtfrm NaN NaN crawl_time like_num repost_num comment_num count 2.027000e+03 2027.000000 2027.000000 2027.000000 mean 1.576405e+09 0.090281 0.178096 0.135175 std 2.469181e+03 0.398961 0.843858 0.655662 min 1.576401e+09 0.000000 0.000000 0.000000 25% 1.576403e+09 0.000000 0.000000 0.000000 50% 1.576405e+09 0.000000 0.000000 0.000000 75% 1.576407e+09 0.000000 0.000000 0.000000 max 1.576409e+09 6.000000 18.000000 13.000000
数据探索的目的是及早发现数据的一些简单规律或特征
核心
(1)分布分析
直方图显示
data1 = data.T likeNum = data1.values[5] commentNum = data1.values[7] #pyl.plot(likeNum, commentNum, 'o') #pyl.show() likeNumMax = likeNum.max() likeNumMin = likeNum.min() commentNumMax = commentNum.max() commentNumMin = commentNum.min() # 极差 likeNumrg = likeNumMax-likeNumMin commentrg = commentNumMax-commentNumMin # 组距 likeNum_dst = likeNumrg/12 comment_dst = commentrg/12 #直方图 likeNumsty=np.arange(likeNumMin,likeNumMax,likeNum_dst) pyl.hist(likeNum,likeNumsty) pyl.show()
数据清洗的目的是留下可靠数据,避免脏数据的干扰
步骤:
import pymongo import pandas as pda import numpy as np #中位数插补 client = pymongo.MongoClient('localhost', 27017) db = client['QingYuNian'] #print(db) pk=db["Tweets"] data = pda.DataFrame(list(pk.find())) print(data.describe()) x=0 data['like_num'][(data['like_num']==0)]=None for i in data.columns: for j in range(len(data)): if (data[i].isnull())[j]: data[i][j]='10' x+=1 print(x)
一般遇到缺失值,处理方式为(删除、插补、不处理)
差不的方式主要有:均值插补,中位数插补,众数插补,固定值插补,最近数据插补,回归插补,拉格朗日插补,牛顿插值法,分段插值
遇到异常值,一般处理方式:视为缺失值,删除,修补(平均数,中位数),不处理
清理前:
crawl_time like_num repost_num comment_num
count 7.029000e+03 7029.000000 7029.000000 7029.000000
mean 1.576674e+09 18.648172 1.841656 4.068715
std 1.806155e+04 388.909963 29.550240 61.005670
min 1.576640e+09 0.000000 0.000000 0.000000
25% 1.576658e+09 0.000000 0.000000 0.000000
50% 1.576676e+09 0.000000 0.000000 0.000000
75% 1.576688e+09 2.000000 0.000000 1.000000
max 1.576705e+09 24818.000000 1224.000000 4233.000000
清理后:
crawl_time like_num repost_num comment_num
count 7.029000e+03 7029.000000 7029.000000 7029.000000
mean 1.576674e+09 23.879357 1.841656 4.068715
std 1.806155e+04 388.691108 29.550240 61.005670
min 1.576640e+09 1.000000 0.000000 0.000000
25% 1.576658e+09 2.000000 0.000000 0.000000
50% 1.576676e+09 10.000000 0.000000 0.000000
75% 1.576688e+09 10.000000 0.000000 1.000000
max 1.576705e+09 24818.000000 1224.000000 4233.000000
概述:把不同来源的数据放在一起。但是来在多个地方的数据一定要做好实体识别与冗余属性识别,避免数据整合错误及数据重复。
1、观察数据源,发现其中关系,详细查看是否存在同名不同意,同意不同名
2、进行数据读取与整合
3、去除重复数据
a=np.array([[1,5,6],[9,4,3]])
print("a=",a)
b=np.array([[6,36,7],[2,3,9]])
print("b=",b)
c=np.concatenate((a,b))
print("c=",c)
a= [[1 5 6]
[9 4 3]]
b= [[ 6 36 7]
[ 2 3 9]]
c= [[ 1 5 6]
[ 9 4 3]
[ 6 36 7]
[ 2 3 9]]
目的是将数据转化为更方便分析的数据
开方,平方,对数
like_num comment_num
0 0 0
1 0 0
2 20 1
3 2 1
4 1 1
... ... ...
7024 1 1
7025 1 0
7026 0 0
7027 0 1
7028 0 0
x1=(x-平均数)/(max-min)
client = pymongo.MongoClient('localhost', 27017) db = client['QingYuNian'] # print(db) pk = db["Tweets"] data = pda.DataFrame(list(pk.find())) data=data[['like_num', 'comment_num']] data1=(data-data.min())/(data.max()-data.min()) print(data1) like_num comment_num 0 0.000000 0.000000 1 0.000000 0.000000 2 0.000806 0.000236 3 0.000081 0.000236 4 0.000040 0.000236 ... ... ... 7024 0.000040 0.000236 7025 0.000040 0.000000 7026 0.000000 0.000000 7027 0.000000 0.000236 7028 0.000000 0.000000
x1=(x-平均数)/标准差
data2=(data-data.mean())/data.std()
print(data2)
like_num comment_num
0 -0.047950 -0.066694
1 -0.047950 -0.066694
2 0.003476 -0.050302
3 -0.042807 -0.050302
4 -0.045379 -0.050302
... ... ...
7024 -0.045379 -0.050302
7025 -0.045379 -0.066694
7026 -0.047950 -0.066694
7027 -0.047950 -0.050302
7028 -0.047950 -0.066694
x1=x/10**(k)
k=lg(x的绝对值得最大值)
k = np.ceil(np.log10(data.abs().max())) data3 = data/10**k print(data3) like_num comment_num 0 0.00000 0.0000 1 0.00000 0.0000 2 0.00020 0.0001 3 0.00002 0.0001 4 0.00001 0.0001 ... ... ... 7024 0.00001 0.0001 7025 0.00001 0.0000 7026 0.00000 0.0000 7027 0.00000 0.0001 7028 0.00000 0.0000
abc = [1, 5, 7, 8, 10]
s = pda.cut(abc, 4, labels=["便宜","适中", "小贵", "太贵"])
print(s)
[便宜, 适中, 小贵, 太贵, 太贵]
Categories (4, object): [便宜 < 适中 < 小贵 < 太贵]
s1 = pda.cut(data5,[0,10,100,1000,data5.max()], labels=["没意思","还行", "有点意思", "热议"])
[NaN, NaN, 还行, 没意思, 没意思, ..., 没意思, 没意思, NaN, NaN, NaN]
Length: 7029
Categories (4, object): [没意思 < 还行 < 有点意思 < 热议]
ch = data[U"like_num"]/data[u"comment_num"] data[u"赞评比"] = ch print(data) like_num comment_num 赞评比 0 0 0 NaN 1 0 0 NaN 2 20 1 20.0 3 2 1 2.0 4 1 1 1.0 ... ... ... ... 7024 1 1 1.0 7025 1 0 inf 7026 0 0 NaN 7027 0 1 0.0 7028 0 0 NaN
维归约:减少所考虑的随机变量或属性的个数。方法有小波变换、主成分分析,把原始数据变换或投影到较小的空间。属性自己选择是一种维归约方法,其中不相关、弱相关或冗余的属性或维被检测或删除。
数量归约:用替代的、较小的数据表示形式换原始数据。这些技术可以是参数或者非参数的。对于参数方法而言,使用模型估计数据,使得一般只需要存放模型参数而不是实际数据(离群点需存放)。非参数方法包括:直方图、聚类、抽样和数据立方体聚类。
数据压缩:使用变换,一遍得到原始数据的归约或“压缩”表示。如果数据可以在压缩后的数据重构,而不损失信息,则该数据归约被称为无损的。如果是近似重构原数据,称为有损的。
pca1 = PCA() pca1.fit(data) #特征向量 tzl = pca1.components_ print(tzl) [[ 0.99842921 0.04808125 0.02876297] [-0.05528427 0.92880722 0.36641614] [-0.00909751 -0.36743072 0.9300064 ]] #贡献率 bfb = pca1.explained_variance_ratio_ [0.97349628 0.02480757 0.00169614] #降维 pca1 = PCA(2) pca1.fit(data) JW=pca1.transform(data) print(JW) [[-18.86747991 -3.42291403] [-18.86747991 -3.42291403] [ 1.14918552 -3.59979228] ... [-18.86747991 -3.42291403] [-18.81939865 -2.4941068 ] [-18.86747991 -3.42291403]]
通过前期从获取的的庆余年和猪肉价格微博数据(主要是代码扔服务器了,然而放假了实验室的 服务器也关了就保存了这俩在本地),作文本对比
(1)分词
import pymongo import pandas as pda import jieba import jieba.analyse client = pymongo.MongoClient('localhost', 27017) db = client['QingYuNian'] # print(db) pk = db["Tweets"] data = pda.DataFrame(list(pk.find())) data = str(data['content'].values) print(data) tag=jieba.analyse.extract_tags(data,50) print(tag) ['余年', '50', '点播', '超前', '皇子', '电视剧', '追庆', '剧透', '范闲', '微博', '...', '混剪', 'R1SE', '区惊现', '##', '需付', '真酸', '没大没小', '综艺', '甜甜的', '群像', '角儿', '此剧', '风月', '买单', ' 不谈', '上头', '视频', '主角', '垃圾', '国事', '恋爱', '可爱', '一脸', '走来', '舞台', '想要', '着手', '见面', '评论', '一看', '绝对', '高达', '大小', '正在', '不会', '以后', '不能', '这个', '没有']
(2)相似度计算
①TF-IDF
TF-IDF(term frequency–inverse document frequency)是一种用于信息检索与数据挖掘的常用加权技术。TF意思是词频(Term Frequency),IDF意思是逆文本频率指数(Inverse Document Frequency)。
②Gensim
Gensim是一款开源的第三方Python工具包,用于从原始的非结构化的文本中,无监督地学习到文本隐层的主题向量表达。
它支持包括TF-IDF,LSA,LDA,和word2vec在内的多种主题模型算法,
支持流式训练,并提供了诸如相似度计算,信息检索等一些常用任务的API接口
基本概念
语料(Corpus)
:一组原始文本的集合,用于无监督地训练文本主题的隐层结构。语料中不需要人工标注的附加信息。在Gensim中,Corpus通常是一个可迭代的对象(比如列表)。每一次迭代返回一个可用于表达文本对象的稀疏向量。
向量(Vector)
:由一组文本特征构成的列表。是一段文本在Gensim中的内部表达。
稀疏向量(SparseVector)
:通常,我们可以略去向量中多余的0元素。此时,向量中的每一个元素是一个(key, value)的元组,密集向量和稀疏向量的区别: 密集向量的值就是一个普通的Double数组 而稀疏向量由两个并列的 数组indices和values组成 例如:向量(1.0,0.0,1.0,3.0)用密集格式表示为[1.0,0.0,1.0,3.0],用稀疏格式表示为(4,[0,2,3],[1.0,1.0,3.0]) 第一个4表示向量的长度(元素个数),[0,2,3]就是indices数组,[1.0,1.0,3.0]是values数组,表示向量0的位置的值是1.0,2的位置的值是1.0,而3的位置的值是3.0,其他的位置都是0
模型(Model)
:是一个抽象的术语。定义了两个向量空间的变换(即从文本的一种向量表达变换为另一种向量表达)。
步骤:
import pymongo
import pandas as pda
import jieba
import jieba.analyse
from gensim import corpora, models, similarities
from collections import defaultdict
1、读取文件
client = pymongo.MongoClient('localhost', 27017)
db = client['QingYuNian']
db1 = client['SinaPig']
# print(db)
pk = db["Tweets"]
pk1 = db1["Tweets"]
data = pda.DataFrame(list(pk.find()))
data = str(data['content'].values)
data1 = pda.DataFrame(list(pk1.find()))
data1 = str(data1['content'].values)
2、分词
cut_d1 = jieba.cut(data)
cut_d2 = jieba.cut(data1)
3、整理成指定格式
data_cut1 = ""
for item in cut_d1:
data_cut1 += item+" "
data_cut2 = ""
for item in cut_d2:
data_cut2 += item+" "
documents = [data_cut1, data_cut2]
texts = [[word for word in document.split()]
for document in documents
]
4、计算出词语的频率
frequency = defaultdict(int)
for text in texts:
for token in text:
frequency[token] += 1
5、过滤(可选)
texts = [[token for token in text if frequency[token] > 0]
for text in texts]
6、通过语料库建立词典
dic = corpora.Dictionary(texts)
# print(dic)
dic.save("E:\\test.txt")
7、加载要对比的文档
8、将要对比的文档通过doc2bow转化为稀疏向量
cut_d3 = jieba.cut(data1)
data_cut3 = ""
for item in cut_d3:
data_cut3 += item+" "
new_vec = dic.doc2bow(data_cut3.split())
corpus = [dic.doc2bow(text) for text in texts]
corpora.MmCorpus.serialize("E:\\test.mm", corpus)
9、对稀疏向量进行进一步处理,得到新语料库
10、将新语料库通过tfidfmodel进行处理,得到tfidf
tffidf = models.TfidfModel(corpus)
11、通过token2id得到特征数
featureNum = len(dic.token2id.keys())
12、稀疏矩阵的相似度,建立索引
index = similarities.SparseMatrixSimilarity(
tffidf[corpus], num_features=featureNum)
sim = index[tffidf[new_vec]]
print(sim)
13、得到最终相似度的结果
[['[', "'", '正在', '追庆', '余年', '的', '我', '连', '热', '搜', '都', '不能', '看', '了', '。', '一看', '就', '被', '剧透', '一脸', '。', "'", "'", '了', '来', '了', ',', '高达', '拿', '着', '剑', '走来','了', "'", "'", '#', '庆', '余年', '#', '二', '皇子', '揣', '着手', '和', '范闲', '说', ':', '以后', '多', '见面', ',', '不谈', '国事', '谈', '风月', '#', '二', '皇子', '可爱', '#', '综艺', '淘', '的', '微博', '视频', "'", '...', "'", '庆', '余年', '#', '/', '#', '电视剧', '庆', '余年', '#', '【', '庆', '余年', '群像', '混剪', '✘', '角儿', '无', '大小', '】', '“', '舞台', '没大没小', ',', '没有', '绝对', '的', '主角', '。', '”', 'R1SE', '和', '庆', '余年', '的', '混', '搭', ',', '评论', '区惊现', '壶', '妹', "'", "'", '#', '庆', '余年', '超前', '点播', '50', '元', '##', '电视剧', '庆', '余年', '#', '垃圾', ',', '我', '不会', '出', '这个', '50', '元', '《', '庆', '余年', '》', '超前', '点播', '需付', '50', '元', ',', '此剧', '有', '上头', '到', '让', '你', '买单', '吗', '?', "'", "'", '庆', '余年', '看', '的', '我', '真', '想要', '个', '甜甜的', '恋爱', '真酸', "'", ']'], ['[', "'", '听说', '猪肉', '的', '价格', '又', '涨', '了', "'", "'", '0', '月底', '不少', '飞', '哈尔滨', '的', '航班', '飞行', '报告', '说', '在','某县', '上空', '经常出现', 'GPS', '信号', '丢失', ',', '部分', '航班', '甚至', '还有', '其它', '电子设备', '出现', '系统故障', ',', '飞离', '那个', '区域', '后', '就', '一切正常', '了', '。', '民航', ',', '公安', ',', '黑龙江', '工信厅', '如临大敌', ',', '光工', '信厅', '就', '从', '全省', '抽调', '了', '几十号', '专业', '技术人员', '和', '大量', '设备', '在', '地面', '拉网', '排查', ',', '最后', '查明', '干扰源', '为', '某', '企业', '为', '防止', '无人机', '闯入', '而', '私设', '的', '干扰', '设备', '“', '炒', '猪团', '”', '那事', '早就', '不是', '什么', '新闻', '了', ',', '最初', '时', '是', '往', '养猪场', '周围', '扔', '死', '猪', ',', '然后', '造舆论', '说', '目标', '养猪场', '“', '非洲', '猪瘟', '”', '了', ',', '然后', '派', '人', '去', '低价', '收购', '生猪', ',', '随着', '地方', '政府', '和', '养猪场', '防控', '措施', '升级', ',', '这个', '方法', '不好', '使', '了', ',', '“', '炒', '猪团', '”', '就', '直接', '用', '无人机', '往', '养猪场', '投毒', ',', '未必', '是', '非洲', '猪瘟', ',', '也', '可能', '是', '真的', '毒药', ',', '养猪场', '除了', '尽可能', '的', '封闭', '之外', ',', '有些', '直接', '上', '了', 'GPS', '干扰', '装置', ',', '不过', '稍微', '有点', '水平', '的', '飞手', ',', '完全', '可以','在', '无', 'GPS', '信号', '的', '情况', '下', '操作', '无人机', '投毒', ',', '好', '吗', ',', '养猪场', '上', '更加', '复杂', '的', '干扰', '设备', ',', '制造', '出', '更加', '复杂', '的', '电磁', '环境', ',', '不光', '能', '干扰', 'GPS', '还', '能', '干扰', '无人机', '的', '飞控', '。', "'", "'", '0', '月底', '不少', '飞', '哈尔滨', '的', '航班', '飞行', '报告', '说', '在', '某县', '上空', '经常出现', 'GPS', '信号', '丢失', ',', '部分', '航班', '甚至', '还有', '其它', '电子设备', '出现', '系统故障', ',', '飞离', '那个', '区域', '后', '就', '一切正常', '了', '。', '民航', ',', '公安', ',', '黑龙江', '工信厅', '如临大敌', ',', '光工', '信厅', '就', '从', '全省', '抽调', '了', '几十号', '专业', '技术人员', '和', '大量', '设备', '在', '地面', '拉网', '排查', ',', '最后', '查明', '干扰源', '为', '某', '企业', '为', '防止', '无人机', '闯入', '而', '私设', '的', '干扰', '设备', '“', '炒', '猪团', '”', '那事', '早就', '不是', '什么', '新闻', '了', ',', '最初', '时', '是', '往', '养猪场', '周围', '扔', '死', '猪', ',','然后', '造舆论', '说', '目标', '养猪场', '“', '非洲', '猪瘟', '”', '了', ',', '然后', '派', '人', '去', '低价', '收购', '生猪', ',', '随着', '地方', '政府', '和', '养猪场', '防控', '措施', '升级', ',', '这个', '方法', '不好', '使', '了', ',', '“', '炒', '猪团', '”', '就', '直接', '用', '无人机', '往', '养猪场', '投毒', ',', '未必', '是', '非洲', '猪瘟', ',', '也', '可能', '是', '真的', '毒药', ',', '养猪场', '除了', '尽可能', '的', '封闭', '之外', ',', '有些', '直接', '上', '了', 'GPS', '干扰', '装置', ',', '不过', '稍微', '有点', '水平', '的', '飞手', ',', '完全', '可以', '在', '无', 'GPS', '信号', '的', '情况', '下', '操作', '无人机', '投毒', ',', '好', '吗', ',', '养猪场', '上', '更加', '复杂', '的', '干扰', '设备', ',', '制造', '出', '更加', '复杂', '的', '电磁', '环境', ',', '不光', '能', '干扰', 'GPS', '还', '能', '干扰', '无人机', '的', '飞控', '。', "'", '...', "'", '国家统计局', ':', '2', '月', 'CPI', '同比', '上涨', '1.5%', '鸡蛋', '猪肉', '柴', '汽油价格', '下降', '点击', '可', '查看', '更', '多', 'http', ':', '/', '/', 't', '.', 'cn', '/', 'EMZeBgE', "'", "'", '国家统计局', ':', '2', '月', 'CPI', '同比', '上涨', '1.5%', '鸡蛋', '猪肉', '柴', '汽油价格', '下降', '点击', '可', '查看', '更', '多', 'http', ':', '/', '/', 't', '.', 'cn', '/', 'EMZeBgE', "'", "'", '国家统计局', ':', '2', '月', 'CPI', '同比', '上涨', '1.5%', '鸡蛋', '猪肉', '柴', '汽油价格', '下降', '点击', '可', '查看', '更', '多', 'http', ':', '/', '/', 't', '.', 'cn', '/', 'EMZeBgE', "'", ']']]
[0. 0.99999946]
数据建模指的是对现实世界中的个剋数据的抽象组织,建立一个适合的模型对数据进行处理。常见的算法有分类,聚类,关联,回归。
(未完,暂时先看到了这部分,等有时间继续,文章偏操作对于理论的研究不足,作为长得黑的小白,文章的不足之处还请各位大佬指正)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。