爬虫+数据分析+数据可视化

  • 1.关于彩票的数据分析
  • 2.关于电影票房的数据分析
  • 3.爬取总的代码(做成函数)
    • 4.数据分析(动态饼图)主要是干flask
      • 4.11 (主要没想到第四个模块那么长)
      • 4.12新建的HTML文件,随便输入点东西
      • 5.数据可视化展示

1.关于彩票的数据分析

1.

先导入两个库,再引入数据:matplotlib做出来的图都是PNG,做不到动态响应的图。所以还得学Python可视化神器——pyecharts的超详细使用指南!

import pandas as pd #做数据处理和分析、清洗import matplotlib.pyplot as plt #用来做可视化的工具 ——>能把数据变成图表import numpy as np #做数据处理的,pandas里边就有numpy#引入数据 df=pd.read_csv('文件名带拓展名')#如果想暂时看一下,可以:print(df)#引入数据 headers=None表示第一行数据不是表头,而是变成列号了  index_col就是拿哪一列作为行的索引#df存着读取的东西df=pd.read_csv('data.csv',headers=None,index_col=0)#  .loc是拿数据 :的意思是所有行or列,这里是从第一列到第六列的所有数据red_ball=df.loc[:,1:6]print(red_ball)#做数据统计,统计每个号码出现的次数```pythonred_ball_count= pd.value_counts(red_ball.values.flatten()) #针对有多行多列的数据!!!flatten()是把二维变成一维的数据print(red_ball_count)  #这时候就会打印出一行行的数据,每行就一个数据的信息:这个数据是什么,出现了几次。前边的叫index,后边的叫values !!!# 那只有一列的平面数据的结构咋办?blue_ball_count=pd.value_counts(blue_ball) #直接传进去就行了#数据可视化fig,ax=plt.subplots(2,1) #一次创建很多个图表,这里表示将两个图表摆成两行一列的形式#我们要的图表在ax里面#画饼图 以red_ball_count的索引给饼图每一块标上表示的是哪个数的占比  radius是半径  wedgeprops是小扇形的长度,所以设置后有可能会变成一个圆环哦ax[0].pie(red_ball_count,labels=red_ball_count.index,radius=1,wedgeprops={'width':0.3})ax[1].pie(blue_ball_count,labels=blue_ball_count.index,radius=0.5,wedgeprops={'width':0.2})#但是上边的样子是两个图表分开的,如果想让两个圆环套在一起,只需要让ax[]的下标一样就可以画在同一个图表里了ax[0].pie(red_ball_count,labels=red_ball_count.index,radius=1,wedgeprops={'width':0.3})ax[0].pie(blue_ball_count,labels=blue_ball_count.index,radius=0.5,wedgeprops={'width':0.2})plt.show() #图表展示123456789101112131415161718192021222324252627282930313233343536

2.

上边的代码到最后每次打印的后会有一个空白的二维坐标系,所以咱们要去掉,怎么去掉呢??从上文数据可视化开始,不要fig、ax了,直接:

plt.pie(red_ball_count,labels=red_ball_count.index,radius=1,wedgeprops={'width':0.3})plt.pie(blue_ball_count,labels=blue_ball_count.index,radius=0.5,wedgeprops={'width':0.2})plt.show() #图表展示1234

3.

如果想弄更花的颜色,那么可以找来那些颜色的字符表达式,然后一个color列表(此列表元素都是字符,不同元素之间用逗号间隔) like this:

爬虫+数据分析+数据可视化

然后在上文紧接着的代码框里接着改:

plt.pie(red_ball_count,colors=np.random.choice(colors,len(red_ball_count)),labels=red_ball_count.index,radius=1,wedgeprops={'width':0.3})#有多少个颜色我就从colors的列表里随机选多少个颜色plt.pie(blue_ball_count,colors=np.random.choice(colors,len(red_ball_count)),labels=blue_ball_count.index,radius=0.5,wedgeprops={'width':0.2})plt.show() #图表展示12345

