1. python怎么做数据分析
无论是自学还是怎么的,记住自己学习Python的目标——从事数据科学,而非Python软件开发。所以,Python入门的方向,应该是掌握Python所有的相关概念、基础知识,为后续Python库的学习打基础。
需要掌握的数据分析基本库有
Numpy是Python科学计算的基础包。
它提供了复杂精细的索引功能,能更加便捷地完成重塑、切片和切块、聚合以及选取数据子集等操作。因为数据操作、准备、清洗是数据分析最重要的技能,所以Pandas也是学习的重点。
Matplotlib是最流行的用于绘制图表和其它二维数据可视化的Python库,它非常适合创建出版物上用的图表。
Scikit-learn是Python的通用机器学习工具包。它的子模块包括分类、回归、聚类、降维、选型、预处理,对于Python成为高效数据科学编程语言起到了关键作用。
只需要学习Python入门的知识以及4个数据分析相关的库,就能上手使用Python进行数据分析了。另外如果需要获取外部网站数据的话,还需要学习爬虫。
2. Python怎么构建文本矩阵并聚类
可能我很快回答不了你的问题。还需要细细回味一下。
但是我觉得你的问题是一个比较明显的短文本聚类问题,这个问题应该在国际上都是比较难的吧。
如果还涉及到中文,中文的相关处理又不能照抄英文短文本聚类的方法,相关资料更加少了。
我倒是建议你 多看一些短文本聚类相关的文章。
问题一:技术上python矩阵表示的话:你可以使用python包,如下:
from numpy import matrix
A = matrix( [[1,2,3],[11,12,13],[21,22,23]])
这样你需要额外规定化:行i表示文档编号i的文档,列j表示词j出现次数,A[i][j]表示在文档i中词j的出现频率
或者
如同那篇文章所说的采用dict表示法:A = [{'额外':1},{'每天':1,'回帖':1},......]表示整个文档集合。
问题二:如同这样的问题本质一样,短文本聚类是否还适合传统的分词,去除副词...等处理步骤,
如何选择合适的模型来表示这类问题,我觉得你还是参考一些这方面的文章,最好中文的。
比如现在很火的微博,也会有好多的人尝试对其中成干上万评论进行聚类。很多进行二类或者三类聚类/分类:支持-中立-反对。
论坛的评论应该很早以前就有研究聚类/分类.我觉得去那里参考会更好.如果不是特别面向指定目的的聚类,我觉得采用一些使用宽泛的方法就行了。感觉结果不会很好。
问题三:EM算法感觉像纯数学的东西,学术功底不够深,我也不好发表看法。
感觉这个问题的本质已经超出我的知识范畴。最简单文档聚类无非:分词-文本预处理[同义词之类]-文档与词计频矩阵表示-(TF-IDF预处理)-kmeans跑起来-输出结果.
3. 如何用python对文本进行聚类
实现原理:
首先从Tourist_spots_5A_BD.txt中读取景点信息,然后通过调用无界面浏览器PhantomJS(Firefox可替代)访问网络链接"http://ke..com/",通过Selenium获取输入对话框ID,输入关键词如"故宫",再访问该网络页面。最后通过分析DOM树结构获取摘要的ID并获取其值。核心代码如下:
driver.find_elements_by_xpath("//div[@class='lemma-summary']/div")
PS:Selenium更多应用于自动化测试,推荐Python爬虫使用scrapy等开源工具。
# coding=utf-8
"""
Created on 2015-09-04 @author: Eastmount
"""
import time
import re
import os
import sys
import codecs
import shutil
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import selenium.webdriver.support.ui as ui
from selenium.webdriver.common.action_chains import ActionChains
#Open PhantomJS
driver = webdriver.PhantomJS(executable_path="G:\phantomjs-1.9.1-windows\phantomjs.exe")
#driver = webdriver.Firefox()
wait = ui.WebDriverWait(driver,10)
#Get the Content of 5A tourist spots
def getInfobox(entityName, fileName):
try:
#create paths and txt files
print u'文件名称: ', fileName
info = codecs.open(fileName, 'w', 'utf-8')
#locate input notice: 1.visit url by unicode 2.write files
#Error: Message: Element not found in the cache -
# Perhaps the page has changed since it was looked up
#解决方法: 使用Selenium和Phantomjs
print u'实体名称: ', entityName.rstrip('\n')
driver.get("http://ke..com/")
elem_inp = driver.find_element_by_xpath("//form[@id='searchForm']/input")
elem_inp.send_keys(entityName)
elem_inp.send_keys(Keys.RETURN)
info.write(entityName.rstrip('\n')+'\r\n') #codecs不支持'\n'换行
time.sleep(2)
#load content 摘要
elem_value = driver.find_elements_by_xpath("//div[@class='lemma-summary']/div")
for value in elem_value:
print value.text
info.writelines(value.text + '\r\n')
time.sleep(2)
except Exception,e: #'utf8' codec can't decode byte
print "Error: ",e
finally:
print '\n'
info.close()
#Main function
def main():
#By function get information
path = "BaiSpider\\"
if os.path.isdir(path):
shutil.rmtree(path, True)
os.makedirs(path)
source = open("Tourist_spots_5A_BD.txt", 'r')
num = 1
for entityName in source:
entityName = unicode(entityName, "utf-8")
if u'故宫' in entityName: #else add a '?'
entityName = u'北京故宫'
name = "%04d" % num
fileName = path + str(name) + ".txt"
getInfobox(entityName, fileName)
num = num + 1
print 'End Read Files!'
source.close()
driver.close()
if __name__ == '__main__':
main()
4. 如何用Python对人员轨迹聚类
把你的 xy 变换成 onehot编码 ,这样的话 聚类算法就都可以兼容了,
KMeans, DBScan, 层次聚类,等等都是可以的
5. python数据分析的一般步骤是什么
下面是用python进行数据分析的一般步骤:
一:数据抽取
从外部源数据中获取数据
保存为各种格式的文件、数据库等
使用Scrapy爬虫等技术
二:数据加载
从数据库、文件中提取数据,变成DataFrame对象
pandas库的文件读取方法
三:数据处理
数据准备:
对DataFrame对象(多个)进行组装、合并等操作
pandas库的操作
数据转化:
类型转化、分类(面元等)、异常值检测、过滤等
pandas库的操作
数据聚合:
分组(分类)、函数处理、合并成新的对象
pandas库的操作
四:数据可视化
将pandas的数据结构转化为图表的形式
matplotlib库
五:预测模型的创建和评估
数据挖掘的各种算法:
关联规则挖掘、回归分析、聚类、分类、时序挖掘、序列模式挖掘等
六:部署(得出结果)
从模型和评估中获得知识
知识的表示形式:规则、决策树、知识基、网络权值
更多技术请关注python视频教程。
6. python聚类如何解释
代码如下:# -*- coding: utf-8 -*-from sklearn.cluster import KMeansfrom sklearn.externals import joblibimport numpy final = open('c:/test/final.dat' , 'r') data = [line.strip().split('\t') for line in final]feature = [[float(x) for x in row[3:]] for row in data] #调用kmeans类clf = KMeans(n_clusters=9)s = clf.fit(feature)print s #9个中心print clf.cluster_centers_ #每个样本所属的簇print clf.labels_ #用来评估簇的个数是否合适,距离越小说明簇分的越好,选取临界点的簇个数print clf.inertia_ #进行预测print clf.predict(feature) #保存模型joblib.mp(clf , 'c:/km.pkl') #载入保存的模型clf = joblib.load('c:/km.pkl') '''#用来评估簇的个数是否合适,距离越小说明簇分的越好,选取临界点的簇个数for i in range(5,30,1): clf = KMeans(n_clusters=i) s = clf.fit(feature) print i , clf.inertia_
7. python对数据进行聚类怎么显示数据分类
将其整理成数据集为:
[ [1,0,"yes"],[1,1,"yes"],[0,1,"yes"],[0,0,"no"],[1,0,"no"] ]
算法过程:
1、计算原始的信息熵。
2、依次计算数据集中每个样本的每个特征的信息熵。
3、比较不同特征信息熵的大小,选出信息熵最大的特征值并输出。
运行结果:
col : 0 curInfoGain : 2.37744375108 baseInfoGain : 0.0
col : 1 curInfoGain : 1.37744375108 baseInfoGain : 2.37744375108
bestInfoGain : 2.37744375108 bestFeature: 0
结果分析:
说明按照第一列,即有无喉结这个特征来进行分类的效果更好。
思考:
1、能否利用决策树算法,将样本最终的分类结果进行输出?如样本1,2,3属于男性,4属于女性。
2、示例程序生成的决策树只有一层,当特征量增多的时候,如何生成具有多层结构的决策树?
3、如何评判分类结果的好坏?
在下一篇文章中,我将主要对以上三个问题进行分析和解答。如果您也感兴趣,欢迎您订阅我的文章,也可以在下方进行评论,如果有疑问或认为不对的地方,您也可以留言,我将积极与您进行解答。
完整代码如下:
from math import log
"""
计算信息熵
"""
def calcEntropy(dataset):
diclabel = {} ## 标签字典,用于记录每个分类标签出现的次数
for record in dataset:
label = record[-1]
if label not in diclabel.keys():
diclabel[label] = 0
diclabel[label] += 1
### 计算熵
entropy = 0.0
cnt = len(dataset)
for label in diclabel.keys():
prob = float(1.0 * diclabel[label]/cnt)
entropy -= prob * log(prob,2)
return entropy
def initDataSet():
dataset = [[1,0,"yes"],[1,1,"yes"],[0,1,"yes"],[0,0,"no"],[1,0,"no"]]
label = ["male","female"]
return dataset,label
#### 拆分dataset ,根据指定的过滤选项值,去掉指定的列形成一个新的数据集
def splitDataset(dataset , col, value):
retset = [] ## 拆分后的数据集
for record in dataset:
if record[col] == value :
recedFeatVec = record[:col]
recedFeatVec.extend(record[col+1:]) ### 将指定的列剔除
retset.append(recedFeatVec) ### 将新形成的特征值列表追加到返回的列表中
return retset
### 找出信息熵增益最大的特征值
### 参数:
### dataset : 原始的数据集
def findBestFeature(dataset):
numFeatures = len(dataset[0]) - 1 ### 特征值的个数
baseEntropy = calcEntropy(dataset) ### 计算原始数据集的熵
baseInfoGain = 0.0 ### 初始信息增益
bestFeature = -1 ### 初始的最优分类特征值索引
### 计算每个特征值的熵
for col in range(numFeatures):
features = [record[col] for record in dataset] ### 提取每一列的特征向量 如此处col= 0 ,则features = [1,1,0,0]
uniqueFeat = set(features)
curInfoGain = 0 ### 根据每一列进行拆分,所获得的信息增益
for featVal in uniqueFeat:
subDataset = splitDataset(dataset,col,featVal) ### 根据col列的featVal特征值来对数据集进行划分
prob = 1.0 * len(subDataset)/numFeatures ### 计算子特征数据集所占比例
curInfoGain += prob * calcEntropy(subDataset) ### 计算col列的特征值featVal所产生的信息增益
# print "col : " ,col , " featVal : " , featVal , " curInfoGain :" ,curInfoGain ," baseInfoGain : " ,baseInfoGain
print "col : " ,col , " curInfoGain :" ,curInfoGain ," baseInfoGain : " ,baseInfoGain
if curInfoGain > baseInfoGain:
baseInfoGain = curInfoGain
bestFeature = col
return baseInfoGain,bestFeature ### 输出最大的信息增益,以获得该增益的列
dataset,label = initDataSet()
infogain , bestFeature = findBestFeature(dataset)
print "bestInfoGain :" , infogain, " bestFeature:",bestFeature
8. python怎么用sklearn包进行聚类
#-*-coding:utf-8-*-
fromsklearn.clusterimportKMeans
fromsklearn.externalsimportjoblib
importnumpy
final=open('c:/test/final.dat','r')
data=[line.strip().split(' ')forlineinfinal]
feature=[[float(x)forxinrow[3:]]forrowindata]
#调用kmeans类
clf=KMeans(n_clusters=9)
s=clf.fit(feature)
prints
#9个中心
printclf.cluster_centers_
#每个样本所属的簇
printclf.labels_
#用来评估簇的个数是否合适,距离越小说明簇分的越好,选取临界点的簇个数
printclf.inertia_
#进行预测
printclf.predict(feature)
#保存模型
joblib.mp(clf,'c:/km.pkl')
#载入保存的模型
clf=joblib.load('c:/km.pkl')
'''
#用来评估簇的个数是否合适,距离越小说明簇分的越好,选取临界点的簇个数
foriinrange(5,30,1):
clf=KMeans(n_clusters=i)
s=clf.fit(feature)
printi,clf.inertia_
'''
9. python 数据在进行k-means聚类时遇到np.nan, 还可以进行数据聚类吗
遇到nan建议在数据预处理阶段用fillna进行填充,要不然数据不干净容易导致聚类结果不理想
10. 怎么用python进行聚类分析
、K均值聚类K-Means算法思想简单,效果却很好,是最有名的聚类算法。聚类算法的步骤如下:1:初始化K个样本作为初始聚类中心;2:计算每个样本点到K个中心的距离,选择最近的中心作为其分类,直到所有样本点分类完毕;3:分别计算K个类中所有样本的质心,作为新的中心点,完成一轮迭代。通常的迭代结束条件为新的质心与之前的质心偏移值小于一