python代码库之爬虫+数据分析+数据可视化(未完)


如果有运行了报错了,要么是你自己写的时候没相关的变量,要么是我手打的函数打错了,你复制过去也错了

4.关于彩票的数据分析

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)

#做数据统计,统计每个号码出现的次数

```python
red_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() #图表展示

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() #图表展示

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() #图表展示

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

1.

用 requests 、BeautifulSoup库
like this:
在这里插入图片描述

import requests
from bs4 import BeautifulSoup

# 通过requests请求到电影票房的首页  text存的是网址
text=requests.get('https://ys.endata.cn/DataMarket/Index').text

#使用BeautifulSoup进行解析
main_page=BeautifulSoup(text,'html.parser') #用html的规则去解析text

有些网页的网址改动下这个年份也是能快速浏览当年的信息的
在这里插入图片描述

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() 返回list
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") # 这一行的数据写完后,换行
		#但是,有些内容表面上看是文本,但是是长连接,汉字后有看不见的换行符(如下图)
        #所以用.strip()  默认去掉左右两端的空白(空格、换行符、制表符)

在这里插入图片描述

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

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

import requests
from bs4 import BeautifulSoup

def 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)

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)

接下来把数据掰成两份
在这里插入图片描述
第一套处理方案:接上的代码:

#拆分类别数据
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]] #变成类似于 战争 27490
data_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')

出现这种错误一般就是某个函数的参数多了
在这里插入图片描述

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项目


在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述
重写上边的代码:(上边的那两个什么index、周杰伦函数注释掉)

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

改进一下:

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

在这里插入图片描述
在这里插入图片描述
再来点内容:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
![!](https://img-blog.csdnimg.cn/356394ea8d0a4e438320215bd7e0c79b.png)
在这里插入图片描述

在这里插入图片描述在这里插入图片描述

9.数据可视化展示

接着上个(代码整合看你们自己嗷)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
最后再改一下min和max的值(要包含传进去数的范围)
在这里插入图片描述

至此就暂告一段落啦!

预测足球比赛的结果得用线性回归

Guess you like

Origin blog.csdn.net/CSDN_YJX/article/details/121323843