2019-12-02 10:54:40 xazeal 阅读数 71
  • Python-数据

    Python数据库编程视频教程,数据库是MySQL,讲解Python链接MySQL数据库,并对数据库进行增删改查操作。

    10833 人正在学习 去看看 尹成

树莓派python工业数据采集系统


*DAQM-4206–>CBT-1009—>树莓派

#!/usr/bin/env python
# -*- coding: utf_8 -*-
# DAQM-4206 测试程序,树莓派4B/3B....,CBT-1009
import serial 
import modbus_tk
import modbus_tk.defines as cst
from modbus_tk import modbus_rtu
import time

def sleeptime(hour, min, sec):
    return hour * 3600 + min * 60 + sec
second = sleeptime(0, 0, 1)
master = modbus_rtu.RtuMaster(
    			serial.Serial('/dev/ttyUSB0', baudrate=9600, 	

			bytesize=8, parity='N', stopbits=1,xonxoff=0)
			)
master.set_timeout(2.0)
master.set_verbose(True)

while True:

    	data = master.execute(1, cst.READ_HOLDING_REGISTERS, 256, 8)  
    	time.sleep(second)
	index = 0
	temp= [0 for i in range(len(data ))]
	for index in range(len(data )):
	    temp[index ] = data[index ]/4095.0*20.0
	print(temp)    #打印结果




DAQM-4206采集工业4~20MA信号,
CBT-1009是隔离型USB转485


输出结果:


