lusys 发表于 2023-11-10 10:46:54

怎么利用 Python 进行数据分析?

怎么利用 Python 进行数据分析?

快活林的猪 发表于 2023-11-10 10:47:23

Python具有强大的数据分析和处理能力,使用Python做数据分析需掌握pandas、matplotlib、seaborn这三个Python包,掌握Python数据分析知识,可帮助我们更好地发现数据背后的规律和趋势,为业务决策提供支持。
1.使用Pandas数据读取

首先,导入pandas库,pandas库有强大的数据处理能力,使用read_excel函数可导入数据,只要导入文件路径即可导入数据,head可以预览前5行数据。
import pandas as pd

df=pd.read_excel(r'C:\Desktop\电商销售数据-23年8月.xlsx')
df.head()#预览前5行数据
http://picx.zhimg.com/v2-320f16a0cda5fc8c38956df5701dbcbc_r.jpg?source=1def8aca
info函数可以看各个字段的信息,包括非空值计数,数据类型,比如,这里的日期为日期型数据,区域为字符型数据,客户年龄为数值型数据。
df.info()#数据信息预览
http://pic1.zhimg.com/v2-8ae04156a68d66da3078efd69494b513_r.jpg?source=1def8aca
使用describe函数对数据进行描述统计,描述统计内容包括计数、平均值、标准差、最小值、最大值等,比如对客户年龄进行描述统计,平均客户年龄为42岁,年龄最小的客户为22岁,年龄最大的客户为62岁。
df.describe()#数据描述统计
http://pic1.zhimg.com/v2-8e746f1448b9927c296878d85740b3e3_r.jpg?source=1def8aca
2.使用Pandas数据排序

sort_values函数可用于数据排序,by导入排序的数据列,默认排序是升序排序。
df.sort_values(by='销售额',inplace=True)#默认升序排序
df
http://pica.zhimg.com/v2-18d65cf966952dbd97ec8bc474a99b58_r.jpg?source=1def8aca
ascending=False参数可以降序排列。
df.sort_values(by='销售额',inplace=True,ascending=False)#降序排序
df
http://pic1.zhimg.com/v2-35cf15b7dd660fd426d53df1188b340b_r.jpg?source=1def8aca
如果要自定义排序,比如商品品类升序排序,销售额降序排序,by导入自定义数据列,ascending设置参数,True升序排序,False降序排序。
df.sort_values(by=['商品品类','销售额'],ascending=,inplace=True)#自定义排序
df
http://pica.zhimg.com/v2-d808fdca6ae24ce54baebdb516fe1ee0_r.jpg?source=1def8aca
3.使用Pandas数据过滤

数据筛选使用数据框[]筛选,数据框里面写条件用于数据筛选,&当条件均满足时筛选,==满足特定条件筛选,这里表示筛选客户性别是男且客户年龄大于60的数据。
df[(df['客户性别']=='男')&(df['客户年龄']>60)]#数据筛选&与
http://pica.zhimg.com/v2-16c2f167f92d6f20d2d6684846aca923_r.jpg?source=1def8aca
下面筛选区域是“西北-甘肃省-白银”或者商品品类是“电脑硬件”的数据,& 当条件均满足时筛选,| 满足其一条件时筛选数据。
df[(df['区域']=='西北-甘肃省-白银')|(df['商品品类']=='电脑硬件')]#数据筛选|或
http://pic1.zhimg.com/v2-53c989a972a140802c12bcfbd04d34d1_r.jpg?source=1def8aca
isin可筛选特定标签的数据,()内写具体的筛选标签即可,比如下面筛选特定订单号的数据。
df.isin(['10021296335','10021669688','10021250896','10021434444','10021412817'])]
http://picx.zhimg.com/v2-5d466b623f496bd1089f50c9bf2053bd_r.jpg?source=1def8aca
看到这里是不是觉得,使用pandas仅需要几行代码即可实现复杂的Excel数据操作,当然,这仅仅是pandas功能中的很小的一部分,如果要加强学习pandas,建议跟着老师系统性地进行学习,推荐知乎知学堂的数据分析课程,有专业的老师指导你深入学习数据分析,并借助企业级案例,让你对数据分析的应用有更好的理解,感兴趣戳链接即可学习~
4.使用Pandas数据拆分

通过str.split方法对列中的数据进行拆分,expand参数设置为True,将返回包含拆分后的数据的DataFrame对象,如下将区域拆分为“省份”和“城市”两列。
df_split=df['区域'].str.split(pat='-',expand=True)#数据拆分

df['区域']=df_split.iloc[:,0]
df['省份']=df_split.iloc[:,1]
df['城市']=df_split.iloc[:,2]

df
http://pica.zhimg.com/v2-657d2061ead907c2e2aca596ce6a9265_r.jpg?source=1def8aca
5.使用Pandas统计运算

对数据进行统计运算,count用于计数,比如这里对订单号计数,计数结果有7409单。
df['订单号'].count()#计数7409
如果对商品品类非重复计数,可以先使用unique返回非重复的列表,然后使用len对列表计数,返回结果商品品类有8个非重复值。
len(df['商品品类'].unique())#非重复计数8
对销售数求和,sum用于求和,这里结果显示销售数总数为48354个。
df['销售数'].sum()#求和48354
对每一个商品品类的订单数计数,使用groupby分组计数,即可得到每一个商品品类的订单数。
df.groupby(['商品品类'])['订单号'].count().reset_index()#分组计数
http://pica.zhimg.com/50/v2-9214003525f861d31e58c830db918b1f_720w.jpg?source=1def8aca
6.使用Python数据作图

