python数据分析

python数据分析之numpy

导包给包重命名

import numpy as np

数组的打印方式

a=np.array([1,2,3,4])
print(a)

l=[0,1,2,3]
a=np.array(l)
print(a)

a=np.array([1,2,3,4])
print(a)

生成全0数组:

np.zeros(6)
print(np.zeros(6))

修改数组的类型

a=a.astype('float')
a.fill(2.5)
print(a)

生成整数序列

//生成1-9每个数间隔为2数字,1-10左闭右开
a=np.arange(1,10,2)
print(a)

生成等差数列

//生成一到十之间,十个等差数
a=np.linspace(1,10,10)
print(a)

生成随机数

//生成随机数
a=np.random.randn(10)
print(a)
//生成随机整数,1到10,十个整数
a=np.random.randint(1,10,10)
print(a)

数组排序

sort函数

np.sort()

argsort返回从小到大的排列在数组中的索引位置:

order=np.argsort()

order

mv_name[order[0]]

求和

np.sum(mv_num)

最大值

np.max(mv_length)

最小值

np.max(mv_length)

均值

np.mean(mv_length)

标准差

np.std(mv——length)

相关系数矩阵

np.cov(mv_score,mv_length)

多维数组操作

数组形状

a=np.arange(6)

a.shape=2,3//形成两行三列的矩阵

 //与只对应的方法是reshape,但它不会修改原来数组的值,而是返回一个新的数组

a.reshape(2,3)

数组连接

有时我们徐亚将不同的数组按一定顺序连接起来

注意,这些数组要用()包括到一个元组中去。

除了给定的轴外,这些数组其他轴的长度必须是一样的

 numpy内置函数

a=np.array([-1,2,3,-2])

np.abs(a)

np.exp(a)

np.exp(a)

np.median(a)

np.cumsum(a)

python数据分析之pandas

pandas基本数据结构

pandas中有两种常用的基本结构

series

一维数组,与numpy中的一维array类似,二者与python基本的

数据结构list也很相近。series能保存不同种数据类型,字符串、Boolean值

数字等都能保存series中。

dataframe

二维的表格型数据结构。很多功能与R中的date.frame类似。可以DataFrame理解为Series的容器。以下的内容主要以DataFrame为主

pandas库的series类型

一维series可以用一维列表初始化:

默认情况下,series的下标都是数字(可以使用额外参数指定),类型是统一的

下标,列标,数据

下标使用index属性查看

列标使用columns属性查看

数据值使用values查看

pandas读取数据及数据操作

df=pd.read_excel(r '路径\文件名字')

df.head()

提取数据

df.loc[0:5]

 

 

 

 

处理异常值

异常值,即在数据集中存在不合理的值,又称离群点,比如年龄为-1

笔记本电脑重量为1吨等,都属于异常值

对于异常值,一般来说数量都会很少,在不影响整体数据分布情况下,我们直接删除就可以了

其他属性的异常值处理,我们会在格式转换部分,进一步讨论

数据保存

数据处理之后,然后将数据重新保存到movie_data.xlsx 

 数据格式转换

在做数据分析的时候,原始数据往往会因为各种各样的原因产生各种数据格式的问题

数据格式是我们非常需要注意的一点,数据格式错误往往造成很严重的后果

并且,很多异常值也是我们经过格式转换之后才会发现,对我们规整数据,清洗数据有着重要的作用

 

 

 

将年份转化整数格式报错

 

 

 

 

 基本统计分析

描述性统计

dataframe.describe():对dataframe中的数值型数据进行描述性统计

 

 

 平均数与中位数

 

 

 

 

 

 

Matplotlib基础

matplotlib是一个python的2D图像包,pyplot封装了很多画图的函数

导入相关的包:

 首先导包

import matplotlib.pyplot as plt
import numpy as np
plt.plot([1,2,3,4])//设置y轴
plt.ylabel('y')//设置y轴标签
plt.xlabel('x')//设置x轴标签