2.关于电影票房的数据分析

1.

用 requests 、BeautifulSoup库
like this:

爬虫+数据分析+数据可视化

import requestsfrom bs4 import BeautifulSoup# 通过requests请求到电影票房的首页  text存的是网址text=requests.get('https://ys.endata.cn/DataMarket/Index').text#使用BeautifulSoup进行解析main_page=BeautifulSoup(text,'html.parser') #用html的规则去解析text12345678

有些网页的网址改动下这个年份也是能快速浏览当年的信息的

爬虫+数据分析+数据可视化

2.

进一步拿到网页数据前,来到目标网页,鼠标右键后,点击 检查

爬虫+数据分析+数据可视化

然后找table标签,注意只有这样的IDE才能要

爬虫+数据分析+数据可视化

来,上代码:(接着上文,都在一个代码窗口)

# 找到table ,通过这 id 值来防止这个页面其他的table来干扰我们table=main_page.find('table',attrs={'id':'tbContent'})# find找的是一个标签,只返回第一个找到的  find_all找一堆标签. trs保存每一行标签#弄个文件把提取到的数据保存起来f=open('电影票房.csv',mode='a') #a表示 append追加写。因为要把之前爬的数据保留# find_all() 返回listtrs= table.find_all('tr') #一堆tr,下面把tr拿出来for tr in trs: #拿到每一个tr	lst=tr.find_all('td') # 找到每一个td	#但是第一行都是th ,也就是每列的名字(什么电影名、播放量啥的),所以咱不要	if len(lst) != 0:		for td in lst: #拿到每一个td,发现每一个td都是可以看成文本的			# print(td.text) # 拿到td标签中的文本信息,就是我们要的电影信息			f.write(td.text.strip()) #爬完一列的一个元素后			f.write(',')             #用逗号隔开		f.write("\n") # 这一行的数据写完后,换行		#但是,有些内容表面上看是文本,但是是长连接,汉字后有看不见的换行符(如下图)        #所以用.strip()  默认去掉左右两端的空白(空格、换行符、制表符)1234567891011121314151617181920

爬虫+数据分析+数据可视化

3.爬取总的代码(做成函数)

上边都是弄的一年的,也就是2008年,接下来一次性要弄很多年的
定义成一个函数就行了

import requestsfrom bs4 import BeautifulSoupdef fowm(year):	text=requests.get('https://www.cbooo.cn/year?year=%s' % year).text	main_page=BeautifulSoup(text,'html.parser') #用html的规则去解析text	table=main_page.find('table',attrs={'id':'tbContent'})	f=open('电影票房.csv',mode='a') #a表示 append追加写。因为要把之前爬的数据保留	trs= table.find_all('tr') #一堆tr,下面把tr拿出来	for tr in trs: #拿到每一个tr		lst=tr.find_all('td') # 找到每一个td		#但是第一行都是th ,也就是每列的名字(什么电影名、播放量啥的),所以咱不要		if len(lst) != 0:			for td in lst: #拿到每一个td,发现每一个td都是可以看成文本的				# print(td.text) # 拿到td标签中的文本信息,就是我们要的电影信息				f.write(td.text.strip()) #爬完一列的一个元素后				f.write(',')             #用逗号隔开			f.write("\n") # 这一行的数据写完后,换行for year in range(2008,2020):	dowm(year)123456789101112131415161718192021

4.数据分析(动态饼图)主要是干flask

代码:

import pandas as pd #pandas读取csv文件的时候是以逗号做分隔符data=pd.read_csv('电影票房.csv',header=None) #第一行不做列名print(data)# 从data中拿到1,2列的数据data=data.loc[:,[1,2]] #第一列和第二列,如果是[1:3],则是从第一列到第三列print(data)12345678

接下来把数据掰成两份

爬虫+数据分析+数据可视化

第一套处理方案:接上的代码:

#拆分类别数据def func1(item):  #第一套处理方案	#把每一个类别item进行处理	return item.split('/')[0] #通过这 / 去切。 比如 魔幻/动作 ,切完变成:魔幻,动作    然后返回第零个,就是魔幻,动作不要了def func2(item):	if '/' in item:		return item.split('/')[1]	else:		return 'dsb'		data[3]=data[1].map(func1)print(data) #如果是因为读取的文件里有不合适的数据,那就去到文件里删掉那一行哈哈哈#但是上文打印的结果会有dsb ,所以再拆分吼吼吼data_1=data.loc[:,[3,2]] #变成类似于 战争 27490data_2=data.loc[:,[4,2]] #变成       dsb 17641  ,但是也有 惊悚 12046#接下来就是把 dsb干掉,然后把俩合在一起data_2=data.loc[data_2[4] != 'dsb']data_2=data_2.rename(colums={4:3}) #注意类型的问题 把四号列名改成三号列名data= data_1.append(data_2) #把俩合在一起#计算每一种类型的票房平均值data3=data.groupby(3).mean().round(2)  #通过第三列做分组,把相同类型的影片放在一起。保留小数点后两位#把处理之后的数据保存在文件中data3.to_csv('后天要用到的数据.csv')12345678910111213141516171819202122232425262728

出现这种错误一般就是某个函数的参数多了

爬虫+数据分析+数据可视化

4.11 (主要没想到第四个模块那么长)

我们接下来要做的是一个web应用程序
先上代码:

from flask import Flask,render_template,request  #都不多余#创建应用程序app=Flask(__name__)#写一个函数来处理浏览器发送过来的请求#路由,你通过浏览器访问过来的请求到底交给谁处理@app.route('/') #当访问到127.0.0.1:5000/  事3自动运行函数def index():  #这地方不是函数名,所以起什么名字随便	return '你好啊,我叫赛利亚!' #返回的数据:响应@app.route('/jay')def 周杰伦():	return 'wohenxihuanzhoujielun'#引入模板:就是引入HTML  创建一个名为 hello.html的文件看下边 if __name__ == '__main__':  #固定的写法,程序 的入口	app.run() #启动应用程序:启动一个flask项目123456789101112131415161718192021

爬虫+数据分析+数据可视化

爬虫+数据分析+数据可视化

4.12新建的HTML文件,随便输入点东西

爬虫+数据分析+数据可视化

爬虫+数据分析+数据可视化

重写上边的代码:(上边的那两个什么index、周杰伦函数注释掉)

@app.route('/') def index():  	return render_template('hello.html')    #此时会自动找templates(上边创建的)文件夹里面的 hello.html文件    #这个路由的功能是把hello.html返回给浏览器12345

改进一下:

#把一个变量发送到页面@app.route('/') def index():  	S='你好,我不叫赛利亚了'	return render_template('hello.html',jay=S) #这样,就把S传给网页了,jay是随便起的变量名12345

爬虫+数据分析+数据可视化

爬虫+数据分析+数据可视化

再来点内容:

爬虫+数据分析+数据可视化

爬虫+数据分析+数据可视化

爬虫+数据分析+数据可视化

爬虫+数据分析+数据可视化

爬虫+数据分析+数据可视化

![!](https://img-blog.csdnimg.cn/356394ea8d0a4e438320215bd7e0c79b.png)

爬虫+数据分析+数据可视化

爬虫+数据分析+数据可视化

爬虫+数据分析+数据可视化

5.数据可视化展示

接着上个(代码整合看你们自己嗷)

爬虫+数据分析+数据可视化

爬虫+数据分析+数据可视化

爬虫+数据分析+数据可视化

爬虫+数据分析+数据可视化

爬虫+数据分析+数据可视化

最后再改一下min和max的值(要包含传进去数的范围)

爬虫+数据分析+数据可视化

至此就暂告一段落啦!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/107640.html

(0)

相关推荐