Python中的matplotlib和seaborn库有强大的数据可视化功能,对各个区域的销售数计数,导入matplotlib包,传入销售数据列,并对具体的图表参数进行设置,可得出华南区域的销售数占比最大为36.3%,西南区域的销售数占比最小为3.1%。
import matplotlib.pyplot as plt
import matplotlib.style as psl

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

psl.use('ggplot')

df_QY=df.groupby(['区域'])['销售数'].count().reset_index()

#饼图
labels = df_QY['区域'].tolist()
explode = # 用于突出显示数据
df_QY['销售数'].plot(kind='pie',figsize=(9,6),
                         autopct='%.1f%%',#数据标签
                         labels=labels,
                         startangle=260, #初始角度
                         explode=explode, # 突出显示数据
                         pctdistance=0.87,# 设置百分比标签与圆心的距离
                         textprops = {'fontsize':12, 'color':'k'}, # 设置文本标签的属性值
                        )
plt.title("各区域销售数占比")

plt.show()
http://pic1.zhimg.com/50/v2-e344fb1a46cc4be68bc179f9a21b3705_720w.jpg?source=1def8aca
对利润做箱线图,使用boxplot函数,并对箱线图图表的参数进行设置,可得出利润的数据分布情况,箱线图中的大多数利润数据都超过了箱线图的上下限。
import matplotlib.pyplot as plt
import matplotlib.style as psl

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

psl.use('ggplot')
plt.title('利润箱线图')

df_XB=df=='西北']

#箱线图
plt.boxplot(x=df_XB['利润'],#指定绘制箱线图的数据
            whis=1.5,#指定1.5倍的四分位数差
            widths=0.1,#指定箱线图中箱子的宽度为0.3
            showmeans=True,#显示均值
            #patch_artist=True,#填充箱子的颜色
            #boxprops={'facecolor':'RoyalBlue'},#指定箱子的填充色为宝蓝色
            flierprops={'markerfacecolor':'red','markeredgecolor':'red','markersize':3},#指定异常值的填充色、边框色和大小
            meanprops={'marker':'h','markerfacecolor':'black','markersize':8},#指定中位数的标记符号(虚线)和颜色
            medianprops={'linestyle':'--','color':'orange'},#指定均值点的标记符号(六边形)、填充色和大小
            labels=['西北']
         )

plt.show()
http://picx.zhimg.com/50/v2-503c5640580c7e44c8f8cea8efaa9c84_720w.jpg?source=1def8aca
对销售数做折线图,导入seaborn库,日期列做为X轴,销售数作为Y轴,由折线图可以看到销售数随日期的波动变化趋势。
import seaborn as sns
import matplotlib.pyplot as plt   

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

plt.figure(figsize=(10,6))

# 使用Seaborn绘制折线图
sns.lineplot(data=df, x='日期', y='销售数', color='blue')

# 设置图表标题和轴标签
plt.title('销售数折线图')
plt.xlabel('日期')
plt.ylabel('销售额')

# 显示图形
plt.show()
http://picx.zhimg.com/v2-663b0ae86aa5121dc98298888466eb02_r.jpg?source=1def8aca
对商品品类做词云图进行展示,wordcloud库可专门做词云图,通过使用字典统计商品类别数量,创建词云对象后,使用matplotlib绘制词云图,由词云图可以看出床品件套的品类最多,办公家具的品类最少。
from wordcloud import WordCloud
import matplotlib.pyplot as plt

# 商品类别列表
product_categories = df['商品品类'].tolist()
   
# 使用字典统计商品类别数量
category_counts = dict()
for category in product_categories:
    if category in category_counts:
      category_counts += 1
    else:
      category_counts = 1

#创建词云对象
wordcloud = WordCloud(font_path='simhei.ttf', background_color='white').generate_from_frequencies(category_counts)

# 使用matplotlib绘制词云图
plt.figure(figsize=(9, 6))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")

plt.show()
http://picx.zhimg.com/v2-37c755693e0b87a7208b7233fb250eba_r.jpg?source=1def8aca
利用Python进行数据分析需熟练掌握pandas、matplotlib、seaborn等Python库,还要具备编程和数据分析基本技能。如果你想学习更多Python数据分析知识,推荐『数据分析实战训练营』,有专业的老师带着你学习,1V1进行学习指导,帮助你更好地掌握Python,现在是人工智能和大数据时代,掌握数据技能是职场人士所必须的技能,如果你想要提升自己,现在点击下方卡片即可参加,性价比极高!快戳卡片↓
<a data-draft-node="block" data-draft-type="edu-card" data-edu-card-id="1700114249035079680">

kawaka 发表于 2023-11-10 10:48:18

最近经常有小伙伴咨询,数据分析应该如何学习,有什么学习路线可以参考下,萝卜作为一名资深业余数据分析爱好者,今天就来分享下,一个小白,该如何入门数据分析,具体该以怎样的路线来学习
学习路线大纲


http://picx.zhimg.com/v2-b540b4682b7d968ebcd5647fb3eaa0d9_r.jpg?source=1def8aca
文末获取高清路线图片
SQL 知识

SQL 是从事数据行业必须要熟练掌握的基本功,与其他语言相比,SQL 入门相对比较简单,但想要深入掌握还是有一定的难度的

[*]查询

[*]Select
[*]From
[*]Where
[*]Group by
[*]Order by
[*]子查询
[*]Union

[*]函数

[*]concat
[*]文本处理函数
[*]日期和时间处理函数
[*]数值处理函数
[*]聚集函数



[*]其他

[*]插入
[*]更新
[*]删除
[*]表操作
[*]视图
[*]事物
[*]存储过程

