数据分析

NumPy

创建

array1 = np.array([1, 2, 3, 4, 5])
array2 = np.arange(0, 20, 2)
# 产生10个$[1, 100)$范围的随机整数
array5 = np.random.randint(1, 100, 10)
array7 = np.array([[1, 2, 3], [4, 5, 6]])
array8 = np.zeros((3, 4))
array9 = np.ones((3, 4))
# 使用eye函数创建单位矩阵
array11 = np.eye(4)
# 通过reshape将一维数组变成二维数组
array12 = np.array([1, 2, 3, 4, 5, 6]).reshape(2, 3)

Pandas

Pandas 核心的数据类型是 Series(数据系列)、DataFrame(数据表/数据框),分别用于处理一维和二维的数据

使用场景

csv读取数据,指定index

category_pd = pd.read_csv("category_temp.csv")
category_pd.set_index('GroupID', inplace=True)

读取数据,指定数据类型

similarity_matrix = pd.read_csv(item_cf_result_file, dtype=str)

获取及修改指定数据

sales_df.loc[index, "name"]
sales_df.loc[0, "name"]='truman'

排序

df=df.sort_values('price',ascending=True)

df 数据拼接

all_emp_df = pd.concat([emp_df, emp2_df])

遍历数据

# 使用 iterrows() 遍历 DataFrame
for index, row in df.iterrows():
print(index, row['Name'], row['Age'], row['City'])
# 使用 itertuples() 遍历 DataFrame
for row in df.itertuples():
print(row.Index, row.Name, row.Age, row.City)
# 使用 iteritems(),按列迭代 遍历 DataFrame
for column, series in df.iteritems():
print(column)
for value in series:
print(value)
# 逆序遍历
for index, row in df.iloc[::-1].iterrows():
print(index, row)

按数值范围分桶

bins = [0, 100, 200, 300, 400, 500, 1000, 2000, 3000]
labels = ['<100', '100-200', '200-300', '300-400', '400-500', '500-1000', '1000-2000', '>=2000']
price_groups = pd.cut(df['price'], bins=bins, labels=labels, right=False)

分组求和

click_count_by_price = df.groupby(price_groups)['click_sum'].sum()

Matplotlib 与 Seaborn

绘制线

import pandas as pd
import matplotlib.pyplot as plt
if __name__ == '__main__':
df = pd.read_csv('../data/web_push.csv',parse_dates=['Date'])
df = df.sort_values('Date', ascending=True)
plt.xlabel("Date")
plt.ylabel("Sales (Participation | Last Click)")
df['Date'] = pd.to_datetime(df['Date'])
plt.plot(df["Date"].dt.strftime('%m-%d'),df["Sales (Participation | Last Click)"])
plt.title("Web push channel")
plt.show()

数据以Date字段排序

df = df.sort_values('Date', ascending=True)

时间字段格式化

df["Date"].dt.strftime('%m-%d')

绘制两条线

import matplotlib.pyplot as plt
import numpy as np
# 生成数据
x = np.arange(0, 6, 0.1) # 以0.1为单位,生成0到6的数据
y1 = np.sin(x)
y2 = np.cos(x)
# 绘制图形
plt.plot(x, y1, label="sin")
plt.plot(x, y2, linestyle="--", label="cos") # 用虚线绘制
plt.xlabel("x") # x轴标签
plt.ylabel("y") # y轴标签
plt.title('sin & cos') # 标题
plt.legend()# 添加图例
plt.show()

Scikit-learn

参考

  1. 数据分析概述