暑假中对于JAVA、数据库、数据分析都有了一定的学习,但是都学的不深,都算是沾了一点皮毛,下面我就分别对于这几个的说说我的了解。
一、基础知识:
1、JVM、JRE和JDK的区别:
JVM:java虚拟机,用于保证java的跨平台的特性。
JRE:java的运行环境,包括jvm+java的核心类库。
JDK(Java Development Kit):java的开发工具,包括jre+开发工具。
2、标示符命名规则:
由数字(0-9),大小写英文字母,以及_和$组成。
不能以数字开头。
不能使用关键字来自定义命名。
3、数据类型:
(1)基本数据类型(4类8种):
整数类型:byte、short、int、long
浮点数类型:float、double
字符类型:char
布尔类型:boolean(ture false)
(2)引用数据类型:
类、接口、数组
4、函数
定义:函数就是定义在类中的具有特定功能的一段独立小程序。
特点:定义函数可以将功能代码进行封装,便于对该功能进行复用,函数只有被调用才会被执行, 函数的出现提高了代码的复用性。
对于函数没有具体返回值的情况,返回值类型用关键字void表示,函数中的return语句如果在最后一行可以省略不写。
5、重载:
概念:在同一个类中,允许存在一个以上的同名函数,只要它们的参数个数或者参数类型不同即可。
特点:与返回值类型无关,只看参数(参数类型以及参数个数)。
6、内存结构:
栈内存:用于存储局部变量,当数据使用完,所占空间会自动释放。
堆内存:数组和对象,通过new建立的实例都存放在堆内存中。
方法区:静态成员、构造函数、常量池、线程池
二、面向对象
1、面向对象思想:
(1)概述:面向对象是相对于面向过程而言的,面向过程强调的是功能,面向对象强调的是将功能封装进对象,
强调具备功能的对象;
(2)特征:
封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式。
继承: 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,这些属性和行为,只要继承那个类即可。
多态: 一个对象在程序不同运行时刻代表的多种状态,父类或者接口的引用指向子类对象
2、成员变量和局部变量的区别(重点)
(1)作用域
成员变量:针对整个类有效。
局部变量:只在某个范围内有效。(一般指的就是方法,语句体内)
(2)存储位置
成员变量:随着对象的创建而存在,随着对象的消失而消失,存储在堆内存中。
局部变量:在方法被调用,或者语句被执行的时候存在,存储在栈内存中。
当方法调用完,或者语句结束后,就自动释放。
(3)初始值
成员变量:有默认初始值。
局部变量:没有默认初始值,使用前必须赋值。
主流的数据库软件都有:
甲骨文:orcale
IBM:DB2
微软:SQL server
开原可以跨平台的数据库都有:
Mysql:开源切跨平台; Orcale DB2:跨平台不开源
SQL server :不跨平台,不开源;
mysql的服务进程、端口、默认数据库
进程名:mysqld 端口:3306 默认目录:/var/lib/mysql
mysql默认的三个库名:
mysql ,test , information_schema
information_schema不占磁盘空间,存在内存里面。
mysql的常用数据类型:
数值类型:int (整数性)、float (浮点型)
玫举类型:set 、 enum
字符类型:char、varchar
日期时间类型:time、year、datetime
mysql数据库中查询,插入,更新,删除表记录的指令格式:
插入记录的指令格式:insert into 表名(字段名) values(key值)
查询记录的指令格式:select 字段名 from 表名 where 条件
更新表记录的指令格式:update 表名 set 字段=更新的key值;
删除表记录的指令格式:delete from 表名 where 条件
一、数据的载入和初步观察
1、数据载入
导入numpy和pandas
import numpy as np
import pandas as pd
(1) 使用相对路径载入数据
df = pd.read_csv('train.csv')
(2) 使用绝对路径载入数据
df = pd.read_csv('/Users/chenandong/Documents/datawhale数据分析每个人题目设计/招募阶段/第一单元项目集合/train.csv')
2、初步观察
查看数据的基本信息
df.info()
查看数据前后数据
df.head()#前多少行的数据
df.tail()#后多少行的数据
判断数据是否为空,为空的地方返回True,其余地方返回False
df.isnull().head()
保存数据
df.to_csv("train.csv")
3、pandas基础
pandas中有两个数据类型DateFrame和Series,下面有两个这样的例子
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
example_1 = pd.Series(sdata)
example_1
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
'year': [2000, 2001, 2002, 2001, 2002, 2003],'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
example_2 = pd.DataFrame(data)
example_2
查看DataFrame数据的每列的名称
df.columns
查看某一列的所有值 [有多种方法]
df['列名'].head()
df.列名.head()
删除某一列
del df['列名']
筛选的逻辑
下面我们通过两个例子了解一下pandas的条件筛选方式以及如何使用交集和并集操作
df[df["Age"]<10].head(3)
midage = df[(df["Age"]>10)& (df["Age"]<50)]
midage.head(3)
将midage的数据中第100行的"Pclass"和"Sex"的数据显示出来
midage = midage.reset_index(drop=True)
midage.loc[[100],['Pclass','Sex']]
使用loc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来
midage.loc[[100,105,108],['Pclass','Name','Sex']]
使用iloc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来
midage.iloc[[100,105,108],[2,3,4]]
4、探索性数据分析
利用Pandas对示例数据进行排序,要求升序
#自己创建一个只有数字的DataFrame型的数据
frame = pd.DataFrame(np.arange(8).reshape((2, 4)),
index=['2', '1'],
columns=['d', 'a', 'b', 'c'])
# 大多数时候我们都是想根据列的值来排序,将构建的DataFrame中的数据根据某一列,升序排列
frame.sort_values(by='c', ascending=True)
sort_values这个函数中by参数指向要排列的列,ascending参数指向排序的方式(升序还是降序)
下面将不同的排序方式做一个小总结
# 让行索引升序排序
frame.sort_index()
# 让列索引升序排序
frame.sort_index(axis=1)
# 让列索引降序排序
frame.sort_index(axis=1, ascending=False)
# 让任选两列数据同时降序排序
frame.sort_values(by=['a', 'c'], ascending=False)
利用Pandas进行算术计算,计算两个DataFrame数据相加结果
#建立一个例子
frame1_a = pd.DataFrame(np.arange(9.).reshape(3, 3),
columns=['a', 'b', 'c'],
index=['one', 'two', 'three'])
frame1_b = pd.DataFrame(np.arange(12.).reshape(4, 3),
columns=['a', 'e', 'c'],
index=['first', 'one', 'two', 'second'])
frame1_a + frame1_b
两个DataFrame相加后,会返回一个新的DataFrame,对应的行和列的值会相加,没有对应的会变成空值NaN。
使用Pandas describe()函数查看数据基本统计信息
#建立一个例子
frame2 = pd.DataFrame([[1.4, np.nan],
[7.1, -4.5],
[np.nan, np.nan],
[0.75, -1.3]
], index=['a', 'b', 'c', 'd'], columns=['one', 'two'])
frame2.describe()
'''
count : 样本数据大小
mean : 样本数据的平均值
std : 样本数据的标准差
min : 样本数据的最小值
25% : 样本数据25%的时候的值
50% : 样本数据50%的时候的值
75% : 样本数据75%的时候的值
max : 样本数据的最大值
'''
二、数据清洗及特征处理
我们拿到的数据通常是不干净的,所谓的不干净,就是数据中有缺失值,有一些异常点等,需要经过一定的处理才能继续做后面的分析或建模,所以拿到数据的第一步是进行数据清洗,本章我们将学习缺失值、重复值、字符串和数据转换等操作,将数据清洗成可以分析或建模的样子。
1、缺失值观察与处理
查看每个特征缺失值个数
#方法一
df.info()
#方法二
df.isnull().sum()
对缺失值进行处理
df[df['Age']==None]=0
df[df['Age'].isnull()] = 0
df[df['Age'] == np.nan] = 0
对缺失值删除或填充
df.dropna().head()#删除缺失值
df.fillna().head()#填充缺失值
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.dropna.html
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.fillna.html
2、重复值观察与处理
查看数据中的重复值
df[df.duplicated()]
对重复值进行处理
df = df.drop_duplicates()
3、特征观察与处理
(1)特征观察
可以把特征大概分为两大类:数值型和文本型特征。
数值型特征一般可以直接用于模型的训练,但有时候为了模型的稳定性及鲁棒性会对连续变量进行离散化。文本型特征往往需要转换成数值型特征才能用于建模分析。
对年龄进行分箱(离散化)处理
#将连续变量Age平均分箱成5个年龄段,并分别用类别变量12345表示
df['AgeBand'] = pd.cut(df['Age'], 5,labels = [1,2,3,4,5])
#将连续变量Age划分为(0,5] (5,15] (15,30] (30,50] (50,80]五个年龄段,并分别用类别变量12345表示
df['AgeBand'] = pd.cut(df['Age'],[0,5,15,30,50,80],labels = [1,2,3,4,5])
#将连续变量Age按10% 30% 50 70% 90%五个年龄段,并用分类变量12345表示
df['AgeBand'] = pd.qcut(df['Age'],[0,0.1,0.3,0.5,0.7,0.9],labels = [1,2,3,4,5])
对文本变量进行转换
#查看类别文本变量名及种类
#方法一: value_counts
df['Sex'].value_counts()
#方法二: unique
df['Sex'].unique()
df['Sex'].nunique()
#将类别文本转换为12345
#方法一: replace
df['Sex_num'] = df['Sex'].replace(['male','female'],[1,2])
#方法二: map
df['Sex_num'] = df['Sex'].map({'male': 1, 'female': 2})
三、数据重构
1、数据的合并
将data文件夹里面的所有数据都载入
text_left_up = pd.read_csv("data/train-left-up.csv")
text_left_down = pd.read_csv("data/train-left-down.csv")
text_right_up = pd.read_csv("data/train-right-up.csv")
text_right_down = pd.read_csv("data/train-right-down.csv")
使用concat方法:将数据train-left-up.csv和train-right-up.csv横向合并为一张表,并保存这张表为result_up
list_up = [text_left_up,text_right_up]
result_up = pd.concat(list_up,axis=1)
result_up.head()
使用concat方法:将train-left-down和train-right-down横向合并为一张表,并保存这张表为result_down。然后将上边的result_up和result_down纵向合并为result。
list_down=[text_left_down,text_right_down]
result_down = pd.concat(list_down,axis=1)
result = pd.concat([result_up,result_down])
result.head()
2、数据聚合与运算
GroupBy机制
python中groupby函数主要的作用是进行数据的分组以及分组后的组内运算
对于数据的分组和分组运算主要是指groupby函数的应用,具体函数的规则如下:
df.groupby([df[属性],df[属性])(指分类的属性,数据的限定定语,可以有多个).mean()(对于数据的计算方式——函数名称)
举例:
print(df[“评分”].groupby([df[“地区”],df[“类型”]]).mean())
计算泰坦尼克号男性与女性的平均票价
df = text['Fare'].groupby(text['Sex'])
means = df.mean()
means
###
Sex
female 44.479818
male 25.523893
Name: Fare, dtype: float64
统计泰坦尼克号中男女的存活人数
survived_sex = text['Survived'].groupby(text['Sex']).sum()
survived_sex.head()
###
Sex
female 233
male 109
Name: Survived, dtype: int64
统计在不同等级的票中的不同年龄的船票花费的平均值
text.groupby(['Pclass','Age'])['Fare'].mean().head()
###
Pclass Age
1 0.92 151.5500
2.00 151.5500
4.00 81.8583
11.00 120.0000
14.00 120.0000
Name: Fare, dtype: float64
四、数据可视化
可视化展示泰坦尼克号数据集中男女中生存人数分布情况(柱状图)
sex = text.groupby('Sex')['Survived'].sum()
sex.plot.bar()
plt.title('survived_count')
plt.show()
可视化展示泰坦尼克号数据集中男女中生存人与死亡人数的比例图(柱状图)
text.groupby(['Sex','Survived'])['Survived'].count().unstack().plot(kind='bar',stacked='True')
plt.title('survived_count')
plt.ylabel('count')
可视化展示泰坦尼克号数据集中不同票价的人生存和死亡人数分布情况(折线图)
# 计算不同票价中生存与死亡人数 1表示生存,0表示死亡
fare_sur = text.groupby(['Fare'])['Survived'].value_counts().sort_values(ascending=False)
fare_sur
###
Fare Survived
8.0500 0 38
7.8958 0 37
13.0000 0 26
7.7500 0 22
26.0000 0 16
..
20.2500 1 1
0 1
18.7875 1 1
0 1
15.0500 0 1
Name: Survived, Length: 330, dtype: int64
# 排序后绘折线图
fig = plt.figure(figsize=(20, 18))
fare_sur.plot(grid=True)
plt.legend()
plt.show()
可视化展示泰坦尼克号数据集中不同仓位等级的人生存和死亡人员的分布情况(柱状图)
# 1表示生存,0表示死亡
pclass_sur = text.groupby(['Pclass'])['Survived'].value_counts()
pclass_sur
###
Pclass Survived
1 1 136
0 80
2 0 97
1 87
3 0 372
1 119
Name: Survived, dtype: int64
import seaborn as sns
sns.countplot(x="Pclass", hue="Survived", data=text)
可视化展示泰坦尼克号数据集中不同年龄的人生存与死亡人数分布情况
facet = sns.FacetGrid(text, hue="Survived",aspect=3)
facet.map(sns.kdeplot,'Age',shade= True)
facet.set(xlim=(0, text['Age'].max()))
facet.add_legend()
可视化展示泰坦尼克号数据集中不同仓位等级的人年龄分布情况
text.Age[text.Pclass == 1].plot(kind='kde')
text.Age[text.Pclass == 2].plot(kind='kde')
text.Age[text.Pclass == 3].plot(kind='kde')
plt.xlabel("age")
plt.legend((1,2,3),loc="best")
通过以上的可视化例子,我们要结合数据和需求,首先要将数据找到合适的方法来处理好,之后再选出可以清楚表示出数据之间关系的图形来展示我们的数据,让数据之间的关系可以一眼看出来。
五、总结
以上便是我对于暑假所学东西的一个粗略的总结,通过这个总结也相当于将学的东西复习了一遍。学习是自己的事,学习最好的搭档就是兴趣,要乐于去学习,乐于去探索未知,这样学习起来才事半功倍。