Python 知识


[*]基本语法

[*]数据类型
[*]变量
[*]函数
[*]类
[*]库

[*]Numpy

[*]数据类型
[*]Ndarray
[*]元素操作
[*]数组操作
[*]常用函数



[*]Pandas

[*]基础知识
[*]常用函数
[*]高级操作

数据分析理论


[*]什么是数据分析
[*]数据分析流程

[*]目的与思路
[*]数据收集
[*]数据处理
[*]数据分析与挖掘
[*]数据可视化

[*]数据采集基本技能

[*]数据源
[*]采集工具
[*]爬虫编程



[*]数据挖掘基本技能

[*]基本流程
[*]数学知识
[*]算法加持

[*]数据可视化基本技能

[*]Python
[*]可视化工具

数据分析算法


[*]分类算法
[*]朴素贝叶斯
[*]SVM
[*]KNN
[*]CART
[*]决策树
[*]聚类算法

[*]K-Means
[*]EM

[*]关联分析

[*]Apriori
[*]Maximal Frequent Itemsets Approach
[*]Galois Closure Based Approach



[*]连接分析

[*]PageRank
[*]HITS

常用网站


[*]百度统计

[*]https://tongji.baidu.com/web/welcome/login?castk=LTE=

[*]微博热点

[*]https://www.wrd.cn/login.shtml



[*]问卷星

[*]https://www.wjx.cn/

[*]中国统计局

[*]https://data.stats.gov.cn/



[*]ourworldindata

[*]https://ourworldindata.org/

[*]百度指数

[*]https://index.baidu.com/v2/index.html#/



[*]电竞数据

[*]https://www.esports8.com/

[*]金融数据

[*]AKshare

学习资源


[*]MySQL

[*]链接: https://pan.baidu.com/s/1yyrgkv98NcJHEZVSliMC5g 提取码: ia6a

[*]金融数据分析

[*]链接: https://pan.baidu.com/s/1R0AePxafjhbMC5RH1LD1Ig 提取码: sh7i



[*]Python数据分析

[*]链接: https://pan.baidu.com/s/1Gc86cmN2YZzmNI_4PgIz1w 提取码: umsm

[*]Python 数据分析实战

[*]链接: https://pan.baidu.com/s/1G2iFpj9axSb1DrX27zX4vg 提取码: 72i2



[*]全网最良心的【数据分析自学课程】

[*]https://www.bilibili.com/video/BV1ZM4y1u7uF?spm_id_from=333.337.search-card.all.click

[*]Python入门+数据分析

[*]https://www.bilibili.com/video/BV12E411A7ZQ?spm_id_from=333.337.search-card.all.click



[*]零基础学数据分析,偏业务方向

[*]https://www.bilibili.com/video/BV1144y1e7k3?spm_id_from=333.337.search-card.all.click

数据分析实战


[*]kesci 和鲸社区

[*]https://www.heywhale.com/home/project

[*]kaggle

[*]https://www.kaggle.com/



[*]天池学习赛

[*]https://tianchi.aliyun.com/competition/gameList/coupleList

[*]Boss 直聘岗位分析

[*]https://mp.weixin.qq.com/s?__biz=MzU5NDcyOTg4MA==&mid=2247486364&idx=1&sn=522dcbaf9c6e7d764a2864088e695622&chksm=fe7d856bc90a0c7d97ee45f355ca1b0aacdb1cf13e0d68c4be99cecf05519fd8b887632731d1&token=2083757448&lang=zh_CN#rd



[*]网易严选实战

[*]https://mp.weixin.qq.com/s?__biz=MzU5NDcyOTg4MA==&mid=2247484972&idx=1&sn=cfd29c10c9c2e12778bc56789841699d&chksm=fe7d88dbc90a01cdd56446daf31b0ca3c4df2ec0e31bf0c5443c593653ee1cac686d0bd11c9f&token=2083757448&lang=zh_CN#rd

[*]微博分析实战

[*]https://mp.weixin.qq.com/s?__biz=MzU5NDcyOTg4MA==&mid=2247491675&idx=1&sn=6e353b5cbcdf8543ee8f2da17e337b93&chksm=fe7e6eacc909e7ba8f42db4e975854c331e8bc06bd3ebf4ed6f7533d83189c93c38dbac58ffc&token=2083757448&lang=zh_CN#rd


以上就是萝卜断断续续写了几天,结合个人经验,同时也参考了网上大量的视频、文章总结而成的数据分析学习路线,确实非常的不容易,如果大家觉得满意请务必点个赞支持下
下面再来介绍Python中的数据分析三剑客
数据分析三剑客

Numpy Pandas 和 Matplotlib 是数据分析领域著名的三大模块
Numpy

Numpy 是 Python 的一个第三方库,就是 Numerical Python 的意思。这是一个科学计算的的核心库,有着强大的多维数组对象
Numpy 数组是一个功能强大的 N 维数组对象,它以行和列的形式存在,我们可以通过 Python 列表来初始化 Numpy 数组并访问其元素

http://picx.zhimg.com/v2-dd8bc2c6f701e3a2a1689a074fdede31_r.jpg?source=1def8aca
开始使用 Numpy

一维数组

import numpy as np
a=np.array()
print(a)
Output:

多维数组

a=np.array([(1,2,3),(4,5,6)])
print(a)
Output:
[[ 1 2 3]
]
当然,这里还有一个疑问,我们为啥不直接使用 Python 列表,而要使用 Numpy 的数组呢,下面我们就通过一些例子来看看
Python NumPy Array v/s List

使用 Numpy 数组而不是 Python 列表的原因,这要有以下三点

