文章目录
- NumPy
- arrary
- matrix
- pandas
- Series
- DataFrame
- pyspark
- DataFrame
- 通过RDD创建DataFrame
- 通过读csv创建DataFrame
- 通过pandas、hive创建DataFrame
- RDD
- pyspark Dataframe转list
NumPy
NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用, 这种组合广泛用于替代 MatLab,是一个强大的科学计算环境。
SciPy是算法库和数学工具包。包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。
Matplotlib 是Python编程语言及其数值数学扩展包NumPy的可视化操作界面。
arrary
import numpy as np
# 直接定义
X = np.array([[ 1., -1., 2.],
[ 2., 0., 0.],
[ 0., 1., -1.]])
# arange+reshape创建
Y = np.arange(15).reshape(3, 5)
# 显示:array([[ 0, 1, 2, 3, 4],
# [ 5, 6, 7, 8, 9],
# [10, 11, 12, 13, 14]])
#linspace+resize创建
Z = np.linspace(0, 4, 9)
Z.resize(3, 3)
# 显示:array([[0. , 0.5, 1. ],
# [1.5, 2. , 2.5],
# [3. , 3.5, 4. ]])
# one创建
np.ones((3, 2))
# 显示:array([[1., 1.],
# [1., 1.],
# [1., 1.]])
# zeros创建
np.zeros((2, 3))
# 显示:array([[0., 0., 0.],
# [0., 0., 0.]])
# eye单位矩阵创建
np.eye(3)
# 显示:array([[1., 0., 0.],
# [0., 1., 0.],
# [0., 0., 1.]])
# diag创建
y = np.array([4, 5, 6])
np.diag(y)#以y为主对角线创建矩阵
# 显示:array([[4, 0, 0],
# [0, 5, 0],
# [0, 0, 6]])
ndarray.shape:数组的维度
ndarray.size:数组元素的总个数
ndarray.dtype:对象的元素类型
matrix
np.mat()方法的参数可以是列表和元组的任意混合嵌套、字符串、ndarray对象。其中字符串每一行以分号分割,每列元素以逗号隔开。且列表和元组的任意混合嵌套深度不能大于2。mat在numpy中还有一个别名,叫做asmatrix。
np.mat([[1,2],[5,7]])
# 显示:matrix([[1, 2],
# [5, 7]])
# 参数是ndarray对象
np.mat(np.array(((1,2),(5,7),(7,9))))
# 显示:matrix([[1, 2],
# [5, 7],
# [7, 9]])
# 参数是string对象
np.mat("1,2,3;4,5,6")
# 显示:matrix([[1, 2, 3],
# [4, 5, 6]])
pandas
Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。
Series
Series:一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近。
import pandas as pd
from pandas import Series
s = Series([1,4,'ww','tt'])
# 显示:0 1
# 1 4
# 2 ww
# 3 tt
dtype: object
DataFrame
DataFrame:二维的表格型数据结构。它的竖行称之为 columns,横行跟前面的 Series 一样,称之为 index。
from pandas import Series,DataFrame
# 通过dict创建DataFrame
data = {"name":['google','baidu','yahoo'],"marks":[100,200,300],"price":[1,2,3]}
f1 = DataFrame(data)
# 规定columns的顺序
f2 = DataFrame(data,columns=['name','price','marks'])
# 规定index的顺序
f3 = DataFrame(data,columns=['name','marks','price'],index=['a','b','c'])
# 通过dict套dict的方式创建DataFrame
newdata = {'lang':{'first':'python','second':'java'},'price':{'first':5000,'second':2000}}
# 取数
f4['lang']
# 显示:first python
# second java
# Name: lang, dtype: object
f1显示:
pyspark
DataFrame
DataFrame比RDD领先。因为它提供了内存管理和优化的执行计划。
创建DataFrame,可以从不同的数据创建。
通过RDD创建DataFrame
# 通过RDD创建DataFrame
# 从集合中创建新的RDD
stringCSVRDD = spark.sparkContext.parallelize([
(123, "Katie", 19, "brown"),
(456, "Michael", 22, "green"),
(789, "Simone", 23, "blue")])
# 设置dataFrame将要使用的数据模型,定义列名,类型和是否为能为空
schema = StructType([StructField("id", LongType(), True),
StructField("name", StringType(), True),
StructField("age", LongType(), True),
StructField("eyeColor", StringType(), True)])
swimmers = spark.createDataFrame(stringCSVRDD,schema)
通过读csv创建DataFrame
df = pd.DataFrame(np.random.rand(5,5),columns=['a','b','c','d','e']).applymap(lambda x: int(x*10))
file=r"random.csv"
df.to_csv(file,index=False)
df1 = spark.read.csv('random.csv',header=True, inferSchema=True)
通过pandas、hive创建DataFrame
#通过pandas创建
df = pd.DataFrame(np.random.random((4,4)))
spark_df = spark.createDataFrame (df,schema=['a','b','c','d'])
#通过hive创建
df = spark.sql("select * from table")
RDD
pyspark Dataframe转list
M_list = M_df.collect()
type(M_list )
# list
M_list[0]
# Row(cd='47', name='插座', dep='89', dep_name='*部', l='366.147393481', m='110.966901535', dt='2018-01-31')
# 取数
l = [float(x['l']) for x in M_list]
m = [float(x['m']) for x in M_list]