2014-04-16 09:28:04 oMuYeJingFeng1 阅读数 8511
  • Python3开发详解

    Python3 开发详解,课程从基础的环境搭建讲起,详细讲述了Python开发的方方面面,内容包括:编程基础、函数、数据结构、异常处理、字符串、数字、网络编程、多线程、数据库处理等。

    96507 人正在学习 去看看 郭宏志

最近大数据竞赛很火,本人python没学多久,想试着写一下,只是实现了数据的处理,主要用到了dict,list,file知识

还有一点要说,我也用matlab实现了,但是运行完要差不多两分钟,但是python秒处理,有木有啊,足见python处理文本功能之强大


文件里的数据格式:

clientid      shopingid      num    date

1111000   3873             2          4月5日

clientinfo = []
shopinginfo = {}
month={}
day={}
shopidflag = 0
clientstartflag = 0
total={}
tmpclientid=''
output= open('f:/a.txt','a')
with open('f:/s.txt','r') as data_file:
    for lineinfo in data_file:
        lineinfo = lineinfo.split()
        clientid = lineinfo[0]
        shopingid = lineinfo[1]
        num=[]
        num.append(lineinfo[2])
        data = lineinfo[3]
        data = data[:-1]
        data = data.split('月')
        monthvar=[]
        monthvar.append(data[0])
        dayvar=[]
        dayvar.append(data[1])
        
        if clientid in clientinfo and shopingid in shopinginfo and int(data[0])>=6:
            shopinginfo[shopingid].append(lineinfo[2])
            month[shopingid].append(data[0])
            day[shopingid].append(data[1])
        elif clientid in clientinfo and shopingid not in shopinginfo and int(data[0])>=6:
            shopinginfo[shopingid]=num
            month[shopingid]= monthvar
            day[shopingid] = dayvar
        elif clientid not in clientinfo :
            #if clientstartflag  == 1: 
            clientflag = 0
            shopinglink=''
            for (k, v) in shopinginfo.items():
                total={}
                vote=0
                for  i  in v:
                    if  i  in total:
                        total[i]+=1
                    else:
                        total[i]=1      
                for var in total:
                    if var == '0':
                        vote += total[var]
                    elif var == '1':
                        vote = 0
                        break 
                    elif var == '2':
                        vote += total[var]*2
                    else:
                        vote += total[var]*3
                    if vote >= 3:
                        if clientflag == 0:
                            output.write(tmpclientid+'\t')
                            clientflag =1
                        shopinglink+=k+','
            if clientflag == 1:
                output.write(shopinglink.strip(',')+'\r\n')
            shopinginfo={}
            month ={}
            day ={}
            clientinfo=[]
            tmpclientid=clientid
            clientinfo.append(clientid)
            shopinginfo[shopingid]=num
            month[shopingid] = monthvar
            day[shopingid] = dayvar
    shopinglink=''
    for (k, v) in shopinginfo.items():
        for  i  in v:
            if  i  in total:
                total[i]+=1
            else:
                total[i]=1
        total={}
        vote=0
        for  i  in v:
            if  i  in total:
                total[i]+=1
            else:
                total[i]=1      
        for var in total:
            if var == '0':
                vote += total[var]
            elif var == '1':
                vote = 0
                break 
            elif var == '2':
                vote += total[var]*2
            else:
                vote += total[var]*3
        if vote >= 3:
            if clientflag == 0:
                clientflag =1
            shopinglink+=k+','
    if clientflag == 1:
        output.write(tmpclientid+'\t')
        output.write(shopinglink.strip(','))
    data_file.close()
    output.close()


2019-03-15 21:40:45 qq_38183592 阅读数 112
  • Python3开发详解

    Python3 开发详解,课程从基础的环境搭建讲起,详细讲述了Python开发的方方面面,内容包括:编程基础、函数、数据结构、异常处理、字符串、数字、网络编程、多线程、数据库处理等。

    96507 人正在学习 去看看 郭宏志

Python操作三大数据库

在我们用Python语言开发软件时会经常用到三大数据库去存储数据:Mysql,MongoDB,Redis;
作为复习今天重新写一遍方便日后复习Python操作各大数据库的方法用法;

Python操作Mysql

DDL(数据库定义语句)

    create table/database
    alter   table/database
    drop   table/database

DML(数据管理语句)

insert 	新增
delete	删除
update	修改
select	查询

在python2中,连接Mysql的库大多是使用MySQLdb,但是此库官方并不支持Python3,所以我们用PyMySQL
直接 pip install pymysql 即可

import pymysql