[*]更少的内存
[*]更快
[*]更加方便
选择 python NumPy 数组的第一个原因是它比列表占用更少的内存, 然后,它在执行方面也非常快,同时使用 NumPy 也是相当方便的。所以这些是 Python NumPy 数组相对于列表的主要优势,下面我们将在下面的例子中一一实践证明以上几点
import numpy as np

import time
import sys
S= range(1000)
print(sys.getsizeof(5)*len(S))

D= np.arange(1000)
print(D.size*D.itemsize)
Output:
28000
4000
上面的输出显示 list 分配的内存(用S表示)是 14000,而 NumPy 数组分配的内存只有 4000。由此可以得出,两者之间存在重大差异,这也使得 Python NumPy 数组 成为代替列表的首选
接下来让我们谈谈和列表相比,Python NumPy 数组为什么更快更方便
import time
import sys

SIZE = 1000000

L1= range(SIZE)
L2= range(SIZE)
A1= np.arange(SIZE)
A2=np.arange(SIZE)

start= time.time()
result=[(x,y) for x,y in zip(L1,L2)]
print((time.time()-start)*1000)

start=time.time()
result= A1+A2
print((time.time()-start)*1000)
Ouput:
156.21376037597656
46.89955711364746
通过上面的代码可以看出,List 花费了 380 毫秒,而 Numpy 数组花费了仅仅 49 毫秒,这绝对是碾压
再观察上面的代码,同样是合并两个列表,对于 List 需要用到 for 循环,而 对于 Numpy 数组则仅仅需要相加处理即可,也可以看出 Numpy 数据方便很多
下面我们来关注 Numpy 的一些操作,这个才是我们学习 Numpy 的重点
Numpy 的相关操作

ndim

我们可以借助函数 ndim 来获取 Numpy 数组的维数

http://picx.zhimg.com/50/v2-4e37e3a42a773d3a26ba7ccef313aee8_720w.jpg?source=1def8aca
import numpy as np
a = np.array([(1,2,3),(4,5,6)])
print(a.ndim)
Output:
2
可以看到,上面代码创建的是一个二维数组
itemsize

用于计算每个元素的字节大小

http://picx.zhimg.com/50/v2-f9d9b5cc070ac506fab2a6fd028a2016_720w.jpg?source=1def8aca
import numpy as np
a = np.array([(1,2,3)])
print(a.itemsize)
Output:
4
可以看出,每个元素在上面的数组中占据4个字节
dtype

用于查看元素的数据类型

http://pic1.zhimg.com/50/v2-46a76711624de895cafca14cc95e138a_720w.jpg?source=1def8aca
import numpy as np
a = np.array([(1,2,3)])
print(a.dtype)
Output:
int32
如上,我们看到创建的数据元素类型是32位整数
size 和 shape

查看数组的大小和形状
import numpy as np
a = np.array([(1,2,3,4,5,6)])
print(a.size)
print(a.shape)
Output:
6
(1,6)
reshape

可以理解为改变数组的行列分布,我们来具体看个例子

http://picx.zhimg.com/v2-0c0370949ab540bb95f3da5664dd1cd6_r.jpg?source=1def8aca
如上图所示,我们有 3 列 2 行,现在要转换为 2 列 3 行,让我们来看看要如何完成
import numpy as np
a = np.array([(8,9,10),(11,12,13)])
print(a)
a=a.reshape(3,2)
print(a)
Output:
[[ 8 9 10] ]
[[ 8 9] ]
slicing

切片,就是从一个数组当中提取一部分,这与 Python 列表的切片还是很相似的

http://picx.zhimg.com/v2-381a9b0419bc623954b7ff002421a983_r.jpg?source=1def8aca
我们先来看一个简单的, 这里有一个数组,我们需要给定数组中的一个特定元素(比如 3)
import numpy as np
a=np.array([(1,2,3,4),(3,4,5,6)])
print(a)
Output:
3
在上面的例子中,数组 (1,2,3,4) 是索引 0,而 (3,4,5,6) 是 Python Numpy 数组的索引 1,因此,我们打印了第零个索引中的第二个元素
我们稍微复杂一些,假设我们需要数组的第零个和第一个索引中的第二个元素
import numpy as np
a=np.array([(1,2,3,4),(3,4,5,6)])
print(a)
Output:

这里冒号代表所有行,包括零, 现在要获取第二个元素,我们将从两行中调用索引 2,分别为我们获取值 3 和 5
接下来,为了消除混淆,假设我们还有一行,我们只想打印数组中的前两个索引中的元素, 我们可以这样做
import numpy as np
a=np.array([(8,9),(10,11),(12,13)])
print(a)
Output:

正如上面的代码中展示的,只有 9 和 11 被打印出来了
linspace

这个函数返回指定间隔内均匀间隔的数字
import numpy as np
a=np.linspace(1,3,10)
print(a)
Output:
[1.         1.22222222 1.44444444 1.66666667 1.88888889 2.11111111
2.33333333 2.55555556 2.77777778 3.      ]
打印了1到3之间的10个值
max/ min

获取数组当中的最大最小值
import numpy as np

a= np.array()
print(a.min())
print(a.max())
print(a.sum())
Output:
1 3 6
可以看到上面的操作都是非常基础的,下面我们来做些更大的
axis 轴

这是 Numpy 中相当重要的概念,也是不太容易理解的部分

