Python数据抓取、分析、挖掘和分布式计算内容有哪些
Python数据抓取、分析、挖掘和分布式计算内容有哪些
本篇内容主要讲解“Python数据抓取、分析、挖掘和分布式计算内容有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python数据抓取、分析、挖掘和分布式计算内容有哪些”吧!
01 数据抓取
1、背景调研
1)检查robots.txt,了解爬取该网站有哪些限制;
2)pip install builtwith;pip install python-whois
2、数据抓取:
1)动态加载的内容:
使用selenium
#!/usr/bin/envpython#-*-coding:utf-8-*-fromseleniumimportwebdriverfromselenium.webdriver.common.keysimportKeysimporttimeimportsysreload(sys)sys.setdefaultencoding('utf8')driver=webdriver.Chrome("/Users/didi/Downloads/chromedriver")driver.get('http://xxx')elem_account=driver.find_element_by_name("UserName")elem_password=driver.find_element_by_name("Password")elem_code=driver.find_element_by_name("VerificationCode")elem_account.clear()elem_password.clear()elem_code.clear()elem_account.send_keys("username")elem_password.send_keys("pass")elem_code.send_keys("abcd")time.sleep(10)driver.find_element_by_id("btnSubmit").submit()time.sleep(5)driver.find_element_by_class_name("txtKeyword").send_keys(u"x")#模拟搜索driver.find_element_by_class_name("btnSerch").click()#...省略处理过程dw=driver.find_elements_by_xpath('//li[@class="min"]/dl/dt/a')foritemindw:url=item.get_attribute('href')ifurl:ulist.append(url)print(url+"---"+str(pnum))print("##################")
2)静态加载的内容
(1)正则;
(2)lxml;
(3)bs4
#!/usr/bin/envpython#-*-coding:utf-8-*-string=r'src="(http://imgsrc\.baidu\.com.+?\.jpg)"pic_ext="jpeg"'#正则表达式字符串urls=re.findall(string,html)importrequestsfromlxmlimportetreeimporturllibresponse=requests.get(url)html=etree.HTML(requests.get(url).content)res=html.xpath('//div[@class="d_post_contentj_d_post_content"]/img[@class="BDE_Image"]/@src')#lxmlimportrequestsfrombs4importBeautifulSoupsoup=BeautifulSoup(response.text,'lxml')#解析response并创建BeautifulSoup对象urls=soup.find_all('img','BDE_Image')
3):反爬与反反爬
(1):请求频率;
(2):请求头;
(3):IP代理;
4):爬虫框架:
(1):Scrapy
(2):Portia
02数据分析
1、常用的数据分析库:
NumPy:是基于向量化的运算。
1)List => 矩阵
2)ndim:维度;shape:行数和列数;size:元素个数
Scipy:是NumPy的扩展,有高等数学、信号处理、统计等。
Pandas:是基于NumPy的快速构建高级数据结构的包,数据结构:Series和DataFrame。
1):NumPy类似于List,Pandas 类似于Dict。
Matplotlib:绘图库。
1):是一个强大的绘图工具;
2):支持散点图、线图、柱状图等;
简单例子:
pip2installNumpy>>>importnumpyasnp>>>a=np.arange(10)>>>aarray([0,1,2,3,4,5,6,7,8,9])>>>a**2array([0,1,4,9,16,25,36,49,64,81])pip2installScipy>>>importnumpyasnp>>>fromscipyimportlinalg>>>a=np.array([[1,2],[3,4]])>>>linalg.det(a)-2.0pip2installpandas>>>df=pd.DataFrame({'A':pd.date_range("20170802",periods=5),'B':pd.Series([11,22,33,44,55]),'C':pd.Categorical(["t","a","b","c","g"])})>>>dfABC02017-08-0211t12017-08-0322a22017-08-0433b32017-08-0544c42017-08-0655gpip2installMatplotlib>>>importmatplotlib.pyplotasplt>>>plt.plot([1,2,3])[<matplotlib.lines.Line2Dobjectat0x113f88f50>]>>>plt.ylabel("didi")<matplotlib.text.Textobjectat0x110b21c10>>>>plt.show()
2、高级数据分析库:
scikit-learn:机器学习框架。
图上可以表示出数据小于50,No:需要更多的数据, Yes使用分类器,一直走下去;
由图中,可以看到算法有四类,分类,回归,聚类,降维。
KNN:
#!/usr/local/bin/python#-*-coding:utf-8-*-'''预测Irishttps://en.wikipedia.org/wiki/Iris_flower_data_set'''#导入模块from__future__importprint_functionfromsklearnimportdatasetsfromsklearn.model_selectionimporttrain_test_splitfromsklearn.neighborsimportKNeighborsClassifier#创建数据iris=datasets.load_iris()iris_X=iris.data#花萼的长宽、花瓣的长宽iris_y=iris.target#花的种类0,1,2print(iris_X)print(iris_y)print(iris.target_names)#定义模型-训练模型-预测X_train,X_test,y_train,y_test=train_test_split(iris_X,iris_y,test_size=0.1)#训练数据10%knn=KNeighborsClassifier()#创建KNN近邻器knn.fit(X_train,y_train)#训练数据predicts=knn.predict(X_test)#得到预测结果#对比结果print("#########################")print(X_test)print(predicts)print(y_test)#计算预测准确率print(knn.score(X_test,y_test))[[5.3.31.40.2][5.3.51.30.3][6.73.15.62.4][5.82.73.91.2][6.2.25.1.5][6.3.4.81.8][6.32.55.1.9][5.3.61.40.2][5.62.93.61.3][6.93.25.72.3][4.93.1.40.2][5.93.4.21.5][4.83.1.40.1][5.13.41.50.2][4.73.21.60.2]][002112201201000][002122201201000]0.933333333333
Linear Regression
#!/usr/local/bin/python#-*-coding:utf-8-*-'''波士顿房价趋势'''#导入模块from__future__importprint_functionfromsklearnimportdatasetsfromsklearn.linear_modelimportLinearRegressionimportmatplotlib.pyplotasplt#创建数据loaded_data=datasets.load_boston()#波士顿的房价data_X=loaded_data.datadata_y=loaded_data.targetprint(data_X)print(data_y)#定义模型-训练模型-预测model=LinearRegression()#线性回归model.fit(data_X,data_y)#训练数据print(model.predict(data_X[:4,:]))#得到预测结果print(data_y[:4])#结果print("#########################")X,y=datasets.make_regression(n_samples=100,n_features=1,noise=10)#生成回归模型数据100个样本,每个样本一个特征,高斯噪声plt.scatter(X,y)#散点图plt.show()
03 数据挖掘
1、挖掘关键词:
涉及到的算法:TF-IDF
news.txt:
滴滴出行与欧非地区领先出行企业Taxify达成战略合作 支持跨地区交通技术创新
2017-08-01 滴滴出行 【2017年8月1日,中国,北京/爱沙尼亚,塔林】滴滴出行今日宣布与欧非地区移动出行领军企业Taxify达成战略合作 。滴滴将通过投资以及智能交通技术研发等方面协作,支持Taxify在多元市场进行更深度的市场拓展和技术创新。 滴滴出行是全球领先的移动出行平台。依靠人工智能技术, 滴滴在超过400个城市为4亿多用户提供包括出租车、专车、快车、豪华车和顺风车等在内的多元化出行服务。在为1700 余万司机提供灵活就业与收入机会的同时,滴滴也以人工智能技术支持城市管理者建设一体化、可持续的智慧交通解决 方案。 Taxify于2013年成立于爱沙尼亚,是欧洲和非洲地区成长最快的移动出行企业。目前其出租车和私家车共享出行服务网 络遍及欧洲、非洲、西亚的中心城市;触达匈牙利、罗马尼亚、波兰、波罗的海三国、南非、尼日利亚、肯尼亚等18个 国家,拥有超过250万用户。 滴滴出行创始人、CEO程维表示:“Taxify在多元化的市场提供优质的创新型出行服务。我们都致力于运用移动互联网 科技的力量,满足迅速演变的消费者需求;帮助传统交通行业转型升级。我相信这一合作将为亚洲,欧洲和非洲市场间 构建跨地区智慧交通纽带作出贡献。”
Taxify创始人、CEO马克斯·维利格(Marcus Villig)表示:“Taxify将借力此次战略合作,巩固我们在欧洲和非洲核心市场的优势地位。我们相信滴滴是最理想的 伙伴,能帮助我们成为欧非地区***和最有效率的出行选择。”
#!/usr/local/bin/python#-*-coding:utf-8-*-'''分析文章关键词'''importosimportcodecsimportpandasimportjiebaimportjieba.analyse#格式化数据格式tagDF=pandas.DataFrame(columns=['filePath','content','tag1','tag2','tag3','tag4','tag5'])try:withopen('./houhuiyang/news.txt','r')asf:#载入语料库content=f.read().strip()tags=jieba.analyse.extract_tags(content,topK=5)#TF_IDFtagDF.loc[len(tagDF)]=["./news.txt",content,tags[0],tags[1],tags[2],tags[3],tags[4]]print(tagDF)exceptException,ex:print(ex)
计算出文章Top5的关键词:出行、滴滴、Taxify、欧非、交通
2、情感分析
1)最简单的方式就是基于情感词典的方法;
2)复杂的就是基于机器学习的方法;
pip2installnltk>>>importnltk>>>fromnltk.corpusimportstopwords#停止词>>>nltk.download()#安装语料库>>>t="Didiisatravelcompany">>>word_list=nltk.word_tokenize(t)>>>filtered_words=[wordforwordinword_listifwordnotinstopwords.words('english')]['Didi','travel','company']>>>nltk.download('stopwords')#下载停止词
中英文NLP分词区别
1):启发式 Heuristic
2):机器学习/统计法:HMM、CRF
处理流程:raw_text -> tokenize[pos tag] -> lemma / stemming[pos tag] -> stopwords -> word_list
04 Python 分布式计算
pip2installmrjjobpip2installpyspark
1)Python 多线程;
2)Python 多进程【multiprocessing】;
3)全局解释器锁GIL;
4)进程间通信Queue;
5)进程池Pool;
6)Python的高阶函数;
map/reduce/filter
7)基于Linux的管道的MapReducer 【cat word.log | python mapper.py | python reducer.py | sort -k 2r】
word.log
北京 成都 上海 北京 山西 天津 广州
#!/usr/local/bin/python#-*-coding:utf-8-*-'''mapper'''importsystry:forlinesinsys.stdin:line=lines.split()forwordinline:iflen(word.strip())==0:continuecount="%s,%d"%(word,1)print(count)exceptIOError,ex:print(ex)#!/usr/local/bin/python#-*-coding:utf-8-*-'''reducer'''importsystry:word_dict={}forlinesinsys.stdin:line=lines.split(",")iflen(line)!=2:continueword_dict.setdefault(line[0],0)word_dict[line[0]]+=int(line[1])forkey,valinword_dict.items():stat="%s%d"%(key,val)print(stat)exceptIOError,ex:print(ex)
05神经网络
分别有CPU/GPU版本
1)tensorflow 建立的神经网络是静态的
2)pytorch http://pytorch.org/#pip-install-pytorch 建立的神经网络是动态的 【Troch 是Lua写的,这个是Python版本】
简单说数据:
标量(Scalar)是只有大小,没有方向的量,如1,2,3等
向量(Vector)是有大小和方向的量,其实就是一串数字,如(1,2)
矩阵(Matrix)是好几个向量拍成一排合并而成的一堆数字,如[1,2;3,4]
张量(Tensor)是按照任意维排列的一堆数字的推广。如图所示,矩阵不过是三维张量下的一个二维切面。要找到三维张量下的一个 标量,需要三个维度的坐标来定位。
TensorFlow pytorch用张量这种数据结构来表示所有的数据。
#-*-coding:UTF-8-*-#authorhouhuiyangimporttorchimportnumpyasnpfromtorch.autogradimportVariableimporttorch.nn.functionalasFimportmatplotlib.pyplotaspltnp_data=np.arange(6).reshape((2,3))torch_data=torch.from_numpy(np_data)tensor2np=torch_data.numpy()print("\nnp_data",np_data,#矩阵"\ntorch_data",torch_data,#张量"\ntensortonumpy",tensor2np)#data=[-1,-2,1,2,3]data=[[1,2],[3,4]]tensor=torch.FloatTensor(data)#abssincosmean平均值matmul/mmprint("\nnumpy",np.matmul(data,data),"\ntorch",torch.mm(tensor,tensor))#tensorvariabletensor_v=torch.FloatTensor([[1,2],[3,4]])variable=Variable(tensor_v,requires_grad=True)#计算中值t_out=torch.mean(tensor_v*tensor_v)#x^2v_out=torch.mean(variable*variable)#反向传播print(tensor_v,variable,t_out,v_out)v_out.backward()#反向传递print(variable.grad)#梯度'''y=Wx线性y=AF(Wx)非线性【激励函数relu/sigmoid/tanh】'''x=torch.linspace(-5,5,200)#从-5到5取200个点x=Variable(x)x_np=x.data.numpy()y_relu=F.relu(x).data.numpy()y_sigmoid=F.sigmoid(x).data.numpy()y_tanh=F.tanh(x).data.numpy()#y_softplus=F.softplus(x).data.numpy()#概率图plt.figure(1,figsize=(8,6))#plt.subplot(221)#绘制子图plt.plot(x_np,y_relu,c="red",label="relu")plt.ylim(-1,5)plt.legend(loc="best")plt.show()#plt.subplot(222)plt.plot(x_np,y_sigmoid,c="red",label="igmoid")plt.ylim(-0.2,1.2)plt.legend(loc="best")plt.show()#plt.subplot(223)plt.plot(x_np,y_tanh,c="red",label="subplot")plt.ylim(-1.2,1.2)plt.legend(loc="best")plt.show()
搭建简单的神经网络
#-*-coding:UTF-8-*-#author守望之心'''回归分类'''importtorchfromtorch.autogradimportVariableimporttorch.nn.functionalasF#激励函数importmatplotlib.pyplotaspltx=torch.unsqueeze(torch.linspace(-1,1,100),dim=1)#unsqueeze一维转变为二维y=x.pow(2)+0.2*torch.rand(x.size())x,y=Variable(x),Variable(y)#print(x)#print(y)#plt.scatter(x.data.numpy(),y.data.numpy())#plt.show()classNet(torch.nn.Module):#继承torch的Moudledef__init__(self,n_features,n_hidden,n_output):super(Net,self).__init__()#继承torch__init__self.hidden=torch.nn.Linear(n_features,n_hidden)#隐藏层线性输出self.predict=torch.nn.Linear(n_hidden,n_output)#输出线性层defforward(self,x):x=F.relu(self.hidden(x))#激励函数x=self.predict(x)#输出值returnxnet=Net(1,10,1)#输入值,隐藏层10,10个神经元,1个输出值print(net)#输出搭建的神经网络结构plt.ion()plt.show()#训练工具optimizer=torch.optim.SGD(net.parameters(),lr=0.5)#传入net的所有值,lr是学习率loss_func=torch.nn.MSELoss()#均方差print(net.parameters())fortinrange(100):prediction=net(x)#喂给net训练数据x,输出预测值loss=loss_func(prediction,y)#计算两者误差#反向传播optimizer.zero_grad()loss.backward()optimizer.step()ift%5==0:plt.cla()plt.scatter(x.data.numpy(),y.data.numpy())plt.plot(x.data.numpy(),prediction.data.numpy(),"r-",lw=5)plt.text(0.5,0,'Loss=%.4f'%loss.data[0],fontdict={'size':20,'color':'red'})plt.pause(0.1)plt.ioff()plt.show()
06 数学 微积分
1、极限:
无穷大无穷小阶数;
2、微分学:
导数:
1)导数就是曲线的斜率,是曲线变化快慢的反应;
2)二阶导数是斜率变化快慢的反应,表现曲线的凸凹性;
泰勒级数逼近
牛顿法和梯度下降;
3、Jensen不等式:
凸函数;Jensen不等式
概率论:
1、积分学:
牛顿-莱布尼茨公式
2、概率空间
随机变量与概率:概率密度函数的积分;条件概率;共轭分布;
概率分布:
1)两点分布/贝努力分布;
2)二项分布;
3)泊松分布;
4)均匀分布;
5)指数分布;
6)正态分布/高斯分布;
3、大数定律和中心极限
线性代数:
1)矩阵
2)线性回归;
到此,相信大家对“Python数据抓取、分析、挖掘和分布式计算内容有哪些”有了更深的了解,不妨来实际操作一番吧!这里是恰卡编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
推荐阅读
-
python(中无效的十进制怎么解决 python怎么转换进制)
python怎么转换进制?Python执行二进制转换:1.十进制到二进制(bin)首先,让让我们看看如何将十进制转换成二进制。我...
-
python怎么清除完全相同的行(python splte如何分隔有多个相同符号的str)
pythonsplte如何分隔有多个相同符号的str?str你的string内容str_(相同的符号)执行完了以后再在相同符号的...
-
python(编程控制电脑关机 如何控制电脑关机)
如何控制电脑关机?可以在电脑的运行窗口中输入输入公式,给电脑可以设置自动关机。1.按开快捷键winr然后打开运行窗口。2.在运行窗...
-
python中的特殊标识符(python 中 标识符中可以有逗号吗)
python中标识符中可以有逗号吗?在python语言中合法的标识符是字母、数字以及_,所以我合法的标识符中肯定不能有逗号if...
-
python(excel 提取数据写入新表 python导入excel数据找不到工作簿)
python导入excel数据找不到工作簿?我可以导入数据后找不到工作,不是因为他的工作没有被转移。什么软件可提取并合并Exce...
-
python中字典定义的四种方法(python global关键字的用法详解)
pythonglobal关键字的用法详解?global标志实际上是目的是提示python讲解器,说被其修饰的变量是全局变量。这样...
-
python(array用法 python如何对两个数组做差处理)
python如何对两个数组做差处理?Python中的列表中的元素肯定不能真接相加,减。t最佳的位置的是将列表装换成Python中的...
-
python多行注释符号怎么表示
python多行注释符号怎么表示这篇文章主要介绍“python多行...
-
python支持的操作系统是什么
python支持的操作系统是什么这篇文章主要介绍“python支持...
-
python如何判断列表为空
python如何判断列表为空这篇文章主要介绍“python如何判断...