plt.show()//显示图

#基本用法
#plot函数基本的用法:
#指定x和y
#plt.plot(x,y)
#默认参数,x为0~N-1
#plt.plot(y)
#因此,在上面的例子中,我们没有给定x的值,所以默认值为[0,1,2,3]
#传递x和y:
plt.plot([1,2,3,4],[1,4,9,16])
plt.show()

plt.plot([1,2,3,4],[1,4,9,16],'ro') plt.show()

 

 显示范围

与MATLAB类似,这里可以使用axis函数指定坐标轴显示的范围:

plt.axis([xmin,xmax,ymin,ymax])

传入Numpy数组

之前我们传给plot的参数都是列表,事实上,向plot中传入numpy数组时更常用的做法。事实上,如果传入的是列表,matplotlib会在内部将它转化成数组在进行处理:

在一个图里面画多条线

t=np.arange(0.,5.,0.2)
plt.plot(t,t,'r--',
    t,t**2,'bs',
         t,t**3,'g*'
)

 传入多组数据

事实上,在上面的例子中,我们不仅仅向plot函数传入了数组,还传入了多组(x,yformat_str)参数,它们在同一张图上显示,这意味着我们不需要使用多个plot函数来画多组数组,只需要可以将这些组合放到一个plot函数中去即可

线条属性

之前提到,我们可以用字符串控制线条的属性,事实上还可以通过关键词来改变线条的性质,例如linwidth可以改变线条的宽度,color可以改变线条的颜色

x=np.linspace(-np.pi,np.pi)//-π到π
y=np.sin(x)//sinx函数
plt.plot(x,y,linewidth=4.0,color='r')//设置粗细与颜色
plt.show()

 使用plt.plot()的返回值来设置线条属性

plot函数返回一个line2D对象组成的列表,每个对象代表输入的一对组合,例如:

line1,line2为两个Line2D对象

line1,line2=plt.plot(x1,x2,y1,y2)

返回3个Line2D对象组成的列表

lines=plt.plot(x1,y1,x2,y2,x3,y3)

我们可以使用这个返回值对线条属性进行设置;

x=np.linspace(-np.pi,np.pi)
y=np.sin(x)
line1,line2=plt.plot(x,y,'r-',x,y+1,'g-')//绘图与线条属性
line1.set_antialiased(False)
plt.show()

plt.setp()修改线条性质

x=np.linspace(-np.pi,np.pi)
y=np.sin(x)
line=plt.plot(x,y)
plt.setp(line,color='g',linewidth=4)//设置属性
plt.show()

更方便的做法是使用plt的setp函数

子图

firgure()函数会产生一个指定编号为num的图:

plt.figure(num)

这里,figure(1)其实是可以省略的,因为默认情况下plt会自动产生一幅图像

使用subplot可以在一幅图中生成多个子图,其参数为;

plt.subplot(numrows,numcols,fignum)

当numrows*numols<10时,中间的逗号可以省略,因此plt.subplot(211)就相当于

plt.subplot(2.1.1)

2.电影数据绘图

在了解绘图的基础知识之后,我们可以对电影数据进行可视化分析

(1)绘制每个国家或地区的电影数量的柱状图

柱状图,是一种以长方形的长度为 变量的表达图形的统计报告图

由一系列高度不等的纵向条纹表示数据的情况,用来比较两个或以上的

价值(不同时间或者不同条件),只有一个变量,通常利用于较小的数据集分析。

柱状图亦可横向排列,或用多维方式表达

(2)绘制每年上映的电影数量的曲线图

曲线图有称折线图,是利用曲线的升降变化来表示被研究现象发展变化趋势的一种图像,它

在分析研究社会经济现象的发展变化、依存关系方面具有重要作用

绘制曲线图时,如果是某一现象的时间指标应将时间绘在坐标的横轴上,指标在坐标的纵轴上

如果是两个现象依存的显示,可以将表示原因 的指标绘在横 轴上,表示

