Python将文件大小以概率分布图的方式进行统计

在计算机项目中,使用Python分析爬取的图片文件大小,筛选出小于512K的图片并展示其概率分布,以识别不可用的小图片。

《深度学习-如何提高数据集质量》

项目背景

我是在做计算机项目的时候会遇到这种问题,当使用爬虫爬取大量图片后,图片大小参差不齐,有些图片明显是不可使用的,比如很小的图片就很可疑(在机器学习的时候可能无法使用),而你又不知道小图片在你的存贮空间中的占比,这就需要Python的概率分布图来标识了。

代码功能

1.用户手动输入图片的路径。这个路径是已经整理过的了,全部都是图片。
2.将小于512K的图片筛选出来。
3.显示小于512K的图片概率分布。

代码内容

import matplotlib.pyplot as plt
import os


def getFileSizeList(path):
    sizeList = []
    for filename in os.listdir(path):
        fullName = os.path.join(path, filename)
        size = os.path.getsize(fullName)
        #只把小于512K的图片放入队列
        if size // 1024 < 512:
            sizeList.append(size)
    return sizeList

x = getFileSizeList('/home/king/PycharmProjects/nsfw_data_scrapper/raw_data/sexy')

fig,(ax0,ax1) = plt.subplots(nrows=2,figsize=(9,6))

#第二个参数是柱子宽一些还是窄一些,越大越窄越密,数据多的时候将这个数值写大一些。
ax0.hist(x,100,normed=1,histtype='bar',facecolor='yellowgreen',alpha=0.75)
##pdf概率分布图,一万个数落在某个区间内的数有多少个
ax0.set_title('pdf')

ax1.hist(x,100,normed=1,histtype='bar',facecolor='pink',alpha=0.75,cumulative=True,rwidth=0.8)
#cdf累计概率函数,cumulative累计。比如需要统计小于5的数的概率
ax1.set_title("cdf")

fig.subplots_adjust(hspace=0.4)
plt.show()

概率分布效果

在这里插入图片描述

很明显小于512K的图片是一个高高的柱子,占比最大。在这里面应该能找到不少可疑的图片。

