18-09-27 pandas 学习02
如何系统的学习python 中有关数据分析和挖掘相关的库?
什么是系统的学习?系统的学习就是一个先搭建只是框架体系,然后不断填充知识看,不断更新迭代的过程。 Pandas,numpy,scipy,matplotlip,scikit-learn 就是知识框架体系中必备部分:
pandas 用来做数据处理,
numpy 用来做高纬度矩阵运算,
scipy 用来做科学计算,
matplotilib 用来做数据可视化,
scikit-learn 用来做数据挖掘与机器学习,它已经
覆盖了基本的算法,只需要调用即可, 上面这几个库也就搭建了做数据分析和挖掘的经典workflow;
拿到数据之后先做一个数据预处理(pandas + numpy+scipy)
接着会要对数据包含的特征做一些可视化输出(matplotlid)
之后需要提前特征和建模调参(numpy+scikit-learn),
有了模型与结果,最后归纳整理做presenttation 和report.
但目前数据挖掘竞赛比较火的技巧是模型融合 ,可以对很多模型进行融合,并且可以选择不同的模型融合方式
https://zhuanlan.zhihu.com/p/25836678 df == 任意的pandas DataFrame 数据框对象
s === 任意的pandans Series 数组的对象
pandas 和numpy 是Python做数据分析最基础且最核心的库
# 一 Pandas 数据存取******************** import pandas as pd
import numpy as np
"""
读取文件:从文件名、URL、文件对象中加载数据 数据的导入 pd.read_csv(filename) #导入csv格式文件中的数据 默认分隔符为逗号
pd.read_table(filename) # 导入有分隔符的文件(如TSY)中的数据 默认分隔符为\t(横向)
pd.read_excel #导入读取excel文件中的数据
pd.read_sql(query,connection_object) #导入SQL 数据表/数据框中的数据
pd.read_json(json_string) #导入JSON格式的字符,URL地址或者文件中的数据
pd.read_html(url) #导入经过解析的RUL地址中包含的数据框(DataFrame)数据
pd.read_clipboard() #导入系统粘贴板里面的数据
pd.DataFrame(dict) #导入python 字典(dict)里面的数据,其中key 是数据框的表头,value是数据框的内容
更 多格式,通过在ipython中输入pd.read_*? 查看
读取文件函数主要参数:
sep 指定分隔符,可用正则表达式如’\s+’
header=None 指定文件无列名,默认列名失效
names 指定列名 原文件无列名时,可通过这种方式指定,比如: names=[‘username’, ‘phone’, ‘email’]
index_col 指定某列作为索引 比如 index_col = 0 指定0列为索引
skip_row 指定跳过某些行
na_values 指定某些字符串表示缺失值,比如 na_values=[‘None’, ‘null’] 将这些字符串作为NaN
parse_dates 指定某些列是否被解析为日期,布尔值或列表 数据的导出 df.to_csv(filename) #将数据框(DataFrame)中的数据导入csv格式的文件中
df.to_excel(filename) #将数据框(DataFrame)中的数据导入Excel 格式的文件中
df.to_sql(table_name,connection_object) #将数据框(DataFrame)中的数据导入SQL数据表/数据库中
df.to_josn(filename) #将数据框(DataFrame)中的数据导入JSON 格式的文件中
---------------------
python \r \t \n 各种转义字符[转]
转义字符 | 描述 |
---|---|
\(在行尾时) | 续行符 |
\\ | 反斜杠符号 |
\’ | 单引号 |
\” | 双引号 |
\a | 响铃 |
\b | 退格(Backspace) |
\e | 转义 |
\000 | 空 |
\n | 换行 |
\v | 纵向制表符 |
\t | 横向制表符 |
\r | 回车 |
\f | 换页 |
\oyy | 八进制数yy代表的字符,例如:\o12代表换行 |
\xyy | 十进制数yy代表的字符,例如:\x0a代表换行 |
\other | 其它的字符以普通格式输出 |
""" # pandas 可以存取多种介质类型的数据,例如 内存,文本,CSV,JSON,HTML,Excel,HDF5.SQL # 1 读取数据相关的参数介绍
# 如果数据有中文,编码可以修改,默认是ascii,改为utf-8 # 写入不修改编码则读取时需要修改
# df.to_csv(
# "xx.csv",# 存入数据
# index=False,# 不存储行索引
# header=False # 不存储列索引
# encoding = "utf-8"
# ) # 2 读取CSV,文件内汉字等特殊符号时,csv 文件变为应为 utf-8(无BOM)可默认正常读取
# 如果编码为ANSI ,加参数 enconding="gbk",
# 数据内有逗号时,左右加应为半角双引号,可以正常解析
#
# pd.read_csv(
# "xxx.csv",#文件名
# sep = ",", #指定分隔符,csv 默认逗号,如果是table表格数据一般为 \t(横向制表符)
# usecols=[0,2,4], #读取指定的列
# nrows = 10, #读取前几行
# header = None,#不将第一行设为表头
# names = ["a","dd"], #不使用csv 表头,自定义表头
# encoding = "utf-8" #编码,需要根据文本编码修改,默认是utf-8,可以指定为GBK/ascii
# ) # 3合并时间列及自定义某列为行索引==的具体 解析 parse_dates={"date_time":["data","time"]
# files = pd.read_csv(r"C:\Users\WY\Desktop\student2.csv")
# print(files)
# data time name age
# 0 20100101 10000 张三 18
# 1 20100101 230000 李,四 28
files1 = pd.read_csv(r"C:\Users\WY\Desktop\student2.csv",
parse_dates={"date_time":["data","time"]}, #合并两列 然后重新命名
)
# print(files1)
# date_time name age
# 0 2010-01-01 01:00:00 张三 18
# 1 2010-01-01 23:00:00 李,四 28 files2 = pd.read_csv(r"C:\Users\WY\Desktop\student2.csv",
parse_dates={"date_time":["data","time"]}, #合并两列 然后重新命名
index_col="date_time" #把这列设置为行索引 代替自动生成的数字 0 1 2(必须是这个date_time)
)
# print(files2)
# name age
# date_time
# 2010-01-01 01:00:00 张三 18
# 2010-01-01 23:00:00 李,四 28 # 4 Pandas 存取HDF5 暂时放置不太懂 ?????????????????
# 有中文,存储变得很大 很大啊
# files3 = pd.DataFrame.to_hdf(r"C:\Users\WY\Desktop\student2.h5",'w') #???
# files3 = pd.read_hdf(r"C:\Users\WY\Desktop\student2.h5",key='files3')
# print(files3) # 5 pandas 存取Excel(xlsx) # 5-1 读取Excel 数据
# na_values 指定某些字符串表示缺失值,比如 na_values=[‘None’, ‘null’] 将这些字符串作为NaN files4 = pd.read_excel(r"C:\Users\WY\Desktop\111.xlsx",
"Sheet1",index_col=None,na_values=["NA"],header=None #不将第一行设为表头(此时这是列索引)
) # print("file4",files4)
# file4 0 1
# 0 组长 王小1
# 1 组长 王小2
# 2 组长 王小3 # 以下是练习 详情去看我自己的博客关于查询的方法 冒号: 相当于行的取值
# data = files4[[0,1]] #取值前2列
# data = files4.loc[:,[0,1]] #取值前2列(标签索引)
# data = files4.iloc[:,[0,1]] #取值前2列(位置索引)
# data = files4.loc[:,0] #取值前1列
# data = files4.loc[0] #第一行的数据 # 5-2 写入Excel文件 会 把原文件福覆盖
# 需求以上取值所有人的名字
data = files4[[0]] #取第二列 另外还有两种方法
# print(data) data.to_excel(
r"C:\Users\WY\Desktop\222.xlsx",
"Sheet1",
header=False,
index=False #不存入行索引,列索引为index_col
) # 6 pandas 存取JSON数据
# 读取JSON # pd.read_json("XX.json") # 存入JSON
# data.to_json("xx.josn") # 7pandas 从剪贴板(内存)读取数据(当你想要剪切板中复制后的东西 这个就可以打印出来了)
# 多用于将网页内容转换为 DataFrame # data = pd.read_clipboard(header=None)
# print(data) # 8 pandas 可以直接从数据库总写入或读取DataFrame 数据
# 方法
# pd.read_sql() 查询数据库,返回DataFrame d对象数据
# pd.to_sql() 将DataFrame 对象数据插入数据库
# 注意:to_sql() 直接调用 INSERT 语句完成任务,因此数据数据的传输速度较慢,如果将一个大型
# DataFrame 数据写入数据库中,最好先导出CSV 文件然后再导入数据库中
"""
# 以下是复制过来连接数据库的
from sqlalchemy import create_engine # 连接MySQL数据库,需要安装Python连接库
# conda install -c anaconda pymysql dbconnect = 'pymysql' # MySQL连接库,根据使用的连接库修改名称,这里用pymysql
dbname = 'aaa' # 数据库名
dbusername = 'root' # 数据库用户名
dbpwd = 'root' # 数据库密码 # 连接数据库
conn = create_engine('mysql+' + dbconnect + '://' + dbusername + ':' + dbpwd + '@localhost:3306/' + dbname + '?charset=utf8') # 存取数据库数据 # 查询数据库 sql1 = 'SELECT * FROM ccc' df1 = pd.read_sql( # pd.io.sql.read_sql()的快捷方式
sql1, # sql语句
conn, # 数据库连接
index_col='id' # 选定某列做行索引,可选
)
df1 # 插入数据库 a pd.io.sql.to_sql(
a, # 插入的数据,注意格结构应和MySQL表一致
'ccc', # 表名
con=conn, # 数据库连接
if_exists='append', # 注释见下
index=False # 不将列索引插入数据库中,否则会出错 """ # 二 Pandas 统计分析 ********************
# pandas 数据的基本统计分析和numpy 的函数近似
"""
numpy.random.rand(a,dn) 函数根据给定维度生成[0,a)之间的数据,包含0,不包含a
dn表格每个维度 (几行)
返回值为指定维度的array
"""
dates = pd.date_range("20180927",periods=10) #获取最近10天的日期时间
# print(dates)
# DatetimeIndex(['2018-09-27', '2018-09-28', '2018-09-29', '2018-09-30',
# '2018-10-01', '2018-10-02', '2018-10-03', '2018-10-04',
# '2018-10-05', '2018-10-06'],
# dtype='datetime64[ns]', freq='D')
df = pd.DataFrame(np.random.randn(10,5),index=dates,columns=["a","b","c","d","e"])
# print(df) #随机生成0,10 之间的数据 但是以下 好像不是??????????
# a b c d e
# 2018-09-27 -0.258745 0.037599 0.721864 -0.211030 -1.059286
# 2018-09-28 -0.054321 1.128499 1.655691 0.224175 -0.772732
# 2018-09-29 -1.268385 0.432739 -1.279300 -1.473420 -1.611057
# 2018-09-30 -0.671130 0.432911 -0.471831 0.366561 -0.102837
# 2018-10-01 1.489147 0.195784 0.129284 -0.519119 -0.652858
# 2018-10-02 -0.525051 -0.147583 -0.393632 -0.607596 1.015660
# 2018-10-03 0.628974 -0.846290 -1.531452 1.029872 -1.886281
# 2018-10-04 -0.268511 -0.179644 -1.006786 0.468539 1.254019
# 2018-10-05 -0.349232 0.006306 -0.017473 0.978961 -0.101312
# 2018-10-06 -0.011932 -0.659007 -1.271695 -0.719069 0.232689
# print(df.describe()) #快速统计结果
# print(df.mean())#按列求平均值
# print(df.mean(1)) #按行求平均值 # ==
a1 = pd.Series([2,3,4,5],index=["a","b","c","d"])
# print(a1)
# a 2
# b 3
# c 4
# d 5
# dtype: int64 # b1 = pd.DataFrame(np.arange(4).reshape(1.4),index=["A","B","C","D"])
b1 = pd.DataFrame(np.arange(20).reshape(4,5),index=["A","B","C","D"])
# print(b1)
# 0 1 2 3 4
# A 0 1 2 3 4
# B 5 6 7 8 9
# C 10 11 12 13 14
# D 15 16 17 18 19 # print(a1.describe(),type(a1.describe()))
# count 4.000000
# mean 3.500000
# std 1.290994
# min 2.000000
# 25% 2.750000
# 50% 3.500000
# 75% 4.250000
# max 5.000000
# dtype: float64 <class 'pandas.core.series.Series'> # print(a1.describe()["mean"]) #3.5 # 返回横行的数据 ????????????
# print(b1.describe().loc["min"])
# print(b1.describe().loc[3]) #返回横行数据,series
# b.describe().loc['max']
# b.describe().iloc[7]
#
# #返回一列值,这里第2列
# b.describe()[2]
# #b.describe()[2]
# b.describe().loc[:,2]
#1读取所有数据
student = pd.read_csv("C:\\Users\\WY\\Desktop\\student2.csv") #和pd.io.parsers/read_csv
# print(student)
""" a,b
0 我不是毛2,我不是我2,哈哈哈哈2
1 我不是毛3,我不是我3,哈哈哈哈3
2 我不是毛4,我不是我4,哈哈哈哈4
3 我不是毛11,我不是我11,哈哈哈哈11
4 我不是毛22,我不是我22,哈哈哈哈22
5 我不是毛33,我不是我33,哈哈哈哈33
6 我不是毛44,我不是我44,哈哈哈哈44
"""
# 读取前5行 和后5行的数据
# print(student.head()) # 获取数据前五行的数据
# 出错了 不回了 ????????????文件的本身的问题 换了文件就好了 # print(student.tail()) #获取数据后5行的数据 # a,b
# 2 我不是毛4,我不是我4,哈哈哈哈4
# 3 我不是毛11,我不是我11,哈哈哈哈11
# 4 我不是毛22,我不是我22,哈哈哈哈22
# 5 我不是毛33,我不是我33,哈哈哈哈33
# 6 我不是毛44,我不是我44,哈哈哈哈44 # 3 查询指定的行 这里的ix 索引标签函数必须是中括号[]
# print(student.ix[[0,2,4]])
# a,b
# 0 我不是毛2,我不是我2,哈哈哈哈2
# 2 我不是毛4,我不是我4,哈哈哈哈4
# 4 我不是毛22,我不是我22,哈哈哈哈22 # 4 查询指定的列 卡主了 不知道列索引的用法
# print(stude????????????????????????????????????????????/ # print(student[["b"]].head()) # =================?????????????????????????????????不会 # 四、统计分析******** # pandas 模块维我们提供好了非常多的描述性分析的指标函数,如总和,均值
# 最大值、最小值等。我们来具体查看以下这些函数: # 首先随机生成三组数据 # np.random.seed(1234)
# d1 = pd.Series(2*np.random.normal(size=100)+3)
# d1 = pd.Series(2*np.random.normal(size=100))
# print(d1)
18-09-27 pandas 学习02的更多相关文章
- Java——String类总结---18.09.27
1.String类 String类在java.lang包中,java使用String类创建一个字符串变量,字符串变量属于对象.java把String类声明的final类,不能有类.String类对象创 ...
- Java——自动生成30道四则运算---18.09.27
package chuti;import java.io.PrintWriter;import java.util.Scanner;import java.io.FileNotFoundExcepti ...
- Java——static关键字---18.09.27
static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但在Java语言中没有全局变量的概念. static关键字主要有两种作用: 一.为某特定数据类 ...
- Pandas学习(二)——双色球开奖数据分析
学习笔记汇总 Pandas学习(一)–数据的导入 pandas学习(二)–双色球数据分析 pandas学习(三)–NAB球员薪资分析 pandas学习(四)–数据的归一化 pandas学习(五)–pa ...
- 用 scikit-learn 和 pandas 学习线性回归
用 scikit-learn 和 pandas 学习线性回归¶ from https://www.cnblogs.com/pinard/p/6016029.html 就算是简单的算法,也需要跑通整 ...
- pandas学习(创建多层索引、数据重塑与轴向旋转)
pandas学习(创建多层索引.数据重塑与轴向旋转) 目录 创建多层索引 数据重塑与轴向旋转 创建多层索引 隐式构造 Series 最常见的方法是给DataFrame构造函数的index参数传递两个或 ...
- 【转】Pandas学习笔记(四)处理丢失值
Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...
- 用scikit-learn和pandas学习线性回归
对于想深入了解线性回归的童鞋,这里给出一个完整的例子,详细学完这个例子,对用scikit-learn来运行线性回归,评估模型不会有什么问题了. 1. 获取数据,定义问题 没有数据,当然没法研究机器学习 ...
- Python pandas学习总结
本来打算学习pandas模块,并写一个博客记录一下自己的学习,但是不知道怎么了,最近好像有点急功近利,就想把别人的东西复制过来,当心沉下来,自己自觉地将原本写满的pandas学习笔记删除了,这次打算写 ...
随机推荐
- android --------学习流程图
如何快速入门和进阶安卓开发,是很多技术小白的疑问. 大家都知道,Android开发要学的技能非常多,技术更新速度还快,但是总的来说:掌握最核心的技术,最规范的开发流程,成为专业.出色的安卓开发工程师也 ...
- leetcode-algorithms-2 Add Two Numbers
leetcode-algorithms-2 Add Two Numbers You are given two non-empty linked lists representing two non- ...
- js操作字符串的常用方法
使用 substring()或者slice() 函数:split() 功能:使用一个指定的分隔符把一个字符串分割存储到数组 例子: str=”jpg|bmp|gif|ico|png”; arr=the ...
- 【LeetCode】Permutation全排列
1. Next Permutation 实现C++的std::next_permutation函数,重新排列范围内的元素,返回按照 字典序 排列的下一个值较大的组合.若其已经是最大排列,则返回最小排列 ...
- 有关String的一些方法的使用
1.String字符串是引用数据类型. 2.String是常量,如果看到给String进行赋值的情况,是说明将该String的地址进行改变了. 3.String的一些常用的方法 toUpperCase ...
- iOS runtime实用篇--和常见崩溃say good-bye!
程序崩溃经历 其实在很早之前就想写这篇文章了,一直拖到现在. 程序崩溃经历1 我们公司做的是股票软件,但集成的是第三方的静态库(我们公司和第三方公司合作,他们提供股票的服务,我们付钱).平时开发测试的 ...
- VNC安装配置及连接(CentOS)
1.安装VNC yum install -y tigervnc-server #安装VNC服务端,一般执行此句即可yum groupinstall -y 'X Window System' 'Desk ...
- e2e 测试(1)
距离上一随笔,已经有一个月没有没写.到今天,刚刚好好,是学习e2e测试的一个月.今天有点时间可以总结一下这个月来的收获. 1.搭建e2e的测试环境 我是使用 Vue 构建项目,所以我也是通过Vue-c ...
- CAS5.3-下载安装
cas版本:cas5.3 环境准备:1.JDK8:2.Apache Maven:3.Apache Tomcat:4.git 1.通过git工具(本文使用的是TortoiseGit,也可用IDE或者gi ...
- bzoj1045
题解: 随便推一下公式 然后发现是中位数 代码: #include<bits/stdc++.h> using namespace std; ],n; long long sum; int ...