结果的指标绘在纵轴上,同时还应注意整个图形的长宽比例

plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
df=pd.read_excel(r'D:\自带 重要文件\桌面\豆瓣电影数据.xlsx')#导入数据
print(df[:5])
data=df['产地'].value_counts()#统计每个产地出现的次数
print(data)
x=data.index#搜索的数据即产地
y=data.values#得到的值
plt.figure(figsize=(10,6))#大小
plt.bar(x,y,color='g')#颜色
plt.title('各个国家或地区电影数量',fontsize=20)#标题
plt.xlabel('国家或地区',fontsize=18)#x轴标题
plt.ylabel('电影数量',fontsize=18)#y轴的标题
plt.tick_params(labelsize=14)
plt.xticks(rotation=90)#x轴90度的旋转
#在柱子上显示值
for a,b in zip(x,y):
 plt.text(a,b+10,b,ha='center',fontsize=10)
 plt.grid()#加网格线
plt.show()

(2)绘制每年上映的电影数量的曲线图

曲线图又称折线图,降变化来表示被研究现象 发展变化趋势的一种图形,它在分析研究经济现象的发展变化、依存关系等方面具有重要作用。

绘制曲线图时,如果是某一现象的时间指标应将时间绘在坐标的横轴上,指标绘在坐标的纵轴上,如果是两个现象依存关系的显示,可以将表示原因的指标绘在横轴上,表示结果的指标绘在纵轴上,同时还应注意整个图形的长宽比例

 出现这种错误要可能是整型和字符串混用,将年份全部转换成字符串类型

如下代码

df['年代']=df['年代'].astype('str')

显示所有列

pd.set_option('display.max_columns', None)

显示所有行

pd.set_option('display.max_rows', None)

查找年代为34943的那一行

print(df[df['年代']=='34943'])

替换34943年代

方法1:df.replace({"年代":{34943:2000}},inplace=True)
方法2:df.loc[df["年代"].isin([34943]),"年代"]=2000

成功运行

df['年代']=df['年代'].astype('str')
data=df['年代'].value_counts()
data=data.sort_index()
pd.set_option('display.max_rows', None)
print(data)
plt.show()
df['年代']=df['年代'].astype('str')
data=df['年代'].value_counts()
data=data.sort_index()[:-1]
pd.set_option('display.max_rows', None)

print(df[df['年代']=='2008'])
print(data)
x=data.index
y=data.values
plt.plot(x,y,color='b')
plt.title('每年电影数量',fontsize=20)
plt.ylabel('电影数量',fontsize=18)
plt.xlabel('年份',fontsize=18)
plt.xticks(rotation=90)
for a,b in zip(x[::10],y[::10]):
    plt.text(a,b+10,b,ha='center',va='bottom',fontsize=10)
plt.show()

 双轴图的画法

根据电影时长和电影评分绘制散点图

plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False#防止乱码
df=pd.read_excel(r'D:\自带 重要文件\桌面\豆瓣电影数据.xlsx')#读取数据
import matplotlib.mlab as mlab
from scipy.stats import norm
fig=plt.figure(figsize=(10,8))#生成一个10x8的空白图
ax1=fig.add_subplot(111)#一行一列的图
n,bins,patches=ax1.hist(df['评分'],bins=100,color='m')#n直方图向量,bins区间范围,patches每个bins包含的数据
ax1.set_ylabel('电影数量',fontsize=15)
ax1.set_xlabel('评分',fontsize=15)
ax1.set_title('频率分布图',fontsize=20)
y=norm.pdf(bins,df['评分'].mean(),df['评分'].std())
ax2=ax1.twinx()
ax2.plot(bins,y,'b--')
ax2.set_ylabel('概率分布',fontsize=15)
fig.tight_layout()
plt.show()

 5.根据电影时长和电影评分绘制散点图

用两组数据构成多个坐标点,考察坐标点的分布,判断两个变量之间是否村子某种关联或总结坐标