http://picx.zhimg.com/50/v2-c3b43379539c7f0bba87c25ed6f86e37_720w.jpg?source=1def8aca
向上图所示,我们有一个 2*3 的 Numpy 数组, 这里的行称为 轴 1,列称为 轴 0,现在我们看看这个轴到底有什么用处
假设我们想计算所有列的总和,那么我们就可以使用 axis
a= np.array([(1,2,3),(3,4,5)])
print(a.sum(axis=0))
Output:

因此,将所有列的总和相加,其中 1+3=4、2+4=6 和 3+5=8, 同样,如果我们将轴替换为 1,那么它将打印 ,会把所有行都相加到一起
Square Root & Standard Deviation

用于执行数学函数,分别是平方根和标准差
import numpy as np
a=np.array([(1,2,3),(3,4,5,)])
print(np.sqrt(a))
print(np.std(a))
Output:
[[ 1. 1.41421356 1.73205081]
[ 1.73205081 2. 2.23606798]]
1.29099444874
就像看到的那样,打印了所有元素的平方根。,此外,还打印了上述数组的标准偏差,即每个元素与 Python Numpy 数组的平均值相差多少
Addition Operation

我们还可以进行 Numpy 数组的加减乘除等操作
import numpy as np
x= np.array([(1,2,3),(3,4,5)])
y= np.array([(1,2,3),(3,4,5)])
print(x+y)
Output:
[[ 2 4 6] [ 6 8 10]]
下面来看看减法、乘法和除法
import numpy as np
x= np.array([(1,2,3),(3,4,5)])
y= np.array([(1,2,3),(3,4,5)])
print(x-y)
print(x*y)
print(x/y)
Output:
[ ]
[[ 1 4 9] [ 9 16 25]]
[[ 1. 1. 1.] [ 1. 1. 1.]]
Vertical & Horizontal Stacking

还可以对数组进行垂直叠加和水平叠加
import numpy as np
x= np.array([(1,2,3),(3,4,5)])
y= np.array([(1,2,3),(3,4,5)])
print(np.vstack((x,y)))
print(np.hstack((x,y)))
Output:
[ ]
[ ]
ravel

这个函数可以把数组转换为单列
import numpy as np
x= np.array([(1,2,3),(3,4,5)])
print(x.ravel())
Output:
[ 1 2 3 3 4 5]
下面我们再来看一些 Numpy 的特殊方法吧
Numpy 特殊方法

Numpy 有各种各样的特殊函数可用,例如 sine, cosine, tan, log 等。首先,让我们从 sine (正弦函数)开始,下面用到的模块 Matplotlib 我们会在下面介绍
import numpy as np
import matplotlib.pyplot as plt
x= np.arange(0,3*np.pi,0.1)
y=np.sin(x)
plt.plot(x,y)
plt.show()
Output:

http://pic1.zhimg.com/v2-9383a245376f157db7da803a2fbfeb2c_r.jpg?source=1def8aca
同样的我们还可以绘制其他的三角函数图形,比如 tan
import numpy as np
import matplotlib.pyplot as plt
x= np.arange(0,3*np.pi,0.1)
y=np.tan(x)
plt.plot(x,y)
plt.show()
Output:

http://pic1.zhimg.com/v2-495f6ac520c9b1874be10df031e7eb73_r.jpg?source=1def8aca
接下来我们再看看 Numpy 数组中的其他一些特殊功能,例如指数和对数函数。
a= np.array()
print(np.exp(a))
Output:
[ 2.71828183   7.3890561   20.08553692]
可以看到,指数值被打印出来,即 e 的 1 次方是 e,结果是 2.718…… 同样的,e 的 2 次方给出了接近 7.38 的值,依此类推
接下来,计算 log
import numpy as np
import matplotlib.pyplot as plt
a= np.array()
print(np.log(a))
Output:
[ 0.          0.693147181.09861229]
我们计算了自然对数,它给出了如上所示的值。现在,如果我们想要 log base 10 而不是 Ln 或自然对数,可以参照如下代码:
import numpy as np
import matplotlib.pyplot as plt
a= np.array()
print(np.log10(a))
Output:
[ 0.      0.30103      0.47712125]
至此,我们就完成了 Numpy 数据的基本入门,下面就是 Pandas 了
Pandas

Pandas 是什么就不过多介绍了,咱们直接进入主题,来看看 Pandas 的常用操作

http://pic1.zhimg.com/v2-246e0353e505501e5f51271826dc2699_r.jpg?source=1def8aca
Slicing the Data Frame

进行切片,我们先来创建一个 DataFrame 数据
import pandas as pd

XYZ_web= {'Day':, "Visitors":, "Bounce_Rate":}

df= pd.DataFrame(XYZ_web)

print(df)
Output:
   Bounce_Rate Day Visitors
0   20          1   1000
1   20          2   700
2   23          3   6000
3   15          4   1000
4   10          5   400
5   34          6   350
下面我们来获取指定的数据

http://pica.zhimg.com/v2-a5c88fe6f090a87c16e336708f56e2f2_r.jpg?source=1def8aca
print(df.head(2))
Output:
   Bounce_Rate Day Visitors
0      20         1   1000
1      20         2    700
类似的,还可以获取最后两行数据
print(df.tail(2))
Output:
Bounce_Rate Day Visitors
4      10      5    400
5      34      6    350
Merging & Joining

在合并中,我们可以合并两个 DataFrame 以形成单个 DataFrame
让我们实际实现一下,首先我们将创建三个 DataFrame,其中包含一些键值对,然后将这些 DataFrame 合并在一起
import pandas as pd

df1= pd.DataFrame({ "HPI":,"Int_Rate":,"IND_GDP":}, index=)

df2=pd.DataFrame({ "HPI":,"Int_Rate":,"IND_GDP":}, index=)

merged= pd.merge(df1,df2)