db = pymysql.connect(host='localhost',port=3306,user='root',password='12345')   # 连接mysql,声明一个连接对象db
cursor = db.cursor()    # 获取操作游标
cursor.execute('select version()')# 查询数据库版本,返回的是查询到的数量
# version = cursor.execute('select version()')    # 使用游标执行sql语句
data = cursor.fetchone()    # 获得第一条数据,也就得到了版本号
print(data)

----------------------------------结果
('5.7.17-log',)

查询数据库:

cursor.execute('show databases')
databases = cursor.fetchall()	# fetchall()方法获取所有结果,元组的形式
print(databases)
----------------------------
(('information_schema',), ('dailyfresh',), ('hive',), ('ihome',), ('images360',), ('lagou',), ('movie',), ('mxonline',), ('mysql',), ('news',), ('performance_schema',), ('solar',), ('sougou_data_result',), ('spiders',), ('student',), ('sys',), ('testdjango',))

创建数据库:

cursor.execute('create database test_Mysql default character set utf8')# 创建数据库,使用默认utf8编码

创建表:
在创建完数据库test_Mysql后,我们想要使用该数据库只需要在链接时多制定一个db参数即可

import pymysql

db = pymysql.connect(host='localhost',port=3306,user='root',password='12345',db='test_Mysql')
cursor = db.cursor()    # 获取操作游标
# 创建表
sql = '''create table if not exists students (id varchar(15) not null, name varchar(255) not null, age INT not null, primary key(id))'''
cursor.execute(sql)
db.close()

插入数据

id = '20120203'
name = 'Li'
age = 18
sql = '''insert into students(id,name,age) values(%s,%s,%d)'''  # 格式化字符%s代替value值
try:
    cursor.execute(sql,(id,name,age))# 第一个参数传入sql语句,第二个参数传入value值,用元组的方式
    db.commit() # 提交事务
except:
    db.rollback() # 错误回滚
db.close()

事物的四个属性:

属性 解释
原子性 事务是一个不可分割的工作单位,事务中包括的注入操作要么都做,要么都不做
一致性 一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。举例来说,假设用户A和用户B两者的钱加起来一共是1000,那么不管A和B之间如何转账、转几次账,事务结束后两个用户的钱相加起来应该还得是1000,这就是事务的一致性
隔离性 隔离性是当多个用户并发访问数据库时,比如同时操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。关于事务的隔离性数据库提供了多种隔离级别
持久性 持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
--------- ------------------------------

插入,更新,删除操作都是对数据库进行更改的操作,而更改操作偶必须为一个事务,所以这些操作的标准写法就是:

try:
	cursor.execute(sql)
	db.commit()
except:
	db.rollback()

插入数据还可以利用 dict 字典的形式
实现动态插入,这种方式对于***Python爬虫数据采集***很方便

data = {
	'id': '123456',
	'name':‘ligang’
	'age':20
} 
table = 'students'
keys = ','.join(data.keys())
values = ','.join(['%s']*len(data))
sql = 'insert into {table}({keys}) values ({values})'.format(table=table, keys=keys,values=values)
try:
	if cursor.execute(sql, tuple(data.values())):
		print('Successful')
		db.commit()
except:
		print('Filed')
db.close()

更新数据

sql = ‘update students set age = %s where name = %s’
cursor.execute(sql, (20,'Bob'))

查询

sql = 'select * from students where age>=20'
print('row count:', cursor.execute(sql))
cursor.fetchone()	# 获取一条
cursor.fetchall()	# 获取剩余全部 ,二重元组的形式,如果数据量大,内存开销便会增大

Python操作MongoDB

  1. 连接MongoDB
from pymongo import MongoClient
from datetime import datetime
# 方式1
# client = MongoClient()
# 方式2
# client2 = MongoClient('localhost',27017)# ip, 端口
# 方式三
# client3 = MongoClient('mongodb://localhost:27017')# 直接传入字符串mongodb开头
# print(client2.HOST)
# print(client.list_database_names())
# client.close() # 关闭依然可以用。自带线程池 当重新访问 数据库会自动连接
# print(client.list_database_names())
  1. 操作增删改查
