python数据分析

什么是数据分析?
数据分析是用适当的方法对收集来的大量数据进行分析,帮助人们作出判断,以便采取适当行动。
数据分析的流程:
提出问题–>准备数据–>分析数据–>获得结论–>成果可视化

1、matplotlib

matplotlib
1、能将数据进行可视化,更直观的呈现
2、使数据更加客观,更具说服力

绘制表格:

from matplotlib import pyplot as plt
from matplotlib import font_manager

#设置字体
my_font = font_manager.FontProperties(fname="c:\windows\fonts\simsun.ttc")

y_1 = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
y_2 = [1,0,3,1,2,2,3,3,2,1,2,1,1,1,1,1,1,1,1,1]

x = range(11,31)

#设置图形答案大小
plt.figure(figsize=(20,8),dpi=80)

#color线条颜色,linestyle线条风格,linewidth线条粗细,alpha透明度
#label显示图例
plt.plot(x,y_1,label="自己",color="#F08080")
plt.plot(x,y_2,label="同桌",color="#DB7093",linestyle="--")

#设置x轴刻度
_xtick_labels = ["{}岁".format(i) for i in x ]
plt.xticks(x,_xtick_labels,fontproperties=my_font)

#绘制网格
plt.grid(alpha=0.4,linestyle=':')

#添加图列,prop指定图例的字体,loc指图例的位置
plt.legend(prop=my_font,loc="upper left")

#添加描述信息
plt.xlabel("年龄",fontproperties=my_font)
plt.ylabel("数量",fontproperties=my_font)
plt.title("变化",fontproperties=my_font)

#保存图片(矢量图)
plt.savefig("./sig_size.png")

#展示
plt.show()

绘制折线图:

from matplotlib import pyplot as plt
from matplotlib import font_manager

my_font = font_manager.FontProperties(fname="c:/windows/fonts/simsun.ttc")

y_1 = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
y_2 = [1,0,3,1,2,2,3,3,2,1,2,1,1,1,1,1,1,1,1,1]

x = range(11,31)

#设置图形答案大小
plt.figure(figsize=(20,8),dpi=80)

#color线条颜色,linestyle线条风格,linewidth线条粗细,alpha透明度
#label显示图例
plt.plot(x,y_1,label="自己",color="#F08080")
plt.plot(x,y_2,label="同桌",color="#DB7093",linestyle="--")

#设置x轴刻度
_xtick_labels = ["{}岁".format(i) for i in x ]
plt.xticks(x,_xtick_labels,fontproperties=my_font)

#绘制网格
plt.grid(alpha=0.4,linestyle=':')

#添加图列,prop指定图例的字体,loc指图例的位置
plt.legend(prop=my_font,loc="upper left")

#添加描述信息
plt.xlabel("年龄",fontproperties=my_font)
plt.ylabel("数量",fontproperties=my_font)
plt.title("变化",fontproperties=my_font)

#保存图片(矢量图)
plt.savefig("./sig_size.png")

#展示
plt.show()

绘制散点图:

from matplotlib import pyplot as plt
from matplotlib import font_manager

my_font = font_manager.FontProperties(fname="c:/windows/fonts/simsun.ttc")
y_3 = [11,17,16,11,12,11,12,6,6,7,8,9,12,15,14,17,18,21,16,17,20,14,15,15,15,19,21,22,22,22,23]
y_10 = [26,26,28,19,21,17,16,19,18,20,20,19,22,23,17,20,21,20,22,15,11,15,5,13,17,10,11,13,12,13,6]

x_3 = range(1,32)
x_10 = range(51,82)

plt.figure(figsize=(20,8),dpi=80)

#绘制散点图
plt.scatter(x_3,y_3,label="三月份")
plt.scatter(x_10,y_10,label="十月份")

#调整x轴的刻度
_x = list(x_3)+list(x_10)
_xtick_labels = ["3月{}日".format(i) for i in x_3]
_xtick_labels += ["10月{}日".format(i-50) for i in x_10]
plt.xticks(_x[::3],_xtick_labels[::3],fontproperties=my_font,rotation=45)

#添加图例
plt.legend(loc="upper left",prop=my_font)

#添加描述信息
plt.xlabel("时间",fontproperties=my_font)
plt.ylabel("温度",fontproperties=my_font)

plt.show()

绘制条形图:

from matplotlib import pyplot as plt
from matplotlib import font_manager

my_font = font_manager.FontProperties(fname="c:/windows/fonts/simsun.ttc")

a = ["战狼2","速度与激情8","功夫瑜伽","西游伏妖篇","变形金刚5:\n最后的骑士","摔跤吧!爸爸","加勒比海盗5:死无对证","金刚:骷髅岛","极限特工:终极回归","生化危机6:终章","乘风破浪","神偷奶爸3","智取威虎山","大闹天竺","金刚狼3:殊死一战","蜘蛛侠:英雄归来","悟空传","银河护卫队2","情圣","新木乃伊",]
b=[56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23]

#设置图形大小
plt.figure(figsize=(10,5),dpi=80)
#绘制条形图
plt.bar(range(len(a)),b,width=0.3,color="orange")
#设置字符串到x轴
plt.xticks(range(len(a)),a,fontproperties=my_font,rotation=45)
#设置网格
plt.grid(alpha=0.3)

plt.show()

绘制条形图:matplotlib.hist(data,bins,normed)

matplotlib使用的流程总结:
1.明确问题
2.选择图形的呈现方式
3.准备数据
4.绘图和图形完善

