- 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