点的分布模式。散点图将序列为一组点。值由点在图表中的位置表示。类别由图表中的不同标记表示。散点图通常用于比较跨类型的聚合数据

由于我们的数据量过大,所以画出来的图非常杂

可以发现,大部分的电影时长还是集中在100附近,评分大多在7分左右

marker属性

设置散点的形状

df = pd.read_excel(r'D:\自带 重要文件\桌面\豆瓣电影数据.xlsx')  # 读取数据
df['时长']=df['时长'].astype('str')#转换成字符串
df['评分']=df['评分'].astype('str')
x=df['时长'][::100]#
y=df['评分'][::100]#间隔100取一个
# t1=np.arange(11.0,2.0,1)
# t2=np.arange(50,450,50)
plt.figure(figsize=(10,8))

# plt.xticks(t2)
# plt.yticks(t1)
plt.scatter(x,y)

# plt.legend()
plt.title('电影时长与评分散点图',fontsize=20)
plt.xlabel('时长',fontsize=10)
plt.ylabel('评分',fontsize=10)
# plt.xlim(xmax=1000,xmin=0)
# plt.ylim(ymax=11,ymin=0)
plt.xticks(rotation=90)#x轴90度的旋转

plt.show()

 

 6.绘制各个地方的评分箱形图

箱形图又称为盒须图,盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图

。因形状如箱子而得名。在各种领域也经常使用,常见于品质管理。它2主要用于反映原始数据分布的特征,还可以进行多组数据分布特征的比较。箱线图的绘制方法是:先找出一组数据的中位数、两个四分位数、上下边缘先;然后,链接两个四分位数画出箱子;再将上下边缘线与箱子相连接。中位数在箱子中间

 

 一般计算过程

(1)计算上四分位数(Q3),中位数,下四分位数(Q1)

(2)计算上四分位数和下四分位数之间的差值,即四分位数差(Q3-Q1)

(3)绘制箱线图的上下范围,上限为上四分位数,下限为下四分位数。在箱子内部中位数的位置绘制横线

(4)大于四分位数1.5倍数四分位数差的值,或者小于下四分位数1.5倍四分位数差的值,划为异常值

(5)异常值之外,最靠近上边缘和下边缘的两个值处,划横线,作为箱线图的触须

(6)极端异常值,即超出四分位数差3倍数距离的异常值,用实心点表示;较为温和异常值,

即处于1.5倍数-3倍四分位数差之间的异常值,用空心点表示

(7)为箱线图添加名称,数轴等

 

df = pd.read_excel(r'D:\自带 重要文件\桌面\豆瓣电影数据.xlsx')  # 读取数据
data=df[df.产地=='美国']['评分']
plt.figure(figsize=(10,6))
plt.boxplot(data,whis=2,flierprops={'marker':'o','markerfacecolor':'r','color':'k'},patch_artist=True,boxprops={'color':'k','facecolor':'#9999ff'})
plt.title('美国电影评分',fontsize=20)



plt.show()

 多组数据箱线图

#多组数据箱线图

data1=df[df.产地=='中国大陆']['评分']
data2=df[df.产地=='日本']['评分']
data3=df[df.产地=='中国香港']['评分']
data4=df[df.产地=='英国']['评分']
data5=df[df.产地=='法国']['评分']
plt.figure(figsize=(12,8))
plt.boxplot([data1,data2,data3,data4,data5],labels=['中国大陆','日本','中国香港','英国','法国'],vert=False)#vert=False让图横过来
ax=plt.gca()
ax.patch.set_facecolor('gray')
ax.patch.set_alpha(0.3)
plt.title('电影评分箱线图',fontsize=20)

plt.show()

 7.相关系数矩阵图--热力图

pandas本身也封装了画图函数

我们可以画出各个属性之间的散点图,对角线是分布图

现在我们来画电影时长,投票人数,评分的一个相关系数矩阵图

seaborn是一个精简的python库,可以创建具有统计意义的图表,能理解pandas的DataFrame类型

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值