<think>好的,用户现在想要了解如何在ArcGIS中制作概率分布图。首先,我需要确认用户所说的概率分布图具体指的是哪种类型。在统计学和地理信息系统中,概率分布图可能有不同的含义,比如基于概率模型的插值结果、核密度估计图,或者某种统计分布的可视化,比如正态分布。 回顾之前的对话历史,用户之前询问过样条插值的使用步骤,所以可能他们现在想进一步进行数据分布的可视化,比如核密度估计图,这在ArcGIS中也是常用的分析工具。或者用户可能想展示某种统计分布,比如显示数据符合正态分布或泊松分布的情况。 接下来,我需要确定ArcGIS中支持哪些生成概率分布图的工具。常见的工具有核密度分析(Kernel Density),用于生成密度分布图,反映点数据的聚集情况。此外,地理处理工具中的直方图工具可以生成数据的频率分布图,但可能需要在其他软件(如Excel或Python)中进一步处理成概率分布图。另外,如果用户是指空间上的概率分布,比如预测某事件发生的概率,可能需要使用地理统计工具,如经验贝叶斯克里金法(EBK)或其他空间插值方法,生成概率表面。 用户可能的需求可能是制作核密度图,或者展示数据符合某种概率分布的情况。我需要分步骤说明这两种情况的操作方法,确保涵盖不同的可能性。同时,要考虑到用户可能对术语不熟悉,需要明确解释每个步骤的目的和参数设置的意义。 例如,核密度分析的步骤包括数据准备、选择工具、设置参数(如搜索半径、输出像元大小)、结果可视化等。对于统计分布图,可能需要导出属性数据到统计软件,或者使用ArcGIS的图表工具生成直方图,并结合理论分布曲线进行比较。 另外,需要注意用户的数据类型,是点数据、面数据还是其他类型。根据不同的数据类型,制作概率分布图的方法也不同。例如,点数据适合核密度分析,而面数据可能需要聚合统计。 还要考虑到用户可能的误区,比如混淆密度图和概率分布图,或者不了解参数设置对结果的影响。因此,在回答中需要加入注意事项,帮助用户避免常见错误,比如选择适当的带宽(搜索半径)或验证数据分布是否符合理论假设。 最后,总结制作概率分布图的不同方法,并提供示例应用场景,帮助用户根据自身需求选择合适的方法。同时,推荐进一步学习资源或工具,如使用Python的matplotlib或Seaborn库进行更复杂的概率分布可视化,如果用户需要更高级的分析的话。</think>在ArcGIS中制作**概率分布图**的核心思路是通过空间分析工具或统计工具,将数据分布特征可视化。以下是两种常见场景的操作方法: --- ### **一、空间概率分布图(如核密度分析)** **适用场景**:展示点要素在空间上的聚集概率(如犯罪事件热点、物种分布密度)。 **工具**:`核密度分析(Kernel Density)` #### **操作步骤** 1. **数据准备** - 加载点要素数据(如`crime_points.shp`),确保包含数值型字段(如事件频次字段`Count`)。 2. **启动核密度工具** - **路径**: `ArcToolbox` → `Spatial Analyst工具` → `密度分析` → `核密度分析` - **关键参数**: - `输入点要素`:选择点图层(如`crime_points`) - `Population字段`:若每个点代表多个事件,选择频次字段(如`Count`);若均为单事件,留空。 - `输出栅格`:设置保存路径(如`KernelDensity_Crime`) - `搜索半径(Bandwidth)`: - 默认按**Silverman准则**计算:$$ h = 0.9 \times \min\left(\sigma, \frac{\text{IQR}}{1.34}\right) \times n^{-1/5} $$ - 手动调整:密集数据缩小半径(如200米),稀疏数据增大半径(如1000米) - `输出像元大小`:建议与数据精度匹配(如10米) 3. **结果可视化** - 右键栅格图层 → `符号系统` → 选择`分级色彩`,调整色带和分类方法(如自然间断点)。 - 叠加道路、行政区划等参考图层增强可读性。 --- ### **二、统计概率分布图(如正态分布验证)** **适用场景**:验证数据是否符合某种概率分布(如正态分布、泊松分布)。 **工具**:`直方图+分布曲线叠加`(需结合属性表导出与外部工具) #### **操作步骤** 1. **导出数据统计值** - 右键图层 → `打开属性表` → 右键目标字段(如`Income`) → `统计` → 记录均值($\mu$)、标准差($\sigma$)。 - 导出数据:`表选项` → `导出`为CSV文件(如`income_data.csv`)。 2. **生成直方图与理论分布曲线** - **ArcGIS内置图表**(基础版): - `插入` → `图表` → `直方图` → 选择字段,调整箱数(Bins)。 - 缺点:无法叠加理论分布曲线。 - **外部工具推荐**: - **Excel/Python/R**:导入CSV数据,绘制直方图并叠加正态分布曲线。 - **Excel公式示例**(正态分布概率密度): $$ f(x) = \frac{1}{\sigma\sqrt{2\pi}} e^{-\frac{(x-\mu)^2}{2\sigma^2}} $$ - **Python代码示例**(使用Matplotlib): ```python import pandas as pd import matplotlib.pyplot as plt import scipy.stats as stats data = pd.read_csv('income_data.csv') mu, sigma = data['Income'].mean(), data['Income'].std() plt.hist(data['Income'], bins=20, density=True, alpha=0.6) x = np.linspace(mu - 3*sigma, mu + 3*sigma, 100) plt.plot(x, stats.norm.pdf(x, mu, sigma), 'r--') plt.show() ``` --- ### **三、参数优化与验证** #### **核密度分析参数调优** | 问题现象 | 优化方法 | |-------------------------|-----------------------------------| | 结果过于平滑(图A) | 缩小搜索半径,增加局部细节 | | 结果颗粒感强(图B) | 增大搜索半径,降低噪声干扰 | #### **统计分布验证方法** 1. **Q-Q图检验**: - 将数据分位数与理论分布分位数对比,直线趋势表示符合分布。 - **工具**:使用Python `statsmodels`库或R语言`qqplot`函数。 2. **K-S检验**: - 计算统计量$D$:$$ D = \max|F_n(x) - F(x)| $$ - 若$p$-值>0.05,则接受原假设(数据符合分布)。 --- ### **四、注意事项** 1. **数据清洗**: - 剔除异常值(如Z-Score >3的数据),避免扭曲分布形态。 2. **投影选择**: - 核密度分析需使用**投影坐标系**(确保距离计算准确)。 3. **样本量要求**: - 验证统计分布时,建议样本量≥30(中心极限定理适用性)。 --- ### **示例:人口密度概率分布** 1. **输入数据**:城市社区人口点数据(字段`Population`)。 2. **核密度分析参数**: - 搜索半径=500米(依据社区平均间距设定) - 像元大小=50米 3. **输出结果**:高概率区(红色)对应商业中心,低概率区(蓝色)对应郊区。 --- 通过以上方法,可灵活生成空间或统计维度的概率分布图。若需高级分析(如多元联合分布),建议结合Python `seaborn`库或R语言实现。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值