[15.789987789987789, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[15.789987789987789, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[15.789987789987789, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[15.789987789987789, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[15.789987789987789, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[15.789987789987789, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[15.794871794871794, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[15.789987789987789, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[15.789987789987789, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[15.789987789987789, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[15.789987789987789, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[15.789987789987789, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[15.794871794871794, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[15.789987789987789, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[15.789987789987789, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[15.789987789987789, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[15.789987789987789, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[15.789987789987789, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[15.794871794871794, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[15.794871794871794, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[15.794871794871794, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[15.794871794871794, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[15.794871794871794, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]


2017-02-09 20:02:55 FromCybertron 阅读数 3311
  • Python-数据

    Python数据库编程视频教程,数据库是MySQL,讲解Python链接MySQL数据库,并对数据库进行增删改查操作。

    10833 人正在学习 去看看 尹成

        工业大数据,伴随着“大数据”、“云计算”、“物联网”、“人工智能”等概念的兴起而逐渐火了起来。随之,工业界、投资界、学术界,各界均把目光投向“工业大数据”,国外火,国内也火了起来。但“工业大数据”毕竟不是“商业大数据”,也不是“金融大数据”,似乎也不是纯粹的“互联网大数据”,“工业大数据”分析的主流方法和思路是什么?本文就浅谈一下。本文所谈到的“工业大数据”,主要关注的是从各类工业设备的各种监测数据、运行数据以及其他数据中挖掘价值。

(一)“华山论剑”之工业数据挖掘流派

       首先从“华山论剑”之工业数据流派说起。利用工业设备数据来获取信息,其实由来已久,只不过,很多年之前,还不具备大数据的软硬件条件,那时候,“工业大数据”的一个分支“故障诊断”就已经出现。当年故障诊断中的两大流派,也演变成了今天“工业大数据”流派中最大的两大分支,甚至今天开展“工业大数据”业务的各类公司企业,也基本由这两大流派衍生出来。

       流派一:基于故障机理分析的“工业大数据”挖掘

       该流派进行数据分析的基础和依据是“因果关系”,也所谓“种瓜得瓜种豆得豆”。其理论基础之一是“振动学”,由于各类机械设备一般是动部件,因此,设备运行时总会产生各类数据,最典型的是振动信号。由于设备发生故障时,设备中部件的结构发生改变,因此,激发的振动形式也会不同。通过分析何种故障激发何种振动,然后分别从各个角度观察信号形态,从而判断出设备的健康状态、故障模式等信息。

       从“医学”角度讲,这类方法的思路更像是“西医”,及基于解剖学,对各个器官有详细了解,明确各个器官病变会引发的外在特征,所以,看病可以直接告诉患者具体到哪个器官出了问题。类似的,“基于故障机理分析”的诊断,或者是工业数据挖掘,在开展工作之前,一定是对于被监测部件结构、振动方式、故障表现等十分了解,最为有代表性的概念就是“轴承故障特征频率”。

       由该流派衍生的“工业大数据”分析企业,主要是传统的“故障诊断、状态监测”类企业,或者从事“测控工程”类型的企业。这些企业一般是某一类部件或者设备的“行家”,对某一类设备的结构等了如指掌,因此,对这些设备的监测数据也十分熟悉,业务范围也是集中于“某类特定设备”,或“某些特定行业”。

       流派二:基于数据驱动的“工业大数据”挖掘

       该流派进行数据分析的基础是“模式识别”,所有的分类依据,全部是基于数据本身。其主要思路是把设备看成一个黑盒子,只需要知道各类故障模式的样本数据即可。剩下的事情就是从各类模式的数据中提取有效特征,最终利用特征进行模式分类即可。也就是说,典型的思路是:获取数据-特征提取-模式识别。通过该思路进行工业大数据挖掘,甚至不需要知道设备的组成和结构。开玩笑说:数据驱动流派的侠客,都不知道啥叫“轴承故障特征频率”。

       从医学角度讲,这类方法更像是“中医”。很多老中医,并不懂什么“解剖学”、“病理学”,仅仅通过“望闻问切”,即可知道人大概出了什么问题。所以,从本质讲,就是通过人的各种外在表征,来决定人到底出了什么问题。类似的,从数据驱动角度讲,做数据驱动的侠客,更偏向于数据处理科学家,而不是各个行业的专家,对各类设备部件的结构称不上是“精通”。

       由该流派衍生的“工业大数据”分析企业,主要是从事“互联网大数据”分析的企业,像“工业大数据”、“物联网”转型的一些企业,也就是说,这类企业,或多或少的带有“互联网基因”,相对而言,这类企业对于“大数据分析”、“云计算”、“人工智能”等手段运用的也比较娴熟。

(二)“武林高手,各显神通”各流派之看家绝技

       虽说是“华山论剑”,但各个流派都有自己的看家绝技。展现各家绝技的时候到了。

       基于故障机理分析的“工业大数据”挖掘绝技:明察秋毫,严丝合缝。针对某特定设备,该方法的诊断准确率极高,可以可靠的支持工业企业的运行维护。通过查看数据,或基于各种分析工具查看数据,可以“十分准确”的确定设备出现故障的位置和原因。其针对某种特定设备或部件的诊断准确性,是“数据驱动”门派望尘莫及的。

       基于数据驱动的“工业大数据”挖掘绝技:有容乃大,海纳百川。再说说基于故障机理的分析方法,由于需要明确各种故障的原因和信号激发形式,一旦设备过于复杂,或者针对某种大型系统,各种信号产生“组合爆炸”,此时再去一一对应故障原因,就心有余而力不足了。但这个时候,“数据驱动”的优势就显示出来了,反正是把系统或设备看成了“黑盒子”,大黑盒子,小黑盒子,都是黑盒子,所以相对而言,“数据驱动”流派可以应对各类复杂系统和设备,可谓“有容乃大、海纳百川”。

(三)“融合大法”之看未来

       哪怕是在医学界,“中西医结合”都是一种极好的思路,所谓“融合大法”。类似的,看未来发展趋势,“工业大数据”分析的流派融合也是未来发展的大趋势,这也是“工业大数据”分析与其他行业“大数据”分析的不同之处。

       就开展基于“故障机理”进行“工业大数据”分析的企业而言,尝试引入新的技术,即“大(大数据)智(人工智能)云(云计算)物(物联网)移(移动通信)”,可以有效提升业务范围,同时将传统技术更加智能化,从而降低技术运营成本。

       就开展基于“数据驱动”的“互联网基因”企业而言,由于“工业大数据”分析不同于其他行业,工业对于“结论”的准确性要求极高,有时候一点点误差就会造成很大损失,因此,将工业设备和对象进行有效分类和抽象,选取出典型的设备类别,进行“机理分析”和“解剖”,进一步提高“结论”有效性,将使得业务工程化水平更上一层楼。

       就“流派融合,相互交流”角度而言,两类思路的深度融合,在未来将是“工业大数据”分析的“里程碑”式发展机遇,如何做好深度融合,高校和研究所就该多做努力和探索,最终和企业实现“产学研结合”,推动我国“工业大数据”分析技术和水平的发展和提升。

2017-01-03 10:22:05 cjs68 阅读数 1678
  • Python-数据

    Python数据库编程视频教程,数据库是MySQL,讲解Python链接MySQL数据库,并对数据库进行增删改查操作。

    10833 人正在学习 去看看 尹成

由于毕设做的是一个校园新闻手机客户端,所以思路是这样的:
1、获取到合肥工业大学主页的新闻数据,保存到本地数据库中。
2、编写服务器端提供http链接,返回JSON数据给客户端解析数据。
3、可能需要每天爬取新闻数据更新到数据库中,其次服务器端可能需要个管理员界面,可以发布新闻等操作。

今天要做的就是先用python爬虫爬取合肥工业大学新闻主页的新闻数据,并保存到MySQL数据库中去。工大新闻主页地址是http://news.hfut.edu.cn/,而且工大的新闻是分类的,我要爬取的是“工大要闻”、“通知公告”、“报告讲座”等等。
这里写图片描述

1、找到需要访问的目标地址

先从“工大要闻”爬取开始,打开工大要闻页面http://news.hfut.edu.cn/list-1-1.html,要爬取的是如下图所示的红色框中的内容:
这里写图片描述

我使用的是Chrome浏览器,右键查看网页源代码,找到新闻列表所在的代码部分,找到对应的html标签,找到如下:

<!--main-->
<div class="container row main in2">
    <div class=" col-lg-8 " style="padding-top: 15px;">
        <h3 class="title-1"><span class="glyphicon glyphicon-stop" style="font-size: 10px; color:#183e50;text-indent: 0px;top: -1px;padding-right: 10px;"></span>工大要闻</h3>

        <ul class="content list pushlist lh30 ">
                                    <li><span class="rt">2016-12-31</span><a href="/show-1-45626-1.html" title="蓝图绘就创新为先    师生同心齐创一流"  target="_blank" style="" >蓝图绘就创新为先    师生同心齐创一流</a></li>
                                    <li><span class="rt">2016-12-31</span><a href="/show-1-45625-1.html" title="学校八届三次教代会暨十六届三次工代会召开"  target="_blank" style="" >学校八届三次教代会暨十六届三次工代会召开</a></li>
                                    <li><span class="rt">2017-01-01</span><a href="/show-1-45627-1.html" title="学校召开安徽省出席党的十九大代表推选工作布置会"  target="_blank" style="" >学校召开安徽省出席党的十九大代表推选工作布置会</a></li>
                                    <li><span class="rt">2016-12-30</span><a href="/show-1-45445-1.html" title="火箭军“通用车辆装备维修高技术”理论培训班开训动员会顺利召开"  target="_blank" style="" >火箭军“通用车辆装备维修高技术”理论培训班开训动员会顺利召开</a></li>
                                    <li><span class="rt">2016-12-30</span><a href="/show-1-45506-1.html" title="火箭军机关检查调研驻校选培办"  target="_blank" style="" >火箭军机关检查调研驻校选培办</a></li>
            <li class="bk20 hr"></li>                        <li><span class="rt">2016-12-30</span><a href="/show-1-45613-1.html" title="中国兵器工业214所来校开展科技合作洽谈"  target="_blank" style="" >中国兵器工业214所来校开展科技合作洽谈</a></li>
                                    <li><span class="rt">2016-12-30</span><a href="/show-1-45610-1.html" title="安徽省2016年科学道德和学风建设宣讲教育暨杨善林院士报告会在我校举行"  target="_blank" style="" >安徽省2016年科学道德和学风建设宣讲教育暨杨善林院士报告会在我校举行</a></li>
                                    <li><span class="rt">2016-12-29</span><a href="/show-1-45583-1.html" title="合肥工业大学2016年十大新闻评选活动启动"  target="_blank" style="" >合肥工业大学2016年十大新闻评选活动启动</a></li>
                                    <li><span class="rt">2016-12-28</span><a href="/show-1-45565-1.html" title="安徽省教育厅督察组来我校进行安全生产督察"  target="_blank" style="" >安徽省教育厅督察组来我校进行安全生产督察</a></li>
                                    <li><span class="rt">2016-12-28</span><a href="/show-1-45571-1.html" title="首届合肥工业大学金融投资行业校友论坛在北京举行"  target="_blank" style="" >首届合肥工业大学金融投资行业校友论坛在北京举行</a></li>
            <li class="bk20 hr"></li>                        <li><span class="rt">2016-12-28</span><a href="/show-1-45560-1.html" title="上海校友会汽车专业委员会2016年度联谊会在沪举行"  target="_blank" style="" >上海校友会汽车专业委员会2016年度联谊会在沪举行</a></li>
                                    <li><span class="rt">2016-12-27</span><a href="/show-1-45558-1.html" title="教育部体卫艺司来校调研国防教育工作"  target="_blank" style="" >教育部体卫艺司来校调研国防教育工作</a></li>
                                    <li><span class="rt">2016-12-27</span><a href="/show-1-45552-1.html" title="中国工程院院士李培根来我校作学术报告"  target="_blank" style="" >中国工程院院士李培根来我校作学术报告</a></li>
                                    <li><span class="rt">2016-12-27</span><a href="/show-1-45548-1.html" title="2016年青年教师教学基本功比赛圆满结束"  target="_blank" style="" >2016年青年教师教学基本功比赛圆满结束</a></li>
                                    <li><span class="rt">2016-12-26</span><a href="/show-1-45525-1.html" title="学校召开安全生产大检查工作布置会"  target="_blank" style="" >学校召开安全生产大检查工作布置会</a></li>
            <li class="bk20 hr"></li>                        <li><span class="rt">2016-12-26</span><a href="/show-1-45519-1.html" title="我校 “可再生能源接入电网技术国家地方联合工程实验室” 获批"  target="_blank" style="" >我校 “可再生能源接入电网技术国家地方联合工程实验室” 获批</a></li>
                                    <li><span class="rt">2016-12-24</span><a href="/show-1-45513-1.html" title="国内首台“ 氦三极化靶”在我校研制成功"  target="_blank" style="" >国内首台“ 氦三极化靶”在我校研制成功</a></li>
                                    <li><span class="rt">2016-12-23</span><a href="/show-1-45486-1.html" title="学校召开2016年校情通报会"  target="_blank" style="" >学校召开2016年校情通报会</a></li>
                                    <li><span class="rt">2016-12-23</span><a href="/show-1-45497-1.html" title="学校2016年研究生学术交流年会圆满落幕"  target="_blank" style="" >学校2016年研究生学术交流年会圆满落幕</a></li>
                                    <li><span class="rt">2016-12-22</span><a href="/show-1-45453-1.html" title="我校在全国高校系列网络文化评比中获佳绩"  target="_blank" style="" >我校在全国高校系列网络文化评比中获佳绩</a></li>
            <li class="bk20 hr"></li>                        <li><span class="rt">2016-12-21</span><a href="/show-1-45425-1.html" title="学校召开2017年度国家自然科学基金申报动员大会"  target="_blank" style="" >学校召开2017年度国家自然科学基金申报动员大会</a></li>
                                    <li><span class="rt">2016-12-21</span><a href="/show-1-45286-1.html" title="资环学院一研究成果在南海岛屿生态地质学研究取得新进展"  target="_blank" style="" >资环学院一研究成果在南海岛屿生态地质学研究取得新进展</a></li>
                                    <li><span class="rt">2016-12-20</span><a href="/show-1-45418-1.html" title="我校举行“家风建设”名家书法邀请展暨第30届师生书法展"  target="_blank" style="" >我校举行“家风建设”名家书法邀请展暨第30届师生书法展</a></li>
                                    <li><span class="rt">2016-12-20</span><a href="/show-1-45396-1.html" title="我校在第十一届安徽省大学生职业规划设计大赛暨大学生创业大赛中获得佳绩"  target="_blank" style="" >我校在第十一届安徽省大学生职业规划设计大赛暨大学生创业大赛中获得佳绩</a></li>
                                    <li><span class="rt">2016-12-20</span><a href="/show-1-45392-1.html" title="我校新增国家“智慧养老国际科技合作基地”"  target="_blank" style="" >我校新增国家“智慧养老国际科技合作基地”</a></li>
            <li class="bk20 hr"></li>                            
            <div class="bk15 "></div>

        </ul>

2、如何获取网页源代码

浏览器上面我们可以右键查看网页源代码,在python中我们可以模拟网页请求访问网页,获取源代码。
加上headers到请求中去可以伪装成浏览器去访问网页,否则爬虫访问的太快,网页会认为这不是正常的访问,你的访问速度会很慢或者你的访问被禁止等等。

# 得到页面全部内容
def askURL(url):
    user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
    headers = {'User-Agent': user_agent}
    try:
        request = urllib2.Request(url, headers=headers)  # 发送请求
        response = urllib2.urlopen(request)  # 取得响应
        html = response.read()  # 获取网页内容
        # print html
        html = html.encode('utf-8', 'ignore')  # 将unicode编码转为utf-8编码
    except urllib2.URLError, e:
        if hasattr(e, "code"):
            print e.code
            html = ""
        if hasattr(e, "reason"):
            print e.reason
            html = ""
    return html

3、找到一页中所有的新闻链接

每一个新闻都保存在一个标签中,如下:

<li><span class="rt">2016-12-31</span><a href="/show-1-45626-1.html" title="蓝图绘就创新为先    师生同心齐创一流"  target="_blank" style="" >蓝图绘就创新为先    师生同心齐创一流</a></li>

获取所有的新闻链接的方式如下:

# 得到正文的URL,读取正文,并保存
def getURL(nurl):
    text = ''
    html = askURL(nurl)
    # print html
    findDiv = re.compile(r'<li><span class="rt">(.*?)  target="_blank" style="" >', re.S)
    findTime = re.compile(r'(.*)</span>')
    findTitle = re.compile(r'title="(.*)"')
    findURL = re.compile(r'<a href="(.*)" title')
    # findLabel = re.compile(r'<h3.*?</span>(.*?)</h3>')
    # fileNum = 0
    # list = re.findall(findDiv, html)
    # print list[0]x
    # labelName = re.findall(findLabel, html)[0]
    for info in re.findall(findDiv, html):
        # print info
        time = re.findall(findTime, info)[0]
        # print time
        title = re.findall(findTitle, info)[0]
        url = re.findall(findURL, info)[0]  # 获取新闻正文的链接
        url = 'http://news.hfut.edu.cn' + url
        print time + ' ' + title + ' ' + url
        try:
            text = getContent(url)
            insertData(text['date'], text['title'], text['newsContent'], text['writer'], text['photoer'],
                       text['editor'], url)
            # text = {'title': '', 'date': '', 'writer': '', 'photoer': '', 'editor': '', 'newsContent': ''}
        except urllib2.URLError, e:
            if hasattr(e, "reason"):
                print "抓取错误" + url, e.reason
        except Exception, e:
            print "抓取错误" + url, e

传入的参数nurl是每一页新闻的网页地址,每一页的地址都有如下规律:
第一页:http://news.hfut.edu.cn/list-1-1.html
第二页:http://news.hfut.edu.cn/list-1-2.html
……
所以我们要提取所有的页面的工大要闻的地址就在“http://news.hfut.edu.cn/list-1-”后面加上n.html就可以了,而上面也获取到了每一页新闻的所有新闻的链接和新闻标题。

4、获取一个新闻的主要内容,包括标题、正文、作者、编辑等

另外编写一个方法获取一个新闻的详细内容,举个例子以下面这个新闻为例:http://news.hfut.edu.cn/show-1-45408-1.html
需要获取红色框中的内容:
这里写图片描述
这里写图片描述
以及最后面的新闻照片和作者、编辑等信息。右键查看网页源代码,找到正文内容,提取关键的html标签。
找到源码如下:

<div id="Article">
            <h2>宣城校区召开第一届一次教代会暨第一届一次工代会<br />
                <span class="t">发布日期:2016-12-20&nbsp;&nbsp;字号:<a href="javascript:doZoom(18)"><span class="f18"></span></a> <a href="javascript:doZoom(16)"><span class="f16"></span></a> <a href="javascript:doZoom(14)"><span class="f14"></span></a>&nbsp;&nbsp;【<a href="/print-1-45408-1.html" target="_blank">打印</a></span></h2>

            <div id="artibody" class="content f16">       

                <p style="TEXT-ALIGN: justify; TEXT-INDENT: 2em">12月15至16日,宣城校区第一届一次教职工代表大会暨第一届一次工会会员代表大会在宣城校区行政楼102报告厅召开。副校长、宣城校区党委书记、管委会主任吴玉程,校党委副书记、纪委书记陆林及宣城校区管委会和有关部门负责同志出席开幕式,宣城校区76名教职工正式代表与10名列席代表参加会议。</p><p style="TEXT-ALIGN: justify; TEXT-INDENT: 2em">吴玉程在开幕词中介绍了大会召开的契机和意义。吴玉程指出,大会将全面总结宣城校区创办四年多来取得的成绩、存在的问题和困难,审慎谋划“十三五”发展规划,紧紧围绕创建高水平、创新型、有特色、环境优美的一流大学校区的目标,进一步科学定位,理清发展思路,促进健康、协调、可持续发展。吴玉程希望,与会代表要以主人翁的姿态和认真负责的精神,认真听取和讨论大会的各项报告,认真完成大会的每一项议程,为宣城校区的建设、改革和发展积极建言献策,把这次大会开成一次承上启下、继往开来的大会,团结奋进、务实创新的大会,凝心聚力、科学发展的大会。</p><p style="TEXT-ALIGN: justify; TEXT-INDENT: 2em">陆林在讲话中代表校党委对大会的召开表示热烈的祝贺,对与会代表表示崇高的敬意。陆林指出,在学校党委、行政领导下,宣城校区工会在参与校区民主决策与管理、激发和调动职工的工作热情和积极性、凝聚人心和营造团结和谐的工作氛围、服务职工和维护职工的合法权益等方面发挥了重要作用。陆林强调,宣城校区学生精神面貌好,学习劲头足,在各类学科竞赛中成绩喜人,希望宣城校区能够以此次大会为起点和契机,发挥好二级教代会的智力支持和民主监督的重要作用,团结带领校区教职工进一步凝心聚力、团结拼搏,力争使宣城校区的各项工作再上一个新台阶。</p><p style="TEXT-ALIGN: justify; TEXT-INDENT: 2em">宣城校区党委副书记、管委会常务副主任蒋传东作了题为《增强信心、凝心聚力、攻坚克难、改革创新,为建设高水平、创新型、有特色、环境优美的一流校区而奋斗》的工作报告。报告总结回顾了宣城校区管委会四年多来取得的成绩与存在的问题,强调了“十三五”发展规划的主要目标。</p><p style="TEXT-ALIGN: justify; TEXT-INDENT: 2em">大会听取了《宣城校区工会工作报告》《宣城校区财务工作报告》《宣城校区教职工代表大会实施细则》《宣城校区教职代会执委会规程》《宣城校区2016年度考核工作的实施办法》。</p><p style="TEXT-ALIGN: justify; TEXT-INDENT: 2em">16日上午,11个代表团围绕工作报告进行了分组讨论,大家坦诚交流,各抒己见。随后,主席团会议在宣城校区行政楼221会议室召开。各代表团分别向主席团汇报了讨论、审议情况。主席团会议研讨了《关于宣城校区管委会工作报告的决议(草案)》等。</p><p style="TEXT-ALIGN: justify; TEXT-INDENT: 2em">在当天下午举行的大会闭幕式上,与会代表表决通过了《关于宣城校区管委会工作报告的决议》《关于宣城校区工会工作报告的决议》《关于宣城校区财务工作报告的决议》《关于批准&lt;宣城校区教职工代表大会实施细则&gt;&lt;宣城校区教职工代表大会执行委员会工作规程&gt;的决议》《关于批准&lt;宣城校区2016年度考核工作的实施办法&gt;的决议》。会议通过了《宣城校区教职代会执委会选举产生办法》《宣城校区工会委员会选举产生办法》,通过总监票人、监票人和计票人名单。随后,与会代表选举产生了宣城校区教职代会执委会,换届选举产生了宣城校区工会委员会。</p><p style="TEXT-ALIGN: justify; TEXT-INDENT: 2em">蒋传东在闭幕词中表示,校区党委将致力把握校区建设发展和稳定的大局,把每一个教职员工的利益维护好,改善办学条件,努力营造和谐氛围,不断提高服务师生水平,促进宣城校区向更高水平发展。希望各位代表不仅要把代表当作一种身份,更要当成一种责任,做好各项规章、制度、政策的建设者、完善者和宣传者、维护者;希望新当选的工会委员会努力工作,创造业绩,心系教职员工,切实做好服务工作,创新教职工文体活动方式,办好校区“职工之家”,使宣城校区永葆生机和活力;希望校区全体教职工群策群力、与时俱进、开拓创新,为宣城校区更加美好的明天而努力奋斗。</p><p style="TEXT-ALIGN: justify; TEXT-INDENT: 2em">宣城校区第一届一次教职工代表大会暨第一届一次工会会员代表大会的召开,不仅标志着校区向规范办学制度迈出了重要一步,同时也是校区在推进民主办学、民主管理进程中的历史性跨越,对于宣城校区未来的发展建设具有十分重要的意义。</p><p style="TEXT-ALIGN: justify; TEXT-INDENT: 2em">&nbsp;</p><p style="TEXT-ALIGN: center"><img title="20161220140336666058.png" alt="宣城校区教代会.png" src="/uploadfile/image/20161220/20161220140336666058.png"/></p><p><?xml:namespace prefix="o" ns="urn:schemas-microsoft-com:office:office"><o:p>&nbsp;</o:p></?xml:namespace></p>                <div class="bk10"></div>

                <div style=" text-align:right;">
                    (徐姗姗/文&nbsp;&nbsp;余刘琅/图)&nbsp;&nbsp;<br />
                                    </div>
                <div class="bk10"></div>
                                                <div class="content_editors" style="text-align:right;">编辑:周慧</div>
                                <!--内容关联投票-->
                            </div>

获取新闻主体内容的方法如下,参数url传入新闻的链接,使用键值对的方式存储获取到的标题、日期、作者、摄影、编辑以及新闻内容,由于有的时候这些可能不存在摄影或者其他的,所以做一下判空处理。

def getContent(url):
    html = askURL(url)
    if (html != ""):
        newsContent = ''
        output = {'title': '', 'date': '', 'writer': '', 'photoer': '', 'editor': '', 'newsContent': ''}
        # 找到新闻标题
        title = re.compile(r'<h2>'r'(.*)<br />')
        titleList = re.findall(title, html)
        if (titleList > 0):
            output['title'] = titleList[0]
        # 找到新闻发布日期
        date = re.compile(r'<span class="t">发布日期:'r'(.*)&nbsp;&nbsp;字号:')
        output['date'] = re.findall(date, html)[0]
        # 找到新闻作者
        writer = re.compile(r'('r'(.*)/文')
        writerList = re.findall(writer, html)
        if (len(writerList) > 0):
            output['writer'] = writerList[0]
        # 拍照作者
        photoer = re.compile(r'&nbsp;&nbsp;'r'(.*)/图)')
        photoerList = re.findall(photoer, html)
        if (len(photoerList) > 0):
            output['photoer'] = photoerList[0]
        # 文章编辑
        editor = re.compile(r'编辑:'r'(.*)</div>')
        editorList = re.findall(editor, html)
        # print 'editor大小='+editorList
        if (len(editorList) > 0):
            output['editor'] = editorList[0]
        # 找到新闻主体所在的标签
        findDiv = re.compile(r'<div id="artibody" class="content f16">'
                             r'(.*)<div style=" text-align:right;">', re.S)
        div = re.findall(findDiv, html)
        if len(div) != 0:
            content = div[0]
            # print content
            newsContent = re.sub(r'<p.*?>', '', content)  # 去掉段落开头的<p>标签
            if newsContent.find('<img') > 0:
                newsContent = re.sub(r'<img.*?src="', '', newsContent)
                newsContent = re.sub(r'jpg".*?/>', 'jpg', newsContent)
                newsContent = re.sub(r'</p>', '\n', newsContent)  # 取出掉段落末尾的</p>标签
            labels = re.compile(r'<.*?>', re.S)  # 去除文章中的标签
            newsContent = re.sub(labels, '', newsContent)
            newsContent = re.sub(r'&nbsp;', '', newsContent)
            # print newsContent
            output['newsContent'] = newsContent
        return output
    return ""

5、最后数据拿到了就是存放在数据库了

# 保存数据到数据库
# SQL 插入语句
def insertData(date, title, content, writer, photoer, editor, url):
    sql = """INSERT INTO mainNews(date, title, content, writer, photoer, editor, url)
        VALUES (%s, %s, %s, %s, %s, %s, %s)"""
    print '准备插入数据'
    try:
        # 执行sql语句
        cursor.execute(sql, (date, title, content, writer, photoer, editor, url))
        # 提交到数据库执行
        db.commit()
        print '插入成功'

    except:  # Rollback in case there is any error
        print '插入失败'
        db.rollback()  # 关闭数据库连接

注意一定要统一编码方式“utf-8”,python最头痛的就是乱码问题了,加上现在网页编写有的还是“gb2312”,所以做好入坑准备吧。
最后附上“工大要闻”共100页的数据截图
这里写图片描述
附上源代码:

# -*- coding: utf-8 -*-
import os
import re
import urllib2
import sys
import MySQLdb

reload(sys)
sys.setdefaultencoding('utf8')

# 打开数据库连接
db = MySQLdb.connect("localhost", "root", "", "hfutnews", charset='utf8')

# 使用cursor()方法获取操作游标
cursor = db.cursor()


# 得到页面全部内容
def askURL(url):
    user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
    headers = {'User-Agent': user_agent}
    try:
        request = urllib2.Request(url, headers=headers)  # 发送请求
        response = urllib2.urlopen(request)  # 取得响应
        html = response.read()  # 获取网页内容
        # print html
        html = html.encode('utf-8', 'ignore')  # 将unicode编码转为utf-8编码
    except urllib2.URLError, e:
        if hasattr(e, "code"):
            print e.code
            html = ""
        if hasattr(e, "reason"):
            print e.reason
            html = ""
    return html


# 得到正文
def getContent(url):
    html = askURL(url)
    if (html != ""):
        newsContent = ''
        output = {'title': '', 'date': '', 'writer': '', 'photoer': '', 'editor': '', 'newsContent': ''}
        # 找到新闻标题
        title = re.compile(r'<h2>'r'(.*)<br />')
        titleList = re.findall(title, html)
        if (titleList > 0):
            output['title'] = titleList[0]
        # 找到新闻发布日期
        date = re.compile(r'<span class="t">发布日期:'r'(.*)&nbsp;&nbsp;字号:')
        output['date'] = re.findall(date, html)[0]
        # 找到新闻作者
        writer = re.compile(r'('r'(.*)/文')
        writerList = re.findall(writer, html)
        if (len(writerList) > 0):
            output['writer'] = writerList[0]
        # 拍照作者
        photoer = re.compile(r'&nbsp;&nbsp;'r'(.*)/图)')
        photoerList = re.findall(photoer, html)
        if (len(photoerList) > 0):
            output['photoer'] = photoerList[0]
        # 文章编辑
        editor = re.compile(r'编辑:'r'(.*)</div>')
        editorList = re.findall(editor, html)
        # print 'editor大小='+editorList
        if (len(editorList) > 0):
            output['editor'] = editorList[0]
        # 找到新闻主体所在的标签
        findDiv = re.compile(r'<div id="artibody" class="content f16">'
                             r'(.*)<div style=" text-align:right;">', re.S)
        div = re.findall(findDiv, html)
        if len(div) != 0:
            content = div[0]
            # print content
            newsContent = re.sub(r'<p.*?>', '', content)  # 去掉段落开头的<p>标签
            if newsContent.find('<img') > 0:
                newsContent = re.sub(r'<img.*?src="', '', newsContent)
                newsContent = re.sub(r'jpg".*?/>', 'jpg', newsContent)
                newsContent = re.sub(r'</p>', '\n', newsContent)  # 取出掉段落末尾的</p>标签
            labels = re.compile(r'<.*?>', re.S)  # 去除文章中的标签
            newsContent = re.sub(labels, '', newsContent)
            newsContent = re.sub(r'&nbsp;', '', newsContent)
            # print newsContent
            output['newsContent'] = newsContent
        return output
    return ""


# 根据类别按顺序命名文件
def saveFile(labelName, date, fileNum):
    dirname = "news"
    # 若目录不存在,就新建
    if (not os.path.exists(dirname)):
        os.mkdir(dirname)
    labelName1 = labelName.encode('gbk', 'ignore')
    labelpath = dirname + '\\' + labelName1
    if (not os.path.exists(labelpath)):
        os.mkdir(labelpath)
    path = labelpath + "\\" + date + "-0" + str(fileNum) + ".txt"  # w文本保存路径
    printPath = dirname + "\\" + labelName.encode('utf-8', 'ignore') + "\\" + date + "-0" + str(
        fileNum) + ".txt"  # w文本保存路径
    print "正在下载" + printPath
    # path=path.encode('gbk','utf-8')#转换编码
    f = open(path, 'w+')
    return f


# 保存数据到数据库
# SQL 插入语句
def insertData(date, title, content, writer, photoer, editor, url):
    sql = """INSERT INTO mainNews(date, title, content, writer, photoer, editor, url)
        VALUES (%s, %s, %s, %s, %s, %s, %s)"""
    print '准备插入数据'
    try:
        # 执行sql语句
        cursor.execute(sql, (date, title, content, writer, photoer, editor, url))
        # 提交到数据库执行
        db.commit()
        print '插入成功'

    except:  # Rollback in case there is any error
        print '插入失败'
        db.rollback()  # 关闭数据库连接


# 得到正文的URL,读取正文,并保存
def getURL(nurl):
    text = ''
    html = askURL(nurl)
    # print html
    findDiv = re.compile(r'<li><span class="rt">(.*?)  target="_blank" style="" >', re.S)
    findTime = re.compile(r'(.*)</span>')
    findTitle = re.compile(r'title="(.*)"')
    findURL = re.compile(r'<a href="(.*)" title')
    # findLabel = re.compile(r'<h3.*?</span>(.*?)</h3>')
    # fileNum = 0
    # list = re.findall(findDiv, html)
    # print list[0]x
    # labelName = re.findall(findLabel, html)[0]
    for info in re.findall(findDiv, html):
        # print info
        time = re.findall(findTime, info)[0]
        # print time
        title = re.findall(findTitle, info)[0]
        url = re.findall(findURL, info)[0]  # 获取新闻正文的链接
        url = 'http://news.hfut.edu.cn' + url
        print time + ' ' + title + ' ' + url
        try:
            text = getContent(url)
            insertData(text['date'], text['title'], text['newsContent'], text['writer'], text['photoer'],
                       text['editor'], url)
            # text = {'title': '', 'date': '', 'writer': '', 'photoer': '', 'editor': '', 'newsContent': ''}
        except urllib2.URLError, e:
            if hasattr(e, "reason"):
                print "抓取错误" + url, e.reason
        except Exception, e:
            print "抓取错误" + url, e
        # print labelName + '...' + text['date'], text['title'], text['newsContent'], text['writer'], text['photoer'],text['editor']
        # 如果新闻内容长度大于100,保存新闻标题和正文
        # fileNum = fileNum + 1
        # f = saveFile(labelName, time, fileNum)
        # f.write(text)
        # f.close()  # 抓取新闻标题、类别、发布时间、url,并建立相应的文件,存到相应的类别文件夹中


def getNews(url, begin_page, end_page):
    for i in range(begin_page, end_page + 1):
        nurl = url + str(i) + ".html"
        print '----------开始打印第' + str(i) + '页---------------'
        # 获取网页内容
        getURL(nurl)
    db.close()


# 接收输入类别、起始页数、终止页数
def main():
    url = 'http://news.hfut.edu.cn/list-1-'
    begin_page = int(raw_input(u'请输入开始的页数(1,):\n'))
    end_page = int(raw_input(u'请输入终点的页数(1,):\n'))
    getNews(url, begin_page, end_page)


main()
2018-06-09 12:48:25 qq_39407518 阅读数 640
  • Python-数据

    Python数据库编程视频教程,数据库是MySQL,讲解Python链接MySQL数据库,并对数据库进行增删改查操作。

    10833 人正在学习 去看看 尹成

一、csv数据处理

csv表示”Comma-Separated Values(逗号分隔的值)”,csv文件时简化的电子表格,保存为纯文本文件。
python中解析csv文件可以使用csv模块。
注意:csv是文本文件,通过打开文件的操作,将其内容读入一个字符串,然后通过字符串的split()方法处理每行文本取得值。需要注意csv文件中也有自己的转义字符,允许逗号或者其他字符作为值的一部分,split()方法无法处理这部分转义字符。所以处理csv文件时为避免这些潜在的问题,建议使用csv模块处理csv文件。

Reader

使用csv模块从csv文件中读取数据,需要创建一个Reader对象,可以通过Reader对象迭代遍历csv文件中的每一行。

1
2
3
4
5
6
import csv

with open("example.csv", encoding='utf-8') as dataObject:
    dataReader = csv.reader(dataObject)
    for row in dataReader:
        print("第{0}行:{1}".format(dataReader.line_num, row))

Reader对象的line_num变量是当前的行号。
输出结果

1
2
3
1行:['2018/06/09', 'Apples', '73']
2行:['2018/06/10', 'Cherries', '85']
3行:['2018/06/11', 'Pears', '14']

Writer

Write对象可以将数据写入到csv文件中。
首先调用open()并传入w,以写模式打开一个文件。这时会创建一个对象。
然后将创建的对象传递给csv.writer(),创建一个Writer对象。
接下来调用Writer对象的writerow()方法写入文件。该方法接受参数为列表,返回值为写入文件这一行中的字符数(包括换行符)。

1
2
3
4
5
6
7
import csv

with open("test.csv", 'w', encoding='utf-8', newline='') as outputFile:
    dataWriter = csv.writer(outputFile)
    dataWriter.writerow(['a', 'b', 'c'])
    dataWriter.writerow(['啊', '吧', '次'])
    dataWriter.writerow(['A', 'Hello,World!', 'C'])

最后输出结果

1
2
3
a,b,c
啊,吧,次
A,"Hello,World!",C

此处的Hello,Wrold!中的逗号自动转义,使用双引号处理了。
在windows中open()需加上newline=''参数,否则将出现2倍行距的情况。
写入的文件必须已经存在。

  • delimiter 指定分隔符,默认为逗号
  • lineterminator 行距,默认为单倍行距
    1
    
    dataWriter = csv.writer(outputFile, delimiter='\t', lineterminator='\n\n')
    

上面表示使用制表符作为分隔符,两倍行距(也就是行之间字符变为2个换行符)。

二、excel数据处理

python提供有第三方库来支持对excel的操作,python处理excel文件用的第三方模块库有xlrd、xlwt、xluntils和pyExcelerator,除此之外,python处理excel还可以用win32com和openpyxl模块。下面我们先安装第三方库:
Pip install xlrd
Pip install xlwt
Pip install xluntils
Pip install pyExcelerator

Xlrd只能进行读取excel文件,没法进行写入文件,xlwt可以写入文件,但是不能在已有的excel的文件上进行修改,如果有这个需求,就需要使用xluntils模块了,pyExcelerator模块与xlwt类似,也可以用来生成excel文件。

2.1读取单表文件:

import xlrd

def readExcel():
    data = xlrd.open_workbook('test.xlsx')
    table = data.sheets()[0]    # 打开第一张表
    nrows = table.nrows     # 获取表的行数
    for i in range(nrows):  # 循环逐行打印
        print(table.row_values(i))      #通过row_values来获取每行的值

readExcel()

2.2 读取单表文件复杂例子:

# 打开一个workbook
workbook = xlrd.open_workbook('testdata.xlsx')
# 抓取所有sheet页的名称
worksheets = workbook.sheet_names()
print(workbook.sheets())
print('worksheets is {0}'.format(worksheets))
# 定位到sheet1
# worksheet1 = workbook.sheet_by_name(u'Sheet1')
worksheet1 = workbook.sheets()[1]
"""
#通过索引顺序获取
worksheet1 = workbook.sheets()[0]
"""
"""
#遍历所有sheet对象
for worksheet_name in worksheets:
worksheet = workbook.sheet_by_name(worksheet_name)
"""
# 遍历sheet1中所有行row
num_rows = worksheet1.nrows
for curr_row in range(num_rows):
    row = worksheet1.row_values(curr_row)
    print('row%s is %s' % (curr_row, row))
# 遍历sheet1中所有列col
num_cols = worksheet1.ncols
for curr_col in range(num_cols):
    col = worksheet1.col_values(curr_col)
    print('col%s is %s' % (curr_col, col))
# 遍历sheet1中所有单元格cell
for rown in range(num_rows):
    for coln in range(num_cols):
        cell = worksheet1.cell_value(rown, coln)
        print(cell)

2.3、写入excel文件

import xlwt
#创建workbooksheet对象
workbook = xlwt.Workbook() #注意Workbook的开头W要大写
sheet1 = workbook.add_sheet('sheet1', cell_overwrite_ok=True)
sheet2 = workbook.add_sheet('sheet2', cell_overwrite_ok=True)
sheet3 = workbook.add_sheet('sheet3', cell_overwrite_ok=True)
#sheet页中写入数据
sheet1.write(0,0,'this should overwrite1')
sheet1.write(0,1,'aaaaaaaaaaaa')
sheet2.write(0,0,'this should overwrite2')
sheet2.write(1,2,'bbbbbbbbbbbbb')

#-----------使用样式-----------------------------------
#初始化样式
style = xlwt.XFStyle()
#为样式创建字体
font = xlwt.Font()
font.name = 'Times New Roman'
font.bold = True
#设置样式的字体
style.font = font
#使用样式
sheet3.write(0,1,'some bold Times text',style)

#保存该excel文件,有同名文件时直接覆盖
workbook.save('test2.xls')
print('创建excel文件完成!')

2.4、Excele来处理超链接

import codecs
import xlwt
book = xlwt.Workbook()
sheet_index = book.add_sheet('index')
line=0
for i in range(9):
    link = 'HYPERLINK("{0}.txt", "{1}_11111")'.format(i, i)
    sheet_index.write(line, 0, xlwt.Formula(link))
    line += 1
book.save('simple2.xls')
for i in range(0, 9):
    file = str(i) + ".txt"
    with codecs.open(file, 'w') as f:
        f.write(str(i)*10)

2.5、Python进行修改excel文件:

但是不支持使用xlsx文件,直接使用xlsx就没有问题,如果使用xlsx文件,容易发生问题。

import xlrd
import xlutils.copy
#打开一个workbook
rb = xlrd.open_workbook('aaa111.xls')
wb = xlutils.copy.copy(rb)
#获取sheet对象,通过sheet_by_index()获取的sheet对象没有write()方法
ws = wb.get_sheet(0)
#写入数据
ws.write(10, 10, 'changed!')
#添加sheet
wb.add_sheet('sheetnnn2',cell_overwrite_ok=True)
#利用保存时同名覆盖达到修改excel文件的目的,注意未被修改的内容保持不变
wb.save('aaa111.xls')






2019-03-30 15:07:00 qq_42642945 阅读数 155
  • Python-数据

    Python数据库编程视频教程,数据库是MySQL,讲解Python链接MySQL数据库,并对数据库进行增删改查操作。

    10833 人正在学习 去看看 尹成


在这里插入图片描述

欢迎购买正版书籍

豆瓣评价:Python数据分析与挖掘实战
作者: 张良均 / 王路 / 谭立云 / 苏剑林
出版社: 机械工业出版社

数据探索

数据探索有助于选择合适的数据预处理和建模方法,甚至可以完成一些通常有数据挖掘解决的问题

数据质量分析

数据预处理的前提

数据质量分析的主要任务是检察院数据是否有脏数据:
脏数据内容:

  • 缺失值
  • 异常值
  • 不一致的值
  • 重复数据及含有特殊符号的数据

缺失值分析

缺失值主要包括记录的确实和记录中某个字段信息的缺失

缺失值产生的原因
缺失值的影响
缺失值的分析

异常值分析

异常值分析师检验数据是否有录入错误以及含有不合理的数据。

异常值是指样本中的个别值,其数据明显偏离其他的观测值。异常值也称为离散点,异常值的分析也称为离散点分析。

  • 简单统计量分析
    常见统计量分析:最大值,最小值
  • 3δ原则
    如果数据服从正态分布,在3δ原则下,异常值被定义为一组测定值中与平均值的偏差超过3倍标准差的值
  • 箱形图分析
    在这里插入图片描述
    所谓“鲁棒性”,是指控制系统在一定(结构,大小)的参数摄动下,维持其它某些性能的特性。
    所谓“稳定性”,是指控制系统在使它偏离平衡状态的扰动作用消失后,返回原来平衡状态的能力。
    稳定性是指系统受到瞬时扰动,扰动消失后系统回到原来状态的能力,而鲁棒性是指系统受到持续扰动能保持原来状态的能力

pandas中只需要读入数据后,使用describe()函数就可以查看数据的基本情况
例如:

import pandas as pd
catering_sale = 'catering_sale.xls' # 销售数据
# 读取数据,制定‘日期'列为索引列
data = pd.read_excel(catering_sale,index_col = u'日期')
data.head()

#describe()函数自动计算的字段有count(非空值数)、unique(唯一值数)、top(频数最高者)、freq(最高频数)
data.describe()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
使用箱线图,检测餐饮销售额数据异常值,代码如下:

# 制作箱线图
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline 
catering_sale = './catering_sale.xls'
data = pd.read_excel(catering_sale, index_col=u'日期')
print(data.describe())
# 使用盒图来展示数据
plt.rcParams['font.sans-serif'] = ['SimHei']  # 中文字体设置
plt.rcParams['axes.unicode_minus'] = False #负号显示
# 画箱线图
plt.figure(figsize=(10,5))
p = data.boxplot(return_type='dict')  # 数据转为箱线图的字典格式
x = p['fliers'][0].get_xdata()
y = p['fliers'][0].get_ydata()
y.sort()
# 添加注释, xy指定标注数据,xytext指定标注的位置(所以需要特殊处理) 
for i in range(len(x)):
    if i >0:
            plt.annotate(y[i], xy=(x[i], y[i]), xytext=(x[i]+0.05 -0.8/(y[i] -y[i-1]), y[i]))
    else:
            plt.annotate(y[i], xy=(x[i], y[i]), xytext=(x[i]+0.08, y[i]))
plt.show()

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

一致性分析

数据一致性是指数据的矛盾性、不相容性。

数据特征分析

对数据质量分析后,接下来可通过绘制图表、计算特征量等手段对数据进行特征分析

分布分析

分析数据的分布特征和分布类型,主要是通过绘图的方式展现

1.定量数据的分布分析

  • 求极差
  • 决定组距与组数
  • 决定分点
  • 列出频率分布表
  • 绘制频率分布直方图

在这里插入图片描述
2.定性数据的分布分析
在这里插入图片描述

对比分析

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

统计量分析

import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline 
catering_sale = './catering_sale.xls'
data = pd.read_excel(catering_sale, index_col=u'日期')
data = data[(data[u'销量'] > 400) & (data[u'销量'] < 5000)] #过滤异常值
statistics = data.describe()[u'销量'] #保存基本统计量
statistics['range'] = statistics['max'] - statistics['min'] #极差
statistics['var'] = statistics['std'] / statistics['mean'] #变异系数
statistics['dis'] = statistics['75%'] - statistics['25%'] #四分位间距
print(statistics)

在这里插入图片描述

周期性分析

贡献度分析

贡献度分析又称为帕累托分析
在这里插入图片描述
在这里插入图片描述
python代码如下:

import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline 
catering_sale = './catering_dish_profit.xls'
data = pd.read_excel(catering_sale, index_col=u'菜品名')

data = data[u'盈利'].copy() #浅拷贝
data.sort_values(ascending=False)
plt.figure()
data.plot(kind='bar')
plt.ylabel(u'盈利(元)')
p = 1.0 * data.cumsum() / data.sum()
p.plot(color='r', secondary_y=True, style='-o', linewidth=2)
plt.annotate(
    format(p[6], '.4%'),
    xy=(6, p[6]),
    xytext=(6 * 0.9, p[6] * 0.9),
    arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))#添加标注,即85%处的标记。这里包括了指定箭头样式
plt.ylabel(u'盈利(比例)')
plt.show()

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

相关性分析

分析连续型变量之间的线性相关程度的强弱,并用适当的统计指标表示出来的过程称为相关性分析。
1.直接绘制散点图:判断两个变量相关性

在这里插入图片描述
2.绘制散点图矩阵:判断多个变量的相关性
在这里插入图片描述
3.计算相关系数

  • Pearson相关系数
    在这里插入图片描述
  • Spearman秩相关系数也称等级相关系数
  • 判断相关系数

餐饮销售数据相关性分析
代码:

import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline 
catering_sale = './catering_sale_all.xls'
data = pd.read_excel(catering_sale, index_col=u'日期')
data.corr()
#data.corr()[u'百合酱蒸凤爪']
#data[u'百合酱蒸凤爪'].corr(data[u'翡翠蒸香茜饺'])


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

python 主要数据探索函数

在这里插入图片描述

基本统计特征函数

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

拓展统计特征函数

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

统计作图函数

在这里插入图片描述

没有更多推荐了,返回首页