**  ****** 将连接封装成为类,用面向对象的方式去调用方法 *****   **
class TetMongo(object):
    def __init__(self):
        self.client = MongoClient()  # 建立连接 默认本地
      #  self.db = self.client['test'] # 没有自动创建
        self.db = self.client.test   # 链接数据库 和上边一样
    def add_one(self):
        """新增数据"""
        student = {
            'id': '135136',
            'name': '老李',
            'age': '22',
            'gender': '男',
            'time': datetime.now() # 自动添加字段,这个时间可以用原生的python时间不需要加处理
        }
        return self.db.students.insert_one(student)
        # 除了插入一条之外 insert插入多条采用【{stu1},{stu2}】列表嵌套字典的方式
        # save() 也可以保存多条,但是要遍历列表 速度慢
    def get_one_from_id(self,stu_id):
        '''查询指定id的数据'''
        return self.db.students.find_one({'id':str(stu_id)}) # 查找一条 find_one
    def get_more_from_gender(self,gender):
        '''查询多个性别为男的数据'''
        return self.db.students.find({'gender':str(gender)})  # 查找多条 find

    def find_all(self):
        return self.db.students.find()  # 直接调用不传参数 默认查找该集合全部数据

    #    (>)  大于 - $gt
    #    (<)  小于 - $lt
    #    (>=)  大于等于 - $gte
    #    (<= )  小于等于 - $lte
    # 例:查询集合中age大于25的所有记录
    # for i in my_set.find({"age": {"$gt": 25}}):
    #     print(i)
    def update_from_id(self):
        rest = self.db.students.update_one({'name':'老王'},{'$set':{'gender':'女'}})
       # rest = self.db.students.update_many({},{'$set':{'gender':'女'}})
        print(rest)
    def remove(self):
        # return self.db.students.delete_one({'id':str(id)}) # 删除一条
        return self.db.students.remove() # 删除所有记录
        # return self.db.students.remove({'name':'老王'})
def main():
    obj = TetMongo()
    # result = obj.add_one()
    # print(result.inserted_id)

    # result = obj.get_one_from_id(123415)
    # print(result)
    #
    result_list = obj.get_more_from_gender('男')
    for res in result_list:
        print(res)

    # all_stu = obj.find_all()
    # for res in all_stu:
    #     print(res)
    # # obj.update_from_id()
    #
    res1=obj.remove()
    print(res1)
if __name__ == '__main__':
    main()

Python操作Redis

下一篇专门深入理解Redis

2019-09-06 21:59:41 wwdede 阅读数 491
  • Python3开发详解

    Python3 开发详解,课程从基础的环境搭建讲起,详细讲述了Python开发的方方面面,内容包括:编程基础、函数、数据结构、异常处理、字符串、数字、网络编程、多线程、数据库处理等。

    96507 人正在学习 去看看 郭宏志

很多同学都知道python作为比较火的编程语言,人工智能需要它。除了人工智能,图零小编说,大数据也很需要它。

自从2004年以后,python的使用率呈线性增长。2011年1月,它被TIOBE编程语言排行榜评为2010年度语言。由于Python语言的简洁性、易读性以及可扩展性,在国外用Python做科学计算的研究机构日益增多,一些知名大学已经采用Python来教授程序设计课程。

数据就是资产。大数据工程师是现在十分火热、高薪的职位。做大数据开发和分析不仅要用到Java,Python也是较重要的语言。

 

那么,今天我们就来分析一下,Python之于大数据的意义和作用。

大数据现在互联网火热的一个名词,而和大数据关键词较紧密的相信就是Java和python了,在一年以前,Java大数据可能是很多培训机构的宣传标语。而到了2018年,python大数据则成为了潮流,无论是行业大佬亦或是培训机构都开始说python大数据了,这是为什么呢?如果你对大数据开发感兴趣,想系统学习大数据的话,可以加入大数据技术学习交流扣群:数字522+数字189+307,私信管理员即可免费领取开发工具以及入门学习资料

 

大数据为什么要学python?什么是大数据?

 

大数据是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

 

为什么是python大数据?

 

从大数据的百科介绍上看到,大数据想要成为信息资产,需要有两步,一是数据怎么来,二是数据处理。

 

数据怎么来?

 

在数据怎么来这个问题上,数据挖掘无疑是很多公司或者个人的优选,毕竟大部分公司或者个人是没有能力产生这么多数据的,只能是挖掘互联网上的相关数据。

网络爬虫是Python的传统强势领域,较流行的爬虫框架Scrapy,HTTP工具包urlib2,HTML解析工具beautifulsoup,XML解析器lxml,等等,都是能够独当一面的类库。

当然,网络爬虫并不仅仅只是打开网页,解析HTML怎么简单。高效的爬虫要能够支持大量灵活的并发操作,常常要能够同时几千甚至上万个网页同时抓取,传统的线程池方式资源浪费比较大,线程数上千之后系统资源基本上就全浪费在线程调度上了。

Python由于能够很好的支持协程(Coroutine)操作,基于此发展起来很多并发库,如Gevent,Eventlet,还有Celery之类的分布式任务框架。被认为是比AMQP更高效的ZeroMQ也是较早就提供了Python版本。有了对高并发的支持,网络爬虫才真正可以达到大数据规模。

 

