前言

本人0基础,本科专业能源与动力工程,但不感兴趣,因此自学数据分析相关的内容,这知识其中一本书,后面有其他书,会慢慢把学过的书籍和相关内容分享出来。

第一章 python相关环境

python环境搭建相关的操作:

  1. python环境搭建
conda create --name xxx python=3 anaconda #创建python版本为3的环境,并具备anaconda的所有包
conda info --envs   #查看环境
activate xxx    #激活环境
deactivate xxx    #退出环境
conda remove --name xxx --all   #删除一个已有的环境

2.包的安装和卸载

conda install xxx 
conda remove xxx
pip install xxx
pip unistall xxx 

第二章 Numpy

  • 函数
    arange 类似内置的range函数
    ones 创建全为1的数组
    ones_like 以另一个数组为参考,生成形状和dtype相同的全为1的数组
    zeros、zeros_like 与上两个相似
    empty、empty_like 同上
    eye、identity 创建正方的N*N单位矩阵
    flatten/ravel 将数组合并转化为一维数组
  • 数组对象属性
    .ndim 秩,即数据轴的个数
    .shape 数组的维度
    .size 元素的总个数
    .dtype 数据类型
    .itemsize 数组中每个元素的字节大小
  • 数组类型与变换
    dtype
    astype astype(‘int’)
    数组重塑、合并、拆分 reshape、concatenate/vstack(竖直拼接)/hstack(水平拼接)、split
arr1=np.arange(0,12).reshape(3,4)
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
arr2=np.arange(12,24).reshape(3,4)
array([[12, 13, 14, 15],
       [16, 17, 18, 19],
       [20, 21, 22, 23]])
np.concatenate([arr1,arr2],axis=0)      
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15],
       [16, 17, 18, 19],
       [20, 21, 22, 23]])
np.split(arr1,[2,4])  
[array([[0, 1, 2, 3],
        [4, 5, 6, 7]]),
 array([[ 8,  9, 10, 11]]),
 array([], shape=(0, 4), dtype=int32)]   
  
T/transpose((1,0))			#转置
  • 数组运算
    sum 求和
    mean 算数平均数
    std、var 标准差和方差
    min、max 最小值最大值
    argmin、argmax 最小和最大元素的索引
    cumsum 所有元素的累计和
    cumprod 所有元素的累计积

第三章 Pandas

  • 给series命名以及给索引列命名
obj4.name = 'math'
obj4.index.name = 'students'
students
张三    92
李四    78
王五    68
小明    82
Name: math, dtype: int64
  • 给dataframe的行、列索引命名
df.index.name = 'id'
df.columns.name = 'std_info'
  • 修改索引
    元数据
data = {
    'name':['张三', '李四', '王五', '小明'],
    'grade':[68, 78, 63, 92]
}
df = DataFrame(data)
df

结果:在这里插入图片描述

df2 = df.sort_values(by='grade')
df2

df2

df4 = df2.reset_index(drop=True)
df4

df4

  • loc和iloc索引
data = {
   'name':['张三', '李四', '王五', '小明'],
   'sex':['female', 'female', 'male', 'male'],
   'year':[2001, 2001, 2003, 2002],
   'city':['北京', '上海', '广州', '北京']
}
df = DataFrame(data)
df=df.set_index('name')

在这里插入图片描述

df2.loc['张三']         #loc通过索引查找
city        北京
sex     female
year      2001
Name: 张三, dtype: object
df2.iloc[0]             #iloc通过数字索引查找
city        北京
sex     female
year      2001
Name: 张三, dtype: object
df2[(df2['sex'] == 'female') & (df2['city'] == '北京')]

在这里插入图片描述

  • 添加行、删除行
df = df.append(new_data,ignore_index=True) #忽略索引值
df

new_df = df.drop(2)  #删除行
new_df
new_df = new_df.drop('class',axis=1)  #删除列
new_df

在这里插入图片描述

  • 函数映射和应用
    map 将函数套用到series的每个元素上
    apply 将函数套用到dataframe的行与列上
    applymap 将函数套用到dataframe的每个元素上
  • 排序、去重
sort_index(ascending=False)    #升序
sort_values(by='')
.unique()              #去重

第四章 文本读取与存储

read_csv 从文件中加载带分隔符的数据,默认分隔符为逗号
read_table 从文件中加载带分隔符的数据,默认分隔符为制表符

#默认情况下会将第一行作为索引行,所以应该要取消第一行作为标题行
df = pd.read_csv(open('H:/python数据分析/数据/ch4ex3.csv'),header=None)
  • txt文件读取
read_table('file_path',sep='')   #先用!type查看分隔的字符是什么,再输入sep=''进行分割

-输出为csv文件

df.to_csv('文件名')
  • json、excel文件读取
df.read_json('')
df.read_excel('',sheet_name='')
  • 连接数据库
import pandas as pd
import pymysql
conn = pymysql.connect(
    host='localhost', 
    user='root', 
    passwd='123456',         #账户密码
    db='py-sql', )            #库的名称
df = pd.read_sql('select * from ch4ex9',conn)
df

第五章 数据清理与整理

  • fillna 填充缺失值
df2.fillna({1:6,3:0})      #将第一列和第三列的缺失值填充为6和3
df2.fillna(method='ffill')   #往上填充,即(2,0)的NaN会填充为4,(2,2)会填充为6
  • 检测重复值
df1.duplicated()
0    False
1    Fals
2     True       #True代表出现了重复
3    False
dtype: bool
df1.drop_duplicates()
  • 替换值
df.replace('*','#')  #将*替换成#
df1.replace({'':'不详',2001:2002})   #多个值替换,跟下面的一样,都是将空格替换成不详,2001替换成2002
df1.replace(['',2001],['不详',2002])

第六章 数据分组聚合

  • groupby
聚合函数		mean、sum、agg
数据透视表	.pivot_table(values='**,index='**',columns='**',aggfunc='**',margins=True)
交叉表		cross_table = pd.crosstab(index=tab['***'],columns=tab['**'])

因为第七章到第九章的内容我学过了,所以那时候就没有记笔记了哈哈哈哈,记的笔记也相对精炼,没有全部列出

第十章 时间序列

from datetime import datetime
stamp = datetime(2018, 5, 12)
stamp
datetime.datetime(2018, 5, 12, 0, 0)
str(stamp)
'2018-05-12 00:00:00'
stamp.strftime('%Y/%m/%d')
'2018/05/12'
  • 时间序列也可以作为索引index
  • pd的时间序列
s
2018-04-01    0
2018-04-02    1
2018-04-03    2
2018-04-04    3
2018-04-05    4
Freq: D, dtype: int32

s.shift(2)
2018-04-01    NaN
2018-04-02    NaN
2018-04-03    0.0
2018-04-04    1.0
2018-04-05    2.0
Freq: D, dtype: float64

s.shift(-2)
2018-04-01    2.0
2018-04-02    3.0
2018-04-03    4.0
2018-04-04    NaN
2018-04-05    NaN
Freq: D, dtype: float64

s.shift(2,freq='D')
2018-04-03    0
2018-04-04    1
2018-04-05    2
2018-04-06    3
2018-04-07    4
Freq: D, dtype: int32

Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