print(merged)
Output:
   HPI   IND_GDP Int_Rate
080      50      2
190      45      1
270      45      2
360      67      3
当然我们还可以指定列来合并
df1 = pd.DataFrame({"HPI":,"Int_Rate":, "IND_GDP":}, index=)

df2 = pd.DataFrame({"HPI":,"Int_Rate":,"IND_GDP":}, index=)

merged= pd.merge(df1,df2,on ="HPI")

print(merged)
Output:
      IND_GDPInt_RateLow_Tier_HPIUnemployment
2001   50      2         50.0            1.0
2002   45      1         NaN             NaN
2003   45      2         45.0            3.0
2004   67      3         67.0            5.0
2004   67      3         34.0            6.0
下面再来看看 join 操作,连接操作将 在索引而不是列上进行
df1 = pd.DataFrame({"Int_Rate":, "IND_GDP":}, index=)

df2 = pd.DataFrame({"Low_Tier_HPI":,"Unemployment":}, index=)

joined= df1.join(df2)
print(joined)
Output:
       IND_GDPInt_Rate Low_Tier_HPIUnemployment
2001   50       2         50.0         1.0
2002   45       1         NaN            NaN
2003   45       2         45.0         3.0
2004   67       3         67.0         5.0
2004   67       3         34.0         6.0
在 2002 年(索引),列low_tier_HPI和unemployment没有附加值,因此它打印了 NaN(非数字),2004 年晚些时候,这两个值都可用,所以它打印了各自的值
Concatenation

Concatenation 是将 DataFrame 粘合在一起的操作, 我们可以选择要串联的维度。为此,只需使用“pd.concat”并传入 DataFrame 列表以连接在一起
df1 = pd.DataFrame({"HPI":,"Int_Rate":, "IND_GDP":}, index=)

df2 = pd.DataFrame({"HPI":,"Int_Rate":,"IND_GDP":}, index=)

concat= pd.concat()

print(concat)
Output:
       HPIIND_GDP Int_Rate
2001    80    50       2
2002    90    45       1
2003    70    45       2
2004    60    67       3
2005    80    50       2
2006    90    45       1
2007    70    45       2
2008    60    67       3
两个 DataFrame 被粘合在一个 DataFrame 中,其中索引从 2001 年一直到 2008 年。接下来,我们还可以指定 axis=1 以便沿列连接、合并或串联
df1 = pd.DataFrame({"HPI":,"Int_Rate":, "IND_GDP":}, index=)

df2 = pd.DataFrame({"HPI":,"Int_Rate":,"IND_GDP":}, index=)

concat= pd.concat(,axis=1)

print(concat)
Output:
       HPIIND_GDPInt_Rate HPIIND_GDP Int_Rate
2001   80.050.0       2.0   NaN    NaN   NaN
2002   90.045.0       1.0   NaN    NaN   NaN
2003   70.045.0       2.0   NaN    NaN   NaN
2004   60.067.0       3.0   NaN    NaN   NaN
2005   NaN   NaN      NaN   80.0   50.0    2.0
2006   NaN   NaN      NaN   90.0   45.0    1.0
2007   NaN   NaN      NaN   70.0   45.0    2.0
2008   NaN   NaN      NaN   60.0   67.0    3.0
Change the index

我们来改变 DataFrame 的索引值
import pandas as pd

df= pd.DataFrame({"Day":, "Visitors":, "Bounce_Rate":})

df.set_index("Day", inplace= True)

print(df)
Output:
   Bounce_RateVisitors
Day
1      20         200
2      45         100
3      60         230
4      10         300
Change the Column Headers

我们来改变列标题
import pandas as pd

df = pd.DataFrame({"Day":, "Visitors":, "Bounce_Rate":})

df = df.rename(columns={"Visitors":"Users"})

print(df)
Output:
Bounce_RateDayUsers
0    20         1    200
1    45         2    100
2    60         3    230
3    10         4    300
数据格式转换
import pandas as pd

country= pd.read_csv("D:UsersAayushiDownloadsworld-bank-youth-unemploymentAPI_ILO_country_YU.csv",index_col=0)

country.to_html('edu.html')
运行此代码后,将创建一个名为“edu.html”的 HTML 文件
Output:

http://picx.zhimg.com/v2-30fd19fa0aa6fd3e1537045cedda0a4d_r.jpg?source=1def8aca
下面我们通过一个数据集来实战一下
有一个包含 2010 年到 2014 年全球失业青年百分比的数据集,我们使用这个数据集,找出 2010 年到 2011 年每个国家青年百分比的变化
首先,让我们了解包含国家名称、国家代码和年份从 2010 年到 2014 年的数据集。现在使用 Pandas,用“pd.read_csv”读取 .csv 文件格式文件

http://picx.zhimg.com/v2-95192bbb1085f7d74191dce8e6eef530_r.jpg?source=1def8aca
让我们继续进行数据分析,我们将找出 2010 年至 2011 年失业青年的百分比变化。然后我们用 Matplotlib 库对其进行可视化
import pandas as pd

import matplotlib.pyplot as plt

from matplotlib import style

style.use('fivethirtyeight')

country= pd.read_csv("D:UsersAayushiDownloadsworld-bank-youth-unemploymentAPI_ILO_country_YU.csv",index_col=0)

df= country.head(5)

df= df.set_index(["Country Code"])

sd = sd.reindex(columns=['2010','2011'])

db= sd.diff(axis=1)

db.plot(kind="bar")

plt.show()
Output:

http://picx.zhimg.com/v2-f873c683feea12bd09347f8c1abd18a5_r.jpg?source=1def8aca
通过上图可以看出,在 2010 年至 2011 年期间,阿富汗 (AFG) 的失业青年人数增加了约 0.25%。在安哥拉(AGO),是一个负增长趋势,这意味着失业青年的百分比已经下降了
至此,我们的 Pandas 入门就到这里,下面进行 Matplotlib 的学习吧
Matplotlib

Matplotlib 支持多种图表的绘制

http://pic1.zhimg.com/v2-c80750e45092dce77a183dbaf3480b26_r.jpg?source=1def8aca
我们先来看看如何生成一个基本图形
from matplotlib import pyplot as plt

#Plotting to our canvas

plt.plot(,)

#Showing what we plotted

plt.show()
Output:

http://pic1.zhimg.com/v2-114dc5419d9a0373e2d3f529193efaf1_r.jpg?source=1def8aca
可以看到,仅仅三行代码,就生成了一个基本图形,还是非常简单的
下面我们再为图表增加标题等信息
from matplotlib import pyplot as plt

x =
y =
plt.plot(x,y)
plt.title('Info')
plt.ylabel('Y axis')
plt.xlabel('X axis')
plt.show()
Output:

http://pic1.zhimg.com/v2-9abfdd8e66ce4566b249aed79537b798_r.jpg?source=1def8aca
接下来我们尝试为图表增加更多的样式
from matplotlib import pyplot as plt
from matplotlib import style

style.use('ggplot')
x =
y =
x2 =
y2 =
plt.plot(x,y,'g',label='line one', linewidth=5)
plt.plot(x2,y2,'c',label='line two',linewidth=5)
plt.title('Epic Info')
plt.ylabel('Y axis')
plt.xlabel('X axis')
plt.legend()
plt.grid(True,color='k')
plt.show()
Output:

http://pic1.zhimg.com/v2-f98c9c70acf479c542937d725b7cbc56_r.jpg?source=1def8aca
下面我们开始绘制不同种类的图形
Bar Graph

首先,让我们先明确什么时候需要条形图。条形图使用条形来比较不同类别之间的数据,当我们想测量一段时间内的变化时,使用条形图表示就非常适合。
from matplotlib import pyplot as plt

plt.bar(,,
label="BMW",width=.5)
plt.bar([.75,1.75,2.75,3.75,4.75],,
label="Audi", color='r',width=.5)
plt.legend()
plt.xlabel('Days')
plt.ylabel('Distance (kms)')
plt.title('Information')
plt.show()
Output:

http://pic1.zhimg.com/v2-683cae1d5d27ce01ca9ee14142493fd4_r.jpg?source=1def8aca
Histogram

我们先来看下条形图和直方图之间的区别。直方图用于显示分布,而条形图用于比较不同的实体。当我们有数组或很长的列表时,直方图就很有用。
让我们考虑一个例子,当我们必须根据 bin 绘制人口年龄。现在,bin 指的是划分为一系列区间的值范围,通常创建的 bin 大小相同,在下面的代码中,我以 10 的间隔创建了 bin,这就说明第一个 bin 包含从 0 到 9 的元素,然后是 10 到 19,依此类推。
import matplotlib.pyplot as plt
population_age =
bins =
plt.hist(population_age, bins, histtype='bar', rwidth=0.8)
plt.xlabel('age groups')
plt.ylabel('Number of people')
plt.title('Histogram')
plt.show()
Output:

http://picx.zhimg.com/v2-bfb1d28e10ba2aa4aa4f06b63b97a87e_r.jpg?source=1def8aca
在上图中所看到的,我们得到了与 bin 相关的年龄组,最大的年龄组在 40 到 50 岁之间
Scatter Plot

通常我们需要散点图来比较变量,例如,一个变量受另一个变量影响的程度以从中建立一定关系。数据显示为一组点,每个点都有一个变量的值,它决定了水平轴上的位置,另一个变量的值决定了垂直轴上的位置
import matplotlib.pyplot as plt
x =
y =

x1=
y1=

plt.scatter(x,y, label='high income low saving',color='r')
plt.scatter(x1,y1,label='low income high savings',color='b')
plt.xlabel('saving*100')
plt.ylabel('income*1000')
plt.title('Scatter Plot')
plt.legend()
plt.show()
Output:

http://pic1.zhimg.com/v2-05542039e982f0860076f3ddf0a52265_r.jpg?source=1def8aca
Area Plot

面积图与线图非常相似,它们也称为堆栈图。这些图可用于跟踪构成一个完整类别的两个或多个相关组随时间的变化。例如,让我们将一天中完成的工作归为类别,比如睡觉、吃饭、工作和玩耍
import matplotlib.pyplot as plt
days =

sleeping =
eating =
working =
playing =

plt.plot([],[],color='m', label='Sleeping', linewidth=5)
plt.plot([],[],color='c', label='Eating', linewidth=5)
plt.plot([],[],color='r', label='Working', linewidth=5)
plt.plot([],[],color='k', label='Playing', linewidth=5)

plt.stackplot(days, sleeping,eating,working,playing, colors=['m','c','r','k'])

plt.xlabel('x')
plt.ylabel('y')
plt.title('Stack Plot')
plt.legend()
plt.show()
Output:

http://picx.zhimg.com/v2-11be1abfca56b20b4e998657ae757ca4_r.jpg?source=1def8aca
Pie Chart

饼图是指一个圆形图,它被分解成段,即饼图。它基本上用于显示百分比或比例数据,其中每个饼图代表一个类别
import matplotlib.pyplot as plt

days =

sleeping =
eating =
working =
playing =
slices =
activities = ['sleeping','eating','working','playing']
cols = ['c','m','r','b']