数据处理:

 

有了大数据,那么也需要处理,才能找到适合自己的数据。而在数据处理方向,Python也是数据科学家较喜欢的语言之一,这是因为Python本身就是一门工程性语言,数据科学家用Python实现的算法,可以直接用在产品中,这对于大数据初创公司节省成本是非常有帮助的。

2018-05-15 22:04:17 qq_41597912 阅读数 802
  • Python3开发详解

    Python3 开发详解,课程从基础的环境搭建讲起,详细讲述了Python开发的方方面面,内容包括:编程基础、函数、数据结构、异常处理、字符串、数字、网络编程、多线程、数据库处理等。

    96507 人正在学习 去看看 郭宏志

上一篇文章带大家一起了解了Pandas库中的数据合并,本文是Python大数据与机器学习系列文章中的第16篇,将带大家一起了解一下Pandas库中的其他数据操作。

Pandas提供了很多针对数据的操作,本文列出一些非常常用的。



在这里还是要推荐下我自己建的Python开发学习群:483546416,群里都是学Python开发的,如果你正在学习Python ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2018最新的Python进阶资料和高级开发教程,欢迎进阶中和进想深入Python的小伙伴

实战练习

在Jupyter Notebook上执行以下代码:

import pandas as pd

df = pd.DataFrame({'col1':[1,2,3,4],'col2':[444,555,666,444],'col3':['abc','def','ghi','xyz']})

df.head()

零基础入门到精通:Python大数据与机器学习之Pandas-数据操作

获取唯一值

df['col2'].unique()

零基础入门到精通:Python大数据与机器学习之Pandas-数据操作

获取非唯一值

df['col2'].nunique()

零基础入门到精通:Python大数据与机器学习之Pandas-数据操作

获取每个值的个数

df['col2'].value_counts()

newdf = df[(df['col1']>2) & (df['col2']==444)]

newdf

零基础入门到精通:Python大数据与机器学习之Pandas-数据操作

应用函数

def times2(x):

return x*2

df['col1'].apply(times2)

零基础入门到精通:Python大数据与机器学习之Pandas-数据操作

df['col2'].apply(lambda x:x*2)

零基础入门到精通:Python大数据与机器学习之Pandas-数据操作

df['col3'].apply(len)

零基础入门到精通:Python大数据与机器学习之Pandas-数据操作

df['col1'].sum()

零基础入门到精通:Python大数据与机器学习之Pandas-数据操作

永久删除一列

del df['col1']

df

零基础入门到精通:Python大数据与机器学习之Pandas-数据操作

df = pd.DataFrame({'col1':[1,2,3,4],'col2':[444,555,666,444],'col3':['abc','def','ghi','xyz']})

df.drop('col1',axis=1,inplace=True)

df

零基础入门到精通:Python大数据与机器学习之Pandas-数据操作

获取列名和索引

df.columns

零基础入门到精通:Python大数据与机器学习之Pandas-数据操作

df.index

零基础入门到精通:Python大数据与机器学习之Pandas-数据操作

排序

df

df.sort_values(by='col2') #inplace=False by default

零基础入门到精通:Python大数据与机器学习之Pandas-数据操作

查找和检测Null值

df.isnull()

零基础入门到精通:Python大数据与机器学习之Pandas-数据操作

df.dropna()

零基础入门到精通:Python大数据与机器学习之Pandas-数据操作

将Null值填充为其它值

import numpy as np

df = pd.DataFrame({'col1':[1,2,3,np.nan],

'col2':[np.nan,555,666,444],

'col3':['abc','def','ghi','xyz']})

df.head()

零基础入门到精通:Python大数据与机器学习之Pandas-数据操作

df.fillna('FILL')

零基础入门到精通:Python大数据与机器学习之Pandas-数据操作

data = {'A':['foo','foo','foo','bar','bar','bar'],

'B':['one','one','two','two','one','one'],

'C':['x','y','x','y','x','y'],

'D':[1,3,2,5,4,1]}

df = pd.DataFrame(data)

df

零基础入门到精通:Python大数据与机器学习之Pandas-数据操作

透视表:df.pivot_table(values='D',index=['A', 'B'],columns=['C'])

零基础入门到精通:Python大数据与机器学习之Pandas-数据操作

进度介绍

