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马克斯&middot;维利格(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数据抓取、分析、挖掘和分布式计算内容有哪些”有了更深的了解,不妨来实际操作一番吧!这里是恰卡编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

发布于 2022-01-17 22:01:56
收藏
分享
海报
0 条评论
45
上一篇:Python面试题陷阱实例分析 下一篇:Python基础知识实例分析
目录

    推荐阅读

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码