2、numpy

numpy:一个在Python中做科学计算的基础库,重在数值计算,也是大部分PYTHON科学计算库的基础库,多用于在大型、多维数组上执行数值运算。

创建数组:

import numpy as np
a = np.array([1,2,3,4,5])
b = np.array(range(1,6))
c = np.arange(1,6)

np.arange的用法:arange([start,] stop[,step],dtype=None)

numpy中常见的更多数据类型:在这里插入图片描述
修改数据类型:
print(a.astype(“i1”))
print(a.astype(np.int8))

保留二位小数:
np.round(b,2)

查看数组的形状:
print(a.shape)

修改数组的形状:
print(a.reshape(3,4))

把数组转化为一维度数据:
print(a.flatten())

广播原则:
如果两个数组的后缘维度(即从末尾开始算起的维度)的轴长度相符或其中一方的长度为1,则认为它们是广播兼容的。
广播会在缺少和长度为1的维度上进行。

数组的运算:二个同维度的数组加减乘除,数组数据一一对应进行运算。
一个数组与数字进行运算,数组中每个值都进行数值运算。
不同维度的数组进行运算应遵循广播原则,否则不能进行运算。

二维数组的轴:
在这里插入图片描述
三维数组的轴: 在这里插入图片描述
numpy读取数据:

np.loadtxt(fname,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False)

在这里插入图片描述
numpy中的转置:
t.swapaxes()
t.transpose()
t.T

numpy索引和切片:

import numpy as np

us_file_path = "D:/python/python/Python数据分析/code/day03/US_video_data_numbers.csv"
uk_file_path = "D:/python/python/Python数据分析/code/day03/GB_video_data_numbers.csv"

t2 = np.loadtxt(us_file_path,delimiter=",",dtype="int")
print(t2)
print("-"*100)

#取行 索引从0开始
#print(t2[2])

#取连续的多行
#print(t2[2:])

#取不连续的多行
# print(t2[[2,8,10]])

#print(t2[1,:])
#print(t2[2:,:])
#print(t2[[0,2,1],:])

#取列
#print(t2[:,0])

#取连续的多列
# print(t2[:,2:])

#取不连续的多列
# print(t2[:,[0,2]])

#去行和列,取第3行,第四列的值
# a = t2[2,3]
# print(a)
# print(type(a))

#取多行和多列,取第3行到第五行,第2列到第4列的结果
#去的是行和列交叉点的位置
b = t2[2:5,1:4]
print(b)

#取多个不相邻的点
#选出来的结果是(0,0) (2,1) (2,3)
c = t2[[0,2,2],[0,1,3]]
print(c)

#水平连接
#np.hstack(b,c)
#竖直连接
#np.vstack(b,c)

#行交换
b[[1,2],:] = b[[2,1],:]
#列交换
b[:,[0,2]] = b[:,[2,0]]

numpy中的clip(裁剪):
裁剪:t.clip(10,18) 大于10的替换为10,大于18的替换为18

numpy中的nan和inf:
nan:表示不是一个数字。
inf:表示无穷大。

numpy中常用统计函数:
在这里插入图片描述
获取最大值最小值的位置:
np.argmax(t,axis=0)
np.argmin(t,axis=1)
创建一个全0的数组: np.zeros((3,4))
创建一个全1的数组:np.ones((3,4))
创建一个对角线为1的正方形数组(方阵):np.eye(3)

numpy生成随机数:在这里插入图片描述
numpy的注意点copy和view:
1、a=b 完全不复制,a和b相互影响
2、a = b[:],视图的操作,一种切片,会创建新的对象a,但是a的数据完全由b保管,他们两个的数据变化是一致的,
3、a = b.copy(),复制,a和b互不影响

3、pandas

numpy能够帮助我们处理数值,但是pandas除了处理数值之外(基于numpy),还能够帮助我们处理其他类型的数据。

Series 一维,带标签数组
DataFrame 二维,Series容器

pandas之Series创建:
t = pd.Series(np.arange(10),index=list(string.ascii_uppercase[:10]))在这里插入图片描述
pandas之Series切片和索引:在这里插入图片描述
pandas之读取外部数据:
1.pd. read_csv
2.pd.read_sql(sql_sentence,connection)

pandas之DataFrame:
DataFrame对象既有行索引,又有列索引
行索引,表明不同行,横向索引,叫index,0轴,axis=0
列索引,表名不同列,纵向索引,叫columns,1轴,axis=1
在这里插入图片描述在这里插入图片描述
df.loc 通过标签索引行数据
df.iloc 通过位置获取行数据
join:默认情况下它是把行索引相同的数据合并到一起
merge:按照指定的列把数据按照一定的方式合并到一起
数据的分组和聚合:df.groupby(by=“columns_name”)

获取index:df.index
指定index :df.index = [‘x’,‘y’]
重新设置index : df.reindex(list(“abcedf”))
指定某一列作为index :df.set_index(“Country”,drop=False)
返回index的唯一值:df.set_index(“Country”).index.unique()

pandas中的时间序列:pd.date_range(start=None, end=None, periods=None, freq=‘D’)
时间字符串转化为时间序列:pd.to_datetime
频率的缩写:
在这里插入图片描述

重采样:指的是将时间序列从一个频率转化为另一个频率进行处理的过程,将高频率数据转化为低频率数据为降采样,低频率转化为高频率为升采样。
pandas提供了一个resample的方法来帮助我们实现频率转化。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值