本系列文章共分为26个部分目前已经进行到了第6部分,所有内容计划如下:

  1. 预热

  2. 环境搭建

  3. Jupyter教程

  4. Python速成

  5. Python数据分析,NumPy库的使用

  6. Python数据分析,Pandas库的使用

  7. Python数据分析,Pandas库练习

  8. Python数据可视化,Matplotlib

  9. Python数据可视化,Seaborn

  10. Python数据可视化,Pandas内建数据可视化

  11. Python数据可视化,Plotly和Cufflinks

  12. Python数据可视化,Geographical Plotting

  13. 数据 Capstone 项目

  14. 机器学习介绍

  15. 线性回归

  16. 交叉验证与偏方差

  17. 逻辑回归算法

  18. k-近邻算法

  19. 决策树与随机森林

  20. 支持向量机

  21. k-means聚类

  22. 主成分分析

  23. 推荐系统

  24. 自然语言处理(NLP)

  25. Python大数据与Spark

  26. 神经网络(NN)与深度学习(DL)

  27.  

2017-03-02 11:02:25 werctzzz 阅读数 1123
  • Python3开发详解

    Python3 开发详解,课程从基础的环境搭建讲起,详细讲述了Python开发的方方面面,内容包括:编程基础、函数、数据结构、异常处理、字符串、数字、网络编程、多线程、数据库处理等。

    96507 人正在学习 去看看 郭宏志

相对于iOS来说,python的数据存储和数据结构更为直观,包括数据的使用

详细的类型和使用方法如下:

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

#Python数据结构

#①列表操作
a = [66.25,333,333,1,1234.5]
print(a.count(333), a.count(66.25), a.count('x')) #.count用来统计元素在列表中出现的次数
a.insert(2,-1)        #在 指定位置 插入 指定元素
a.append(333)         #把一个元素添加到列表结尾
print(a)
print(a.index(333))   #获取列表中这个值第一次出现的元素索引,没有就返回错误
a.remove(333)         #获取列表中这个值第一次出现的时候,并删除这个值
print(a)
a.reverse()           #倒排列表中的元素
print(a)
a.sort()              #正牌列表中的元素
print(a)

#②推导表达式
vec = [2, 4, 6]
print([3*x for x in vec])           #将列表中每个数值乘三,获得一个新的列表
print([[x, x**2] for x in vec])     #列表中包含小列表

#加入if判断
print([3*x for x in vec if x > 3])
print([3*x for x in vec if x < 2])

#③嵌套列表解析

#④del 语句
#del 可以用来删除一个元素 或者删除整个实体变量
a = [-1, 1, 66.25, 333, 333, 1234.5]
del a[0]          #删除0位置的元素
print(a)

del a[2:4]        #删除2-4位置之间的元素
print(a)

del a[:]          #删除所有元素
print(a)

del a             #删除实体变量 a

#⑤元组和序列
#元组在输出时候总是有括号的,便与表达嵌套结构

#⑥集合
#集合是一个无序不重复的元素集,基本功能包括 关系测试 和 消除重复元素
#例:
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
print(basket)                      # 删除重复的

print('orange' in basket )       #ture         # 检测成员
print('crabgrass' in basket)     #false

#⑦字典
tel = {'jack': 4098, 'sape': 4139}
tel['guido'] = 4127                 #增加一个键名为guido的键值对并赋值
print(tel)

print(tel['jack'])                  #查看键名为 jack的对应的值

del tel['sape']                     #删除键名为sape的键值对
tel['irv'] = 4127                   #增加键名为 irv的键值对并赋值
print(tel)

print(list(tel.keys()))             #查询所有键名

print(sorted(tel.keys()))           #对键进行排序
print('guido' in tel)        #True  #判断guido是否是字典中的键

print('jack' not in tel)     #False #同上

#⑧遍历技巧
#键值对的关键字和对应的值可以用items()方法同时读取出来
knights = {'gallahad': 'the pure', 'robin': 'the brave'}
for k, v in knights.items():
print(k, v)

#在序列中遍历时,索引位置和对应值可以使用 enumerate() 函数同时得到:
for i, v in enumerate(['tic', 'tac', 'toe']):
print(i, v)

#同时遍历两个或更多的序列,可以使用 zip() 组合:
questions = ['name', 'quest', 'favorite color']
answers = ['lancelot', 'the holy grail', 'blue']
for q, a in zip(questions, answers):
    print('What is your {0}?  It is {1}.'.format(q, a))

#要反向遍历一个序列,首先指定这个序列,然后调用 reversesd() 函数:
for i in reversed(range(1, 10, 2)):
    print(i)

#要按顺序遍历一个序列,使用 sorted() 函数返回一个已排序的序列,并不修改原值:
basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
for f in sorted(set(basket)):
    print(f)


python数据分析

阅读数 16580

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