plt.pie(slices,
labels=activities,
colors=cols,
startangle=90,
shadow= True,
explode=(0,0.1,0,0),
autopct='%1.1f%%')

plt.title('Pie Plot')
plt.show()
Output:

http://pic1.zhimg.com/v2-7fb64a9e486ebcca58fc93421a750fcf_r.jpg?source=1def8aca
Working With Multiple Plots

我们现在开始绘制多个图形,使用 Numpy 进行辅助
import numpy as np
import matplotlib.pyplot as plt

def f(t):
    return np.exp(-t) * np.cos(2*np.pi*t)
t1 = np.arange(0.0, 5.0, 0.1)
t2 = np.arange(0.0, 5.0, 0.02)
plt.subplot(221)
plt.plot(t1, f(t1), 'bo', t2, f(t2))
plt.subplot(222)
plt.plot(t2, np.cos(2*np.pi*t2))
plt.show()
Output:

http://picx.zhimg.com/v2-b252b684a4d15740e059a21a44821771_r.jpg?source=1def8aca
这里有一个新概念,即子图。subplot() 函数指定范围从 1 到 numrowsnumcols 的 numrow、numcol、fignum。如果 numrowsnumcols<10,则此函数中的逗号是可选的。因此子图 (221) 与子图 (2,2,1) 相同
子图可以帮助我们绘制多个图形,我们可以在其中通过垂直或水平对齐来定义
上面就是 Matplotlib 的基本入门知识了
好啦,这次分享的知识还是蛮多的,喜欢就点个赞吧!

lenapark 发表于 2023-11-10 10:49:14

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 创建一个示例数据集
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily'],
    'Age': ,
    'Score':
}

# 将数据集转换为DataFrame
df = pd.DataFrame(data)

# 打印前几行数据
print(df.head())

# 描述性统计
print(df.describe())

# 数据可视化
plt.figure(figsize=(8, 6))
plt.scatter(df['Age'], df['Score'])
plt.title('Age vs. Score')
plt.xlabel('Age')
plt.ylabel('Score')
plt.show()

XU许 发表于 2023-11-10 10:49:25

一般的就使用 NumPy、Pandas、Matplotlib 和 Scikit-learn 等,Python 入门书籍推荐《Python 编程从入门到实践》第二版,出版时间: 2021年05月,第一版就很不错,第二版做了很多优化,视频的话 B 站上有很多免费的,可以看看鱼C-小甲鱼、樵夫或者廖雪峰的,python 基础学完后有很多分支,大数据时代,对数据采集的需求越来越多,关于爬虫方向的学习我可以给到以下推荐:
你在网上看到的,95%以上的都是爬虫基础,特别是各种营销号,有很多视频,没有更“高级”的东西,包括知乎上你看到的回答,95%以上都是回答一些基础(可能回答的人自己都没进阶搞过爬虫,只是道听途说),基础你随便找资料学就行了,B站视频也很多,大同小异。 进阶主要是逆向,你会发现基本上没有教程,也很少有人讲这方面的东西,爬虫入门简单,深入很难,我推荐你看以下书籍(我认为是必看的):

[*]爬虫工具推荐:K哥爬虫工具库
[*]爬虫代理推荐:快代理(国内代理)、免费代理、学生优惠、海外住宅代理 ip
[*]小白未入门阶段 :《Python 编程从入门到实践》第二版,作者埃里克·马瑟斯(Eric Matthes)
[*]爬虫入门阶段:《Python3 网络爬虫开发实战》第二版,作者崔庆才
[*]反爬套路总结:《Python3 反爬虫原理与绕过实战》,作者韦世东
[*]数据产品+数据产品思维:《爬虫实战:从数据到产品》,作者贺思聪
[*]爬虫逆向进阶:《反爬虫AST原理与还原混淆实战》,作者李岳阳,卓斌;《安卓Frida逆向与抓包实战》作者陈佳林,《爬虫逆向进阶实战》作者李玺
视频方面,我只推荐进阶,也就是逆向相关的视频: 免费:

[*]JS 逆向:《K 哥爬虫》 K 哥的小助理带你由易到难学习逆向
[*]JS 逆向:《志远2021全新js逆向教程,学完这套就够了!(全套开源)》
[*]APP 逆向:《小肩膀 app逆向百集(105集)》
收费:

[*]夜幕出品 JS 逆向:《JavaScript 逆向系列课》《JavaScript 逆向高阶课》
[*]猿人学:《爬虫高阶课程》
[*]志远和小肩膀 2022 最新的 JS 逆向和 APP 逆向课程,自己在 B 站找购买方式
推荐多逛一下各大论坛:

[*]看雪安全论坛
[*]精易逆向安全
[*]夜幕爬虫论坛
[*]穿甲兵技术社区
PS:很多搞易语言的对于逆向很拿手,可以逛逛易语言的一些论坛,重要的是思路,实现的语言无所谓,也可以关注 K 哥公众号,我会分享一些 JS 逆向知识,比较适合新手。
爬虫工程师的尽头是逆向安全工程师!

基地组织 发表于 2023-11-10 10:50:18

这个问题有点复杂了,想用python做数据分析,你需要有以下的知识积累:

[*]基本掌握python程序设计方法
[*]掌握利用python、numpy、pandas读写文件的方法
[*]能看懂Pandas文档
[*]建议先到kaggle上看十个相关案例,先模仿再做自己的 事情
基础的编程和数据分析可以学习一下下面的免费教程:
Python程序设计 (educoder.net)
页: [1]
查看完整版本: 怎么利用 Python 进行数据分析?